From 6905a4132e14203242568389f9e15eb534b1a776 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Fri, 26 Jun 2026 19:59:31 -0500 Subject: [PATCH] =?UTF-8?q?Simplifica=20numero=20=C3=BAnico=20en=20TNS:=20?= =?UTF-8?q?siempre=20usar=20{factura}-{idrecepcion}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Elimina la lógica condicional que dependía de rda_test_log para detectar colisiones. Ahora cada IDRECEPCION siempre genera un numero único y reproducible en TNS sin consultar historial previo. Co-Authored-By: Claude Sonnet 4.6 --- app/routes/test_rda.py | 16 +++------------- app/routes/transaccion.py | 18 ++++-------------- 2 files changed, 7 insertions(+), 27 deletions(-) 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})