# 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 aplica un cambio directo en producción, **deje también la migración**: sin ella, un entorno nuevo no tendrá ese cambio y nadie se va a enterar hasta que falle.