fix/de los tickets T2026-05-027, T2025-09-004 y T2025-09-056

This commit is contained in:
2026-06-15 11:18:58 -06:00
parent 7644446267
commit 23ed52c78a
29 changed files with 2992 additions and 987 deletions

View File

@@ -988,25 +988,61 @@ def auditar_integridad_coves_por_pedimento(pedimento_id):
@shared_task
def auditar_integridad_remesa_por_pedimento(pedimento_id):
"""Verifica que los COVEs del XML de remesa existan en DB para un pedimento específico."""
"""Verifica que los COVEs del XML de remesa existan en DB para un pedimento específico.
Deduce si el pedimento es consolidado desde el identificador PC del XML del
pedimento completo (fuente de verdad) en lugar del flag `remesas`. Si es
consolidado y no hay documento de remesa descargado, dispara la consulta a VUCEM.
"""
# Import local para evitar import circular (internal_services importa de auditoria)
from api.customs.tasks.internal_services import crear_procesamiento_remesa
try:
pedimento = Pedimento.objects.get(id=pedimento_id)
if not pedimento.remesas:
xml_pc = _leer_xml_pedimento_completo(pedimento)
if not xml_pc:
return {
'pedimento_id': str(pedimento_id),
'pedimento': pedimento.pedimento,
'estado': 'sin_xml_pc',
'mensaje': 'No hay pedimento completo (document_type=2) descargado',
}
xml_data = xml_controller.extract_data(xml_pc)
if not xml_data:
return {
'pedimento_id': str(pedimento_id),
'pedimento': pedimento.pedimento,
'estado': 'error',
'mensaje': 'No se pudieron extraer datos del XML del pedimento completo',
}
tiene_remesas = bool(xml_data.get('remesas'))
# Sincronizar el flag con queryset.update() para no disparar el signal
# post_save; la consulta a VUCEM se dispara explícitamente abajo
if tiene_remesas != pedimento.remesas:
Pedimento.objects.filter(id=pedimento.id).update(remesas=tiene_remesas)
pedimento.remesas = tiene_remesas
if not tiene_remesas:
return {
'pedimento_id': str(pedimento_id),
'pedimento': pedimento.pedimento,
'estado': 'sin_remesas',
'mensaje': 'Este pedimento no tiene remesas',
'mensaje': 'El pedimento completo no declara identificador PC (consolidado)',
}
doc_remesa = pedimento.documents.filter(document_type=3).first()
if not doc_remesa:
# Consolidado sin XML de remesa: solicitar la descarga a VUCEM
crear_procesamiento_remesa.apply_async(args=[str(pedimento.id)])
return {
'pedimento_id': str(pedimento_id),
'pedimento': pedimento.pedimento,
'estado': 'sin_xml',
'mensaje': 'No hay documento de remesa (document_type=3) descargado',
'estado': 'descarga_solicitada',
'mensaje': 'Pedimento consolidado sin documento de remesa; se solicitó la consulta a VUCEM',
}
remesa_xml = _leer_xml_documento(doc_remesa)