Commit Graph
438 Commits
Author SHA1 Message Date
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 aa17dc299b feat: soporte multi-archivo en modal Agendar Domicilio 2026-03-24 21:30:58 -05:00
Lizandro Guarnizo 666a2e60b8 Revert "feat: soporte multi-archivo en modal Agendar Domicilio"
This reverts commit 45ef99991b.
2026-03-24 21:26:13 -05:00
Lizandro Guarnizo 45ef99991b feat: soporte multi-archivo en modal Agendar Domicilio 2026-03-24 21:21:39 -05:00
Lizandro Guarnizo 0e9dedd78a agendar domicilio: modo crear nuevo paciente desde el modal 2026-03-20 15:18:14 -05:00
Lizandro Guarnizo 47d5adbb50 agendar domicilio: inputs editables para nombre y cédula del paciente 2026-03-20 15:15:17 -05:00
Lizandro Guarnizo e89ec89c66 lab: responsive sidebar toggle en todas las páginas del módulo lab 2026-03-19 11:43:01 -05:00
Lizandro Guarnizo 8fb345c404 responsive: breakpoints unificados, header mobile, sidebar toggle, tablas scroll 2026-03-19 11:30:14 -05:00
Lizandro Guarnizo 0faf101fd1 conversations: fix auth con isUserLoggedIn + escapar comillas dobles y backticks en onclick 2026-03-19 07:55:31 -05:00
Lizandro Guarnizo dd8d4f9e67 conversations: fix apostrofe en onclick + quitar bypass auth dev 2026-03-18 15:14:46 -05:00
Lizandro Guarnizo 3a9538ad78 index: redirigir enfermeros a enfermero_portal 2026-03-17 15:57:32 -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 922b129094 form_cliente: linked vacío editable + firma_profesional bloqueada para paciente 2026-03-17 15:44:03 -05:00
Lizandro Guarnizo c0ed80d7d1 ver_formulario: firmas inline en su posición original del esquema (no al final) 2026-03-17 15:35:26 -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 c781863cd4 portal: orden médica siempre muestra botón descarga (fix PDF/bin) 2026-03-17 15:18:54 -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 9e5a7017e1 portal enfermero: ver formularios paciente + fix orden médica .bin via descargar_orden.php 2026-03-17 15:04:35 -05:00
Lizandro Guarnizo 23bda70cb8 firma: tabs canvas/foto, drag&drop, fallback seguro, aviso builder 2026-03-17 13:34:18 -05:00
Lizandro Guarnizo 775c654790 cambios 2026-03-17 12:58:42 -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 4106840a39 up 2026-03-16 21:33:01 -05:00
Lizandro Guarnizo fe1d3c31b3 foto 2026-03-16 21:00:39 -05:00
Lizandro Guarnizo 79bcc5e4bf up 2026-03-16 20:46:54 -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 07febbfd7e Update lab_domicilios.php 2026-03-16 20:05:32 -05:00
Lizandro Guarnizo 8b2e294636 Update lab_formulario_builder.php 2026-03-16 18:37: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 405a3751e7 fix: T&C tab - quitar display:none y agregar case terms en loadTabData 2026-03-14 00:09:26 -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 0b9744e9ef fix: eliminar cierre de funcion duplicado en app_simple.js 2026-03-13 23:57:30 -05:00
Lizandro Guarnizo 032219a4b6 fix: cerrar funcion toggleAdminUserStatus antes de las funciones de perfil WA 2026-03-13 23:55:40 -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 290cdcc7ff fix: detectar rechazo T&C primero para evitar falso positivo con 'no acepto' 2026-03-13 23:39:39 -05:00
Lizandro Guarnizo 0987329a9b fix: sendWelcomeMessage no envía si términos no han sido aceptados 2026-03-13 23:36:51 -05:00
Lizandro Guarnizo 3d3c37fa18 fix: al aceptar T&C ir directo al menu, no enviar bienvenida por separado 2026-03-13 23:32:18 -05:00
Lizandro Guarnizo 94c6110e07 fix: welcome solo se envía si ya aceptó términos 2026-03-13 23:22:20 -05:00
Lizandro Guarnizo 95f83444a0 fix: system_config toma prioridad sobre terms_versions para mensajes T&C 2026-03-13 23:17:15 -05:00
Lizandro Guarnizo abfab22c35 fix: advisory lock por usuario en processMessage para eliminar race condition
- GET_LOCK('bot_user_ID', 10) serializa el procesamiento por usuario
- Solo un proceso a la vez puede ejecutar processMessage para el mismo user
- Recarga datos frescos del usuario tras adquirir el lock
- El lock se libera siempre en el bloque finally, incluso si hay excepciones
- Resuelve definitivamente el doble envío de bienvenida + términos
2026-03-13 19:33:31 -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 80e9cb43db fix: normalizar http/https al comparar URL del PDF para evitar duplicado 2026-03-13 19:16:10 -05:00
Lizandro Guarnizo 0e9c6935d8 fix: evitar doble saludo y URL duplicada en mensaje de términos
- sendTermsMessage: solo agrega PDF al final si la URL no está ya en el mensaje
- sendTermsMessage: marca welcome_sent_at=now() junto con terms_pending=1
  para evitar race condition donde un segundo webhook concurrente cae en
  isNewUser() y envía la bienvenida mientras los términos ya fueron enviados
2026-03-13 19:10:43 -05:00
Lizandro Guarnizo 46a9d97a07 fix: eliminar polling get_last_webhook_time (innecesario en index.php) 2026-03-13 18:47:21 -05:00
Lizandro Guarnizo 8df007d3de fix: actualizar APP_URL por defecto a bot.laboratorioximenacaicedo.com 2026-03-13 16:09:20 -05:00
Lizandro Guarnizo 730e1e9636 fix: accion ENUM en lab_autorizaciones al crear orden
El metodo registrarCambioEstado usaba estadoNuevo ('pendiente')
como valor de accion, pero pendiente no es un valor valido del
ENUM de lab_autorizaciones.accion.

Se pasa 'creada' explicitamente al crear una orden nueva, que si
es un valor valido del ENUM ('creada','en_revision','autorizada',
'rechazada','en_domicilio','completada','editada').
2026-03-13 15:53:42 -05:00