feature/capturar errores, evitar duplicados, eliminar manejar nuevas flags para descargar datos de vucem

This commit is contained in:
2026-06-15 11:20:58 -06:00
parent 042d02e240
commit b9c6ab89c3
10 changed files with 326 additions and 90 deletions

View File

@@ -95,7 +95,17 @@ async def consume_ws_get_partida(**kwargs):
)
)
# Una partida solo cuenta como descargada si la respuesta es una
# consultarPartidaRespuesta real sin <tieneError>true</tieneError>.
# Cualquier otro contenido (eco de la petición, fault sin tieneError,
# HTML de proxy, etc.) se guarda como ERROR y no marca descargado.
motivo_error = None
if soap_error(soap_response):
motivo_error = "La respuesta contiene un error de VUCEM"
elif "consultarpartidarespuesta" not in (soap_response.text or "").lower():
motivo_error = "La respuesta no contiene el nodo consultarPartidaRespuesta"
if motivo_error:
error_file_name = f"vu_PT_{pedimento_app}_{partida.get('numero', '')}_ERROR.xml"
try:
document_response = await partida_rest_controller.post_or_update_document(
@@ -109,13 +119,13 @@ async def consume_ws_get_partida(**kwargs):
except Exception as e:
logger.error(f"Error al guardar la respuesta de error: {e}")
# Continuamos con el error original
logger.error("Error en la respuesta del servicio SOAP")
logger.error(f"Error en la respuesta del servicio SOAP: {motivo_error}")
raise HTTPException(
status_code=500,
detail=create_error_response(
message="Error en la respuesta del servicio SOAP",
errors=["La respuesta contiene un error de VUCEM"],
errors=[motivo_error],
data={"soap_response": soap_response.text[:500] if hasattr(soap_response, 'text') else None},
metadata={
"partida_numero": partida.get('numero'),
@@ -123,7 +133,7 @@ async def consume_ws_get_partida(**kwargs):
}
)
)
logger.info("Respuesta SOAP exitosa, enviando documento")
# Enviar documento
@@ -151,6 +161,22 @@ async def consume_ws_get_partida(**kwargs):
)
)
# post_or_update_document retorna None en error (no lanza excepción);
# sin documento guardado la partida NO debe marcarse como descargada.
if not document_response:
logger.error(f"El documento de la partida no se guardó, no se marca descargado: {_file_name}")
raise HTTPException(
status_code=500,
detail=create_error_response(
message="Error al guardar el documento de la partida",
errors=["El API no confirmó el guardado del documento"],
metadata={
"file_name": _file_name,
"partida_numero": partida.get('numero')
}
)
)
logger.info("Documento enviado, actualizando status de Partida")
# Actualizar status de la partida