# Contrato oficial MariaDB/MySQL do NVR

## Escopo

Este documento congela o contrato oficial do banco central compartilhado entre portal e NVR.

## Regras definitivas

- banco central oficial: **MariaDB/MySQL**
- driver oficial do runtime: `DB_CONNECTION=mysql`
- alias aceito apenas por compatibilidade: `DB_CONNECTION=mariadb`
- porta oficial: `3306`
- charset oficial: `utf8mb4`
- collation oficial: `utf8mb4_unicode_ci`
- timezone de sessão oficial: `+00:00`
- extensões PHP obrigatórias do runtime central: `pdo_mysql`, `mbstring`, `redis`, `pcntl` e `opcache`
- extensões PHP obrigatórias do gateway local: `pdo_sqlite` e `sqlite3`
- clientes operacionais suportados: `mysql`, `mysqldump` e `composer`

## Compatibilidade portal + NVR

- o portal e o NVR podem compartilhar o mesmo schema central `plataforma_central`
- o NVR mantém namespace controlado para tabelas próprias (`NVR_DB_TABLE_PREFIX=nvr_`)
- a família `DB_CENTRAL_*` existe apenas como fallback transitório para ambientes legados
- a aplicação fecha o runtime em `mysql` mesmo quando a variável solicitada vier com alias incompatível

## Modelagem revisada para MariaDB/MySQL

- UUIDs em `CHAR(36)`
- datas operacionais em `DATETIME(6)`
- JSON persistido em colunas compatíveis com MariaDB/MySQL e validado pela aplicação/schema
- índices, constraints, defaults, upserts e scripts operacionais revisados para a família MySQL
- o `/gateway` pode continuar usando SQLite local apenas para metadados operacionais fora do banco central

## Fora do contrato

- motores fora da família MySQL não fazem parte do runtime central desta versão
- drivers, bibliotecas e serviços externos à família MySQL não integram o baseline oficial desta entrega

## Baseline do container oficial

- o `deploy/docker/php/Dockerfile` materializa o runtime compartilhado de portal, NVR e gateway sem depender de stack divergente fora da família MySQL;
- o serviço `php` do compose sobe pelo wrapper `scripts/run-shared-php.sh`, que garante o vendor Laravel do `platform` antes de expor o portal real;
- `boot-http`, `boot-queue`, `boot-scheduler` e `migrate` usam o mesmo bootstrap para manter coerência operacional em HTTP, fila, scheduler e manutenção.
