# Estado do projeto e handoff **Atualizado em:** 4 de agosto de 2026 **Fase:** Fase 1 concluída; primeiro fluxo vertical da Fase 3 concluído **Último agente:** Codex ## Resultado disponível - Projeto oficial Laravel 13 React Starter Kit criado. - Autenticação local via Fortify, recuperação de palavra-passe, verificação de email, 2FA e passkeys. - Registo público desativado conforme o plano. - Estrutura relacional de utilizadores, identidades externas, perfis e permissões. - Cache local de ativos Snipe-IT. - Modelo completo inicial para reservas, itens, aprovações, bloqueios, entrega/devolução, sincronizações e auditoria. - Proteção PostgreSQL contra períodos sobrepostos para o mesmo equipamento através de `EXCLUDE USING gist` e intervalos `[início, fim)`. - Serviço de disponibilidade que considera estado local, atribuição, reservas e bloqueios. - Criação transacional de uma requisição pendente com vários equipamentos e registo de auditoria. - Dashboard pessoal, catálogo com pesquisa/filtros, formulário de nova requisição e histórico. - Docker Compose com Nginx, PHP-FPM, PostgreSQL, Redis, Node/Vite, filas, scheduler e Mailpit. - Dados fictícios e duas contas locais para desenvolvimento. ## Limites conhecidos - A API real do Snipe-IT ainda não está implementada. O catálogo utiliza dados fictícios do seeder. - Microsoft Entra ID ainda não está implementado; as variáveis de ambiente já estão definidas. - Aprovação, rejeição, entrega e devolução têm tabelas preparadas, mas ainda não possuem ações ou interface. - As notificações e jobs de expiração ainda não foram implementados. - As políticas de autorização finas ainda não foram ligadas às rotas; nesta fase todas as rotas funcionais exigem utilizador autenticado, verificado e ativo. - A disponibilidade apresentada no catálogo ainda não recebe um período; a validação real ocorre ao submeter. ## Próxima tarefa recomendada Implementar a **Fase 2 — cliente e sincronização Snipe-IT**: 1. abrir `docs/ARCHITECTURE.md` e `config/services.php`; 2. criar `app/Integrations/SnipeIt/SnipeItClient.php`, DTOs, mapper e exceções; 3. implementar paginação, timeout, retry limitado e token de leitura; 4. criar `AssetSyncService`, job e comando `snipe:sync-assets`; 5. testar com `Http::fake()` paginação, falhas e desativação de ativos ausentes; 6. criar página administrativa de diagnóstico apenas para administradores; 7. atualizar este documento e o changelog. ## Testes da última sessão Validação concluída em 4 de agosto de 2026: - `docker compose exec -T app composer test`: passou; - Laravel Pint: 78 ficheiros sem desvios; - PHPStan/Larastan nível 7: 59 ficheiros, zero erros; - Pest: 44 testes passaram, 157 asserções e 2 testes de registo ignorados por a funcionalidade estar deliberadamente desativada; - TypeScript (`tsc --noEmit`): passou; - ESLint: passou; - Prettier: passou; - Vite: build de produção concluído, 2304 módulos transformados; - PostgreSQL 17: `migrate:fresh --seed` concluído, incluindo extensão `btree_gist` e restrição de exclusão temporal; - smoke test HTTP: `/login` respondeu com estado 200 através do Nginx; - Vite em Docker: URL pública, HMR e CORS verificados em `localhost:5173`; corrigida a página em branco causada pela publicação anterior de `0.0.0.0:5173`; - Inertia SSR: renderização do login validada através do serviço `node`; corrigido o componente de mensagens flash que usava `usePage()` fora do contexto Inertia; - verificação visual no browser integrado: não executada devido a uma política administrativa temporariamente indisponível no browser desta sessão; não foi detetado erro da aplicação. ## Decisões pendentes do contexto institucional Estas decisões não bloqueiam o desenvolvimento com defaults seguros, mas devem ser confirmadas antes do piloto: - versão e URL da instância Snipe-IT; - categorias e estados requisitáveis; - tenant, client ID e redirect URI do Entra ID; - matriz final de aprovadores por categoria/departamento; - duração máxima, antecedência e margens por categoria; - domínio institucional e método de emissão TLS; - SMTP institucional.