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>
80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
# Despliegue y mantenimiento
|
|
|
|
## Cómo se despliega
|
|
|
|
No hay build ni compilación. El código PHP se sirve directo:
|
|
|
|
```bash
|
|
git pull
|
|
```
|
|
|
|
Con eso los cambios están en producción. Es la contrapartida de no usar framework de frontend.
|
|
|
|
**Si el cambio incluye esquema de base de datos**, hay que correr la migración además del `git pull`.
|
|
|
|
## Repositorio
|
|
|
|
| | |
|
|
|---|---|
|
|
| Remoto | `gitea` |
|
|
| Rama | `main` |
|
|
|
|
Se trabaja directo sobre `main`.
|
|
|
|
## Migraciones
|
|
|
|
Van en `migrations/`, con nombre `AAAAMMDD_descripcion.sql`.
|
|
|
|
**Deben ser idempotentes** — poder correrse más de una vez sin causar daño:
|
|
|
|
```sql
|
|
ALTER TABLE admin_users
|
|
ADD COLUMN IF NOT EXISTS cedula VARCHAR(30) NULL AFTER cargo;
|
|
|
|
UPDATE admin_users SET cedula = username
|
|
WHERE cedula IS NULL AND username REGEXP '^[0-9]{5,15}$';
|
|
```
|
|
|
|
MariaDB 11.8 admite `IF NOT EXISTS` en `ALTER TABLE`. Para `UPDATE` e `INSERT`, la guarda va en el `WHERE`.
|
|
|
|
Antes de dar por buena una migración, corrila dos veces y verificá que la segunda no cambie nada.
|
|
|
|
> Aplicar un cambio directo en producción sin dejar la migración hace que un entorno nuevo no lo tenga, y nadie se entera hasta que algo falla. Si tocás el esquema, dejá el archivo.
|
|
|
|
## Archivos subidos
|
|
|
|
| Carpeta | Contenido |
|
|
|---|---|
|
|
| `uploads/turnero/tv_media/` | Videos e imágenes de la pantalla de TV |
|
|
| `uploads/terms/` | Documentos de términos y condiciones |
|
|
|
|
Se crean solas al primer uso. **No están en el repositorio**: al mover el sistema de servidor hay que copiarlas aparte, o los enlaces quedan rotos.
|
|
|
|
## Verificaciones después de desplegar
|
|
|
|
```bash
|
|
# Sintaxis de los archivos tocados
|
|
php -l archivo.php
|
|
|
|
# ¿Responde un enlace público?
|
|
curl -s -o /dev/null -w "%{http_code}\n" "https://<dominio>/<ruta>"
|
|
```
|
|
|
|
Si el cambio afectó permisos, recordá que **las sesiones abiertas conservan los permisos viejos** hasta que el usuario vuelva a entrar.
|
|
|
|
## Configuración por entorno
|
|
|
|
Las credenciales se leen de variables de entorno (`.env`, vía phpdotenv) y de `system_config`. El dominio no se configura: se deduce del `HTTP_HOST` de cada petición.
|
|
|
|
## Mantenimiento periódico
|
|
|
|
| Cada | Revisar |
|
|
|---|---|
|
|
| Semana | Consumo de LIA (`lab_config.lia_tokens_usados`) contra el tope de 1.000.000 |
|
|
| Mes | Que los enlaces enviados por WhatsApp respondan — sobre todo el de términos |
|
|
| Mes | Consentimientos que quedaron sin firmar |
|
|
| Trimestre | Plantillas de Meta: que sigan aprobadas |
|
|
| Trimestre | Muestras pendientes acumuladas por paciente |
|
|
|
|
Las consultas para varias de estas revisiones están en el [runbook](?m=soporte&v=documentacion&s=operacion&d=runbook).
|