ProcuraFlow
Sistema de gestão de compras em Laravel 13, React, TypeScript e Inertia. Esta entrega implementa a base de requisições e aprovações da especificação de procurement.
Este é o projecto activo em C:\laragon\www\compras. Preserve a conta existente. A implementação Python criada separadamente fica apenas como referência; consulte o mapa de compatibilidade antes de adaptar funcionalidades.
Executar localmente
Endereço local deste projecto: http://127.0.0.1:8015. Use SERVER_PORT=8015, APP_URL=http://127.0.0.1:8015 e SESSION_COOKIE=procuraflow_session no .env para evitar colisões com outros projectos. O comando php artisan serve respeita SERVER_PORT.
As dependências e o .env devem estar configurados. O projecto suporta a ligação PostgreSQL existente; os testes usam SQLite em memória.
php artisan migrate
npm install
npm run build
composer dev
Abra a aplicação, registe uma conta e configure a empresa no painel. A primeira conta torna-se administradora exclusivamente da empresa que cria. Em Empresa e equipa, adicione departamentos, centros de custo e utilizadores com os perfis necessários. Contas registadas publicamente não entram automaticamente numa empresa existente.
Crie um pedido, guarde o rascunho, confira os valores e submeta. Entre com as contas de aprovação para decidir cada etapa. O solicitante não pode aprovar o próprio pedido; um administrador não substitui os aprovadores. Cada etapa exige uma pessoa diferente. Sem um aprovador elegível o pedido fica pendente.
Entrega actual
- Empresas com filtragem de consultas por organização e testes de isolamento.
- Departamentos, centros de custo e criação administrativa de contas com perfis.
- Requisições com rascunho editável, linhas, categoria, quantidade, preço e IVA indicado por linha.
- Cálculos exactos no servidor com Brick Math, valores monetários em centavos e arredondamento por linha a meio para cima.
- Referências únicas baseadas na sequência de identificadores da base de dados; podem existir intervalos na numeração.
- Aprovações sequenciais com transacção e bloqueio da requisição, rejeição fundamentada e regras guardadas na submissão.
- Histórico de criação, edição, submissão e decisão. O modelo impede a edição e eliminação de entradas; protecção contra alterações por SQL ou acesso administrativo directo ainda exige permissões próprias na base de dados.
- Painel com indicadores reais, pesquisa e paginação de requisições.
- Fornecedores: cadastro com NUIT único por empresa, referências documentais, beneficiários, impedimentos, revisão e activação/suspensão por Finanças, distinta do autor.
- Manutenção de fornecedores por Procurement: edição, renovação da próxima revisão e controlo de versões. Alterações efectivas e novos documentos exigem nova validação independente por Finanças.
- Documentos privados de fornecedores (PDF, JPEG e PNG, de 1 KB a 2 MB): envio por Procurement e download autenticado por Administração, Procurement ou Finanças da mesma empresa, com auditoria. Chefes consultam a ficha sem acesso aos documentos.
- Cotações para requisições aprovadas: uma proposta por fornecedor, linhas completas, IVA herdado e cálculo exacto em centavos.
- Matriz comparativa com três fornecedores elegíveis e duas avaliações por proposta; preço e prazo automáticos, notas de qualidade, histórico e pagamento, declaração de ausência de conflito e auditoria.
- RF-AF-01: declarações pessoais por fornecedor/processo, correcções com histórico, consultas por perfil/empresa e impedimentos no servidor. A associação de fornecedores volta a verificar os intervenientes anteriores; declarações de ausência não anulam conflitos registados.
- Adjudicação fundamentada da proposta de maior pontuação, com escolha entre empates, revalidação de conflitos/propostas/avaliadores e excepções bloqueadas sem política aprovada.
- Novo ciclo explícito de aprovação do valor final, segundo os escalões e a base de IVA guardados no processo. As decisões da estimativa não são reutilizadas.
- Ordens únicas por processo, com valores e condições congelados, emissão idempotente, listagem, detalhe, histórico e impressão/gravação em PDF pelo navegador. São documentos de desenvolvimento, sem autorização para compras reais e sem validação orçamental.
Os menus Fornecedores e Cotações estão disponíveis para Administração, Procurement, Finanças e chefes de departamento. Procurement regista; Finanças valida os fornecedores; chefes apenas consultam/avaliam processos do seu departamento. O administrador não substitui os perfis operacionais: pode criar a equipa em Empresa e equipa. As contas existentes não foram alteradas.
Regras provisórias
Os limites iniciais são 25.000 e 150.000 MZN, inclusive, com base no total com IVA. São parâmetros por empresa na tabela tenants, guardados em centavos. Estes valores e a base com IVA são hipóteses de desenvolvimento, ainda sem validação de Finanças. A edição das regras pela interface e a dupla validação administrativa não estão implementadas.
O IVA é informado pelo utilizador e calculado no servidor. A taxa inicial de 0% no formulário não representa uma decisão fiscal; ainda falta o catálogo de taxas com vigência, dedutibilidade e validação por Finanças. A prioridade urgente não dispensa aprovações.
Próximas etapas
Recepção parcial e qualidade; equipamentos e peças com aprovação técnica e stock; dados bancários com dupla validação; orçamento, facturas e pagamentos; moedas e câmbio; subscrições, licenças e Docker. A política de periodicidade, validade e levantamento de conflitos e os procedimentos de revisão/cancelamento de adjudicações continuam por definir.
O cadastro guarda referências e ficheiros anexos no disco privado supplier_documents, em storage/app/supplier-documents, fora da pasta pública e sem URLs públicas. As fichas abrem pelo directório Fornecedores → Ver ficha → Abrir ficha, edição e documentos. As versões antigas e documentos existentes são preservados na auditoria e no armazenamento; nesta entrega não há eliminação de documentos, antivírus, quotas acumuladas ou política de retenção. A validação do NUIT é de formato e unicidade, sem consulta a uma autoridade fiscal. Além das declarações por operação, existem declarações pessoais por fornecedor e processo; a periodicidade anual e a política de validade/levantamento ainda não foram definidas. As propostas e avaliações registadas não são editáveis nesta etapa. Os pesos 40/20/15/15/10 são provisórios e ficam guardados por proposta. A comparação liga à fase de adjudicação e emissão. A ordem exige novas aprovações do valor final e revalidação no servidor. As propostas usam MZN; a multimoeda fica para a fase correspondente.
Esta base não implementa ainda os onze controlos anti-fraude nem todos os requisitos não funcionais do documento. MFA obrigatório, gestão completa do ciclo de vida dos acessos, delegações, política de levantamento de conflitos, alteração de regras com dupla aprovação, retenção, cópias de segurança e restauro por empresa serão tratados nas etapas correspondentes. Não usar para compras reais antes da validação destas regras e controlos.
As declarações pessoais abrem no menu Conflitos de interesses. Só o autor pode corrigir os próprios fundamentos/datas, acrescentando histórico; Administração e Finanças podem consultar as declarações da empresa. Não existe caducidade automática nem retirada de conflitos. A revisão visual autenticada e a concorrência real continuam pendentes; consulte o relatório de desenvolvimento.
Verificação
php artisan test --compact
php vendor/bin/phpstan analyse --no-progress
php vendor/bin/pint --test
npm run check
npm run types:check
npm run build
Os testes cobrem cálculos, entradas manipuladas, limites de aprovação, separação de funções, ordem das decisões, rejeição e acesso entre empresas. A concorrência real em PostgreSQL requer testes com várias ligações; SQLite em memória não demonstra o comportamento dos bloqueios em produção.