fix(automation): skip RDA/preserv si el tercero del paciente falló

Acumula COD_PACIENTE en terceros_fallidos cuando paso1 falla.
En paso2 y paso3, si el paciente está en esa lista se omite el envío
con mensaje claro "Omitido: tercero no creado en TNS".
Evita el error confuso "paciente no existe" en TNS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-22 22:47:49 -05:00
co-authored by Claude Sonnet 4.6
parent 599391739f
commit 9bd247219e
+26
View File
@@ -571,6 +571,9 @@ async def run_automation(
"paso4_ventas": {"enviados": 0, "errores": 0, "detalle": []},
}
# Pacientes cuyo tercero falló → no enviar RDA para ellos
terceros_fallidos: set[str] = set()
# ── PASO 1: Enviar Terceros (particulares + EPS) ─────────────────────────
if "terceros" in pasos_set:
async with httpx.AsyncClient(timeout=timeout) as client:
@@ -594,6 +597,7 @@ async def run_automation(
resultado["paso1_terceros"]["enviados"] += 1
else:
resultado["paso1_terceros"]["errores"] += 1
terceros_fallidos.add(codigo_pac)
resultado["paso1_terceros"]["detalle"].append({
"codigo": codigo_pac, "doc": doc, "nombre": nombre, "ok": ok, "msg": msg,
@@ -631,6 +635,17 @@ async def run_automation(
if "rda" in pasos_set:
async with httpx.AsyncClient(timeout=timeout) as client:
for id_recepcion, grupo_rows in grupos.items():
cod_pac = str(grupo_rows[0].get("COD_PACIENTE", ""))
if cod_pac in terceros_fallidos:
resultado["paso2_rda"]["detalle"].append({
"idrecepcion": id_recepcion,
"factura": str(grupo_rows[0].get("NUM_FACTURA") or id_recepcion),
"paciente": cod_pac,
"examenes": len(grupo_rows),
"ok": False, "msg": "Omitido: tercero no creado en TNS",
})
resultado["paso2_rda"]["errores"] += 1
continue
num_fac = str(grupo_rows[0].get("NUM_FACTURA") or "").strip()
num_override = num_fac
rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def, remis_def, prefijo_def, num_override, contrato_map=contrato_map, sin_contrato_set=sin_contrato_set)
@@ -670,6 +685,17 @@ async def run_automation(
if "preserv" in pasos_set:
async with httpx.AsyncClient(timeout=timeout) as client:
for id_ps, grupo_rows in grupos_ps.items():
cod_pac = str(grupo_rows[0].get("COD_PACIENTE", ""))
if cod_pac in terceros_fallidos:
resultado["paso3_preserv"]["detalle"].append({
"idrecepcion": id_ps,
"factura": str(grupo_rows[0].get("PS_NUMERO") or id_ps),
"paciente": cod_pac,
"examenes": len(grupo_rows),
"ok": False, "msg": "Omitido: tercero no creado en TNS",
})
resultado["paso3_preserv"]["errores"] += 1
continue
ps_prefijo = str(grupo_rows[0].get("PS_PREFIJO") or "SC").strip()
ps_numero = str(grupo_rows[0].get("PS_NUMERO") or "").strip()
rda_json = generar_rda_paciente(