Consolida recepcoes, stock, equipamentos e identidade SGC
This commit is contained in:
+24
-67
@@ -1,76 +1,33 @@
|
||||
# Consolidação do ProcuraFlow
|
||||
# Compatibilidade e estado do SGC
|
||||
|
||||
Estado verificado em 28 de Outubro de 2026.
|
||||
Estado actualizado em 28 de Outubro de 2026. Projecto activo: C:\laragon\www\compras, Laravel + React + PostgreSQL, http://127.0.0.1:8015. Preservar conta, dados, configuração, cookie e porta. SGF Tempo e Investmoz são independentes. A implementação Python separada fica apenas como referência; não importar contas, sessões ou bases experimentais.
|
||||
|
||||
## Projecto activo
|
||||
| Área | Implementado no Laravel | Pendente |
|
||||
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| Acesso e organização | Fortify, conta, empresa, equipa, departamentos e centros de custo | MFA obrigatório e ciclo completo de acessos |
|
||||
| Requisições e aprovações | Rascunhos, cálculos exactos, etapas, segregação e snapshots | Validação empresarial das regras provisórias |
|
||||
| Fornecedores | Cadastro, edição, renovação, validação independente e anexos privados | Dados bancários com dupla validação |
|
||||
| Cotações | Propostas, avaliações e matriz comparativa | Multimoeda e revisão das propostas |
|
||||
| RF-AF-01 | Declarações pessoais, histórico e ConflictGuard no servidor | Política de periodicidade, validade e levantamento |
|
||||
| Adjudicação | Escolha fundamentada, revalidação e aprovação do valor final | Excepções, revisão e cancelamento sem política ficam bloqueados |
|
||||
| Ordens | Emissão única/idempotente, snapshots, consulta e impressão | Orçamento não validado; documentos de desenvolvimento |
|
||||
| Recepção | Parcial/total, qualidade, divergências, pendentes, segregação do emitente e auditoria | Substituições e anexos; rejeições não autorizam receber acima do total |
|
||||
| Stock | Artigos, armazéns, entradas, saídas fundamentadas, transferências atómicas, contagens e ajustes auditados por empresa | Revisão visual; mínimos, reposição, equipamento/peças e conversões |
|
||||
| Equipamentos e peças | Tipos não suportados ficam bloqueados | Aprovação técnica e regras específicas |
|
||||
| Orçamento, facturas e pagamentos | Ainda não implementados | Definir regras antes do próximo incremento |
|
||||
| Início e navegação | Página inicial própria, menus por área/perfil e consulta pública por módulo | Revisão visual |
|
||||
| Auditoria | Histórico das operações implementadas | Exportações, retenção e protecção contra SQL administrativo |
|
||||
|
||||
O projecto activo é `C:\laragon\www\compras`, em Laravel, React, TypeScript,
|
||||
Inertia e PostgreSQL, em http://127.0.0.1:8015. A conta já foi criada.
|
||||
Preservar `APP_URL=http://127.0.0.1:8015`, `SERVER_PORT=8015`,
|
||||
`SESSION_COOKIE=procuraflow_session` e `SESSION_DRIVER=database`.
|
||||
O SGF Tempo é independente.
|
||||
Preservar enums, políticas, modelos relacionais, Brick Math e isolamento por empresa. As regras guardadas nos snapshots não são substituídas pela configuração actual. Ausência de conflito não anula conflito registado. Exemplos públicos fictícios não dão acesso aos dados de negócio.
|
||||
|
||||
A implementação Python/React na pasta de outputs da conversa fica descontinuada
|
||||
como aplicação executável e preservada apenas como referência. Não importar
|
||||
contas sintéticas, bases SQLite, sessões ou palavras-passe. Não executar os seus
|
||||
servidores ou contentores. O iniciador antigo passa a indicar o endereço do projecto Laravel, sem iniciar outro servidor.
|
||||
## Verificação actual
|
||||
|
||||
## Compatibilidade funcional
|
||||
Na implementação, 233 testes passaram, 3 ignorados, 2.163 asserções em SQLite em memória; PHPStan, Pint, frontend, TypeScript e compilação aprovados. **Migrações até 000007 efectivamente aplicadas na base actual; 000007 no lote 8, sem migrações pendentes.** Antes da aplicação foi criado backup custom PostgreSQL e restaurado com sucesso numa base temporária exclusiva, depois eliminada. Contagens e hashes das 31 tabelas anteriores coincidiram antes/depois; restrições existentes preservadas. Mantêm-se 1 utilizador, 1 empresa, 1 departamento e 1 centro de custo. Sem seeds, recriação de contas ou movimentos fictícios; `stock_movements` e `stock_operations` vazias. `.env` inalterado. [Evidência da migração e recuperação](stock-migracao-000007.json).
|
||||
|
||||
| Área | Base a preservar | Adaptação da referência experimental |
|
||||
| ------------------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| Acesso | Fortify, conta existente, sessões e equipa | Não transportar login Python nem contas fictícias |
|
||||
| Organização | Empresa, departamentos, centros de custo e isolamento | Aplicar o mesmo isolamento nos novos módulos |
|
||||
| Requisições | Rascunhos editáveis, validações, relações e numeração | Acrescentar funções sem substituir as existentes |
|
||||
| Aprovações | RequisitionWorkflow, perfis, etapas e snapshots | Adaptar cenários e testes adicionais |
|
||||
| Valores | Brick Math e centavos | Não importar o armazenamento genérico JSON |
|
||||
| Fornecedores e cotações | Cadastro, validação, propostas e comparação implementados no Laravel | Adaptados com tabelas próprias, isolamento, centavos e auditoria existentes |
|
||||
| Ordens, recepções e facturas | Ainda ausentes nesta base | Adaptar estados, recepções parciais e conferência |
|
||||
| Stock, equipamentos e orçamento | Ainda ausentes nesta base | Adaptar movimentos, mínimos, inventários e compromissos |
|
||||
| Relatórios e auditoria | Indicadores e histórico existentes | Adaptar exportação e controlos adicionais |
|
||||
Backup privado: `storage/app/private/backups/stock-000007-20261028-111943-4deef2/`, com `database.dump`, manifesto, cópia do ambiente e instruções de recuperação para uma base nova. Nenhuma restauração foi feita sobre a base actual. A migração acrescenta a tabela e ligação de operações, relaxa a obrigatoriedade da recepção e preserva os valores existentes; o PostgreSQL já utilizava `bigint` assinado. `down()` permanece bloqueado para proteger o histórico.
|
||||
|
||||
A consolidação inicial definiu a base única de continuidade. Posteriormente,
|
||||
fornecedores e cotações foram adaptados ao Laravel; os restantes módulos
|
||||
experimentais continuam por implementar nesta base.
|
||||
Quatro cenários simultâneos de recepção passaram numa base PostgreSQL separada, eliminada no final: excesso, repetição, quantidades complementares e guia duplicada. [Evidência](recepcao-concorrencia-postgresql.json). Não constitui teste de carga ou de concorrência dos outros módulos.
|
||||
|
||||
## Diferenças a resolver em cada adaptação
|
||||
Seis cenários simultâneos de stock aprovados em PostgreSQL separado, eliminado no final: excesso de saídas, repetição de saída/transferência/ajuste, transferências opostas e ajuste desactualizado. [Evidência](stock-concorrencia-postgresql.json). Apenas Armazém executa; Administração, Procurement e Finanças consultam. Contagens não movimentam stock; ajustes fundamentados exigem contagem compatível e sem movimentos posteriores. Periodicidade, tolerâncias e investigação/resolução das divergências exigem decisão da empresa; não foi inventado um circuito de aprovação.
|
||||
|
||||
- Laravel aplica provisoriamente escalões com IVA; o protótipo Python usava sem
|
||||
IVA. Preservar a configuração existente e snapshots, até decisão de Finanças.
|
||||
- Perfis e estados têm identificadores diferentes: usar os enums e políticas
|
||||
Laravel, sem criar perfis concorrentes.
|
||||
- Preservar as tabelas relacionais e o isolamento por empresa. Não importar a
|
||||
tabela JSON genérica do protótipo.
|
||||
- Manter a edição de rascunhos e a gestão da equipa já existentes no Laravel.
|
||||
- Não apresentar funcionalidades ainda ausentes como implementadas nem considerar
|
||||
o protótipo uma validação para compras reais.
|
||||
|
||||
## Verificação
|
||||
|
||||
- Página de entrada em 8015: HTTP 200 e texto “Entrar no ProcuraFlow”.
|
||||
- Testes Laravel: 47 passaram, 3 ignorados, 219 asserções.
|
||||
- Testes em SQLite em memória, conforme phpunit.xml; não na base real.
|
||||
- Nenhuma conta, credencial ou dado real foi alterado nesta consolidação.
|
||||
|
||||
## Adaptação de fornecedores e cotações
|
||||
|
||||
A migração aditiva `2026_10_28_000002_create_suppliers_and_quotations` criou
|
||||
suppliers, quotations, quotation_items e proposal_evaluations no PostgreSQL.
|
||||
A comparação dos registos antes e depois confirmou que utilizadores, empresas,
|
||||
departamentos, centros de custo, requisições, linhas e aprovações permaneceram
|
||||
inalterados. Não foram criadas contas ou dados sintéticos na base real.
|
||||
|
||||
Validações: 54 testes passaram, 3 ignorados, 305 asserções; análise estática PHP,
|
||||
tipos TypeScript, formatação e compilação da interface aprovadas.
|
||||
|
||||
Âmbito: cadastro e validação de fornecedores, propostas por requisição aprovada,
|
||||
preços em MZN, IVA herdado, avaliação independente e indicação de completude
|
||||
da matriz. Os módulos usam a conta/sessão Laravel existente. O navegador abriu
|
||||
a entrada na porta 8015; a inspecção visual das páginas autenticadas fica
|
||||
dependente do início de sessão do utilizador. Não foi pedida nem alterada a senha.
|
||||
|
||||
Edição/renovação de fornecedores e anexos privados foram acrescentados no
|
||||
incremento descrito em [desenvolvimento.md](desenvolvimento.md). Continuam
|
||||
pendentes dados bancários, registo anual de conflitos, adjudicação, ordens,
|
||||
recepção e restantes módulos. Os resultados anteriores acima referem-se à
|
||||
adaptação inicial; consultar o relatório de desenvolvimento para a validação actual.
|
||||
Após a aplicação, `/consulta/operacoes-stock` respondeu HTTP 200 e `/stock/operacoes` redireccionou para login (302) no cliente sem sessão. Revisão visual pública e autenticada pendentes: a nova tentativa devolveu `The browser access host is unavailable`, impedindo também verificar a sessão existente. A revisão de impressão continua pendente. Os resultados de testes acima são os da implementação, não uma nova execução nesta aplicação. Resultados históricos, âmbito e limitações em [desenvolvimento.md](desenvolvimento.md). **O orçamento continua sem validação.** Equipamentos não foram iniciados.
|
||||
|
||||
Reference in New Issue
Block a user