21 documentos en cuatro secciones, escritos sobre el comportamiento real del sistema —incluidos los casos que costaron diagnosticar esta semana. Manual de usuario (visible para todos): primeros pasos, recepción, toma de muestras, portal del enfermero y administración. Orientado a tareas concretas, no a describir pantallas. Documentación técnica: índice de módulos, turnero, formularios y firma digital, WhatsApp y bot, domicilios, webhook (migrado de WEBHOOK_ENDPOINTS.md) e inventario de endpoints. Arquitectura: visión general, enrutamiento y registro de módulos, roles y permisos, modelo de datos, integración con WhatsApp, y decisiones tomadas con su deuda técnica asociada. Operación: runbook de incidentes ordenado por síntoma, configuraciones críticas —incluido qué vive en Meta y no en la base— y despliegue. Se documentan explícitamente las trampas conocidas: role/role_id que hay que mantener sincronizados, las columnas can_* que el control de acceso no lee, las URL de plantilla que no se cambian desde el código, y las columnas históricas que quedaron en NULL sin forma de recuperarlas. README_DOCS.md apunta al módulo y explica cómo agregar páginas. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.3 KiB
Domicilios
Visitas domiciliarias: agendamiento, asignación de enfermeros y seguimiento.
Dónde está el código
Es de la generación anterior. El módulo es un puente:
// modules/lab_domicilios/views/index.php
require_once APP_ROOT . '/lab_domicilios.php';
| Archivo | Rol |
|---|---|
lab_domicilios.php |
Pantalla administrativa |
enfermero_portal.php |
Portal del enfermero, pensado para celular |
classes/lab/Domicilio.php |
Reglas de negocio |
classes/lab/Asignacion.php |
Vínculo enfermero–domicilio |
api/lab/*.php |
Endpoints |
Datos
lab_domicilios
├── lab_asignaciones qué enfermero atiende
├── lab_domicilio_notas seguimiento, admite adjuntos
└── lab_domicilio_pagos cobros
Estados: programado → en_curso → completado, o cancelado.
Permisos
Se combinan dos niveles.
Nivel módulo — hasModuleWrite('lab_domicilios') decide si aparecen los botones de crear y editar. Un rol con permission = 'read' ve la pantalla sin poder modificar.
Nivel registro — un enfermero solo puede editar domicilios que creó o que tiene asignados. Se verifica en el servidor (api/lab/save_domicilio.php):
SELECT d.creado_por,
(SELECT COUNT(*) FROM lab_asignaciones a
WHERE a.domicilio_id = d.id AND a.enfermera_id = ?) AS asignado
FROM lab_domicilios d WHERE d.id = ?
No alcanza con ocultar el botón en la vista: el endpoint verifica por su cuenta. Cualquier endpoint que modifique datos debe hacer lo mismo.
Portal del enfermero
enfermero_portal.php admite admin, superadmin y enfermero. Los administradores pueden ver el portal de un enfermero concreto pasando ?eid=<id>, útil para dar soporte.
Incluye:
- Agenda propia con creación y edición
- Notas de ficha y notas libres, con fotos y archivos
- Envío de formularios al paciente, o copia del enlace
- Enlace a WhatsApp con el mensaje ya redactado, presentando al profesional como parte del Laboratorio Ximena Caicedo
Formularios
Los domicilios usan la vía lab_form_envios (token de 64 hex, parámetro ?t=), a diferencia del turnero que usa UUID. Ver Formularios.
Cuando el enfermero firma, su nombre y cédula salen de lab_enfermeras a través de admin_users.enfermera_id.