# 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`.
