Commit Graph
155 Commits
Author SHA1 Message Date
Lizandro Guarnizo 3516f6e229 fix: permitir crear/editar formularios a roles con permiso write en lab_formularios
- _helpers.php: nueva función requireModuleWrite() que verifica session module_permissions
- save_formulario.php: reemplaza requireAdmin() por requireModuleWrite('lab_formularios')
2026-04-02 10:50:18 -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 3b92f47b54 feat: enlaces de formulario sin vencimiento + PDF descargable sin sesión vía token público 2026-03-25 16:14:26 -05:00
Lizandro Guarnizo 5f695b5604 feat: sistema de notas clínicas para enfermero (ficha + notas libres) y fix lab_reportes métricas 2026-03-25 13:14:25 -05:00
Lizandro Guarnizo 4ba890a0d5 feat: métricas completas, export Excel domicilios con filtros, hora llegada/salida visible 2026-03-25 11:48:24 -05:00
Lizandro Guarnizo 2abce6d4c2 feat: multi-archivo órdenes visible en enfermero, domicilios y órdenes médicas
- OrdenMedica::filtrarCampos(): agrega domicilio_id al whitelist
- Domicilio::obtener(): consulta secundaria archivos_ordenes[] con fallback
- Enfermera::agenda(): bulk-query archivos_ordenes[] por domicilio_id
- api/lab/link_ordenes_domicilio.php: API POST vincula orden_ids a domicilio_id
- conversations.php guardar(): trackea allOrdenIds[], llama link API post-save
- lab_domicilios.php: renderOrdenesDetail() multi-archivo en detalle
- enfermero_portal.php: renderOrdenesEnfermero() multi-archivo en cards
- lab_ordenes.php: botón 'Ver domicilio' cuando domicilio_id está vinculado
- migrations/: ALTER TABLE lab_ordenes_medicas ADD domicilio_id + índice
2026-03-24 21:51:29 -05:00
Lizandro Guarnizo 8e62c29ca9 firma_profesional: canvas en ver_formulario_enviado + endpoint firmar_profesional 2026-03-17 15:55:56 -05:00
Lizandro Guarnizo d757bba23f descargar_orden: reescribir sin _helpers para evitar ob_start y Content-Type:json; fix .bin -> extension real 2026-03-17 15:25:26 -05:00
Lizandro Guarnizo 8e15ccc6b4 descargar_orden: detección MIME por magic bytes (fix .bin) 2026-03-17 15:09:02 -05:00
Lizandro Guarnizo 262009f4e5 Update descargar_orden.php 2026-03-16 22:02:11 -05:00
Lizandro Guarnizo 0fddff6c5b up 2026-03-16 21:55:23 -05:00
Lizandro Guarnizo fe1d3c31b3 foto 2026-03-16 21:00:39 -05:00
Lizandro Guarnizo 3b834bc24b up 2026-03-16 20:35:02 -05:00
Lizandro Guarnizo 5f7cc67dd9 up 2026-03-16 20:29:21 -05:00
Lizandro Guarnizo 8907f8fa95 up 2026-03-16 20:14:22 -05:00
Lizandro Guarnizo ded19cbb8d Cambios 2026-03-16 18:36:11 -05:00
Lizandro Guarnizo bbfe0417df up 2026-03-14 12:52:45 -05:00
Lizandro Guarnizo cf6743fbbd fix: corregir URL de upload binario a graph.facebook.com/{version}/{session_id} 2026-03-14 00:01:34 -05:00
Lizandro Guarnizo 9bdcdc91d8 fix: usar Resumable Upload API para foto de perfil WhatsApp 2026-03-14 00:00:26 -05:00
Lizandro Guarnizo 7df05ee3fb feat: perfil WhatsApp (foto, about, datos) y reset+sync de plantillas 2026-03-13 23:50:30 -05:00
Lizandro Guarnizo bcfaf62293 fix: deduplicar webhooks duplicados con INSERT IGNORE + UNIQUE index en message_id
- conversations.message_id ahora tiene UNIQUE index (aplicado en BD prod)
- saveMessage() usa INSERT IGNORE: si el mismo wamid llega dos veces en
  paralelo solo una llamada procesa el mensaje y llama al bot
- La segunda llamada recibe rowCount=0 y hace continue sin pasar al bot
- Elimina race condition que enviaba bienvenida + términos simultáneamente
2026-03-13 19:22:34 -05:00
Lizandro Guarnizo 5211d83e8b fix: eliminar polling get_notifications en index.php + debug wamid en broadcast
- index.php: NotificationManager simplificado a stub vacío.
  Los elementos notification-bell / global-notification-toasts no existen en el
  markup → el setInterval cada 7s solo generaba tráfico inútil a get_notifications.php
  Las notificaciones ya se manejan vía SSE en conversations.php

- send_broadcast.php: exponer debug_wamids en respuesta (wamid, wa_status, wa_contact)
  para saber exactamente qué devuelve WhatsApp por cada destinatario.
  Agregar dryRun log del payload completo al error_log para diagnóstico de
  mensajes que WhatsApp acepta (200+wamid) pero no entrega.
2026-03-13 15:26:14 -05:00
Lizandro Guarnizo 6cdc7bd6c4 fix: corregir verificación de éxito en send_broadcast.php
La API de WhatsApp NO devuelve {success:true} - devuelve
{messaging_product, messages:[{id:wamid.xxx}], contacts:[...]}.
La comprobación anterior siempre fallaba → sent_count=0, error_count=N.
Ahora verifica presencia de messages/contacts en la respuesta.
2026-03-13 13:36:50 -05:00
Lizandro Guarnizo e081dc739a feat: soporte de imagen dinámica en plantillas WhatsApp
- Detecta header_type=IMAGE en get_template_details.php
- send_message (individual): muestra input de imagen si la plantilla lo requiere,
  sube a upload_media.php y envía header_image_url al backend
- broadcast (masivo): igual, con upload previo al envío
- api/send_message.php: acepta header_image_url y lo pasa como headerParameters
  [type:image, image:{link:URL}] a WhatsAppService::sendTemplateMessage()
- api/send_broadcast.php: igual para cada destinatario del masivo
- Preview en tiempo real de la imagen seleccionada en ambos formularios
2026-03-13 13:24:22 -05:00
Lizandro Guarnizo beb1bbe1d4 feat: sistema de pagos domicilios — cobro enfermero y estado pago admin
- database/07_add_pago_domicilio.sql: 6 columnas nuevas en lab_domicilios
  (pago_estado ENUM, pago_modo, pago_monto, pago_fecha, pago_notas, pago_registrado_por)
- Domicilio::filtrarCampos(): permite guardar campos de pago vía actualizar()
- Enfermera::agenda(): incluye valor_domicilio, valor_copago, pago_estado, pago_modo, pago_monto, pago_notas
- api/lab/registrar_pago.php: endpoint POST para registrar/actualizar pago del domicilio
- enfermero_portal.php: bloque cobro en card, modal registrar pago (efectivo/transferencia/exento), objeto pagoModal JS
- lab_domicilios.php: badge pago //🔵 en fila tabla, sección pago detallada en panel lateral
2026-03-12 22:53:24 -05:00
Lizandro Guarnizo 12e7b411d7 feat: enfermero_portal - mostrar todos los datos del paciente en tarjeta de domicilio
La tarjeta ahora muestra: documento, fecha de nacimiento, EPS,
teléfono (clickeable), correo (clickeable), exámenes solicitados
y tipo de cliente (particular/seguro con nombre del seguro).

Cambios:
- Enfermera::agenda() amplía SELECT con email, fecha_nacimiento,
  numero_documento, tipo_documento, eps, examenes_solicitados,
  tipo_cliente, seguro_nombre, ciudad, indicaciones_dir, notas_admin
- my_agenda.php simplificado: ya no re-consulta lab_domicilios por
  los campos que ahora vienen directo en la query
- enfermero_portal.php _cardHTML() muestra todos los campos nuevos
2026-03-12 22:05:47 -05:00
Lizandro Guarnizo db469b2134 up 2026-03-10 18:42:51 -05:00
Lizandro Guarnizo b57fc16ab3 fix: archivos >200KB usan URL publica, evita uploadMedia() con OpenSSL 3.x
El contenedor falla al subir a Facebook archivos >~200KB por renegociacion
TLS de OpenSSL 3.x (errno 55). Solucion sin rebuild:
- Archivos <=200KB: uploadMedia() como antes (funciona OK)
- Archivos >200KB: enviar URL publica - WhatsApp descarga desde el servidor
  directamente, sin pasar por el contenedor ni por OpenSSL

Aplica a imagenes, documentos, videos y audios.
2026-02-21 12:30:56 -05:00
Lizandro Guarnizo 51f1b04293 up 2026-02-21 11:45:32 -05:00
Lizandro Guarnizo 5dd48ba5c2 up 2026-02-21 11:24:15 -05:00
Lizandro Guarnizo 237f4aea0f Update webhook.php 2026-02-21 10:19:10 -05:00
Lizandro Guarnizo 6bab34bf13 up 2026-02-21 10:14:14 -05:00
Lizandro Guarnizo 38cd62eb0e up 2026-02-21 08:51:38 -05:00
Lizandro Guarnizo de4b07c806 up 2026-02-21 07:37:36 -05:00
Lizandro Guarnizo 2f73ee2a1a up 2026-02-20 11:46:29 -05:00
Lizandro Guarnizo 602e6d3724 up 2026-02-20 11:21:06 -05:00
Lizandro Guarnizo c965135af9 up 2026-02-20 11:01:33 -05:00
Lizandro Guarnizo e4672fa15d Update media-url.php 2026-02-20 10:34:55 -05:00
Lizandro Guarnizo c7f28a79f4 up 2026-02-20 10:29:52 -05:00
Lizandro Guarnizo 421a5a4d7c up 2026-02-20 09:07:37 -05:00
Lizandro Guarnizo 276af13387 up 2026-02-06 09:38:36 -05:00
Lizandro Guarnizo e722935ac4 up 2026-02-03 23:01:25 -05:00
Lizandro Guarnizo dcd470d71f Update get_templates.php 2026-02-03 21:48:08 -05:00
Lizandro Guarnizo 1aae148396 up 2026-02-03 21:30:55 -05:00
Lizandro Guarnizo 44423adb32 up 2026-01-29 11:40:04 -05:00
Lizandro Guarnizo 719212d628 up 2026-01-28 14:05:09 -05:00
Lizandro Guarnizo 2bf7d6c9a8 up 2026-01-28 13:49:07 -05:00
Lizandro Guarnizo 7997ecb830 up 2026-01-28 13:05:36 -05:00
Lizandro Guarnizo ee3524a54b up 2026-01-28 03:24:00 -05:00
Lizandro Guarnizo e9aecc6bd2 up 2026-01-28 02:44:28 -05:00