feat: filtrar contratos excluidos en /test-rda
- candidatos: omite contratos con excluir=1 del listado - preview: retorna flag excluido y pasa contrato_map (fix bug) - enviar: bloquea si contrato excluido, pasa contrato_map al generar RDA Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
200a3f550b
commit
c9715e6a7e
+21
-4
@@ -13,6 +13,7 @@ from app.services.json_generator import (
|
|||||||
agrupar_por_recepcion,
|
agrupar_por_recepcion,
|
||||||
)
|
)
|
||||||
from app.services.api_client import get_tns_token, TNS_BASE
|
from app.services.api_client import get_tns_token, TNS_BASE
|
||||||
|
from app.routes.contratos import load_contrato_map, load_excluded_set
|
||||||
|
|
||||||
router = APIRouter(prefix="/test-rda", tags=["test-rda"])
|
router = APIRouter(prefix="/test-rda", tags=["test-rda"])
|
||||||
|
|
||||||
@@ -161,15 +162,19 @@ async def get_candidatos(request: Request, user: dict = Depends(get_current_user
|
|||||||
if not ok2:
|
if not ok2:
|
||||||
return JSONResponse({"error": err2})
|
return JSONResponse({"error": err2})
|
||||||
|
|
||||||
|
excluded = load_excluded_set()
|
||||||
candidatos = []
|
candidatos = []
|
||||||
for row in rows:
|
for row in rows:
|
||||||
|
cod_c = str(row.get("CODCONTRATO") or "").strip()
|
||||||
|
if cod_c in excluded:
|
||||||
|
continue
|
||||||
candidatos.append({
|
candidatos.append({
|
||||||
"idrecepcion": row.get("IDRECEPCION"),
|
"idrecepcion": row.get("IDRECEPCION"),
|
||||||
"factura": row.get("NUM_FACTURA"),
|
"factura": row.get("NUM_FACTURA"),
|
||||||
"fecha": str(row.get("FECHA_RECEPCION", ""))[:10],
|
"fecha": str(row.get("FECHA_RECEPCION", ""))[:10],
|
||||||
"paciente": row.get("COD_PACIENTE", ""),
|
"paciente": row.get("COD_PACIENTE", ""),
|
||||||
"empresa": row.get("NIT_EMPRESA", ""),
|
"empresa": row.get("NIT_EMPRESA", ""),
|
||||||
"contrato": row.get("CODCONTRATO", ""),
|
"contrato": cod_c,
|
||||||
"examenes": row.get("EXAMENES", ""),
|
"examenes": row.get("EXAMENES", ""),
|
||||||
"total": row.get("TOTAL_EXAMENES", 0),
|
"total": row.get("TOTAL_EXAMENES", 0),
|
||||||
})
|
})
|
||||||
@@ -199,8 +204,12 @@ async def preview_rda(request: Request, user: dict = Depends(get_current_user),
|
|||||||
if not ok2 or not rows_rda:
|
if not ok2 or not rows_rda:
|
||||||
return JSONResponse({"error": err2 or "Sin registros"})
|
return JSONResponse({"error": err2 or "Sin registros"})
|
||||||
grupos = agrupar_por_recepcion(rows_rda)
|
grupos = agrupar_por_recepcion(rows_rda)
|
||||||
rda_json = generar_rda_paciente(list(grupos.values())[0], prof_def, esp_def, remis_def, prefijo_def)
|
grupo = list(grupos.values())[0]
|
||||||
return JSONResponse({"json": rda_json})
|
cod_c = str(grupo[0].get("CODCONTRATO") or "").strip()
|
||||||
|
excluido = cod_c in load_excluded_set()
|
||||||
|
rda_json = generar_rda_paciente(grupo, prof_def, esp_def, remis_def, prefijo_def,
|
||||||
|
contrato_map=load_contrato_map())
|
||||||
|
return JSONResponse({"json": rda_json, "excluido": excluido, "contrato": cod_c})
|
||||||
|
|
||||||
|
|
||||||
@router.post("/enviar")
|
@router.post("/enviar")
|
||||||
@@ -252,6 +261,12 @@ async def test_enviar(request: Request, user: dict = Depends(get_current_user)):
|
|||||||
fb.disconnect()
|
fb.disconnect()
|
||||||
return JSONResponse({"error": "Sin registros (¿NUM_FACTURA = 0 o contrato vacío?)"})
|
return JSONResponse({"error": "Sin registros (¿NUM_FACTURA = 0 o contrato vacío?)"})
|
||||||
|
|
||||||
|
# Bloquear si el contrato está excluido
|
||||||
|
cod_c_check = str(rows_rda[0].get("CODCONTRATO") or "").strip()
|
||||||
|
if cod_c_check in load_excluded_set():
|
||||||
|
fb.disconnect()
|
||||||
|
return JSONResponse({"error": f"Contrato {cod_c_check} está excluido del envío TNS"})
|
||||||
|
|
||||||
# Pacientes únicos
|
# Pacientes únicos
|
||||||
pacientes_unicos = {}
|
pacientes_unicos = {}
|
||||||
for row in rows_rda:
|
for row in rows_rda:
|
||||||
@@ -301,12 +316,14 @@ async def test_enviar(request: Request, user: dict = Depends(get_current_user)):
|
|||||||
|
|
||||||
# Paso 2: enviar RDA
|
# Paso 2: enviar RDA
|
||||||
grupos = agrupar_por_recepcion(rows_rda)
|
grupos = agrupar_por_recepcion(rows_rda)
|
||||||
|
contrato_map = load_contrato_map()
|
||||||
|
|
||||||
async with httpx.AsyncClient(timeout=30) as client:
|
async with httpx.AsyncClient(timeout=30) as client:
|
||||||
for id_rec, grupo_rows in grupos.items():
|
for id_rec, grupo_rows in grupos.items():
|
||||||
num_factura = str(grupo_rows[0].get("NUM_FACTURA") or "").strip()
|
num_factura = str(grupo_rows[0].get("NUM_FACTURA") or "").strip()
|
||||||
numero_override = num_factura
|
numero_override = num_factura
|
||||||
rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def, remis_def, prefijo_def, numero_override)
|
rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def, remis_def, prefijo_def, numero_override,
|
||||||
|
contrato_map=contrato_map)
|
||||||
examenes = [r.get("COD_EXAMEN", "") for r in grupo_rows]
|
examenes = [r.get("COD_EXAMEN", "") for r in grupo_rows]
|
||||||
try:
|
try:
|
||||||
r = await client.post(endpoint_rda, json=rda_json, headers=headers)
|
r = await client.post(endpoint_rda, json=rda_json, headers=headers)
|
||||||
|
|||||||
Reference in New Issue
Block a user