diff --git a/app/routes/test_rda.py b/app/routes/test_rda.py index 061caeb..84e56d8 100644 --- a/app/routes/test_rda.py +++ b/app/routes/test_rda.py @@ -266,23 +266,13 @@ async def test_enviar(request: Request, user: dict = Depends(get_current_user)): # Paso 2: enviar RDA grupos = agrupar_por_recepcion(rows_rda) - # Rastrear facturas usadas en esta sesión para evitar colisión en TNS - facturas_usadas_sesion: set = set() - # También verificar facturas ya exitosas en rda_test_log - db_check = get_connection() - facturas_previas = {r[0] for r in db_check.execute( - "SELECT factura FROM rda_test_log WHERE ok = 1" - ).fetchall()} - db_check.close() async with httpx.AsyncClient(timeout=30) as client: for id_rec, grupo_rows in grupos.items(): num_factura = str(grupo_rows[0].get("NUM_FACTURA") or "").strip() - # Si este numero ya fue enviado exitosamente (en esta sesión o antes), usar id único - if num_factura and (num_factura in facturas_previas or num_factura in facturas_usadas_sesion): - numero_override = f"{num_factura}-{id_rec}" - else: - numero_override = "" + # Usar siempre "{factura}-{idrecepcion}" para garantizar unicidad en TNS + # (múltiples IDRECEPCION comparten NUM_FACTURA en Firebird) + numero_override = f"{num_factura}-{id_rec}" if num_factura else str(id_rec) rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def, remis_def, prefijo_def, numero_override) examenes = [r.get("COD_EXAMEN", "") for r in grupo_rows] try: diff --git a/app/routes/transaccion.py b/app/routes/transaccion.py index a06df5f..52b52f2 100644 --- a/app/routes/transaccion.py +++ b/app/routes/transaccion.py @@ -146,12 +146,15 @@ async def send_one( api_sucursal = cfg.get("api_sucursal", "") or "00" endpoint = f"{TNS_BASE}/v2/rda/RdaPaciente/Insertar?codigosucursal={api_sucursal}" + num_factura_one = str(grupo_rows[0].get("NUM_FACTURA") or "").strip() + numero_override_one = f"{num_factura_one}-{idrecepcion}" if num_factura_one else str(idrecepcion) rda_json = generar_rda_paciente( grupo_rows, cfg.get("profesional_default", ""), cfg.get("especialidad_default", ""), cfg.get("remisionante_default", "00"), cfg.get("prefijo_tns_default", "00"), + numero_override_one, ) raw_resp = "" @@ -227,22 +230,11 @@ async def send_transaccion( api_sucursal = cfg.get("api_sucursal", "") or "00" endpoint = f"{TNS_BASE}/v2/rda/RdaPaciente/Insertar?codigosucursal={api_sucursal}" - # Rastrear facturas ya enviadas exitosamente para evitar numero duplicado en TNS - conn_check = get_connection() - facturas_ok_prev = {r[0] for r in conn_check.execute( - "SELECT DISTINCT factura FROM envios WHERE tipo='transaccion' AND status='success'" - ).fetchall()} - conn_check.close() - facturas_ok_sesion: set = set() - resultados = [] async with httpx.AsyncClient(timeout=int(cfg.get("api_timeout", 30))) as client: for id_rec, grupo_rows in grupos.items(): num_factura = str(grupo_rows[0].get("NUM_FACTURA") or "").strip() - if num_factura and (num_factura in facturas_ok_prev or num_factura in facturas_ok_sesion): - numero_override = f"{num_factura}-{id_rec}" - else: - numero_override = "" + numero_override = f"{num_factura}-{id_rec}" if num_factura else str(id_rec) rda_json = generar_rda_paciente( grupo_rows, cfg.get("profesional_default", ""), @@ -284,8 +276,6 @@ async def send_transaccion( raw_resp[:2000], msg_tns, datetime.now().isoformat(), )) - if ok_rda: - facturas_ok_sesion.add(num_factura) conn.commit() conn.close() resultados.append({"idrecepcion": id_rec, "success": ok_rda, "msg": msg_tns})