diff --git a/modules/turnero/api/buscar_cie10.php b/modules/turnero/api/buscar_cie10.php new file mode 100644 index 0000000..4479234 --- /dev/null +++ b/modules/turnero/api/buscar_cie10.php @@ -0,0 +1,22 @@ + []]); } + +$pdo = db(); +$like = '%' . $q . '%'; + +// Código exacto primero, luego coincidencias por descripción +$stmt = $pdo->prepare( + "SELECT cod_diag, concepto + FROM cie10_diagnosticos + WHERE cod_diag LIKE ? OR concepto LIKE ? + ORDER BY CASE WHEN cod_diag LIKE ? THEN 0 ELSE 1 END, cod_diag + LIMIT 12" +); +$stmt->execute([$like, $like, $like]); + +jsonOk(['items' => $stmt->fetchAll(PDO::FETCH_ASSOC)]); diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php index fc6a392..ebbaea8 100644 --- a/modules/turnero/views/recepcion.php +++ b/modules/turnero/views/recepcion.php @@ -796,7 +796,15 @@ document.addEventListener('DOMContentLoaded', function() {
+ placeholder="Código o descripción CIE-10…" + autocomplete="off" + oninput="buscarDiag()" + onblur="setTimeout(()=>document.getElementById('diag-resultados').classList.add('d-none'),150)" + onkeydown="if(event.key==='Enter'&&_diagResultados.length){event.preventDefault();seleccionarDiag(_diagResultados[0].cod_diag,_diagResultados[0].concepto);}"> +
+ +
@@ -1133,7 +1141,7 @@ document.addEventListener('DOMContentLoaded', () => { examTS = new TomSelect('#sel-examenes', { plugins: ['remove_button'], maxOptions: null, - selectOnTab: true, + selectOnTab: false, onItemAdd() { recalcularPrecios(); examTS.setTextboxValue(''); examTS.refreshOptions(false); }, onItemRemove: () => recalcularPrecios(), @@ -2355,6 +2363,37 @@ function quitarEmpresa() { document.getElementById('inp-diag').value = ''; } +// ── CIE-10 autocomplete ─────────────────────────────────────── +let _diagTimer = null, _diagResultados = []; +function buscarDiag() { + clearTimeout(_diagTimer); + _diagTimer = setTimeout(_doDiagSearch, 250); +} +async function _doDiagSearch() { + const q = document.getElementById('inp-diag').value.trim(); + const ul = document.getElementById('diag-resultados'); + if (q.length < 2) { ul.classList.add('d-none'); return; } + const res = await fetch(`${API}buscar_cie10.php?q=${encodeURIComponent(q)}`); + const j = await res.json(); + _diagResultados = j.items || []; + if (!_diagResultados.length) { + ul.innerHTML = '
  • Sin resultados
  • '; + ul.classList.remove('d-none'); return; + } + ul.innerHTML = _diagResultados.map((d, i) => ` +
  • + ${escHtml(d.cod_diag)} + ${escHtml(d.concepto)} +
  • `).join(''); + ul.classList.remove('d-none'); +} +function seleccionarDiag(cod, concepto) { + document.getElementById('inp-diag').value = cod; + document.getElementById('diag-resultados').classList.add('d-none'); + _diagResultados = []; +} + // ── Motor de precios ────────────────────────────────────────── let _recalcTimer; let _preciosActivos = [];