5.6 KiB
5.6 KiB
Estado do projeto e handoff
Atualizado em: 4 de agosto de 2026
Fase: Fases 1, 2 e 3 concluídas
Ú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 giste 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.
- Cliente Snipe-IT autenticado com paginação, timeout, retry seletivo e validação de respostas.
- Sincronização convergente de ativos com histórico, hash de conteúdo, lock, job único e desativação apenas após execução completa.
- Comando
snipe:sync-assets, execução horária e painel de diagnóstico exclusivo para administradores. - Pesquisa do catálogo por início/fim que exclui atribuições atuais, reservas bloqueantes e bloqueios administrativos.
- Propagação do período consultado do catálogo para o formulário e consulta atualizável de equipamentos livres.
- Cancelamento pelo próprio requisitante, com validação de estado, libertação transacional dos itens e auditoria.
- Expiração de pré-reservas vencidas através do comando
reservations:expiree job único agendado a cada cinco minutos. - Calendário mensal pessoal, isolado por utilizador e com navegação entre meses.
Limites conhecidos
- A integração está implementada e testada contra respostas simuladas; falta configurar e validar URL, versão e token da instância institucional. Até lá, 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 ainda não foram implementadas.
- 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.
- O calendário atual é a vista mensal pessoal do MVP; vistas diária, semanal, global e por equipamento/categoria/localização ficam para as áreas operacional e administrativa.
Próxima tarefa recomendada
Implementar a Fase 4 — aprovações:
- criar
app/Domain/Approvals/Services/ApprovalService.phpe policies para o perfil aprovador; - criar fila e detalhe de requisições pendentes com filtros por data, categoria e requisitante;
- implementar aprovação com nova validação transacional de disponibilidade e promoção dos itens para
reserved; - implementar rejeição e pedido de esclarecimentos, com justificação e registo em
approval_actions/auditoria; - permitir substituição explícita por equipamento equivalente sem contornar a deteção de conflitos;
- emitir notificações assíncronas ao requisitante e ao aprovador;
- 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: 102 ficheiros sem desvios;
- PHPStan/Larastan nível 7: 77 ficheiros, zero erros;
- Pest: 60 testes passaram, 270 asserções e 2 testes de registo ignorados por a funcionalidade estar deliberadamente desativada;
- TypeScript (
tsc --noEmit): passou; - ESLint: passou;
- Prettier: passou;
- Vite: builds cliente e SSR concluídos, 2306 módulos cliente e 95 módulos SSR transformados;
- PostgreSQL 17:
migrate:fresh --seedconcluído, incluindo extensãobtree_giste restrição de exclusão temporal; - PostgreSQL 17: migration incremental do marcador
last_seen_sync_run_idaplicada com sucesso; - PostgreSQL 17: nenhuma migration pendente; comando de expiração executado e agendamentos horário/a cada cinco minutos confirmados;
- smoke test HTTP:
/loginrespondeu 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 de0.0.0.0:5173; - Inertia SSR: renderização do login validada através do serviço
node; corrigido o componente de mensagens flash que usavausePage()fora do contexto Inertia; - verificação visual no browser integrado: a inspeção controlada de
localhostcontinua impedida por uma política administrativa temporariamente indisponível; catálogo, cancelamento e calendário foram validados por testes Inertia, TypeScript e builds cliente/SSR.
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.