# Portal de Requisição e Reserva de Equipamentos Portal interno para consultar, requisitar, aprovar, entregar e devolver equipamentos cuja fonte oficial de inventário é o Snipe-IT. ## Estado atual O projeto concluiu as **Fases 1 a 6**: fundação técnica, integração Snipe-IT, reservas, aprovações, operações físicas e administração/relatórios. Inclui gestão de utilizadores e perfis, regras editáveis com margens garantidas em PostgreSQL, calendário global, métricas, exportação CSV, auditoria e modelos de email. A próxima entrega é o hardening e a entrada em produção. Consulte sempre [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md) antes de alterar o projeto. Esse documento contém o ponto de situação, riscos e próxima tarefa recomendada. ## Arranque rápido Requisitos: Docker Desktop e Docker Compose. ```bash cp .env.example .env docker compose build docker compose run --rm app php artisan key:generate docker compose up -d docker compose exec app php artisan migrate --seed ``` O portal fica disponível em e o Mailpit em . Contas de desenvolvimento: | Perfil | Email | Palavra-passe | |---|---|---| | Requisitante | `demo@escola.pt` | `password` | | Administrador | `admin@escola.pt` | `password` | Estas credenciais existem apenas no `DatabaseSeeder` e nunca devem ser usadas em produção. ## Comandos frequentes ```bash docker compose exec app composer test docker compose exec app composer lint docker compose exec app composer types:check docker compose exec node npm run types:check docker compose exec node npm run lint:check docker compose exec node npm run build ``` Como o serviço Docker define variáveis de desenvolvimento, use o script Composer para testes. O script força de forma isolada `APP_ENV=testing`, SQLite em memória, cache/sessão em memória e fila síncrona, evitando locks Redis ou middleware CSRF do ambiente local: ```bash docker compose exec app composer test ``` Para repor apenas dados de desenvolvimento: ```bash docker compose exec app php artisan migrate:fresh --seed ``` ## Documentação - [Estado e handoff](docs/PROJECT_STATUS.md) - [Arquitetura](docs/ARCHITECTURE.md) - [Requisitos e âmbito](docs/REQUIREMENTS.md) - [Decisões técnicas](docs/DECISIONS.md) - [Operação local](docs/RUNBOOK.md) - [Registo de alterações](CHANGELOG.md) - [Regras para agentes](AGENTS.md) ## Stack - Laravel 13 / PHP 8.3+ - React 19 / TypeScript / Inertia 3 - Tailwind CSS 4 / componentes shadcn/ui - PostgreSQL 17 - Redis 7 - Nginx, worker de filas, scheduler e Mailpit em Docker Compose - Pest, PHPStan/Larastan, ESLint, Prettier e TypeScript ## Princípio central O portal nunca escreve diretamente na base de dados do Snipe-IT. Identificação e estado operacional do equipamento pertencem ao Snipe-IT; períodos, aprovações, conflitos, notificações, entrega/devolução e auditoria pertencem ao portal.