# Checklist de entrada em produção Este documento é o registo de prontidão. Cada item deve ter responsável, data e ligação para a evidência no sistema institucional de operação. Nunca colocar segredos, tokens ou dados pessoais neste ficheiro. ## 1. Microsoft Entra ID - [ ] Registar uma aplicação de tenant único do tipo Web. - [ ] Configurar exatamente `https:///auth/microsoft/callback` como redirect URI. - [ ] Criar credencial com validade e rotação definidas; preferir mecanismo externo de segredos. - [ ] Definir `MICROSOFT_ENABLED=true`, client ID, tenant GUID, secret e redirect URI fora do repositório. - [ ] Confirmar que uma conta local consegue associar e remover a identidade em Segurança. - [ ] Confirmar login, logout, utilizador desativado, tenant incorreto e rotação da chave de assinatura. - [ ] Aplicar Conditional Access/MFA institucional aos perfis privilegiados. - [ ] Documentar o procedimento de recuperação através de login local administrado. Referências oficiais: [Authorization Code Flow com PKCE](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow), [tokens e validação de claims](https://learn.microsoft.com/en-us/entra/identity-platform/security-tokens) e [validação de assinatura/emissor](https://learn.microsoft.com/en-us/entra/identity-platform/access-tokens). ## 2. Snipe-IT - [ ] Confirmar URL e versão da instância institucional. - [ ] Criar conta/token de leitura com menor privilégio. - [ ] Criar conta/token operacional separado, apenas com checkout/check-in necessários. - [ ] Executar sincronização integral e comparar amostra de etiquetas, categorias, estados e localizações. - [ ] Confirmar por inspeção e testes simulados que o portal não contém endpoints de criação, edição ou eliminação de inventário. - [ ] Validar tecnicamente a produção apenas com pedidos `GET`; nunca usar um movimento artificial como teste de conectividade. - [ ] No primeiro movimento institucional legítimo, usar um ativo existente e não atribuído, verificar o preflight e reconciliar `handover_records`. - [ ] Confirmar que um ativo já atribuído é bloqueado sem qualquer pedido de escrita. - [ ] Confirmar resposta a indisponibilidade, timeout e falha parcial sem retries de escrita. ## 3. Email, domínio e TLS - [ ] Configurar SMTP institucional e remetente autorizado. - [ ] Validar submissão, esclarecimento, aprovação, rejeição e substituição em destinatários reais de teste. - [ ] Publicar domínio e certificado TLS com renovação automática. - [ ] Definir `APP_ENV=production`, `APP_DEBUG=false`, `APP_URL=https://...`, cookies seguros e proxy confiável. - [ ] Remover exposição pública de PostgreSQL, Redis, Vite e Mailpit. ## 4. Segredos e infraestrutura - [ ] Montar `APP_KEY`, credenciais PostgreSQL/Redis/SMTP, tokens Snipe-IT e Entra através do gestor externo. - [ ] Confirmar que logs, dumps, imagens e artefactos de CI não contêm segredos. - [ ] Construir imagem imutável, executar migrations com etapa controlada e reiniciar workers após deploy. - [ ] Definir limites de CPU/memória, rotação de logs e política de atualização de imagens/dependências. ## 5. Saúde, monitorização e alertas - [ ] Monitorizar `GET /health/live` para disponibilidade do processo. - [ ] Usar `GET /health/ready` para retirar instâncias sem PostgreSQL/cache do balanceamento. - [ ] Alertar para HTTP 5xx, latência, filas acumuladas, jobs falhados, scheduler parado e disco baixo. - [ ] Alertar para sincronização Snipe-IT falhada/antiga e erros de autenticação anormais. - [ ] Definir contacto, severidade, escalonamento e janela de manutenção. ## 6. Backup e recuperação - [ ] Agendar `ops/backup-postgres.sh ` com utilizador restrito e armazenamento cifrado. - [ ] Copiar backups e respetivos `.sha256` para uma localização externa com retenção diária/semanal/mensal. - [ ] Monitorizar idade, tamanho e resultado de cada backup. - [ ] Executar `ops/test-restore-postgres.sh ` pelo menos mensalmente em ambiente isolado. - [ ] Registar RPO, RTO, responsável, duração e resultado do ensaio. - [ ] Ensaiar recuperação da configuração e segredos por procedimento separado. ## 7. Segurança, desempenho e piloto - [ ] Executar análise de dependências, análise estática e testes completos no artefacto de release. - [ ] Testar autorização horizontal/vertical para todos os perfis e exportações. - [ ] Testar concorrência na aprovação/reserva contra PostgreSQL real. - [ ] Medir catálogo, calendário global, relatórios e exportações com volume representativo. - [ ] Executar E2E com equipamentos reais, scanner, entrega parcial, incidente e reconciliação. - [ ] Importar utilizadores/perfis iniciais e rever a matriz de aprovadores. - [ ] Formar requisitantes, aprovadores, operadores e administradores com runbook aplicável. - [ ] Realizar piloto limitado, registar incidentes e obter decisão formal de go/no-go. ## Registo de evidências | Área | Responsável | Data | Resultado | Evidência externa | |---|---|---|---|---| | Entra ID | Por atribuir | — | Pendente | — | | Snipe-IT | Codex (validação técnica) | 2026-08-05 | Parcial: dois tokens distintos responderam a `GET`; sincronização de 2367 ativos; zero escritas | Registo interno em [PROJECT_STATUS.md](PROJECT_STATUS.md); validação institucional pendente | | SMTP/TLS | Por atribuir | — | Pendente | — | | Monitorização | Por atribuir | — | Pendente | — | | Restauro | Por atribuir | — | Pendente | — | | Piloto | Por atribuir | — | Pendente | — |