{
  "id": "provider-appserviceprovider",
  "title": "Provider — AppServiceProvider",
  "description": "Bootstrap global de Eloquent, Activity Log, migrations, locale, timezone e moeda.",
  "type": "technical-reference",
  "status": "implemented",
  "visibility": "public",
  "tags": [
    "sge/providers",
    "sge/operacao",
    "sge/formatacao"
  ],
  "related": [
    "helper-datehelper",
    "helper-currencyhelper"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/app/Providers/AppServiceProvider.php",
    "https://github.com/sge-suite/sge/blob/master/app/Support/AuditInfrastructureModel.php",
    "https://github.com/sge-suite/sge/blob/master/tests/Feature/DatabaseAuditTest.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "## Boot atual\n\n- Associa `Activity` a `ActivityPolicy`, instala observers Eloquent para `DatabaseNotification` e `Media` e acrescenta ator, conta e vínculo às propriedades de cada evento. O ator vem do vínculo ativo, da conta, de `terminal` ou de `system` conforme o contexto.\n- Bloqueia atualização e exclusão de `Activity` pelo Model e impede `activitylog:clean` para preservar o histórico sem recursão. A proteção não cobre SQL direto.\n- Guarda de comandos `migrate*`: bloqueia migrations, rollback, refresh, reset e instalação fora de PostgreSQL.\n- `Model::preventLazyLoading(! app()->isProduction())`: denuncia lazy loading em desenvolvimento/testes e deixa produção sem essa proteção.\n- `setlocale(LC_ALL, config('app.locale').'.UTF-8')`: define locale do processo.\n- `date_default_timezone_set(config('app.timezone'))`: define timezone padrão do PHP.\n- `Number::useCurrency(config('app.currency'))`: define moeda padrão para `Number`.\n- `Number::useLocale(config('app.locale'))`: define locale padrão para formatação numérica.\n\nO [`DateHelper`](doc:helper-datehelper) depende do timezone da configuração; o [`CurrencyHelper`](doc:helper-currencyhelper) usa defaults compatíveis, mas aceita sobrescrita.\n\n## Checklist\n\n- [x] Configurar autoria e metadados de conta/vínculo/sistema para eventos do Activity Log.\n- [x] Proteger o histórico contra alteração/exclusão Eloquent e desabilitar a limpeza do pacote.\n- [x] Auditar notificações e mídia por allowlist, sem copiar payloads privados.\n- [x] Ativar proteção contra N+1 fora de produção.\n- [x] Exigir PostgreSQL para comandos de migration.\n- [x] Configurar locale, timezone, moeda e números.\n- [ ] Testar comportamento com locale/timezone usados no CI e produção.\n- [ ] Confirmar que todos os ambientes possuem `app.currency` definido.\n- [ ] Documentar exceções de performance antes de desativar `preventLazyLoading`.\n- [ ] Não adicionar inicialização de domínio pesado neste Provider.",
  "sections": [
    {
      "id": "boot-atual",
      "level": 2,
      "title": "Boot atual",
      "text": "- Associa `Activity` a `ActivityPolicy`, instala observers Eloquent para `DatabaseNotification` e `Media` e acrescenta ator, conta e vínculo às propriedades de cada evento. O ator vem do vínculo ativo, da conta, de `terminal` ou de `system` conforme o contexto. - Bloqueia atualização e exclusão de `Activity` pelo Model e impede `activitylog:clean` para preservar o histórico sem recursão. A proteção não cobre SQL direto. - Guarda de comandos `migrate*`: bloqueia migrations, rollback, refresh, reset e instalação fora de PostgreSQL. - `Model::preventLazyLoading(! app()->isProduction())`: denuncia lazy loading em desenvolvimento/testes e deixa produção sem essa proteção. - `setlocale(LC_ALL, config('app.locale').'.UTF-8')`: define locale do processo. - `date_default_timezone_set(config('app.timezone'))`: define timezone padrão do PHP. - `Number::useCurrency(config('app.currency'))`: define moeda padrão para `Number`. - `Number::useLocale(config('app.locale'))`: define locale padrão para formatação numérica.  O [`DateHelper`](doc:helper-datehelper) depende do timezone da configuração; o [`CurrencyHelper`](doc:helper-currencyhelper) usa defaults compatíveis, mas aceita sobrescrita.",
      "line": 1
    },
    {
      "id": "checklist",
      "level": 2,
      "title": "Checklist",
      "text": "- [x] Configurar autoria e metadados de conta/vínculo/sistema para eventos do Activity Log. - [x] Proteger o histórico contra alteração/exclusão Eloquent e desabilitar a limpeza do pacote. - [x] Auditar notificações e mídia por allowlist, sem copiar payloads privados. - [x] Ativar proteção contra N+1 fora de produção. - [x] Exigir PostgreSQL para comandos de migration. - [x] Configurar locale, timezone, moeda e números. - [ ] Testar comportamento com locale/timezone usados no CI e produção. - [ ] Confirmar que todos os ambientes possuem `app.currency` definido. - [ ] Documentar exceções de performance antes de desativar `preventLazyLoading`. - [ ] Não adicionar inicialização de domínio pesado neste Provider.",
      "line": 14
    }
  ],
  "sourcePath": "content/provider-appserviceprovider.md",
  "visuals": [],
  "apiVersion": 1
}
