Commit Graph
1021 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Sonnet 4.6 c6d2caef55 add: SigWebTablet.js de Topaz en assets/js
Copiado de C:\Users\ZAIDA\AppData\Local\TopazSigWeb\SigWebTablet.js
en SOPORTE-3 (39 KB, versión instalada localmente).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-22 21:21:03 -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 49a622e05f fix(turnero): corregir 6 hallazgos de auditoría en tomas previas
- cancelar_toma_pendiente: añade JOIN por paciente_id para prevenir IDOR
- cancelar_toma_pendiente: requiere turno_id para validar propiedad
- get_tomas_pendientes: porta filtros condicionales y _tomas_config de
  guardar_toma.php para mostrar conteo de firmas correcto
- lugar.php: refresca sección tomas previas al completar via turneroFirmado
- lugar.php: muestra error en catch de cargarTomasPrevias en vez de silenciar
- lugar.php: limpia _tomaAlertados al cancelar toma previa
- lugar.php: pasa turno_id en POST de cancelar para ownership check

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 20:58:21 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 814bd2ce5c feat(turnero): mostrar tomas prolongadas pendientes de visita anterior
Cuando el paciente regresa con un turno nuevo, toma de muestras muestra
las tomas en_progreso de visitas anteriores con botón Continuar o Cancelar.
Cancelar marca estado='rechazado' (campo ya existía en el enum).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 20:37:17 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 8bc9cbdd35 feat(turnero): 4 campos antecedentes en un solo renglón (F-LAB-08)
Gesta/Partos/Cesáreas/Abortos ahora caben en una fila usando CSS :has(.campo-cuarto)
que activa grid de 4 columnas solo cuando el campo tiene clase campo-cuarto.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 20:25:55 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 b1264da979 create_turno: priority F skips recepcion, goes direct to toma de muestras
When a patient selects 'Muestra pendiente' (prioridad F) at the kiosk,
the turn is immediately set to en_espera_lugar pointing to the first
active muestras location. Recepcion never sees it; toma de muestras
picks it up from its queue with no consent forms required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 17:53:48 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 17c9e1a1f2 ver_formulario_enviado: auto-fill hora on Minuto 0 (fresh form)
_mpAutoFillHora was gated behind hayFirmaIniciada, so it never ran
on a fresh form where no signatures exist yet. Now always fills the
hora field of the first visible firma widget; scroll only when at
least one signature has already been saved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 17:36:01 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 7a08e63e44 send_consentimiento: read wa template from lab_config instead of hardcoding
Was sending 'consentimiento_turno' (plain text fallback) while the
configured template is 'consentimiento_turno_v2'. Now reads
turnero_wa_template and turnero_wa_lang from lab_config, matching
the same logic used in create_turno.php (kiosk).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 17:18:24 -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 7842de0d21 kiosk: remove --disable-print-preview to unblock silent printing
--disable-print-preview conflicted with --kiosk-printing, routing to
the OS print dialog instead of printing silently. Also added AHK
fallback script for edge cases.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 15:30:07 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 065928e8c1 turnero: bat kiosko usa Microsoft Edge con --edge-kiosk-type=fullscreen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 15:22:56 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 4a523204a1 turnero: simplificar bat kiosko — una sola línea sin detección de ruta
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 15:22:45 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 28fe662f40 turnero: bat kiosko busca Chrome en ambas rutas y fuerza pantalla completa
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 15:21:52 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 4a92425238 turnero: agregar ?autoprint=1 al bat del kiosko
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 15:18:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5dd6ee5040 turnero: integración QZ Tray para impresión silenciosa en kiosko
- Genera par de llaves RSA (cert en config/qz/)
- api/qz_sign.php firma los print jobs con SHA512
- assets/js/qz-print.js conecta QZ Tray y envía trabajo HTML
- ver_formulario_enviado.php carga QZ cuando ?autoprint=1
- Fallback a window.print() si QZ no está instalado

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 14:52:19 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 2cfb77b1a6 turnero: bat kiosko mata Chrome antes de lanzar para que apliquen los flags
taskkill + timeout 2s antes de abrir; agrega --disable-print-preview.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 14:39:04 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 b8763f9e15 turnero: bat para lanzar Chrome en modo kiosko con impresión automática
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 14:36:27 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a70f49f42b turnero: parámetro ?autoprint=1 para imprimir automáticamente al cargar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 14:33:31 -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 90a940c379 turnero: mostrar punto verde y "Tableta en línea" cuando SigWeb está conectado
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:24:47 -05:00
Lizandro Guarnizo 243003ab31 Revert "turnero: fallback a puerto 8080 si SigWeb no responde en 47289"
This reverts commit 3d035d3699.
2026-07-21 11:24:21 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3d035d3699 turnero: fallback a puerto 8080 si SigWeb no responde en 47289
Intenta localhost:47289 primero; si falla prueba localhost:8080.
Funciona para instalaciones con puerto no estándar sin cambiar Oracle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:21:18 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 dd1e377df7 turnero: ocultar botón Tableta si SigWeb no está disponible en el equipo
Detecta al cargar la página si localhost:47289 responde; si no,
oculta todos los .btn-topaz para evitar el error al usuario.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:52:32 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 4a5e5fd9c9 turnero: reemplazar alert() de Topaz SigWeb por toast no bloqueante
El alert() bloqueaba la UI. Ahora muestra un banner flotante de 5s
que no interrumpe el flujo y sugiere usar firma manual como alternativa.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:49:01 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 992ce9d663 turnero: botón Ver abre el formulario en la misma modal en lugar de nueva pestaña
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:40:25 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 2cd7525bb4 turnero: countdown en padre para que alerta sobreviva al cerrar el modal
El iframe pasa targetMs al padre via postMessage. El padre corre su propio
intervalo (5s) que dispara la notificación si el modal está cerrado.
Si el iframe alcanza el 0 primero, cancela el del padre para no duplicar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:38:25 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 019d2f4fb0 turnero: notificación del sistema cuando vence el countdown de toma progresiva
Usa Web Notifications API via postMessage iframe→parent para alertar
incluso cuando el tab está en segundo plano o la pantalla ocupada.
Pide permiso al iniciar el protocolo (primer gesto del usuario).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:36:23 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6ce2fc340b turnero: aplicar _mpEffectiveLabel en countdown y alerta de siguiente toma
La alerta y el countdown mostraban "Toma · Otro" sin el minuto.
Ahora usan _mpEffectiveLabel para mostrar ej: "Toma · Otro - 2".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:34:47 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e0041c8d24 turnero: ordenar firmasCampos por minuto antes de calcular siguiente_toma_at
Sin el sort, Otro (2 min) aparecía después de Minuto 15 en schema order,
haciendo que el countdown arrancara con 15 min en vez de 2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:20:17 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ba2728a25f turnero: mostrar minuto de Otro en label de card de toma progresiva
Agrega _mpEffectiveLabel() que añade " - N" al label cuando la sección
es Otro y _mpOtroHora tiene valor, mostrando ej: "Toma · Otro - 2".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:16:08 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 815f136dca fix: secciones de toma se renderizan en orden cronológico
El render iteraba $esquema en orden original del JSON — Otro siempre
quedaba de último. Ahora se re-ordena $esquema agrupando las secciones
de toma por su minuto (usando $_mpSepOrder construido del usort ya
existente) antes de entrar al foreach de render.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:11:21 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 2d125f9533 ux: consentimientos antes de recepción de muestras en lugar.php
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 08:37:42 -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 3ae57a78e4 feat: chip Otro se posiciona por minuto en modal de tomas prolongadas
- Cada chip envuelto en .mp-chip-grp con CSS order = minuto
- Otro arranca en order:9999 (último); al digitar el valor se mueve
  en tiempo real al lugar cronológico correcto
- Si ya tiene valor guardado (_mpOtroHora), abre posicionado
- Click handler usa .mp-chip-grp para encontrar input/unit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 08:13:59 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ecc9b74247 fix: mostrar consentimientos del turnero en lab_formularios.php
- fecha usa COALESCE(firmado_at, enviado_at, t.creado_at) porque
  turnero siempre deja enviado_at en NULL
- filtro por fecha también usa ese COALESCE para no excluir registros
- total_envios y total_completados suman turnero_consentimientos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 07:44:16 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1d8e461b3e fix+polish: restaurar filtro DATE en DELETE rips, fallback PHP_INT_MAX en guardar_toma, pulir chip Otro (number/min/pre-carga), limpiar interval resumen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-18 14:29:12 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 18c683ed9b feat(toma-progresiva): resumen visible 10s con barra y cuenta regresiva antes de cerrar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 21:43:49 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5a5e4b17ba fix(guardar_toma): usar _otro_hora para calcular countdown de la toma Otro
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:41:58 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 65c3cc8c20 feat(toma-progresiva): alarma más fuerte 3 ciclos con sawtooth+compressor y vibración 5x900ms
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:36:33 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 7f522a683e fix(toma-progresiva): ordenar toma Otro por su hora real en lugar de ponerla al final
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:34:13 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ecc582177c fix(toma-progresiva): no hacer scroll al abrir si no hay ninguna firma iniciada
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:28:59 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1a08d9dba7 fix(pagos): agregar bono al ENUM, guardar refs en lab_pagos_det, consumir cache rips al crear solicitud
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-17 18:18:11 -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