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:
co-authored by
Claude Sonnet 4.6
parent
599391739f
commit
9bd247219e
@@ -571,6 +571,9 @@ async def run_automation(
|
|||||||
"paso4_ventas": {"enviados": 0, "errores": 0, "detalle": []},
|
"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) ─────────────────────────
|
# ── PASO 1: Enviar Terceros (particulares + EPS) ─────────────────────────
|
||||||
if "terceros" in pasos_set:
|
if "terceros" in pasos_set:
|
||||||
async with httpx.AsyncClient(timeout=timeout) as client:
|
async with httpx.AsyncClient(timeout=timeout) as client:
|
||||||
@@ -594,6 +597,7 @@ async def run_automation(
|
|||||||
resultado["paso1_terceros"]["enviados"] += 1
|
resultado["paso1_terceros"]["enviados"] += 1
|
||||||
else:
|
else:
|
||||||
resultado["paso1_terceros"]["errores"] += 1
|
resultado["paso1_terceros"]["errores"] += 1
|
||||||
|
terceros_fallidos.add(codigo_pac)
|
||||||
|
|
||||||
resultado["paso1_terceros"]["detalle"].append({
|
resultado["paso1_terceros"]["detalle"].append({
|
||||||
"codigo": codigo_pac, "doc": doc, "nombre": nombre, "ok": ok, "msg": msg,
|
"codigo": codigo_pac, "doc": doc, "nombre": nombre, "ok": ok, "msg": msg,
|
||||||
@@ -631,6 +635,17 @@ async def run_automation(
|
|||||||
if "rda" in pasos_set:
|
if "rda" in pasos_set:
|
||||||
async with httpx.AsyncClient(timeout=timeout) as client:
|
async with httpx.AsyncClient(timeout=timeout) as client:
|
||||||
for id_recepcion, grupo_rows in grupos.items():
|
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_fac = str(grupo_rows[0].get("NUM_FACTURA") or "").strip()
|
||||||
num_override = num_fac
|
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)
|
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:
|
if "preserv" in pasos_set:
|
||||||
async with httpx.AsyncClient(timeout=timeout) as client:
|
async with httpx.AsyncClient(timeout=timeout) as client:
|
||||||
for id_ps, grupo_rows in grupos_ps.items():
|
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_prefijo = str(grupo_rows[0].get("PS_PREFIJO") or "SC").strip()
|
||||||
ps_numero = str(grupo_rows[0].get("PS_NUMERO") or "").strip()
|
ps_numero = str(grupo_rows[0].get("PS_NUMERO") or "").strip()
|
||||||
rda_json = generar_rda_paciente(
|
rda_json = generar_rda_paciente(
|
||||||
|
|||||||
Reference in New Issue
Block a user