|
|
|
|
@@ -1,7 +1,7 @@
|
|
|
|
|
# Estado do projeto e handoff
|
|
|
|
|
|
|
|
|
|
**Atualizado em:** 4 de agosto de 2026
|
|
|
|
|
**Fase:** Fases 1, 2 e 3 concluídas; Fase 4 em curso
|
|
|
|
|
**Fase:** Fases 1, 2, 3 e 4 concluídas
|
|
|
|
|
**Último agente:** Codex
|
|
|
|
|
|
|
|
|
|
## Resultado disponível
|
|
|
|
|
@@ -29,26 +29,31 @@
|
|
|
|
|
- Área de aprovação protegida por perfil, com pesquisa por referência/requisitante.
|
|
|
|
|
- Aprovação, rejeição e pedido de esclarecimentos transacionais, registados em `approval_actions` e `audit_logs`.
|
|
|
|
|
- Aprovação revalida disponibilidade e estado operacional do ativo antes de promover itens `held` para `reserved`.
|
|
|
|
|
- Notificações assíncronas por email e base de dados para submissões, decisões, esclarecimentos e substituições.
|
|
|
|
|
- Caixa interna de notificações, contador de não lidas, marcação individual/coletiva e isolamento por utilizador.
|
|
|
|
|
- Resposta auditada do requisitante a esclarecimentos, com regresso a `pending_approval` e novo prazo de 48 horas.
|
|
|
|
|
- Substituição de equipamento apenas por ativo livre da mesma categoria, mantendo a pré-reserva e todo o histórico.
|
|
|
|
|
- Fila de aprovação com filtros por referência, requisitante, categoria e período, incluindo histórico de ações.
|
|
|
|
|
|
|
|
|
|
## 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.
|
|
|
|
|
- Entrega e devolução têm tabelas preparadas, mas ainda não possuem ações ou interface.
|
|
|
|
|
- As notificações de decisão, a resposta do requisitante aos esclarecimentos e a substituição por equipamento equivalente ainda não foram implementadas.
|
|
|
|
|
- As notificações estão implementadas com Mailpit em desenvolvimento; falta validar SMTP institucional antes do piloto.
|
|
|
|
|
- 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
|
|
|
|
|
|
|
|
|
|
Completar a **Fase 4 — aprovações**:
|
|
|
|
|
Implementar a **Fase 5 — entrega e devolução**:
|
|
|
|
|
|
|
|
|
|
1. abrir `app/Domain/Approvals/Services/ApprovalService.php` e criar notificações assíncronas para cada decisão;
|
|
|
|
|
2. permitir ao requisitante responder ao pedido de esclarecimentos e voltar a colocar o pedido em `pending_approval`;
|
|
|
|
|
3. acrescentar filtros da fila por data e categoria e uma vista de detalhe com histórico;
|
|
|
|
|
4. permitir substituição explícita por equipamento equivalente sem contornar a deteção de conflitos;
|
|
|
|
|
5. testar notificações, resposta, substituição e concorrência em PostgreSQL;
|
|
|
|
|
6. concluir a documentação da Fase 4;
|
|
|
|
|
1. abrir `app/Integrations/SnipeIt/SnipeItClient.php` e acrescentar checkout/check-in com o token operacional separado;
|
|
|
|
|
2. criar `app/Domain/Handovers/Services/HandoverService.php` com entrega e devolução transacionais;
|
|
|
|
|
3. criar área do operador para reservas do dia, pesquisa por referência/utilizador e confirmação do estado físico;
|
|
|
|
|
4. tratar falhas parciais da API Snipe-IT sem declarar entrega/devolução concluída;
|
|
|
|
|
5. implementar incidentes, atrasos e bloqueios associados a dano;
|
|
|
|
|
6. testar API simulada, autorização, idempotência e auditoria;
|
|
|
|
|
7. atualizar este documento e o changelog.
|
|
|
|
|
|
|
|
|
|
## Testes da última sessão
|
|
|
|
|
@@ -56,20 +61,21 @@ Completar a **Fase 4 — aprovações**:
|
|
|
|
|
Validação concluída em 4 de agosto de 2026:
|
|
|
|
|
|
|
|
|
|
- `docker compose exec -T app composer test`: passou;
|
|
|
|
|
- Laravel Pint: 106 ficheiros sem desvios;
|
|
|
|
|
- PHPStan/Larastan nível 7: 80 ficheiros, zero erros;
|
|
|
|
|
- Pest: 65 testes passaram, 289 asserções e 2 testes de registo ignorados por a funcionalidade estar deliberadamente desativada;
|
|
|
|
|
- Laravel Pint: 111 ficheiros sem desvios;
|
|
|
|
|
- PHPStan/Larastan nível 7: 84 ficheiros, zero erros;
|
|
|
|
|
- Pest: 70 testes passaram, 340 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, 2307 módulos cliente e 96 módulos SSR transformados;
|
|
|
|
|
- Vite: builds cliente e SSR concluídos, 2308 módulos cliente e 97 módulos SSR transformados;
|
|
|
|
|
- PostgreSQL 17: `migrate:fresh --seed` concluído, incluindo extensão `btree_gist` e restrição de exclusão temporal;
|
|
|
|
|
- PostgreSQL 17: migration incremental do marcador `last_seen_sync_run_id` aplicada com sucesso;
|
|
|
|
|
- PostgreSQL 17: nenhuma migration pendente; comando de expiração executado e agendamentos horário/a cada cinco minutos confirmados;
|
|
|
|
|
- PostgreSQL 17: migration `notifications` aplicada com sucesso;
|
|
|
|
|
- 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: a inspeção controlada de `localhost` continua 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.
|
|
|
|
|
- verificação visual no browser integrado: a inspeção controlada de `localhost` continua impedida por uma política administrativa temporariamente indisponível; aprovações, esclarecimentos e notificações foram validados por testes Inertia, TypeScript e builds cliente/SSR.
|
|
|
|
|
|
|
|
|
|
## Decisões pendentes do contexto institucional
|
|
|
|
|
|
|
|
|
|
|