feat: resolve exam prices via TARIFA+EMPRESA JOIN, show company name

- PRECIO now falls back to catalog price (TARIFA) when 0/null
- JOIN EMPRESA + EMPRESA_SUB + TARIFA in exam query
- NOM_EMPRESA propagated to log and historial display

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-18 14:58:10 -05:00
co-authored by Claude Sonnet 4.6
parent 7aa02fe6ac
commit 6cbf0732e6
3 changed files with 24 additions and 15 deletions
+21 -13
View File
@@ -35,24 +35,30 @@ WHERE CAST(r.FECHA_RECEPCION AS DATE) = CURRENT_DATE
_SQL_EXAMENES_HOY = """
SELECT
TRIM(p.DOCIDENT) AS DOCIDENT,
TRIM(p.DOCIDENT) AS DOCIDENT,
r.IDRECEPCION,
r.HORAINICIORECEPCION,
TRIM(rel.COD_EXAMEN) AS COD_EXAMEN,
TRIM(ex.NOMBRE) AS NOM_EXAMEN,
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
rel.PRECIO,
TRIM(r.DIAG_PPAL) AS DIAG_PPAL,
TRIM(d.CONCEPTO) AS DIAG_CONCEPTO,
TRIM(m.DOCIDMEDICO) AS DOCIDMEDICO,
TRIM(r.NIT_EMPRESA) AS NIT_EMPRESA,
TRIM(rel.COD_EXAMEN) AS COD_EXAMEN,
TRIM(ex.NOMBRE) AS NOM_EXAMEN,
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
COALESCE(NULLIF(rel.PRECIO, 0), t.VALOR, 0) AS PRECIO,
TRIM(r.DIAG_PPAL) AS DIAG_PPAL,
TRIM(d.CONCEPTO) AS DIAG_CONCEPTO,
TRIM(m.DOCIDMEDICO) AS DOCIDMEDICO,
TRIM(r.NIT_EMPRESA) AS NIT_EMPRESA,
TRIM(e.NOMBRE) AS NOM_EMPRESA,
r.VALORTOTAL
FROM RECEPCION r
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
LEFT JOIN EXAMEN ex ON TRIM(ex.CODIGO) = TRIM(rel.COD_EXAMEN)
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
LEFT JOIN EXAMEN ex ON TRIM(ex.CODIGO) = TRIM(rel.COD_EXAMEN)
LEFT JOIN DIAGNOSTICO d ON TRIM(d.COD_DIAG) = TRIM(r.DIAG_PPAL)
LEFT JOIN MEDICO m ON m.CODIGO = r.COD_MEDICO
JOIN PACIENTE p ON p.CODIGO = r.COD_PACIENTE
LEFT JOIN MEDICO m ON m.CODIGO = r.COD_MEDICO
JOIN PACIENTE p ON p.CODIGO = r.COD_PACIENTE
LEFT JOIN EMPRESA e ON TRIM(e.NIT) = TRIM(r.NIT_EMPRESA)
LEFT JOIN EMPRESA_SUB es ON TRIM(es.NIT_EMP) = TRIM(r.NIT_EMPRESA)
AND TRIM(es.SUBGRUPO) = TRIM(r.SUBGRUPO)
LEFT JOIN TARIFA t ON TRIM(t.COD_EXAMEN) = TRIM(rel.COD_EXAMEN)
AND t.TARIFA = COALESCE(es.TARIFA, e.TARIFA)
WHERE CAST(r.FECHA_RECEPCION AS DATE) = CURRENT_DATE
AND r.NUM_FACTURA > 0
ORDER BY r.IDRECEPCION
@@ -159,6 +165,7 @@ async def sync_recientes(ventana_min: int = 2) -> dict:
"diagnostico_nombre": (ex.get("DIAG_CONCEPTO") or "").strip(),
"medico_docidmedico": (ex.get("DOCIDMEDICO") or "").strip(),
"nit_empresa": (ex.get("NIT_EMPRESA") or "").strip(),
"nom_empresa": (ex.get("NOM_EMPRESA") or "").strip(),
"valor_total": _safe_num(ex.get("VALORTOTAL")),
})
@@ -176,6 +183,7 @@ async def sync_recientes(ventana_min: int = 2) -> dict:
entry["diagnostico_cod"] = first.get("diagnostico_cod", "")
entry["diagnostico_nombre"] = first.get("diagnostico_nombre", "")
entry["nit_empresa"] = first.get("nit_empresa", "")
entry["nom_empresa"] = first.get("nom_empresa", "")
entry["valor_total"] = first.get("valor_total")
entry["examenes_det"] = [
{"cups": e.get("cups", ""), "nombre": e.get("nombre", ""), "precio": e.get("precio")}
+1
View File
@@ -39,6 +39,7 @@ def guardar_sync_log(
"diagnostico_cod": d.get("diagnostico_cod", ""),
"diagnostico_nombre": d.get("diagnostico_nombre", ""),
"nit_empresa": d.get("nit_empresa", ""),
"nom_empresa": d.get("nom_empresa", ""),
"valor_total": d.get("valor_total"),
"examenes_det": d.get("examenes_det", []),
} for d in detalle_raw],
+2 -2
View File
@@ -363,8 +363,8 @@ async function cargarHistorialScheduler() {
? `<span class="text-orange-600">${p.diagnostico_cod}</span>${p.diagnostico_nombre ? ' · ' + p.diagnostico_nombre : ''}`
: '<span class="text-gray-300">Sin diagnóstico</span>';
const empresa = p.nit_empresa
? `<span class="text-teal-600">${p.nit_empresa}</span>`
const empresa = (p.nom_empresa || p.nit_empresa)
? `<span class="text-teal-600">${p.nom_empresa || p.nit_empresa}</span>`
: '<span class="text-gray-300">Sin empresa</span>';
const valor = p.valor_total > 0