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>
66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
# 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:
|
||
|
||
```php
|
||
// 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`):
|
||
|
||
```sql
|
||
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](?m=soporte&v=documentacion&s=tecnica&d=formularios).
|
||
|
||
Cuando el enfermero firma, su nombre y cédula salen de `lab_enfermeras` a través de `admin_users.enfermera_id`.
|