Files
reservas/docs/PROJECT_STATUS.md

3.8 KiB

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;
  • 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.