{
  "id": "configuracao-e-bootstrap",
  "title": "Configuração e bootstrap",
  "description": "Mapa dos arquivos que inicializam a aplicação e configuram autenticação, locale, filas, cache e rotas.",
  "type": "technical-reference",
  "status": "in-progress",
  "visibility": "public",
  "tags": [
    "sge/desenvolvimento",
    "sge/configuracao",
    "sge/autenticacao",
    "sge/operacao"
  ],
  "related": [
    "schedules",
    "provider-appserviceprovider",
    "provider-fortifyserviceprovider",
    "migration-base-02-cache",
    "migration-base-03-jobs",
    "geracao-de-documentos-docx-e-variaveis",
    "helper-numbertowordshelper",
    "ambiente-de-desenvolvimento",
    "componentes-tecnicos",
    "providers",
    "testes-existentes",
    "fase-00-preparacao"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/bootstrap/app.php",
    "https://github.com/sge-suite/sge/blob/master/bootstrap/providers.php",
    "https://github.com/sge-suite/sge/blob/master/routes/console.php",
    "https://github.com/sge-suite/sge/blob/master/routes/web.php",
    "https://github.com/sge-suite/sge/blob/master/routes/settings.php",
    "https://github.com/sge-suite/sge/blob/master/config/auth.php",
    "https://github.com/sge-suite/sge/blob/master/config/fortify.php",
    "https://github.com/sge-suite/sge/blob/master/config/app.php",
    "https://github.com/sge-suite/sge/blob/master/config/cache.php",
    "https://github.com/sge-suite/sge/blob/master/config/session.php",
    "https://github.com/sge-suite/sge/blob/master/config/queue.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "Este mapa descreve os pontos de entrada que não são Models, Helpers ou migrations, mas alteram o comportamento global do projeto.\n\n## Bootstrap\n\n### `bootstrap/app.php`\n\n- Define a raiz da aplicação.\n- Registra rotas web em `routes/web.php` e comandos em `routes/console.php`.\n- Registra o endpoint de health check `/up`.\n- Mantém middleware padrão no estado atual.\n- Renderiza exceções como JSON quando a rota é `api/*` ou quando a requisição espera JSON.\n\n### `routes/console.php`\n\nAtualmente registra apenas o comando padrão `inspire`. Os comandos de domínio `internships:sync-execution-status` e `internships:notify-projected-end` estão planejados em [Schedules](doc:schedules); quando implementados, deverão rodar no `APP_TIMEZONE`, com `onOneServer()` e `withoutOverlapping()`, e serão acionados por `php artisan schedule:run`.\n\n### `bootstrap/providers.php`\n\nRegistra exatamente:\n\n- [`AppServiceProvider`](doc:provider-appserviceprovider);\n- [`FortifyServiceProvider`](doc:provider-fortifyserviceprovider).\n\n## Autenticação\n\n### `config/auth.php`\n\n| Configuração       | Estado atual                                         |\n| ------------------ | ---------------------------------------------------- |\n| guard padrão       | `web`, driver `session`.                             |\n| provider           | `users`, driver `eloquent`, Model `App\\Models\\User`. |\n| password broker    | `users`.                                             |\n| reset table        | `password_reset_tokens`.                             |\n| expiração/throttle | 60 minutos/60 segundos.                              |\n| confirmação        | timeout de 10800 segundos.                           |\n\n### `config/fortify.php`\n\n- Guard `web`, broker `users` e username/e-mail `email`.\n- Lowercase de username ativado.\n- Redirecionamento pós-autenticação para `/dashboard`.\n- Views de login, confirmação, reset e solicitação de reset habilitadas.\n- Única feature habilitada atualmente: `Features::resetPasswords()`.\n- Limiter de login aponta para `FortifyServiceProvider`.\n\n## Locale, data e moeda\n\n### `config/app.php`\n\nOs defaults atuais do arquivo são `UTC`, `USD`, locale `en`, fallback `en` e Faker `en_US`. [`AppServiceProvider`](doc:provider-appserviceprovider) aplica esses valores no processo.\n\n> [!warning] Divergência de produto\n> O SGE é uma aplicação brasileira e os helpers assumem formatos `pt_BR`. Antes da primeira tela institucional, confirmar e configurar `APP_TIMEZONE`, `APP_CURRENCY`, `APP_LOCALE`, `APP_FALLBACK_LOCALE` e `APP_FAKER_LOCALE` no ambiente e nos testes.\n\n## Cache, sessão e filas\n\n- `config/cache.php`: default `database`, usando `cache`/`cache_locks` da [migration base de cache](doc:migration-base-02-cache).\n- `config/session.php`: default `database`, tabela `sessions`, lifetime padrão de 120 minutos, serialização JSON.\n- `config/queue.php`: default `database`, tabela `jobs`, `retry_after` padrão de 90 segundos, `after_commit = false`.\n- [Migration base de Jobs](doc:migration-base-03-jobs) é a infraestrutura; tentativas de e-mail do domínio ficam em `email_delivery_attempts`.\n\n## Rotas existentes\n\n`routes/web.php` possui:\n\n- `/` → view `welcome`, nome `home`;\n- `/dashboard` → view `dashboard`, protegida por `auth`, nome `dashboard`;\n- inclusão de `routes/settings.php`.\n\nO Fortify registra as rotas de autenticação. As views atuais ficam em `resources/views/pages/auth/`.\n\n## Composer e autoload\n\n`composer.json`:\n\n- PSR-4 `App\\` → `app/`;\n- factories e seeders com namespaces próprios;\n- testes em `autoload-dev`;\n- `app/helpers.php` carregado como arquivo global;\n- scripts `lint:check`, `types:check`, `test`, `dev` e `setup`.\n\nDependências de domínio:\n\n- `phpoffice/phpword` ainda não está no `composer.json`; será necessário para [geração DOCX](doc:geracao-de-documentos-docx-e-variaveis);\n- [Helper — NumberToWordsHelper](doc:helper-numbertowordshelper) importa classes de `brick/math`, mas o pacote está ausente das dependências diretas do `composer.json`.\n\n## Checklist\n\n- [x] Registrar Providers no bootstrap.\n- [x] Configurar guard, provider, broker e views do Fortify.\n- [x] Configurar cache, sessão e filas em banco.\n- [x] Carregar funções globais pelo Composer.\n- [ ] Alinhar defaults de locale/moeda/timezone ao contexto brasileiro.\n- [ ] Definir `after_commit` dos Jobs antes de publicar eventos que dependam de transação.\n- [ ] Definir retry/backoff por tipo de Job.\n- [ ] Configurar e monitorar `schedule:run` por minuto em produção; validar lock compartilhado de `onOneServer`.\n- [ ] Confirmar rotas e middleware de cada módulo do SGE.\n- [ ] Criar testes de configuração crítica por ambiente.\n- [ ] Adicionar PHPWord/Brick Math e validar extensões PHP no setup, CI e produção.\n- [ ] Atualizar [Ambiente de desenvolvimento](doc:ambiente-de-desenvolvimento) com qualquer variável nova.\n\n## Relacionamentos\n\n- [Componentes técnicos](doc:componentes-tecnicos)\n- [Providers](doc:providers)\n- [Testes existentes](doc:testes-existentes)\n- [Fase de preparação](doc:fase-00-preparacao)",
  "sections": [
    {
      "id": "bootstrap",
      "level": 2,
      "title": "Bootstrap",
      "text": "",
      "line": 3
    },
    {
      "id": "bootstrap-app-php",
      "level": 3,
      "title": "bootstrap/app.php",
      "text": "- Define a raiz da aplicação. - Registra rotas web em `routes/web.php` e comandos em `routes/console.php`. - Registra o endpoint de health check `/up`. - Mantém middleware padrão no estado atual. - Renderiza exceções como JSON quando a rota é `api/*` ou quando a requisição espera JSON.",
      "line": 5
    },
    {
      "id": "routes-console-php",
      "level": 3,
      "title": "routes/console.php",
      "text": "Atualmente registra apenas o comando padrão `inspire`. Os comandos de domínio `internships:sync-execution-status` e `internships:notify-projected-end` estão planejados em [Schedules](doc:schedules); quando implementados, deverão rodar no `APP_TIMEZONE`, com `onOneServer()` e `withoutOverlapping()`, e serão acionados por `php artisan schedule:run`.",
      "line": 13
    },
    {
      "id": "bootstrap-providers-php",
      "level": 3,
      "title": "bootstrap/providers.php",
      "text": "Registra exatamente:  - [`AppServiceProvider`](doc:provider-appserviceprovider); - [`FortifyServiceProvider`](doc:provider-fortifyserviceprovider).",
      "line": 17
    },
    {
      "id": "autenticacao",
      "level": 2,
      "title": "Autenticação",
      "text": "",
      "line": 24
    },
    {
      "id": "config-auth-php",
      "level": 3,
      "title": "config/auth.php",
      "text": "| Configuração       | Estado atual                                         | | ------------------ | ---------------------------------------------------- | | guard padrão       | `web`, driver `session`.                             | | provider           | `users`, driver `eloquent`, Model `App\\Models\\User`. | | password broker    | `users`.                                             | | reset table        | `password_reset_tokens`.                             | | expiração/throttle | 60 minutos/60 segundos.                              | | confirmação        | timeout de 10800 segundos.                           |",
      "line": 26
    },
    {
      "id": "config-fortify-php",
      "level": 3,
      "title": "config/fortify.php",
      "text": "- Guard `web`, broker `users` e username/e-mail `email`. - Lowercase de username ativado. - Redirecionamento pós-autenticação para `/dashboard`. - Views de login, confirmação, reset e solicitação de reset habilitadas. - Única feature habilitada atualmente: `Features::resetPasswords()`. - Limiter de login aponta para `FortifyServiceProvider`.",
      "line": 37
    },
    {
      "id": "locale-data-e-moeda",
      "level": 2,
      "title": "Locale, data e moeda",
      "text": "",
      "line": 46
    },
    {
      "id": "config-app-php",
      "level": 3,
      "title": "config/app.php",
      "text": "Os defaults atuais do arquivo são `UTC`, `USD`, locale `en`, fallback `en` e Faker `en_US`. [`AppServiceProvider`](doc:provider-appserviceprovider) aplica esses valores no processo.  > [!warning] Divergência de produto > O SGE é uma aplicação brasileira e os helpers assumem formatos `pt_BR`. Antes da primeira tela institucional, confirmar e configurar `APP_TIMEZONE`, `APP_CURRENCY`, `APP_LOCALE`, `APP_FALLBACK_LOCALE` e `APP_FAKER_LOCALE` no ambiente e nos testes.",
      "line": 48
    },
    {
      "id": "cache-sessao-e-filas",
      "level": 2,
      "title": "Cache, sessão e filas",
      "text": "- `config/cache.php`: default `database`, usando `cache`/`cache_locks` da [migration base de cache](doc:migration-base-02-cache). - `config/session.php`: default `database`, tabela `sessions`, lifetime padrão de 120 minutos, serialização JSON. - `config/queue.php`: default `database`, tabela `jobs`, `retry_after` padrão de 90 segundos, `after_commit = false`. - [Migration base de Jobs](doc:migration-base-03-jobs) é a infraestrutura; tentativas de e-mail do domínio ficam em `email_delivery_attempts`.",
      "line": 55
    },
    {
      "id": "rotas-existentes",
      "level": 2,
      "title": "Rotas existentes",
      "text": "`routes/web.php` possui:  - `/` → view `welcome`, nome `home`; - `/dashboard` → view `dashboard`, protegida por `auth`, nome `dashboard`; - inclusão de `routes/settings.php`.  O Fortify registra as rotas de autenticação. As views atuais ficam em `resources/views/pages/auth/`.",
      "line": 62
    },
    {
      "id": "composer-e-autoload",
      "level": 2,
      "title": "Composer e autoload",
      "text": "`composer.json`:  - PSR-4 `App\\` → `app/`; - factories e seeders com namespaces próprios; - testes em `autoload-dev`; - `app/helpers.php` carregado como arquivo global; - scripts `lint:check`, `types:check`, `test`, `dev` e `setup`.  Dependências de domínio:  - `phpoffice/phpword` ainda não está no `composer.json`; será necessário para [geração DOCX](doc:geracao-de-documentos-docx-e-variaveis); - [Helper — NumberToWordsHelper](doc:helper-numbertowordshelper) importa classes de `brick/math`, mas o pacote está ausente das dependências diretas do `composer.json`.",
      "line": 72
    },
    {
      "id": "checklist",
      "level": 2,
      "title": "Checklist",
      "text": "- [x] Registrar Providers no bootstrap. - [x] Configurar guard, provider, broker e views do Fortify. - [x] Configurar cache, sessão e filas em banco. - [x] Carregar funções globais pelo Composer. - [ ] Alinhar defaults de locale/moeda/timezone ao contexto brasileiro. - [ ] Definir `after_commit` dos Jobs antes de publicar eventos que dependam de transação. - [ ] Definir retry/backoff por tipo de Job. - [ ] Configurar e monitorar `schedule:run` por minuto em produção; validar lock compartilhado de `onOneServer`. - [ ] Confirmar rotas e middleware de cada módulo do SGE. - [ ] Criar testes de configuração crítica por ambiente. - [ ] Adicionar PHPWord/Brick Math e validar extensões PHP no setup, CI e produção. - [ ] Atualizar [Ambiente de desenvolvimento](doc:ambiente-de-desenvolvimento) com qualquer variável nova.",
      "line": 87
    },
    {
      "id": "relacionamentos",
      "level": 2,
      "title": "Relacionamentos",
      "text": "- [Componentes técnicos](doc:componentes-tecnicos) - [Providers](doc:providers) - [Testes existentes](doc:testes-existentes) - [Fase de preparação](doc:fase-00-preparacao)",
      "line": 102
    }
  ],
  "sourcePath": "content/configuracao-e-bootstrap.md",
  "visuals": [],
  "apiVersion": 1
}
