fix/de los tickets T2026-05-027, T2025-09-004 y T2025-09-056
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user