« Module:IdentifierRACJ » : différence entre les versions

De alcolois
Aller à la navigation Aller à la recherche
Nouvelle mouture
Nouvelle version bogue capture en double
Ligne 3 : Ligne 3 :
function p.extraireNoDeDecision(frame)
function p.extraireNoDeDecision(frame)
     local texte = frame.args[1] or ""
     local texte = frame.args[1] or ""
     local identifiant = string.match(texte, "(%d%d%-500%d%d%d%d)")
 
    -- 1. Match un identifiant de type dd-500xxxx (avec frontières)
     local identifiant = string.match(texte, "(%f[%d]%d%d%-500%d%d%d%d%f[%D])")
     if identifiant then
     if identifiant then
         return identifiant
         return identifiant
     end
     end
     identifiant = string.match(texte, "(%d%d%-%d%d%d%d%d%d%d)")
 
     return identifiant or ""
     -- 2. Match un identifiant de type dd-ddddddd UNIQUEMENT s’il n’est pas suivi d’un -ddd
    for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
        local fullMatch = string.match(texte, id .. "%-%d%d%d")
        if not fullMatch then
            return id
        end
    end
 
     return ""
end
end



Version du 2 juin 2025 à 18:49


local p = {}

function p.extraireNoDeDecision(frame)
    local texte = frame.args[1] or ""

    -- 1. Match un identifiant de type dd-500xxxx (avec frontières)
    local identifiant = string.match(texte, "(%f[%d]%d%d%-500%d%d%d%d%f[%D])")
    if identifiant then
        return identifiant
    end

    -- 2. Match un identifiant de type dd-ddddddd UNIQUEMENT s’il n’est pas suivi d’un -ddd
    for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
        local fullMatch = string.match(texte, id .. "%-%d%d%d")
        if not fullMatch then
            return id
        end
    end

    return ""
end

function p.extraireNoDeDossier(frame)
    local texte = frame.args[1] or ""
    
    -- Extraire le premier identifiant, qu'il soit 500xxxx ou non
    local decision = p.extraireNoDeDecision{ args = { texte } }
    if decision == "" then return "" end

    local deja = {}
    local prefixesExclus = {}
    local identifiants = {}
    deja[decision] = true

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

    -- 2. dd-ddddddd (sauf si déjà inclus comme préfixe)
    for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
        if not deja[id] and not prefixesExclus[id] then
            deja[id] = true
            table.insert(identifiants, id)
        end
    end

    -- 3. ddd-ddd
    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

    -- 4. 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

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

return p