Commit Graph
27 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Opus 5 2b1f08b03f Evitar teléfonos falsos en la historia clínica, y pedir el número a quien lo oculta
El arreglo anterior dejó un defecto: obtenerOCrearDesdeWhatsapp() copiaba
users.phone_number al teléfono de la ficha, y para quien oculta su número ahí
va el BSUID. normalizarTelefono() le quitaba el punto y las letras, así que
"CO.1761088155094242" quedaba guardado como "1761088155094242": un número de
16 dígitos, falso, con apariencia de real, dentro de una historia clínica y
sin que nadie lo notara. Ahora esa ficha se crea sin teléfono, que es la
verdad: no lo tenemos.

- esBsuid() queda definido una sola vez, en config.php, que es donde lo ven
  tanto el servicio de WhatsApp como las clases del laboratorio.
- La lista y el detalle de pacientes dicen "Solo por WhatsApp" en vez de
  mostrar el identificador crudo: recepción necesita entender por qué no
  puede llamar, no ver un código.
- Al crear la ficha desde una conversación se le pide el número con el botón
  de Meta, una sola vez (users.contacto_pedido_at). El texto es editable
  desde configuración. Solo se marca como pedido si Meta aceptó el envío,
  para poder reintentar si falló.
- tests/test_bsuid.php: 30 verificaciones sobre identidad, envío, vinculación
  y creación de fichas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 20:26:31 -05:00
Lizandro GuarnizoandClaude Opus 5 018fb13332 Módulo Soporte: visor de documentación con renderizado Markdown y buscador
Nuevo módulo `soporte` con la documentación del proyecto en cuatro secciones:
manual de usuario (visible para todos), y documentación técnica, arquitectura
y operación (solo administradores).

- Markdown.php: renderizador propio del subconjunto que usa la documentación
  (encabezados, listas anidadas, tablas, código, citas). Escapa todo el texto
  antes de aplicar formato, así que los .md no pueden inyectar HTML. Se
  prefirió un archivo auditable a incorporar una dependencia externa.
- DocIndex.php: descubre los .md, arma el árbol, resuelve acceso por sección
  y construye el índice del buscador.
- Generadores.php: expande marcadores {{modulos}}, {{endpoints}}, {{tablas}},
  {{roles}} y {{servicios}} leyendo el código y la base en cada carga, para
  que los inventarios no puedan quedar desactualizados.

Se registra en SYSTEM_MODULES y se concede a los 12 roles con permission=read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 10:07:06 -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 9651f14302 feat(lab): endpoint server-to-server ingest_paciente para sync desde RIPS
Agrega /api/lab/ingest_paciente.php con autenticación por X-Lab-Key
(LAB_SYNC_KEY en config). Hace UPSERT por numero_documento sin requerir
sesión de admin — permite que RIPS Manager sincronice pacientes directo
a lab_pacientes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 10:48:50 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 003d16b6a2 turnero: auto-redirigir a desk/lugar asignado sin mostrar selector
- authenticateUser incluye turnero_lugar_id en la sesión
- login.php redirige con desk_id/lugar_id si el usuario tiene lugar fijo (sin necesitar IP)
- recepcion.php redirige con desk_id si la sesión tiene turnero_lugar_id, evitando el modal de selección

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 10:17:48 -05:00
Lizandro Guarnizo ab8b5ae620 up 2026-06-09 16:44:39 -05:00
Lizandro Guarnizo 7573d82185 Update config.php 2026-04-19 21:23:45 -05:00
Lizandro Guarnizo 94cb8574d0 Update config.php 2026-04-19 21:03:24 -05:00
Lizandro Guarnizo 07bbc4c484 up 2026-04-19 20:59:25 -05:00
Lizandro Guarnizo 0164c51c1a up 2026-04-16 23:07:53 -05:00
Lizandro Guarnizo ef822dd3c7 up 2026-04-16 22:23:33 -05:00
Lizandro Guarnizo d8ceb3f822 feat: 6 nuevas funcionalidades - notas obligatorias turno, reporte enfermero, plantilla WhatsApp, adjuntar orden modal, roles solo lectura, fix valores copago 2026-04-02 09:41:49 -05:00
Lizandro Guarnizo 7cca8342b5 refactor: unify env vars — no hardcoded credentials, LOG_LEVEL/SESSION from env 2026-03-11 21:16:52 -05:00
Lizandro Guarnizo db469b2134 up 2026-03-10 18:42:51 -05:00
Lizandro Guarnizo 38cd62eb0e up 2026-02-21 08:51:38 -05:00
Lizandro Guarnizo a87eb7c9d9 up 2026-02-20 10:01:44 -05:00
Lizandro Guarnizo 1aae148396 up 2026-02-03 21:30:55 -05:00
Lizandro Guarnizo 6ebf5c9a22 up 2026-01-28 02:23:36 -05:00
Lizandro Guarnizo ee016d62f5 ujp 2026-01-21 23:55:49 -05:00
lizandrogd 3fffb0d023 Update config.php 2026-01-21 01:36:22 -05:00
lizandrogd dc8e0acc5d Update config.php 2026-01-21 01:33:22 -05:00
lizandrogd ac44946eea Update config.php 2026-01-21 01:31:25 -05:00
lizandrogd 01c30ca594 menus 2026-01-12 22:42:41 -05:00
lizandrogd 50fc690b1b funcional 2026-01-12 15:54:04 -05:00
lizandrogd 4b7bcb6924 funcional 2026-01-12 14:08:21 -05:00
Lizandro Guarnizo dd36ed6fe0 up 2026-01-12 11:06:43 -05:00
lizandrogd ce12ac2cce w 2025-11-18 20:26:36 -05:00