Module:IdentifierRACJ

Version datée du 2 juin 2025 à 18:02 par Marc (discussion | contributions) (Nouvelle mouture)

local p = {}

-- Extrait un identifiant de type dd-500xxxx (prioritaire), sinon dd-ddddddd
function p.extraireNoDeDecision(frame)
    local texte = frame.args[1] or ""
    local identifiant = string.match(texte, "(%d%d%-500%d%d%d%d)")
    if identifiant then
        return identifiant
    end
    identifiant = string.match(texte, "(%d%d%-%d%d%d%d%d%d%d)")
    return identifiant or ""
end

-- Extrait tous les identifiants secondaires valides
function p.extraireNoDeDossier(frame)
    local texte = frame.args[1] or ""
    local decision = string.match(texte, "(%d%d%-500%d%d%d%d)")

    local identifiants = {}
    local deja = {}

    if decision then
        deja[decision] = true

        -- 1. dd-ddddddd
        for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
            if not deja[id] then
                deja[id] = true
                table.insert(identifiants, id)
            end
        end

        -- 2. ddd%-ddd (must not be part of longer match)
        for id in string.gmatch(texte, "(%f[%d]%d%d%d%-%d%d%d%f[%D])") do
            if not deja[id] then
                deja[id] = true
                table.insert(identifiants, id)
            end
        end

        -- 3. dddd%-ddd
        for id in string.gmatch(texte, "(%f[%d]%d%d%d%d%-%d%d%d%f[%D])") do
            if not deja[id] then
                deja[id] = true
                table.insert(identifiants, id)
            end
        end
    end

    return table.concat(identifiants, ", ")
end

return p