Commit Graph
181 Commits
Author SHA1 Message Date
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 ff8454fa5a up 2026-06-16 16:55:22 -05:00
Lizandro Guarnizo 415ea3ef56 up 2026-06-16 12:06:26 -05:00
Lizandro GuarnizoandClaude Haiku 4.5 d7b1aea5a4 fix: signature fields deduplicate and share across same-type fields
- PHP pre-computes one shared SVG per type (firma/firma_profesional)
- Schema loop skips duplicate firma fields of same type already rendered
- Patient signature from turnero widget propagates to all 'firma' schema fields
- firmar_profesional.php saves nurse signature to ALL firma_profesional fields

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-16 11:41:20 -05:00
Lizandro Guarnizo b317639258 up 2026-05-27 21:39:53 -05:00
Lizandro Guarnizo 2f72d87c3b cambios 2026-05-27 20:40:17 -05:00
Lizandro Guarnizo b8de9ee666 up 2026-05-27 11:44:07 -05:00
Lizandro Guarnizo 313e57aace p 2026-05-27 10:30:47 -05:00
Lizandro Guarnizo 0de3e6e281 up 2026-05-11 14:55:17 -05:00
Lizandro Guarnizo 00232b3513 up 2026-05-11 13:45:36 -05:00
Lizandro Guarnizo f197118acb cambios importates 2026-05-11 12:21:56 -05:00
Lizandro Guarnizo 4bf9d99f8b Update _helpers.php 2026-04-21 16:07:30 -05:00
Lizandro Guarnizo 0164c51c1a up 2026-04-16 23:07:53 -05:00
Lizandro Guarnizo 50b7f7f8ca up 2026-04-16 21:24:01 -05:00
Lizandro Guarnizo c8bef9d9c4 up 2026-04-10 23:04:28 -05:00
Lizandro Guarnizo 5e58b14eba reportes 2026-04-09 16:38:03 -05:00
Lizandro Guarnizo c68a79a3a7 subir mas de un archivo, reprogramados 2026-04-08 10:31:12 -05:00
Lizandro Guarnizo 882ce56e96 multiples documentos 2026-04-08 09:58:08 -05:00
Lizandro Guarnizo db254ca02f direccion 2026-04-08 09:47:47 -05:00
Lizandro Guarnizo d38b5936ca actividades 2026-04-08 09:02:32 -05:00
Lizandro Guarnizo cbf7a8c296 up 2026-04-08 08:31:21 -05:00
Lizandro Guarnizo 4f1b2e146c up 2026-04-07 15:57:53 -05:00
Lizandro Guarnizo ded060e161 lab_formularios 2026-04-07 15:12:22 -05:00
Lizandro Guarnizo 400ff3d615 fix: get_pacientes.php soporta ?id=X para retornar paciente específico con phone_number correcto 2026-04-06 16:45:24 -05:00
Lizandro Guarnizo ca90f79625 up 2026-04-06 12:30:37 -05:00
Lizandro Guarnizo 7956d5431b fix: columna activa → is_active en lab_enfermeras (get_reporte_enfermero) 2026-04-02 11:54:37 -05:00
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