Commit Graph
60 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Sonnet 4.6 c511da18bd recepcion: fix solo_muestras, reorder fields, duplicar visita, kiosko label
- create_solicitud.php: evitar SQL `IN ()` vacío cuando solo_muestras=1 sin exámenes
- recepcion.php: mover embarazada+médico después del historial del paciente
- recepcion.php: actualizar label kiosko con nombre real al vincular paciente
- recepcion.php: botón "Duplicar" en historial para copiar exámenes y pago de última visita
- recepcion.php: omitir validación de consentimientos pendientes cuando es solo_muestras
- recepcion.php: agregar alias esc() = escHtml() usado en buscarMedico

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 08:13:38 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d3826972ad feat(turnero): selector de médico tratante en recepción, visible en toma de muestras
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:55:32 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ec614c2a89 feat(chat-turnero): backend APIs for media upload, reactions, and template messages
- chat_upload_media.php: multipart upload to WhatsApp Media API, sends image/video/audio/document
- chat_react.php: sends emoji reaction to a message via WhatsApp, updates reaction_emoji in DB
- chat_send_message.php: extended to support type=template with lang+params

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:53:23 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 665fee99a9 fix(turnero): restaurar APIs del chat perdidas por force push del servidor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:41:40 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 ff0fd3284e fix(turnero): usar plantilla correcta según tipo de turno y ajustar sidebar
- create_turno.php: tipo F usa turnero_wa_template_muestra, resto usa turnero_wa_template
- styles.css: has-active ya incluye font-size 0.82rem (verificado)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:30:06 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 98507ad1a5 fix(turnero): restaurar dos plantillas WhatsApp en tab Sesión
- Plantilla con consentimiento (turnero_wa_template)
- Plantilla muestra pendiente (turnero_wa_template_muestra)
- sesion_turno.php guarda ambas en lab_config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:17:17 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 34004b4d98 feat(turnero): opción solo entrega de muestras con prioridad y badge naranja en cola
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:07:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 76dda4722a feat(turnero): pago combinado con desglose por efectivo, transferencia y tarjeta
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 00:02:48 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 38bd211ca6 feat(kiosko): mostrar nombre/cédula en ticket y quitar posición en cola
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 23:53:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 c9e5744de4 feat(turnero): campo embarazada en recepción y badge en toma de muestras
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 23:48:03 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 7475f3c58e fix(turnero): mostrar nombre del paciente en cola al vincularlo en recepción
Al vincular un paciente al turno, actualiza paciente_nombre con el
nombre_completo real de lab_pacientes. El siguiente poll de la cola
muestra el nombre en lugar de la cédula del kiosko.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 23:35:45 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 f533891c5e fix: transición no permitida al pasar a lugar desde turno en espera
Cuando la recepcionista seleccionaba un turno de la cola sin llamarlo
formalmente (via seleccionarTurno), el turno quedaba en estado espera
en BD. Al intentar pasar a lugar, espera→en_espera_lugar no es válido.

Fix: en create_solicitud.php, si el turno está en espera al guardar
la solicitud, se promueve a en_recepcion en el mismo transaction,
preservando timestamps existentes con COALESCE.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 01:36:36 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 4058cfe929 fix: sonido del turno se disparaba 3 veces en la pantalla TV
Dos causas:
1. sse_turno.php inicializaba \$lastPing = null, haciendo que la primera
   iteración del loop (2s después del emit inicial) siempre emitiera
   un snapshot extra aunque no hubiera cambios reales.
   Fix: inicializar \$lastPing con el sse_ping_at actual de la BD.

2. display.php comparaba activo.codigo para detectar nueva llamada.
   Si el poll y el SSE llegaban casi simultáneamente antes de que
   lastCodigoActivo se actualizara, ambos disparaban el sonido.
   Fix: comparar llamado_at en vez del código — el timestamp es
   único por llamada, por lo que sonidos duplicados son imposibles.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 00:48:33 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a6f6449707 feat: número de orden consecutivo en recepción
- Campo N.° Orden editable en la ficha, antes de seleccionar paciente
- Se carga automáticamente al abrir un turno (YYYYMMDD-001, 002…)
- Botón para regenerar el siguiente consecutivo
- Columna numero_orden en turnero_solicitudes (VARCHAR 20)
- Nuevo endpoint get_consecutivo.php calcula el siguiente del día
- create_solicitud.php guarda el numero_orden junto con la solicitud

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:12:23 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d0152e37ce feat: asistente IA Gemini Flash en dashboard turnero + config token
- ai_chat.php: contexto completo (tiempos, facturación, franjas, turnos detallados)
- Preguntas soportadas: demoras por recepcionista, total facturado, horas pico,
  tiempo total por paciente, exámenes, búsqueda por cédula
- Panel flotante de chat en dashboard (botón robot azul)
- Búsqueda de tabla ahora filtra por cédula/documento
- Ícono de fila gira al expandir detalle (flecha → rotada)
- lab_configuracion.php: nueva sección IA con campo token Gemini
- save_config.php: permite guardar gemini_api_key

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:28:43 -05:00
Lizandro GuarnizoandClaude Opus 4.8 dfe3a01fee Recepción: vincular paciente atómicamente al crear token de firma
create_consent_token.php ahora acepta paciente_id y lo vincula al turno
si aún no lo tiene, eliminando la carrera con vincular_paciente.php
(fire-and-forget). Ya no hace falta refrescar para firmar el consentimiento.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:54:41 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 da076f86eb Fix: firma profesional no se mostraba al recargar el formulario
La firma se guardaba en datos_cliente[campo_svg] pero el display
solo leía firma_profesional_svg (columna inexistente en lab_form_envios).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:44:44 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6510054416 Historial: añadir notas/observaciones al detalle del registro
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 22:53:39 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 f363631b32 Turnero: mejoras UI, historial detallado, kiosko scanner, firma por turno
- Kiosko: detector scanner (gap < 80ms), iconos 90px, fa-person-pregnant, ticket Arial
- Recepción: vincular_paciente.php para persistir paciente_id antes de firmar consentimiento
- Historial y dashboard: recepción desk, empleado recepción/muestras, exámenes y comentarios
- display_global: turno más pequeño, lugar-nombre más grande
- lab_pacientes: modal compacta con form-sm
- Configuración: icono embarazada fa-person-pregnant en prioridades
- ver_formulario_enviado: firma por campo (fix doble firma)
- docker-compose.local.yml: override BD producción para dev local

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 22:07:09 -05:00
Lizandro Guarnizo 8d577947a6 up 2026-06-18 09:35:17 -05:00
Lizandro Guarnizo c58998599b up 2026-06-16 19:54:04 -05:00
Lizandro Guarnizo 8128616b63 up 2026-06-16 19:09:59 -05:00
Lizandro Guarnizo 663884685d up 2026-06-16 17:52:27 -05:00
Lizandro Guarnizo 1c67dbdadc up 2026-06-16 17:41:27 -05:00
Lizandro Guarnizo ff8454fa5a up 2026-06-16 16:55:22 -05:00
Lizandro Guarnizo 62c4e7a18c up 2026-06-16 16:05:04 -05:00
Lizandro Guarnizo 6be28ae5af up 2026-06-16 15:03:40 -05:00
Lizandro Guarnizo eaa8a23af6 UP 2026-06-16 14:51:46 -05:00
Lizandro Guarnizo fc14360e2e up 2026-06-16 13:35:03 -05:00
Lizandro Guarnizo b11a7f5f98 up 2026-06-16 13:20:13 -05:00
Lizandro Guarnizo 5af94e50e5 up 2026-06-16 13:04:59 -05:00
Lizandro Guarnizo e7a068243c up 2026-06-16 12:55:39 -05:00
Lizandro Guarnizo 415ea3ef56 up 2026-06-16 12:06:26 -05:00
Lizandro GuarnizoandClaude Haiku 4.5 d8a6581fe5 fix: load desk consents automatically when a turno is opened
- cargarConsentimientosDesk() called from abrirFicha using DESK_ID
- First checks existing DB records (get_consentimientos), falls back to desk config
- abrirFormularioLugar shows proper errors if no patient or no turno
- Starts polling on open to detect patient signature in real time
- Fix creado_at column error in create_consent_token INSERT

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-16 11:20:22 -05:00
Lizandro GuarnizoandClaude Haiku 4.5 8a5e57cebe fix: retrieve full consent data with token from create_solicitud
- Include id, token, estado, and turno_id in consent response
- Allows renderConsentimientos to display all consent information correctly
- Ensures consents created for lugar are properly shown with all fields

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-16 11:11:22 -05:00
Lizandro Guarnizo ea40cf8dae up 2026-06-16 11:07:24 -05:00
Lizandro Guarnizo 6a8a8e0826 up 2026-06-16 11:00:15 -05:00
Lizandro Guarnizo 67d45b8910 up 2026-06-16 09:32:41 -05:00
Lizandro Guarnizo cef40a7a43 up 2026-06-16 08:53:28 -05:00
Lizandro Guarnizo 35b13468b6 up 2026-06-16 07:02:04 -05:00
Lizandro Guarnizo 64f21b083a up 2026-06-13 13:24:49 -05:00
Lizandro Guarnizo f34d19b3df up 2026-06-13 13:19:02 -05:00
Lizandro Guarnizo 0e51165108 Update create_turno.php 2026-06-13 13:11:42 -05:00
Lizandro Guarnizo 375cba86eb up 2026-06-11 23:11:32 -05:00
Lizandro Guarnizo ca964c76a3 up 2026-06-11 22:52:45 -05:00
Lizandro Guarnizo 376a1a5ef3 Update get_display_global.php 2026-06-09 18:26:29 -05:00
Lizandro Guarnizo ab8b5ae620 up 2026-06-09 16:44:39 -05:00
Lizandro Guarnizo 076fae7857 up 2026-04-22 09:03:43 -05:00
Lizandro Guarnizo 4b8b668774 uo 2026-04-21 21:36:24 -05:00
Lizandro Guarnizo 3a19f08bf8 up 2026-04-21 21:13:35 -05:00