Commit Graph
127 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Opus 5 3a7b267f65 Rol de Calidad, y restricción por rol dentro del turnero
Rol nuevo para consultar turnos y tiempos de atención, de solo lectura y con
acceso únicamente a dashboard e historial. Se le permite exportar el historial,
que es la forma de analizar tiempos fuera del sistema.

Al crearlo salió que las vistas del turnero no verificaban nada por su cuenta:
el control del ERP es por módulo, así que cualquiera con acceso al turnero podía
abrir Configuración —lugares, dispositivos, plantillas— escribiendo la URL,
aunque el menú no se la mostrara. Aplicaba a todos los roles, no solo al nuevo.

Se agrega _acceso.php con una verificación de rol que usan las tres pantallas
que operan sobre la atención o cambian configuración. Verificado que cada rol
conserva lo que ya usaba: recepcionista entra a recepción, bacteriólogo a las
estaciones, supervisor y administradores a todo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:50:24 -05:00
Lizandro GuarnizoandClaude Opus 5 813b712df0 Motivo al marcar ausente, y notas visibles con su origen en dashboard e historial
Marcar ausente solo pedía confirmación: el turno quedaba registrado sin ninguna
explicación, y hoy son 6 en un día. Ahora se pide el motivo y se guarda como
comentario de recepción, no como columna nueva: así aparece en todas las
pantallas que ya muestran comentarios, sin duplicar el dato ni tocar el esquema.

Dashboard e historial mostraban las notas sin indicar de dónde venían, así que no
se distinguía una observación de toma de muestras de una de recepción. Se agrega
la insignia de origen con los mismos colores que ya usa la bandeja, y el título
pasa a "Notas y observaciones" con su cantidad.

El historial además traía solo las 3 últimas por turno y en orden inverso. Con
recepción empezando a dejar notas eso habría escondido justamente el motivo de
una ausencia sin que nada indicara que faltaban; ahora trae hasta 20, en orden
cronológico.

De las 114 notas existentes, todas son de toma de muestras: recepción nunca dejó
ninguna porque no tenía dónde hacerlo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:37:33 -05:00
Lizandro GuarnizoandClaude Opus 5 5d4315fae7 Recepción: el contador de exámenes no se actualizaba en las cargas silenciosas
La insignia con la cantidad de exámenes solo se refrescaba desde los callbacks
onItemAdd/onItemRemove de TomSelect, y hay cuatro rutas que manipulan la
selección por código sin dispararlos:

- Importar desde RIPS usa addItem(id, true) —silencioso a propósito, para no
  recalcular precios en cada examen—, así que la insignia quedaba en cero
  aunque se hubieran cargado varios.
- El botón "Limpiar selección", toggleSoloMuestras y resetCheckboxes usan
  clear(), que internamente quita los ítems en modo silencioso: la insignia
  conservaba el número anterior.

Al revisarlo apareció un segundo efecto en toggleSoloMuestras: limpiaba los
exámenes sin recalcular, dejando el panel de precios mostrando exámenes que
ya no estaban seleccionados.

Se agrega limpiarExamenes(), que limpia y sincroniza contador y precios, y se
usa en las tres rutas de limpieza; la carga desde RIPS actualiza el contador
una vez al terminar, conservando el modo silencioso por examen.

Validado con node sobre un doble de TomSelect que replica el comportamiento
silencioso: los cuatro escenarios pasan.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 07:59:31 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 941b6740f0 feat(recepcion): panel muestras muestra último turno atendido por letra
API: agrega por_prioridad con último código llamado a muestras por letra.
Vista: badges con color de prioridad mostrando "A: A-023", "B: B-011", etc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-30 19:51:10 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 7d444699d3 feat(turnero): panel de estado de muestras en recepción
Recepción ve en una barra inferior qué turno atiende cada estación de
toma de muestras (verde = ocupada, gris = libre), cuántos están en
espera y cuántos en espera entre muestras progresivas. Se refresca cada 7 s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-28 11:59:18 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3d26700e16 feat(recepcion): mostrar contador de exámenes seleccionados
Badge junto al título "Exámenes solicitados" que muestra cuántos
exámenes lleva el turno actual. Se actualiza en tiempo real al
agregar o quitar ítems del TomSelect.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-28 09:41:06 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ff52fa5ba7 feat: olvidar firma, editar tiempos tomas, obs en header, fix dispositivos
- feat(turnero): Botón "Olvidar" en lugar.php y recepcion.php para descartar firma de consentimiento completo (nuevo endpoint resetear_consentimiento.php)
- feat(turnero): Botón "Olvidar" por toma individual en prolongadas para borrar firma+hora de una toma específica (nuevo endpoint resetear_toma.php)
- feat(turnero): Editar tiempos en tomas en_progreso: hora_campo signed muestra readonly con botón olvidar, permite re-editar tras olvidar
- feat(turnero): Guardar tiempos (draft save) también en estado en_progreso
- feat(turnero): Observaciones de tomas prolongadas se muestran en header de tarjeta firmada (campo obs_campo en _mpMap)
- fix(turnero): Token del equipo se sobreescribía en tabla — ip permitía solo un registro con ip='' (UNIQUE); ahora ip es nullable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-28 07:37:09 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c9ea76f782 feat: cierre anticipado de tomas prolongadas con justificación
- DB: añade estado 'cerrado_anticipado' al enum de turnero_consentimientos
- ver_formulario_enviado.php: POST handler mp_cerrar_anticipado guarda motivo
  en _cierre_anticipado y cambia estado; botón "Cerrar anticipadamente" con modal
  textarea; bloque display para estado cerrado_anticipado mostrando el motivo;
  modoEditar y check de estado actualizados para excluir cerrado_anticipado
- get_consentimientos.php: expone cierre_anticipado en respuesta; mueve parse
  de datos_respuestas fuera del if(esTomaProg) para ambos loops
- lugar.php: CONSENT_IC/LBL incluye cerrado_anticipado; ya[] lo incluye;
  hayPendientes lo excluye; fila muestra motivo en banner amarillo
- recepcion.php: CONSENT_META incluye cerrado_anticipado; ya[] lo incluye;
  motivo visible en la tarjeta del consentimiento

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-28 00:29:32 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a3c19bf4e7 Turnero: toma progresiva por examen, Rubeola solo-profesional, kiosko
- configurar_tomas.php: merge config por examen en lugar de overwrite
- ver_formulario_enviado.php: auto-abrir panel de tiempos al cargar; soporte formularios solo_profesional con botón Guardar y completar
- get_consentimientos.php: leer campo solo_profesional de lab_formularios
- recepcion.php: formularios sin firma paciente muestran badge "Completa en laboratorio"
- lugar.php: botón "Completar" para formularios solo_profesional

DB: ALTER TABLE lab_formularios ADD solo_profesional; UPDATE Rubeola id=8; UPDATE descripcion Niños kiosko

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-27 23:22:42 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 8ac5224425 fix: cargar SigWebTablet.js desde servidor ERP en vez de localhost
El JS no es servido por SigREST sino instalado en AppData del usuario.
Se agrega /assets/js/SigWebTablet.js como primera URL; los puertos
localhost quedan como fallback.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-22 21:16:08 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 f9619db8ef fix(sigweb): intentar HTTPS :47290 antes de HTTP :47289 para páginas HTTPS
Chrome bloquea scripts HTTP desde páginas HTTPS; SigWeb >=1.6.4 expone
el SDK en https://localhost:47290 para este caso. Fallback a http://47289
para instalaciones antiguas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-22 20:20:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 26bb9e1844 rips: prevent reuse of already-consumed exam records
- Add turno_id column to rips_examenes_pendientes (already migrated)
- Filter turno_id IS NULL in get_examenes_rips.php query
- New marcar_rips_usado.php marks record as consumed when loaded
- cargarExamenesRips() calls marker after loading exams into the turn

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 16:39:22 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d46c983776 recepcion: auto-check RIPS when turn has a cedula as patient name
If the kiosk captured a numeric document number as paciente_nombre,
fire consultarExamenesRips immediately on turn open without waiting
for the receptionist to manually search the patient.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 16:35:29 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 44e9b86b27 recepcion: revert patient history to collapsed on load
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 16:30:50 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 89b407f5cc recepcion: auto-expand patient history with exams on patient select
Previously the history section required a manual click to expand and load.
Now it opens and fetches automatically when a patient is selected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 16:30:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 538bc0f35a turnero: diagnóstico detallado en consola para T-LBK460 / SigWeb
Detecta si el pad físico responde (GetTabletState), si falla instanciar
SigWebTablet (posible conflicto con SigPlus), y guía paso a paso.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 12:01:50 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3c3f3f1ee9 turnero: logging de consola para debug de conexión SigWeb en recepción
Muestra URL, hora de intento, tiempo de respuesta y estado de SigWebTablet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:39:36 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c0a2389a77 turnero: mostrar Topaz desconectado en rojo cuando SigWeb no responde
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:34:45 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e2f663c6ed turnero: indicador "Topaz en línea" en header de recepción
Detecta SigWeb al cargar; muestra badge verde solo si localhost:47289
responde. Si no hay pad, no aparece nada.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:33:56 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 53bc184894 ux: lugar destino al final, refresh en consentimientos, fix pasarALugar
- sel-lugar movido a última sección (antes de acciones) para que el
  usuario lo seleccione justo antes de guardar/pasar
- resetCheckboxes() ahora también limpia sel-lugar entre turnos
- pasarALugar() lee sel-lugar directamente como primera opción,
  evitando que un solicitudActiva.lugar_id desactualizado cause errores
- Botón refresh (fa-sync-alt) en cabecera de consentimientos llama
  refrescarConsentimientosLugar() para ver estado sin recargar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 08:33:57 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 057439e140 feat(recepcion): pedir N.º referencia en transferencia y tarjeta (simple y combinado)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:15:06 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 71440a8bbb fix: guardar en recepción pasa al lugar directamente sin mostrar consentimientos
Los consentimientos se gestionan en toma de muestras, no en recepción.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 17:41:54 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c1cb5906a9 fix: autocomplete CIE-10 no seleccionaba por comillas rotas en onmousedown
Reemplaza JSON.stringify en atributo HTML por data-atributos + event
delegation, evitando que las comillas dobles rompan el handler.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 17:23:11 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 67f6e23ffd fix: clearCache en TomSelect para aplicar filtro de género correctamente
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 16:51:29 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3eaade80ff feat: restricción de exámenes por género del paciente
- DB: columna genero_permitido en exam_tipos (M/F/NULL)
  GX,FV → solo femenino | PSA,FPSA → solo masculino
- recepcion.php: TomSelect muestra badge rojo y deshabilita opciones
  incompatibles al seleccionar paciente; elimina los ya agregados
- create_solicitud.php: validación backend 422 si hay conflicto género/examen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 16:45:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e595f5e569 fix: add db() to ingest_paciente; get_examenes_rips and recepcion updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 15:43:08 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6bba6c6165 fix: cerrar dropdown de exámenes al seleccionar uno
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 15:25:40 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c717d474f7 feat: autocomplete CIE-10 en diagnóstico y fix tab en exámenes
- buscar_cie10.php: busca por código o descripción, límite 12 resultados
- inp-diag: dropdown estilo empresa, Enter selecciona primero
- selectOnTab:false en TomSelect de exámenes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 15:13:48 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 0fe4948a34 feat: seleccionar médico tratante con Enter en recepción
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 09:54:58 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 45732c221f feat: seleccionar empresa con Enter en el buscador de recepción
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 09:52:43 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 69793dd9c4 fix: propagar genero al seleccionar paciente recién creado o editado
Al crear un paciente nuevo desde el modal, el objeto no incluía genero
por lo que el bloque embarazada no se ocultaba para masculinos. Al editar
también se actualiza genero y se re-evalúa la visibilidad del bloque.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 09:46:55 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3a865d5c9f recepcion: ocultar checkbox embarazada si el paciente es masculino
Al vincular un paciente con genero='M' se oculta el bloque y
se desmarca el check. Al desvincular/resetear vuelve a mostrarse.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 21:25:33 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 8b0bdc6b30 turnero/recepcion: botón para generar nuevo turno desde recepción
Modal con select de prioridad (cargado desde BD) y campo opcional
de cédula/nombre. Llama a create_turno.php que ya maneja sesión,
duplicados, SSE y notificación WhatsApp.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:54:02 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 8917daf9be turnero: orden estricto de llegada + color de prioridad en cola recepción
- get_cola.php: quita orden por orden_peso, deja solo creado_at ASC
- recepcion.php: cards con prioridad distinta a E (general) muestran
  borde izquierdo y fondo tintado con el color de la prioridad

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:48:50 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 0f6c837d35 feat: campo número de recibo al pagar con tarjeta
- Campo inp-recibo aparece/desaparece al seleccionar 'Tarjeta' en forma de pago
- Se incluye en el payload como numero_recibo y se guarda en turnero_solicitudes
- Migración: ADD COLUMN numero_recibo VARCHAR(40) en turnero_solicitudes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:42:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1237552cb2 fix: selects de EPS/ciudad no pierden valor si el paciente tiene texto fuera del catálogo
Si eps o ciudad del paciente no existe en el select, se agrega como opción
temporal para no sobrescribir con vacío al guardar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:38:21 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 4cb1a135b3 feat: CRUD de ciudades + select en modal de paciente
- Tabla lab_ciudades creada y poblada con 86 ciudades existentes
- Módulo lab_ciudades: listado, crear, editar, activar/desactivar, eliminar
- API /api/lab/ciudades.php: GET list, POST save/toggle/delete
- Modal paciente: campo ciudad cambiado a select, cargado junto con EPS
  en un solo Promise.all al iniciar; Cúcuta preseleccionada por defecto

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:36:59 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 da2bfde38f feat: CRUD de EPS + select en modal de paciente
- Tabla lab_eps creada y poblada con valores existentes de lab_pacientes
- Módulo lab_eps: listado, crear, editar, activar/desactivar, eliminar
- API /api/lab/eps.php: GET list, POST save/toggle/delete
- Modal paciente en recepción: campo EPS cambiado de texto libre a select
  cargado desde lab_eps al iniciar la página

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:33:57 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 fb8fb9bc7a feat: pre-llenar cédula del kiosko al crear paciente desde recepción
El kiosko guarda la cédula en paciente_nombre del turno. Al abrir el
modal de nuevo paciente, si el valor es numérico se pone en el campo
documento (no en nombre). El foco cae en nombre para que el recepcionista
complete los datos restantes. Campo editable normalmente.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:30:15 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 35cba08004 feat: precios particulares automáticos al seleccionar exámenes
- Sin empresa: usa precio_base de exam_tipos (tarifa particular)
- Panel de precios se muestra con solo seleccionar exámenes (no requiere convenio)
- Total se aplica automáticamente al campo de cobro sin clic manual

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:27:18 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 9df5f19c08 feat: búsqueda de paciente en tiempo real + Enter selecciona el primero
- Búsqueda automática con debounce 300ms al escribir (sin necesidad de lupa)
- Enter: si ya hay resultados selecciona el primero, si no dispara la búsqueda

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:09:58 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 123ab0e034 fix: selección de empresa/convenio rota por JSON en atributo HTML
JSON.stringify(e) dentro de onmousedown="..." producía comillas dobles
que el parser HTML interpretaba como cierre del atributo, dejando la
función con un objeto incompleto. Ahora los resultados se guardan en
_empresaResultados[] y el handler pasa solo el índice numérico.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 19:44:44 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c22c38a58f feat: exámenes en recepción — lista vertical + búsqueda por CUPS
- Items seleccionados se muestran en filas verticales con chip de CUPS/código
- Búsqueda por CUPS funciona (código CUPS incluido en texto de <option>)
- Dropdown muestra chip de CUPS junto al nombre del examen
- PHP SELECT incluye columna cups de exam_tipos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 19:15:24 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 55bccae0ad fix: dark mode completamente reescrito con Bootstrap 5.3 data-bs-theme
- Agrega script inline en <head> de Layout.php, lugar.php y recepcion.php
  que detecta prefers-color-scheme y activa data-bs-theme="dark" en <html>
  antes del primer paint (evita flash de contenido blanco)
- sidebar.php: script de fallback para páginas con head propio no actualizado
- Layout.php: corrige background hardcodeado #f8f9fa en .main-content y
  reemplaza bg-white por bg-body-tertiary en barra de título
- styles.css: elimina bloque @media duplicado y contradictorio; nuevo bloque
  unificado cubre @media (fallback sin JS) + [data-bs-theme="dark"] para
  elementos custom (sidebar, chat); Bootstrap maneja el resto automáticamente
- Bump styles.css a v=15 en los tres templates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 20:42:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d0a42dba33 feat: auto-load RIPS exams when patient is selected in recepcion
When a patient with a cedula is selected, the system queries RIPS
Manager for exams registered in the last 5 minutes. A green banner
shows the count with a "Cargar" button that pre-fills TomSelect.
Unmapped exam codes shown as a warning. Banner clears on deselect/reset.

- config.php: RIPS_MANAGER_URL constant from env var
- api/lab/get_examenes_rips.php: proxy + codigo_legacy mapper
- recepcion.php: banner HTML + consultarExamenesRips/cargarExamenesRips JS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 14:05:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 bffa38e9c0 fix: hide médico tratante when solo entrega de muestras is checked
Toggling the checkbox hides the doctor field and clears any selection.
Unchecking or resetting the form restores the field to visible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 13:41:46 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 fd991103b9 fix: remove Ver Pantalla button from recepcion header
display_recepcion is not in use — only display_global is active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 13:33:02 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 b9312fe0d9 feat: add bono to pago combinado in recepcion
New Bono field in the combined payment panel — included in the
running total sum, reset, and pagos_detalle payload on submit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 13:31:14 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 dfff945066 feat: clear TomSelect input after exam selection
After pressing Enter to add an exam, the typed text is cleared
and the dropdown closes so the next code can be typed immediately.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 13:22:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 813b81e0f6 feat: Enter auto-selects first exam match in TomSelect
onType highlights the first visible option on each keystroke so pressing
Enter immediately selects it — no need to arrow-down manually.
Also adds selectOnTab for the same effect with Tab key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 13:06:42 -05:00