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