Commit Graph
666 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Sonnet 4.6 cd3d3bb9c0 feat: IA configurable — probar conexión, activar/inactivar
- Toggle activo/inactivo en configuración → guarda ia_activa en lab_config
- Botón "Probar" llama api/lab/test_gemini.php con la clave actual
- test_gemini.php envía pregunta mínima a Gemini y confirma respuesta
- Dashboard oculta botón y panel IA cuando ia_activa != '1'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:16:06 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3b5c26214c feat: buscador de formularios en lab_formularios.php
- Input de búsqueda filtra tarjetas por nombre o tipo en tiempo real

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:12:53 -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 892b01493a feat: sidebar con buscador de módulos e icono de configuración
- Icono de engranaje (⚙) en cabecera del sidebar → lab_configuracion.php
- Buscador de texto que filtra ítems del menú en tiempo real
- Al borrar la búsqueda restaura el estado colapsado guardado
- CSS integrado en el mismo componente

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:07:58 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 9c9acbed70 feat: dashboard turnero muestra recepción, bacteriólogo y exámenes en tabla
- Columnas añadidas: Recepción (desk + recepcionista), Lugar/Bacteriólogo, Exámenes
- Elimina columnas Lugar y Entrada que eran menos informativas
- colspan actualizado a 10

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:06:40 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 97a3dba249 feat: sidebar con categorías colapsables (acordeón)
- Cada sección del menú se puede abrir/cerrar con clic
- Estado persiste en localStorage por categoría
- La sección con el link activo siempre se auto-expande
- Chevron rota al colapsar con transición suave
- CSS en styles.css actualizado para que sidebar-section sea clickeable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 23:05:43 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 935cea24b6 fix: sidebar color consistente en todas las páginas + gradiente más oscuro
- sidebar.php inyecta --brand/--brand-dark desde DB si no fueron definidos ya
  por Layout.php, solucionando que lab_*.php mostraran el sidebar azul (fallback)
  mientras las páginas ERP mostraban verde (#a0a59c del doc_color)
- Gradiente del sidebar invertido: ahora va de más oscuro (top) a brand (bottom)
  en lugar de terminar con mezcla blanca que perdía las letras

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 21:02:55 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 406d542042 fix: restaurar recepcion.php original (eliminé contenido por error)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:54:38 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 453fb4219e fix: botón Volver en configuración turnero apunta al dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:44:31 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e8abffb607 fix: recepcion.php sin desk_id muestra selector de puestos
- Si llega con desk_id redirige a la URL canónica erp.php?m=turnero&v=recepcion&desk_id=N
- Si llega sin desk_id muestra lista de turnero_lugares activos para elegir
- Elimina acceso directo sin contexto de desk

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:29:18 -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 Sonnet 4.6 f738607738 feat: historial turnos — mostrar recepcionista, desk, bacteriólogo y exámenes
Columnas nuevas en tabla principal:
- Recepción: módulo de desk + nombre del recepcionista
- Lugar / Bacteriólogo: lugar destino + quien atendió toma de muestras
- Exámenes: badges con código de cada examen solicitado

Los datos ya venían del API (get_historial.php), solo se exponen en la tabla.
Se elimina columna Teléfono y Entrada de la vista principal (siguen en detalle).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:22:07 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 f57fa39c33 fix: reemplazar verde WhatsApp por --brand en hover/focus/botones del ERP
- table-hover, form-control:focus, btn-primary, menu-item hover
- Usar var(--brand, fallback) para que funcione sin Layout.php
- Contextos chat/WhatsApp mantienen su verde propio

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:20:59 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a5d42a54be fix: lab_pacientes.php — corregir comentarios Blade y mejorar diseño modal
- Eliminar comentarios {{-- --}} de Blade que se renderizaban como texto visible
- Inyectar --brand/--brand-dark desde doc_color de BD (igual que Layout.php)
- Modal header con gradiente brand igual que login/sidebar
- Secciones de formulario con separadores visuales (Datos, Contacto, Ubicación)
- Panel detalle con header brand en lugar de card-header blanco
- Actualizar version CSS a v=13

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:18:07 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 bec4629a3c feat: rediseño sidebar con paleta del login + responsive unificado
- Layout.php inyecta --brand y --brand-dark desde doc_color de BD
- Sidebar usa el mismo gradiente azul del login (brand-dark → brand)
- Círculos decorativos animados igual que el login
- Items activos: fondo blanco con texto brand (inverso al fondo)
- Hover: overlay blanco sutil + translateX(3px)
- Ancho unificado en --sidebar-width (270px)
- Breakpoint responsive consistente en 991.98px

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 20:15:54 -05:00
Lizandro Guarnizo 5f4cf63924 Revert "fix: revertir anunciarTurno al codigo exacto de jun9 que funcionaba"
This reverts commit 266cd8301b.
2026-06-23 19:58:33 -05:00
Lizandro Guarnizo 266cd8301b fix: revertir anunciarTurno al codigo exacto de jun9 que funcionaba 2026-06-23 19:57:49 -05:00
Lizandro Guarnizo ee50a47933 fix: seleccionar voz española explícita en TTS del display_global 2026-06-23 19:55:40 -05:00
Lizandro Guarnizo 56f30f1c6d fix: firma profesional guarda solo en el campo firmado, no en todos 2026-06-23 19:54:22 -05:00
Lizandro Guarnizo 3810c898fd fix: restaurar playBeep original en display_global (revertir playBell) 2026-06-23 19:50:30 -05:00
Lizandro Guarnizo e75ae6e3c5 fix: firma profesional solo aparece en el campo donde se firmo, no en todos 2026-06-23 19:49:57 -05:00
Lizandro Guarnizo 573b7e4a8f fix: sidebar marca activo solo el item actual, no todos los de erp.php 2026-06-23 19:45:24 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1342d305ec fix: corregir migraciones fallidas, redis doble carga y cache de assets
- Eliminar .env del tracking de git (credenciales no deben ir en repo)
- Agregar .env y .env.* al .dockerignore (no hornear credenciales en imagen)
- Quitar extension=redis.so duplicada en php.ini
- Activar cache 7d para assets estáticos en nginx
- Corregir 5 migraciones: eliminar INSERT INTO migrations con columna incorrecta
  y remover semicolons en comentarios -- que partian el parser SQL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 19:24:41 -05:00
Lizandro GuarnizoandClaude Opus 4.8 a39e94c71b Docker: quitar servicio redis local (Redis es recurso externo de Coolify)
El servidor Redis vive fuera (recurso gestionado por Coolify); el app se
conecta vía REDIS_HOST. El servicio redis local era un contenedor muerto.
La extensión PHP phpredis se sigue compilando en la imagen (es el cliente).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 11:30:41 -05:00
Lizandro GuarnizoandClaude Opus 4.8 0a2c40c34e OPcache: revalidar timestamps cada 2s para que los deploys se reflejen
validate_timestamps=0 hacía que PHP-FPM sirviera código viejo para siempre;
el opcache_reset del entrypoint corre en CLI (OPcache separado) y no limpiaba
el de FPM. Ahora valida mtimes cada 2s — costo despreciable para un ERP.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 11:12:47 -05:00
Lizandro GuarnizoandClaude Opus 4.8 7af526e773 Redis: REDIS_DB configurable para aislar sesiones entre despliegues
Dos despliegues que comparten el mismo Redis pisaban las sesiones.
session.save_path ahora incluye &database=${REDIS_DB} (default 0).
Despliegue secundario usa REDIS_DB=1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:56:16 -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 Opus 4.8 506f3469b4 Kiosko: auto-turno solo por escáner (ráfaga <35ms o Enter), nunca a mano
Escribir manualmente ya no dispara el turno: la persona oprime el botón.
El lector de cédula sí lo dispara porque mete los dígitos en ráfaga
(<35ms entre cada uno) o termina con Enter. Guard contra doble envío.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:51:58 -05:00
Lizandro GuarnizoandClaude Opus 4.8 71d29f35fa Debug temporal: inspeccionar firma guardada en datos_cliente
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:41:48 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a908d623e1 Kiosko: fix listener acumulado, añadir reset por inactividad 90s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:01:06 -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 3490bc1932 Docker: agregar servicio Redis para sesiones PHP
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:12:40 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1c75da1ccd Sidebar: resaltar ruta activa con color primario
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 23:02:35 -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 ebbf4ac6cf Update Enfermera.php 2026-06-18 14:27:58 -05:00
Lizandro Guarnizo 3a604bdf1d Update ver_formulario_enviado.php 2026-06-18 12:12:20 -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 7f2f998aa7 Update lugar.php 2026-06-16 17:58:05 -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 f1673a2d39 Update lugar.php 2026-06-16 17:06:47 -05:00
Lizandro Guarnizo ff8454fa5a up 2026-06-16 16:55:22 -05:00
Lizandro Guarnizo a4a062095e up 2026-06-16 16:35:12 -05:00
Lizandro Guarnizo 62c4e7a18c up 2026-06-16 16:05:04 -05:00
Lizandro Guarnizo 9e79b8ff56 Update display_global.php 2026-06-16 15:59:38 -05:00
Lizandro Guarnizo f13a06b63a Update display_global.php 2026-06-16 15:53:49 -05:00
Lizandro Guarnizo acbc1d0714 up 2026-06-16 15:37:34 -05:00