Nuevo módulo `soporte` con la documentación del proyecto en cuatro secciones:
manual de usuario (visible para todos), y documentación técnica, arquitectura
y operación (solo administradores).
- Markdown.php: renderizador propio del subconjunto que usa la documentación
(encabezados, listas anidadas, tablas, código, citas). Escapa todo el texto
antes de aplicar formato, así que los .md no pueden inyectar HTML. Se
prefirió un archivo auditable a incorporar una dependencia externa.
- DocIndex.php: descubre los .md, arma el árbol, resuelve acceso por sección
y construye el índice del buscador.
- Generadores.php: expande marcadores {{modulos}}, {{endpoints}}, {{tablas}},
{{roles}} y {{servicios}} leyendo el código y la base en cada carga, para
que los inventarios no puedan quedar desactualizados.
Se registra en SYSTEM_MODULES y se concede a los 12 roles con permission=read.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
89 lines
3.6 KiB
Markdown
89 lines
3.6 KiB
Markdown
# Configuraciones críticas
|
|
|
|
Dónde vive cada cosa que se configura. La pregunta que más tiempo hace perder es *«¿esto dónde se cambia?»*, sobre todo porque no todo está en la base de datos.
|
|
|
|
## Las tres tablas de configuración
|
|
|
|
| Tabla | Contenido | Se edita desde |
|
|
|---|---|---|
|
|
| `system_config` | Credenciales de WhatsApp, webhook, mensaje de términos | Base de datos |
|
|
| `lab_config` | Datos de la empresa, encabezados de documentos, clave y consumo de LIA | Configuración del laboratorio |
|
|
| `turnero_*` | Lugares, prioridades, dispositivos, playlist de TV | Configuración del turnero |
|
|
|
|
## Lo que NO está en la base de datos
|
|
|
|
Esto es lo que más confunde:
|
|
|
|
| Configuración | Dónde vive de verdad |
|
|
|---|---|
|
|
| URL del botón de consentimiento | **Plantilla en el WhatsApp Manager de Meta** |
|
|
| Texto y formato de las plantillas | **Meta** (`message_templates` es solo una copia) |
|
|
| Dominio del sistema | Se deduce del `HTTP_HOST` de cada petición |
|
|
|
|
> Cambiar el código **no** cambia la URL que reciben los pacientes en el botón de una plantilla. Eso se edita en Meta y requiere reaprobación.
|
|
|
|
## Datos de la empresa
|
|
|
|
En `lab_config`, salen impresos en el encabezado de todos los documentos:
|
|
|
|
| Clave | Ejemplo |
|
|
|---|---|
|
|
| `empresa_nombre` | XIMENA CAICEDO G. E.U |
|
|
| `empresa_subtitulo` | Laboratorio Hematológico |
|
|
| `empresa_direccion` | Calle 21 #0A-26, Barrio Blanco |
|
|
| `empresa_ciudad` | Cúcuta, Norte de Santander |
|
|
| `empresa_telefono` | +57 305 337 0116 |
|
|
| `empresa_email` | servicioalcliente@laboratorioximenacaicedo.com |
|
|
| `doc_logo_base64` | Logo embebido |
|
|
| `doc_color` | Color de encabezados |
|
|
|
|
Se editan desde **Configuración del laboratorio**, sin tocar código.
|
|
|
|
## Dominio del sistema
|
|
|
|
`APP_URL` y `BASE_URL` se calculan en cada petición a partir del host (`config/config.php`):
|
|
|
|
```php
|
|
$__host = $_SERVER['HTTP_HOST'] ?? 'localhost';
|
|
define('APP_URL', $__proto . '://' . $__host);
|
|
```
|
|
|
|
Detecta HTTPS detrás de proxy reverso mediante `X-Forwarded-Proto`.
|
|
|
|
> Consecuencia: si alguien entra por una IP o un dominio alternativo, **los enlaces que se generen en esa sesión llevarán esa dirección** — y quedan guardados así en el mensaje que recibe el paciente. Si eso importa, conviene fijar `APP_URL` explícitamente.
|
|
|
|
## Turnero
|
|
|
|
| Qué | Dónde |
|
|
|---|---|
|
|
| Escritorios y estaciones | `turnero_lugares` |
|
|
| Formularios obligatorios por estación | `turnero_lugar_consentimientos` |
|
|
| Formularios obligatorios por examen | `exam_tipo_consentimientos` |
|
|
| Equipos fijos por IP o token | `turnero_dispositivos` |
|
|
| Prioridades de la cola | `turnero_prioridades` |
|
|
| Playlist de la pantalla de TV | `turnero_tv_media` |
|
|
|
|
Las estaciones de toma de muestras exigen el formulario **Datos Toma de Muestras (F-LAB-08)**, incluso en visitas marcadas como *solo entrega de muestras*.
|
|
|
|
## LIA
|
|
|
|
| Clave | Qué es |
|
|
|---|---|
|
|
| `lab_config.gemini_api_key` | Clave de la API de Google Gemini |
|
|
| `lab_config.lia_tokens_usados` | Consumo acumulado (tope: 1.000.000) |
|
|
|
|
El tope está en el código como `LIA_TOKENS_MAX`.
|
|
|
|
## Términos y condiciones
|
|
|
|
En **dos** lugares que hay que mantener sincronizados:
|
|
|
|
- `terms_versions` — versión activa, URL del documento, mensajes de aceptación y rechazo
|
|
- `system_config.terms_message` — el texto de bienvenida, que **repite la URL** dentro
|
|
|
|
## Cambios de esquema
|
|
|
|
Van en `migrations/`, con nombre `AAAAMMDD_descripcion.sql` e idempotentes (`IF NOT EXISTS`, guardas en `UPDATE`/`INSERT`).
|
|
|
|
Si aplicás un cambio directo en producción, **dejá también la migración**: sin ella, un entorno nuevo no tendrá ese cambio y nadie se va a enterar hasta que falle.
|