feature/capturar errores, evitar duplicados, eliminar manejar nuevas flags para descargar datos de vucem
This commit is contained in:
@@ -146,6 +146,13 @@ async def consume_ws_get_cove(**kwargs):
|
||||
logger.error(f"Error detectado en la respuesta SOAP: {str(e)}")
|
||||
raise Exception(f"Error en la respuesta SOAP: {str(e)}")
|
||||
|
||||
# Validar que el documento quedó persistido en la API antes de marcar el
|
||||
# COVE como descargado (T2026-05-027): post_or_update_document retorna
|
||||
# None en error sin lanzar excepción
|
||||
if not document_response or document_response.get("id") is None:
|
||||
logger.error(f"No se pudo persistir el COVE {cove} en la API; el estatus no se actualiza")
|
||||
raise Exception(f"No se pudo persistir el COVE {cove} en la API")
|
||||
|
||||
logger.info("Documento enviado, actualizando status de COVE")
|
||||
|
||||
# Actualizar status del COVE
|
||||
@@ -329,6 +336,15 @@ async def consume_ws_get_acuse_cove(**kwargs):
|
||||
identifier=cove_identifier,
|
||||
)
|
||||
|
||||
# Validar la subida antes de marcar el acuse como descargado (T2026-05-027):
|
||||
# post_or_update_document retorna None en error sin lanzar excepción
|
||||
if not rest_response or rest_response.get("id") is None:
|
||||
logger.error("Error al enviar el acuse de COVE a la API interna; el estatus no se actualiza")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail="No se pudo persistir el acuse del COVE en la API; el estatus no se actualiza"
|
||||
)
|
||||
|
||||
acuse_status = await change_acuse_status(
|
||||
cove=kwargs.get('cove'),
|
||||
status=True,
|
||||
@@ -507,6 +523,7 @@ async def change_cove_status(cove: dict, status: bool, pedimento: dict):
|
||||
data = {
|
||||
"id": cove.get("id"),
|
||||
"cove_descargado": status,
|
||||
"cove_estado": "descargado" if status else "pendiente",
|
||||
"numero_cove": cove.get("cove"),
|
||||
"pedimento": pedimento.get("id"),
|
||||
"organizacion": pedimento.get("organizacion"),
|
||||
@@ -514,6 +531,11 @@ async def change_cove_status(cove: dict, status: bool, pedimento: dict):
|
||||
|
||||
response = await coves_rest_controller.put_cove_data(cove_id=cove.get("id"), data=data)
|
||||
|
||||
# Nunca reportar éxito si el estatus no quedó persistido (T2026-05-027)
|
||||
if response is None:
|
||||
logger.error(f"No se pudo actualizar el estatus del COVE {cove.get('cove')} en la API")
|
||||
raise Exception(f"Fallo al actualizar el estatus del COVE {cove.get('cove')}")
|
||||
|
||||
return response
|
||||
|
||||
|
||||
@@ -521,14 +543,46 @@ async def change_acuse_status(cove: dict, status: bool, pedimento: dict):
|
||||
data = {
|
||||
"id": cove.get("id"),
|
||||
"acuse_cove_descargado": status,
|
||||
"acuse_cove_estado": "descargado" if status else "pendiente",
|
||||
"numero_cove": cove.get("cove"),
|
||||
"pedimento": pedimento.get("id"),
|
||||
"organizacion": pedimento.get("organizacion"),
|
||||
}
|
||||
|
||||
print(data)
|
||||
response = await coves_rest_controller.put_cove_data(cove_id=cove.get("id"), data=data)
|
||||
|
||||
# Nunca reportar éxito si el estatus no quedó persistido (T2026-05-027)
|
||||
if response is None:
|
||||
logger.error(f"No se pudo actualizar el estatus del acuse del COVE {cove.get('cove')} en la API")
|
||||
raise Exception(f"Fallo al actualizar el estatus del acuse del COVE {cove.get('cove')}")
|
||||
|
||||
return response
|
||||
|
||||
|
||||
async def marcar_error_cove(cove: dict, pedimento: dict, mensaje: str, acuse: bool = False, definitivo: bool = False):
|
||||
"""
|
||||
Reporta un fallo de descarga al registro de negocio (T2026-05-027).
|
||||
|
||||
- definitivo=False (fallo transitorio): solo registra ultimo_error; el registro
|
||||
permanece 'pendiente' y el tope de intentos automáticos del backend gobierna
|
||||
la transición a 'error'.
|
||||
- definitivo=True (fallo permanente: VUCEM responde que no existe, credencial
|
||||
rechazada): transiciona de inmediato a 'error'; queda fuera del ciclo
|
||||
automático y solo el reproceso manual o el reset lo reincorporan.
|
||||
"""
|
||||
campo = "acuse_cove_estado" if acuse else "cove_estado"
|
||||
data = {
|
||||
"id": cove.get("id"),
|
||||
"ultimo_error": (mensaje or "Error de descarga en VUCEM")[:2000],
|
||||
"numero_cove": cove.get("cove"),
|
||||
"pedimento": pedimento.get("id"),
|
||||
"organizacion": pedimento.get("organizacion"),
|
||||
}
|
||||
if definitivo:
|
||||
data[campo] = "error"
|
||||
response = await coves_rest_controller.put_cove_data(cove_id=cove.get("id"), data=data)
|
||||
if response is None:
|
||||
logger.error(f"No se pudo registrar el error del COVE {cove.get('cove')} en la API")
|
||||
return response
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user