Fix profesional/especialidad: use MEDICO.CODIGO first, add config defaults

- SQL query now prioritizes MEDICO.CODIGO over RECEPCION.USUARIO as profesional
  (USUARIO is the billing clerk; MEDICO is the medical professional)
- Add profesional_default and especialidad_default config keys for when
  Firebird data is empty or contains invalid values (e.g. especialidad = ".")
- generar_rda_paciente accepts default_profesional and default_especialidad params
- ensure_defaults in queries.py now updates existing query records on startup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-26 16:12:16 -05:00
co-authored by Claude Sonnet 4.6
parent fbdce1c790
commit c70f0f1062
5 changed files with 22 additions and 9 deletions
+4 -2
View File
@@ -59,7 +59,7 @@ SELECT
rel.PRECIO,
rel.FECHA_REPORTADO,
m.COD_ESPECIALIDAD,
COALESCE(NULLIF(TRIM(r.USUARIO), ''), TRIM(m.CODIGO), '') AS profesional
COALESCE(NULLIF(TRIM(m.CODIGO), ''), NULLIF(TRIM(r.USUARIO), ''), '') AS profesional
FROM RECEPCION r
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
LEFT JOIN MEDICO m ON m.CODIGO = r.COD_MEDICO
@@ -229,10 +229,12 @@ async def run_automation(
endpoint = f"{TNS_BASE}/v2/rda/RdaPaciente/Insertar"
if api_sucursal:
endpoint += f"?codigosucursal={api_sucursal}"
prof_def = configs.get("profesional_default", "")
esp_def = configs.get("especialidad_default", "")
async with httpx.AsyncClient(timeout=timeout) as client:
for id_recepcion, grupo_rows in grupos.items():
rda_json = generar_rda_paciente(grupo_rows)
rda_json = generar_rda_paciente(grupo_rows, prof_def, esp_def)
factura = str(grupo_rows[0].get("NUM_FACTURA", id_recepcion))
try:
resp = await client.post(endpoint, json=rda_json, headers=headers)
+2
View File
@@ -23,6 +23,8 @@ DEFAULT_KEYS = [
("tns_password", "Nicolas2796*+"),
("num_documento_obligado", ""),
("cod_prestador", ""),
("profesional_default", ""),
("especialidad_default", ""),
]
+7 -2
View File
@@ -51,7 +51,7 @@ WHERE p.DOCIDENT = :doc_num""",
rel.PRECIO,
rel.FECHA_REPORTADO,
m.COD_ESPECIALIDAD,
COALESCE(NULLIF(TRIM(r.USUARIO), ''), TRIM(m.CODIGO), '') AS profesional
COALESCE(NULLIF(TRIM(m.CODIGO), ''), NULLIF(TRIM(r.USUARIO), ''), '') AS profesional
FROM RECEPCION r
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
LEFT JOIN MEDICO m ON m.CODIGO = r.COD_MEDICO
@@ -79,7 +79,7 @@ WHERE r.NUM_FACTURA = :num_factura""",
rel.PRECIO,
rel.FECHA_REPORTADO,
m.COD_ESPECIALIDAD,
COALESCE(NULLIF(TRIM(r.USUARIO), ''), TRIM(m.CODIGO), '') AS profesional
COALESCE(NULLIF(TRIM(m.CODIGO), ''), NULLIF(TRIM(r.USUARIO), ''), '') AS profesional
FROM RECEPCION r
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
LEFT JOIN MEDICO m ON m.CODIGO = r.COD_MEDICO
@@ -101,6 +101,11 @@ def ensure_defaults():
"INSERT INTO queries (name, query_type, query_text, description) VALUES (?, ?, ?, ?)",
(q["name"], q["query_type"], q["query_text"], q["description"]),
)
else:
conn.execute(
"UPDATE queries SET query_text = ?, description = ? WHERE name = ?",
(q["query_text"], q["description"], q["name"]),
)
conn.commit()
conn.close()
+6 -2
View File
@@ -76,7 +76,9 @@ async def preview_transaccion(
return JSONResponse({"success": False, "message": error})
grupos = agrupar_por_recepcion(rows)
json_result = [generar_rda_paciente(grupo) for grupo in grupos.values()]
prof_def = configs.get("profesional_default", "")
esp_def = configs.get("especialidad_default", "")
json_result = [generar_rda_paciente(grupo, prof_def, esp_def) for grupo in grupos.values()]
return JSONResponse({
"success": True,
@@ -153,10 +155,12 @@ async def send_transaccion(
total_enviados = 0
total_errores = 0
resultados = []
prof_def = configs.get("profesional_default", "")
esp_def = configs.get("especialidad_default", "")
async with httpx.AsyncClient(timeout=int(configs.get("api_timeout", 30))) as client:
for id_recepcion, grupo_rows in grupos.items():
trans_json = generar_rda_paciente(grupo_rows)
trans_json = generar_rda_paciente(grupo_rows, prof_def, esp_def)
status_ok = False
response_text = ""
+3 -3
View File
@@ -96,7 +96,7 @@ def agrupar_por_recepcion(rows: list) -> dict:
return grupos
def generar_rda_paciente(rows: list) -> dict:
def generar_rda_paciente(rows: list, default_profesional: str = "", default_especialidad: str = "") -> dict:
if not rows:
return {}
h = rows[0]
@@ -126,8 +126,8 @@ def generar_rda_paciente(rows: list) -> dict:
"porcentajeIva": 0,
"impConsumo": 0,
"observacion": "",
"profesional": str(h.get("profesional") or "").strip(),
"especialidad": (lambda e: e if e not in (".", "-", "0", "00") else "")(str(row.get("COD_ESPECIALIDAD") or "").strip()),
"profesional": str(row.get("profesional") or "").strip() or default_profesional,
"especialidad": (lambda e: e if e not in (".", "-", "0", "00") else default_especialidad)(str(row.get("COD_ESPECIALIDAD") or "").strip()),
"diagnosticoprincipal": str(h.get("DIAG_PPAL") or "").strip(),
"fechaHoraRealizacion": fecha_real or egreso,
})