feat: backfill_document_links_legacy para docs legados de cove/edoc por numero (T2025-09-004)
Algunos documentos viejos quedaron con nomenclatura olvidada (otro pedimento_app y/o prefijo, p.ej. vu_EDC_0201_800_..._04382515ZIFF5) que el matcher estricto no liga. Como el numero_cove/numero_edocument es unico y esta en el nombre, este comando los liga por ese numero (con frontera), sin exigir app ni prefijo. Solo cove/edoc (llaves unicas); partida queda fuera (enteros cortos -> colisiones) y nativos no tienen entidad. Correr despues de backfill_document_links. Agrega core.document_links.numero_en_nombre. Fix: el DISTINCT de pedimento_id limpia el ordering por defecto del modelo para no duplicar. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,7 @@ Mapa tipo→sección (autoritativo, microservice/api/api_v2/modules/*/services.p
|
||||
"""
|
||||
|
||||
import posixpath
|
||||
import re
|
||||
|
||||
from core.partida_docs import es_doc_de_partida
|
||||
|
||||
@@ -74,6 +75,22 @@ def coincide(nombre_archivo, seccion, pedimento_app, numero):
|
||||
)
|
||||
|
||||
|
||||
def numero_en_nombre(nombre_archivo, numero):
|
||||
"""True si `numero` aparece como token completo en el basename (con frontera
|
||||
`_`/`.`/inicio/fin), SIN exigir prefijo ni pedimento_app.
|
||||
|
||||
Para documentos LEGADOS cuyo nombre trae otro app/prefijo (p.ej.
|
||||
`vu_EDC_0201_800_..._04382515ZIFF5_hex.pdf`) pero cuyo número de cove/edoc
|
||||
(único y largo) sí está en el nombre. NO usar con partida (enteros cortos →
|
||||
colisiones).
|
||||
"""
|
||||
base = posixpath.basename(nombre_archivo or "").lower()
|
||||
num = re.escape(str(numero).strip().lower())
|
||||
if not num:
|
||||
return False
|
||||
return re.search(rf"(?:^|_){num}(?:_|\.|$)", base) is not None
|
||||
|
||||
|
||||
def match_entidad(nombre_archivo, seccion, pedimento_app, entidades):
|
||||
"""Devuelve la entidad de `entidades` cuyo número coincide con el archivo, o None.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user