Fix colisión de numero de factura en TNS cuando varios IDRECEPCION comparten NUM_FACTURA
- json_generator: agrega parámetro numero_override para usar un número alternativo
- test_rda: detecta si el NUM_FACTURA ya fue enviado exitosamente (sesión o rda_test_log) y usa "{factura}-{idrecepcion}" como numero único en TNS
- transaccion: misma lógica en envío masivo, evita que el segundo IDRECEPCION de la misma factura falle con 409
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
7e0c6039b8
commit
d9d3deef6c
+18
-1
@@ -266,9 +266,24 @@ 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():
|
||||
rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def, remis_def, prefijo_def)
|
||||
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 = ""
|
||||
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:
|
||||
r = await client.post(endpoint_rda, json=rda_json, headers=headers)
|
||||
@@ -297,6 +312,8 @@ async def test_enviar(request: Request, user: dict = Depends(get_current_user)):
|
||||
"respuesta_tns": raw_resp,
|
||||
"json_enviado": rda_json,
|
||||
})
|
||||
if ok_rda:
|
||||
facturas_usadas_sesion.add(num_factura)
|
||||
db_log = get_connection()
|
||||
db_log.execute(
|
||||
"INSERT OR REPLACE INTO rda_test_log (idrecepcion, factura, contrato, ok, mensaje) VALUES (?,?,?,?,?)",
|
||||
|
||||
Reference in New Issue
Block a user