feature/capturar errores, evitar duplicados, eliminar manejar nuevas flags para descargar datos de vucem
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user