Simplifica numero único en TNS: siempre usar {factura}-{idrecepcion}
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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
d9d3deef6c
commit
6905a4132e
+3
-13
@@ -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:
|
||||
|
||||
@@ -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})
|
||||
|
||||
Reference in New Issue
Block a user