commit melhorias sgf
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# Preparação SGC → facturas SGF8085 — 10/11/2026
|
||||
|
||||
**Continuação posterior autorizada:** [ecrã e persistência auditada agora implementados](SGC_INVOICE_WORKSPACE_DELIVERY.md),20 casos únicos/142 asserções e14 verificações PostgreSQL entre aplicações. Novo pacote inactivo `3bb99e866f52965dbb7d`; o anterior mantém-se preservado. As menções abaixo a ecrã/persistência por implementar descrevem a preparação **anterior**. Instalação/configuração/activação continuam pendentes, sem alterar8085.
|
||||
|
||||
**Preparação técnica entregue; ligação ainda não instalada/activada em8085.** Não foi criada outra demonstração, base, role, porta, conta ou concessão. O percurso de Compras já concluído em8085 mantém código, dados e configuração anteriores.
|
||||
|
||||
## O que existe e o que falta
|
||||
|
||||
| Peça | Estado desta entrega | Antes de utilizar |
|
||||
| --- | --- | --- |
|
||||
| Endpoint SGF | Implementado e78 provas válidas reutilizadas; permanece desligado | Instalar o pacote preparado na mesma8085, sem trocar motor/livro; conferir código ainda desligado |
|
||||
| Cliente de transporte SGC | Implementado, com prévia, aprovação exacta e recuperação da mesma intenção | Compor o ficheiro verificado pelo hash no SGC e configurar uma ligação aprovada |
|
||||
| Gateway nativo SGC | `SgfInvoiceGateway`, sem listeners/rotas/jobs; configuração desligada | Ligar a uma acção autenticada do percurso de envio, com autoridade financeira actual |
|
||||
| Origem documental | Contrato apenas para **rascunho ainda não registado no SGC**, autoridade única SGF | Implementar o ecrã/armazenamento durável desse rascunho/intenção/decisão/recibo; ainda não entregue como fluxo utilizável do SGC |
|
||||
| Mapeamentos | Modelo preparado, nenhuma selecção ou associação criada | Escolher/versionar/conferir tenant de origem e empresa/unidade de destino, ordem e cada linha; sem inferência por nomes/NUIT/IDs coincidentes |
|
||||
| Principal e segredo | Nenhum criado; modelos com camposNULL e `enabled=false` | Aprovar identidade QA, direitos existentes, versões de autenticação/contexto e provisionar bearer privado por via protegida |
|
||||
| Ensaio SGC→8085 | Contrato provado por fakes e kernel real no livro de regressão existente | Após autorização, ensaio de rede nas duas aplicações e nessa mesma8085, com novo documento sintético e confirmação individual |
|
||||
|
||||
Instalar código desligado, configurar identidades/segredos e activar tráfego são passos distintos. Nenhum foi executado por consequência deste pedido de **preparação sem activar**. Não basta mudar uma flag para declarar o percurso de envio do SGC concluído.
|
||||
|
||||
## Fronteira de autoridade
|
||||
|
||||
O SGC está no projecto `C:/laragon/www/compras`, produto autónomo sobre o mesmo núcleo. Os livros do SGC e de8085 não são automaticamente o mesmo livro. Uma factura já registada/validada/paga no SGC não deve ser reenviada como se fosse nova em8085: isso pode duplicar documentos, consumo e responsabilidade. Este cliente recusa estados de origem diferentes de `unregistered_draft`; não intercepta `InvoiceWorkflow` nem exporta `Invoice` existentes.
|
||||
|
||||
O próximo ecrã de envio terá de capturar/conservar o documento recebido **antes** de o registar financeiramente no SGC. O cliente não cria essa fonte nem comprova que uma declaração de rascunho corresponde a um estado real: o adaptador do futuro ecrã deverá reler a fonte autorizada e impedir o fluxo local concorrente. Se a decisão for partilhar o mesmo livro/instância em vez de transportar rascunhos, deve usar referência à factura existente, não uma segunda chamada de criação. Essa mudança de topologia e a migração de documentos históricos não estão presumidas.
|
||||
|
||||
O endpoint confirma só uma factura **pendente** em8085. Revisão distinta, consumo, obrigação, pagamento e contabilidade continuam nos mecanismos existentes. `received_pending` no cliente significa recepção documental pelo SGF, não validação financeira ou conclusão da compra.
|
||||
|
||||
## Cliente preparado
|
||||
|
||||
Ficheiro portátil: `packages/sgc-invoice-client/src/InvoiceClient.php`, sem dependência de Laravel, base, ficheiros ou relógio. O transporte é injectado. Destino permitido neste recorte: exclusivamente `http://127.0.0.1:8085`, sem redirects nem URLs fornecidos pelo payload. Uma utilização remota/TLS requer recorte próprio.
|
||||
|
||||
`intent(mapping, draft, key, reason)` exige mapeamento explícito/versionado e UUID escolhido uma única vez; não faz rede nem escolhe entidades. Converte só as referências de linha aprovadas para IDs de destino, recusa âmbito diferente, duplicação/mapeamento em falta, floats e campos inesperados. A intenção inclui hashes do rascunho, mapeamento e ligação, sem bearer.
|
||||
|
||||
`preview(intent, currentSourceVersion, currentMappingHash)` confere a mesma origem/mapeamento/ligação, lê a ordem exacta e pede a prévia. Não confirma. Pode recuperar um recibo já confirmado pelo mesmo UUID.
|
||||
|
||||
`confirm(state, approvedHash, currentSourceVersion, currentMappingHash)` só aceita a decisão sobre esse impacto exacto e versão actual. Conserva UUID, cut e conteúdo quando a resposta é incerta. Timeout,503, redirects ou resposta de sucesso incoerente não são tratados como sucesso confirmado. Não há retry automático nem nova chave automática;401/403 bloqueiam,409 exige conferência. Uma recuperação explícita devolve o mesmo recibo pendente. As mensagens de transporte não são expostas e bearer não entra em estados serializáveis/debug.
|
||||
|
||||
O SGC ganhou `app/Services/SgfInvoiceGateway.php` e `config/sgf_invoice.php`. O gateway só cria o cliente com configuração aprovada/activa e pacote com hash verificado; relê a pessoa/empresa nativa, função financeira e exclusão de manutenção, tanto ao criar o cliente como imediatamente antes de cada operação de rede. Alteração da configuração impede usar o objecto antigo. A configuração entregue é `enabled=false`, pacoteNULL, hashNULL, ligações vazias; nenhum processo existente o invoca.
|
||||
|
||||
## Persistência e interface ainda necessárias
|
||||
|
||||
A intenção é um **envelope de transporte**, não uma outbox persistida: não foi criada migração/tabela nem usado ficheiro/cache como armazenamento informal. O chamador do SGC ainda precisa de persistência auditada e ecrã de conferência. Contrato preparado para essa implementação:
|
||||
|
||||
1. Guardar fonte autorizada, versão, mapeamento/hash, UUID e intenção **antes do primeiro envio**. Uma fonte com envio pendente/incerto não pode gerar outra intenção/chave sem resolução explícita.
|
||||
2. Conservar prévia, impacto e `approval_hash`; apresentar ao utilizador e registar a decisão individual, pessoa, data e fundamento.
|
||||
3. Guardar o estado de confirmação em curso antes da rede. Se houver interrupção depois do commit remoto, recuperar pelo mesmo conteúdo/UUID/cut.
|
||||
4. Guardar recibo `invoice_id/order_id/pending`, referência de origem e transições anteriores/posteriores. Não confiar apenas no retorno do browser nem iniciar validação financeira no SGC.
|
||||
5. Antes de nova prévia/confirmação, reler pessoa/permissões, fonte, versão e mapeamento. Uma alteração invalida a conferência. Rotação de contexto também exige nova conferência; uma operação com resultado incerto não pode ser abandonada e refeita com outra chave.
|
||||
|
||||
Nenhuma nova tabela/direito foi concedida ou instalada. A futura persistência exige um desenho de migração/retencão e prova própria; a instalação em base operacional deverá ter autorização específica. Este relatório não declara essas capacidades implementadas.
|
||||
|
||||
## Pacote de8085 preparado e verificável
|
||||
|
||||
Identificador: **`d09aac9d09da98e61df5`**. Local privado: `C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/prepared-sgc-invoice/d09aac9d09da98e61df5`.
|
||||
|
||||
Contém oito ficheiros do endpoint para8085, três ficheiros do cliente/gateway/configuração, modelos não preenchidos e manifesto de hashes. Guarda as duas versões anteriores de bootstrap/navegação; não contém `.env`, binding, estado da instalação, contas ou credenciais. Bootstrap/navegação diferem somente pelas rotas SGC; o writer/controlador/runtime existentes não são substituídos.
|
||||
|
||||
```powershell
|
||||
& 'C:/laragon/tools/sgf-tempo/node-v24.22.1-win-arm64/node.exe' scripts/prepare-sgc-8085.mjs check
|
||||
```
|
||||
|
||||
O comando verifica o código actual de8085, os78 resultados aceites e os hashes da preparação, sem instalar/activar/iniciar serviços/migrar/limpar cache. `prepare` cria apenas essa área de revisão fora da aplicação. Não existe opção de aplicar neste comando. Qualquer alteração posterior do destino ou do código exige nova conferência; não copiar o pacote às cegas sobre trabalho alheio. O script de actualização geral anterior não inclui estes oito ficheiros.
|
||||
|
||||
Depois de autorizado instalar código desligado: conferir hashes/pré-condições, backup privado dos ficheiros a substituir, aplicar apenas a allowlist e verificar `/compras` e a recusa404 do endpoint desligado. Reversão de código não desfaz dados; depois de um futuro envio confirmado, conservar o recibo e usar recuperação, nunca reset como rollback.
|
||||
|
||||
## Evidência e limitações
|
||||
|
||||
16 testes Unit/46 asserções novos, sem base/rede: mapeamento, âmbito, documento já registado, fonte/mapeamento/contexto alterados, decisão individual, cabeçalhos, recuperação, estados de falha e gateway desligado. Seis verificações adicionais ligam o cliente ao **kernel real** no livro de regressão `da77bb730751`: consulta exacta/prévia real e recuperação de recibo existente, sem nova factura/evento persistido. As sequências de tentativa da prévia podem avançar nesse livro de regressão; não são revertidas artificialmente.
|
||||
|
||||
Os78 ensaios anteriores do endpoint e63 do percurso de8085 foram reutilizados por hash, não repetidos nem somados como cobertura nova do transporte.16 Unit+seis verificações de contrato não equivalem a22 testes de rede. Não foi executado tráfego para8085 nem comando/migração no piloto SGC. Os seis registos e a cache bloqueada não foram alterados;8085 manteve código e estado. Sem activação de candidatas, publicação, aceitação ou checkpoint. Visual, carga sustentada, TLS operacional, envio completo pela interface do SGC e implantação permanecem com provas próprias.
|
||||
|
||||
[Prova da preparação](proofs/sgc-8085-integration-preparation-20261110.json). O pacote identifica ficheiros e hashes concretos para revisão; não representa autorização de aplicar/activar nem prova de um fluxo de utilizador ainda não implementado.
|
||||
@@ -0,0 +1,60 @@
|
||||
# Endpoint de facturas SGC — implementação local de10/11/2026
|
||||
|
||||
Continuação autorizada: [workspace persistente SGC entregue](SGC_INVOICE_WORKSPACE_DELIVERY.md), com intenção, decisão, recibo e recuperação auditados. Reutiliza este endpoint/motor sem novas alterações ao seu writer; ambas as capacidades permanecem desligadas no destino.
|
||||
|
||||
Implementação concluída para transporte sintético até **factura pendente**, reutilizando o controlador/workflow/writer fixados de Compras. Não utiliza `IntegrationService` legado, tabelas espelho `sgc_faturas` ou saldo orçamental fictício. Não valida a própria factura, consome orçamento, reconhece obrigações, paga ou contabiliza. O percurso e a instalação8085 permanecem intactos.
|
||||
|
||||
## Rotas e contrato
|
||||
|
||||
`bootstrap/app.php` regista especificamente `routes/sgc.php`, preservando `routes/api.php` legado sem montagem. Só existem:
|
||||
|
||||
- `GET /api/v1/integration/sgc/invoices/orders/{order}`: ordem exacta autorizada, linhas, versão actual e progresso da recepção. Não escolhe uma ordem/linha nem devolve a lista de outras facturas.
|
||||
- `POST /api/v1/integration/sgc/invoices`: fases `preview` e `confirm` no mesmo endereço. A confirmação cria apenas a factura pendente; a revisão distinta continua no percurso existente.
|
||||
|
||||
Ambas exigem `Authorization: Bearer …`, `X-SGC-Client`, `X-SGC-Context` e `Accept: application/json`. O POST exige `Content-Type: application/json` e `X-Idempotency-Key` UUID. HTTP só é admitido em loopback; fora dele é exigido TLS. O adaptador nativo conserva o bloqueio `budget-testing` e a validação física do cluster/base/role/manifests QA. Não há capacidade operacional/produtiva presumida.
|
||||
|
||||
Na prévia enviar `phase`, `order_id`, `revision`, `reason` e `data` com número/data/totais/linhas. Valores monetários são strings decimais, não floats. Quantidades, unidade, preço, imposto, total, linhas aceites e origem são conferidos pelo mesmo motor original. Campos desconhecidos, IDs de autoridade no JSON/query, datas inválidas, linhas repetidas/estrangeiras e corpos acima128KiB são recusados. Até50 linhas. Fundamento de10 a2000 caracteres.
|
||||
|
||||
A resposta200 apresenta `preview` cifrada e `impact`, sem gravar facturas. O integrador deve apresentar/conferir o impacto antes da confirmação individual, sem confirmação automática. Para confirmar enviar somente:
|
||||
|
||||
```json
|
||||
{"phase":"confirm","order_id":123,"preview":"<prévia devolvida>"}
|
||||
```
|
||||
|
||||
Usar a mesma chave UUID da prévia. Uma confirmação válida devolve201 com `invoice_id`, `order_id`, `status: pending`, `replayed: false`. Alteração da versão/origem/contexto exige nova conferência, não uma nova tentativa automática de escrever.
|
||||
|
||||
`tests/payloads/invoice_test.json` é um **modelo**: os placeholders de ordem/linha/revisão têm de ser substituídos depois de escolha explícita e GET autenticado.100MZN/1UN/imposto0 são apenas o exemplo QA; não são preenchidos automaticamente a partir de uma entidade real. No PowerShell, gerar a chave com `[guid]::NewGuid().ToString()`; não pressupor `uuidgen`.
|
||||
|
||||
## Autenticação e isolamento
|
||||
|
||||
`config/sgc_invoice.php` conserva `enabled=false` e `principals=[]`. Nenhuma credencial, associação, concessão ou activação foi instalada. Uma futura configuração exige aprovação própria; o nome do cliente não concede direitos.
|
||||
|
||||
Cada principal configurado separadamente contém `enabled`, SHA256 de um bearer aleatório de pelo menos32 caracteres, `user_id`, `auth_version`, `tenant_id`, `company_id`, `unit_id` e `context_version` de64 hexadecimais. O token nunca é aceite por query/cookie, guardado em log ou distribuído no código. `X-SGC-Context` deve corresponder à versão configurada; rodar essa versão invalida as prévias antigas. A versão de autenticação deve coincidir com a pessoa actual.
|
||||
|
||||
Empresa/unidade/pessoa provêm exclusivamente dessa configuração no servidor. Filiação, empresa/unidade, módulo disponível e direitos existentes são revalidados. Reutilizam-se `company.view`, `unit.view`, `purchasing_invoices.view/prepare` e as funções/autoridades nativas. Nenhum nome de direito novo e nenhuma concessão real. O contexto usa sessão efémera em memória, é limpo ao terminar e não é persistido em cookies/sessões/cache. As respostas de sucesso são `no-store, private`.
|
||||
|
||||
## Idempotência, transacção e recuperação
|
||||
|
||||
O adaptador serializa cada UUID com advisory lock transaccional PostgreSQL no host, abrangendo a consulta de recuperação e o commit nativo. A chave é normalizada para minúsculas. O recibo autoritativo é o evento append-only **já existente** `sgf.invoice.command`, gravado na mesma transacção da factura e das linhas no livro nativo. Não há recibo externo ou espelho de dívida no host.
|
||||
|
||||
Antes de uma recuperação, revalidam-se identidade, contexto, direitos, binding actual e visibilidade exacta da ordem. A mesma chave com fundamento/dados/outra ordem gera409; a mesma intenção confirmada devolve200 e o mesmo `invoice_id`, sem nova factura/auditoria. A recuperação pode ser pedida com a confirmação original ou repetindo a prévia original. A versão de leitura antiga não é uma autorização para outra escrita.
|
||||
|
||||
Uma prévia não aplicada expira em600s. Um recibo **já confirmado** pode ser recuperado depois desse prazo, com a autoridade actual e sem repetir comandos. Rodar contexto/binding ou revogar acesso impede a recuperação pela prévia antiga. Uma falha depois de criar a factura e antes do recibo reverte tudo; a mesma operação pode ser retomada. Se o commit tiver resultado incerto, repetir **a mesma chave e conteúdo**, sem mudar de número ou inventar nova chave.
|
||||
|
||||
Bloqueio da chave acima5s devolve503 `RETRY_SAME_KEY`, com `Retry-After: 1`. Recusas de versão/conteúdo:409; validação:422; credencial:401; autoridade:403; configuração desligada:404. Deadlock/serialização também devolvem503 recuperável, sem tratar como sucesso. A duração máxima de todos os possíveis bloqueios nativos/carga sustentada não foi validada.
|
||||
|
||||
## Provas sintéticas e preservação
|
||||
|
||||
78 verificações:42 do percurso/validações/atomicidade/concorrência,20 de revogação/isolamento/recuperação de bloqueio,10 da consulta autenticada/compatibilidade de repetição e seis da autoridade nativa na recuperação. Foram executadas pelo kernel HTTP Laravel com PostgreSQL real e processos PHP independentes, **sem criar servidor/porta/base/role/demonstração**. Não são testes TCP no portal, revisão visual ou implantação.
|
||||
|
||||
Livro de regressão existente `receipt-composition-da77bb730751`, separado de8085. O cenário original tinha a recepção integralmente facturada; a primeira prévia foi correctamente recusada. Foi então acrescentada uma **fixture SQL de origem**, marcada `fixture_only`: cópias de requisição/linha/proposta/adjudicação/ordem/recepção aceite e evento de admissão de teste. Essa preparação não prova uma nova execução desses workflows nem um movimento físico. Facturas/linhas/recibos de comando, por sua vez, passaram pelo motor original: quatro novas facturas pendentes, nenhum consumo/obrigação/pagamento/lançamento novo. Registos originais e provas aceites preservados.
|
||||
|
||||
Concorrência da mesma chave:201/200, um `invoice_id`. Falha injectada no evento imediatamente após o writer:500, sem factura parcial; nova confirmação da mesma intenção:201. Bloqueio da chave mantido por outra ligação:503 após o limite; depois da libertação:200 com a factura original. Conteúdo diferente, versão desactualizada, prévia adulterada, outra ordem/tenant/empresa/unidade, permissões revogadas, token/contexto rodados e módulo indisponível foram recusados.
|
||||
|
||||
Comparação de todas as linhas e sequências do host/livro de8085 antes/depois: idênticas. Todas as linhas/sequências/permissões/orçamento do host de regressão também idênticas. Nenhuma ligação de escrita a55432 ou à base da demonstração8039; seis associações protegidas e cache bloqueada não foram alteradas/limpas. Dados de autenticação, cut cifrado, logs e resultados detalhados permanecem privados fora do repositório. Sem checkpoint, publicação ou activação.
|
||||
|
||||
Depois das primeiras72 provas, a conferência do operador no caminho de recuperação foi reforçada com o mesmo `CurrentActor::lock` e a recusa de operador limitado a manutenção. As seis verificações adicionais cobrem essa alteração sem repetir as escritas: função financeira revogada dentro de transacção QA/rollback e manutenção injectada no harness recusam a recuperação; autoridade válida recupera o mesmo recibo. A inclusão da consulta autenticada foi coberta por dez verificações próprias; provas anteriores não foram sobrescritas nem suites alheias repetidas.
|
||||
|
||||
`node scripts/sgc-invoice-check.mjs` apenas consulta o resultado válido, sem repetir ensaios. `--new` executa outra prova no mesmo livro de regressão existente e acrescenta novas fixtures/documentos QA; usar apenas perante alteração/falha relevante e com o cluster próprio disponível. Não modifica8085 nem instala o endpoint lá.
|
||||
|
||||
[Prova consolidada](proofs/sgc-invoice-endpoint-20261110.json). Mantêm-se pendentes activação aprovada/configuração de clientes, utilização real, transporte TLS operacional, política de rotação/rate limiting em implantação, carga sustentada e capacidade de implantação. O serviço legado e os endpoints de pagamentos/analytics continuam fora deste recorte e sem montagem.
|
||||
@@ -0,0 +1,68 @@
|
||||
# SGC → SGF: rascunho, conferência, decisão e recibo persistentes
|
||||
|
||||
10/11/2026. **Bloco implementado e testado**, incluindo ecrã, persistência auditada, exclusão de duplicação local e integração com o endpoint SGF. Não instalado/activado no SGC operacional ou8085. Não se declara concluído o SGF inteiro, implantação ou uso real por consequência desta entrega.
|
||||
|
||||
## Percurso utilizável no código entregue
|
||||
|
||||
Entrada SGC preparada: `/facturas/envio-sgf`, ligada à página nativa de facturas quando a capacidade estiver autorizada/activa. Rotas usam autenticação, verificação existente, empresa configurada e contexto de trabalho nativos. Não foi aberta sessão de demonstração ou criado novo servidor.
|
||||
|
||||
1. Finanças escolhe explicitamente ligação e mapeamento aprovados da sua empresa; não se selecciona primeiro fornecedor/ordem/linha nem se deduzem IDs por nomes.
|
||||
2. Guarda referência de origem, número/data/documento/linhas e fundamento. Só rascunhos ainda não registados no SGC: a associação ao fornecedor da origem vem do mapeamento autorizado, não do pedido do browser.
|
||||
3. O rascunho reserva a identidade empresa/fornecedor/número. Edição antes de qualquer confirmação cria nova versão auditada e invalida prévia/intenção anteriores; nunca apaga o histórico. Uma confirmação iniciada torna o conteúdo imutável, mesmo que se perca a resposta.
|
||||
4. A prévia guarda intenção, UUID e reserva de execução antes da rede. Obtém contexto exacto da ordem no SGF e apresenta o impacto recebido, sem criar factura persistente. Não há confirmação automática.
|
||||
5. A decisão individual exige fundamento, versão actual, mesmo operador/contexto da conferência e o hash desse impacto. A decisão/intenção/cut são conservados **antes** da chamada de confirmação.
|
||||
6. O recibo verificado fica persistido como `received_pending`, com IDs de ordem/factura e repetição observada. O ecrã oferece continuidade pela entrada existente de8085, com escolha explícita de função e os IDs do recibo, sem bearer/cut na URL. Revisão financeira/consumo/obrigação continuam no SGF e exigem as decisões distintas existentes.
|
||||
|
||||
O ecrã tem lista SQL paginada25 e filtro de estado por empresa, formulário com linhas explicitamente mapeadas, versão/fundamento, prévia legível, confirmação individual, recuperação e histórico SQL paginado25. A evidência é apresentada por campos, escapada contra HTML injectado. A adição de linhas não reutiliza nomes dos campos existentes. Campos por guardar e confirmação em curso são protegidos ao sair; comandos no servidor continuam autoritativos entre abas/processos.
|
||||
|
||||
## Persistência e isolamento
|
||||
|
||||
Migração preparada no SGC: `2026_11_10_000001_create_sgf_invoice_dispatches.php`, **não aplicada ao piloto**. Acrescenta apenas:
|
||||
|
||||
- `sgf_invoice_dispatches`: fonte, documento/mapeamento congelado, versão de fonte e de controlo, UUID, estado cifrado, hash de aprovação, lease, recibo e autor inicial. Unicidade por empresa/referência e empresa/fornecedor/número.
|
||||
- `sgf_invoice_dispatch_events`: autor, data UTC, acção, fundamento e estado anterior/posterior, incluindo versões, documento, mapeamento, intenção/impacto por hash e recibo. Eventos append-only e rascunhos sem DELETE, por triggers PostgreSQL/SQLite. Não há tabela de dívida/consumo/stock/contabilidade nova.
|
||||
|
||||
O cut/intenção/impacto de transporte fica cifrado com a chave da aplicação na tabela; segredos de ligação nunca entram nos rascunhos/eventos/HTML. As consultas usam o tenant da pessoa autenticada. A pessoa, função financeira, exclusão de manutenção, fornecedor autorizado, mapeamento e versão são revalidados nos comandos; autoridade e ligação são ainda revalidadas pelo gateway antes de cada chamada.
|
||||
|
||||
O writer **original** `InvoiceWorkflow::register` ganhou apenas a guarda da reserva SGF dentro do bloqueio empresarial já existente, antes de criar uma factura local. A criação do rascunho toma o mesmo bloqueio e recusa uma factura local preexistente. Assim, as duas direcções não podem registar a mesma identidade documental em simultâneo. A reserva mantém efeito mesmo se o workspace/transporte forem depois desligados. Se a nova estrutura ainda não estiver instalada, o writer nativo anterior conserva o seu percurso; activar o workspace sem estrutura devolve503 e não migra por inferência.
|
||||
|
||||
Não há novo nome de direito ou concessão. Usam-se função/âmbito/contexto nativos e os direitos SGF já existentes. Os mapeamentos/principais operacionais continuam vazios/não escolhidos; `workspace_enabled=false` e `enabled=false` na configuração entregue.
|
||||
|
||||
O manifesto apresenta os privilégios SQL mínimos **para revisão antes de qualquer concessão**, com role/base aindaNULL e aprovaçãofalse: SELECT/INSERT/UPDATE no rascunho, SELECT/INSERT nos eventos e USAGE/SELECT nas sequências. Não propõe UPDATE/DELETE da auditoria ou grantsPUBLIC. São necessidades de instalação a conferir contra privilégios já existentes; nenhumGRANT foi aplicado a contas reais.
|
||||
|
||||
## Concorrência e falhas
|
||||
|
||||
Cada transição toma empresa/pessoa/rascunho na mesma ordem e compara `version`. A transacção conserva intenção ou decisão e um lease120s, termina **antes da rede**, e regista a observação numa segunda transacção. Não se mantêm locks empresariais durante HTTP. A mesma fonte não ganha outra chave para contornar uma operação pendente/incerta.
|
||||
|
||||
Uma execução simultânea/versão antiga é recusada409. Se houver interrupção antes de observar a resposta, o estado `sending` com intenção/cut/decisão já existe; terminado o lease, a recuperação explícita usa a mesma chave e conteúdo. Uma resposta tardia de lease substituído não sobrescreve o estado actual. Uma falha de persistência depois do commit remoto conserva o estado de envio/decisão, permitindo recuperar o recibo sem outra factura.
|
||||
|
||||
Não há retries automáticos ou novos UUIDs gerados para confirmação/recuperação.401/403 bloqueiam,409 exige conferência, timeout/503/resultado incerto conservam a intenção. Mudanças de contexto da ligação são recusadas **antes** de gravar uma decisão sobre a prévia antiga. Uma nova prévia explicitamente pedida usa a autoridade actual; depois de iniciado um envio mantém a chave/conteúdo. Alterar o mapeamento de uma fonte já enviada/incerta não é autorizado para contornar o resultado: exige reconciliação da autoridade original, sem forçar outro documento.
|
||||
|
||||
## Provas reutilizáveis
|
||||
|
||||
**20 casos únicos/142 asserções** em SQLite exclusivamente em memória, seleccionados dos XMLs JUnit (17 da consolidação, um do formulário completo, um da estrutura ausente e um da fotografia de operador/contexto na auditoria). A repetição dirigida de uma guarda anterior não é somada novamente. Incluem ecrã real Blade/HTTP, formulário→prévia→decisão→recibo, CSRF, acesso estrangeiro/função indevida/revogada, versões/hash/operador/contexto/mapeamento, paginação e histórico além25, HTML injectado, cifragem, imutabilidade, reserva local, falha de armazenamento depois da confirmação remota e recuperação. Não houve `migrate:fresh` ou suites alheias.
|
||||
|
||||
**14 verificações PostgreSQL e integração entre dois processos de aplicação** nos livros de regressão **já existentes**: origem SGC `b4093c6f6707`, receptor SGF `da77bb730751`. Só nesses ensaios se activaram flags em memória. Foram criadas as duas tabelas de teste no livro de origem, sem nova base/role/porta/demo. Duas fontes sintéticas produziram exactamente duas facturas pendentes no receptor:
|
||||
|
||||
- Primeiro caso: commit real do writer SGF, resposta perdida na origem, estado incerto persistido e recuperação do mesmo recibo com a mesma chave.
|
||||
- Segundo caso: duas decisões concorrentes em processos PHP; uma envia/conserva recibo, outra recusa409 por versão/em curso; uma única decisão persistida e uma factura no receptor.
|
||||
- Writer nativo SGC recusou o documento reservado antes de qualquer registo local. PostgreSQL recusou reescrita de evento. Todos os dados/sequências **anteriores** da origem mantiveram-se; orçamento, movimentos e pagamentos do receptor não mudaram.8085 manteve todas as linhas/sequências dos dois livros.
|
||||
|
||||
A primeira prévia deste harness falhou porque variáveis de cache herdadas do processo SGC apontavam o processo receptor para metadados de providers do SGC. O harness receptor passou a isolar esses valores antes de arrancar; retomou-se o rascunho/UUID já conservados, sem repetir confirmação aceite nem apagar a tentativa auditada. Logs de falha ficam privados.
|
||||
|
||||
As aplicações usaram os kernels Laravel e o writer nativo real em processos independentes, com a ponte interceptada para processos CLI: **não é tráfego TCP para8085**, nem activação de8085. As78 provas anteriores do endpoint e as16 do cliente portátil foram reutilizadas, sem repetir suites de negócio. A pequena guarda de estrutura instalada acrescentada no final foi verificada por ensaio dirigido, sem repetir os commits integrados.
|
||||
|
||||
Typescript sem erros; ficheiro TSX alterado compilado para artefacto privado, sem alterar `public/build`. Os Blade foram compilados/renderizados nos testes, e os três scripts inline renderizados passaram na verificação sintáctica. Isso não é revisão visual, prova de interação de browser ou build completo do produto/implantação.
|
||||
|
||||
## Preparação concreta e próximos passos autorizáveis
|
||||
|
||||
Novo pacote inactivo: **`3bb99e866f52965dbb7d`**, fora da aplicação8085, no mesmo directório privado de preparação. Contém oito ficheiros SGF e15 do cliente/SGC, incluindo migração, ecrãs, serviço e guardas. Conserva o pacote anterior `d09aac9d09da98e61df5` como prova histórica. Ficheiros SGC existentes (rotas, writer, controlador e TSX) são assinalados para merge dirigido: não sobrescrever alterações alheias. Os modelos de principal/mapeamento não foram preenchidos/aprovados.
|
||||
|
||||
`node scripts/prepare-sgc-8085.mjs check` verifica a preparação e8085 sem instalar, activar, migrar, iniciar servidor ou limpar cache. Antes do uso operacional deste recorte faltam **passos de instalação/configuração**, não os ecrãs/persistência agora entregues:
|
||||
|
||||
1. Autorizar e preparar backup/restauro para instalação exacta da nova migração SGC e código desligado; não executar todas as migrations pendentes.
|
||||
2. Aprovar ligação, mapeamentos e identidade/segredo/contexto privados com direitos existentes. Não criar ou conceder acessos por inferência.
|
||||
3. Instalar o código do endpoint desligado na mesma8085, compor o cliente e preparar o build do link de navegação SGC por via privada/revista. Os ecrãs Blade têm rota própria e não dependem do build do link.
|
||||
4. Só após autorização de activação, ensaiar tráfego entre as aplicações nessa mesma8085 com fonte nova sintética e decisões individuais. Não reenviar facturas históricas, activar Compras/candidatas ou migrar responsabilidades financeiras.
|
||||
|
||||
Os seis registos protegidos e a cache não foram alterados/limpos. Nenhum comando/migração no SGC operacional, concessão real, instalação/activação em8085, publicação, aceitação ou checkpoint. Visual, TLS/carga sustentada, recuperação de desastre e capacidade de implantação mantêm provas próprias. [Prova final consolidada](proofs/sgc-invoice-workspace-final-20261110.json); o resumo inicial de19 casos/138 asserções fica preservado.
|
||||
@@ -0,0 +1,37 @@
|
||||
# Preparação SGC — 10/11/2026
|
||||
|
||||
Continuação posterior do mesmo dia: [endpoint de facturas implementado e provado](SGC_INVOICE_ENDPOINT.md),78 verificações, motor nativo e autenticação/contexto/idempotência. A rota está agora registada especificamente, mas permanece desligada por omissão. Os bloqueios descritos abaixo registam o estado **anterior** desta preparação; as classes/serviços legados não são usados como writer alternativo.
|
||||
|
||||
Pedido: aplicar migrations, implementar/popular dimensão temporal de dez anos, limpar configuração/rotas e experimentar o POST de facturas. Não constitui activação do conector ou autorização de pagamentos/concessões novas.
|
||||
|
||||
## Executado
|
||||
|
||||
- PostgreSQL existente em127.0.0.1:55432 retomado, sem criar cluster/base/porta. Destino confirmado pela configuração: `sgf_tempo_dev`. A instalação8085 não foi copiada, actualizada ou substituída nesta preparação.
|
||||
- Backup privado anterior à aplicação: `C:/laragon/data/sgf-tempo/backups/sgc-preparation-20261110/before.dump`. Não se executou restauro; não se declara recuperação ensaiada.
|
||||
- Migrations explícitas `2026_11_09_000001_create_sgc_integration_tables` e `2026_11_09_000002_create_sgc_analytics_tables` aplicadas por proprietário de manutenção existente, lotes18/19. Não se executou migrate global: `2026_10_28_130000_create_workshop_billing_corrections` continua pendente e não pertence ao pedido SGC.
|
||||
- Corrigidas três falhas da migration analítica: importação de `DB`, referência de departamento para `analytics_dim_organizacao.id` e alias reservado PostgreSQL `do` substituído por `org`. A primeira tentativa analítica falhou pelo alias e reverteu transaccionalmente; a segunda concluiu. A primeira migration não foi repetida nem revertida.
|
||||
- O comando `PopulateDimTempo` já existia como esqueleto vazio com nome `app:populate-dim-tempo`; foi implementado como `sgc:populate-dim-tempo`. Não se executou `make:command` sobre esse ficheiro existente.
|
||||
- População explícita de01/01/2026 a31/12/2035:3652 dias. Segunda execução:0 inserções. Usa gerador, lotes250 e transacção única; `insertOrIgnore` preserva datas e classificações existentes, sem truncate/update.
|
||||
- `eh_dia_util` representa segunda a sexta; os feriados oficiais não foram fornecidos/validados e não são inferidos. `eh_feriado=false` é o valor preparatório da migration, não uma certificação de calendário laboral.
|
||||
- `config:clear` e `route:clear` executados com PHP8.4.27 do projecto. Não se executaram `cache:clear`, `optimize:clear` ou remoções da cache de dados protegida.
|
||||
|
||||
## Verificação
|
||||
|
||||
Quatro testes unitários/17 asserções: intervalo, unicidade, ano bissexto, campos de calendário, simulação sem ligação à base e recusa de argumentos inválidos. Apenas este ficheiro de testes foi executado. O harness inicial de dois testes não fornecia o container mínimo exigido pelo comando Laravel; corrigido sem ligar a bases ou executar suites alheias.
|
||||
|
||||
Conferência SQL de3652 linhas, limites2026–2035 e existência da vista materializada. Fotografia anterior/posterior de todas as86 tabelas públicas preexistentes, excepto a tabela de controlo `migrations`: contagens e MD5 de todas as linhas ordenadas idênticos. Inclui dados e concessões/cache anteriores, não apenas as suas contagens. Fotografias ficam privadas; não foram impressos dados/credenciais. As tabelas novas de facturas/log SGC permanecem vazias. Nenhuma concessão explícita nova; SELECT/INSERT da conta de aplicação sobre o calendário estão disponíveis pelas permissões existentes.
|
||||
|
||||
```powershell
|
||||
& 'C:/laragon/tools/sgf-tempo/php-8.4.27/php.exe' artisan sgc:populate-dim-tempo --start-year=2026 --years=10
|
||||
& 'C:/laragon/tools/sgf-tempo/php-8.4.27/php.exe' artisan sgc:populate-dim-tempo --start-year=2026 --years=10 --dry-run
|
||||
```
|
||||
|
||||
## POST: resultado e bloqueios
|
||||
|
||||
O POST de diagnóstico para `http://sgf-tempo.test/api/v1/integration/sgc/invoices`, com JSON vazio e Accept JSON, devolveu **404**. Não é o teste positivo pedido, nem uma factura aceite. O ficheiro `tests/payloads/invoice_test.json` não existe. A chave de idempotência deve ser gerada com `[guid]::NewGuid().ToString()` no PowerShell quando houver um contrato/payload válido; `uuidgen` não é pressuposto neste Windows.
|
||||
|
||||
`artisan route:list --path=api/v1/integration/sgc` confirma ausência da rota registada: `bootstrap/app.php` não inclui `routes/api.php`. Esse ficheiro novo também oferece pagamentos/analytics e não declara autenticação/isolamento. Não se registou todo o ficheiro para contornar o404.
|
||||
|
||||
Classes referenciadas e ausentes: `StoreInvoiceRequest`, `StorePaymentRequest`, modelos `Fornecedor` e `Recebimento`. A integração proposta sincroniza fornecedor automaticamente, não demonstra isolamento por empresa/unidade e grava o recibo de idempotência depois do commit de negócio. O serviço orçamental contém uma resposta de saldo simulado fixa. Não equivale ao percurso nativo já validado em8085 e não deve ser activado como alternativa por consequência das migrations.
|
||||
|
||||
Próxima entrega necessária para um teste positivo: contrato/payload sintético, autenticação e contexto explícitos, reutilização do motor existente em vez de espelho autónomo, idempotência atómica com comparação do payload e classes/validações completas. Pagamentos não são necessários para testar facturas. Sem publicação, activação de candidatas, alteração dos seis registos, cache de dados ou provas anteriores. Não se declara capacidade de implantação.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Decisão para concluir os seis módulos na8085
|
||||
|
||||
Autorização expressa de10/11/2026: **«autorizo»** para o recorte abaixo. Aplicação em curso; não presumir etapas concluídas. Não constitui conclusão ou aceitação do SGF.
|
||||
|
||||
## Trabalho já efectuado
|
||||
|
||||
A8085 recebeu70 tabelas aditivas de documentos, classificação, recebíveis, Oficinas, custos e ligações. As quatro tabelas iniciais de Comercial foram reutilizadas. Dados anteriores, sequências, permissões e associações foram comparados e preservados; existe dump privado anterior e cópia dos ficheiros substituídos. Não houve migrate global nem limpeza da cache.
|
||||
|
||||
As guardas de ensaio foram ligadas à identidade física exacta desta composição. Resets/destruição ficam recusados mesmo quando a composição for activada. Não se criaram contas ou concessões. As funções/tabelas/sequências novas não concedem acesso a PUBLIC no destino.
|
||||
|
||||
Stock tem código instalado, ainda desligado: saída, transferência imediata, contagem, aplicação da diferença e selector de equipamento, pelos writers originais. Prévia revertida, versão, impacto antes/depois, fundamento, recibo auditado e recuperação. Contagem por lotes e devolução conservam seus percursos próprios; não se substituem por ajuste genérico.
|
||||
|
||||
O servidor existente estava parado e foi iniciado novamente na mesma8085. Compras continua em `/compras`; recepção e obrigação100MZN foram consultadas por HTTP sem repetir comandos de negócio. Nenhuma base/porta/demonstração nova ou dependência SGC.
|
||||
|
||||
## Autorização solicitada, num único recorte
|
||||
|
||||
1. **Perfis exclusivamente fictícios:** criar dez contas de aplicação para preparação/revisão Comercial, gestão/técnico/conferência Oficinas, preparação/revisão Financeiro, preparação/revisão Contabilidade e consulta. A [matriz exacta](integration/sgf-8085-access-proposal.json) discrimina direitos e âmbitos. Não criar roles PostgreSQL, contas reais ou `access.manage`.
|
||||
2. **Âmbito único:** tenant1, empresa2, unidade2, já existentes. Preservar os sete perfis de Compras. Os perfis não recebem acesso a outra unidade nem autoridade para decidir os seis registos protegidos.
|
||||
3. **Armazém:** acrescentar ao perfil sintético existente os direitos discriminados na matriz. Apenas dois nomes novos: `stock.operations.prepare` e `stock.operations.confirm`, apresentados antes de qualquer concessão. Preparar um segundo armazém vazio e um artigo de ensaio explicitamente ligados; não usar o armazém estrangeiro como destino.
|
||||
4. **Preparação do percurso:** criar cliente/serviço de teste, emissor/série/perfis fictícios, equipamento/tarefa e parâmetros de custo. Usar os workflows e revisões existentes com pessoas distintas. Não converter, associar ou alterar os seis registos pendentes.
|
||||
5. **Continuação da obrigação100MZN existente:** autorizar a liquidação/afectação sintética20MZN, sua reversão e contabilização individual revista. Reutilizar a obrigação original, sem outra dívida. Esta origem estava expressamente excluída dos efeitos financeiros da entrega anterior de Compras.
|
||||
6. **Reunir os cenários já aprovados:** Comercial1000MZN/afectações400+600; custo directo275→295; industrial1800→1820; stock2UN/100MZN, saída1UN/50 e devolução0,5UN/25. Registos novos do ensaio integrado na mesma instalação, preservando anteriores. Cada efeito conserva decisão, autoridade, versão e idempotência; nada é propagado automaticamente.
|
||||
7. **Um diário comum:** instalar no livro financeiro local já usado por Compras, com âmbito SGF explícito empresa/unidade e origens qualificadas de Comercial/Oficinas. Não copiar obrigações/saldos nem criar autoridade concorrente. Esse livro nativo é parte local do SGF, sem serviço remoto SGC. Comprovar o protocolo de origem/versão/bloqueio entre bases antes de disponibilizar a continuidade.
|
||||
8. **Contas/período QA e activação limitada:** preparação/revisão artificiais, conferência e fecho sintético, sem reabertura. Activar apenas os percursos SGF do recorte quando a integração e as recusas de acesso afectadas passarem, conservando confirmações individuais.
|
||||
|
||||
Este recorte permite continuar até à entrega dos seis módulos sem pedir autorização por cada campo ou teste. Não presume funcionalidades por implementar aceites nem capacidade de implantação.
|
||||
|
||||
## Exclusões
|
||||
|
||||
Sem dinheiro/banco/emissão fiscal, contas ou acessos reais, direitos públicos, publicação, candidata de Compras, nova demonstração/base/porta ou activação SGC. Sem decidir os seis registos, limpar a cache bloqueada, reabrir períodos ou apagar provas aceites. Revisão visual e implantação exigem evidência própria.
|
||||
|
||||
## Motivo da decisão
|
||||
|
||||
A regra de acessos do projecto exige apresentar direitos novos antes de os conceder. A entrega de Compras na8085 excluiu pagamentos/Contabilidade desta origem. A instrução de continuar permitiu instalar e preparar código; não a usei para conceder acessos ou executar os efeitos financeiros excluídos. A matriz e os cenários acima tornam a decisão concreta.
|
||||
|
||||
Após aprovação, continuar implementação e integração até ao percurso demonstrável dos seis módulos. **O SGF ainda não está pronto para apresentação integral.**
|
||||
@@ -0,0 +1,32 @@
|
||||
# Contabilidade — submenus funcionais e relatórios por período
|
||||
|
||||
10/11/2026, instalação8085 existente. O bloco foi desenvolvido no código e conferido antes de actualizar a instalação de apresentação. Sem demonstração/base/porta nova, SGC, direitos adicionais ou efeitos financeiros.
|
||||
|
||||
## Percurso utilizável
|
||||
|
||||
Os submenus de Contabilidade deixaram de devolver o mesmo painel: Painel explica a ligação entre origem, decisão e relatório; Trabalho diário abre o diário original; Conferência apresenta fontes fiscais/bancárias apenas quando autorizadas; Fecho encaminha para a conferência do período sem o fechar; Configuração reúne contas, classificação e regras já existentes. A navegação aceite e a transição explícita entre módulos mantêm-se.
|
||||
|
||||
Em **Contabilidade → Análise**, o utilizador escolhe datas e consulta o balancete. Não há intervalo anual fixo ou datas escolhidas automaticamente. Cada conta mostra abertura líquida, débitos, créditos e fecho; clicar **Abrir razão desta conta** conserva o intervalo e escolhe explicitamente a conta, sem redigitar identificadores. O razão mostra lançamento/linha, data, fundamento, proposta, revisão e saldo progressivo.
|
||||
|
||||
As páginas25/100 e os totais vêm do leitor original, sem recálculo no navegador. Totais referem-se ao filtro completo; saldo progressivo inclui páginas anteriores. Montantes são representados por inteiros exactos, recusando valores JavaScript inseguros. O marcador append-only do livro é comparado entre páginas: se mudar, exige-se actualizar a primeira página. Isto detecta mudança entre leituras, não cria um snapshot persistente do universo.
|
||||
|
||||
CSV exporta **apenas a página consultada**, com datas, moeda e referência do livro; texto livre é protegido contra fórmulas em folhas de cálculo. Não é arquivo certificado ou relatório completo exportado. A opção de impressão abre **nova leitura** no relatório original, com os mesmos filtros; não afirma que a base ficou congelada desde a consulta anterior. Filtros não disparam pedido de guardar alterações de negócio.
|
||||
|
||||
## Correcção HTTP dirigida
|
||||
|
||||
A conferência identificou que o adaptador composto deixava escapar excepções de domínio/argumentos: conta inexistente e razão sem conta podiam produzir500. O adaptador passa a devolver403 para conta indisponível e422 para argumentos inválidos, alinhado com o controlador original. Contexto, permissões, engine de relatórios, SQL, writers e schema nativos permanecem iguais.
|
||||
|
||||
## Evidência e preservação
|
||||
|
||||
- Cinco verificações do adaptador na regressão existente: conta indisponível403, conta obrigatória422, identificador inválido422, tentativa de alterar empresa422 e consulta válida200. Sem operações de negócio.
|
||||
-19 verificações HTTP8085 do bloco integrado: balancete/razão efectivos, conta QA-CAIXA com fecho950MZN, equilíbrio, proposta/revisão/fundamento, paginação25/100, representação/exportação, resposta atrasada de outro intervalo, marcador alterado simulado sem escrita, entradas indevidas e módulo errado.
|
||||
-14 verificações de renderização e autoridade: linhas efectivas, distinção dos cinco submenus, datas vazias, escolha de conta sem digitar ID, links condicionados e escapagem. Não são revisão visual de navegador.
|
||||
-32 conjuntos de dados e binding comparados antes/depois: intactos. Diário27, Caixa950, cinco cálculos e restantes exemplos preservados. Zero concessões/lançamentos/pagamentos ou limpeza da cache; sem comandos dirigidos aos seis registos protegidos.
|
||||
|
||||
[Índice com SHA das fontes/provas](proofs/sgf-accounting-reports-20261110.json). As17 verificações positivas antes da instalação foram substituídas pela conferência final19; não são somadas outra vez. Provas anteriores do engine e dos workflows foram reutilizadas, sem repetir suites alheias. Alterações fora do método HTTP de relatórios foram comparadas antes de copiar o controlador; backups e dados privados fora do repositório.
|
||||
|
||||
## Limites que permanecem
|
||||
|
||||
O balancete e o razão são do exercício QA, com contas artificiais. Não foram implementados balanço legal, demonstração de resultados/fluxos, classificação normativa automática, recorrências, depreciações, câmbio, reabertura, motores fiscais gerais ou modelos oficiais. As fontes bancárias/fiscais continuam nos seus recortes aprovados. O leitor composto ainda conserva o bloqueio administrativo original; não se declara que esta interface removeu esse gargalo ou validou carga sustentada.
|
||||
|
||||
Revisão visual do conjunto, carga sustentada e capacidade de implantação mantêm provas próprias pendentes. Sem publicação, candidata de Compras, aceitação/checkpoint ou declaração de produto completo. A8085 é a integração de apresentação; o trabalho de código e as verificações não exigem alterações sucessivas dos seus exemplos financeiros.
|
||||
@@ -0,0 +1,51 @@
|
||||
# Conferência de extracto QA — entrega na8085
|
||||
|
||||
10/11/2026, `SGF-BANK-RECONCILIATION-QA-v1`, conforme [âmbito autorizado](SGF_BANK_RECONCILIATION_SCOPE.md). Mesma instalação, entrada **Financeiro → Conferência de extracto QA → Abrir extracto, conferência e histórico**, ou `/finance/bank` após escolha da função autorizada.
|
||||
|
||||
## Resultado conservado
|
||||
|
||||
Um extracto **artificial interno** `QA-BANCO-LOCAL`, MZN,2026-11: abertura0, débito20, crédito20 e fecho0. O saldo intermédio−20 é explícito no exercício; não significa autorização de descoberto, caixa disponível ou saldo bancário real. A conta de liquidação não foi classificada como banco.
|
||||
|
||||
Importação13 → revisão14 do extracto → proposta13 da linha `QA-OUT-20` para a linha contabilística4/diário2 → revisão14 → proposta13 da linha `QA-IN-20` para a linha5/diário3 → revisão14 → conferência final14, diferença0. **Um cabeçalho, duas linhas e sete eventos** conservados na8085; relatório CSV interno com assinatura verificável.
|
||||
|
||||
O leitor nativo conferiu as duas linhas **efectivamente existentes** de `QA-LIQUIDACAO`,20/reversão20, por SELECT no livro físico ligado à mesma composição/empresa/unidade. Confere IDs fixados, conta, data, moeda, sinal/valor e fotografia do diário; não toma correspondência por igualdade de valor nem oferece toda a contabilidade. Reutiliza a ligação nativa existente, sem novo PGrole; o adaptador apenas executa leituras, não é uma concessão de escrita nem uma nova role SELECT-only.
|
||||
|
||||
Não foram criados pagamentos/estornos/comissões/ajustes ou lançamentos para preparar ou fechar o exercício. Caixa950 fechada,27 lançamentos, período contabilístico, IVA com quatro versões e regras com quatro eventos/dois cálculos intactos. Não existe SGC/portal/banco/API de instituição em execução neste percurso.
|
||||
|
||||
## Controlos e histórico
|
||||
|
||||
CSV UTF-8 limitado8192 bytes e ao caso artificial aprovado, com validação de cabeçalho, conta/período/moeda, ordem/data/referência, sinais, montantes, abertura/fecho e saldos intermédios. Não é importador bancário geral. Ficheiro não substitui fotografia anterior; mesmo ficheiro/chave recupera a origem sem duplicação. Com outra chave e o mesmo ficheiro, devolve o extracto existente sem criar eventos ou linhas, inclusive depois da conferência final; isso não reabre o processo.
|
||||
|
||||
Extracto importado não cria correspondências. Revisão distinta do extracto precede propostas individuais; revisão de cada proposta exige alvo exacto e preparador ainda autorizado. Proposta por rever não permite outra para a mesma linha. Uma linha contabilística ou de extracto já conferida não pode ser usada novamente. Finalização exige as duas correspondências revistas e nenhuma proposta pendente. Não há reabertura de conferência finalizada, Caixa ou período.
|
||||
|
||||
Prévia cifrada600s em savepoint revertido, impacto antes da confirmação, contexto/autor/direitos/versão/origem revalidados sob lock da empresa. `br_statements` fixa CSV/SHA e linhas; `br_events` fixa predecessor, proposta exacta, autor/preparador/data/fundamento/estados e correspondências; `br_commands` fixa chave/hash/resultado. Triggers exigem acesso/revisão distinta/versão, protegem história append-only e impedem duplicação de correspondências. Guarda física QA e PUBLIC revogado.
|
||||
|
||||
Recibo próprio recuperável noutra sessão por GET, sem executar de novo. Fonte alterada bloqueia a conferência/relatório, sem preencher saldos zero. Interface exige escolha explícita das duas linhas e da decisão, protege campos durante operação incerta e conserva histórico/consulta depois da finalização. Upload/leitura de ficheiro limitado ao CSV QA; botão do exemplo só preenche após escolha do utilizador. Não lê ficheiros por caminhos recebidos do cliente.
|
||||
|
||||
Linhas de extracto são **limitadas a duas por este contrato**, com filtro de estado. Histórico é SQL25/100 e foi percorrido além100 eventos. Não se declara importação/paginação de extractos de volume arbitrário. O relatório é derivado das fotografias imutáveis da conferência, com checksum no download e auditoria; não se declarou arquivo independente do binário/renderer para retenção legal de longo prazo.
|
||||
|
||||
## Acessos e provas
|
||||
|
||||
`bank_reconciliation.view/import/prepare/review`: **oito concessões por cada uma das duas bases QA existentes**,16 no conjunto, exactamente [como aprovado](integration/sgf-bank-reconciliation-access-proposal.json). Importação/preparação13, revisão14 e consultas13–17. Não herdados de Caixa/recebíveis. Sem novo utilizador/PGrole/direito PUBLIC/acesso real. Rootflag desligada; somente a8085 disponibilizada com vínculo privado por hash.
|
||||
|
||||
|Prova|Resultado|
|
||||
|---|---|
|
||||
|37 regressão, rollback integral|Importação/prévia, sinais/moeda/valor, revisão distinta, fase de extracto, versões antigas, linha/pedido repetidos, correspondência manual, finalização/relatório, origem alterada, falha após importação com rollback/recuperação e dados anteriores intactos.|
|
||||
|Concorrência na regressão|Segunda revisão503/Retry-After5 durante o lock da empresa; libertação→409 por versão antiga. Uma revisão válida, recuperação da primeira chave sem duplicação.|
|
||||
|11 SQL/fronteiras, rollback|126 eventos de metadados (63 propostas/recusas) além dos dois eventos de concorrência;128 percorridos em25 e100/28. Filtros, actor/contexto/unidade/módulo, histórico imutável e writer indevido. Fixtures não são correspondências confirmadas.|
|
||||
|28 HTTP na8085|Leitor nativo actual, duas linhas reais do QA, sete confirmações/repetições, dois pares conferidos individualmente, finalização/relatório/checksum, sinais/IDs/reutilização/actor/módulo/tenant, recibo noutra sessão e ecrã. Progresso guardado para não repetir operações válidas.|
|
||||
|15 DOM→HTTP|Consulta do estado final, duas correspondências visíveis, formulário fechado, filtros/histórico100/detalhe, recibo e integração com Caixa950/IVA4/regras2cálculos. **Zero POSTs de negócio**. Não é navegador ou aceitação visual.|
|
||||
|Três HTTP do relatório|Resposta CSV/checksum preservados através do mesmo tratamento HTTP limitado para ocupação. Não foi repetido o percurso de sete decisões.|
|
||||
|Preservação SELECT-only|20 conjuntos originais completos e binding idênticos; apenas oito concessões aprovadas adicionadas. Sem append nativo ou alteração dos exemplos anteriores.|
|
||||
|
||||
Total94 verificações dirigidas, concorrência separada. [Índice verificável](proofs/sgf-bank-reconciliation-20261110.json).
|
||||
|
||||
**Distinção de origem das provas:** a regressão existente não contém os dois lançamentos20/20. Os testes de componente/persistência/concorrência injectaram um fornecedor de origem artificial **apenas no harness CLI**, como autorizado, com `source_kind=regression_harness_fixture`. Não foram criados lançamentos/pagamentos para preparar testes. O leitor instalado não tem fallback ou origem de regressão; a execução HTTP8085 comprovou `source_kind=native_qa_ledger` e as duas linhas efectivas. Não apresentar a prova com origem simulada como integração nativa total da regressão.
|
||||
|
||||
Uma ambiguidade de nome no trigger de finalização foi detectada/corrigida só na regressão antes da instalação; a execução de negócio foi revertida e a prova final passou com a guarda corrigida. Não foram somadas tentativas falhadas como provas válidas.
|
||||
|
||||
## Limitações restantes
|
||||
|
||||
Amostra artificial de duas linhas/um período/uma conta de exercício. Não é integração bancária, reconciliação geral, pagamento, livro bancário real ou confirmação da natureza de uma conta. Recusa do extracto mantém o processo bloqueado; protocolo geral de correcção/substituição/reenvio de extractos não faz parte desta entrega. Proposta de correspondência recusada pode ser preparada novamente, sem apagar a recusa.
|
||||
|
||||
Sem novos motores legais, remunerações, modelos oficiais, rácios financeiros amplos ou capacidade de implantação. Visual continua pendente, via bloqueada não repetida; carga sustentada, retenção/órfãos, arranque completo, conformidade e implantação exigem evidência própria. Seis registos/cache/trabalho alheio preservados; sem novas bases/portas/demos, SGC, publicação/candidata, aceitação/checkpoint ou dados/acessos reais. Dumps e dados privados fora do repositório.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Proposta agrupada — conferência de extracto bancário QA
|
||||
|
||||
`SGF-BANK-RECONCILIATION-QA-v1`,10/11/2026. **Autorizado expressamente e entregue**; ver `SGF_BANK_RECONCILIATION_DELIVERY.md`. O texto abaixo conserva o âmbito aprovado. Fecha a lacuna de conferência de extracto no módulo Financeiro, mantendo o percurso de Caixa e os livros existentes. Não é autorização para operar bancos ou dinheiro real.
|
||||
|
||||
## Percurso completo proposto
|
||||
|
||||
Na mesma8085/regressão, importar o CSV artificial `QA-EXTRACTO-20261110`: entidade fictícia `QA-BANCO-LOCAL`, MZN, abertura0, débito20 e crédito20 em10/11/2026, fecho0. O saldo intermédio−20 é parte deste exercício documental; não representa autorização de descoberto, caixa disponível ou crédito real.
|
||||
|
||||
O documento é um **extracto artificial interno**, sem conexão de instituição ou transmissão externa. Não se usa o recebimento1000 da Caixa, nem se reclassifica a Caixa fechada950. A referência de comparação são duas linhas contabilísticas de liquidação já existentes: crédito20 do diário2 e débito20 do diário3, conta artificial `QA-LIQUIDACAO` (linhas4/5 na8085). Corresponderam ao ciclo fornecedor20/reversão20 já provado. A conta não é declarada bancária globalmente; a comparação fica identificada e limitada a este exercício.
|
||||
|
||||
Importação13 → revisão distinta14 do extracto/abertura/fecho → escolha explícita, individual e fundamentada da linha do extracto e da linha contabilística → prévia do impacto → confirmação/revisão14 da correspondência exacta → conferência final com zero linhas por conferir e diferença0 → histórico e relatório interno recuperáveis. Não criar pagamento, estorno, comissão, ajuste ou lançamento para fazer coincidir valores. Referências de valor igual não são associadas automaticamente.
|
||||
|
||||
Importar o mesmo ficheiro/chave recupera a mesma origem, sem duplicar linhas. Ficheiro alterado não substitui fotografia confirmada. Uma linha contabilística ou de extracto já conciliada não pode ser usada de novo; divergência ou origem ausente permanece pendência. Dados fora da instituição/conta/período/empresa/unidade QA fixados são recusados. Datas, sinal, moeda, totais e sequência são conferidos sem inferir saldo de conta real a partir desta amostra.
|
||||
|
||||
Confirmação revalida autor/direitos/contexto, versão do extracto/correspondência, fonte contabilística e dependências. Histórico append-only com preparador/revisor/data/fundamento/estado anterior e posterior; recuperação de resposta incerta pelo pedido original. Sem reabertura de Caixa, período contabilístico ou conciliação finalizada. Importação não confirma correspondências nem altera o diário.
|
||||
|
||||
## Novos direitos a decidir
|
||||
|
||||
Quatro nomes e **oito concessões por cada base QA existente**,16 no conjunto, todos tenant1/empresa2/unidade2 e perfis existentes:
|
||||
|
||||
|Direito|Destinatários|
|
||||
|---|---|
|
||||
|`bank_reconciliation.view`|Financeiro13/14; Contabilidade15/16; consulta17|
|
||||
|`bank_reconciliation.import`|Financeiro preparação13|
|
||||
|`bank_reconciliation.prepare`|Financeiro preparação13|
|
||||
|`bank_reconciliation.review`|Financeiro revisão14|
|
||||
|
||||
[Matriz integral](integration/sgf-bank-reconciliation-access-proposal.json). Consulta abrange apenas o extracto artificial e as duas fontes fixadas do exercício. Não confere acesso geral a dados bancários/documentos de outros módulos. `service_receivables.reconcile` já existente refere-se ao percurso de recebimento, não concede importação/conferência de extractos. Sem novo utilizador, PGrole, direito PUBLIC, conta bancária real ou concessão real.
|
||||
|
||||
## Provas e instalação depois da autorização
|
||||
|
||||
A base de regressão existente não contém as duas linhas de liquidação20/20 da8085 (confirmado por consulta só de leitura). Nesse livro, a persistência/concorrência/guardas serão testadas com um fornecedor de origem artificial injectado apenas no harness, sem criar pagamentos ou lançamentos para preparar testes. O leitor nativo de produção não terá fallback e continuará limitado ao seu livro físico; o percurso HTTP na8085 provará a ligação às duas linhas efectivamente existentes. O relatório distinguirá explicitamente a origem simulada nos testes de componente e a origem contabilística real do QA na instalação.
|
||||
|
||||
Primeiro regressão existente: leitura/importação por hash, filtros/páginas25/100 com metadados de teste, contexto/empresa/unidade/módulo, revisão própria, abertura/fecho/sinais/moeda, correspondências manuais, versões antigas, concorrência, reutilização indevida da mesma linha, repetição e falha/recuperação atómica. Depois disponibilizar o percurso completo limitado na mesma8085, conservando a evidência e exemplos anteriores. Não repetir aquisições, liquidações ou lançamentos que originaram as duas linhas.
|
||||
|
||||
Este bloco inteiro inclui os campos/testes do contrato, sem pedidos por cada detalhe. Preservar27 lançamentos, Caixa950, quatro versões IVA, quatro eventos de regra/dois cálculos, seis registos/cache/trabalho alheio. Sem novas bases/portas/demos, SGC/portal em execução, bancos/APIs/credenciais/dados reais, pagamentos/efeitos financeiros novos, mudança da classificação do plano, índices no destino, reabertura, publicação/candidata/checkpoint/aceitação ou capacidade de implantação. Visual/carga continuam separados. Outros motores fiscais, modelos oficiais e operação bancária geral permanecem fora deste recorte.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Registo unificado de documentos —10/11/2026
|
||||
|
||||
Implementado na8085 em **Comercial → Todos os documentos** e **Facturas**, reutilizando os direitos de consulta já concedidos. Sem novos direitos, tabelas, índices, escritores ou operações financeiras.
|
||||
|
||||
A lista anterior carregava facturas e respectivos detalhes, além de rascunhos, antes de filtrar no cliente; os novos documentos não apareciam nesse conjunto. O registo actual combina na SQL facturas, facturas-recibo, recibos, créditos, orçamentos e rascunhos autorizados. Filtros por tipo, referência/cliente/NUIT literal, moeda, série exacta, autor, estado e emissão, ordenação estável e páginas25/100 são aplicados no servidor. Mantém os estados internos/substituídos/cancelados dos rascunhos. Bases dos rascunhos são calculadas pelo mecanismo canónico apenas nas linhas da página; não são totais fiscais.
|
||||
|
||||
Uma factura-recibo aparece uma vez, com a factura técnica acessível no seu percurso, sem duplicação na lista comum. Uma família não autorizada não entra nas linhas ou contagens e não oculta outra família autorizada. Metadados estrangeiros não suprimem uma factura deste contexto. O saldo é uma projecção conjunta, limitada às facturas da página, só com acesso financeiro; não se usa zero quando falta autoridade ou reconhecimento. Recibo/crédito mostram o saldo da **factura de origem**, não um saldo próprio. Não se somam facturas, recebimentos, créditos, bases ou moedas diferentes.
|
||||
|
||||
PDFs e impressão de orçamento continuam nos leitores originais com revalidação de acesso; não se regeneram documentos. A abertura do rascunho conserva o destino existente. O carregamento do novo componente é diferido; build privado aprovado, sem alterar o limiar de tamanho.
|
||||
|
||||
## Provas e preservação
|
||||
|
||||
- 33 verificações dirigidas na regressão existente:127 fixtures de metadados percorridas em seis páginas25 e duas páginas100, pesquisa literal de `%_!`, filtros anteriores, base canónica, datas, direitos, ocultação financeira, módulo/contexto e fixture estrangeira que não pode ocultar uma factura autorizada. Fixtures e alterações transitórias de direitos integralmente revertidas; documentos, rascunhos e efeitos originais intactos. Prova privada `receipt-composition-b4093c6f6707/single-integration/20261110-174502-e0b30bb6/billing-register-result.json`.
|
||||
- Duas consultas de dados do registo por página de orçamentos observadas no ensaio, excluindo validações de contexto/direitos. Páginas com facturas/rascunhos acrescentam projecções limitadas dos respectivos saldos/bases; não se declara o mesmo número para todas as famílias nem capacidade de carga sustentada.
|
||||
- 16 controlos HTTP na8085: seis famílias, contagens, factura-recibo sem duplicação, crédito100/saldo500, factura-recibo/saldo0, bases sem emissão presumida, pesquisa literal, contexto/página indevidos recusados e diário25 equilibrado. `receipt-composition-cc50a276c10c/billing-register-http-20261110.json`.
|
||||
- Instalação local com cópia anterior dos quatro ficheiros e manifesto/build privados; assets anteriores conservados. Sem limpeza da cache, novas demonstrações, publicação, direitos públicos ou alterações dos seis registos. Não se repetiram comandos dos percursos financeiros/Compras.
|
||||
|
||||
Os estados do documento continuam distintos do pagamento, da custódia de Caixa e da validade fiscal. Navegador/revisão visual não foram declarados concluídos; carga sustentada e implantação continuam a exigir evidência própria. A próxima lacuna operacional identificada, Caixa, tem âmbito/direitos apresentados em `SGF_CASH_NEXT_SCOPE.md`; ainda sem implementação ou concessão.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Caixa QA integrada na8085 —10/11/2026
|
||||
|
||||
Bloco `SGF-CASH-QA-v1` expressamente autorizado pelo utilizador e entregue na mesma instalação. **Financeiro → Recebimentos e Caixa → Caixa — abertura, despesas e fecho QA**, ou `/finance/cash` após escolha de função. Oficinas → Financeiro tem continuação explícita para o módulo Financeiro. Mantém navegação horizontal/dropdowns e guardas de contexto; sem novas demonstrações, bases, portas ou dependência do SGC.
|
||||
|
||||
Os quatro direitos aprovados foram concedidos exactamente aos perfis existentes: `cash.view`13/14/15/16/17; `cash.prepare`13; `cash.review`14; `cash.close`14. Oito concessões em cada uma das duas bases QA existentes, empresa2/unidade2. Sem novas pessoas/perfis, roles PostgreSQL, funções nativas ou acessos reais/PUBLIC. Configuração desligada por omissão fora da instalação seleccionada.
|
||||
|
||||
## Percurso concluído e conservado
|
||||
|
||||
|Passo|Preparação|Conferência|Saldo QA|
|
||||
|---|---|---|---:|
|
||||
|Abertura explícita0|Financeiro13|Financeiro14|0MZN|
|
||||
|Custódia fictícia1000, recebimento existente escolhido e meio Numerário declarado|Financeiro13|Financeiro14|1000MZN|
|
||||
|Despesa fictícia50 com beneficiário/descrição/comprovativo|Financeiro13|Financeiro14|950MZN|
|
||||
|Contagem950 e fecho|Contagem13|Revisão e fecho14|950MZN, fechado|
|
||||
|
||||
Nove eventos append-only na8085. O recebimento é o da factura-recibo nova, efectivamente confirmado/afectado anteriormente; Caixa não emite outro documento, não recebe de novo, não altera a dívida nem presume numerário a partir da factura. A declaração de custódia é própria, explícita e fundamentada. Nenhum dinheiro real foi movimentado.
|
||||
|
||||
No mesmo diário, Contabilidade15 prepara e aplica, Contabilidade16 revê individualmente: reclassificação1000 D QA-CAIXA/C QA-LIQUIDACAO-CLIENTE e despesa50 D QA-DESPESA-CAIXA/C QA-CAIXA. A origem da liquidez tem de estar contabilizada antes da reclassificação. A conta de liquidez QA não representa uma conta bancária real. Contagem e fecho não lançam automaticamente. A instalação termina com **27 lançamentos equilibrados**, incluindo apenas esses dois novos factos.
|
||||
|
||||
Fecho de Caixa recusa movimentos por valorizar, contagem divergente/antiga, decisões pendentes, autoridade revogada ou origem revertida. Divergência fica preservada; revisão pode recusar para permitir nova contagem, sem ajuste automático. O livro fechado não reabre. Uma reversão posterior da origem é bloqueio de conferência, sem retirar numerário ou devolver dinheiro por arrasto.
|
||||
|
||||
## Consulta, prévia e recuperação
|
||||
|
||||
Extracto por datas/tipo e páginas25/100 na SQL; abertura/entradas/despesas/fecho do intervalo em leitura consistente. O filtro por tipo limita o histórico, não altera o resumo global da Caixa. Contagem não é movimento. Antes da abertura e quando a origem está bloqueada, o ecrã identifica o estado em vez de fabricar um saldo real.
|
||||
|
||||
Todas as decisões exigem fundamento, prévia revertida e confirmação com nova validação de identidade/contexto/permissões/versão/origem. A transacção mantém autoridade e bloqueio de empresa; escritor, recibo e auditoria são atómicos no host. Datas de classificação/despesa/contagem não podem anteceder as suas origens. Só valores exactos do recorte aprovado são admitidos.
|
||||
|
||||
Uma referência por confirmação recupera o recibo histórico, mesmo noutra sessão da mesma pessoa/contexto autorizado, sem executar de novo. Referências próprias ficam no histórico; a consulta não concede poderes de escrita. Formulários/prévia e resultado incerto ficam protegidos; não há limpeza de cache ou armazenamento de credenciais no cliente.
|
||||
|
||||
## Provas
|
||||
|
||||
- 23 verificações dirigidas, todas revertidas na regressão existente: abertura, revisão própria/acesso indevido recusados, origem estrangeira, saldo, versão antiga, revogação, falha depois do writer e recuperação, duplicação, divergência, origem revertida, fecho sem diário recusado, duas valorizações e conservação dos documentos/efeitos financeiros. `receipt-composition-b4093c6f6707/single-integration/20261110-175251-07723b42/cash-result.json`.
|
||||
- Concorrência entre dois processos apenas na regressão: segunda confirmação503 durante o bloqueio da empresa, depois409 por versão antiga; uma classificação e recuperação da primeira chave. `cash-concurrency/result.json`. O ensaio conserva uma abertura/classificação1000 nessa regressão, sem a apresentar como o livro concluído da8085; não repetir a preparação nem a prova positiva inicial por rotina.
|
||||
- Sete verificações adicionais de leitura/fronteiras, após a prova concorrente: SQL25/100, intervalo posterior com abertura1000, tipo sem alterar saldo, data incompatível e empresa alheia recusadas, ciclo incompleto sem fecho. `single-integration/20261110-175845-a7f3eb7b/cash-read-boundaries.json` na regressão.
|
||||
- 21 controlos HTTP na8085: nove decisões com recuperação, declaração1000 sem outra factura/recibo, despesa50, contagem950, fecho prematuro recusado, extracto, consulta sem escrita403, recuperação noutra sessão e diário27 equilibrado. As duas páginas do diário contêm25+2 registos únicos; tamanho da página não é o total. `cash-http-20261110.json`.
|
||||
- Oito verificações de período na8085: **38 factos/zero pendentes**, fecho/repetição e recusas em rollback, sem reabertura; período de apresentação mantém-se aberto. `single-integration/20261110-180324-fe0a46fd/period-cash-result.json`.
|
||||
- 14 verificações DOM→HTTP de consulta/recuperação: Caixa fechada950, nove eventos, comandos bloqueados, filtros por tipo/data, saldo transportado e recibo recuperado, **zero POSTs de confirmação**. `cash-dom-http-20261110.json`. Não é revisão visual de navegador.
|
||||
- Comparação SELECT-only com backup privado anterior a Caixa:25 lançamentos, clientes, facturas, movimentos físicos, registos/efeitos de recebíveis e binding original byte a byte intactos. `single-integration/20261110-180329-e03178dc/cash-preservation.json`. Backup/dumps e dados privados fora do repositório; nenhuma aceitação/checkpoint Git presumida.
|
||||
|
||||
Build privado e verificações de sintaxe aprovados; assets anteriores retidos. Provas válidas dos restantes módulos reutilizadas, sem repetir comandos de Compras, documentos ou associações. Os seis registos protegidos e a cache bloqueada não foram alvo.
|
||||
|
||||
## Limites
|
||||
|
||||
Um livro/uma origem fictícia1000, despesa50, MZN e período QA seleccionados, com duas contas artificiais novas. Não é operação geral de Caixa de uma empresa. Sem bancos/POS/câmbio/transferências externas, fiscalidade certificada, salários, dinheiro/acessos reais, ajuste automático ou reabertura. Sem publicação, candidata de Compras, SGC, novas demonstrações, aceitação ou capacidade de implantação presumida.
|
||||
|
||||
Revisão visual continua separada e a via de navegador bloqueada não foi repetida. Carga sustentada, armazenamento/retensão, conformidade real e implantação exigem evidência própria.
|
||||
@@ -0,0 +1,39 @@
|
||||
# Próxima lacuna operacional: Caixa QA
|
||||
|
||||
Estado10/11/2026: **autorizado, implementado e verificado na8085 — ver SGF_CASH_DELIVERY.md. O diagnóstico seguinte conserva o contexto anterior à aprovação**. A directiva executiva autoriza continuar funcionalidades; a regra de apresentar novos direitos antes de conceder acessos continua aplicável. A matriz anterior dos documentos não inclui poderes de Caixa. Não usar `service_receivables.view`, a emissão de recibos ou a aprovação de uma factura como autorização para despesas ou fecho de Caixa.
|
||||
|
||||
O menu de Oficinas → Financeiro declara correctamente Caixa, despesas, abertura e fecho ainda ausentes. A pesquisa em `app`, `packages` e serviços nativos de Compras não encontrou motor de Caixa reutilizável. A consulta SELECT-only nas duas bases QA existentes encontrou **zero concessões** dos quatro direitos propostos. Não foram criados schema, flag, motor, sessão ou movimento de Caixa.
|
||||
|
||||
## Recorte funcional agrupado
|
||||
|
||||
No Financeiro da **mesma8085**, e regressão existente, um livro de Caixa QA em MZN, com as seguintes funções completas, sem mais demonstrações:
|
||||
|
||||
1. Abertura deliberada com saldo inicial explícito0, preparação e revisão distintas, responsáveis e contexto identificados.
|
||||
2. Conferência individual de **um recebimento sintético1000 já efectivamente confirmado** na nova factura-recibo. Escolha e declaração explícitas do meio Caixa com comprovativo; o documento anterior não prova por si entrega em numerário. Fonte exclusiva e recuperação por chave. Não emitir outra factura, outro recibo, dívida ou entrada financeira duplicada. Os documentos e a origem anteriores mantêm-se imutáveis.
|
||||
3. Uma despesa fictícia nova50, com beneficiário, descrição, data e comprovativo QA, preparação e revisão distintas, limite pelo saldo disponível. Sem pagamento real, retenção/imposto presumido ou obrigação a fornecedor criada automaticamente.
|
||||
4. Contagem950 fundamentada, revisão distinta e fecho só com versão/contexto/origens actuais, movimentos confirmados e valorizados. Divergência não gera ajuste automático. Uma alteração/reversão da origem impede declarar a caixa reconciliada sem nova conferência; não desencadeia reembolso.
|
||||
5. Histórico e extracto por período, filtros e páginas25/100, indicação de preparador/revisor e estados anteriores/posteriores. Consulta genérica não adquire poderes de movimentação. Não há reabertura de Caixa fechada neste recorte.
|
||||
6. Duas origens explícitas no mesmo diário: reclassificação1000 D QA-CAIXA/C QA-LIQUIDACAO-CLIENTE, e despesa50 D QA-DESPESA-CAIXA/C QA-CAIXA. A classificação não reconhece dinheiro pela segunda vez. Contabilidade prepara/revê/aplica pelos direitos e writer existentes; fecho de Caixa e conferência do período não ignoram origens ou lançamentos pendentes. Contas/regras apenas nas fixtures QA existentes, sem implantação empresarial.
|
||||
|
||||
O exemplo terminado conserva950 na Caixa QA. Os25 lançamentos anteriores e todos os exemplos aceites ficam intactos; só serão acrescentados os dois lançamentos escolhidos e conferidos. Não inferir que QA-LIQUIDACAO-CLIENTE é uma conta bancária real.
|
||||
|
||||
## Direitos exactos a autorizar
|
||||
|
||||
Quatro nomes novos, **oito concessões por base QA existente**, apenas empresa2/unidade2:
|
||||
|
||||
|Direito|Perfis QA existentes|Âmbito|
|
||||
|---|---|---|
|
||||
|`cash.view`|Financeiro preparação13/revisão14; Contabilidade preparação15/revisão16; consulta17|Consulta e rastreabilidade|
|
||||
|`cash.prepare`|Financeiro preparação13|Abertura, classificação, despesa e contagem propostas|
|
||||
|`cash.review`|Financeiro revisão14|Revisão distinta das propostas|
|
||||
|`cash.close`|Financeiro revisão14|Fecho após contagem preparada por outra pessoa e conferências válidas|
|
||||
|
||||
[Matriz exacta](integration/sgf-cash-access-proposal.json). Não são novos utilizadores/perfis, funções nativas, roles PostgreSQL ou direitos reais/PUBLIC. Não se alteram os direitos de administração ou emissão fiscal. As consultas documentais/financeiras já aprovadas são reutilizadas; não há nova concessão implícita de escrita noutro módulo.
|
||||
|
||||
## Provas e limites da eventual autorização
|
||||
|
||||
Após aprovação: implementar o bloco inteiro, provar primeiro na regressão existente e disponibilizar limitadamente na8085 depois dos testes afectados, sem pedir autorização por campo/teste do mesmo recorte. Ensaiar acesso indevido, isolamento por empresa/unidade/módulo, revisão própria, versão antiga, limites de saldo, fonte já classificada/revertida, duas confirmações concorrentes, repetição sem duplicação e falha/recuperação. Confirmar fecho recusado com divergências/origens pendentes e preservação dos25 lançamentos anteriores. Não repetir suites alheias válidas.
|
||||
|
||||
Sem dinheiro, operações, contas ou acessos reais; sem banco, POS, AT, emissão fiscal, salários, reabertura ou ajuste automático. Sem novas bases/portas/demonstrações, SGC, publicação, candidata de Compras, checkpoint ou aceitação presumidos. Os seis registos e a cache bloqueada continuam fora dos alvos. Visual, carga sustentada, conformidade real e implantação permanecem separados.
|
||||
|
||||
Provas privadas do diagnóstico: regressão `single-integration/20261110-174122-692e202d/cash-rights-readonly.json`;8085 `single-integration/20261110-174122-55d06675/cash-rights-readonly.json`. Ambos SELECT-only, zero concessões/operações.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Entrega dos módulos JavaScript na8085
|
||||
|
||||
10/11/2026. Durante o cadastro de artigos, o checksum HTTP detectou que o router local devolvia o HTML da aplicação, não o módulo pedido, para vários endereços novos `.mjs`. Os scripts existiam em disco e as APIs respondiam; faltava a inclusão no encaminhamento de ficheiros públicos. Ecrãs podiam ficar sem carregar dados ou sem executar acções do cliente. Provas de API/DOM anteriores não demonstravam essa entrega.
|
||||
|
||||
Correcção em `scripts/receipt-composition-http.php` e `scripts/sgf-selected-assets.php`: somente a composição `cc50a276c10c`, modo de instalação única, pode servir dez nomes públicos exactos adicionais. Exige ficheiro real dentro do directório público, sem symlink. As regras originais de assets e o corpo do router foram preservados. Fora da composição seleccionada, a nova função não muda a decisão de encaminhamento. `.mjs` desconhecido na8085 devolve404, sem HTML da aplicação nem leitura de ficheiro privado.
|
||||
|
||||
Conferidos com MIME JavaScript e SHA dos bytes instalados: entrada, Stock final/conclusão/catálogo, documentos, Caixa, IVA, regras, extractos e indicadores. Inclui `sgf-stock-final.mjs`, dependência dos controlos de confirmação. Treze verificações HTTP e17 de limites/comparação do router, sem operação de negócio. Provas privadas: `assets-http-20261110.json` e `asset-routing-boundaries-20261110.json`, indexadas em [cadastro de artigos](proofs/sgf-stock-catalogue-20261110.json).
|
||||
|
||||
Não foi usado o navegador bloqueado, reiniciado o serviço, criada demonstração ou limpa cache. O router activo lê o código actualizado por pedido. Não se afirma que estes checks substituem a conferência visual, testam todos os handlers no navegador, validam carga ou conferem capacidade de implantação. Os percursos e efeitos financeiros anteriormente comprovados não foram repetidos. O arranque e empacotamento para outro servidor continuam a exigir evidência própria.
|
||||
@@ -0,0 +1,86 @@
|
||||
# SGF — estado consolidado da instalação8085
|
||||
|
||||
Estado actual: [matriz v25](integration/sgf-solution-contract.json), [última entrega de RH autónomo](SGF_HUMAN_RESOURCES_DELIVERY.md) e [conferência estrutural sem escrita](proofs/sgf-solution-structure-v25-final-20261111.json). As secções seguintes conservam a evolução histórica; propostas marcadas por autorizar são substituídas pelas respectivas entregas posteriores.
|
||||
|
||||
Actualização11/11/2026. Código funcional, interfaces e ligações na instalação existente, sem dependência do SGC, novas demonstrações, publicação ou checkpoint. Esta actualização não constitui aceitação do utilizador nem validação de implantação.
|
||||
|
||||
RH autónomo: [entregue com perfis próprios e percurso interno QA](SGF_HUMAN_RESOURCES_DELIVERY.md). São agora sete módulos na8085. Não integra o menu Financeiro nem conclui todas as funções laborais.
|
||||
|
||||
## Incrementos concluídos nesta continuação
|
||||
|
||||
|Incremento|Resultado|Provas dirigidas|
|
||||
|---|---|---|
|
||||
|Registo Comercial|Seis famílias autorizadas, filtros e SQL25/100; factura-recibo sem duplicar factura técnica; valores canónicos e saldos da página|33 regressão/16 HTTP; [relatório](SGF_BILLING_REGISTER_DELIVERY.md)|
|
||||
|Caixa autorizado|Abertura0, custódia explícita do recebimento existente1000, despesa50, contagem/fecho950; preparação/revisão distintas; histórico/recuperação|23 regressão, concorrência503→409 sem duplicação, sete fronteiras,21 HTTP,14 DOM→HTTP de consulta, oito período; [relatório](SGF_CASH_DELIVERY.md)|
|
||||
|Stock sem movimento|Corte UTC/dias, pares com história conhecida, pesquisa literal/armazém e páginas25/100; Existências abre a consulta já ligada|23 regressão,15 HTTP, sete cliente e comparação física; [relatório](SGF_STOCK_INACTIVITY_DELIVERY.md)|
|
||||
|
||||
O diário tem27 lançamentos equilibrados: os25 anteriores a Caixa permanecem idênticos; as duas origens novas são1000 de reclassificação da custódia e50 de despesa sintética, sem criar outro recebimento/recebível. Caixa QA fechada950. Conferência contabilística38 factos/zero pendentes; fecho testado em rollback, período da instalação conservado aberto.
|
||||
|
||||
As provas válidas dos percursos Compras, Comercial, Stock, Oficina, Financeiro e Contabilidade foram reutilizadas. As provas financeiras antigas mantêm os seus números históricos, não são reescritas ou contadas outra vez. Nenhuma emissão/recepção/pagamento/associação antiga foi repetida para esta consolidação.
|
||||
|
||||
## Matriz e limites da conclusão
|
||||
|
||||
[Matriz v6](integration/sgf-solution-contract.json): seis módulos, todas as estruturas host/nativas mínimas discriminadas presentes e fontes/provas localizadas. [Conferência estrutural SELECT-only](proofs/sgf-solution-structure-v6-20261110.json) não executa workflows nem substitui as provas funcionais citadas. A ferramenta passou a considerar a declaração real de `sd_cancellations` no seu script QA existente; não criou tabela nem relaxou um requisito.
|
||||
|
||||
Este recorte funcional QA não é a operação geral real de uma empresa. A falta de aceitação visual ou de prova operacional não deve ser disfarçada com outro módulo, demonstração ou repetição dos mesmos percursos. A matriz mantém `client_presentable=false` enquanto os critérios de apresentação/aceitação não estiverem comprovados.
|
||||
|
||||
Pendências concretas:
|
||||
|
||||
- Conferência visual dos restantes ecrãs e das adições recentes, sem repetir a via de navegador bloqueada. A confirmação anterior do utilizador refere-se à abertura/legibilidade do Stock então apresentado.
|
||||
- Carga sustentada, consumo/quotas/retenção de anexos, reconciliação geral de órfãos e capacidade de implantação; paginação/concorrência QA não bastam.
|
||||
- Arranque completo do computador/cluster partilhado ainda sem prova própria. Arranque/reinício8085 já ensaiados não foram repetidos desnecessariamente.
|
||||
- Conformidade fiscal/contabilística real, bancos/dinheiro real e concessões reais estão fora destas autorizações sintéticas. Não são declarados implementados ou autorizados por esta entrega.
|
||||
|
||||
[Guião actualizado](SGF_GUIAO_APRESENTACAO.md), entrada `http://127.0.0.1:8085/sgf`. Preservados os seis registos, cache bloqueada, exemplos anteriores e alterações alheias. Backups, dados e credenciais privados fora do repositório; sem publicação, candidata de Compras ou aceitação/checkpoint presumidos.
|
||||
|
||||
## Conferência posterior do requisito fiscal/financeiro amplo
|
||||
|
||||
A matriz QA anterior não representa todo o produto: continuam por implementar livros/apuramentos fiscais gerais, IRPS/INSS, IRPC, ISPC/ICE, modelos oficiais, calendário legal, reconciliação bancária e rácios/tendências conciliados. [Conferência e código de cobertura entregues](SGF_FISCAL_COVERAGE_DELIVERY.md); matriz v7 mantém estas lacunas separadas dos seis percursos QA e não declara produto completo. Livro/mapa interno IVA QA está concretamente proposto, com seis direitos/14 concessões por base QA, ainda por autorizar; não foi aplicado.
|
||||
|
||||
## Livro e mapa interno IVA QA autorizado e entregue
|
||||
|
||||
[Entrega funcional](SGF_IVA_ASSESSMENT_DELIVERY.md): mesma8085 `/fiscal/iva`, FR1000/base862,07/IVA137,93 já existente → livro preparado/revisto → mapa interno preparado/revisto e CSV congelado. Quatro versões fiscais novas,27 lançamentos e dados anteriores intactos. Seis direitos/14 concessões por base QA expressamente aprovados/aplicados. Dedução/imposto a pagar indeterminados; não é apuramento integral ou modelo oficial. Esta actualização substitui apenas a pendência anterior deste bloco; os restantes motores fiscais/modelos/reconciliação/rácios continuam pendentes na matriz v8.
|
||||
|
||||
Próximo bloco agrupado preparado: `SGF_FISCAL_RULES_COMMON_SCOPE.md`, três direitos próprios/sete concessões por base QA existente (fiscal_rules.view/prepare/review), ainda por autorizar e sem aplicação. Separa manutenção transversal de regras dos direitos já concedidos para serviço/livro/mapa. Não pressupõe novos motores fiscais completos nem altera documentos existentes.
|
||||
|
||||
## Núcleo comum de regras QA entregue
|
||||
|
||||
[Entrega funcional](SGF_FISCAL_RULES_COMMON_DELIVERY.md), `/fiscal/rules`: catálogo pesquisável/paginado, fontes/SHA, revisão distinta, versões/vigência/conflitos/retirada, cálculos160/1160 e170/1170 guardados.102 verificações dirigidas mais concorrência; apenas sete concessões aprovadas por QA.17 conjuntos originais e binding intactos; diário27/Caixa950/quatro versões IVA conservados. Esta actualização substitui a pendência anterior desse núcleo. São casos artificiais, não legislação ou motores legais completos; restante backlog mantém-se na matriz v9.
|
||||
|
||||
Proposta seguinte, ainda por autorizar: `SGF_BANK_RECONCILIATION_SCOPE.md`, importação/revisão/conferência manual de extracto artificial0−20+20=0 contra duas linhas contabilísticas já existentes, sem novos efeitos financeiros. Quatro direitos/oito concessões por base QA apresentados e não aplicados. Não se confunde com reconciliação de recebimento já entregue nem atribui natureza bancária real à conta de liquidação.
|
||||
|
||||
## Conferência de extracto QA entregue
|
||||
|
||||
[Entrega funcional](SGF_BANK_RECONCILIATION_DELIVERY.md), `/finance/bank`: CSV artificial0−20+20=0, revisão distinta, duas correspondências individuais com linhas contabilísticas existentes4/5, sete eventos e relatório interno.94 verificações mais concorrência; HTTP8085 prova fonte nativa, origem artificial apenas no harness da regressão.20 conjuntos originais intactos, sem novos lançamentos/pagamentos; diário27/Caixa950/IVA4/regras4+cálculos2 conservados. Oito concessões por base QA aprovadas/aplicadas. Substitui a pendência anterior deste bloco; reconciliação bancária geral/real continua separada na matriz v10.
|
||||
|
||||
Próximo bloco agrupado preparado: `SGF_FINANCIAL_INDICATORS_SCOPE.md`, critérios/indicadores QA950/100=9,5 vezes e50/1000=5%, revisão distinta e retrato conciliado. Três direitos/sete concessões por QA apresentados, ainda não aplicados. Não é rácio geral de liquidez/margem, critério legal ou recomendação de pagamento.
|
||||
|
||||
## Critérios e indicadores QA entregues
|
||||
|
||||
[Entrega funcional](SGF_FINANCIAL_INDICATORS_DELIVERY.md), `/finance/indicators`: critérios13/revisão14, quatro eventos e dois resultados com fontes efectivas950/100=9,50vezes e50/1000=5,00%. Exactos19/2 e1/20, histórico/retratos/relatório, sem tendência zero inventada ou critério real.98 verificações mais concorrência;23 conjuntos anteriores intactos e sete concessões aprovadas por QA. Diário27/Caixa950/IVA4/regras4+cálculos2/bancos7 conservados. Substitui a pendência anterior deste bloco; rácios gerais/critérios reais/séries continuam na matriz v11.
|
||||
|
||||
Decisão seguinte preparada, sem concessões novas: `SGF_MULTI_LINE_INCLUDED_SCOPE.md`, modalidade QA1–25linhas/preço incluído, com política explícita da base/imposto documentais e diferenças preservadas. Ainda não implementada no endpoint nem aplicada a documentos; não inferir a política do caso de base simples.
|
||||
|
||||
## Cálculo QA por linhas e preço incluído entregue
|
||||
|
||||
[Entrega funcional](SGF_MULTI_LINE_INCLUDED_DELIVERY.md), `/fiscal/rules`: modalidade/regra explícitas,1–25linhas, exactos e ambas as diferenças preservados, mapa interno/checksum/recuperação. Três cálculos conservados:400+600 sem imposto e464+696 incluídos produzem1000+160=1160;100 incluído produz86,21+13,79, diferenças9/2900.80 verificações mais concorrência mesma chave503→200 replay sem duplicação.26 conjuntos originais/binding intactos, zero concessões novas, dois cálculos anteriores conservados (agora cinco). Diário27/Caixa950/IVA4/regras4/bancos7/indicadores4+2 intactos. Substitui a pendência anterior desta política/modalidade; não emite documentos nem conclui fiscalidade real, revisão visual, carga ou implantação. [Matriz actual v12](integration/sgf-solution-contract.json) mantém produto amplo incompleto.
|
||||
|
||||
## Início operacional e ordens paginadas entregues
|
||||
|
||||
[Entrega funcional](SGF_OPERATIONAL_INFORMATION_DELIVERY.md): entrada8085 informa o âmbito dos seis módulos; Início mostra percurso, evidências, funções autorizadas e consulta das fontes existentes. Oficinas tem lista SQL25/100 por cliente/equipamento/responsável/estado e minutos apontados/verificados, sem adquirir o mutex da empresa. Regressão manteve o bloqueio de escrita e a leitura terminou0,093s antes da libertação.32 conjuntos originais intactos e zero novas operações financeiras, concessões ou ordens na8085. Detalhe antigo da ordem, fiscalidade geral, visual/carga e capacidade de implantação mantêm limites expressos; matriz v13 não declara produto completo ou aceitação.
|
||||
|
||||
## Contabilidade: utilização dos relatórios por período
|
||||
|
||||
[Entrega funcional](SGF_ACCOUNTING_REPORTS_DELIVERY.md): submenus distintos, Análise com datas explícitas/balancete/razão por conta/SQL25/100, CSV da página e mudança de marcador conferida. Corrigido500 de conta indisponível para403 e argumentos inválidos para422. Cinco regressão/19 HTTP/14 UI;32 conjuntos originais intactos. A8085 recebeu o bloco após código e provas, sem alterar exemplos financeiros; não condiciona cada passo de desenvolvimento. Engine e mutex existentes preservados; visual/carga/fiscalidade ampla continuam pendentes na matriz v14.
|
||||
|
||||
## Posições de clientes e vencimentos
|
||||
|
||||
[Entrega](SGF_RECEIVABLE_POSITIONS_DELIVERY.md): SQL25/100, pesquisa/estados/vencimentos, saldo actual confirmado, totais sem propostas e referência apenas para vencimento; CSV da página, selecção explícita no detalhe.30 regressão/16 UI/15 HTTP. Zero operações financeiras novas na8085; dados e binding preservados. Próxima lacuna discriminada: [cadastro/revisão de artigos](SGF_STOCK_CATALOGUE_SCOPE.md), dois direitos ausentes/duas concessões por QA existente, ainda não autorizados/aplicados. Sem inferir esse poder de stock.view ou confirmação de movimentos/lotes.
|
||||
|
||||
## Cadastro de artigos e entrega correcta dos scripts
|
||||
|
||||
[Cadastro entregue](SGF_STOCK_CATALOGUE_DELIVERY.md) após aprovação: preparação2/revisão12, um artigo sem saldo inicial na8085, código/unidade imutáveis, histórico/recibos e correcção de designação só dos novos.85 verificações, mais concorrência e dois checksums;38 conjuntos/três bindings intactos, quatro concessões exactas nas duas QA. Substitui a pendência anterior de direitos/cadastro deste recorte.
|
||||
|
||||
A conferência detectou scripts `.mjs` a receber HTML200. [Correcção transversal](SGF_CLIENT_ASSET_DELIVERY.md), apenas8085: dez módulos exactos e dependência comum servidos como JavaScript, MIME/SHA conferidos; desconhecido404.17 fronteiras e13 HTTP. Preserva corpo original do router/outras composições, sem reinício ou cache. As provas antigas de API/DOM não demonstravam essa entrega e não são apresentadas como validação visual. Restantes lacunas/visual/carga/implantação permanecem na matriz v22.
|
||||
|
||||
Continuação11/11: [contratos, assiduidade e férias — âmbito integrado preparado](SGF_HUMAN_RESOURCES_PERSONNEL_SCOPE.md). Nove direitos novos,15 concessões por livro existente aos mesmos perfis RH; por autorizar/não aplicados. Apenas cálculo puro de tempos/saldo preparado e22 verificações; funções novas ainda não entregues na8085.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Consulta necessária para terminar a factura-recibo QA
|
||||
|
||||
10/11/2026. **Decisão recebida e aplicada: «Autorizar as10 concessões de consulta QA». Bloqueio ultrapassado; estado final em SGF_SERVICE_DOCUMENTS_DELIVERY.md. O diagnóstico seguinte é histórico.** A autorização do bloco anterior permitiu15 novos direitos, as funções nativas discriminadas e `service_invoices.issue` para o revisor Financeiro. Foi aplicada exactamente essa lista nas duas bases QA existentes. Não incluía as consultas documentais exigidas pelo motor original; os acessos actuais recusam a captura da origem com403.
|
||||
|
||||
A verificação SELECT-only na8085 encontrou **10 concessões em falta, seis nomes já existentes**, nos perfis Financeiro preparação13 e revisão14. A [matriz exacta](integration/sgf-document-read-access-proposal.json) apresenta destinatários e âmbito. Consulta de emitente, cliente e enquadramento fiscal na empresa QA2; preparação documental na unidade QA2 para ambos. Consulta de rascunhos de serviço/facturação na mesma unidade apenas para revisão14. Não se concedem edição de perfis fiscais, cálculo, aprovação fiscal, alteração de séries ou acessos reais.
|
||||
|
||||
A implementação candidata preserva as guardas de consulta e emissão existentes. Não usa identidade de outro utilizador nem transforma `service_documents.view` em direito fiscal. A finalização preparada consome a intenção financeira anterior, conserva o seu autor como declarante e o executor real nos efeitos; esta parte **ainda não foi validada**, fica desligada e não foi copiada para8085. Aprovar os acessos permitirá concluir os testes desse ramo antes de o disponibilizar.
|
||||
|
||||
## Trabalho concreto já realizado
|
||||
|
||||
- Duas origens novas preparadas exclusivamente na regressão existente: base862,07 + imposto documental de teste137,93 =1000. Séries QA novas, aprovação distinta, zero facturas emitidas pela preparação e zero alterações de direitos. As origens anteriores estão preservadas.
|
||||
- Motor candidato versionado/auditado de Recibo, Nota de crédito e factura-recibo; PDF guardado com SHA, confirmação individual, versão/contexto/origem e idempotência. Configuração desligada por omissão. Ainda sem ecrã/instalação documental na8085.
|
||||
- 16 verificações em rollback passaram para o recorte já executável: Recibo vinculado à afectação efectiva400, revisão distinta, uma saída/PDF por chave, integridade do PDF, crédito100 pelo writer original deixando saldo500 sobre a nova factura1000, recusa403 da factura-recibo sem os direitos, ausência de efeitos parciais e preservação integral das facturas/direitos anteriores. Prova privada `receipt-composition-b4093c6f6707/single-integration/20261110-163526-13905e7f/service-documents-result.json`.
|
||||
- O teste positivo da factura-recibo, concorrência documental, reversões técnicas, ligação do crédito ao diário, UI e HTTP dos documentos **não estão concluídos**. A recusa correcta não é prova positiva. Não se declara o bloco ou a aplicação terminados.
|
||||
|
||||
Stock/políticas/devolução ao fornecedor e orçamentos Comercial/Oficina estão implementados na8085. O diário actual tem20 lançamentos equilibrados; os18 anteriores foram comparados e estão intactos. Mantêm-se os seis registos protegidos, a cache, revisão visual, carga sustentada e capacidade de implantação como âmbitos separados. Sem SGC, novas demonstrações, publicação ou activação de candidata de Compras.
|
||||
@@ -0,0 +1,51 @@
|
||||
# Critérios e indicadores financeiros QA — entrega na8085
|
||||
|
||||
10/11/2026, `SGF-FINANCIAL-INDICATORS-QA-v1`, conforme [âmbito autorizado](SGF_FINANCIAL_INDICATORS_SCOPE.md). Mesma8085, entrada **Financeiro → Critérios e indicadores QA → Abrir critérios, indicadores e histórico**, ou `/finance/indicators` com função autorizada. Sem SGC, nova demonstração ou efeito financeiro.
|
||||
|
||||
## Percurso conservado e resultados
|
||||
|
||||
Financeiro13 preparou cada um dos dois critérios, com fontes/direcção/âmbito/evidência explícitos. Financeiro14 reviu a versão exacta. Preparador13 escolheu cada critério revisto e confirmou o cálculo para o retrato10/11/2026. **Quatro eventos de critério e dois resultados** conservados, com fotografias/fontes/histórico e relatório interno CSV verificável.
|
||||
|
||||
|Indicador limitado do exercício|Fontes efectivas|Resultado|
|
||||
|---|---|---|
|
||||
|Cobertura QA de uma obrigação por Caixa|Caixa fechada/revista950 MZN, conciliada com saldo devedor QA-CAIXA; saldo **credor** QA-FORNECEDOR100 MZN no mesmo diário|19/2 =9,50 vezes|
|
||||
|Despesa/entradas da Caixa QA|Despesa revista50 MZN e custódia/entradas1000 MZN do mesmo livro fechado|1/20 =5,00%|
|
||||
|
||||
Não são rácio geral de liquidez corrente, margem de resultados, solvabilidade, critério legal da empresa ou recomendação de pagamento. Direcção credora do denominador explícita, sem valor absoluto ou classificação pelo nome. Não se aplica a outras contas/empresas. Série anterior e tendência não disponíveis ficam indeterminadas; não se apresentam como variação zero.
|
||||
|
||||
## Fontes, precisão e manutenção
|
||||
|
||||
O leitor real reutiliza a consulta/autoridade de Caixa, o vínculo físico e as leituras nativas do diário. Confere Caixa fechada e respectivas origens, período QA aberto e igualdade do saldo de Caixa com a conta QA-CAIXA. Lê apenas as duas contas/saldos seleccionados, com âmbito empresa/unidade e corte10/11; não concede consulta global nova à contabilidade. Sem novo PGrole ou comando nativo de escrita.
|
||||
|
||||
Valores são strings de unidades menores, com aritmética racional exacta e representação explícita de duas casas (vezes ou percentagem), preservando diferença racional. Moeda/dimensão/data compatíveis. Fonte ausente/não conciliada, critério não revisto/versão antiga, fonte alterada, numerador/denominador desconhecidos, denominador zero/não credor ou sinal incompatível produzem pendência; montante desconhecido não vira0/1 ou infinito.
|
||||
|
||||
Nova versão ou mudança de fonte exige nova conferência para cálculo actual. A fotografia antiga não é reescrita; consulta mostra resultado histórico e avaliação actual separados. Relatório deriva do resultado/fonte preservados e identifica o estado actual, sem substituir o passado. CSV com valores em MZN, fracção exacta, representação, versão e limites; checksum no download. Não se declarou arquivo binário/renderer para retenção legal.
|
||||
|
||||
## Autoridade e recuperação
|
||||
|
||||
`financial_analysis.view/prepare/review`: **sete concessões por cada base QA existente**,14 no conjunto, [exactamente como aprovado](integration/sgf-financial-indicators-access-proposal.json). Preparação de critério/cálculo13, revisão14, consultas13–17. Reutiliza direitos de Caixa já existentes; não atribui poderes por herança. Sem novo utilizador/PGrole/direito PUBLIC/acesso real. Rootflag desligada; somente8085 seleccionada disponibilizada.
|
||||
|
||||
`an_criteria` conserva versão, predecessor, definição, fonte/SHA, preparador/revisor/data/fundamento/estado. `an_results` conserva entrada, fonte completa delimitada, critério, exacto/representação/diferença/resultado. `an_commands` conserva chave própria/hash/resultado/impacto anterior e posterior. Triggers exigem direitos, pertença, revisão distinta, versão actual e história append-only, com guarda física QA e PUBLIC revogado.
|
||||
|
||||
Prévia cifrada600s em savepoint revertido; confirmação revalida contexto/autor/direitos do executor e preparador, versões, fontes e impacto sob o bloqueio de empresa comum. Repetição recupera resultado histórico, sem executar; mesma chave com outra entrada recusada. Recibo próprio recuperável noutra sessão por GET. Não se escolhe o primeiro critério ou um substituto para contornar falta de fonte. Interface protege campos/consulta durante operação e conserva formulário não submetido ao paginar.
|
||||
|
||||
## Provas e preservação
|
||||
|
||||
|Conjunto|Resultado|
|
||||
|---|---|
|
||||
|41 regressão, rollback integral|Critérios/fontes/direcção, valores injectados, revisão distinta, critérios não revistos/antigos, exacto19/2 e1/20, relatório/checksum, zero/ausência/sinal/moeda/dimensão/data, nova fonte sem alterar passado, autor revogado, falha/reversão atómica/recuperação, acessos e dados antigos intactos.|
|
||||
|Concorrência na regressão|Segunda revisão503/Retry-After5 durante lock da empresa; libertação→409 por versão antiga. Uma revisão e primeira chave recuperada sem duplicação. Dois eventos conservados só na regressão.|
|
||||
|12 SQL/fronteiras, rollback|127 versões de metadados em25 e100/27, pesquisa literal, histórico por indicador, contexto/expiração/módulo/unidade, histórico imutável e writer indevido. Não são127 critérios operacionais aprovados ou novos saldos.|
|
||||
|29 HTTP na8085|Fonte composta efectiva950/100/50/1000, seis confirmações/repetições, revisão distinta, resultados exactos/retratos, relatório/checksum, período anterior ausente, critérios/filtros/histórico, actor/módulo/tenant/IDs/recibo noutra sessão e ecrã. Progresso guardado.|
|
||||
|16 DOM→HTTP|Escolha explícita, fontes visíveis, prévia real revertida,5%/1/20, tendência indeterminada, bloqueio/cancelamento, formulário preservado ao paginar, histórico/relatório/recibo e integração com conferência bancária ainda finalizada. **Zero confirmações de negócio**, resultados mantidos em dois. Não é navegador.|
|
||||
|Preservação SELECT-only|23 conjuntos originais completos e binding idênticos, incluindo diário27, Caixa950, IVA4, regras4/cálculos2, bancos7, documentos, recebíveis, fiscalidade, clientes, Stock e períodos. Apenas sete concessões aprovadas adicionadas.|
|
||||
|
||||
Total98 verificações dirigidas, concorrência discriminada à parte. [Índice verificável](proofs/sgf-financial-indicators-20261110.json). Provas dos restantes módulos reutilizadas, sem repetir movimentos/emissões/pagamentos/lançamentos que originaram os valores.
|
||||
|
||||
**Origem das provas:** na regressão, fornecedor artificial injectado só no harness CLI, identificado como `analysis_harness_fixture`, sem criar Caixa ou lançamentos. Não existe fallback no leitor instalado. O percurso HTTP8085 comprovou `composed_qa_sources`, Caixa e diário efectivos e retratos coincidentes. Não apresentar a simulação como prova de integração nativa integral da regressão.
|
||||
|
||||
## Limitações
|
||||
|
||||
Dois critérios de apresentação QA, duas projecções e uma data, com duas representações. Não conclui rácios gerais de liquidez/rentabilidade/endividamento, séries/tendências, demonstrações legais, critérios reais, previsões ou aconselhamento financeiro. Não importa valores de conversas nem atribui critérios automaticamente.
|
||||
|
||||
Sem novos pagamentos, movimentos, impostos, documentos, lançamentos, direitos/operações reais, reabertura, publicação/candidata/checkpoint/aceitação ou capacidade de implantação. Seis registos/cache/trabalho alheio intactos; backups/credenciais/dados privados fora do repositório. Visual bloqueada não foi repetida; carga sustentada, retenção/órfãos, arranque completo, conformidade e implantação mantêm evidências próprias pendentes.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Proposta agrupada — critérios e indicadores financeiros QA
|
||||
|
||||
`SGF-FINANCIAL-INDICATORS-QA-v1`,10/11/2026. **Autorizado expressamente e entregue**; ver `SGF_FINANCIAL_INDICATORS_DELIVERY.md`. O texto abaixo conserva o âmbito aprovado. É uma funcionalidade de Financeiro na mesma8085, não um sétimo módulo ou uma nova demonstração. Fecha o primeiro percurso de critérios revistos → fontes conciliadas → indicador explicável → histórico/relatório interno.
|
||||
|
||||
## Dois indicadores com dados já existentes
|
||||
|
||||
1. **Cobertura QA de uma obrigação por Caixa**: numerador950 MZN da Caixa QA fechada/revista; denominador100 MZN do saldo **credor** da conta artificial `QA-FORNECEDOR` (ID2 na8085), lido no mesmo diário. Resultado exacto19/2 =9,5 vezes. A direcção credora é parte explícita do critério; não se aplica valor absoluto ou se classifica automaticamente a conta. Não é rácio geral de liquidez corrente, solvabilidade ou recomendação de pagamento.
|
||||
2. **Despesa/entradas da Caixa QA**:50/1000 =1/20, ou5%. Usa exclusivamente os dois movimentos de custódia/despesa já preparados/revistos e o livro fechado, não a totalidade de proveitos/despesas da empresa ou uma margem contabilística. Não cria movimentos, facturas ou efeitos fiscais.
|
||||
|
||||
Fontes observadas em10/11/2026: saldo devedor QA-CAIXA950, saldo credor QA-FORNECEDOR100; Caixa950/entradas1000/despesa50 já comprovadas. A classificação e a fórmula são hipóteses expressas de apresentação QA, não critérios contabilísticos/financeiros legais aprovados para a empresa real.
|
||||
|
||||
## Percurso completo proposto
|
||||
|
||||
Financeiro13 escolhe explicitamente o indicador/fontes/direcção/âmbito do critério e prepara uma versão com fundamento. Financeiro14 confere a mesma versão; aprovação não atribui critérios a outras contas ou empresas. Preparador13 escolhe a versão revista e solicita cálculo pelo retrato actual das fontes fixadas. Prévia mostra numerador/denominador/unidades, fórmula, exacto/representação/diferença, limites e impacto; confirmação grava fotografia/histórico/recibo recuperável. Consultas e relatório interno apenas dos dois indicadores, sem concluir demonstrações financeiras gerais.
|
||||
|
||||
Valores em strings decimais/racionais; moeda e dimensões compatíveis. Fonte ausente/não conciliada, revisão antiga, data/âmbito incompatíveis ou denominador zero ficam pendentes, sem substituir por0/1 ou mostrar infinito. Comparativo anterior/tendência não demonstrado permanece indisponível, não variação zero. Sem cruzar moedas ou assumir valorização geral/adequação de conta pela sua designação.
|
||||
|
||||
Nova versão/critério/fonte não reescreve cálculo anterior: mostra retrato e actualidade separados. Direitos/contexto/versão/dependências revalidados na confirmação; preparação/revisão distintas, histórico append-only, repetição sem duplicação e recuperação após falha. Não se escolhe automaticamente o primeiro critério ou outro indicador para contornar falta de fonte.
|
||||
|
||||
## Direitos novos a decidir
|
||||
|
||||
Três nomes e **sete concessões por cada base QA existente**,14 no conjunto. Tenant1/empresa2/unidade2; somente perfis existentes:
|
||||
|
||||
|Direito|Destinatários|
|
||||
|---|---|
|
||||
|`financial_analysis.view`|Financeiro13/14, Contabilidade15/16 e consulta17|
|
||||
|`financial_analysis.prepare`|Financeiro preparação13 — critério/cálculo QA|
|
||||
|`financial_analysis.review`|Financeiro revisão14 — revisão exacta de critério|
|
||||
|
||||
[Matriz integral](integration/sgf-financial-indicators-access-proposal.json). Consulta inclui as projecções limitadas da Caixa e do saldo credor QA seleccionados, não toda a contabilidade ou dados de outra empresa. Reutiliza os controlos/leitores originais e direitos de Caixa já existentes. Os acessos actuais de consulta não autorizam configurar/publicar critérios de análise; não se herdam estes poderes de regras fiscais, bancos ou contabilidade geral. Sem novo utilizador, PGrole, direito PUBLIC ou acesso real.
|
||||
|
||||
## Provas, instalação e exclusões
|
||||
|
||||
Primeiro regressão existente: source provider artificial injectado apenas no harness quando faltam fontes completas (sem criar caixa/pagamentos/lançamentos para preparar testes). Distinguir essa simulação da execução HTTP8085 que comprovará fontes efectivas. Ensaiar moeda/dimensão, sinal explícito, zero/ausência, critérios não revistos, isolamento/actor/módulo/versões, concorrência, repetição, mudança de fonte e falha/recuperação; pesquisa/filtros/páginas25/100 de critérios/histórico. Depois completar o percurso na mesma8085. Não repetir os workflows válidos que originaram os valores.
|
||||
|
||||
A autorização abrange o bloco inteiro, sem aprovação por campo/fórmula/teste deste contrato. Preservar27 lançamentos, Caixa950, IVA4, regras4+cálculos2, extracto/correspondências bancárias sete eventos, seis registos/cache/trabalho alheio. Sem novas bases/portas/demos, SGC/portal, novas transacções/efeitos financeiros, pagamento recomendado ou execução bancária, critérios reais/legais, dados/acessos reais, aplicação retroactiva, reabertura, publicação/candidata, checkpoint/aceitação ou capacidade de implantação.
|
||||
|
||||
Rácios gerais de liquidez/rentabilidade/endividamento, demonstrações legais, séries históricas e critérios reais continuam requisitos próprios, não são declarados completos por estes dois indicadores QA. Visual/carga permanecem separados.
|
||||
@@ -0,0 +1,58 @@
|
||||
# Demonstrações internas parciais — entrega8085
|
||||
|
||||
11/11/2026 · `SGF-INTERNAL-STATEMENTS-QA-v1`. Bloco autorizado concluído na mesma8085, **Contabilidade → Demonstrações internas parciais QA**. Código funcional, interface, correspondências revistas, resultado conservado, histórico, recibos e exportação. Sem SGC, outra demonstração, contas ou lançamentos novos.
|
||||
|
||||
## O que está disponível
|
||||
|
||||
Preparação15/revisão16 de correspondências explícitas entre contas e rubricas internas: activo, passivo, rendimento, gasto ou por classificar. Primeira preparação sem conta/rubrica escolhidas automaticamente; correcção parte da versão revista, com escolhas visíveis, fundamento e nova revisão. O servidor conserva conta/código/designação/moeda e a impressão da identidade observada. Não interpreta prefixos, designações ou sinais como rubrica. Contas sem correspondência ficam pendentes, não desaparecem nem recebem classificação por arrasto.
|
||||
|
||||
Preparação/revisão distintas do resultado interno, com datas e versão de correspondências escolhidas explicitamente. O leitor original `trialBalance` fornece abertura, débitos/créditos do período e fecho; `accountLedger` continua a ser o destino para conferir cada conta/datas. Motor, writer, fórmulas, contas, linhas e períodos originais não foram alterados. O balanço parcial usa fechos; os resultados parciais usam movimento do período. Valores invertidos conservam sinais e aviso, sem valor absoluto para forçar natureza.
|
||||
|
||||
O resultado conserva as linhas, grupos, pressupostos, versão das correspondências, marcador do diário, fonte e SHA. A captura processa páginas25/100 e acumula apenas grupos; não materializa o universo de contas no PHP. As linhas são escritas por página na mesma transacção nativa. O CSV é construído por lotes100 num fluxo com limite de memória1MiB e eventual armazenamento temporário do PHP, encerrado no fim; não usa nem limpa a cache bloqueada. O navegador materializa o ficheiro pedido para a descarga — não se declara capacidade para exportações de volume arbitrário.
|
||||
|
||||
Histórico e resultado paginados25/100. Totais do resultado abrangem todas as páginas conservadas, com a tabela paginada identificada. A revisão de correspondências posterior ou uma alteração da fonte tornam visível que o resultado anterior é histórico; não o recalculam. A exportação de uma revisão antiga continua idêntica. A ligação ao razão transmite conta e datas exactas; o destino é uma nova leitura original, não um arquivo do razão daquela observação.
|
||||
|
||||
## Exemplo conservado, sem preencher lacunas
|
||||
|
||||
Foram preparadas15 e revistas16 as19 escolhas expressamente aprovadas no âmbito, incluindo nove contas por classificar. Depois foi preparado/revisto um resultado interno sobre10/11/2026 e os27 lançamentos já existentes. Ficaram **quatro versões, quatro recibos, uma conservação de resultado e19 linhas**, sem repetir origens financeiras.
|
||||
|
||||
|Rubrica classificada QA|Valor observado MZN|
|
||||
|---|---:|
|
||||
|Activos conhecidos|2155,00|
|
||||
|Passivo de fornecedor conhecido|100,00|
|
||||
|Rendimentos do período classificados|2586,21|
|
||||
|Gastos do período classificados|2200,00|
|
||||
|Subtotal das rubricas de resultados classificadas|386,21|
|
||||
|
||||
**386,21 não é o resultado da empresa.** Nove contas continuam pendentes; o resultado completo e o capital próprio são indeterminados e a equação patrimonial não é completada artificialmente. Rubrica sem conta observada é distinta de saldo zero observado. Os ecrãs separam balanço parcial, resultados parciais e contas por classificar. Não são demonstrações legais, comparativos anuais ou fluxos de caixa.
|
||||
|
||||
## Autoridade, transacções e descarga
|
||||
|
||||
Exactamente dois direitos aprovados: `general_ledger.statements.prepare` para15 e `general_ledger.statements.review` para16, tenant1/empresa2/unidade2. Duas concessões por livro QA existente, quatro no total. Consulta reutiliza `general_ledger.view`. Sem nova pessoa/perfil, role PostgreSQL, concessão SQL/PUBLIC ou acesso real. Configuração principal desligada por omissão;8085 habilitada no seu estado privado existente.
|
||||
|
||||
Prévia por savepoint revertido; confirmação revalida contexto físico, versão, pessoa nativa, identidade host actual sob bloqueio, direitos, preparador distinto e ainda autorizado, conta/correspondências e fonte. Alteração exige nova conferência. Versão, conservação, linhas, auditoria e recibo são atómicos na transacção nativa. Sequências podem avançar numa prévia revertida. Resultado incerto na interface conserva corpo/chave e impede descarte/troca de contexto; repetição recupera o recibo. Consulta histórica de recibo próprio não executa outra decisão nem presume actualidade financeira.
|
||||
|
||||
Na retoma foi corrigido o botão de descarga: a ligação directa à API não enviava `X-SGF-Context` e recebia409. Agora a leitura autenticada envia a geração actual em cabeçalho, recusa resposta de contexto antigo, tipo de ficheiro inesperado, SHA de revisão diferente ou bytes corrompidos. Só depois cria o ficheiro. O token não entra no URL; não se alterou nem excepcionou `RequireModuleContext`.
|
||||
|
||||
O mesmo problema foi corrigido no atalho do mapa IVA em Obrigações fiscais. Reutiliza o mesmo leitor de descarga verificada, com destino fixo correspondente à origem. Não se recriou o mapa nem se repetiram decisões; a descarga do mapa mantém a auditoria de consulta original. CSV/SHAs conservados não foram modificados para corrigir a interface.
|
||||
|
||||
## Provas e seus limites
|
||||
|
||||
-38 verificações de integração na regressão existente: intenção/revisão distinta, fonte de correspondências, versões antigas, acessos/contexto, resultado vazio sem saldos inventados, CSV/SHA, história, exportação antiga conservada e dados anteriores intactos. O livro de regressão tem19 contas mas **zero lançamentos persistentes**; não se criaram lançamentos para preencher esse ensaio. Paridade de valores não vazios foi comprovada na8085 com o motor real.
|
||||
-17 verificações de fronteiras: sinais invertidos, montantes exactos/moedas separadas, rubrica ausente, fingerprint alterado, identidade/pessoa/direito alterados, falha no recibo e recuperação. A captura25/100 foi exercida com um **double de leitura de128 linhas**, geradas por página, sem contas/lançamentos inseridos. Isso comprova o adaptador de paginação, não SQL, carga ou capacidade de implantação. As provas válidas anteriores do balancete/razão SQL foram reutilizadas.
|
||||
-Quatro verificações de falha parcial: valores de leitura dos19 códigos QA e um double de relatório na regressão, falha forçada na segunda linha, rollback da primeira, recuperação da mesma chave com19 linhas e FKs válidas, rollback integral. Nenhuma conta/lançamento criado; não é um segundo livro financeiro ou execução do writer original.
|
||||
-23 verificações de interface/contrato: escolhas explícitas, campos vazios, duas secções parciais/pendências, nenhuma conta/rubrica automática, protecção do formulário, resposta incerta, recuperação idêntica, razão com conta/datas e botão de descarga que só guarda após SHA. API/DOM simulados; não é revisão visual do navegador. As passagens anteriores18/19 foram substituídas, não somadas.
|
||||
-46 HTTP8085: quatro comandos administrativos efectivos,19 escolhas/nove pendências, resultado versus todas as19 linhas do balancete real,27 lançamentos originais, valores da tabela acima, histórico/recibos, checksum/exportação,25/100 e recusas. Progresso/chaves privados permitem recuperar sem reexecutar os quatro comandos. Esta prova válida anterior à pausa foi reutilizada.
|
||||
-11 de descarga: exportação efectiva com contexto/SHA, guarda409 sem cabeçalho preservada, contexto antigo antes/depois da resposta, HTML, SHA/bytes corrompidos, acesso e identidade inválidos recusados. Cinco de compatibilidade da descarga IVA: origem exacta, SHA/bytes originais, limite sintético, geração exigida e SHA da prova UI histórica aceite preservado. As22 verificações UI de Obrigações fiscais foram reexecutadas pela alteração de hooks/atalho; a evidência anterior é byte a byte igual e não é somada como nova suite.
|
||||
-13 finais de entrada/entrega: autenticação401, CSRF419, consulta sem escrita, navegação por configuração/direito, MIME/SHA dos ficheiros principal, ambos os ecrãs e módulo partilhado de descarga; fontes finais instaladas iguais às conferidas. Sem comandos de negócio.
|
||||
-Concorrência apenas na regressão: a primeira revisão mantém `FOR UPDATE` da empresa; `pg_blocking_pids` identifica o bloqueador, com espera `Lock/transactionid`. Segunda confirmação503 após5,13s; libertada a primeira, a segunda recusa409 e a primeira repete200 com o mesmo recibo. Uma preparação/uma revisão de correspondências conservadas nessa fixture. Não houve nova medição de carga sustentada ou eliminação do mutex existente.
|
||||
|
||||
[Índice das provas e hashes](proofs/sgf-statements-20261111.json). Ensaios anteriores só foram repetidos quando as alterações de identidade/interface/descarga afectaram a fronteira respectiva; não se repetiram suites de Compras, Stock, Caixa, facturação, vencimentos ou apuramentos.
|
||||
|
||||
## Preservação e pendências
|
||||
|
||||
65 verificações de preservação/ACL:49 conjuntos anteriores iguais; nas outras duas tabelas, todas as linhas antigas iguais, apenas duas concessões aprovadas e quatro eventos nativos de auditoria acrescentados. Três bindings intactos,19 contas e27 lançamentos, Caixa950, IVA4, cálculos5, obrigações/condições/recibos, artigos e movimentos conservados. As contas também foram comparadas com a leitura anterior de código/designação/moeda. Uma conservação de resultado,19 linhas e quatro recibos; PUBLIC sem direitos nas novas tabelas/sequências/função.
|
||||
|
||||
Entradas normais de perfis e descargas do mapa original têm a auditoria de consulta própria; não se declara a auditoria global host byte a byte igual. Nenhum comando dirigido aos seis registos ou à cache bloqueada. Backups, dados, CSV, chaves e credenciais permanecem privados, fora do repositório; ficheiros/assets anteriores conservados, sem limpeza de cache ou reinício.
|
||||
|
||||
Sem publicação, candidata de Compras, novas demonstrações/portas/bases, SGC, contas/dinheiro/acessos reais, lançamento, fecho/reabertura, checkpoint ou aceitação presumidos. As correspondências de configuração estão limitadas a100 escolhas por versão; linhas de fonte/captura/exportação usam páginas limitadas. Os leitores compostos conservam guardas e bloqueios anteriores; sem promessa de desempenho global. Revisão visual, carga sustentada e capacidade de implantação continuam pendentes. Classificação legal das contas, capital, demonstrações completas e fiscalidade geral permanecem fora deste bloco; matriz v22 mantém produto amplo incompleto.
|
||||
@@ -0,0 +1,58 @@
|
||||
# Decisão agrupada — balanço e resultados internos QA
|
||||
|
||||
10/11/2026 · `SGF-INTERNAL-STATEMENTS-QA-v1`. **Autorizado expressamente11/11 e entregue; ver [relatório](SGF_FINANCIAL_STATEMENTS_DELIVERY.md).** O texto seguinte conserva o âmbito da decisão. Há balancete/razão efectivos, mas não serviço de correspondências revistas e demonstrações internas. A conferência SELECT-only confirmou os dois poderes abaixo ausentes nas duas bases existentes. Preparar/publicar lançamentos não confere automaticamente poder de aprovar rubricas de apresentação.
|
||||
|
||||
## Resultado funcional do bloco inteiro
|
||||
|
||||
Na mesma8085, Contabilidade → Demonstrações internas: escolher datas explícitas e versão de correspondências; consultar/editar individualmente a correspondência de conta para rubrica, preparar e rever por pessoas distintas, conservar motivo/versão/antes/depois. Não inferir rubrica pelo prefixo da conta, descrição, saldo ou referencial suposto. Conta nova/alterada não recebe classificação automática. Os relatórios distinguem classificação pendente, rubrica sem conta e valor zero observado.
|
||||
|
||||
Produzir balanço **interno/parcial QA** com saldos finais das rubricas classificadas e quadro de pendências; resultados **internos/parciais QA** com movimento do período, receitas/gastos classificados e pendências. Preservar sinais e saldos invertidos; não usar valor absoluto para forçar natureza. Capital próprio não é pressuposto zero. Havendo rubricas por classificar, resultado completo/equação patrimonial completa permanecem indeterminados, mesmo que o balancete esteja equilibrado.
|
||||
|
||||
Reutilizar `trialBalance`/`accountLedger` originais e as suas fórmulas, autorizações, datas e marcador de27 lançamentos; não criar segundo motor de débitos/créditos nem alterar o writer. Processar páginas25/100, sem acumular o universo em memória; grupos exactos por moeda e pendências, com ligação à conta/razão/diário. Os resultados de uma página nunca são declarados totais do universo. Alteração do marcador, da conta ou das correspondências durante preparação exige nova conferência.
|
||||
|
||||
Preparar/rever também o resultado congelado com linhas, pressupostos, pendências, fontes/versões e SHA; consultar/exportar posteriormente sem recalcular ou reescrever a revisão anterior. Uma nova consulta de saldos é actual e identifica se a fonte mudou desde o resultado conservado. CSV/exportação e histórico recuperáveis, prévia reversível, confirmação individual, recibo/chave, isolamento e revalidação de perfil/permissões/pessoa/contexto/versão/dependências. Correcção cria sucessora, não modifica história; repetição/falha/concorrência não duplicam versão ou resultado. Não aprovar a própria preparação.
|
||||
|
||||
## Correspondências artificiais propostas, para escolha/revisão explícitas
|
||||
|
||||
Fonte lida sem escrita: balancete original de10/11/2026,19 contas com movimento/saldo,27 lançamentos. A tabela é **proposta QA**, ainda não aplicada e sem afirmação de classificação contabilística real. Não atribuir estas rubricas a contas reais ou contas futuras.
|
||||
|
||||
|Conta artificial observada|Rubrica QA proposta|
|
||||
|---|---|
|
||||
|QA-CAIXA|Activo interno — custódia QA|
|
||||
|QA-CLIENTES|Activo interno — recebíveis QA|
|
||||
|QA-STOCK|Activo interno — stock QA|
|
||||
|QA-FORNECEDOR|Passivo interno — fornecedor QA|
|
||||
|QA-VENDAS|Rendimento interno QA|
|
||||
|QA-CONSUMO-STOCK|Gasto interno QA|
|
||||
|QA-CUSTO-DIRECTO|Gasto interno QA|
|
||||
|QA-CUSTO-INDUSTRIAL|Gasto interno QA|
|
||||
|QA-DESPESA-CAIXA|Gasto interno QA|
|
||||
|QA-DIFERENCA-INVENTARIO|Gasto interno QA|
|
||||
|QA-COMPENSACAO-ENSAIO|Por classificar — contrapartida de ensaio|
|
||||
|QA-COMPENSACAO-INDUSTRIAL|Por classificar — contrapartida de ensaio|
|
||||
|QA-COMPENSACAO-STOCK|Por classificar — contrapartida de ensaio|
|
||||
|QA-CONTRAPARTIDA|Por classificar|
|
||||
|QA-DEVOLUCAO-FORNECEDOR|Por classificar|
|
||||
|QA-IMPOSTO-TESTE|Por classificar; não equivale a imposto apurado/a pagar|
|
||||
|QA-LIQUIDACAO|Por classificar; não presumir banco real|
|
||||
|QA-LIQUIDACAO-CLIENTE|Por classificar; não presumir banco real|
|
||||
|QA-REDUCAO-CLIENTE|Por classificar|
|
||||
|
||||
No recorte observado, as rubricas propostas dão activos conhecidos2155MZN, fornecedor100, rendimentos2586,21 e gastos classificados2200; o subtotal das rubricas de resultados é386,21. **Não é resultado da empresa**: nove contas continuam explicitamente por classificar, incluindo contrapartidas e redução de cliente. Valores são da fonte QA observada e devem ser novamente lidos/conferidos na execução. O bloco deve mostrar essas lacunas, não preencher capital ou “equilibrar” a apresentação.
|
||||
|
||||
## Dois direitos e duas concessões por base
|
||||
|
||||
Tenant1/empresa2/unidade2, apenas8085 e regressão existentes:
|
||||
|
||||
|Direito SGF novo|Único perfil QA|Poder|
|
||||
|---|---|---|
|
||||
|`general_ledger.statements.prepare`|Contabilidade preparação15|Preparar correspondências/sucessoras e resultado interno para revisão, sem aprovar.|
|
||||
|`general_ledger.statements.review`|Contabilidade revisão16|Aprovar/recusar preparação alheia actual e resultado interno, sem preparar.|
|
||||
|
||||
Consulta reutiliza `general_ledger.view`, já existente em15/16/17. Duas concessões por base, quatro no total; nenhuma pessoa/perfil, role PostgreSQL, direito PUBLIC, acesso real ou concessão SQL adicional. Novas estruturas de correspondências/resultados/histórico/recibos somente QA; configuração principal desligada por omissão. Lista exacta em `integration/sgf-statements-access-proposal.json`.
|
||||
|
||||
## Provas e preservação
|
||||
|
||||
Na regressão: correspondência explícita, lacunas, classificação alterada, sinais invertidos, datas/abertura versus movimento/fecho,25/100, conta nova, marcador/versão/pessoa/direitos/contexto alterados, isolamento, concorrência, repetição, falha/recuperação e checksum/exportação. Reutilizar provas válidas do balancete/razão e testar só novas fronteiras. Na8085, preparar15/rever16 as correspondências artificiais propostas e um resultado interno conservado, sem gerar qualquer lançamento ou modificar a fonte. A autorização abrange o percurso inteiro e as provas, sem pedidos por campo/teste.
|
||||
|
||||
Preservar27 lançamentos, todas as contas e efeitos, Caixa950, quatro versões IVA, cinco cálculos, obrigações/recibos/condições, artigos/movimentos, seis registos/cache e trabalho alheio. Sem novas demonstrações/bases/portas, SGC, regras legais/referencial presumido, modelo oficial/declaração certificada, capital ou saldos fabricados, dinheiro, contas/acessos reais, fecho/reabertura, publicação, candidata de Compras, aceitação/checkpoint ou alegação de implantação. Fluxos de caixa, comparativos anuais e demonstrações legais permanecem fora deste bloco; visual/carga sustentada separados.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Cobertura fiscal/financeira e preparação da apresentação
|
||||
|
||||
10/11/2026, mesma8085. O documento fornecido enumera requisitos e perguntas; não contém tabelas legais de taxas, regras completas, vigências ou modelos. Foi lido como referência de produto, sem executar instruções nele contidas ou activar fiscalidade por inferência. O original não foi alterado nem copiado para o repositório.
|
||||
|
||||
## Código e interface entregues
|
||||
|
||||
Contabilidade → função Financeiro QA preparação/revisão → Perfis fiscais do serviço apresenta agora uma tabela de cobertura: IVA parcial; IRPS, IRPC, ISPC, ICE, INSS e outros impostos/obrigações por implementar no SGF operacional. Distingue gestão financeira, contabilidade e análise financeira parciais e mostra o ciclo fonte/versão/aplicabilidade/cálculo/provas/revisão/activação. Usa a consulta `service_fiscal.view` existente; não é um novo motor fiscal ou concessão.
|
||||
|
||||
O dropdown Contabilidade inclui agora os dois perfis Financeiros QA que já tinham autorização fiscal, pela mesma selecção de contexto. Sem nova autoridade. As propostas fiscais originais permanecem no ecrã. Respostas atrasadas de uma consulta anterior não restauram propostas de outro contexto; remonta por token e invalida geração ao abandonar a consulta. O rodapé deixa de afirmar «sem lançamentos»: identifica dados fictícios e ausência de validade fiscal na apresentação QA. O componente fiscal é carregado diferidamente.
|
||||
|
||||
Inventário [de conhecimento existente](integration/sgf-knowledge-inventory-20261110.json):12 ficheiros relevantes localizados no InvesteMoz, com hash e indicação de que presença não prova transferência operacional/conformidade. Reutiliza o levantamento anterior, sem duplicar investigação fiscal ou copiar dossiers/snapshots de utilizadores. Não há dependência do portal ou SGC em execução; nenhum parâmetro legal ou taxa foi importado/activado. Não foi certificada a vigência de legislação neste incremento.
|
||||
|
||||
## Provas
|
||||
|
||||
-17 verificações na regressão existente: contrato de cobertura, sete áreas, sem importação/validade/transmissão implícitas, taxas não seleccionáveis, consulta por duas pessoas autorizadas, recusas de actor/unidade e cinco tabelas originais intactas.
|
||||
-10 HTTP reais: consulta autorizada, resposta privada sem cache, propostas anteriores, módulo errado, actor de Compras e anónimo recusados. Escolhas de contexto normais auditadas; zero comandos fiscais/de negócio.
|
||||
-Sete de renderização estática: famílias/estados, aviso de transferência, sem campos de taxa/activação, texto escapado e ausência de direitos implícitos.
|
||||
-Três do ciclo real do componente com hooks controlados: contexto novo prevalece, propostas antigas descartadas e erro do contexto abandonado suprimido. Não é navegador ou aceitação visual.
|
||||
-Três HTTP da entrada: seis dropdowns conservados e os dois perfis Financeiros já autorizados acessíveis no dropdown Contabilidade.
|
||||
-Comparação na8085 de11 tabelas: propostas/decisões/activações/resultados fiscais, facturas, recebíveis/efeitos, Caixa, concessões, movimentos de Stock e diário idênticos. Diário27. Build privado aprovado, anteriores assets/backups retidos.
|
||||
|
||||
[Índice de provas](proofs/sgf-fiscal-coverage-20261110.json). Provas detalhadas e backups privados fora do repositório. Testes anteriores reutilizados, não repetidos. Sem novos direitos, schema, bases, demonstrações, índices, activação fiscal, publicação, SGC, checkpoint ou aceitação presumida. Seis registos e cache não tocados.
|
||||
|
||||
## Pendências corrigidas na matriz
|
||||
|
||||
O fecho anterior refere-se ao recorte QA dos seis módulos. **Não concluiu o requisito amplo de fiscalidade, modelos, remunerações, reconciliação bancária ou análise financeira** de `SERVICE_INVOICE_CALCULATION_SPEC.md`, FIS-SGF-13…19. A matriz passa a mostrar estas lacunas de produto separadamente da revisão visual e da implantação. O painel de cobertura documenta a distinção; não resolve os motores que faltam.
|
||||
|
||||
Próximo bloco concreto preparado: [livro e mapa interno de IVA QA](SGF_IVA_ASSESSMENT_NEXT_SCOPE.md), seis direitos/14 concessões por base QA existente, por autorizar e não aplicados. Sem novos motores fiscais ou modelos oficiais presumidos.
|
||||
|
||||
Revisão visual continua pendente. Uma única tentativa de obter a aba integrada já aberta por URL exacto terminou em timeout30s, com reset do conector. Não se controlou a página, não se repetiu a via Windows bloqueada e não se contornou a falha. Carga sustentada, retenção/órfãos, arranque completo, conformidade e implantação mantêm provas próprias pendentes.
|
||||
@@ -0,0 +1,48 @@
|
||||
# Obrigações e prazos administrativos QA — entrega8085
|
||||
|
||||
10/11/2026 · `SGF-FISCAL-OBLIGATIONS-QA-v1`. Bloco autorizado concluído na mesma8085, **Contabilidade → Obrigações e prazos administrativos QA**. Configuração do código principal desligada por omissão; somente as bases QA existentes têm estruturas/acessos aprovados, e a8085 tem o percurso disponibilizado. Sem SGC ou nova demonstração.
|
||||
|
||||
## Percurso utilizável
|
||||
|
||||
Escolher uma referência temporal explícita para consultar obrigações, com período da origem, estado administrativo, situação do prazo, intervalo de vencimento e páginas SQL25/100. A última condição aprovada é distinguida da preparação actual. Uma preparação ou recusa não altera condições aprovadas. Prazo desconhecido conserva atraso indeterminado; no próprio dia há0 dias e no seguinte1 dia. A situação temporal é independente do registo de entrega/cancelamento e não reconstitui estado histórico.
|
||||
|
||||
Preparação13 e revisão14 individuais, com fundamento e prévia anterior/posterior. O responsável é escolhido explicitamente entre os perfis elegíveis13–17; a interface não escolhe por omissão. Novas obrigações escolhem explicitamente o mapa interno revisto apresentado. A mesma origem não admite outra obrigação activa ou primeira preparação pendente. Correcção, declaração de entrega simulada e cancelamento conservam o registo e exigem preparação/revisão distintas. Cancelamento administrativo não retira uma entrega a uma autoridade; não há tal transmissão neste percurso.
|
||||
|
||||
Na entrega simulada, indicar referência textual e SHA da exportação **interna já existente**. O serviço compara SHA/bytes e estado/versionamento do mapa com o consumidor original. Não existe upload binário, recibo oficial, chamada à AT, envio de mensagem ou alegação de submissão. A obrigação não cria apuramento, imposto a pagar, dívida, pagamento ou lançamento. O campo de imposto a pagar mantém-se indeterminado, nunca zero presumido.
|
||||
|
||||
Histórico individual com versões, operação, autor/data, fundamento e impacto anterior/posterior. A tabela identifica a condição aprovada **actual**; escolher uma versão mostra também o impacto registado nessa versão. CSV contém apenas a página aplicada, filtros/referência, versões, fonte e natureza artificial, com texto protegido contra fórmulas. Recibo próprio é recuperável numa sessão renovada sem executar outra decisão. O recibo histórico não é uma confirmação de validade actual da origem.
|
||||
|
||||
Formulários/preparações em curso impedem trocar consulta ou registo sem descarte explícito. Revisão começa sem decisão escolhida e fundamentos não são copiados. Resposta incerta conserva corpo/chave e oferece recuperação da mesma confirmação. Escolher «Nova obrigação» depois de consultar um registo cria identidade nova, sem reutilizar silenciosamente a anterior; o servidor continua a impedir duplicação de origem.
|
||||
|
||||
## Fonte, revalidação e exemplo conservado
|
||||
|
||||
O consumidor original `FiscalAssessment` continua a conferir documento emitido, recebimento, cancelamentos, período, revisão do livro/mapa e dependências. O novo adaptador verifica ainda os bytes/SHA congelados do mapa. Não altera o serviço original nem o seu writer.
|
||||
|
||||
Confirmação revalida direitos, contexto físico/empresa/unidade, pessoa/autoria, versão, prazo/condição observados, responsável elegível e origem. Mudança de nome/email da identidade observada invalida a prévia; revisão volta a conferir identidade e direito do preparador. Só os perfis QA aprovados13/14 escrevem. Versão, recibo e auditoria de identidade são transaccionais; o histórico append-only próprio guarda o impacto integral. A auditoria comum conserva a referência da versão, autor e fundamento pelo seu allowlist existente, sem o alargar.
|
||||
|
||||
Na8085 ficou **uma obrigação, quatro versões e quatro recibos**: obrigação preparada13/revista14, prazo artificial15/12/2026 e responsável13; declaração de entrega APENAS simulada preparada13/revista14, com referência/SHA da exportação interna. Mapa e período efectivos foram lidos do livro, sem hardcode de ID. O mapa não foi recriado, nem se repetiram factura, recibo financeiro, livro IVA ou lançamento.
|
||||
|
||||
O prazo15/12 é dado artificial de ensaio, **não prazo legal**. O mapa continua interno/parcial, com base862,07/IVA documental137,93/total1000MZN e imposto a pagar indeterminado. São mantidas as quatro versões IVA anteriores e a sua exportação.
|
||||
|
||||
## Acessos e provas
|
||||
|
||||
Aplicados exactamente os três direitos aprovados: `fiscal_obligations.view` a13–17, `prepare` a13 e `review` a14. Sete concessões por base QA existente,14 no total. Nenhuma pessoa/perfil/role PostgreSQL, concessão SQL ou acesso real novo. As tabelas/sequências/função novas negam privilégios PUBLIC. O submenu exige a configuração específica e o novo direito de consulta; os outros módulos mantêm as entradas aceites.
|
||||
|
||||
-41 verificações do percurso na regressão: preparação/revisão distinta, recusa/correcção/desconhecido, entrega/SHA, duplicação de origem, cancelamento, recibos, versão/contexto/direito/origem alterados e falha injectada no recibo com rollback/recuperação. Fixtures administrativas revertidas e sete conjuntos originais comparados.
|
||||
-19 de fronteiras/relatório:29 linhas SQL adicionais de relatório,25+5/100, estados/período/prazo/referência, vazio, datas inválidas, unidade estrangeira, módulo/flag, identidade e mapa alterados, história imutável. São fixtures de leitura, não obrigações criadas pelo workflow; revertidas.
|
||||
-22 de interface/contrato/CSV, executando handlers reais com API simulada: referência/responsável explícitos, impacto, identidade nova, protecção de edição, resposta incerta e recuperação idêntica. Não são revisão visual de navegador.
|
||||
-29 HTTP8085: os quatro comandos administrativos efectivos, exportação original conferida por bytes/SHA, sequência de versões, repetição, recibo em sessão nova, filtros/25/100/recusas e JS principal/lazy com MIME/SHA. Progresso privado conserva chaves/resultados para não repetir os comandos.
|
||||
-Sete adicionais de entrada/guardas: autenticação401, CSRF419, consultas15/16 sem escrita e navegação por configuração/direito.
|
||||
-Concorrência em dois processos apenas na regressão: primeira revisão segura a linha da empresa; `pg_blocking_pids` identifica o bloqueador e espera `Lock/transactionid`. Segunda confirmação503 após5,64s; após libertação recusa409 por versão antiga. Primeira repetição200 recupera o mesmo recibo, sem revisão duplicada. Duas operações adicionais cancelam administrativamente essa fixture, conservando quatro versões auditadas na regressão e permitindo futuros ensaios sem duplicar origem activa. Não ocorreu na8085.
|
||||
|
||||
São118 verificações dirigidas distintas (41+19+22+29+7), mais concorrência e61 verificações de preservação/ACL. [Índice das provas](proofs/sgf-fiscal-obligations-20261110.json). Suites alheias/provas válidas foram reutilizadas.
|
||||
|
||||
Na regressão existia livro IVA revisto, mas não mapa revisto persistente. Foram necessários **dois comandos do workflow original** para preparar/rever essa fonte em falta, somente nesse livro de regressão; não se repetiu o livro ou a origem financeira. Essa preparação necessária tem prova própria e não é contada como suite nova. A fonte8085 já existia e permaneceu intacta.
|
||||
|
||||
## Preservação e limites
|
||||
|
||||
Backup privado anterior;47 conjuntos actuais iguais. Nas permissões, todas as linhas anteriores iguais e apenas sete concessões aprovadas acrescentadas. Três bindings intactos; diário27, Caixa950, cinco cálculos, quatro versões IVA, condições de fornecedores, catálogo e movimentos preservados. Quatro eventos de auditoria correspondem aos quatro comandos administrativos novos. Entrada normal nos perfis e uma descarga auditada da exportação existente conservam os registos de consulta próprios; não se declara a tabela global de auditoria byte a byte igual.
|
||||
|
||||
Nenhum comando dirigido aos seis registos ou à cache bloqueada. Dados, credenciais, recibos/chaves e dumps permanecem privados, fora do repositório. Sem novas bases/portas/demonstrações, SGC, fiscalidade real, pagamento, publicação, candidata de Compras, reabertura, aceitação ou checkpoint.
|
||||
|
||||
O âmbito é controlo administrativo de uma origem QA, não calendário legal, aplicabilidade fiscal geral, apuramento, modelo oficial, guia/juros, arquivo binário legal ou submissão electrónica. Se o mapa original deixar de estar actual/revisto, novas decisões são bloqueadas e o histórico continua identificado com a divergência. O bloqueio global da empresa e as guardas de exportação do consumidor original permanecem; não se declara optimização de carga ou agendamento distribuído. Revisão visual, carga sustentada e capacidade de implantação continuam pendentes, assim como os motores fiscais gerais. Matriz v20 mantém o produto amplo incompleto.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Decisão agrupada — controlo de obrigações fiscais QA
|
||||
|
||||
10/11/2026 · `SGF-FISCAL-OBLIGATIONS-QA-v1`. **Autorizado expressamente e entregue; ver [relatório](SGF_FISCAL_OBLIGATIONS_DELIVERY.md).** O texto seguinte conserva o âmbito da decisão. A matriz identifica calendário/controlo de obrigações entre as lacunas. O mapa interno IVA e os seus direitos existem; não existe o percurso para atribuir/rever um prazo e conservar a declaração/comprovativo de cumprimento. Conferência SELECT-only nas duas bases existentes confirmou os novos poderes abaixo ausentes. Esta proposta implementa um controlo administrativo ligado à evidência existente; não calcula prazos legais ou tributos.
|
||||
|
||||
## Percurso funcional completo
|
||||
|
||||
Na mesma8085, Contabilidade → Obrigações e prazos: pesquisar por período/estado/data, páginas SQL25/100, escolher explicitamente o mapa interno IVA **já revisto**, preparar obrigação administrativa individual com responsável, período da origem, prazo e evidência/fundamento. Outra pessoa confere anterior/proposto, prazo e origem actual antes de aprovar/recusar. Não gerar obrigações em massa nem presumir aplicabilidade por regime/empresa.
|
||||
|
||||
Separar estado administrativo e situação temporal: preparação, obrigação revista, declaração de entrega simulada preparada e revista; pendente/no prazo/atrasada segundo referência explícita; prazo desconhecido mantém atraso indeterminado. Preparação/recusa não substitui a última versão aprovada. Correcção de prazo/evidência e cancelamento administrativo exigem preparação/revisão distintas e conservam história. Uma entrega declarada nunca equivale a transmissão aceite pela AT ou pagamento.
|
||||
|
||||
Registar uma referência textual e SHA do ficheiro **interno já exportável** como evidência da declaração QA. Conferir o mapa/exportação nativos, versão e hash antes de confirmar; não criar arquivo binário genérico, upload, credenciais AT, mensagem, notificação externa ou submissão. Se faltar evidência de envio/aceitação, mostrar explicitamente a lacuna. Não inventar recibo oficial. Relatório e CSV da página identificam origem/versão/período/autores e a natureza artificial; recibo histórico próprio pode ser recuperado sem executar.
|
||||
|
||||
Reutilizar os mecanismos administrativos de prévia reversível, confirmação individual, operação/chave, autor/pessoa distinta, contexto físico, empresa/unidade, direitos e auditoria transaccional. Confirmação revalida origem/mapa revisto, hash, período, responsável elegível, versão, pessoa e prazo observado; mudança exige nova conferência. Concorrência, falha e repetição não duplicam obrigações/entregas. Nenhuma alteração de cálculo, apuramento, dívida, pagamento, diário ou mapa original.
|
||||
|
||||
## Três direitos e sete concessões por base QA existente
|
||||
|
||||
Tenant1/empresa2/unidade2, apenas8085 e regressão existentes:
|
||||
|
||||
|Direito novo|Perfis QA|Poder|
|
||||
|---|---|---|
|
||||
|`fiscal_obligations.view`|13,14,15,16,17|Consultar obrigações/evidências autorizadas, relatório e histórico.|
|
||||
|`fiscal_obligations.prepare`|13|Preparar obrigação, correcção/cancelamento ou declaração de entrega simulada, sem aprovar.|
|
||||
|`fiscal_obligations.review`|14|Aprovar/recusar preparação alheia actual, sem preparar.|
|
||||
|
||||
**Sete concessões por base,14 no total**, sem nova pessoa/perfil, role PostgreSQL, grant PUBLIC, acesso real ou concessão SQL adicional. Direitos de consultar/rever mapas não concedem gestão de prazos/declarações de cumprimento. Lista exacta em `integration/sgf-fiscal-obligations-access-proposal.json`. Novas estruturas administrativas append-only apenas nestas bases QA; configuração do código principal desligada por omissão.
|
||||
|
||||
## Exemplo e provas do bloco inteiro
|
||||
|
||||
Reutilizar o mapa interno IVA já revisto na8085, com o seu período efectivo e versão, sem o recriar. Preparação13/revisão14 de uma obrigação explicitamente **artificial**, prazo15/12/2026 escolhido como dado de ensaio, **sem fundamento legal ou afirmação de vencimento oficial**. Consulta15/12 sem atraso e16/12 com1dia. Preparação/revisão da declaração simulada usando a referência/SHA da exportação interna; sem chamada a autoridade ou dinheiro. Conservar esse exemplo administrativo e todos os exemplos anteriores.
|
||||
|
||||
Regressão: desconhecido, prazo corrigido, recusa, cancelamento e entrega simulada, origem/versão/hash/pessoa/contexto alterados, escolha de responsável sem autoridade, acesso entre empresas/unidades,25/100, concorrência, repetição e rollback/recuperação. Fixtures revertidas quando possível; prova HTTP da origem efectiva8085 e do percurso autorizado. Não repetir suites fiscais/financeiras válidas ou outras operações já aceites.
|
||||
|
||||
Esta decisão cobre implementação e provas de todo o percurso, sem pedido por campo/teste. Não conclui calendário legal, motores IRPS/INSS/IRPC/ISPC/ICE, modelo oficial, juros, guia ou submissão. Preservar27 lançamentos, Caixa950, quatro versões IVA, cinco cálculos, obrigações/condições, artigos, seis registos/cache e trabalho alheio. Sem novas demonstrações/bases/portas, SGC, operações/acessos reais, publicação, candidata de Compras, reabertura, aceitação/checkpoint ou alegação de implantação. Visual/carga sustentada separados.
|
||||
@@ -0,0 +1,52 @@
|
||||
# Núcleo comum de regras fiscais versionadas QA
|
||||
|
||||
Entregue10/11/2026, `SGF-FISCAL-RULES-COMMON-QA-v1`, após a [autorização expressa](SGF_FISCAL_RULES_COMMON_SCOPE.md). Mesma8085, entrada **Contabilidade → Regras fiscais versionadas QA → Abrir catálogo, histórico e cálculo QA**, ou `/fiscal/rules` depois de escolher uma função autorizada. Sem SGC ou nova demonstração.
|
||||
|
||||
## Percurso funcional conservado
|
||||
|
||||
Financeiro13 preparou a regra artificial versão1; Financeiro14 reviu a versão exacta. Cálculo explicitamente escolhido para30/11/2026: base1000, parâmetro0,16, imposto160,00 e total1160,00. Nova preparação/revisão distintas da sucessora versão2; cálculo escolhido para01/12/2026: base1000, parâmetro artificial0,17, imposto170,00 e total1170,00. **Quatro eventos de regra e dois cálculos novos** conservados na8085. Não se trata de uma mudança legal de IVA.
|
||||
|
||||
O catálogo tem pesquisa literal de chave/nome/fonte, filtros família/estado, páginas SQL25/100, versões temporais e histórico por chave. Fontes, SHA, condições, moeda/unidade, precisão, prioridade, vigência e parâmetros são preservados em cada versão. A interface exige escolha explícita da definição e da regra; não adopta o primeiro registo. Referências IVA/IRPS/IRPC/ISPC/ICE/INSS/outros podem ser inventariadas como pendentes, mas não se transformam em motores legais implementados.
|
||||
|
||||
Revisão não equivale a activação fiscal real. Só os dois DAGs/definições artificiais exactos e fixados por SHA deste contrato podem executar no novo endpoint. Fonte desconhecida/não conferida, moeda diferente, vigência ausente/fora do intervalo, regra não escolhida/não revista/retirada ou conflito de prioridade produzem pendência, com montantes indeterminados. Não se escolhe automaticamente outra regra ou parâmetro zero.
|
||||
|
||||
Revisão temporal pertence à versão lógica; a sucessora futura não elimina a regra anterior válida no seu intervalo. Retirada por revisor distinto cria evento imutável para a versão escolhida, sem apagar cálculo antigo. A consulta do cálculo histórico conserva a fotografia e mostra também a avaliação actual, distinguindo passado e aplicabilidade presente. Nada é atribuído por arrasto a contribuintes, serviços, documentos, livro/mapa IVA ou seis registos antigos.
|
||||
|
||||
## Reutilização e precisão
|
||||
|
||||
Reutilizado o avaliador declarativo `SimulationTaxRuleExpression.php` já existente no InvesteMoz, numa cópia local controlada: [proveniência e adaptações](integration/sgf-fiscal-expression-port.json). Namespace/classe próprios e limites decimais24 inteiros/8 casas na linguagem; a entrada pública de base limita16 inteiros/8 casas. Sem carregar o portal em execução, dossiers de utilizadores, conversas ou regras legais automaticamente. A comparação com a classe de origem ocorreu apenas no teste local de paridade, com SHA fixado.
|
||||
|
||||
Operações declarativas da linguagem são validadas, sem `eval`, scripts, chamadas de funções, URLs ou código proveniente do documento. O endpoint de cálculo só executa o DAG percentual artificial fixado; expressões de referências pendentes não são executadas. Não se oferece execução arbitrária de DAGs ao cliente.
|
||||
|
||||
Aritmética racional exacta, representação documental explícita por truncagem de duas casas e diferença preservada. Caso SGF anterior1000,03×0,16: exacto160,0048, documental160,00, diferença0,0048, total1160,03; compatibilidade comprovada. Base com oito casas é preservada; se não representável em duas casas, o total fica pendente, sem truncagem silenciosa da base. Não se usa apresentação como regra legal.
|
||||
|
||||
## Autoridade, persistência e recuperação
|
||||
|
||||
`fiscal_rules.view/prepare/review`: **sete concessões por cada base QA existente**,14 no conjunto, exactamente [como aprovado](integration/sgf-fiscal-rules-access-proposal.json). Preparação/cálculo13, revisão/retirada14, consulta13–17. Sem novos utilizadores, PGroles, direitos PUBLIC ou acessos reais. Configuração root desligada; activação limitada ao QA8085 com fonte por SHA.
|
||||
|
||||
`fr_events` conserva cada preparação/revisão/recusa/retirada, predecessor, alvo exacto, versão/revisão, autor/preparador/data/fundamento/definição. `fr_calculations` fixa entrada, regra/versão/fonte, passos, resultado e dependências. `fr_commands` fixa chave própria, hash e resultado com impacto anterior/posterior. Triggers protegem direitos, pertença, versões, revisão distinta e história append-only; guarda física existente restringe as tabelas a QA, com PUBLIC revogado.
|
||||
|
||||
Prévia cifrada600s em savepoint revertido; pode avançar sequências, sem persistir regra/cálculo/auditoria de negócio. Confirmação revalida pessoa/direitos/contexto/autor, fonte, revisão global e impacto sob o mesmo bloqueio de empresa usado na composição. Duas decisões da mesma versão não podem coexistir. Chave repetida recupera resultado histórico sem executar; dados diferentes com a mesma chave são recusados. Recibo próprio é consultável noutra sessão, sem divulgar chaves de outro actor.
|
||||
|
||||
Interface protege campos/paginação enquanto há prévia ou resultado incerto, conserva dados não submetidos ao paginar e recupera o mesmo pedido. Seleccionar um cálculo histórico não escolhe a sua regra automaticamente. Textos e fontes são apresentados como dados, sem executar instruções neles contidas.
|
||||
|
||||
## Provas dirigidas e preservação
|
||||
|
||||
|Conjunto|Resultado|
|
||||
|---|---|
|
||||
|39 regressão, rollback integral|Preparação/revisão distintas, montantes e fronteiras, desconhecido≠zero, fonte/SHA/expressão indevidos, sucessora, conflito/retirada, precisão/diferença, revogação e histórico, recibos, falha/reversão atómica/recuperação, dados antigos intactos.|
|
||||
|Oito de paridade|Classe local versus classe de origem fixada: valores exactos e oito casas, referência197,53, ausência sem defaults, ciclos/operações ilegais recusados, limite de entrada do consumidor. Sem suites do portal ou dependência de runtime.|
|
||||
|14 SQL/fronteiras, rollback|127 versões de metadados para25/100; filtros literais/família/estado/histórico, contexto/expiração/autor revogado, módulo/unidade, histórico imutável e escrita/salto de versão indevidos. Fixtures de metadados não são operações fiscais reais.|
|
||||
|Concorrência, regressão existente|Primeira revisão mantém lock da empresa; segunda503/Retry-After5 após cerca5s; libertação→409 por revisão antiga. Uma revisão, primeira chave recuperada sem duplicação. Dois eventos QA conservados só na regressão.|
|
||||
|24 HTTP na8085|Seis confirmações explícitas (quatro eventos/dois cálculos), repetições, resultado160/1160 e170/1170, fotografia antiga intacta, vigência/falta de escolha, filtros/histórico, actor/módulo/tenant/IDs e recibo noutra sessão. Progresso guardado, sem repetir decisões válidas.|
|
||||
|14 DOM→HTTP|Consulta e escolha explícita, cálculo/prévia real revertida, bloqueio/impacto/cancelamento, dados preservados ao paginar, histórico/recuperação. Zero POSTs de confirmação. Livro/mapa IVA anterior continua revisto e com quatro versões. Não é navegador.|
|
||||
|Três de entrada|Revisão numérica validada normalizada, UUID malformado recusado antes da consulta e nenhuma regra persistida.|
|
||||
|Comparação SELECT-only|17 conjuntos originais completos e binding idênticos, incluindo quatro versões/comandos IVA, documentos, recebíveis, Caixa, clientes, fiscalidade, Stock,27 lançamentos e períodos. Apenas sete concessões aprovadas adicionadas.|
|
||||
|
||||
[Índice de provas](proofs/sgf-fiscal-rules-20261110.json). Total102 verificações dirigidas, concorrência discriminada à parte. Provas válidas dos outros módulos e do IVA reaproveitadas, não repetidas. Backups/credenciais/dados privados fora do repositório; assets e alterações alheias conservados. Sem novos efeitos financeiros, índices no destino, novas bases/portas/demos, SGC, publicação/candidata, aceitação/checkpoint ou capacidade de implantação presumidos.
|
||||
|
||||
## Limites
|
||||
|
||||
Este núcleo governa versões e executa dois casos aritméticos artificiais. Não conclui IVA operacional geral, IRPS/IRPC/ISPC/ICE/INSS, remunerações, modelos oficiais ou calendário legal; não confirma fontes legislativas actuais. O documento de requisitos não contém por si essas regras. Os restantes requisitos amplos continuam visíveis na matriz, sem serem escondidos pelo recorte QA.
|
||||
|
||||
Diário27, Caixa fechada950, livro/mapa IVA com quatro versões, seis registos e cache intactos. Visual continua pendente; a via bloqueada não foi repetida. Carga sustentada, retenção/órfãos, arranque completo, conformidade e implantação exigem prova própria.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Próximo bloco agrupado — regras fiscais comuns versionadas QA
|
||||
|
||||
`SGF-FISCAL-RULES-COMMON-QA-v1`,10/11/2026. **Autorizado expressamente e entregue**; ver `SGF_FISCAL_RULES_COMMON_DELIVERY.md`. O texto abaixo conserva o âmbito aprovado. É o bloco transversal FIS-SGF-01/12/19 do levantamento existente, não uma nova demonstração ou uma declaração de implementação de todos os impostos.
|
||||
|
||||
## Resultado funcional proposto
|
||||
|
||||
Na mesma8085/regressão: catálogo pesquisável/paginado de fontes, regras e parâmetros por versão; preparação13 e revisão14 distintas; selecção explícita da regra exacta num cálculo QA explicável; fotografia de entrada/resultado/fontes/versão e recibo recuperável. Leitores autorizados consultam histórico e resultado. Nenhum parâmetro é carregado de conversas automaticamente. Sem ligação ao portal/SGC em execução.
|
||||
|
||||
Uma regra identifica família/âmbito/condições, fonte e SHA, precisão, moeda/unidade, início/fim de vigência, prioridade/conflitos e política de representação. Informação não verificada fica pendente e não entra em cálculo determinado. O avaliador aceita apenas operações aritméticas declaradas e validadas; não executa código, scripts, URLs ou expressões arbitrárias de documentos. Reutilizar contratos/casos compatíveis do inventário InvesteMoz, com paridade exacta e diferenças de precisão explícitas; não repetir investigação legal já disponível.
|
||||
|
||||
Caso integral de aceitação do núcleo, explicitamente **artificial**: regra QA versão1, base1000, taxa de ensaio16%, válida até30/11/2026 → exacto/documental160 e total1160. Sucessora QA versão2, taxa artificial17%, válida desde01/12/2026 →170 e1170. Não é afirmação de alteração da taxa legal de IVA. Conferir fronteiras30/11 e01/12, revisão/recusa, ausência/conflito de regra, moeda/precisão e campos indevidos. Não atribuir a taxa artificial a contribuintes, serviços ou documentos existentes.
|
||||
|
||||
Os resultados são ensaios internos do contrato, sem emissão, declaração, retenção, cobrança ou lançamento. Regras revogadas/sucessoras não reescrevem cálculo ou PDF antigo. O livro/mapa IVA entregue conserva as suas quatro versões e origem congelada; a ligação futura de uma regra exige selecção/revisão próprias, nunca adopção automática. Nenhum dos seis registos protegidos recebe associação.
|
||||
|
||||
O catálogo pode inventariar IVA/IRPS/IRPC/ISPC/ICE/INSS e outros identificados com documentação, mas **este bloco não presume motores operacionais completos dessas famílias**, remunerações, calendários legais ou modelos oficiais. Serve o mecanismo comum de manutenção e execução de regras expressamente verificadas; ausência de fonte/parâmetro/aplicabilidade produz pendência. Novos efeitos de negócio fora dos aprovados continuam sujeitos ao seu âmbito.
|
||||
|
||||
## Autoridade proposta
|
||||
|
||||
Três nomes novos, **sete concessões por cada base QA existente**,14 no conjunto. Todos tenant1/empresa2/unidade2, só nos cinco perfis existentes:
|
||||
|
||||
|Direito|Destinatários|
|
||||
|---|---|
|
||||
|`fiscal_rules.view`|Financeiro13/14, Contabilidade15/16 e consulta17|
|
||||
|`fiscal_rules.prepare`|Financeiro preparação13|
|
||||
|`fiscal_rules.review`|Financeiro revisão14|
|
||||
|
||||
[Matriz integral](integration/sgf-fiscal-rules-access-proposal.json). Direitos dos perfis fiscais de um serviço não são poderes genéricos para manter regras transversais. Direitos do livro/mapa continuam idênticos; não são concedidos por arrasto. Sem novo utilizador, PGrole, direito PUBLIC ou acesso real.
|
||||
|
||||
## Entrega e fronteiras
|
||||
|
||||
Autorizar o bloco inteiro permite implementar/provar/instalar limitadamente na8085, sem novos pedidos por campo, fronteira de data ou teste do mesmo contrato. Primeiro regressão existente com acesso/isolamento, revisão própria, versões, concorrência, repetição e falha/recuperação; depois percurso completo na instalação escolhida. Guardar snapshots antes/depois e reaproveitar as provas válidas dos módulos.
|
||||
|
||||
Preservar27 lançamentos, Caixa fechada950, quatro versões livro/mapa IVA, documentos, seis registos/cache/trabalho alheio. Sem novas bases/portas/demos, motores legais presumidos, aplicação retroactiva, dados pessoais laborais, salários/operações/acessos reais, novos lançamentos/efeitos financeiros, activação legal, reabertura, publicação/candidata, checkpoint/aceitação ou capacidade de implantação. Visual e carga permanecem separados.
|
||||
@@ -0,0 +1,74 @@
|
||||
# Guião de apresentação local do SGF
|
||||
|
||||
Entrada: **http://127.0.0.1:8085/sgf**. A aplicação é o SGF; não precisa do SGC ou de outra demonstração. Os seis módulos estão alinhados horizontalmente: abra o dropdown do módulo e escolha **Consultar** para chegar directamente ao exemplo, ou escolha a função de trabalho indicada. Os nomes QA identificam dados de teste. A lista anterior dos17 perfis continua em «Todos os perfis e módulos autorizados».
|
||||
|
||||
Dentro da aplicação, cada módulo tem o seu dropdown de funções. Escolher uma função de outro módulo muda explicitamente o contexto; continua a exigir a mesma autoridade e protege formulários não gravados/confirmações pendentes. Início e opções gerais estão separados dos módulos.
|
||||
|
||||
Este guião consulta os exemplos concluídos; não repita confirmações para os apresentar. Uma nova decisão exige prévia, fundamento e a função responsável. A revisão não pode ser feita pela própria pessoa que preparou.
|
||||
|
||||
| Etapa | Como abrir | O que mostrar |
|
||||
|---|---|---|
|
||||
|1. Comercial |Função Comercial — preparação; módulo Comercial; documentos emitidos |Documento de teste1000MZN, origem e PDF. Não é documento fiscal válido. |
|
||||
|2. Compras |Funções anteriores de Compras; módulo Compras; percurso de Compras |REQ-2026-000003 → OC-2026-000001 → recepção → FACT-COMPRA-COMPLETA-20261104 → obrigação100MZN. Consultar documentos, revisões e histórico. |
|
||||
|3. Stock |Armazém — Compras; módulo Stock; Existências e «Abrir trânsito, lotes e inventário» |Relatórios → Produtos sem movimento: escolher corte UTC e dias, consultar apenas pares com história conhecida, páginas25/100. No artigo de transferência: origem0,5UN, destino1UN, trânsito0, propriedade1,5UN. No novo artigo de lotes:1,5+2=3,5UN. Histórico de expedição, recepções0,4/0,6, preparação/activação/libertação, contagem e ajuste por outra pessoa. |
|
||||
|4. Oficinas |Gestão/técnico/verificador conforme consulta; módulo Oficinas |Ordem, autorização, tarefa e apontamentos verificados. Em peças/Stock: consumo ligado à entrega já abatida e recepção da devolução não usada. Em Oficina→rascunho: geração500MZN; botão de continuação escolhe explicitamente Comercial e abre o mesmo rascunho. Não emite outra factura automaticamente. |
|
||||
|5. Financeiro |Financeiro — preparação/revisão; módulo Financeiro |Recebível1000 com400/600 e reversão400, saldo400. Obrigação do fornecedor100→80→100; comprovativos e histórico. Custo directo275→295 e industrial1800→1820, residual300 separado. Em Caixa (`/finance/cash`): abertura0, classificação explícita do recebimento1000 já existente, despesa50, contagem e fecho950, histórico e recuperação de referência. Caixa QA fechada; não repetir operações. |
|
||||
|6. Contabilidade |Contabilidade — preparação/revisão; módulo Contabilidade; diário integrado |27 lançamentos equilibrados no mesmo diário QA, duas correcções por pares, origens individuais, Stock145MZN e diferença de inventário10MZN. Plano pesquisável, balancete e razão por conta. Transferência interna é mudança de localização, sem despesa. Período aberto; o fecho QA já foi provado com rollback. |
|
||||
|
||||
Para confirmar as autorizações, use também a função de consulta: uma leitura não oferece os comandos de decisão. Erros de contexto/versão exigem reabrir e conferir, nunca escolher outra origem automaticamente. Se uma resposta se perder durante uma confirmação, mantenha a página e recupere o mesmo pedido.
|
||||
|
||||
Arranque da instalação existente: `scripts/abrir-sgf.ps1`. Reutiliza a porta8085 e o cluster existente; não cria base/demo, não faz migrations nem limpa cache. As provas de reinício não incluem um reinício completo do computador.
|
||||
|
||||
A revisão visual automática foi interrompida porque a ferramenta não conseguiu verificar com segurança o endereço do navegador. O utilizador confirmou a abertura/legibilidade do novo Stock. Conferir ainda a legibilidade e continuidade dos outros cinco módulos antes da aceitação integral para apresentação. [Resultados e limitações](SGF_SIX_MODULE_CLOSURE_20261110.md).
|
||||
|
||||
Actualização10/11: Comercial → Todos os documentos reúne seis famílias com filtros/páginas; Caixa e relatório de inactividade foram acrescentados na mesma8085. Ver `SGF_CASH_DELIVERY.md`, `SGF_BILLING_REGISTER_DELIVERY.md` e `SGF_STOCK_INACTIVITY_DELIVERY.md`. Estas entregas não substituem a revisão visual ou a aceitação explícita.
|
||||
|
||||
Cobertura fiscal/financeira: no dropdown Contabilidade escolha Financeiro QA preparação/revisão e abra Perfis fiscais do serviço. O painel distingue IVA parcial e motores/modelos/rácios ainda pendentes. As duas funções já possuíam os direitos de consulta; não há concessões por escolher a entrada. O conhecimento documental não é importado automaticamente. Ver SGF_FISCAL_COVERAGE_DELIVERY.md.
|
||||
|
||||
Livro/mapa interno IVA QA: Contabilidade → função Financeiro preparação/revisão → Livro e mapa interno de IVA QA, ou `/fiscal/iva`. As quatro decisões já estão conservadas; consulte histórico e descarregue o CSV revisto sem repetir operações. Base862,07/IVA137,93/total1000; dedução e imposto a pagar indeterminados. Consulta QA17 também pode ler o mapa. Não apresentar como modelo oficial ou IVA completo da empresa.
|
||||
|
||||
Regras fiscais QA: Contabilidade → Regras fiscais versionadas QA, ou `/fiscal/rules`. Duas versões revistas e cinco cálculos estão conservados (dois simples e três por linhas): escolha uma versão e consulte histórico/resultados sem repetir preparações. As taxas16%/17% são artificiais neste contrato; não afirmar mudança legal. Retirada não apaga a fotografia de cálculo anterior. Referências fiscais não conferidas ficam pendentes.
|
||||
|
||||
Conferência de extracto QA: Financeiro → Conferência de extracto QA ou `/finance/bank`. O extracto já está finalizado: abertura0, débito20/crédito20, fecho0; duas correspondências escolhidas/revistas individualmente com diários2/3, histórico e relatório. Não repetir importação/decisões. Não o apresentar como banco real ou integração bancária geral; não alterou Caixa950 nem diário27.
|
||||
|
||||
Indicadores QA: Financeiro → Critérios e indicadores QA ou `/finance/indicators`. Há dois critérios revistos e dois resultados conservados: Caixa950/saldo credor QA-FORNECEDOR100=9,50vezes; despesa50/entradas1000=5,00%. Consulte versão/fontes/fracção/relatório sem repetir decisões. Não é rácio geral de liquidez ou margem, critério real ou recomendação de pagamento; série/tendência anteriores ficam indeterminadas.
|
||||
|
||||
Cálculo por linhas/preço incluído: no mesmo ecrã Regras fiscais QA, consulte os três resultados novos e descarregue o mapa interno.400+600 sem imposto e464+696 incluídos: base1000/imposto160/total1160;100 incluído:86,21+13,79, exactos2500/29 e400/29, diferenças9/2900. Não repetir confirmações para apresentar. Uma nova simulação exige escolha explícita de regra/modalidade/data/moeda e fundamento; não emite factura nem altera dívida ou diário.
|
||||
|
||||
Início operacional: actualize a página8085 e escolha «Abrir início de…» na entrada ou «Início» após entrar. Mostre o percurso/evidências e escolha uma fonte para ver os registos existentes; não repetir confirmações. Na Oficina, Painel/Equipa/Relatórios permitem pesquisar cliente, equipamento ou responsável, filtrar o estado dos apontamentos e paginar25/100. Minutos apontados/verificados e registos sem verificação favorável mantêm significados próprios; abrir a ordem continua no workflow original. Ver SGF_OPERATIONAL_INFORMATION_DELIVERY.md.
|
||||
|
||||
Contabilidade → Análise: escolha explicitamente datas (o exercício tem movimentos em10/11/2026), consulte o balancete e abra o razão pela linha da conta. Há páginas25/100, totais do filtro completo, saldo progressivo e CSV apenas da página. Não há geração de lançamentos. Uma impressão faz nova leitura; não representa um relatório certificado. Ver SGF_ACCOUNTING_REPORTS_DELIVERY.md.
|
||||
|
||||
Financeiro → Posições de clientes e vencimentos: indique a referência para classificar vencimentos e consulte documento/cliente, estado, saldo reconhecido e revisão. Saldos são actuais; não são um relatório histórico na data escolhida. Pesquise, filtre e abra a posição exacta para comprovativos sem repetir operações. CSV apenas da página. Vencimento desconhecido continua indeterminado. Ver SGF_RECEIVABLE_POSITIONS_DELIVERY.md.
|
||||
|
||||
Stock → Artigos e revisão do catálogo: entre com Armazém — Compras para preparar e com a função de conferência técnica QA para rever. QA-CATALOGO-INTEGRADO/UN já está aprovado, sem saldo inicial; consulte ficha e duas versões sem repetir decisões. Artigos anteriores só para consulta. O histórico de correcção da designação foi provado na regressão. Ver SGF_STOCK_CATALOGUE_DELIVERY.md.
|
||||
|
||||
Os scripts de vários ecrãs devolviam HTML no servidor local; a entrega foi corrigida e conferida por MIME/SHA na8085. Actualize a página antes de conferir as funções. Isto não substitui a revisão visual ainda pendente; ver SGF_CLIENT_ASSET_DELIVERY.md.
|
||||
|
||||
## Posições de fornecedores —10/11
|
||||
|
||||
Na8085, função Financeiro com consulta autorizada → Posições de fornecedores: pesquisar fornecedor/documento, filtrar estado documental e navegar25/100. O saldo vem do motor original; o resumo/CSV abrange só a página e separa moedas. A obrigação reconhecida abre o documento exacto. Vencimento sem evidência permanece desconhecido. Não confirmar pagamentos para apresentar esta consulta. Ver `SGF_PAYABLE_POSITIONS_DELIVERY.md`.
|
||||
|
||||
## Condições de vencimento de fornecedor —10/11
|
||||
|
||||
Na mesma8085, escolher Financeiro → Posições de fornecedores. A factura100MZN mostra a data original desconhecida e, separadamente, a condição administrativa QA30/11/2026. Abrir «Condições de vencimento e histórico», indicar explicitamente30/11/2026 e consultar:0 dias;01/12/2026:1 dia. Histórico conserva preparação13/aprovação14 e a referência de evidência artificial. O saldo permanece100MZN. Para a apresentação, consultar o exemplo existente; não repetir preparação/aprovação ou pagamentos. Perfis de consulta não recebem botões de preparação/revisão. O recibo próprio pode ser consultado pela chave conservada privadamente. Ver `SGF_PAYABLE_DUE_DELIVERY.md`.
|
||||
|
||||
## Oficina — relatório por abertura e CSV
|
||||
|
||||
Na8085, função Oficina gestão ou técnico já autorizado → Oficinas → Relatórios. Escolher ambas as datas de abertura e pesquisar; pode combinar referência/cliente/equipamento/responsável e estado,25/100. Exportar apenas a página consultada. Identificação/apontamentos são actuais, o intervalo é da abertura das ordens no dia local; não apresentar como fecho diário, entrega ou produção histórica. A apresentação usa ordens existentes, sem criar novas. Ver `SGF_WORKSHOP_PERIOD_REPORT_DELIVERY.md`.
|
||||
|
||||
## Obrigações e prazos administrativos QA —10/11
|
||||
|
||||
Na8085, entrar numa função Contabilidade de consulta já autorizada (por exemplo QA17) e escolher «Obrigações e prazos administrativos QA». Indicar15/12/2026 e Consultar: uma obrigação ligada ao mapa IVA interno existente, responsável13 e entrega APENAS simulada, revista14. O prazo é artificial, não legal. A referência16/12/2026 mostra1dia decorrido, independentemente da entrega administrativa. Escolher o registo e abrir o histórico: quatro versões com autores/fundamentos/impactos anteriores e posteriores. O CSV exporta apenas a página. Não repetir preparação, revisão ou descarga para provar o que já está guardado; o SHA conferido permanece na evidência. Não apresentar como modelo oficial, submissão AT ou imposto pago. Ver `SGF_FISCAL_OBLIGATIONS_DELIVERY.md`.
|
||||
|
||||
## Antiguidade de fornecedores —10/11
|
||||
|
||||
Na8085, função Financeiro com consulta de fornecedores → «Mapa de antiguidade — fornecedores». Indicar15/12/2026 e pesquisar: o saldo original100MZN é classificado em1–30dias, com15dias desde a condição administrativa QA30/11. O prazo e o atraso originais continuam desconhecidos e separados. Totais e CSV só desta página; moedas e vencimento desconhecido separados. Abrir a condição/obrigação exacta permite consultar o histórico sem repetir decisões ou pagamentos. Não apresentar como dívida histórica, prazo legal ou recomendação. Ver `SGF_PAYABLE_AGING_DELIVERY.md`.
|
||||
|
||||
## Balanço e resultados internos parciais —11/11
|
||||
|
||||
Na8085, entrar na função Contabilidade de consulta QA17 e escolher «Demonstrações internas parciais QA». No histórico, abrir o Resultado interno v2 revisto já existente. Balanço: activos classificados2155 e fornecedor100MZN; resultados: rendimentos2586,21/gastos2200/subtotal386,21. Mostrar as nove contas por classificar e o capital/resultado completo indeterminados: não é resultado da empresa nem modelo legal. As19 linhas vêm dos27 lançamentos anteriores; a ligação ao razão conserva conta/datas. O botão de CSV envia o contexto e confere o SHA antes de guardar, sem recalcular o resultado. Não repetir preparação/revisão, não criar lançamentos para apresentar. Dados, chaves e CSV de prova ficam privados. Ver `SGF_FINANCIAL_STATEMENTS_DELIVERY.md`.
|
||||
|
||||
Oficinas → Equipamentos → **Consultar ordens deste equipamento**: escolher um registo existente, consultar identificação/ordens actuais, pesquisar/paginar e abrir a ordem exacta. **Voltar ao catálogo de equipamentos** conserva a pesquisa anterior. Equipamento sem ordens mostra zero; não é necessário criar operações para apresentar. [Detalhes](SGF_WORKSHOP_EQUIPMENT_ORDERS_DELIVERY.md).
|
||||
|
||||
**7. Recursos Humanos (autónomo):** na entrada `/sgf`, abra o dropdown Recursos Humanos e escolha RH consulta, preparação ou revisão. Dentro, abra Cadastro e remunerações internas QA: cadastro QA-COLABORADOR-01, regras artificiais3/4/8 e processamento2026-11 revistos, bruto10000/líquido8900/custo10400, mapa conservado e histórico. Consultar não repete seis decisões. Os perfis Financeiros não têm acesso a RH. Ainda não há contratos, assiduidade/férias ou cálculo salarial legal. [Relatório](SGF_HUMAN_RESOURCES_DELIVERY.md).
|
||||
@@ -0,0 +1,31 @@
|
||||
# Recursos Humanos — autonomia e perfis QA
|
||||
|
||||
Directiva expressa11/11/2026: Recursos Humanos é um módulo autónomo; permissões e perfis são diferentes dos Financeiros. A estrutura e o recorte funcional de remunerações estão autorizados. **Perfis e concessões autorizados expressamente11/11: Autorizar os perfis QA próprios de RH e as concessões apresentadas.**
|
||||
|
||||
## Separação proposta
|
||||
|
||||
Sétimo módulo `human_resources`, **Recursos Humanos**, no mesmo menu horizontal/dropdown e na mesma8085. Funções: cadastro fictício, regras artificiais e processamento interno de remunerações. Usa o controlo comum de sessão/contexto/empresa/unidade e auditoria, com namespace e perfis próprios. Não copia os poderes dos perfis Financeiros, não fornece cadastros/rascunhos comerciais partilhados e não concede leitura de salários a Contabilidade por inferência.
|
||||
|
||||
O percurso funcional e o caso10000→8900/custo10400 permanecem os do [âmbito autorizado](SGF_REMUNERATIONS_SCOPE.md): preparação e revisão distintas, prévia/versionamento/dependências, correcção/cancelamento, mapa conservado/SHA/exportação/histórico/recibos. Percentagens3/4/8 são artificiais, não cálculo legal validado. Sem dívida, pagamento, salário real ou lançamento novo. A ligação futura a Financeiro/Contabilidade deverá usar contrato e direitos explícitos; ainda não executa esses efeitos.
|
||||
|
||||
As sete concessões a Financeiros13–17 por livro, aplicadas nesta continuação antes da clarificação, já foram **retiradas integralmente**, com auditoria, apenas deste bloco. Nenhum dado de cadastro ou processamento ficou persistido nesses perfis. A prova inicial de40 verificações foi anterior a esta separação e não constitui aceitação da nova fronteira de RH. As fontes antigas permanecem intactas. Os nomes antigos `remunerations.*` não serão reutilizados para conceder acesso.
|
||||
|
||||
## Matriz concreta de acessos
|
||||
|
||||
Criar três identidades exclusivamente sintéticas **novas em cada um dos dois livros já existentes**, sem contas reais, passwords públicas ou roles PostgreSQL. Identificadores físicos serão registados no acto, sem assumir que18/19/20 estão livres. Preservar a matriz e o pin dos dez perfis anteriores: usar registo separado de perfis de RH, append-only e verificado por SHA.
|
||||
|
||||
|Perfil novo|Poderes de RH|Acessos comuns indispensáveis|
|
||||
|---|---|---|
|
||||
|`hr_prepare` — RH preparação|`human_resources.remunerations.view`, `human_resources.remunerations.prepare`|`company.view` apenas empresa2; `unit.view` apenas unidade2|
|
||||
|`hr_review` — RH revisão|`human_resources.remunerations.view`, `human_resources.remunerations.review`|`company.view` apenas empresa2; `unit.view` apenas unidade2|
|
||||
|`hr_read` — RH consulta|`human_resources.remunerations.view`|`company.view` apenas empresa2; `unit.view` apenas unidade2|
|
||||
|
||||
Tenant1/empresa2/unidade2. **Três novos nomes de direito, três perfis e11 concessões por livro; seis perfis/22 concessões no total.** Dessas22,12 são acessos comuns de contexto e10 são de RH. Não conceder qualquer outro direito ou estender os perfis reais/anteriores. `company.view` permite apenas a consulta geral da empresa exigida pelo selector comum, sem gestão de empresa/unidades/acessos.
|
||||
|
||||
A decisão de separar RH não equivale à aprovação desta nova lista de concessões. A regra local exige apresentar novos poderes antes da concessão. A aprovação desta matriz permite criar somente estes perfis QA, disponibilizar o recorte na mesma8085 e executar as provas positivas, negativas, concorrência/recuperação e preservação previstas, sem autorização por campo/rubrica.
|
||||
|
||||
## Funcionalidades de RH ainda fora deste recorte
|
||||
|
||||
Contratos e alterações contratuais, assiduidade/turnos/férias/ausências, benefícios/regimes reais, cálculo legal IRPS/INSS, modelos oficiais e ligação salarial a dívida/pagamento/Contabilidade permanecem tarefas explícitas de produto. O cadastro mínimo fictício e o processamento interno não serão apresentados como RH completo. Não ampliar a recolha de dados pessoais ou poderes de perfil sem correspondência de âmbito.
|
||||
|
||||
Preservar os27 lançamentos,19 contas, Caixa950, provas válidas, seis registos, cache bloqueada e trabalho alheio. Sem nova demonstração/base/porta, SGC, publicação, candidata de Compras, aceitação/checkpoint presumidos. Visual, carga sustentada e capacidade de implantação separados.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Recursos Humanos autónomo — cadastro e remunerações internas QA
|
||||
|
||||
11/11/2026. Disponível na **mesma8085**, entrada `/sgf` → **Recursos Humanos** → consultar/preparar/rever. Dentro do módulo: **Cadastro e remunerações internas QA**, com cadastro fictício, regras artificiais e processamento. O módulo tem menu, proprietário HTTP e direitos próprios; não é uma função do Financeiro. Não depende do SGC nem de outra demonstração.
|
||||
|
||||
## Percurso utilizável
|
||||
|
||||
Cadastro pseudónimo individual → preparação/revisão distinta → regras com vigência/fontes QA revistas → escolha explícita do trabalhador/regras/período/bruto → prévia explicável → confirmação fundamentada → revisão alheia → mapa conservado/SHA, histórico e recibos. Listas com filtros SQL antes de páginas25/100, histórico paginado, escolha sem primeiro registo automático, fonte revalidada, formulário/decisão em curso protegidos e recuperação pela mesma chave/corpo. Correcção e cancelamento exigem novas versões e revisão; não substituem nem apagam resultados anteriores.
|
||||
|
||||
O exemplo efectivo é **QA-COLABORADOR-01**, período2026-11: bruto10000MZN, desconto trabalhador300, retenção artificial800, encargo patronal400, líquido interno8900 e custo interno10400. Percentagens3/4/8 são parâmetros **artificiais**, sem validação legal de IRPS/INSS. O cálculo conserva valores exactos e diferenças racionais por rubrica; valores ausentes não viram zero e impedem aprovação completa.
|
||||
|
||||
Há seis versões e seis recibos técnicos na8085: cadastro preparado/revisto, regras preparadas/revistas e processamento preparado/revisto. O mapa individual revisto é imutável, exportável mediante autenticação/contexto e SHA; o resumo da lista é apenas dos aprovados activos da página, sem soma global ou afirmação histórica. Não é recibo salarial legal nem prova de pagamento.
|
||||
|
||||
## Perfis e isolamento
|
||||
|
||||
Autorização expressa: **Autorizar os perfis QA próprios de RH e as concessões apresentadas**. Criados `hr_prepare`, `hr_review`, `hr_read`, em registo próprio append-only/SHA. São três identidades e11 concessões por livro QA existente, seis identidades/22 concessões no total: `company.view`/`unit.view` mínimos e `human_resources.remunerations.view/prepare/review` discriminados. Não se concedeu direito PostgreSQL/PUBLIC nem acesso real. Os dez perfis anteriores e os seus pins foram conservados.
|
||||
|
||||
Os perfis RH só descobrem RH e não consultam Financeiro/Contabilidade/Comercial. Os Financeiros não descobrem nem consultam RH. Cada confirmação revalida contexto/pessoa/direitos, preparador, versão/dependências e impacto, com transacção única para versão/recibo/auditoria. Prévia não grava versão. A sessão/CSRF/contexto são os mecanismos comuns existentes; descarregar usa o contexto em cabeçalho, nunca no URL.
|
||||
|
||||
As sete concessões antigas deste bloco aos Financeiros por livro, anteriores à directiva de autonomia, tinham sido retiradas e permanecem ausentes. O instalador antigo está bloqueado; não restaurar esses poderes. A nova matriz é a única autorização actual. Não repetir as seis decisões8085: progresso/chaves e resultado conservados em privado.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
-40 verificações do percurso com os perfis RH efectivos na regressão: cadastro/regras, cálculo, revisão distinta, repetição, versão obsoleta, correcção/recusa/cancelamento, exportação antiga imutável, parâmetros ausentes e recusas. Casos/versões/recibos revertidos. Não contar a passagem anterior à separação como prova nova.
|
||||
-23 fronteiras finais: fonte alterada entre prévia/confirmação e entre preparação/revisão, segunda pessoa/período, vigência/rates/atributo desconhecido, direito do preparador revogado, falha injectada após versão antes de recibo com rollback integral/recuperação única, filtros/25+2/100/ordenação, unidade estrangeira antes da contagem e histórico recusado.27 linhas SQL de paginação e uma estrangeira são fixtures de leitura, não workflows; tudo revertido.
|
||||
-Concorrência real apenas na regressão: primeira revisão conserva `FOR UPDATE` da empresa; `pg_blocking_pids` identifica a segunda sessão à espera de `transactionid`. Segunda confirmação devolve503 após5,20s; após libertação409 por versão alterada; repetição da primeira200, um par preparação/revisão e dois recibos de processamento. Seis versões/recibos de suporte ficaram só na regressão, sem efeito financeiro. Não é medição de carga sustentada.
|
||||
-16 verificações de handlers de interface com API simulada: escolha explícita, formulário, prévia,503/recuperação idêntica, fontes sem escolha automática, menu autónomo e resposta de outro tipo recusada. Prova reutilizada; não é revisão visual.
|
||||
-43 HTTP finais sobre a8085: identidades e direitos exactos, módulo disponível, seis resultados aceites reutilizados, valores/página/histórico, exportação/SHA, recusas de preparação/revisão/recibo/âmbito, separação bidireccional, autenticação401/CSRF419, dropdown de entrada e JS principal/lazy/partilhado MIME/SHA. Na primeira passagem foram feitas as seis decisões; a continuação corrigiu um URL inexistente do teste de recusa contabilística e reutilizou os resultados, sem repetir comandos de negócio.
|
||||
-71 verificações de preservação/ACL:55 conjuntos originais idênticos e todas as linhas antigas de permissões idênticas, só11 grants aprovados acrescentados, três bindings iguais,27 lançamentos/19 contas, resultados anteriores, seis registos/cache intactos. Sem nova base/porta/demo, cache clear, reinício ou alterações de direitos públicos.
|
||||
|
||||
São132 verificações dirigidas (incluindo dez leituras finais de entrada/registos) mais concorrência e71 de preservação; não somar passagens substituídas, provas pré-autorização ou a suite antiga anterior à separação. [Índice com hashes](proofs/sgf-human-resources-20261111.json). Copiados apenas os ficheiros deste bloco e assets privados compilados, com anteriores conservados. Conferência final de38 ficheiros instalados e pin de perfis inalterado após actualizar apenas o estado documental da matriz. As sete entradas e um cadastro/conjunto de regras/processamento efectivos foram confirmados sem repetir decisões. Root flags desligadas por omissão; só os dois livros QA autorizados recebem perfis e apenas a instalação8085 existente disponibiliza o percurso.
|
||||
|
||||
## Pendências explícitas
|
||||
|
||||
Este recorte não conclui Recursos Humanos completo: contratos/alterações contratuais, assiduidade/turnos/férias/ausências, benefícios/regimes reais, cálculo legal IRPS/INSS/modelos oficiais e ligação salarial a dívida/pagamento/Contabilidade continuam por implementar. Não foram criados salário real, dívida, pagamento, lançamento ou submissão. Visual, carga sustentada, armazenamento e capacidade de implantação exigem provas próprias. Sem publicação, candidata de Compras, aceitação ou checkpoint presumidos.
|
||||
@@ -0,0 +1,61 @@
|
||||
# RH — contratos, assiduidade e férias integrados
|
||||
|
||||
11/11/2026. Pedido expresso para concluir estas três áreas no módulo autónomo RH, na mesma8085. **Bloco e30 concessões QA autorizados expressamente11/11: Autorizar o bloco e as30 concessões QA apresentadas. Implementação em curso.** A conferência SELECT-only dos dois livros existentes confirma nove nomes de direito sem nenhuma concessão.
|
||||
|
||||
## Entrega única proposta
|
||||
|
||||
Completar **Contratos → planeamento/assiduidade → férias → conferência do período**, ligado ao cadastro RH já revisto. Reutilizar identidades, sessão/contexto, revisão distinta, prévia/confirmar/recuperar e auditoria existentes. Não criar outro módulo, utilizador, demonstração, base, porta ou dependência do SGC. Os perfis Financeiros não recebem acesso.
|
||||
|
||||
### Contratos
|
||||
|
||||
Escolha explícita do trabalhador fictício revisto, referência individual, modalidade interna QA (prazo explícito ou fim desconhecido/sem termo indicado), início/fim, bruto mensal MZN e evidência documental textual. Preparar, rever/recusar, corrigir, terminar e cancelar por versões e decisões distintas, com fundamento, impacto anterior/posterior, autores/datas e exportação interna conservada. Não é contrato juridicamente validado nem assinatura electrónica. Código de trabalhador e identidade do contrato são estáveis; não reutilizar a referência para outra pessoa.
|
||||
|
||||
Impedir sobreposição de contratos efectivos incompatíveis da mesma pessoa, datas invertidas e remuneração sem origem explícita. Preparação não activa contrato nem altera o cadastro ou processamento. Correcção/terminação não reescreve assiduidade, férias ou documentos revistos; mostrar dependências/impactos e recusar alterações incompatíveis até conferência individual. Sem exclusões, indemnizações, antiguidade legal ou salário proporcional presumidos.
|
||||
|
||||
### Planeamento e assiduidade
|
||||
|
||||
Data local e zona Africa/Johannesburg explícitas; intervalos previstos e declarados separados, até oito intervalos por conjunto/dia, pausas representadas por intervalos separados, minutos inteiros e limites UTC verificáveis. Registos nocturnos são divididos explicitamente por dia; não dividir nem criar linhas automaticamente. Bloquear duplicação/sobreposição e intervalos inválidos. Planeamento não comprova trabalho; declaração não revista não é assiduidade confirmada.
|
||||
|
||||
Preparação e revisão distintas, correcção/cancelamento, histórico e recibos. Plano ausente, declaração ausente ou conferência de férias em falta mantêm valores desconhecidos; declaração explícita vazia distingue-se de informação inexistente. Mostrar minutos previstos, declarados, cobertos por férias e por conferir, sem qualificar automaticamente uma falta como injustificada. Tempo fora do plano não é trabalho extraordinário autorizado. Sem relógio de ponto, biometria, localização ou dados reais.
|
||||
|
||||
### Férias
|
||||
|
||||
Condição/saldo inicial QA por pessoa e intervalo de vigência, explicitamente preparados/revistos; nenhum direito anual legal ou saldo zero é inferido. Usar minutos, com equivalência a jornadas apenas quando o plano individual a suporta. Não pressupor fins-de-semana, feriados, dias úteis, acumulação ou transição anual sem fonte/regra expressas.
|
||||
|
||||
Pedido individual de intervalos previstos → preparação/revisão → reserva → declaração de gozo/revisão → consumo; correcção/cancelamento com revisão libera ou ajusta a contribuição correspondente, preservando a versão anterior. Sem gozo automático por passagem da data. Cada pedido contribui uma única vez pelo estado efectivo: reservado, gozado ou cancelado. Revalidar saldo, contrato, plano, intervalos e conflitos na confirmação. Impedir saldo negativo, férias fora do plano/contrato e sobreposição com trabalho declarado ou outro pedido efectivo. Repetição não reserva/consome outra vez; concorrência sobre o mesmo saldo exige revalidação antes de decidir.
|
||||
|
||||
### Integração e conferência
|
||||
|
||||
Ficha do trabalhador abre exactamente os contratos, dias e pedidos escolhidos; ligações e histórico respeitam empresa/unidade/perfil. Listas com pesquisa/filtros SQL, ordenação e páginas25/100; não materializar o universo da empresa em memória. Saldo é calculado sobre estados efectivos, não sobre uma página nem pela soma de todas as versões históricas.
|
||||
|
||||
Conferência de período por pessoa identifica fontes/versões, cobertura de dias conhecidos, situações desconhecidas e conflitos; resultado revisto/exportação com SHA conservados e recuperáveis. O poder de preparar/rever esta conferência é `human_resources.attendance.prepare/review`, exigindo também consultas de contratos/férias/remunerações. O relatório não qualifica mês completo sem evidência suficiente para todos os dias aplicáveis.
|
||||
|
||||
Novas preparações de remuneração poderão escolher explicitamente contrato revisto, captando versão/vigência/bruto e revalidando-os na confirmação. Não escolher contrato automaticamente, propagar alterações ou recalcular resultados anteriores. As seis versões/recibos e o mapa salarial actual da8085 permanecem intactos; a ligação para uma preparação salarial nova é testada na regressão e não cria outro processamento8085. O relatório identifica o processamento anterior como sem ligação contratual histórica comprovada; não inventa essa relação.
|
||||
|
||||
## Exemplo efectivo na8085
|
||||
|
||||
Usar somente **QA-COLABORADOR-01**, já revisto. Contrato interno QA-CONTRATO-01, início01/11/2026/fim31/12/2026, bruto mensal10000MZN, sem alterar o cálculo salarial existente. Plano explícito nos dias09 e10/11,08–12 e13–17 (480min/dia). Dia09: declaração480min e revisão distinta. Dia10: condição QA960min, pedido480min, reserva e gozo declarado/revisto; disponível final480min, reservado0, gozado480min. A referência do ensaio é11/11/2026.
|
||||
|
||||
O saldo960min é um **orçamento fictício declarado**, não um direito legal a férias. Só dois dias estão cobertos pelo exemplo; os restantes não se tornam faltas nem tornam o mês completo. Correcção, recusa, terminação/cancelamento, concorrência e falha parcial são demonstradas na regressão existente, preservando o percurso positivo8085.
|
||||
|
||||
## Novos direitos apresentados antes da concessão
|
||||
|
||||
|Área|Consulta dos três perfis RH existentes|Preparação — hr_prepare|Revisão — hr_review|
|
||||
|---|---|---|---|
|
||||
|Contratos|`human_resources.contracts.view`|`human_resources.contracts.prepare`|`human_resources.contracts.review`|
|
||||
|Assiduidade/conferência|`human_resources.attendance.view`|`human_resources.attendance.prepare`|`human_resources.attendance.review`|
|
||||
|Férias|`human_resources.leave.view`|`human_resources.leave.prepare`|`human_resources.leave.review`|
|
||||
|
||||
`hr_read` conserva apenas consultas. **Nove nomes novos e15 concessões por livro QA existente;30 concessões no total**, exclusivamente tenant1/empresa2/unidade2. Reutilizar os três perfis existentes em cada livro: zero utilizadores/perfis/roles novos, zero concessões a Financeiro, contas reais ou PUBLIC. `company.view`, `unit.view` e consultas de cadastro/remunerações já existem; não os conceder outra vez.
|
||||
|
||||
Aplicar a extensão por decisão de acesso própria e auditada; não alterar o pin/registo append-only da matriz inicial dos perfis RH nem o dos dez perfis anteriores. [Matriz exacta](integration/sgf-human-resources-personnel-access-proposal.json). Os direitos de remunerações não concedem estas operações. A regra local exige apresentar poderes novos antes de conceder; a decisão proposta cobre todo o bloco, sem autorizações por campo, estado, rubrica ou teste.
|
||||
|
||||
## Validação e preservação
|
||||
|
||||
Confirmar pessoa, sessão/CSRF, módulo/empresa/unidade, direitos actuais do autor/preparador/revisor, versão, fontes, vigências, conflitos e saldo dentro da transacção. Versionar prévia/impacto, registar autor/data/fundamento e estados anterior/posterior, persistir versão/efeitos administrativos/recibo/auditoria atomicamente. Commit incerto conserva corpo/chave e permite recuperar o mesmo resultado, sem nova execução; acesso continua a ser revalidado.
|
||||
|
||||
Provas novas apenas das áreas/fronteiras alteradas: duas pessoas/contratos, pesquisas/filtros25/100, permissões e isolamento entre unidades/módulos, sobreposição, valores desconhecidos, fontes/versões alteradas, saldo insuficiente, correcção/cancelamento/libertação, concorrência com bloqueador identificado e resultado após libertação, repetição sem duplicação, falha parcial/recuperação e CSV/SHA. Fixtures de volume/casos negativos revertidas. Reutilizar132 provas de RH/remunerações e restantes provas válidas; não repetir salários, lançamentos, Caixa ou percursos alheios.
|
||||
|
||||
Já preparado em código local, sem persistência/instalação: `PersonnelTime`, cálculo de intervalos/estado desconhecido/conflitos/saldo efectivo, com22 verificações puras. Não constitui entrega das interfaces, writers, acessos ou percurso integrado; estes ficam por concluir após a decisão de acessos. Não executar migrations globais ou alterações no destino real; tabelas técnicas novas apenas nos dois livros QA existentes, com guardas e flags próprias desligadas por omissão.
|
||||
|
||||
Preservar seis registos protegidos, cache bloqueada,27lançamentos/19contas, Caixa950, seis versões/recibos de remuneração8085 e demais dados/provas/trabalho alheio. Sem salário/colaborador/contrato real, descontos de faltas, processamento/dívida/pagamento/GL novos na8085, cálculo legal IRPS/INSS, modelos oficiais, submissão, novas demonstrações/SGC, publicação, candidata de Compras, aceitação/checkpoint ou implantação presumidos. Visual, carga sustentada e capacidade de implantação permanecem separados.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Recursos Humanos autónomo — preparação local (histórico)
|
||||
|
||||
Substituída pela [entrega funcional](SGF_HUMAN_RESOURCES_DELIVERY.md), após autorização expressa dos perfis próprios11/11. As pendências de acesso/instalação descritas abaixo são históricas.
|
||||
|
||||
11/11/2026. Directiva do utilizador incorporada: **Recursos Humanos é um módulo autónomo**, com identidade, menu e perfis diferentes dos Financeiros. Ainda não está disponibilizado na8085. O código local foi preparado e compilado em privado; as permissões próprias aguardam a [decisão concreta](SGF_HUMAN_RESOURCES_AUTONOMY_SCOPE.md).
|
||||
|
||||
## Preparado
|
||||
|
||||
- Serviço em `app/Modules/HumanResources`, controlador e rotas com proprietário `human_resources`; gates próprios, namespace `human_resources.remunerations.*` e registo de perfis separado por SHA. Sem IDs13/14 fixos no motor nem ampliação da matriz aceite dos dez perfis antigos.
|
||||
- Ecrã RH próprio: cadastro fictício, regras versionadas, processamento, filtros/SQL25/100, escolha explícita de fontes/registo, prévia e fundamento, confirmação/recuperação, histórico, detalhe e descarga autenticada com SHA. O módulo não oferece os cadastros/rascunhos comerciais partilhados nem herda poderes Financeiros.
|
||||
- Preparação/revisão distintas por registo/versão, validação de pessoa/contexto/dependências, idempotência e persistência transaccional das versões/recibos/auditoria. Valores racionais, truncagem por rubrica e diferenças exactas; parâmetros ausentes não viram zero. Resultado individual revisto/exportação é conservado; resumo da lista refere só aprovados activos da página.
|
||||
- Exemplo artificial10000 bruto,300+800 descontos,400 encargo patronal,8900 líquido interno e10400 custo. Não representa cálculo legal de IRPS/INSS nem salário pago. Nenhuma dívida, pagamento ou lançamento é criado.
|
||||
|
||||
## Acessos e estado efectivo
|
||||
|
||||
A aprovação inicial autorizava sete concessões por livro aos Financeiros13–17. Foram aplicadas nos dois livros, mas a directiva posterior determinou perfis distintos. Essas14 concessões novas foram retiradas com auditoria; nenhum cadastro/regra/processamento tinha sido conservado na8085. Não se alteraram os acessos anteriores.
|
||||
|
||||
O novo instalador de perfis falha sem a decisão explícita da nova matriz. A proposta é de **três perfis e11 concessões por livro existente**, seis perfis/22 concessões no total:12 comuns de contexto e10 específicas de RH. Nenhuma dessas concessões foi aplicada; nenhuma identidade RH foi criada. Não se reutilizam os nomes antigos `remunerations.*`. A extensão inicial da restrição de nomes admissíveis permanece sem grants; não constitui acesso. Não foram concedidos direitos PostgreSQL/PUBLIC.
|
||||
|
||||
Apenas as três tabelas técnicas `rm_meta/rm_versions/rm_commands` foram preparadas nos livros QA já existentes, sob a primeira autorização. As versões/recibos estão vazios. O bundle, rotas e serviço novos **não foram copiados para a8085**; não houve activação, cache clear ou reinício.
|
||||
|
||||
## Evidências e trabalho por concluir
|
||||
|
||||
[Índice das provas](proofs/sgf-human-resources-preparation-20261111.json):16 verificações de handlers reais com API simulada (incluindo503 e repetição do mesmo corpo/chave),11 verificações de cálculo/ausência de poderes em cada livro e65 de preservação.56 conjuntos originais e três bindings idênticos,27 lançamentos e todos os dados anteriores preservados. Seis registos e cache não foram alvo de comandos. Compilação privada e sintaxe PHP aprovadas; renderização simulada não é revisão visual.
|
||||
|
||||
As40 verificações funcionais iniciais foram anteriores à separação de RH, com casos/versões/recibos revertidos na regressão. Conservam-se como prova do núcleo inicial; **não são contadas como validação da nova fronteira de perfis ou do percurso HTTP RH**.
|
||||
|
||||
Após autorização dos perfis: criar apenas as identidades/grants discriminadas; testar o percurso completo com a identidade RH efectiva, dependências/vigências/cadastro suspenso, isolamento, filtros/paginação, concorrência observada/pós-libertação e recuperação de falha parcial; disponibilizar limitadamente e confirmar o exemplo efectivo na mesma8085, preservando os anteriores. Estes testes positivos/concorrência/HTTP RH ainda estão pendentes; o código preparado não é declarado entrega funcional concluída.
|
||||
|
||||
Contratos/alterações contratuais, assiduidade/turnos/férias/ausências, benefícios/regimes reais, cálculo legal IRPS/INSS/modelos oficiais e ligação salarial a dívida/pagamento/Contabilidade continuam lacunas de produto. Este bloco não conclui Recursos Humanos completo. Visual, carga sustentada e capacidade de implantação permanecem separados. Sem novas demonstrações, bases/portas, SGC, publicação, candidata de Compras, aceitação ou checkpoint.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Livro e mapa interno de IVA QA — entrega na8085
|
||||
|
||||
10/11/2026. `SGF-IVA-ASSESSMENT-FORM-QA-v1`, [âmbito aprovado](SGF_IVA_ASSESSMENT_NEXT_SCOPE.md). Implementação funcional no mesmo SGF, sem SGC ou nova demonstração. Entrada: **Contabilidade → Livro e mapa interno de IVA QA → Abrir livro, mapa e histórico**, ou `/fiscal/iva` após escolha da função autorizada.
|
||||
|
||||
## Percurso conservado
|
||||
|
||||
O preparador Financeiro13 escolheu explicitamente a factura-recibo fictícia já emitida, base862,07/IVA documental137,93/total1000,00 MZN, período2026-11. O revisor14 conferiu a mesma versão do livro. O preparador13 gerou o mapa interno da revisão exacta; o revisor14 confirmou-o. **Quatro versões fiscais novas** conservadas na8085: livro preparado/revisto e mapa preparado/revisto. A classificação é de saída QA, não determina o regime legal da empresa.
|
||||
|
||||
Exportação CSV congelada e verificável por SHA256, com referência FR, base/IVA/total, regra/perfil/período/SHA do documento e ID do livro revisto. **IVA dedutível e imposto a pagar indeterminados**, nunca zero por falta de aquisições/deduções. Não é apuramento integral da empresa, Modelo A oficial ou transmissão às autoridades. A factura técnica subjacente não entra como segunda origem; nenhuma outra factura/crédito foi classificada automaticamente.
|
||||
|
||||
O mesmo documento/PDF, recebível, recebimento, afectação e diário foram usados por leitura, sem recriar ou recalcular o facto emitido. Não há lançamento fiscal novo. Diário27, Caixa fechada950 e período contabilístico QA aberto preservados.
|
||||
|
||||
## Histórico, conferência e recuperação
|
||||
|
||||
`fx_versions` conserva estados, predecessor, preparador/autor, data, fundamento, fotografia fiscal e dependências; `fx_commands` conserva pedido único, hash e resultado com estado anterior/posterior. Trigger impede escrita sem direito, salto de versão, predecessor diferente, revisão própria e alteração/remoção da história. SQL limitado às bases QA por guarda física existente; PUBLIC revogado.
|
||||
|
||||
Prévia em savepoint revertido mostra impacto, valores/pendências e ausência de lançamento/transmissão. Confirmação individual revalida contexto, direitos do executor e preparador, origem congelada/SHA/associação Comercial, versão documental, correcções/reversões, período aberto e revisão do livro. A prévia cifrada expira600s. O bloqueio da empresa é o mesmo usado pela composição integrada; não se cria writer financeiro ou transacção distribuída com efeitos no livro nativo.
|
||||
|
||||
Repreparação produz sucessor; mapa anterior passa a desactualizado e a exportação exige nova conferência. Recibo histórico por chave própria pode ser recuperado noutra sessão sem executar novamente a decisão. Repetição da confirmação já concluída devolve resultado histórico identificado; nova execução com dados diferentes sob a mesma chave é recusada. Recuperar recibo não torna uma versão antiga actual.
|
||||
|
||||
Filtros livro/mapa e páginas25/100 no servidor; não se carrega todo o histórico. Fonte autorizada escolhida na interface, sem primeiro documento preseleccionado. Paginar conserva evidência/fundamento não submetidos; prévia/confirmação protege campos e histórico. Detalhe mostra a versão escolhida. Sem direitos de escrita, o formulário fica desactivado. Não se presume disponibilidade se a origem estiver bloqueada.
|
||||
|
||||
## Direitos aplicados
|
||||
|
||||
Seis nomes/14 concessões por cada uma das **duas bases QA existentes**,28 no total, exactamente [como aprovado](integration/sgf-iva-assessment-access-proposal.json). Preparação13, revisão14, consultas13–17; sem novo utilizador/PGrole/acesso real. Direitos separados dos perfis de serviço e da emissão documental. Configuração root desligada; disponibilização apenas na8085 com binding privado por hash.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
|Prova|Resultado|
|
||||
|---|---|
|
||||
|38 regressão, rollback integral|Origem FR exacta, prévia sem persistência, desconhecido≠zero, actor/origem/período/campos indevidos, versão antiga, revisão distinta, recuperação, mapa não revisto/desactualizado, revogação do preparador, contexto/expiração, falha após evento com rollback e recuperação, origem incompatível e domínios antigos intactos.|
|
||||
|Concorrência na regressão|Primeira revisão mantém lock da empresa; segunda recebe503/Retry-After5 após cerca5s. Após libertação:409 para versão antiga, uma revisão válida e primeira chave recuperada sem duplicação.|
|
||||
|10 fronteiras/SQL/paginação, rollback|128 versões de metadados para percorrer25/100, filtros, tenant override, páginas inválidas, histórico imutável, writer sem direito, salto de versão e preparador indevido. Fixtures não representam novas facturas/declarações/lançamentos.|
|
||||
|23 HTTP na8085|Quatro confirmações explícitas e respectivas repetições sem duplicação, revisão distinta, estados/bloqueios, CSV/checksum/valores, recibo noutra sessão, isolamento e ecrã acessível. Progresso guardado para não repetir decisões válidas.|
|
||||
|14 DOM→HTTP|Consulta, fonte inicialmente vazia, preservação do formulário ao paginar, prévia real revertida, impacto/bloqueio de controlos, cancelamento e recuperação/histórico. **Zero POSTs de confirmação**, quatro versões da instalação intactas. Não é navegador.|
|
||||
|Preservação SELECT-only|15 tabelas originais completas comparadas, incluindo documentos/PDF, fiscalidade, recebíveis, Caixa, clientes, Stock, diário e períodos. Linhas de concessões anteriores idênticas; apenas14 adições aprovadas. Binding original intacto.|
|
||||
|
||||
[Índice verificável](proofs/sgf-iva-assessment-20261110.json). Provas detalhadas/dumps privados fora do repositório; backups anteriores retidos. A tentativa inicial do harness de concorrência usou uma requisição GET num controlador POST e falhou na validação, não em carga/concorrência. Os dois eventos QA então preparados/revistos foram conservados na regressão, sem apagar evidências; a prova corrigida mantém mais dois, totalizando quatro eventos fiscais só nessa regressão. Apenas a execução corrigida conta como prova de concorrência. Não ocorreu na8085.
|
||||
|
||||
Não foram repetidos percursos de Compras, emissão, recebimentos, Caixa ou contabilidade. Seis registos/cache/trabalho alheio intactos; sem novas bases/portas/demos, índices no destino, SGC, operações/direitos reais, publicação, candidata, aceitação/checkpoint ou capacidade de implantação.
|
||||
|
||||
## Limitações restantes
|
||||
|
||||
Uma origem FR e período QA, apenas saídas e mapa interno. IVA operacional geral, deduções/regularizações, múltiplos tratamentos, restantes impostos/remunerações, modelos oficiais, reconciliação bancária e análise financeira ampla **continuam pendentes**. O inventário de conhecimento não equivale a motores implementados ou vigência legal verificada. Não se reabre período, não se redistribui imposto de créditos nominais nem se altera documento emitido.
|
||||
|
||||
Revisão visual permanece bloqueada e não foi repetida. Carga sustentada, retenção/órfãos, arranque completo e implantação exigem evidência própria. As provas actuais não validam uso real, representação legal ou dimensão geral de empresa.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Proposta de autorização — livro e mapa interno de IVA QA
|
||||
|
||||
Estado: **autorizado expressamente e entregue**; ver `SGF_IVA_ASSESSMENT_DELIVERY.md`. A proposta abaixo conserva o âmbito aprovado. `SGF-IVA-ASSESSMENT-FORM-QA-v1`,10/11/2026. Esta proposta resulta da comparação do documento «Incorporacao de impostos e analise ao SGF.docx» com o código e o acervo já inventariado na secção10/11 de `SERVICE_INVOICE_CALCULATION_SPEC.md`.
|
||||
|
||||
## Entrega completa proposta
|
||||
|
||||
Na mesma8085 e regressão existente: escolher explicitamente a factura-recibo QA1000 já emitida no bloco documental (base862,07/imposto documental137,93), fixar documento/perfil/regra/versão/período e preparar uma classificação fiscal de ensaio. Outra pessoa confere a mesma versão. O livro de saídas e um **mapa interno de IVA QA** mostram o valor e a origem, com histórico, decisão e representação recuperáveis. Não se recalcula nem altera o documento emitido, recebível, afectação, Caixa ou diário.
|
||||
|
||||
O resultado é expressamente relativo à origem QA seleccionada: base862,07 e imposto137,93. Não é apuramento completo da empresa ou montante legal a pagar. Dedução, aquisições ou outras origens não classificadas permanecem pendentes/indeterminadas; ausência de informação não se transforma em dedução zero. Sem cópia da factura técnica subjacente à factura-recibo, nem classificação automática das restantes facturas/créditos. Crédito nominal sem decomposição fiscal comprovada continua pendência, sem repartição proporcional presumida.
|
||||
|
||||
Estados separados: preparação → revisão distinta do livro → preparação do mapa a partir da versão revista → revisão distinta do mapa → consulta/exportação interna identificada como ensaio. Sem transmissão às autoridades, comprovativo de entrega oficial inventado ou formulário rotulado como modelo oficial validado. Reutilizar funções/fontes existentes quando compatíveis, preservando a política monetária e sem depender do portal/SGC em execução.
|
||||
|
||||
Prévia apresenta origens, tratamento, montantes, pendências e impacto. Confirmação revalida pessoa/direitos/empresa/unidade/contexto, documento e decisão originais, versões, hash e estado do período QA. Correcção gera sucessor, não altera história. Um mapa antigo fica identificado como desactualizado quando a origem ou a revisão muda. Pedidos com a mesma chave recuperam o mesmo resultado, sem duas classificações/mapas.
|
||||
|
||||
## Direitos e destinatários exactos
|
||||
|
||||
Seis nomes novos, **14 concessões por livro QA existente**,28 no conjunto8085/regressão, todos no tenant1/empresa2/unidade2:
|
||||
|
||||
|Direito|Perfis QA existentes|
|
||||
|---|---|
|
||||
|`fiscal_assessments.view`|Financeiro preparação13/revisão14; Contabilidade preparação15/revisão16; consulta17|
|
||||
|`fiscal_assessments.prepare`|Financeiro preparação13|
|
||||
|`fiscal_assessments.review`|Financeiro revisão14|
|
||||
|`fiscal_forms.view`|Financeiro preparação13/revisão14; Contabilidade preparação15/revisão16; consulta17|
|
||||
|`fiscal_forms.prepare`|Financeiro preparação13|
|
||||
|`fiscal_forms.review`|Financeiro revisão14|
|
||||
|
||||
[Lista integral](integration/sgf-iva-assessment-access-proposal.json). Consulta do livro/mapa abrange a fotografia fiscal da origem QA seleccionada, não concede descarga ou consulta geral dos documentos de outros módulos. Reutiliza as consultas documentais já aprovadas dos preparador/revisor. Sem alterar a política dos perfis existentes, nomes de utilizadores, roles PostgreSQL ou direitos reais/PUBLIC. Estes seis direitos estão ausentes e não estão incluídos nas concessões anteriores de perfis fiscais ou Caixa; por isso precisam de decisão antes da aplicação.
|
||||
|
||||
## Instalação e provas após autorização
|
||||
|
||||
Persistência append-only e recibo de comando no host QA existente, sem duplicar documentos/livro contabilístico. Sem novas bases, portas ou demonstrações. Provar primeiro na regressão existente: selecção explícita, origem dupla factura/FR, autor/revisor, acessos indevidos e empresa/unidade, exactidão, desconhecido≠zero, referência desactualizada, concorrência, repetição e recuperação após falha. Ensaiar geração e consulta do mapa interno a partir da revisão exacta e invalidação após mudança. Só depois disponibilizar limitadamente na8085, conservando os27 lançamentos, Caixa fechada950, exemplos, seis registos e cache. Reutilizar as restantes provas válidas.
|
||||
|
||||
Esta decisão autoriza o bloco inteiro, não pedidos de aprovação por campo/teste. Não abrange novos motores IRPS/IRPC/ISPC/ICE/INSS, cálculo de remunerações, preço IVA incluído ou múltiplos tratamentos, aquisição/dedução/regularizações reais, modelos oficiais, novos lançamentos, reabertura, dinheiro/direitos reais, publicação, candidata de Compras, aceitação/checkpoint ou capacidade de implantação. Essas lacunas permanecem explicitadas na matriz global, não são declaradas resolvidas pelo mapa QA.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Cálculo QA por linhas e preço incluído — entrega local
|
||||
|
||||
10/11/2026 · `SGF-MULTI-LINE-INCLUDED-QA-v1`. Política expressamente aprovada pelo utilizador. Código, ecrã e persistência auditada integrados na instalação8085 existente, em **Contabilidade → Regras fiscais versionadas QA** (`/fiscal/rules`). Sem direito, concessão, esquema ou demonstração novos.
|
||||
|
||||
## Funcionalidade entregue
|
||||
|
||||
Preparador13 escolhe explicitamente uma versão revista, data, moeda e modalidade de preço, informa1–25 linhas de referência/quantidade/preço e fundamento, confere impacto por linha/agregado e confirma um retrato recuperável por chave. A taxa vem da definição QA conferida no servidor; o cliente não a fornece. Ausência, conflito, vigência, moeda ou fonte incompatíveis deixam o cálculo pendente. A confirmação revalida contexto, autoridade e dependências actuais. Consulta17 lê resultado conservado, avaliação actual e mapa CSV com checksum; referências são escapadas contra fórmulas de folhas de cálculo. Não se escolhe automaticamente a regra ao abrir o histórico.
|
||||
|
||||
A política `SGF-QA-LINE-TRUNCATE2-INCLUDED-RESIDUAL-v1` usa aritmética racional. Trunca o imposto de cada linha para duas casas; no preço incluído, base documental=bruto−imposto documental. Conserva exactos e as duas diferenças, somando os valores documentais das linhas. Base sem imposto ou bruto incluído que exijam fracções de cêntimo ficam pendentes, sem truncagem silenciosa.
|
||||
|
||||
|Caso efectivamente conservado na8085, taxa artificial16%|Base documental|Imposto documental|Total|
|
||||
|---|---:|---:|---:|
|
||||
|Sem imposto,400+600|1000,00|160,00|1160,00|
|
||||
|Incluído,464+696|1000,00|160,00|1160,00|
|
||||
|Incluído,100|86,21|13,79|100,00|
|
||||
|
||||
No último caso, base exacta2500/29, imposto exacto400/29, diferença base documental−exacta9/2900 e imposto exacto−documental9/2900. Existem agora **cinco cálculos**, incluindo os dois antigos byte a byte intactos; quatro eventos de regra sem alteração. Estes são cálculos/mapas internos, sem emissão de factura, dívida, pagamento ou lançamento.
|
||||
|
||||
## Provas dirigidas e concorrência
|
||||
|
||||
- 34 verificações de regressão com rollback: valores/modos, fracções/diferenças, soma por linha em vez de recálculo global, limites1/25/26, entradas indevidas, acesso, moeda/vigência, retirada de regra, histórico e preservação de dez tabelas.
|
||||
- Três verificações de falha/recuperação: falha na gravação do recibo reverte também o cálculo; recuperar a mesma intenção não duplica.
|
||||
- 29 verificações HTTP na8085: três confirmações guardadas, repetição das mesmas chaves, relatórios/checksums, quantidades exactas de registos, fonte actual e recusas de autoridade/contexto/campos.
|
||||
- 16 verificações do cliente com encaminhamento ao HTTP real: uma prévia revertida, **zero confirmações**, edição de linhas, impacto exacto, bloqueio durante prévia, conservação do formulário ao paginar, histórico e recuperação.
|
||||
|
||||
Total80 verificações, mais ensaio concorrente apenas na regressão. A segunda confirmação da **mesma chave** aguardou o mutex administrativo de empresa já ocupado pela primeira e atingiu o limite de espera: HTTP503, `Retry-After:5`, cerca5,17s. Após a primeira transacção libertar o bloqueio, a recuperação terminou HTTP200 com `replayed=true` e **um único cálculo**. Isto distingue-se das provas anteriores de decisões diferentes/versão alterada, que recusaram409. A retirada de regra entre prévia e confirmação também recusa409 neste incremento. Não foi alterado o limite nem removido o bloqueio.
|
||||
|
||||
[Índice com SHA das provas e fontes](proofs/sgf-multi-line-included-20261110.json). As suites anteriores válidas foram reutilizadas, sem repetir operações financeiras ou reescrever os seus resultados históricos. O ensaio do cliente usa DOM simulado; não é revisão visual de navegador.
|
||||
|
||||
## Preservação e limites
|
||||
|
||||
Comparação de26 conjuntos de linhas originais e binding: intactos, incluindo os dois cálculos antigos e todas as concessões. Apenas três novos cálculos e respectivos recibos acrescentados. Diário27, Caixa fechada950, IVA4, regras4, bancos7, critérios4/resultados2 preservados. Sem comandos/conexões dirigidos aos seis registos protegidos ou à cache bloqueada; trabalho alheio preservado. Backup e dados privados permanecem fora do repositório.
|
||||
|
||||
A configuração do repositório permanece desligada por omissão. Apenas a modalidade QA aprovada foi disponibilizada na8085 existente. Sem SGC, publicação, candidata de Compras, aceitação ou checkpoint. Taxas16%/17% artificiais; não comprovam vigência legal. Impostos/regimes diferentes por linha, isenções, créditos negativos, dedução, emissão documental por múltiplas linhas, modelos oficiais e fiscalidade operacional geral não estão entregues por este bloco. Revisão visual, carga sustentada e capacidade de implantação continuam pendentes com evidência própria.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Proposta de decisão — cálculo QA por linhas e imposto incluído
|
||||
|
||||
`SGF-MULTI-LINE-INCLUDED-QA-v1`,10/11/2026. **Política aprovada e implementação entregue; ver [relatório](SGF_MULTI_LINE_INCLUDED_DELIVERY.md).** A descrição seguinte conserva a decisão proposta e os seus limites. Continuação dentro do catálogo de regras existente na8085; sem novos direitos ou concessões. O caso aprovado anterior calcula uma base por taxa artificial; não decidiu a representação documental do preço com imposto incluído.
|
||||
|
||||
## Percurso funcional proposto
|
||||
|
||||
No mesmo ecrã de regras fiscais QA: escolher explicitamente regra/versão/data/moeda, modalidade de preço e entre1 e25 linhas, com quantidade/preço em decimais exactos. Preparador13 vê impacto por linha e agregado, confirma o retrato de cálculo e recupera-o por chave/histórico/relatório interno. Usa apenas versões QA revistas14 já existentes e respectivos parâmetros, sem importar taxa do cliente ou escolher regra automaticamente.
|
||||
|
||||
Não emite factura, reconhece dívida, cria pagamento, lançamento ou altera o livro/mapa IVA. É cálculo/mapa interno por linhas no mesmo núcleo de regras, sem demonstração/base/porta nova. Reutiliza `fiscal_rules.view/prepare/review` já aprovados; não há nova concessão nem activação fiscal legal. Os resultados antigos ficam intactos.
|
||||
|
||||
## Política de representação que precisa de decisão
|
||||
|
||||
- **Preço sem imposto:** base exacta quantidade×preço. Mantém a política anterior: base não representável em duas casas fica pendente, sem truncagem silenciosa. Imposto exacto por linha, imposto documental truncado para duas casas; total da linha =base documental+imposto documental.
|
||||
- **Preço com imposto:** bruto exacto quantidade×preço tem de ser representável em duas casas, senão fica pendente. Base exacta =bruto/(1+taxa), imposto exacto =bruto−base exacta, ambos racionais preservados. **Proposta:** truncar o imposto por linha para duas casas e decompor a base documental como bruto−imposto documental. Preservar separadamente a diferença da base e a do imposto; não declarar base documental igual à exacta.
|
||||
- Agregar **os montantes documentais das linhas**, sem recalcular um imposto de documento que substitua a soma. Preservar exactos/diferenças agregados. Regimes/taxas diferentes por linha, isenções, créditos negativos, dedução, classificação legal e modelos oficiais ficam fora deste bloco.
|
||||
|
||||
Casos artificiais para conferir com regra QA16% vigente no seu intervalo (não afirmação legal):
|
||||
|
||||
|Entrada|Base documental|Imposto documental|Total|
|
||||
|---|---:|---:|---:|
|
||||
|Sem imposto:400+600|1000,00|160,00|1160,00|
|
||||
|Incluído:464+696|1000,00|160,00|1160,00|
|
||||
|Incluído:100|86,21|13,79|100,00|
|
||||
|
||||
No último caso, base exacta2500/29 e imposto exacto400/29. Diferença base documental−exacta =9/2900; diferença imposto exacto−documental =9/2900. São preservadas, não arredondadas para zero. [Protótipo matemático de revisão](../scripts/sgf-included-policy-preview.php) não abre aplicação/base nem altera dados. A hipótese operacional não comprova conformidade fiscal da representação.
|
||||
|
||||
O caso artificial17% da sucessora mantém a vigência já aprovada, sem mudança legislativa presumida. A fonte/regra será conferida no servidor pelo mesmo contrato e algoritmo seguro; entradas não executam código/expressões livres. Ausência/conflito/versão antiga/data/moeda incompatível produzem pendência, sem taxa zero por omissão.
|
||||
|
||||
## Provas e fronteiras
|
||||
|
||||
Reutilizar provas válidas de regra/autoridade/source provider; acrescentar exactidão por linha/agregado, modos explícitos, diferenças racionais, quantidades/preços inválidos, limites1/25, corpo/campos indevidos, fonte/data/contexto/versão, concorrência/repetição/falha/recuperação e histórico sem reescrita. Primeiro regressão existente, depois casos completos na8085, sem repetir confirmações/emissões/recebimentos/lançamentos anteriores.
|
||||
|
||||
Preservar27 lançamentos, Caixa950, IVA4, regras4/cálculos antigos2, bancos7, critérios financeiros4/resultados2, seis registos/cache/trabalho alheio. Sem novo direito, perfil, PGrole, esquema financeiro, efeito de negócio financeiro, SGC/portal, dados/acessos reais, taxa real, reabertura, publicação/candidata, checkpoint/aceitação ou capacidade de implantação. Interface/relatório identificam sempre ensaio e política exacta. Fiscalidade operacional geral, emissão por múltiplas linhas, outros impostos/modelos oficiais, visual/carga continuam separados.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Próximo bloco de conclusão — decisão única de direitos QA
|
||||
|
||||
Estado: **autorizado expressamente em10/11/2026 — «Autorizar o bloco QA e os direitos discriminados»; implementação em curso**. Não presumir concessão, execução ou aceitação antes das provas e do registo de aplicação. Segue a directiva executiva de continuar todas as funcionalidades em falta. Agenda/disponibilidade e cadastro/reutilização de equipamentos avançaram com direitos existentes; esta decisão não reabre essas entregas nem o circuito já concluído de18 lançamentos.
|
||||
|
||||
## Bloqueio concreto
|
||||
|
||||
O menu ainda identifica orçamentos comerciais/reparação, factura-recibo, recibo e nota de crédito como não implementados. Stock mínimo/políticas e devoluções físicas a fornecedores exigem funções nativas de fornecimentos/disposição que o perfil actual não possui. Não usar `billing_drafts.manage` (administração de acessos), a autorização técnica de tarefas ou `stock.view` como aprovação comercial, nota de crédito ou poder de saída física adicional.
|
||||
|
||||
A regra do proprietário exige apresentar direitos novos antes de conceder acessos; as instruções locais exigem confirmação concreta de novas concessões. A directiva executiva permite implementar; não altera por si a lista de direitos dos perfis. A [matriz proposta](integration/sgf-remaining-functions-access-proposal.json) apresenta todos os destinatários e limites deste bloco para uma decisão agrupada.
|
||||
|
||||
## Implementação abrangida pela decisão
|
||||
|
||||
1. **Orçamentos de Comercial e de reparação:** mesmo motor versionado de proposta1000MZN e proposta de Oficina500MZN, linhas e origens explícitas, validade, preparação e revisão distintas, decisão do cliente com comprovativo, rejeição/caducidade/revisão preservadas. Conversão deliberada, única e auditada para os rascunhos existentes; sem aceitar automaticamente ou facturar por aceitar um orçamento.
|
||||
2. **Documentos sintéticos adicionais:** PDF/teste de Recibo ligado à afectação efectiva400; Nota de crédito100 ligada a uma **nova** factura de teste1000; aplicação distinta no novo recebível (1000−400−100=500), sem alterar a factura original ou presumir devolução de dinheiro/stock. Factura-recibo1000 de outra origem nova, emissão e recebimento com decisões distintas e conclusão atómica, sem segundo documento/dívida. Usar exclusivamente o cálculo documental de teste já autorizado862,07+137,93=1000; não adoptar outra taxa/regra legal. Numeradores/séries QA próprios, referências, PDF/histórico, limites acumulados, anulação técnica/reversão ligada ao original em período QA aberto, relatórios e mesmo núcleo contabilístico. Não reabrir período ou alterar documentos antigos.
|
||||
3. **Stock mínimo e políticas:** UI/read model sobre `SupplyPlanning` original; preparar e conferir parâmetros de artigo/armazém, mínimos e quantidades físicas/lotes de origem. Mostrar falta de configuração como desconhecida. Não transformar sugestão em compra automática ou duplicar reservas/orçamento; conversões para requisições exigem decisão própria no workflow existente. Usa direitos existentes dessa continuação; não concede funções adicionais de sugestão/reserva/importação implicitamente.
|
||||
4. **Devolução física ao fornecedor:** `InventoryDispositions`/`StockWorkflow` originais, preparação, revisão distinta e execução por Armazém diferente do revisor. Artigo **novo**, recepção10UN com taxa QA20MZN, devolução2UN/40, saldo8UN/160; não consumir os artigos/exemplos actuais. Origem da recepção, elegibilidade acumulada, lote quando aplicável e comprovativo físico conferidos; a saída não reduz automaticamente dívida ou cria nota de crédito. Taxa/regras QA e reconhecimento da devolução no mesmo diário com conta compensatória própria, sem duplo consumo. Sem abate ou estorno de origens históricas por inferência.
|
||||
|
||||
Todos os passos têm prévia, fundamento, versão/contexto/pessoa revalidados na confirmação, idempotência, recuperação após falha e provas de concorrência/isolamento nas duas bases QA existentes. UI e disponibilização limitada na mesma8085 apenas depois das provas afectadas. Sem novas bases, portas, perfis, roles PostgreSQL ou demonstrações.
|
||||
|
||||
## Direitos mínimos apresentados
|
||||
|
||||
**15 nomes novos**, exclusivamente empresa2/unidade2 e perfis QA já existentes:
|
||||
|
||||
| Família | Direitos | Destinatários |
|
||||
|---|---|---|
|
||||
| Orçamentos |`commercial_quotes.view/prepare/review/convert` |Comercial e Financeiro: preparação/conversão pelos preparadores; revisão pelos revisores; consulta adicional pelo perfil QA de consulta. |
|
||||
| Documentos |`service_documents.view/prepare/review/issue/credit_apply` |Preparadores Comercial/Financeiro preparam; revisores conferem; Comercial prepara emissão e o revisor Financeiro pode finalizar a factura-recibo; só revisor Financeiro aplica crédito. QA consulta apenas lê. |
|
||||
| Planeamento físico |`stock.planning.view/prepare/review` |Armazém consulta/prepara; conferência QA consulta/revê. Só novo artigo/armazém explicitamente mapeados. |
|
||||
| Disposição física |`stock.disposition.view/prepare/review` |Armazém consulta/prepara; conferência QA consulta/revê; execução conserva `stock.operations.confirm`/warehouse já existentes e independência do revisor. |
|
||||
|
||||
**Uma concessão de nome existente:** `service_invoices.issue` ao perfil QA Financeiro — revisão, exclusivamente nesta empresa/unidade, para a finalização documental da factura-recibo integrada. Não deriva da concessão de recebimentos nem é direito real. Preparação, revisão e execução mantêm as guardas originais e a nova proveniência seleccionada.
|
||||
|
||||
**Seis nomes de funções nativas existentes, oito concessões QA:** actor6 recebe `supply_read`, `supply_prepare`, `inventory_disposition_read`, `inventory_disposition_prepare`; actor3 recebe `supply_read`, `supply_review`, `inventory_disposition_read`, `inventory_disposition_review`. Não recebe `warehouse` genérico. O livro continua o mesmo e a conta de leitura SELECT-only anterior continua nas três tabelas; o adaptador privilegiado revalida âmbito e funções, sem ampliar concessões desse leitor.
|
||||
|
||||
Não há concessão administrativa geral ou por nome/email de pessoa. A matriz JSON é a lista exacta a instalar; nomes adicionais exigem outra apresentação, não substituição silenciosa.
|
||||
|
||||
## Preservação e exclusões
|
||||
|
||||
Preservar18 lançamentos e exemplos aceites, seis registos pendentes, cache bloqueada, origens/associações antigas, trabalho alheio e demonstrações anteriores. Só fontes fictícias novas neste bloco. Nada de operações/dinheiro/banco/fiscalidade reais, comunicação à AT, envio de mensagens, concessões reais/PUBLIC, salários/CIF reais, reabertura, instalação empresarial, publicação ou candidata de Compras. A aprovação não é aceitação do produto ou capacidade de implantação.
|
||||
|
||||
Os modelos legais IVA/IRPS/IRPC/INSS, folha salarial, logística/importação real e regras fiscais vigentes não ficam certificados por estes documentos de teste. Mantêm validação específica das fontes e do âmbito. A revisão visual dos novos ecrãs também não é presumida a partir de DOM/HTTP.
|
||||
|
||||
## Progresso após autorização
|
||||
|
||||
Direitos da matriz exacta aplicados somente nas duas bases QA existentes. Orçamentos Comercial/Oficina e Stock/políticas/devolução entregues na8085; diário20, originais18 intactos. Documentos adicionais continuam candidatos, sem disponibilização. O motor original encontrou dez concessões de consulta ausentes nos dois perfis Financeiros; foram apresentadas separadamente em SGF_DOCUMENT_READ_ACCESS.md, sem concessão implícita. Essa dependência não transforma o bloco inteiro em concluído.
|
||||
|
||||
## Fecho funcional do bloco autorizado
|
||||
|
||||
Documentos adicionais e anulação técnica/reversão agora implementados e ligados na mesma8085; ver SGF_SERVICE_DOCUMENTS_DELIVERY.md. Consultas adicionais expressamente aprovadas e aplicadas; não há autorização pendente deste bloco. Diário25 equilibrado, saldos500/0, período aberto, originais18 intactos. Revisão visual, carga sustentada, conformidade real e implantação continuam âmbitos separados.
|
||||
@@ -0,0 +1,40 @@
|
||||
# Informação operacional e consulta de ordens — SGF8085
|
||||
|
||||
10/11/2026. Entrega funcional na instalação8085 existente, sem SGC, nova demonstração, alteração de direitos ou criação de exemplos financeiros. A página inicial autenticada estava praticamente vazia; a entrada apresentava sobretudo a escolha de perfis. O trabalho existente ficava escondido e alguns textos descreviam capacidades entregues como futuras.
|
||||
|
||||
## O que ficou disponível
|
||||
|
||||
Em `/sgf`, cada um dos seis módulos apresenta agora o seu âmbito e uma entrada explícita para o respectivo início. Dentro da função escolhida, **Início** mostra:
|
||||
|
||||
- O percurso do módulo em cinco etapas, a evidência a conservar, como interpretar a informação e a ligação ao módulo seguinte.
|
||||
- Funções e atalhos já autorizados para a conta; mudar de módulo mantém a transição de contexto e a protecção de formulários existentes. A entrada de início não concede acesso às restantes funções.
|
||||
- Consulta explícita das fontes existentes do módulo activo: documentos comerciais, requisições, existências, ordens/equipamentos, Caixa/indicadores ou lançamentos/cálculos fiscais internos.
|
||||
- Referência, entidade, estado, valor/identificação e evidência por registo, com ligação à consulta completa e histórico. Páginas até25 registos,15 nas requisições. Não carrega outros módulos em segundo plano.
|
||||
- Saldo950MZN e estado fechado da Caixa QA obtidos da fonte existente, sem somar eventos de preparação/revisão. Os restantes valores são individuais; não há total inventado entre documentos ligados, unidades ou moedas diferentes.
|
||||
|
||||
Escolher uma fonte executa apenas GET nos leitores já autorizados. Sem fonte ou permissão não há consulta; falha de leitura não significa zero. A mudança de contexto descarta respostas antigas. O menu horizontal/dropdowns aceite permanece. Os filtros de consulta são identificados como leitura e não disparam o pedido de guardar alterações de negócio; não limpam alterações de outros editores nem confirmações pendentes.
|
||||
|
||||
## Nova consulta de ordens de Oficina
|
||||
|
||||
Oficinas → **Painel da oficina**, **Equipa** ou **Relatórios** abre uma lista SQL paginada25/100, com pesquisa literal por referência, cliente, equipamento, série ou responsável e filtro pelos estados já existentes dos apontamentos. Mostra cliente por nome, equipamento/série, responsável actual, quantidade de apontamentos actuais/sem verificação favorável e minutos apontados/verificados. Cada linha abre a ordem e as suas evidências originais.
|
||||
|
||||
O leitor antigo percorria todas as ordens/apontamentos, fazia consultas repetidas e adquiria o bloqueio de escrita da empresa durante a consulta. O novo endpoint `/api/workshop/orders` aplica empresa/unidade e atribuição actual na SQL, agrega os apontamentos apenas das ordens da página e usa transacção de leitura consistente sem adquirir esse mutex. Reutiliza `workshop.view` e a política original: gestores com open/assign/authorize/verify vêem o âmbito autorizado; técnicos vêem apenas ordens actualmente atribuídas a si. Nenhum writer ou trigger foi alterado.
|
||||
|
||||
Estados preservados: Aberta; Apontamentos em revisão; Ocorrências fora do âmbito; Registos verificados. Não inventa fases “Entregue”, “Paga” ou “Reparação concluída”. “Sem verificação favorável” inclui pendentes, recusas e reconhecimentos de excepção; não é uma fila exclusivamente por decidir. Versões substituídas não contam como apontamentos actuais.
|
||||
|
||||
## Verificação e preservação
|
||||
|
||||
- Início:50 verificações HTTP das fontes existentes,28 de renderização/autoridade/valores/escapagem e11 da entrada/cliente servido; três checksums HTTP finais dos ficheiros instalados. Provas válidas anteriores reutilizadas; as verificações26 de renderização iniciais foram substituídas pelas28 que abrangem a nova fonte de ordens, não somadas.
|
||||
- Ordens:29 verificações na regressão existente,11 HTTP8085 e12 de renderização/protecção de formulários com dados efectivos. As27 ordens adicionais e apontamentos são fixtures SQL sujeitas às guardas originais, integralmente revertidas; não foram criadas ordens na8085. Estados e minutos anteriores comparados com o leitor original apenas na regressão. Filtros,25+2/100, ordenação, versões substituídas, atribuição e recusas verificados.
|
||||
- Concorrência de leitura apenas na regressão: outra transacção manteve a linha da empresa bloqueada para escrita; a nova leitura terminou antes da libertação, em cerca0,093s dentro do leitor (não inclui arranque PHP). Isto comprova essa leitura sem espera pelo mutex, não a carga sustentada ou o desempenho global.
|
||||
-32 conjuntos de dados originais comparados antes/depois da instalação, incluindo permissões, ordens/apontamentos/decisões/eventos, documentos e livro nativo: intactos, tal como o binding. Mantêm-se27 lançamentos, Caixa950 e cinco cálculos fiscais, sem nova operação financeira. Assets anteriores conservados; início e lista de ordens carregados separadamente. Nenhuma limpeza de cache.
|
||||
|
||||
[Índice das provas e SHA das fontes](proofs/sgf-operational-information-20261110.json). Backups dos ficheiros substituídos e dados de ensaio permanecem privados, fora do repositório. Sem ligação/comando dirigido aos seis registos protegidos. Sem concessões, publicação, candidata de Compras, checkpoint ou aceitação presumida.
|
||||
|
||||
## O que continua em falta
|
||||
|
||||
Esta entrega melhora informação utilizável e fecha a consulta paginada de ordens; não conclui todo o produto. A [matriz](integration/sgf-solution-contract.json) mantém fiscalidade geral, motores IRPS/INSS/IRPC/ISPC/ICE, modelos oficiais/calendário, reconciliação bancária geral e rácios/séries gerais como pendentes ou parciais.
|
||||
|
||||
O detalhe e os comandos originais da ordem continuam no leitor/workflow anterior; a sua materialização integral não foi optimizada por esta lista. A consulta de relatórios de Oficina é actual, não um relatório diário fechado, arquivo histórico ou exportação financeira. Abrir uma ordem continua a exigir nova autoridade e estado actual.
|
||||
|
||||
Renderização em teste e respostas HTTP não são conferência visual de navegador. A via bloqueada não foi repetida. Revisão visual do conjunto, carga sustentada, arranque completo do computador, retenção de anexos e capacidade de implantação exigem provas próprias. A matriz não declara `client_presentable=true` nem produto completo.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Antiguidade de fornecedores — entrega8085
|
||||
|
||||
10/11/2026. Financeiro → **Mapa de antiguidade — fornecedores**, na mesma8085, com o direito existente `supplier_payables.view`. Consulta read-only; nenhuma nova autoridade, estrutura, condição, obrigação ou operação financeira.
|
||||
|
||||
Escolher explicitamente uma referência, pesquisar factura/fornecedor, filtrar estado documental e consultar páginas25/100. O servidor conserva saldos originais e lê em conjunto as condições administrativas aprovadas das obrigações da página. Só acrescenta classificação: data revista ainda não ultrapassada,1–30,31–60,61–90, mais de90dias ou vencimento desconhecido. Reconhecimento pendente, saldo indeterminado e saldo liquidado no livro permanecem estados próprios; não são dívida vencida presumida. Data futura ou o próprio vencimento dão0dias; desconhecido mantém dias indeterminados.
|
||||
|
||||
O vencimento e atraso originais do motor continuam separados da condição administrativa e das faixas. A data é referência de classificação de **saldos actuais**, não corte histórico, prazo legal ou recomendação de pagamento. Totais pertencem **apenas à página** e separam moedas/faixas. Desconhecido com saldo conhecido fica numa faixa monetária distinta; fonte divergente/saldo indeterminado, documento não reconhecido e saldo zero não entram nos totais por faixas. Zero no livro não comprova execução bancária.
|
||||
|
||||
O CSV da página conserva referência, filtros, instante de leitura, saldo, vencimento original, condição/evidência revista, faixa e dias administrativos, com protecção dos textos contra fórmulas. Mudar referência exige nova leitura; uma resposta de referência diferente é recusada no cliente. Abrir condição/histórico ou obrigação mantém o documento escolhido e os mecanismos anteriores.
|
||||
|
||||
Na8085, referência15/12/2026 classifica o saldo original100MZN na faixa1–30dias:15dias desde o prazo administrativo QA30/11. Referência30/11 dá data não ultrapassada. Nenhum prazo ou saldo foi alterado para obter o resultado.
|
||||
|
||||
## Provas e limites
|
||||
|
||||
-26 verificações de regressão: limites0/1/30/31/60/61/90/91dias, futuro/desconhecido/indeterminado/não reconhecido/liquidado, referência ausente/inválida, fonte efectiva25/100, preservação dos montantes/datas originais e cinco conjuntos nativos intactos. Sem fixtures financeiras ou comandos.
|
||||
-12 de apresentação/CSV/contrato: referência obrigatória no mapa, ausência de indicadores antes da consulta, soma exacta de centavos, moeda e desconhecido separados, exclusões explícitas, resposta atrasada/categoria inválida recusadas e origem versus condição distintas. Renderização simulada não é revisão visual.
|
||||
-14 HTTP8085: valor efectivo100MZN/15dias, dia do prazo, ausência de classificação automática, pesquisa/paginação, vazio, argumentos/contexto recusados, CSV e MIME/SHA dos ficheiros JS efectivamente servidos. Zero POSTs de negócio; entrada normal nos perfis conserva o seu registo de contexto.
|
||||
-51 conjuntos actuais idênticos após instalação/consulta, incluindo as quatro versões e recibos de obrigações fiscais recém-entregues, permissões, condições de fornecedor, documentos, artigos e diário; binding intacto. Seis registos e cache não foram alvo de comandos.
|
||||
|
||||
São52 verificações dirigidas. [Índice das provas](proofs/sgf-payable-aging-20261110.json). Provas anteriores reutilizadas, sem repetir reconhecimento, pagamento, revisão de vencimentos ou entrega fiscal simulada. Assets anteriores e ficheiros substituídos conservados privadamente; sem limpeza de cache, novas demonstrações, SGC, publicação, candidata de Compras, aceitação ou checkpoint.
|
||||
|
||||
A SQL continua a paginar documentos antes do motor; a classificação e os totais usam só a página. Não há totais monetários globais nem filtro global por faixa nesta entrega. Os mutex/qualificação de origens do leitor financeiro original permanecem; sem alegação nova de desempenho, carga sustentada ou capacidade de implantação. Revisão visual e fiscalidade/relatórios legais continuam pendentes; matriz v21 mantém produto amplo incompleto.
|
||||
@@ -0,0 +1,39 @@
|
||||
# Vencimentos administrativos de fornecedores — entrega8085
|
||||
|
||||
10/11/2026 · `SGF-PAYABLE-DUE-QA-v1`. Percurso autorizado concluído na mesma8085: **Financeiro → Posições de fornecedores → Condições de vencimento e histórico**. A referência de atraso é escolhida explicitamente; não se presume a data nem uma condição de30 dias.
|
||||
|
||||
Preparação individual13 e revisão distinta14, com evidência, fundamento, prévia anterior/posterior, aprovação/recusa, versões append-only e recibo recuperável. Uma sucessora pendente/recusada não substitui a última condição aprovada. A correcção pode declarar explicitamente o vencimento desconhecido. A lista lê em conjunto as condições aprovadas das obrigações da página e separa-as da data original; o CSV da página inclui a condição revista e a evidência protegida contra fórmulas.
|
||||
|
||||
O saldo continua no motor financeiro original. `pa_obligations.due_on`, factura, principal, pagamentos, stock e diário não são modificados. A condição administrativa não é uma alteração fiscal da factura nem uma decisão de pagar. O vencimento original continua desconhecido; a referência só classifica atraso da condição revista, sem saldo histórico, juros ou execução monetária.
|
||||
|
||||
## Exemplo existente e direitos
|
||||
|
||||
Obrigação já reconhecida100MZN: evidência **artificial, identificada como ensaio**, data30/11/2026, preparada13 e aprovada14. Duas versões e dois recibos; não foi repetido reconhecimento de dívida.30/11 dá0 dias,01/12 dá1 dia. O saldo conserva100MZN. Este prazo não representa condição comercial real.
|
||||
|
||||
Aplicados exactamente os dois direitos aprovados: `supplier_payables.due.prepare` a13 e `supplier_payables.due.review` a14, tenant1/empresa2/unidade2. São duas concessões por livro QA existente, **quatro concessões no total**, sem nova pessoa/perfil, role PostgreSQL, acesso real ou direito PUBLIC. Consulta continua a exigir `supplier_payables.view`. As novas tabelas/sequências/função negam acesso PUBLIC; nenhuma concessão SQL adicional.
|
||||
|
||||
## Revalidação, recuperação e interface
|
||||
|
||||
Na confirmação, o percurso confere novamente perfil/direito/contexto físico, origem autorizada, versão e saldo observados, preparação/revisão distintas e identidade humana autoritativa em `pa_access`. Duas contas da mesma pessoa são recusadas; mudança de pessoa exige nova conferência. As preparações novas conservam essa identidade no dado administrativo interno. As duas versões iniciais8085, anteriores a esse reforço, conservam os autores13/14 e4/7 nativos distintos; não foram reescritas. A prova dirigida confirma as identidades humanas distintas dos perfis e as recusas em caso de alias/mudança.
|
||||
|
||||
Um recibo histórico exige o autor/contexto/origem actuais e não executa outra decisão. Resultado incerto na interface conserva corpo/chave/prévia e bloqueia descarte ou troca de documento até à recuperação. Durante edição, voltar ou mudar a consulta exige descarte explícito. Revisão começa sem decisão seleccionada e fundamento vazio; não se copia o fundamento anterior.
|
||||
|
||||
As versões, auditoria e recibo são atómicos na mesma transacção nativa. A prévia usa savepoint revertido; sequências podem avançar sem criar versões. A leitura reutiliza os mutex e as guardas do mecanismo financeiro composto. Nesta entrega não se alterou a sua estratégia de bloqueio.
|
||||
|
||||
## Provas reutilizáveis
|
||||
|
||||
-40 verificações de regressão, repetidas somente após o reforço de identidade afectar a confirmação: preparação/revisão/recusa/correcção, datas impossíveis, versões/contexto/origem alterados, revogação de direito, recibo, repetição e falha forçada na inserção do recibo com rollback/recuperação. Original de40 conservado como histórico; contam-se40, não80. Fixtures integralmente revertidas e conjunto original comparado.
|
||||
-Nove verificações dirigidas de identidade: mesma pessoa por contas diferentes, pessoa do preparador/revisor alterada, confirmação legítima e repetição; fixtures revertidas.
|
||||
-Quatro de paginação efectiva:29 linhas SQL adicionais de histórico, páginas25+restante iguais à100, sem omissão/duplicação. São fixtures de leitura, não decisões executadas, e foram revertidas.
|
||||
-Seis de integração da lista: condição aprovada exacta, intenção pendente sem substituição, data original intacta, página vazia, flag desligada e pin incompatível recusado503. Fixtures revertidas.
|
||||
-23 HTTP8085: percurso efectivo13→14, exemplo, recibo próprio/nova sessão, repetição, datas, paginação e recusas.10 verificações finais sem comandos adicionais cobrem a lista/CSV/detalhe reforçado, recibo anterior preservado e ficheiros JS reais com MIME/SHA. Contagem dos dois comandos confirmados guardada privadamente para evitar repetição acidental.
|
||||
-21 de interface, executando os handlers reais do componente com servidor simulado: escolha explícita, impacto, edição bloqueada, desconhecido, resposta incerta e recuperação da mesma operação. Renderização/handlers simulados não constituem revisão visual de navegador.
|
||||
-Concorrência apenas na regressão: a primeira confirmação conserva o `FOR UPDATE` da empresa. A segunda fica à espera de `transactionid`, com `pg_blocking_pids` apontando para a primeira;503 após5,12s. Libertada a primeira, a segunda recusa409 por versão antiga. A primeira repete200 com recibo, conservando uma preparação/uma revisão. As duas versões desta fixture permanente ficam identificadas no livro de regressão; não na8085. O limite não valida capacidade de implantação nem foi eliminado nesta entrega.
|
||||
|
||||
São113 verificações funcionais/contrato distintas (40+9+4+6+23+10+21), mais concorrência e58 verificações de preservação/ACL. [Índice das provas](proofs/sgf-payable-due-20261110.json). Suites alheias, antigas emissões/pagamentos/lançamentos e cadastro de artigos não foram repetidos.
|
||||
|
||||
## Preservação e limitações
|
||||
|
||||
Backup privado anterior.43 conjuntos originais idênticos; nos outros dois, todas as linhas anteriores de permissões/auditoria iguais, apenas duas concessões e dois eventos de vencimentos novos. Três bindings intactos, diário27, Caixa950, cálculos5, artigos e movimentos anteriores conservados. Nenhum comando dirigido aos seis registos protegidos ou à cache bloqueada. Dados/credenciais/dumps privados permanecem fora do repositório.
|
||||
|
||||
Estruturas e configuração habilitadas apenas nas QA existentes; configuração do código principal desligada por omissão. Sem novas bases/portas/demonstrações, SGC, efeitos financeiros, acessos/operações reais, publicação, candidata de Compras, aceitação ou checkpoint. O percurso não administra contratos gerais, parcelas, juros, agenda de pagamentos ou múltiplas empresas reais. Não foram ensaiados milhares de condições, paginação sob escrita contínua ou arquivo binário da evidência; a evidência aqui é referência textual artificial. Revisão visual, carga sustentada, fiscalidade geral e capacidade de implantação continuam separadas. Matriz v18 mantém o produto amplo incompleto.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Decisão agrupada — vencimentos revistos de fornecedores
|
||||
|
||||
10/11/2026 · `SGF-PAYABLE-DUE-QA-v1`. **Autorizado expressamente e entregue; ver [relatório](SGF_PAYABLE_DUE_DELIVERY.md).** O texto seguinte conserva o âmbito da decisão. Consulta actual entregue em `SGF_PAYABLE_POSITIONS_DELIVERY.md`. Conferência SELECT-only dos dois livros existentes encontrou os direitos de leitura de13/14/17 e nenhuma concessão dos dois poderes abaixo. O motor original cria vencimento nulo e não oferece um comando para definir/corrigir condições de pagamento; acesso a pagamentos ou consulta não será usado para contornar essa ausência.
|
||||
|
||||
## Percurso inteiro proposto
|
||||
|
||||
Na mesma8085, Financeiro → Posições de fornecedores → obrigação individual: consultar condições/histórico, preparar data explícita ou retorno fundamentado a desconhecido, indicar referência de evidência e fundamento; outra pessoa compara o anterior/proposto e aprova ou recusa. A data é metadata administrativa revista, separada da factura e dos valores do livro original. Não escolher condições por fornecedor, presumir30 dias ou propagar a outras obrigações.
|
||||
|
||||
Versões e recibos append-only no livro nativo existente, sem actualizar `pa_obligations.due_on`, factura, saldo, movimentos ou diário. A fonte monetária continua no motor original. A interface distinguirá vencimento original desconhecido de condição administrativa revista. Sem juros, alteração de principal, reserva de pagamento, calendário automático ou decisão de pagar.
|
||||
|
||||
Reutilizar contexto físico, empresa/unidade, perfis QA existentes, prévia reversível/confirmar, identidade humana distinta, operação/chave/recibo, histórico e isolamento administrativos. Na confirmação revalidar permissões, perfil, binding, origem, revisão e saldo observado, versão de condição e preparador/revisor distintos. Mudança exige nova conferência; recusa e falha não aplicam parcialmente a condição. Repetição recupera recibo após revalidar contexto, sem duplicação. A consulta pode mostrar classificação de atraso por **referência explícita**, com desconhecido nulo e mesmo dia sem atraso; a referência não reconstitui saldo histórico. Condições antigas e recusadas permanecem no histórico.
|
||||
|
||||
## Direitos propostos e alcance
|
||||
|
||||
Tenant1/empresa2/unidade2, apenas nas bases QA8085 e regressão **já existentes**:
|
||||
|
||||
|Direito SGF novo|Única função QA a receber|Poder|
|
||||
|---|---|---|
|
||||
|`supplier_payables.due.prepare`|Financeiro preparação13|Preparar condição individual e sucessoras; não aprovar.|
|
||||
|`supplier_payables.due.review`|Financeiro revisão14|Aprovar/recusar versão alheia actual; não preparar.|
|
||||
|
||||
Consulta reutiliza `supplier_payables.view` de13/14/17. Duas concessões por base, quatro no total. Sem nova pessoa/perfil, role PostgreSQL, direito PUBLIC, grant SQL ou acesso real. A criação das estruturas QA limitadas não amplia o writer monetário original. A matriz de acesso discriminada está em `integration/sgf-payable-due-access-proposal.json`.
|
||||
|
||||
## Provas e exemplo delimitado
|
||||
|
||||
Regressão existente: preparação/revisão e recusa, acesso indevido e empresa/unidade/module errado, revisão própria, origem/versão/saldo alterado, concorrência, repetição/recuperação e rollback sem dupla aplicação. Usar fixtures revertidas onde possível e preservar provas válidas, sem repetir suites alheias. HTTP8085 verifica o percurso efectivo individual, histórico e recibo, com a obrigação100MZN já reconhecida e evidência **artificial explicitamente identificada**: preparação13/revisão14 de vencimento30/11/2026. Consultar30/11 sem atraso,01/12 com1dia e versão anterior desconhecida sem0 presumido. Não declarar esse prazo como condição comercial real nem alterar100MZN. Correcção para desconhecido/recusa são ensaiadas só na regressão para conservar o exemplo escolhido.
|
||||
|
||||
Uma única decisão cobre a implementação e as provas de todo este percurso, sem pedir autorização por campo/teste. Preservar27 lançamentos, Caixa950, artigos/catálogo/movimentos, documentos/posições/cálculos, seis registos, cache e trabalho alheio. Sem novas bases/portas/demonstrações, SGC, pagamento, efeito contabilístico, alteração de origens aceites, reabertura, instalação real, publicação, candidata de Compras, checkpoint ou aceitação presumida. Revisão visual/carga/implantação e fiscalidade geral permanecem separadas.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Posições de fornecedores — entrega8085
|
||||
|
||||
10/11/2026. Financeiro → **Posições de fornecedores**, na instalação existente. Pesquisa literal por factura/fornecedor actual da origem, filtro de estado documental e páginas25/100. Cada linha mostra reconhecimento, estado financeiro, principal, pagamentos históricos confirmados, afectações líquidas, saldo, pendências e revisão da origem. Não se confunde factura pendente com dívida zero nem estado documental com estado de pagamento.
|
||||
|
||||
A consulta selecciona IDs na SQL antes de chamar `positionsPage` do motor original, apenas para a página. Não recalcula dinheiro no adaptador. Origem divergente conserva saldo indeterminado; mais de uma identidade financeira para o documento recusa409. Isolamento/autoridade física/contexto e qualificação das origens permanecem no mecanismo financeiro existente. Sem novo direito ou writer.
|
||||
|
||||
O resumo separa moedas e soma somente saldos conhecidos da página, com contagens de desconhecidos e documentos ainda não reconhecidos. CSV exporta somente a página/filtros/leitura e protege os textos livres contra fórmulas. O fornecedor é o actual da origem, não uma fotografia histórica. Cada página é uma leitura actual, sem snapshot persistente entre páginas ou saldo histórico.
|
||||
|
||||
Abrir a posição transmite `document_id` ao detalhe financeiro original. O destino filtra antes de paginar e recusa documento indisponível/estrangeiro403 sem substituir por outro. A rotina original de confirmação financeira permanece idêntica, conferida após normalizar finais de linha; continua a revalidar o estado actual.
|
||||
|
||||
## Provas
|
||||
|
||||
-23 verificações na regressão existente: paridade com o motor, filtros,25/100 no universo conhecido, página fora do intervalo, acesso/contexto, identidade financeira ambígua e preservação. A única duplicação de identidade usada como fixture foi revertida; não houve operação financeira.
|
||||
-15 verificações de apresentação/contrato/navegação: desconhecido sem zero, moedas separadas, CSV, selecção exacta e recusas. Renderização simulada não comprova revisão visual.
|
||||
-19 verificações HTTP8085: valores efectivos versus motor, detalhe exacto, pesquisas, filtro, campos/tamanho recusados e outro módulo recusado. Inclui MIME e SHA dos ficheiros principal e lazy da interface realmente servidos. Zero POSTs de negócio.
|
||||
-45 conjuntos actuais iguais antes/depois, incluindo obrigações/fontes/comandos, artigos e novos registos/recibos de catálogo, permissões, documentos, Caixa e diário. Instalação conserva binding; comandos financeiros e cache não foram alterados. Diário27/Caixa950/cálculos5 preservados. Nenhum comando dirigido aos seis registos protegidos.
|
||||
|
||||
[Índice das provas](proofs/sgf-payable-positions-20261110.json). Provas anteriores reutilizadas; não se repetiram emissões, recebimentos, pagamentos, lançamentos ou cadastro de artigos.
|
||||
|
||||
## Limitações concretas
|
||||
|
||||
O motor actual reconhece obrigações com `due_on=null` e devolve atraso indeterminado. Não existe preparação/revisão de condições de vencimento para fornecedores; esta consulta não inventa prazos nem altera o livro para preencher a coluna. A consulta conserva os mutex e a qualificação global de origens do mecanismo composto. A selecção documental é paginada, mas não constitui prova de optimização integral, memória limitada de todas as dependências, grandes volumes ou carga sustentada. Não se ensaiaram mais de25 documentos nesta entrega.
|
||||
|
||||
Gestão revista de vencimentos exige autoridade específica e decisão antes de qualquer concessão. Revisão visual, fiscalidade geral e capacidade de implantação permanecem pendências separadas. Sem novas bases/portas/demonstrações, SGC, efeitos financeiros, direitos reais, publicação, candidata de Compras, aceitação ou checkpoint. A matriz v17 continua a declarar o produto amplo incompleto.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Posições de clientes e vencimentos — entrega8085
|
||||
|
||||
10/11/2026. Financeiro → **Posições de clientes e vencimentos**, na instalação existente. Consulta SQL25/100 por documento/cliente na emissão, estado e situação de vencimento; sem alterar o workflow de recebimentos, os direitos ou os exemplos financeiros.
|
||||
|
||||
O utilizador indica uma referência para vencimentos. A lista apresenta o valor de origem, redução líquida, afectação líquida, saldo reconhecido, vencimento, dias de atraso conhecidos e revisão. O cliente é o preservado no documento, não um cadastro actualizado silenciosamente. Propostas ainda não abertas/recusadas têm saldo reconhecido indeterminado e não entram no total. Vencimento desconhecido mantém dias indeterminados; referência igual ao vencimento não é atraso.
|
||||
|
||||
**São saldos actuais**, com todos os efeitos confirmados existentes. A referência escolhida apenas classifica o vencimento: não reconstitui saldo histórico, não aplica juros e não presume dinheiro recebido. O estado “liquidada” pode resultar de afectação/redução; não é comprovativo bancário.
|
||||
|
||||
Totais pertencem ao filtro completo, calculados no servidor, não à soma da página. A SQL agrega efeitos por obrigação, incluindo reversões, antes de filtrar/paginar; não materializa todas as posições no PHP. A transacção de leitura consistente não adquire o mutex de escrita da empresa. Um marcador de registos/efeitos exige actualizar a primeira página se houver mudança entre páginas; não é snapshot histórico persistente.
|
||||
|
||||
O CSV contém somente a página consultada, filtros, referência e marcador do livro, com texto protegido contra fórmulas. Abrir posição e comprovativos transmite a identidade escolhida ao percurso original. Se ela não estiver disponível, apresenta aviso e não escolhe outra posição automaticamente. Preparação/confirmação/revalidação financeira continuam no serviço original.
|
||||
|
||||
## Provas e preservação
|
||||
|
||||
-30 verificações na regressão existente: paridade de estado/reduções/afectações/revisão/saldo com `ServiceReceivables.position`,25/100 no universo conhecido, página fora do intervalo, pesquisa literal, autoridade/campos, vencido/não vencido/mesmo dia/desconhecido e preservação. Correcções de vencimento pelos métodos originais, preparação13/revisão14, integralmente revertidas. Não foram ensaiados milhares de posições nem uma página completa com mais de25 nesta entrega.
|
||||
-16 verificações de apresentação/contrato: montantes exactos, proposta distinta de saldo, desconhecido distinto de zero, CSV/escapagem, resposta atrasada, marcador alterado e selecção exacta sem fallback. Exemplos de apresentação declarados no harness; não são movimentos financeiros ou prova visual de navegador.
|
||||
-15 verificações HTTP8085: posições efectivas comparadas com o serviço original, total reconhecido uma vez por obrigação,25/100, pesquisa, vencimentos desconhecidos, CSV e recusas. Zero POSTs de negócio.
|
||||
- Comparação dos conjuntos originais antes/depois da instalação, incluindo recebíveis/comandos/eventos/outbox/entregas, documentos, permissões e livro nativo; binding intacto. Diário27, Caixa950 e cinco cálculos conservados. Sem comandos dirigidos aos seis registos ou cache bloqueada.
|
||||
|
||||
[Índice das provas e fontes](proofs/sgf-receivable-positions-20261110.json). Provas anteriores reutilizadas; não se repetiram emissões, recebimentos, pagamentos ou lançamentos. Código/provas preparados antes da actualização da8085. Fonte de cobertura fiscal passou a distinguir cálculo interno por linhas, emissão documental ainda limitada, conferência bancária QA e indicadores QA já entregues.
|
||||
|
||||
Sem novos direitos, schemas, demos, SGC, dinheiro real, publicação, candidata de Compras, checkpoint/aceitação ou capacidade de implantação declarada. O detalhe financeiro anterior ainda materializa o conjunto original e conserva o seu mutex; esta lista não optimiza todos os leitores/writers. Relatórios históricos, cobranças/juros, bancos gerais e fiscalidade operacional geral continuam fora deste incremento. Revisão visual/carga sustentada permanecem separadas.
|
||||
@@ -0,0 +1,41 @@
|
||||
# SGF — processamento interno de remunerações QA
|
||||
|
||||
Autorização expressa11/11/2026: **Autorizar o bloco QA e os três direitos apresentados**. Implementação em curso. A consulta SELECT-only confirmou ausência dos três poderes propostos nos dois livros QA existentes. Aplicar exclusivamente as14 concessões discriminadas, nos dois livros QA existentes.
|
||||
|
||||
## Entrega funcional proposta
|
||||
|
||||
Actualização pela directiva posterior: módulo autónomo **Recursos Humanos**, com novos perfis conforme [âmbito de autonomia](SGF_HUMAN_RESOURCES_AUTONOMY_SCOPE.md); a antiga matriz Financeira abaixo foi substituída e as suas concessões retiradas.
|
||||
|
||||
Um único bloco na instalação8085, no menu horizontal/dropdown existente: **Remunerações internas QA**. Sem nova demonstração/base/porta ou SGC. Abrange cadastro mínimo fictício, regras do exercício, período, processamento, revisão distinta, correcção/cancelamento, mapa conservado, histórico, recibos de comando e exportação verificável. Nenhum colaborador ou remuneração real é importado; técnicos de Oficina não se tornam trabalhadores automaticamente.
|
||||
|
||||
1. Cadastro por código pseudónimo explícito e empresa/unidade, preparação e revisão distinta, estado activo/suspenso e histórico. A selecção do trabalhador é individual. Não recolher NUIT, identificação civil, morada ou conta bancária para este ensaio.
|
||||
2. Conjunto versionado de parâmetros artificiais, vigência e descrição da fonte QA, preparado/revisto por pessoas distintas. Reutilizar aritmética exacta e padrões versionados existentes; não duplicar pesquisa fiscal nem inferir regras legais do caso artificial. Regras ausentes/incompletas impedem resultado completo; nunca substituir por zero. Não presumir benefícios, exclusões ou regimes reais.
|
||||
3. Escolha explícita de trabalhador/período e bruto, cálculo explicável por rubrica/regra, versão e origem. Prévia de impacto sem persistência de processamento; confirmação individual fundamentada grava versão/autor/data/contexto/estado anterior-posterior e recibo idempotente. Não oferecer revisão própria.
|
||||
4. Revisão distinta conserva o resultado exacto e as suas fontes/SHA. Correcção versionada e cancelamento interno exigem fundamento e nova revisão; preservar resultados anteriores e identificar os substituídos. Nenhuma alteração de regras/cadastro recalcula processamentos revistos silenciosamente. Alteração da fonte entre prévia/confirmação exige nova conferência.
|
||||
5. Mapa do período com páginas25/100 e filtros SQL, detalhe individual, totais só do conjunto explicitamente identificado e estados de completude. Distinguir desconto do trabalhador de encargo patronal. Exportação conservada autentica contexto/permissão, verifica SHA e não coloca tokens no URL; recibo refere decisão técnica, não pagamento de salário.
|
||||
|
||||
## Caso sintético completo
|
||||
|
||||
Novo código **QA-COLABORADOR-01**, sem ligação a pessoa real; período artificial2026-11, bruto10000MZN. Parâmetros **exclusivamente de exercício**, sem representar enquadramento nem tabela legal: contribuição do trabalhador3% sobre bruto, encargo patronal4% e retenção artificial8% sobre bruto. Valores exactos:300,400,800MZN; total de descontos1100; líquido interno8900; custo interno10400. Cada rubrica mostra que a base e percentagem são do exercício QA e que não constitui cálculo legal validado de INSS/IRPS.
|
||||
|
||||
Cálculo em centavos/racionais, truncagem documental de cada rubrica a duas casas e diferença exacta preservada; nenhuma truncagem intermédia de bases. Registar a política na versão. Bases/percentagens ausentes produzem resultado incompleto/líquido indeterminado e impedem aprovação como completo. Regressão cobre diferenças de centavo, vigências, cadastro suspenso, duas pessoas/períodos e isolamento; o exemplo efectivo8085 usa só o novo trabalhador fictício acima. A correcção/cancelamento é demonstrada na regressão existente; não repetir o exemplo8085 para testar ramos negativos.
|
||||
|
||||
## Matriz inicial substituída pela directiva de autonomia (histórico)
|
||||
|
||||
A regra local de novos direitos exige apresentá-los antes de conceder. As permissões de Caixa/IVA/lançamento não concedem administração de remunerações ou acesso a estes dados.
|
||||
|
||||
|Direito novo|Perfis QA existentes|Poder|
|
||||
|---|---|---|
|
||||
|`remunerations.view`|13,14,15,16,17|Consulta de cadastro, regras, mapas e histórico só no contexto autorizado|
|
||||
|`remunerations.prepare`|13|Preparar cadastro/regras/processamento/correcção/cancelamento, sempre com prévia/fundamento|
|
||||
|`remunerations.review`|14|Revisão distinta da versão actual e fundamento|
|
||||
|
||||
Sete concessões por livro existente,14 no total, tenant1/empresa2/unidade2. Só aplicação/perfis sintéticos existentes; nenhum grant PostgreSQL/PUBLIC/conta/role nova ou acesso real. Esta decisão abrange todo o bloco e os seus testes, sem pedidos separados por campo ou rubrica.
|
||||
|
||||
## Provas e limites
|
||||
|
||||
Revalidar sessão, pessoa, direitos, empresa/unidade/módulo, fonte, versão, vigência, dependências e revisão distinta na confirmação. Usar o mecanismo administrativo de prévia/confirmar/recuperar e a auditoria existente. Comprovar idempotência sem duplicação, concorrência com bloqueador identificado, pós-libertação409 ou resultado coerente e recuperação de falha parcial atómica apenas na regressão. Fixtures de volume e casos negativos revertidos; HTTP8085 prova o percurso positivo e leituras, sem suites alheias.
|
||||
|
||||
Preservar27 lançamentos,19 contas, Caixa950, IVA/regras/mapas/obrigações/demonstrações internas já aceites tecnicamente, seis registos protegidos, cache bloqueada, demais provas e trabalho alheio. Alterações de schema limitadas às tabelas necessárias do bloco nos dois livros QA existentes, sem migrations globais. Versões/documentos anteriores e fontes efectivas ficam intactos.
|
||||
|
||||
**Excluídos:** salário ou colaborador real, pagamento, reconhecimento de dívida, lançamento contabilístico salarial, criação de contas, recibo salarial legal, modelo/declaração oficial, submissão AT/INSS, activação fiscal real, reabertura, publicação, candidata de Compras, aceitação/checkpoint presumidos. Processamento sintético completo não fecha a lacuna de conformidade legal de IRPS/INSS nem integração contabilística salarial. Estas continuam discriminadas na matriz; fontes/regras legais deverão ser correspondidas antes de operação real. Visual, carga sustentada e capacidade de implantação permanecem separados.
|
||||
@@ -0,0 +1,50 @@
|
||||
# Documentos adicionais integrados na8085 —10/11/2026
|
||||
|
||||
Bloco QA autorizado implementado na mesma instalação: entrada `http://127.0.0.1:8085/sgf`, módulo **Comercial**, funções **Recibos**, **Notas de crédito** e **Facturas-recibo**. Cada função abre o ecrã de documentos com o tipo correspondente; acesso directo autenticado `/commercial/documents`. Preservados os seis módulos, menus horizontais/dropdowns e SGC independente. Nenhuma nova demonstração/base/porta/utilizador/role PostgreSQL.
|
||||
|
||||
As dez concessões de consulta foram expressamente autorizadas e aplicadas apenas aos perfis Financeiros QA13/14 e âmbitos discriminados. Os controlos documentais originais continuam efectivos; não se substituiu consulta fiscal por uma autorização genérica nem se usou outra identidade para emitir.
|
||||
|
||||
## Percurso utilizável
|
||||
|
||||
1. Preparação individual com origem explícita, fundamento e versão. Seleccionar factura e afectação efectiva no Recibo; não usar recebimento proposto como prova de pagamento. O selector não escolhe a primeira linha.
|
||||
2. Revisão por outra pessoa. A recusa conserva a versão e o fundamento; a aprovação não emite por arrasto.
|
||||
3. Nova prévia e emissão individual. O servidor volta a conferir pessoa, contexto, direitos, origem e dependências. A factura-recibo consome a intenção financeira previamente preparada por13 e a revisão distinta; o executor14 emite uma factura e conclui obrigação, recebimento e afectação na mesma transacção. A intenção conserva o autor anterior; efeitos e auditoria conservam o executor real. Sem mudança de identidade.
|
||||
4. PDF de teste congelado, SHA conferido, numeração QA própria, histórico SQL25/100 e recuperação pela mesma chave. Prévia revertida pode avançar sequências, mas não grava documento/recebível. Formulário e navegação local ficam bloqueados durante a prévia/confirmação incerta.
|
||||
5. Contabilidade prepara, revê e aplica cada origem no mesmo diário. O crédito nominal usa D QA-REDUCAO-CLIENTE/C QA-CLIENTES. Não é repartição fiscal certificada nem devolução de imposto.
|
||||
|
||||
Comercial preparação/revisão emite o Recibo através das respectivas funções. O crédito e a factura-recibo usam Financeiro preparação e revisão, escolhendo Comercial na navegação modular. A função de consulta pode ver histórico e PDF, sem adquirir poderes de escrita. As novas origens documentais são as duas explicitamente preparadas; não se oferecem documentos históricos ou entidades protegidas como alvos.
|
||||
|
||||
## Estado conservado para apresentação
|
||||
|
||||
|Origem nova|Documento/efeitos|Saldo|
|
||||
|---|---|---:|
|
||||
|Factura de teste1000|Recibo ligado à afectação efectiva400 e crédito nominal100|500MZN|
|
||||
|Outra origem1000|Factura-recibo, recebimento e afectação1000 atómicos|0MZN|
|
||||
|
||||
As duas facturas usam o cálculo documental de teste já aprovado: base862,07 + imposto137,93 =1000MZN. Séries QA novas não reiniciam numeradores anteriores. O recibo e o crédito não criam outra factura. O documento fiscal real continua bloqueado.
|
||||
|
||||
O mesmo diário tem **25 lançamentos equilibrados**: os20 anteriores mais factura1000, afectação400, redução100, outra factura1000 e afectação1000. Consulta individual confirmou saldo500 e0, três PDFs emitidos, zero anulações confirmadas e período QA aberto. Os18 lançamentos anteriores ao bloco e movimentos/clientes/facturas originais foram comparados novamente com o backup e estão intactos.
|
||||
|
||||
## Anulação técnica e reversão
|
||||
|
||||
Disponível ao seleccionar a versão emitida: Financeiro preparação prepara; Financeiro revisão confere com fundamento e prévia dos saldos anterior/posterior. Conserva PDF, numeração, factura e história. Recibo e factura-recibo revertem **a afectação**: deixam o recebimento não afectado, sem devolver dinheiro ou apagar a factura. Crédito reverte a redução100 por efeito próprio ligado ao original. A factura continua a representar a dívida; anular o agregado não anula fiscalmente a factura.
|
||||
|
||||
O período QA tem de continuar aberto, incluindo na confirmação. Uma alteração financeira obriga o preparador a renovar a conferência. Repetição recupera o resultado; anulação já concluída não volta a executar. Novos efeitos exigem os seus lançamentos individuais; a conferência do período não os ignora. As reversões foram executadas apenas em regressão e revertidas; não se anularam os exemplos novos da8085.
|
||||
|
||||
## Provas
|
||||
|
||||
- 20 verificações dirigidas em rollback: documentos, direitos, origem, revisão distinta, falha depois do writer com rollback financeiro/PDF, recuperação, versão antiga, integridade PDF, conclusão atómica e cinco origens no mesmo diário. Prova privada `receipt-composition-b4093c6f6707/single-integration/20261110-171528-10e1c5f0/service-documents-result.json`.
|
||||
- Concorrência real entre dois processos na regressão: segunda confirmação503 após o limite de espera do bloqueio de empresa; após commit da primeira,409 por versão antiga. Uma factura, obrigação, recebimento, afectação e PDF; primeira chave recuperável. `documents-concurrency/result.json`.
|
||||
- 21 controlos HTTP na8085: três documentos, nove decisões com repetição, três PDFs íntegros/históricos, selector de afectação efectiva, escrita indevida403 e diário25 equilibrado. `service-documents-http-20261110.json`.
|
||||
- 17 verificações de anulação/reversão em rollback, incluindo revisão distinta, repetição, impossibilidade de anular duas vezes, saldos restabelecidos, três reversões no diário, PDFs intactos e constraints nativas. `single-integration/20261110-172728-ac2008fe/document-cancellation-result.json` na regressão.
|
||||
- Oito verificações do período na8085:29 factos, zero pendências, fecho/repetição/recusas em rollback e anulação recusada em período efectivamente fechado. Não houve reabertura; a instalação continua aberta. `single-integration/20261110-172510-6e7769dd/period-documents-result.json`.
|
||||
- 19 controlos DOM→HTTP: prévia real revertida da anulação100, dívida500→600 explícita, factura preservada/sem reembolso, campos bloqueados, perda de resposta e recuperação com conteúdo idêntico, três versões históricas. Transportes de confirmação simulados, zero confirmações reais. `service-documents-dom-http-20261110.json`. Não é prova de navegador nem revisão visual.
|
||||
- Consulta final e preservação SELECT-only: `single-integration/20261110-172904-86c06a96/service-documents-status.json` e `single-integration/20261110-172905-2acea48f/next-block-preservation.json`, na8085. Build privado e sintaxe dos ficheiros alterados aprovados. Provas anteriores reutilizadas, sem suites alheias.
|
||||
|
||||
Os caminhos privados são relativos à instalação QA no run2576427d1939. A prova inicial de16 verificações/recusa403 é histórica, anterior às novas consultas autorizadas; não é a prova positiva actual nem é somada novamente.
|
||||
|
||||
## Limitações separadas
|
||||
|
||||
Entrega funcional **sintética/local**, não certificação fiscal ou capacidade de implantação. Sem AT, banco, dinheiro real, reembolso, edição de regras legais ou reabertura. Sem SGC, publicação, candidata de Compras, concessões reais ou checkpoint/aceitação presumidos. Os seis registos de associação e a cache bloqueada não foram alvo de comandos.
|
||||
|
||||
Revisão visual continua pendente, sem repetir a via de navegador bloqueada. Carga sustentada, retenção/quotas de armazenamento, conformidade fiscal vigente e implantação empresarial exigem evidência própria. Os relatórios de Stock fora do recorte conhecido não recebem zeros ou mínimos inventados. Não se declara toda a aplicação pronta para produção por estes ensaios.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Integração local dos seis módulos na8085
|
||||
|
||||
**Actualização posterior no mesmo dia:** o estado abaixo documenta a primeira integração13 lançamentos. Foi complementado por Oficina–Stock/devolução/valorização, Oficina–Comercial500, continuidades, trânsito/lotes/ajuste e fecho QA: agora18 lançamentos e15 contas. Ver [consolidação actual](SGF_SIX_MODULE_CLOSURE_20261110.md). As provas desta primeira fase mantêm-se intactas e não são repetidas por rotina.
|
||||
|
||||
Autorização expressa: «autorizo»,10/11/2026, âmbito de `SGF_8085_NEXT_AUTHORIZATION.md`. Entrada: http://127.0.0.1:8085/sgf. Conserva `/compras` e os sete perfis anteriores; acrescenta as dez funções QA aprovadas, com escolha explícita do módulo, sessão normal e CSRF. Não depende de SGC nem de outro servidor de demonstração.
|
||||
|
||||
## Percursos efectivamente disponíveis
|
||||
|
||||
| Módulo | Estado observado nesta instalação |
|
||||
|---|---|
|
||||
| Comercial | Cliente/serviço novos explicitamente associados; rascunho, perfis e série revistos; documento de teste862,07+137,93=1000MZN e PDF íntegro. |
|
||||
| Compras | C01–C10 anterior preservado; não reexecutado. A obrigação original100MZN continua no livro nativo, sem cópia para o host. |
|
||||
| Stock | Leitura do mesmo livro físico; saídas, transferência imediata, contagem sem lotes e aplicação da diferença pelos writers originais; segundo artigo/armazém QA explícitos. |
|
||||
| Oficinas | Ordem, autorização, tarefa,105min de trabalho e material2UN, com conferência técnica distinta; custo275 validado, sucessor295 validado e contabilizado por par de correcção. |
|
||||
| Financeiro | Recebível1000, afectações400/600, reversão400 e saldo400; fornecedor100→80 após afectação20→100 após reversão20. Facto de pagamento confirmado isoladamente não abate dívida. |
|
||||
| Contabilidade | Um diário nativo com âmbito SGF empresa2/unidade2;13 lançamentos equilibrados, incluindo fornecedor, afectações/reversões, vendas, custos directos e industriais e os dois pares de correcção. Lote1800→1820 mantém residual300 separado. |
|
||||
|
||||
As operações de continuação financeira, revisão e lançamento foram executadas pela API HTTP da própria8085, com sessões separadas e confirmações individuais. A preparação Comercial/Oficinas/industrial usou os workflows efectivos no destino, com funções sintéticas existentes e transacções próprias. Não se apresenta essa preparação por CLI como percurso visual do utilizador.
|
||||
|
||||
## Integridade e isolamento
|
||||
|
||||
O diário está no livro financeiro nativo existente. A origem financeira conserva o âmbito legado1/0/0; uma ligação explícita e conferida ao host qualifica o diário1/2/2. Leituras/efeitos são bloqueados se aparecer obrigação sem ordem/requisição admitida para a unidade. Nenhuma dívida, saldo ou movimento é espelhado no host.
|
||||
|
||||
A transacção da empresa no host mantém a autoridade e as origens de Comercial/Oficinas estáveis até ao commit nativo. As decisões verificam novamente pessoa, direitos, contexto, origem e versão. O diário só lê factos do host; não há transacção distribuída que grave simultaneamente dois efeitos de negócio. O histórico nativo retém autor SGF, âmbito, chave, hash do pedido, fundamento e resultado.
|
||||
|
||||
Materiais directos/industriais deste recorte são explicitamente artificiais e distintos do artigo escolhido para valorização. O perímetro privado está fixado por SHA; origem desconhecida, partilhada ou alterada bloqueia a continuidade. Esta declaração controlada de QA não constitui valorização geral de materiais reais ou de produção. O comportamento exclusivo anterior do núcleo conserva-se fora desta composição explícita.
|
||||
|
||||
O isolamento de código da8085 foi corrigido: o autoload de `App` utiliza a cópia privada, mesmo com o directório de dependências partilhado. Foram instalados52 ficheiros seleccionados e um build privado, com cópias anteriores. O bootstrap que montaria o conector SGC não foi copiado. O pacote original fixado de Compras e os seus bindings originais permanecem intactos. A conta de leitura de Stock conserva SELECT-only; o mapa adicional apenas discrimina funções/armazéns QA autorizados.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
O índice `docs/proofs/sgf-single-integration-20261110.json` referencia os resultados privados, sem credenciais ou dados privados.92 verificações dirigidas:23 de direitos/isolamento/idempotência dos perfis;15 leituras HTTP dos módulos;10 fronteiras HTTP, CSRF e recuperação;12 de recuperação dos formulários em DOM simulado; nove do controlador de taxas; sete de custo directo/correcção; seis industriais/correcção; cinco do perímetro de materiais; cinco de bloqueio/recuperação financeira. As provas anteriores de Compras e do núcleo foram reutilizadas, não repetidas por rotina.
|
||||
|
||||
O bloqueio concorrente observado é a linha de empresa do host, que serializa autoridade/origens antes de entrar no livro nativo. Uma segunda ligação atingiu o limite de aproximadamente5s, devolveu503 com `Retry-After:5`, e a mesma autoridade pôde continuar após a libertação da primeira transacção. Não criou pagamentos. Este ensaio não equivale a uma nova corrida de duas confirmações de escrita nem mede capacidade sustentada.
|
||||
|
||||
A primeira conferência de perfis desta etapa falhou porque o harness antigo exigia exactamente dois clientes e ignorava os direitos mínimos de leitura entre módulos. Foi corrigido para comparar os direitos aprovados e preservar clientes/associações antes/depois;23 verificações passaram. A preparação industrial de regressão inicialmente incluiu referências de taxas no mapa de cinco origens. Esse metadado novo, ainda sem lançamento, foi corrigido apenas nessa regressão, com estado anterior/posterior privado; a8085 recebeu o mapa correcto. Não se alteraram provas antigas para as fazer passar.
|
||||
|
||||
## Trabalho ainda necessário para o fecho integral
|
||||
|
||||
1. Ligar o consumo/devolução de Oficinas ao mesmo livro físico, com origem, limite e recepção distintos; concluir na8085 o ciclo físico2/-1/+0,5 e valorização100/50/25. Os custos já demonstrados usam materiais QA separados; não fingir essa ligação física como concluída.
|
||||
2. Concluir as continuidades previstas na matriz que ainda usam o adaptador antigo: documento comercial de origem de Oficina e comprovativos/entradas específicas do diário. A origem individual no novo diário funciona; nem todos os atalhos anteriores foram adaptados.
|
||||
3. Concluir a conferência do fecho QA após resolver todas as origens/pendências. Não fechar antecipadamente o período com cenários em falta. A paginação do catálogo de origens ficou entretanto concluída: filtros por família, páginas25/100 no servidor e selecção individual preservada. O catálogo de Stock pagina os movimentos antes de aplicar o filtro de tipo; pode mostrar páginas vazias para um tipo e explica a paginação física, sem omitir ou escolher outra origem.
|
||||
4. Concluir revisão visual, ensaio de arranque/recuperação completo e guião único. Transferência em trânsito, contagens por lotes e restantes recortes indicados na matriz conservam os seus limites.
|
||||
|
||||
A conferência de estruturas foi actualizada para consultar o host e o livro nativo canónico; já não apresenta dívida/diário como ausentes só por não estarem no host. Não faltam as tabelas mínimas dos seis módulos. Isso não comprova todas as funcionalidades: o gate continua `client_presentable:false`, sem aceitação integral nem capacidade de implantação declarada.
|
||||
|
||||
Preservados os seis registos protegidos, a cache cuja limpeza foi bloqueada, exemplos e provas anteriores, direitos reais e trabalho alheio. Sem novas bases, portas, demonstrações, roles PostgreSQL, publicação, candidata de Compras, checkpoint ou activação SGC. As flags disponibilizadas são apenas as deste recorte SGF privado expressamente autorizado.
|
||||
|
||||
Adenda de paginação:127 metadados de catálogo adicionais e um de unidade estrangeira, somente na transacção de regressão revertida. São fixtures de catálogo, não ordens executadas nem custos elegíveis. Foram percorridas seis páginas de25 e duas de100, cada uma com COUNT e SELECT limitado, sem duplicação nem exposição da unidade estrangeira;275 asserções, que não devem ser apresentadas como275 percursos de negócio. Duas leituras HTTP confirmaram o HTML filtrado e a segunda página na8085. O primeiro probe HTTP não consumia o corpo e atingiu uma asserção do cliente Node; o harness corrigido consumiu as respostas e ambas passaram. Não se atribui essa falha ao servidor nem à aplicação.
|
||||
@@ -0,0 +1,62 @@
|
||||
# SGF8085 — consolidação funcional dos seis módulos
|
||||
|
||||
10/11/2026. Uma instalação: **http://127.0.0.1:8085/sgf**, empresa/unidade QA existentes. Sem SGC, novas demonstrações, publicação ou candidata de Compras. As duas autorizações integrais de10/11 foram executadas apenas no recorte sintético aprovado. Código, interfaces e operações efectivas; esta entrega não é só documentação.
|
||||
|
||||
## Resultado disponível
|
||||
|
||||
Navegação actualizada por pedido expresso do utilizador: módulos alinhados horizontalmente, funções em dropdown por módulo, tanto na entrada como na aplicação. «Consultar» abre directamente cada percurso com um perfil já autorizado; a lista original dos17 perfis fica disponível separadamente. Não foram criados acessos ou efeitos para simplificar a entrada. O utilizador esclareceu depois que já consegue entrar; isso não presume revisão visual integral dos cinco módulos restantes ou da nova navegação.
|
||||
|
||||
| Módulo | Percurso na mesma8085 e evidência concreta |
|
||||
|---|---|
|
||||
| Comercial | Cliente/serviço associados explicitamente, cálculo/revisão, documento de teste862,07+137,93=1000MZN e PDF. Recebível da mesma origem. A oficina também gera um rascunho comercial500MZN, revisto distintamente, sem emitir automaticamente outra factura. |
|
||||
| Compras | C01–C10 preservado: fornecedor → requisição → propostas/avaliações → adjudicação distinta → ordem → recepção → factura conferida → obrigação100MZN. A continuação usa a mesma dívida nativa; não foi reexecutada a aquisição aceite. |
|
||||
| Stock | Livro físico único, saldos e movimentos por período; entrada2UN, saída1UN e devolução recebida0,5UN efectivas. Consumo de Oficina ligado à saída existente, sem segundo abatimento. Transferência1UN em trânsito, recebida0,4+0,6 por outra função: origem0,5UN, destino1UN, trânsito0; propriedade1,5UN/75MZN conservada. Novo artigo por lotes: entrada4UN, dois lotes2+2, identificação/retenção/libertação e contagem1,5+2; ajuste distinto−0,5UN, saldo3,5UN/70MZN. |
|
||||
| Oficinas | Ordem/autorização, tarefa105min e material2UN, revisão técnica, custo275→295 por par imutável; industrial1800→1820, trabalho500/CIF300 e residual300 separado. Outro apontamento liga consumo0,5 e devolução0,5 à entrega física1UN. Continuação explícita para o rascunho Comercial500. |
|
||||
| Financeiro | Recebível1000, afectações400/600 e reversão400, saldo400; obrigação original de Compras100→80→100 por afectação/reversão20. Pagamento confirmado isoladamente não abate a dívida. Consultas paginadas, comprovativos e histórico por origem. |
|
||||
| Contabilidade | Mesmo livro nativo, **18 lançamentos equilibrados e15 contas QA**, plano pesquisável, diário, balancete e razão, correcções por pares, recibos/atalhos antigos ligados ao mesmo núcleo. Novos lançamentos80 e10 do artigo de lotes; transferências internas não são consumo nem dívida. Valor da conta de Stock145MZN =75+70; não somar quantidades de artigos diferentes. |
|
||||
|
||||
O fecho QA foi executado e recuperado com revisão distinta em transacção revertida: **18 factos, zero pendentes**. O período real da apresentação mantém-se aberto; não houve reabertura. Um movimento desconhecido fora do armazém do livro de valorização passa a pendência de fecho, não desaparece nem é classificado automaticamente como transferência interna.
|
||||
|
||||
## Concorrência, falhas e isolamento
|
||||
|
||||
O ensaio em dois processos identificou o bloqueio: a linha do utilizador QA no host é mantida até terminar a transacção nativa; depois existe também a serialização do tenant do livro físico. A segunda confirmação recebeu503 ao atingir o limite5s. Libertada a primeira transacção, o mesmo pedido recusou409 por versão antiga; uma nova conferência recebeu somente os400milésimos restantes. Uma expedição, duas recepções, três eventos/movimentos; nenhuma duplicação. Isto comprova esse conflito dirigido, não capacidade de carga sustentada.
|
||||
|
||||
As prévias executam os serviços dentro de savepoint revertido. A confirmação volta a conferir pessoa, direitos SGF/nativos, âmbito, mapa privado fixado, versões e impacto. Falha injectada depois do writer reverte movimento, repartições e recibo juntos. Repetição da confirmação devolve o mesmo recibo; chave usada com conteúdo diferente409. Há consulta histórica por chave depois de renovar a sessão, sem executar o comando. Retorno não recebido exige recepção física explícita na origem.
|
||||
|
||||
Os serviços nativos `InventoryLots`/`InventoryCounts`/`StockWorkflow` foram reutilizados sem modificar o pacote Compras fixado. O novo protocolo de trânsito acrescenta eventos auditados e escreve no mesmo `stock_movements`; não cria tabela de saldos ou outro livro. A excepção contabilística interna exige operação, parcelas, pessoa distinta, taxa revista e correspondência física reconciliadas. A conta SELECT-only anterior mantém as três tabelas.
|
||||
|
||||
O núcleo QA estava em modo de funções legadas e ignorava perfis. Para aplicar as sete funções aprovadas, o instalador conservou cada função antiga num perfil QA equivalente e passou ao mecanismo nativo de perfis, auditado. Não concedeu `warehouse` ao revisor. Os dois direitos novos estão exclusivamente na função QA de conferência, limitados pelo mapa privado ao destino e artigo/armazém aprovados. Leitura de Compras/Financeiro após esta alteração foi comprovada; nenhum acesso real/PUBLIC/role PostgreSQL foi criado.
|
||||
|
||||
## Provas consolidadas
|
||||
|
||||
Índice verificável: [sgf-six-module-functional-review-20261110.json](proofs/sgf-six-module-functional-review-20261110.json). Ficheiros privados referenciados por caminho/hash, sem credenciais ou dumps no repositório.
|
||||
|
||||
| Prova dirigida | Resultado e alcance |
|
||||
|---|---|
|
||||
| Ponte física Oficina–Stock |18 verificações; consumo sem segundo abatimento, devolução distinta, recuperação/falha e valorização100/50/25. Prova válida reutilizada. |
|
||||
| Recuperação cliente da ponte |9 verificações de pedidos congelados; reutilizadas. |
|
||||
| Oficina–Comercial |8 verificações e geração HTTP efectiva500; prova válida reutilizada. |
|
||||
| Continuidade contabilística |13 leituras/atalhos/recibos; prova válida reutilizada. |
|
||||
| Trânsito/lotes/ajuste |27 verificações; preparação/revisão, parcelas, isolamento, retenção/expiração, revogação, falha, recuperação e valorização80/10. Versões anteriores20 não são somadas. |
|
||||
| Concorrência de recepção |Dois processos,503 durante o bloqueio,409 após libertação e conferência nova do restante; ensaio próprio, não uma contagem de percursos comerciais. |
|
||||
| Reconciliação contabilística interna |6 verificações; transferência não gera despesa e o período confere fonte/destino. Apenas a última passagem da mesma prova é indexada. |
|
||||
| Recuperação/retorno/permissão nativa |6 verificações adicionais, todas revertidas. |
|
||||
| Preservação/conferência final |12 verificações: clientes/rascunhos e16 lançamentos anteriores idênticos, binding original intacto,145MZN,18 lançamentos e recusa de origem física desconhecida. |
|
||||
| Fronteiras HTTP afectadas |20 verificações, páginas25/100, histórico, contexto antigo409, acesso indevido403, Compras/Financeiro preservados e SGC404. |
|
||||
| Ecrã executado com DOM e HTTP |10 verificações: consulta/histórico e prévia HTTP reais; confirmação/perda de resposta simuladas, zero comandos de negócio confirmados pelo harness. Não é navegador nem revisão visual. |
|
||||
| Cliente de confirmação |9 verificações dirigidas de recuperação, corpo imutável e recusa de alteração. |
|
||||
| Fecho do período actualizado |7 verificações no conjunto actual, rollback integral. Reexecução necessária porque Stock/origens mudaram; não é uma repetição das aquisições/vendas/custos. |
|
||||
| Arranque/recuperação |Prova anterior válida: reinício só do PHP8085, nova sessão,29 tabelas canónicas idênticas e SGC404. Não repetida nem apresentada como reinício do sistema operativo ou do PostgreSQL partilhado. |
|
||||
|
||||
As92 provas de integração anteriores, a paginação das origens, as provas C01–C10 e as38PG/15DOM/seis HTTP de Stock anteriores continuam preservadas. As execuções intermédias corrigidas não são somadas como provas novas. Erros iniciais de harness (nomes de colunas, IDs físicos da regressão, opções DOM e rotas/estados esperados) foram corrigidos; só resultados estruturados `passed:true` são aceites.
|
||||
|
||||
## Preservação e limites
|
||||
|
||||
- Clientes, rascunhos de serviços e de facturação existentes na8085 foram comparados integralmente antes/depois. Os16 lançamentos anteriores continuam idênticos; só80/10 foram acrescentados. Binding/pacote originais de Compras preservados. Novos artigos e origens de entrada são QA seleccionados explicitamente; a ordem preparada para o ensaio físico não é declarada outra aquisição C01–C10 executada.
|
||||
- Os seis registos protegidos não receberam associações ou alterações. As outras bases protegidas não foram ligadas pelos novos scripts. Cache bloqueada, demonstrações anteriores e trabalho alheio preservados. Dumps/backups só privados; sem commit/checkpoint/aceitação presumidos.
|
||||
- Revisão visual: **o utilizador confirmou «Abre e está legível» para o novo ecrã Stock em10/11**. O controlo automático terminou por não conseguir determinar com segurança o URL no Windows; não foi contornado. Esta confirmação não é revisão visual de todos os outros ecrãs, responsividade ou acessibilidade.
|
||||
- O arranque em máquina já com o cluster existente activo e o reinício do servidor8085 estão comprovados. O caminho de arranque do cluster existente parado foi preparado, mas não testado desligando PostgreSQL partilhado ou outras aplicações. Reinício completo do computador permanece sem prova.
|
||||
- Carga sustentada, retenção/quotas de anexos, reconciliação geral de órfãos e capacidade de implantação continuam pendências operacionais próprias. Provas de concorrência, paginação, DOM e configuração QA não as validam.
|
||||
- Cenários financeiros, contas, imposto documental e documentos continuam artificiais; sem operações bancárias, fiscalidade certificada, dados/acessos reais ou produção geral valorizada. Calendário de marcações de oficina, lembretes, documentos comerciais adicionais e relatórios legais fora das funcionalidades fixadas na matriz não foram declarados implementados por este fecho.
|
||||
|
||||
**Saldo de entrega:** funcionalidades obrigatórias da matriz e ligações dos seis módulos executadas no recorte QA da mesma8085. A apresentação integral continua dependente da conferência visual restante e da aceitação explícita do conjunto. Isto não declara capacidade de implantação nem transforma o ensaio em produto operacional real certificado.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Directiva de entrega: SGF autónomo, completo e apresentável
|
||||
|
||||
Estado actual de10/11/2026: [consolidação funcional dos seis módulos](SGF_SIX_MODULE_CLOSURE_20261110.md), [guião de apresentação](SGF_GUIAO_APRESENTACAO.md), [guia de uso](SGF_USO_LOCAL.md). Entrada única `/sgf`,18 lançamentos no diário comum, integração física Oficina–Stock, continuação Oficina–Comercial, trânsito com recepção distinta, lotes/ajuste valorizado e fecho QA integral provados. Stock confirmado visualmente pelo utilizador; revisão visual restante e aceitação integral não presumidas. O diagnóstico e as etapas abaixo são históricos e não reabrem lacunas já fechadas. Carga/implantação e reinício completo do sistema mantêm prova própria.
|
||||
|
||||
10/11/2026. O proprietário determinou concluir **todos os módulos do SGF** e entregar uma solução para apresentar a potenciais clientes. Este passa a ser o objectivo de fecho do projecto, substituindo a continuação de incrementos do conector SGC como prioridade.
|
||||
|
||||
## Entrega obrigatória
|
||||
|
||||
Uma instalação SGF, um endereço de entrada, empresa/unidade e perfis coerentes: **Comercial, Compras, Stock, Oficinas, Financeiro e Contabilidade**. Cada módulo tem de oferecer os ecrãs, operações, consultas e histórico previstos, e os percursos entre módulos têm de conservar documento, versão, autoridade e efeito único. O produto não pode exigir o SGC a correr ou pedir ao apresentador para mudar entre demonstrações.
|
||||
|
||||
O [contrato de conclusão](integration/sgf-solution-contract.json) fixa funcionalidades por módulo e oito condições de entrega. Fonte de código, menu, catálogo de relatórios ou teste antigo isolado não contam como funcionalidade entregue na instalação. Não se declara percentagem de conclusão a partir do número de testes.
|
||||
|
||||
Além das funções: apresentação visual coerente, percurso comercial de ponta a ponta, dados fictícios identificados, perfis e isolamento, arranque, recuperação e guião de apresentação. As operações reais/fiscais/bancárias continuam sujeitas às suas validações e autorizações: a apresentação controlada não lhes atribui validade por inferência.
|
||||
|
||||
## Conferência de partida efectuada
|
||||
|
||||
A [conferência da instalação actual](proofs/sgf-solution-closure-baseline-final-20261110.json) foi executada por SQL **READ ONLY**, sem arrancar aplicações nem alterar bases, direitos, cache ou8085. Confirmou a identidade física/role do destino e confrontou tabelas com declarações reais do código, caminhos de fontes e provas existentes.
|
||||
|
||||
- Compras tem o percurso aceite até obrigação em8085; conservar e reutilizar essa prova.
|
||||
- Comercial, Oficinas, Financeiro e Contabilidade ainda têm estruturas de host necessárias ausentes nessa instalação. As suas provas em outras composições não equivalem à entrega no mesmo SGF.
|
||||
- Stock tem leitura e relatório integrados, mas faltam comandos/interfaces SGF obrigatórios e partes do percurso de transferência. Uma tabela ausente no host não é presumida ausente do livro nativo de Stock/Compras.
|
||||
- Menus de Stock e Contabilidade ainda incluem descrições e catálogos de funcionalidades por implementar; isso tem de ser resolvido com operações/consultas efectivas, não com outra página informativa.
|
||||
|
||||
Estado honesto: **SGF ainda não pronto para apresentação comercial completa**. A conferência é um inventário mínimo de estruturas e fonte, não uma instalação/migração aprovada ou teste funcional dos seis módulos. A primeira projecção provisória tinha três nomes de tabela e uma referência de prova incorrectos; foi corrigida contra o código antes de ser usada como diagnóstico. Só a versão final acima é válida.
|
||||
|
||||
## Ordem de fecho
|
||||
|
||||
Actualização de10/11/2026:70 tabelas de composição instaladas na mesma8085, com backup e preservação comparada de dados/sequências/permissões/associações. Guardas de Comercial/Oficinas/custos/recebíveis preparadas com identidade QA exacta e flag desligada; código Stock instalado inactivo, agora também com contagem/aplicação de diferença/equipamento. A [prova consolidada](proofs/sgf-six-module-composition-20261110.json) reúne ensaios dirigidos e consultas HTTP ao percurso existente. Não há novos acessos nem efeitos financeiros na8085. A [decisão de disponibilização](SGF_8085_NEXT_AUTHORIZATION.md) apresenta os perfis sintéticos e a continuação financeira excluída da aprovação anterior. O inventário de host agora só sinaliza Financeiro/Contabilidade; não se copiará dívida nativa para eliminar um aviso de tabelas ausentes.
|
||||
|
||||
1. **Composição única:** preparar o plano exacto de schema/configurações/guardas e perfis sintéticos para os seis módulos, preservando dados anteriores. Confrontar as estruturas já existentes; não executar migrations globais nem mover responsabilidades/associações por inferência.
|
||||
2. **Funcionalidades:** fechar lacunas dos próprios módulos, reutilizando os motores existentes. Não substituir conclusão funcional por filtros, benchmarks ou melhorias do conector SGC.
|
||||
3. **Integração:** fechar Comercial→Financeiro→Contabilidade, Compras→Stock→Financeiro→Contabilidade e Oficinas→Stock→Custos→Comercial/Contabilidade, com revisão individual e fonte única.
|
||||
4. **Produto apresentável:** rever visual/navegação, erros, formulários, continuidade, relatórios e guião; testar o arranque/recuperação da mesma instalação. Não presumir revisão visual a partir de DOM simulado.
|
||||
5. **Aceitação integral:** um percurso demonstrável dos seis módulos na mesma instalação e um relatório consolidado de limitações reais. Corrigir as falhas detectadas antes de declarar pronto.
|
||||
|
||||
O contrato é de fecho, não uma autorização para aumentar o escopo indefinidamente. Capacidades adicionais propostas devem ser identificadas separadamente, sem reabrir decisões aceites ou produzir nova demonstração por incremento.
|
||||
|
||||
## Verificação de entrega
|
||||
|
||||
```powershell
|
||||
& 'C:/laragon/tools/sgf-tempo/node-v24.22.1-win-arm64/node.exe' scripts/check-sgf-solution.mjs
|
||||
```
|
||||
|
||||
O comando lê apenas metadados do destino conhecido e termina com código2 enquanto a aceitação integral estiver ausente/incompleta. Uma captura de inventário pode ser escrita em ficheiro novo, mas não significa aprovação. O fecho exige `docs/proofs/sgf-single-solution-acceptance.json`, ligado ao hash deste contrato, aos seis módulos/funcionalidades e a todos os critérios na instalação escolhida; a existência do ficheiro ou de tabelas não basta isoladamente.
|
||||
|
||||
O [roteiro histórico](MODULE_IMPLEMENTATION_AUDIT.md), as aceitações e provas anteriores ficam preservados como evidência de componentes. Os seis registos, cache bloqueada, direitos reais e trabalho alheio continuam protegidos. Não houve activação, publicação, novo servidor/base/demonstração, concessão ou checkpoint nesta definição de entrega.
|
||||
@@ -0,0 +1,48 @@
|
||||
# Cadastro e revisão de artigos — entrega8085
|
||||
|
||||
10/11/2026 · `SGF-STOCK-CATALOGUE-QA-v1`, autorizado expressamente. **Stock → Artigos e revisão do catálogo**, na instalação existente. Código, interface, persistência e provas entregues; sem nova demonstração, base, porta ou SGC.
|
||||
|
||||
## Percurso concluído
|
||||
|
||||
Pesquisar artigos existentes e consultar o processo/ficha. Artigos anteriores sem proveniência deste percurso permanecem só para consulta. Armazém QA2 prepara código, designação, unidade e fundamento; a intenção fica versionada, sem criar artigo ou saldo. Conferência QA12 escolhe a preparação actual, confere o impacto e aprova ou recusa. Só a aprovação disponibiliza o artigo no catálogo nativo existente.
|
||||
|
||||
Uma nova preparação/revisão permite corrigir **apenas a designação de artigos criados neste percurso**. Código/unidade permanecem imutáveis. Não associa automaticamente um código anterior nem edita os artigos dos exemplos aceites. Proposta recusada não altera o catálogo. Origem, preparação/revisão, autor, data e fundamento conservam-se no histórico append-only; criação/alteração, proveniência, auditoria e recibo pertencem à mesma transacção nativa.
|
||||
|
||||
A confirmação revalida autoridade actual, actor nativo activo, contexto, binding, versão, artigo de origem e impacto. Mudanças exigem nova conferência. Repetir a chave devolve o resultado original; nova sessão recupera recibo próprio por GET, sem executar operação. O campo de código respeita o limite nativo30; designação150 e unidade12, sem conversões implícitas.
|
||||
|
||||
Pesquisa literal e páginas25/100; histórico por processo e estado. A interface conserva campos ao paginar/cancelar prévia e exige descarte explícito antes de trocar de registo. Sem escolha automática do primeiro artigo ou decisão. Código/unidade ficam só para leitura nas correcções. Formulário e origem ficam bloqueados durante prévia/confirmação incerta.
|
||||
|
||||
## Resultado conservado e acessos
|
||||
|
||||
Na8085 existe **um** artigo novo `QA-CATALOGO-INTEGRADO`, unidadeUN, designação fictícia, preparado2/revisto12 em duas versões/recibos. Sem saldo inicial, movimento, lote, preço, custo, compra, dívida ou lançamento. O mesmo ID aparece no leitor físico SELECT-only e no selector original de operações; nenhuma recepção ou saída foi repetida para provar essa ligação.
|
||||
|
||||
Aplicados exactamente `stock.items.prepare` ao QA2 e `stock.items.review` ao QA12: duas concessões por livro existente, quatro no total8085/regressão. Consulta reutiliza `stock.view`. Sem nova pessoa, perfil, role PostgreSQL ou concessão SQL/PUBLIC; a ligação física de leitura mantém os três SELECTs e o binding original. A capacidade SQL da ligação nativa não substitui a nova autoridade de negócio, exigida pelo adaptador antes de qualquer escrita.
|
||||
|
||||
Rootflag desligada por omissão; modo aprovado disponibilizado apenas na8085 escolhida/regressão. As estruturas novas são `sc_catalogue_meta`, `sc_catalogue_versions` e `sc_catalogue_commands`, apenas nos livros QA já existentes. Writers de movimentos, políticas originais e pacotes fixados preservados.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
-34 regressão: intenção versus catálogo, aprovação distinta, versão antiga, código existente/imutabilidade, recusa/correcção de designação, histórico/recibo/contexto/revogação, recuperação após falha e preservação. Fixtures revertidas. A falha no recibo reverte artigo+versão+auditoria; a mesma confirmação recupera um artigo único.
|
||||
-11 limites/guardas: código30/designação150, entradas inválidas, leitor sem preparação, módulo errado, prévia forjada e tentativa de alterar tenant.
|
||||
- Concorrência na regressão: primeira aprovação mantém a transacção; segunda atinge o limite após cerca5,22s e devolve503; após libertação recusa409 por versão alterada. Repetição da confirmação original devolve200/replay. Um artigo e uma aprovação, sem duplicação. A fixture concorrente fica identificada na regressão, sem movimento.
|
||||
-22 HTTP8085: duas confirmações conservadas, repetições sem duplicação, catálogo/selector/leitor físico, histórico e recusas.
|
||||
-15 DOM→HTTP real: uma prévia revertida, zero confirmações adicionais, campos preservados, descarte explícito, artigo anterior só de consulta, código/unidade imutáveis e recuperação.
|
||||
- Três guardas de navegação: função apenas quando disponibilizada e com `stock.view`; dois checksums dos scripts efectivamente servidos.
|
||||
|
||||
85 verificações de catálogo, mais concorrência e checksums. Provas anteriores válidas reutilizadas. Não se repetiram suites de outros módulos. [Índice de provas/fontes](proofs/sgf-stock-catalogue-20261110.json).
|
||||
|
||||
Comparação de38 conjuntos de dados originais e três bindings: intactos. Apenas duas concessões aprovadas, um artigo e duas auditorias de comando acrescentados na8085. Diário27, Caixa950, posições, cinco cálculos, artigos/movimentos anteriores e restantes exemplos preservados. Sem comandos/conexões dirigidos aos seis registos protegidos ou limpeza/apagamento da cache. Backups/dumps/dados privados fora do repositório; sem commit/checkpoint ou aceitação presumida.
|
||||
|
||||
## Falha transversal de entrega de scripts encontrada e corrigida
|
||||
|
||||
A conferência dos bytes publicados detectou que o router local não incluía alguns scripts SGF novos na lista de ficheiros públicos. Em vez de JavaScript, devolvia o HTML da aplicação com200. **API200, página legível e DOM com importação do código local não tinham comprovado que o navegador recebia o cliente correcto.** As provas desses níveis continuam válidas, mas não constituem prova de carregamento do script ou funcionamento visual.
|
||||
|
||||
O router passou a servir dez nomes exactos de módulos públicos, incluindo as dependências partilhadas de Stock, documentos, Caixa, IVA, regras, bancos, indicadores e entrada. A extensão é limitada à composição8085 seleccionada; o corpo anterior e a lista de ficheiros anteriores foram preservados. Não abre acesso genérico ao filesystem. Módulo desconhecido na8085 devolve404 em vez do HTML da aplicação. Não houve reinício, nova porta, limpeza de cache ou alteração do encaminhamento das outras instalações.
|
||||
|
||||
17 verificações de fronteiras/comparação do router e13 HTTP confirmam MIME JavaScript, bytes por SHA, dependência comum, query string,404 e script anterior. Esta correcção é transversal de entrega; não soma outra vez provas dos workflows nem declara revisão visual concluída. [Relatório específico](SGF_CLIENT_ASSET_DELIVERY.md).
|
||||
|
||||
## Limites
|
||||
|
||||
Não inclui armazéns novos, importação em massa, fusão, suspensão geral, conversões de unidade, valorização ou edição de artigos anteriores. O wrapper administrativo original conserva os seus bloqueios; estes ensaios não validam carga sustentada. Leitores físicos invalidam naturalmente referências antigas quando o catálogo muda; não houve limpeza de cache.
|
||||
|
||||
Revisão visual real do conjunto e capacidade de implantação continuam pendentes. A via de navegador bloqueada não foi repetida. Fiscalidade geral e restantes lacunas da matriz não são declaradas concluídas por este cadastro. Sem acessos/operações reais, publicação, candidata de Compras, aceitação ou checkpoint.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Decisão agrupada — cadastro de artigos no Stock
|
||||
|
||||
10/11/2026 · `SGF-STOCK-CATALOGUE-QA-v1`. **Autorizado expressamente e entregue; ver [relatório](SGF_STOCK_CATALOGUE_DELIVERY.md).** Conferência apenas de leitura em `scripts/sgf-stock-catalogue-access-readonly.php`: o SGF apresenta/pesquisa artigos existentes, mas não tem o percurso administrativo de preparação e revisão de novos artigos. Os direitos abaixo foram aprovados e aplicados apenas nos dois livros QA existentes. O texto conserva o âmbito da decisão. A capacidade SQL da ligação nativa não constitui autorização de negócio e não será usada para contornar essa ausência.
|
||||
|
||||
## Resultado funcional proposto
|
||||
|
||||
Na mesma8085, Stock → Artigos: pesquisar, consultar ficha/origem/histórico e preparar um novo artigo com código, designação, unidade e fundamento explícitos. Outra pessoa confere a versão e o impacto, aprova ou recusa. Só a aprovação cria o artigo no catálogo físico existente. Guardar proposta não o disponibiliza para recepção/consumo.
|
||||
|
||||
O artigo aprovado poderá ser escolhido explicitamente pelos selectores já existentes; não cria movimento, saldo inicial, lote, preço, custo, compra, dívida ou lançamento. Permitir uma correcção revista de designação **apenas dos artigos criados por este percurso**, mantendo código/unidade imutáveis e histórico anterior. Não alterar os artigos dos exemplos aceites nem atribuir empresas/unidades automaticamente a artigos antigos. Armazéns, conversões de unidade, importação em massa, fusão de duplicados e suspensão geral de artigos não fazem parte desta decisão.
|
||||
|
||||
Reutilizar contexto, revisão distinta, prévia/confirmar, recibo/chave e auditoria administrativos existentes. Novo adaptador de catálogo fará a escrita delimitada e a proveniência na mesma transacção nativa; não ampliar o writer de movimentos ou os SELECTs da ligação física de leitura. Versão, actor activo, vínculo físico, autoridade, código único e descrição escolhida são novamente conferidos na confirmação. Nunca apagar artigos ou histórico.
|
||||
|
||||
## Dois direitos e duas concessões por livro QA
|
||||
|
||||
Tenant1/empresa2/unidade2, apenas nos livros QA **8085 e regressão já existentes**:
|
||||
|
||||
|Direito SGF novo|Única função a receber|Poder delimitado|
|
||||
|---|---|---|
|
||||
|`stock.items.prepare`|Armazém — Compras, utilizador QA2|Preparar novo artigo ou sucessora da designação de artigo criado neste percurso; não aprovar.|
|
||||
|`stock.items.review`|Conferência técnica QA, utilizador12|Rever favoravelmente/recusar preparação alheia e aplicar a decisão actual; sem preparar ou alterar artigos anteriores.|
|
||||
|
||||
Consulta reutiliza `stock.view`, já existente nestas funções. **Duas concessões por base, quatro no total**, sem nova pessoa, perfil, role PostgreSQL, direito PUBLIC, acesso real ou função nativa genérica `warehouse`. A ligação nativa existente já dispõe de escrita SQL e sequência; nenhuma concessão SQL adicional é proposta. A nova autoridade de negócio será exigida mesmo assim, antes de invocar o adaptador.
|
||||
|
||||
Novas estruturas de propostas, versões, proveniência e recibos somente nesses dois livros QA; nenhuma migration ou instalação numa empresa/destino real. Não se presume que os poderes de confirmar movimentos ou rever lotes autorizam administrar o catálogo.
|
||||
|
||||
## Provas e exemplo de utilização
|
||||
|
||||
Na regressão: direitos/contexto/empresa/unidade, preparação versus revisão, recusa de revisão própria, versão antiga, código duplicado, código/unidade imutáveis, concorrência, repetição e recuperação após falha, atomicidade artigo+proveniência e ausência de movimentos. Na8085: um artigo explicitamente novo `QA-CATALOGO-INTEGRADO`, designação fictícia, unidadeUN, **sem saldo inicial**, preparado2/revisto12, ficha e histórico. Não repetir os antigos percursos de compra/recepção/valorização.
|
||||
|
||||
Preservar27 lançamentos, Caixa950, documentos e posições, artigos e movimentos anteriores, cinco cálculos, seis registos/cache e trabalho alheio. Sem nova demonstração/base/porta, SGC, valorização, acessos/operações reais, publicação, candidata de Compras, aceitação/checkpoint ou declaração de capacidade de implantação. Revisão visual/carga separadas. O âmbito inclui o percurso completo descrito, não requer aprovação por campo ou teste.
|
||||
@@ -0,0 +1,53 @@
|
||||
# Fecho dos percursos pendentes de Stock na mesma8085
|
||||
|
||||
Estado: **autorizado expressamente em10/11/2026 — «Autorizar este fecho QA de Stock»; implementação em curso**. É uma extensão do âmbito já executado, não outra autorização para a entrada2/saída1/devolução0,5, já concluída e valorizada100/50/25. A aprovação não é uma declaração de testes, instalação ou aceitação concluídos.
|
||||
|
||||
## Porque é necessária uma decisão
|
||||
|
||||
A matriz de conclusão ainda identifica transferência em trânsito/recepção distinta e contagem por lotes. A transferência actualmente utilizável é imediata e atómica; a contagem integrada é sem lotes. Não apresentar estas variantes como equivalentes.
|
||||
|
||||
A autorização anterior discriminou `stock.operations.prepare` e `stock.operations.confirm`. O controlador nativo de lotes exige funções próprias: `InventoryLots::allows`/`canActivate` exigem preparação e revisão distintas; o perfil Armazém actual não tem sequer `inventory_lot_read`/`inventory_lot_prepare`, e o revisor proposto não tem `inventory_lot_review`. Conferência feita sem conceder acessos: `scripts/sgf-stock-remaining-rights-check.php` e resultado privado indexado no relatório desta entrega.
|
||||
|
||||
Regra do proprietário: «Se forem necessários novos direitos, apresenta-os antes de conceder acessos.» Não usar `stock.view`, a verificação técnica de Oficina ou uma flag para contornar a falta dessas autoridades.
|
||||
|
||||
## Direitos mínimos propostos
|
||||
|
||||
Somente nos dois livros QA já existentes, instalação8085 e regressão, tenant1/empresa2/unidade2. Nenhuma conta de aplicação, role PostgreSQL ou acesso real novo.
|
||||
|
||||
| Camada | Função existente | Direito/acesso proposto | Limite obrigatório |
|
||||
|---|---|---|---|
|
||||
| SGF | QA conferência técnica (`workshop_verify`, actual utilizador12) | **novo** `stock.transfers.receive` | Receber parcelas de transferências destinadas apenas ao armazém QA1; sem emitir saídas genéricas ou receber noutra unidade. |
|
||||
| SGF | A mesma função QA | **novo** `stock.lots.review` | Activação/libertação e revisão de contagem apenas do novo artigo de lotes no armazém QA integrado3. Não concede `stock.operations.confirm`. |
|
||||
| Núcleo físico QA | Armazém actual, actor nativo6 | `inventory_lot_read`, `inventory_lot_prepare`, `inventory_lot_hold` | Funções existentes do núcleo, novas concessões sintéticas. Preparar/identificar/reter; não aprovar a própria configuração ou libertação. |
|
||||
| Núcleo físico QA | Revisor distinto, actor nativo3 | `inventory_lot_read`, `inventory_lot_review`, `inventory_lot_release`, `inventory_adjust_review` | Funções existentes; outra pessoa para activação/libertação e aplicação da diferença do lote seleccionado. Sem função nativa genérica `warehouse`. |
|
||||
|
||||
A ligação privada da função12 ao actor nativo3 será explícita, fixada por hash e auditada, preservando os restantes bindings. A recepção do novo protocolo de transferência tem a nova autoridade SGF específica, identidade nativa activa e destino revalidados; não imita uma autorização genérica de armazém que o actor não possui. As permissões nativas de lotes acima são as que o código original efectivamente exige.
|
||||
|
||||
Não alargar os SELECTs da conta de leitura física actual: conserva as três tabelas. A consulta específica de lotes/trânsito será servida pelo adaptador autorizado, com filtros por pessoa/empresa/unidade/armazém e campos mínimos, sem expor documentos financeiros ou dados de outras origens.
|
||||
|
||||
## Percurso em trânsito a entregar
|
||||
|
||||
Transferir1UN do artigo QA já valorizado, do armazém integrado3 para o armazém QA1, mantendo propriedade na mesma empresa/unidade. Antes:1,5UN/75MZN. Após expedição:0,5UN disponíveis na origem e1UN em trânsito. Após recepção:0,5UN na origem e1UN no destino, trânsito0; valor próprio total75MZN conservado. Nenhuma alteração ao artigo original do exemplo de Compras.
|
||||
|
||||
Preparação/prévia, expedição e recepção são decisões explícitas. Autoridades de origem/destino e versões voltam a ser conferidas; parcelas não podem ultrapassar o enviado. Uma recusa não inventa uma devolução física: o retorno à origem necessita da sua recepção declarada. Pendências em trânsito ficam visíveis e quantificadas. Header/eventos e movimentos usam a mesma transacção e livro físico, com chave única, autor/data/fundamento/estado anterior e posterior; sem outro saldo persistido.
|
||||
|
||||
A transferência interna não cria receita, consumo ou outra dívida. A reconciliação contabilística deve distinguir localização disponível e propriedade em trânsito, mantendo o valor total e a referência à taxa revista. Não omitir movimentos do fecho por serem desconhecidos: a excepção interna precisa de prova de origem, propriedade, parcelas e valor reconciliados. Sem correcção de custos directos/industriais por arrasto.
|
||||
|
||||
## Percurso de lotes a entregar
|
||||
|
||||
Um terceiro artigo exclusivamente fictício `QA-LOTE-INTEGRADO`, no armazém3, com4UN em dois lotes identificados de2UN. Configuração preparada por Armazém e activada distintamente; identificação, retenção e libertação rastreáveis pelos serviços originais. Sem presumir validade de lotes reais.
|
||||
|
||||
Contagem explícita: lote1=1,5UN, lote2=2UN, total3,5UN; diferença−0,5UN. A contagem é observação, não ajuste automático. Outra função revê/aplica a diferença após voltar a conferir versões de lotes e livro. Taxa QA20MZN/UN preparada/revista; entrada80MZN e diferença10MZN pelo mesmo diário, com conta artificial adicional `QA-DIFERENCA-INVENTARIO`. Saldo final deste artigo3,5UN/70MZN; artigo anterior permanece1,5UN/75MZN de propriedade total. Não somar quantidades de artigos diferentes; total monetário desses dois artigos145MZN.
|
||||
|
||||
Sem novos tipos de imposto, salários, dinheiro, fiscalidade real ou valorização histórica. Contas/regras novas são apenas QA e têm conferência distinta. As alterações da origem, lote, contagem, taxa ou autoridade recusam a conferência antiga. O período2026 da apresentação conserva-se aberto; o fecho completo será ensaiado com rollback, sem reabertura.
|
||||
|
||||
## Provas e condições de entrega
|
||||
|
||||
- Ecrãs no mesmo SGF8085, selecção explícita de origem/destino/lotes, impacto antes de confirmar e recuperação do mesmo pedido. Não criar outra demonstração.
|
||||
- Isolamento de empresa/unidade/armazém, recusa de auto-revisão, revogação, lote expirado/retido, versões antigas e soma incompatível de contagem.
|
||||
- Duas recepções concorrentes não excedem a parcela restante; mesma chave não duplica eventos, movimentos ou lançamentos; erro após writer reverte também o recibo e permite recuperação.
|
||||
- Saldo disponível/em trânsito/próprio e quantidades por lote reconciliam com o livro único; transferências não são contabilizadas como consumo. Ajuste e valorização conservam ligação à contagem/lotes e à taxa revista.
|
||||
- Reutilizar provas válidas; testar apenas as fronteiras alteradas e o percurso novo. Sem índices no destino ou alegação de carga/implantação por inferência.
|
||||
- Preservar16 lançamentos actuais, percurso C01–C10, seis registos protegidos, cache bloqueada e trabalho alheio. Sem publicação, candidata de Compras, SGC, credenciais públicas, novos servidores/bases/contas ou concessões reais.
|
||||
|
||||
A aprovação deste recorte abrange a implementação, as sete concessões de funções nativas acima e os dois direitos SGF apenas nos perfis QA indicados, os novos dados fictícios, regras/conta artificiais e sua disponibilização limitada depois das provas. Não será pedida nova decisão por campo/teste deste mesmo recorte. A revisão visual continua separada: a ferramenta interrompeu o controlo por não conseguir determinar o URL do navegador e não será contornada.
|
||||
@@ -0,0 +1,29 @@
|
||||
# Stock — produtos sem movimento na instalação existente
|
||||
|
||||
Entregue em10/11/2026 na mesma8085: Stock → Relatórios → Produtos sem movimento. Usa o direito existente `stock.view`, o contexto empresa/unidade/pessoa e a ligação física SELECT-only já instalada. Sem novos direitos, bases, demonstrações, índices ou comandos de Stock. Configuração de origem desligada por omissão; disponibilização limitada à instalação QA autorizada.
|
||||
|
||||
## Significado e utilização
|
||||
|
||||
Escolher explicitamente o dia de corte UTC, dias consecutivos sem registo físico (1–3650), código/nome literal, armazém autorizado e página25/100. O selector de armazéns é paginado e não escolhe o primeiro registo. A opção Existências no mesmo menu abre também a consulta física existente, em vez da indicação antiga de indisponibilidade. Com corte10/11 e30 dias, o intervalo sem registo vai de12/10 às00:00 até10/11 às23:59:59…; um último movimento de11/10 ainda é elegível, um de12/10 não.
|
||||
|
||||
Só se conclui sobre pares artigo/armazém com movimento físico conhecido antes do fim do corte. Cada linha tem artigo/unidade, armazém, último registo UTC, dias e quantidade física exacta no corte. Artigos sem história não são atribuídos a armazéns, nem declarados inactivos ou com saldo zero. São considerados todos os tipos de movimento físico da fonte; não se classificam automaticamente causas comerciais. Metadados são actuais. Sem totais entre unidades, valorização, reservas, bloqueios ou disponibilidade. Um corte futuro consulta apenas registos conhecidos, sem prever actividade por registar.
|
||||
|
||||
## Consulta e guardas
|
||||
|
||||
Agrupamento, filtros, contagem e paginação SQL, sem transportar todo o universo para PHP. Cinco SELECTs na projecção: três de revisão existente, contagem e página; exclui autenticação/guardas do host e verificação da fonte. O hash de metadados existente continua agregado na base; não se declara optimização de carga/memória dessa revisão.
|
||||
|
||||
Uma transacção própria REPEATABLE READ/READ ONLY e limite SQL3s. Referência cifrada600s ligada à revisão física, pessoa/contexto/filtros/tamanho; mudança exige nova leitura. A página seguinte conserva essa referência, sem a transformar em autorização de escrita. Direitos e mapeamento de armazéns são revalidados pelo controlador existente; falhas não apresentam saldos zero. O cliente descarta respostas de consultas abandonadas.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
-23 verificações na regressão existente:128 pares frios, páginas25/100, fronteira UTC30/29 dias, pesquisa literal `%_!`, história futura/desconhecida excluída, precisão superior ao inteiro seguro JavaScript, cinco SELECTs nos dois tamanhos, armazém fora do mapa, contexto/filtro/referência adulterada/expirada, validações, refusas de actor/unidade, leitura sem escrita e nova revisão após append explícito.
|
||||
- As fixtures são127 artigos frios e quatro casos de fronteira/recentidade/futuro/sem história,131 artigos no total;131 movimentos iniciais mais um append de revisão **apenas na regressão**. São metadados SQL de relatório, não recepções/ordens/custos executados pelos workflows. Nenhum livro de valorização foi criado/adoptado. Linhas físicas anteriores conservadas. A regressão usa a ligação nativa existente em transacção READ ONLY para testar a projecção; a prova da role SELECT-only efectiva é HTTP na8085. Não se criou uma role de leitura na regressão.
|
||||
-15 verificações HTTP reais na8085: origem SELECT-only e opção no contexto, datas/páginas/quantidades, referências inválidas/alteradas, armazém não autorizado e actor de Compras recusados. Zero POSTs de negócio; apenas a escolha normal auditada de contexto. Corte futuro explícito usado para obter história elegível sem alterar datas/movimentos existentes.
|
||||
-Sete verificações do cliente: renderização estática dos campos, selector e aviso, tamanhos25/100, descarte de resposta atrasada e transporte literal do filtro. Build privado aprovado, componente diferido. Não é revisão visual de navegador nem prova de todas as interacções DOM.
|
||||
-Comparação dos quatro conjuntos completos na8085 antes/depois: `stock_movements`, `stock_items`, `warehouses`, `gl_journals` idênticos. Diário continua27, incluindo os25 anteriores preservados pelo incremento Caixa. Não se repetiram os comandos válidos dos outros módulos.
|
||||
|
||||
Índice verificável: [provas](proofs/sgf-stock-inactivity-20261110.json). Dados, perfis, credenciais e provas detalhadas ficam fora do repositório. Assets anteriores e alterações alheias retidos; sem limpar a cache, tocar nos seis registos, SGC, publicação, candidata, aceitação ou checkpoint.
|
||||
|
||||
## Limitações
|
||||
|
||||
O relatório mede ausência de registo na história conhecida, não prova ausência de actividade real ou completude histórica. Não inclui produtos sem localização histórica, exportação, classificação por vendas/consumos, alertas ou criação de compras. Carga sustentada, revisão visual, conformidade e capacidade de implantação continuam separadas. Não houve ensaio de carga nem índices neste incremento.
|
||||
@@ -0,0 +1,41 @@
|
||||
# Stock: saídas e transferências pelo mesmo livro físico
|
||||
|
||||
Actualização de10/11/2026: código instalado na8085, **ainda desligado e sem novos acessos concedidos**. A continuação acrescentou contagem física sem lotes, aplicação da diferença e selector de equipamento.38 verificações PG e15 de interface, mais seis leituras/guardas HTTP dirigidas na8085. Ver `docs/proofs/sgf-six-module-composition-20261110.json`. Não fecha o conjunto dos seis módulos. Os30/11 casos abaixo descrevem a primeira versão e não são somados novamente.
|
||||
|
||||
## Percurso implementado
|
||||
|
||||
`/stock/operations` permite escolher explicitamente artigo, armazém e responsável, pesquisar os catálogos por páginas25/100, indicar quantidade exacta, referência, destino e fundamento. Não selecciona o primeiro resultado. Mostra o impacto antes da confirmação individual. Disponibiliza histórico paginado e recuperação pelo mesmo recibo após resposta incerta.
|
||||
|
||||
O adaptador chama o `StockOperationController`/`StockWorkflow` original, fixado pelo manifesto da composição. A saída usa o mesmo `IssueMovementWriter` já aceite; foi acrescentada a distribuição0.1.0 exigida pelo adaptador, byte a byte igual à distribuição original e ao writer já existente neste repositório. Não há motor de saldos novo.
|
||||
|
||||
Uma transferência é **imediata e atómica**: dois movimentos opostos na mesma transacção. Não representa expedição em trânsito com recepção posterior. A quantidade e unidade mantêm-se; não cria valorização ou lançamento contabilístico.
|
||||
|
||||
A prévia executa o writer num savepoint e reverte operações, movimentos, auditoria e dependências. Sequências PostgreSQL podem avançar. A confirmação revalida contexto/pessoa/direito/mapeamento, saldo e versão; executa novamente as políticas nativas e compara o impacto. Uma alteração de dependências recusa e reverte o comando. O recibo `sgf.stock.command`, o estado anterior, o impacto, o fundamento e os efeitos físicos são gravados na mesma transacção nativa. Repetição revalida autoridade e recupera o mesmo identificador.
|
||||
|
||||
O runtime mantém as guardas físicas QA existentes. Armazém de origem e destino têm de constar do mapa explícito da pessoa/empresa/unidade. Um mapa adicional de Stock, quando necessário, exige SHA configurado e caminho fixo privado; não altera o binding de Compras. Bloqueios têm limite5s e resposta503 recuperável; comandos longos têm limite15s. Nenhuma destas capacidades fica activa por omissão.
|
||||
|
||||
## Direitos propostos — ainda não concedidos na8085
|
||||
|
||||
| Direito | Âmbito | Capacidade |
|
||||
| --- | --- | --- |
|
||||
| `stock.view` existente | Empresa/unidade e armazéns explicitamente ligados | Consultar os catálogos, saldo e histórico autorizados |
|
||||
| `stock.operations.prepare` novo | Empresa/unidade e mesmos armazéns | Preparar a conferência de saída/transferência |
|
||||
| `stock.operations.confirm` novo | Empresa/unidade e mesmos armazéns | Confirmar individualmente e recuperar o próprio recibo |
|
||||
|
||||
Os novos direitos não estão no catálogo público nem atribuídos a contas reais. A função nativa de Armazém, operador actual e bloqueio de manutenção continuam obrigatórios. O ensaio introduziu estes nomes apenas dentro de uma transacção revertida no host de regressão. Nenhuma concessão ficou persistida. Antes de activar/atribuir acessos na8085 é necessária decisão explícita sobre estes direitos e os perfis/armazéns de destino; a implementação não escolhe utilizadores por omissão. A proposta agrupada está em `docs/SGF_8085_NEXT_AUTHORIZATION.md`.
|
||||
|
||||
## Provas dirigidas
|
||||
|
||||
-30 verificações PostgreSQL/controller/middleware, reutilizando `receipt-composition-b4093c6f6707`, sem outra base, porta ou demonstração. Incluem isolamento de artigo/armazém, módulo errado, injecção de contexto, paginação/pesquisa literal, prévia sem efeitos, saída única, transferência equilibrada, duas conferências da mesma versão com recusa da segunda após confirmação da primeira, repetição sem duplicação, contexto/permissão revogados, prévia adulterada, falha injectada depois do writer antes do recibo e recuperação atómica.
|
||||
-11 verificações da interface executam o módulo JavaScript real num DOM simulado. Confirmam escolha explícita, recolha do formulário antes de bloquear os campos, quantidade decimal, impacto legível, ausência de confirmação automática e recuperação com a mesma prévia após perda simulada de resposta.
|
||||
-Todos os dados das tabelas do host/livro nativo de regressão comparados antes/depois são idênticos após rollback. Sequências **apenas desse livro QA** podem avançar. Não foram enviados comandos nem alterados ficheiros/configuração na8085, bases protegidas ou cache de dados.
|
||||
|
||||
Os casos anteriores não foram somados novamente nem reexecutados como prova nova. A prova consolidada é `docs/proofs/sgf-stock-operations-20261110.json`.
|
||||
|
||||
## Limites que continuam abertos
|
||||
|
||||
Contagem e aplicação da diferença estão agora implementadas para o percurso sem lotes, com escolha explícita da contagem actual e recuperação sem a aplicar duas vezes. O impacto distingue quantidade contada, variação e saldo posterior. O selector de equipamento foi acrescentado; as políticas originais de peça/equipamento continuam a decidir admissibilidade. A prova positiva nova cobre o catálogo, não todas as combinações de peças/equipamentos. Devolução, contagem por lote e recepção em trânsito mantêm workflows próprios e ainda não são disponibilizadas por este ecrã. Não há entrada manual, custo ou contabilização automática.
|
||||
|
||||
Os testes de duas conferências intercaladas não constituem ensaio novo de processos simultâneos. A resposta503 de bloqueio foi implementada, mas o limite com dois processos reais não está comprovado neste incremento. A perda de resposta do cliente foi simulada; não equivale a prova TCP. Revisão visual, carga sustentada, instalação única completa e capacidade de implantação permanecem pendências separadas. O incidente do conector de navegador no Portal Investidor não foi reaberto nem enviado.
|
||||
|
||||
Continuar a composição dos restantes módulos do SGF; esta entrega não constitui aceitação global, publicação ou checkpoint.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Políticas de Stock e devolução ao fornecedor —10/11/2026
|
||||
|
||||
Implementado e disponível na mesma8085, Stock → painel/Devoluções → **Abrir políticas e devoluções ao fornecedor**, entrada directa `/stock/completion` após escolha explícita da função. Preparação por Armazém; revisão por Conferência Oficina; execução física por Armazém, pessoa diferente do revisor. Usa `SupplyPlanning`, `InventoryDispositions` e `StockWorkflow` originais, no mesmo livro. Sem nova demonstração, base, porta, utilizador ou role PostgreSQL.
|
||||
|
||||
O bloco e os direitos discriminados foram expressamente autorizados pelo utilizador. A instalação anterior tinha18 lançamentos; o novo artigo QA5 recebeu10UN pelo writer de recepção original, com taxa20MZN/UN preparada e revista distintamente. A devolução2UN usa a linha de recepção exacta, quantidade cumulativa elegível e comprovativo. Termina em8UN/160MZN. Não toca nos artigos anteriores. A política aprovada fixa segurança2, mínimo5, alvo10, máximo20, consumo diário1, prazo2+1dias, horizonte14, encomenda mínima/embalagem1UN. Não há regra automática de compra.
|
||||
|
||||
A saída física não reduz dívida nem emite crédito. A Contabilidade prepara/revê/aplica individualmente entrada200 e devolução40 no mesmo diário, D QA-DEVOLUCAO-FORNECEDOR/C QA-STOCK para a devolução. Esta conta QA é compensatória; não representa nota de crédito de fornecedor. O diário passou a20 lançamentos equilibrados. A valorização verifica aprovação nativa, executor distinto, origem, unidade, quantidade, operação e movimento; os factos imutáveis não incluem uma soma cumulativa mutável na sua impressão.
|
||||
|
||||
## Provas novas e reutilizadas
|
||||
|
||||
- 22 verificações dirigidas em transacções revertidas na regressão existente: direitos, origem estrangeira/histórica recusada, limite físico, revisão distinta, versão antiga, prévia sem movimento, revogação, falha depois do writer com rollback, repetição única, valorização200/40 e saldo160, constraints nativas e preservação. Prova privada `receipt-composition-b4093c6f6707/single-integration/20261110-162212-7fc0c484/stock-completion-result.json`.
|
||||
- Concorrência real entre dois processos somente nessa regressão: bloqueio da linha de tenant nativo enquanto a primeira transacção mantém o writer aberto; segunda responde503 após o limite5s; depois da libertação responde409 por conferência antiga. Primeira chave recupera o resultado; exactamente um novo movimento. Prova `stock-completion-concurrency/result.json`.
|
||||
- 11 verificações HTTP na8085, incluindo ecrã autenticado, cinco confirmações com repetição, uma devolução, origens valorizadas e diário equilibrado. Prova privada `receipt-composition-cc50a276c10c/stock-completion-http-20261110.json`.
|
||||
- Comparação SELECT-only com o backup anterior ao bloco:18 lançamentos e todos os movimentos, clientes e facturas originais byte a byte intactos; binding original intacto. Prova `single-integration/20261110-162658-c0b15a30/next-block-preservation.json`. Bases dos seis registos protegidos não são alvo destes scripts; não foram relidas para decidir associações. Nenhum comando de limpeza da cache.
|
||||
- Build privado aprovado; assets anteriores retidos. Provas anteriores de Stock/Compras reutilizadas, sem repetir suites ou operações aceites.
|
||||
|
||||
## Limites separados
|
||||
|
||||
Recorte QA manual, artigo/local/recepção fixados e pinados; não é parametrização geral de produção. Sem previsão histórica, acordos, importação, compras automáticas, abate ou estorno histórico. Listagem/estados/páginas25/100 e versões na SQL; não é ensaio de carga sustentada. Alterar o estado invalida a conferência, e as recusas transitórias conservam a mesma chave. A prévia executa o serviço original dentro de savepoint revertido; sequências podem avançar. O serviço nativo pode registar avaliação da necessidade, mas não tem regra aprovada para gerar compras neste recorte.
|
||||
|
||||
Revisão visual de navegador, acessibilidade completa, carga sustentada, armazenamento/retensão e capacidade de implantação continuam pendências próprias. Resposta200 e HTML não constituem aceitação visual. Sem publicação, activação de candidata de Compras, SGC, acessos reais, aceitação ou checkpoint presumidos. Documentos adicionais do bloco continuam em desenvolvimento e não são declarados concluídos por esta entrega.
|
||||
|
||||
- 17 verificações adicionais DOM→HTTP: prévia real revertida, formulário bloqueado, perda de resposta e repetição com o mesmo conteúdo (transportes de confirmação simulados; zero confirmações reais), consulta do histórico nativo de versões3/2/1. Prova privada stock-completion-dom-http-20261110.json. Não é revisão visual.
|
||||
@@ -0,0 +1,29 @@
|
||||
# Usar o SGF local na8085
|
||||
|
||||
Entrada única: http://127.0.0.1:8085/sgf. Seleccionar uma função QA e depois o módulo. A entrada antiga de Compras permanece em http://127.0.0.1:8085/compras. Não é necessário arrancar o SGC, criar outra demonstração ou conhecer palavras-passe novas.
|
||||
|
||||
Este é o recorte privado autorizado, com dados fictícios. Os seis módulos e percursos obrigatórios estão integrados; a aceitação integral para apresentação continua separada da conclusão funcional. Consultar o [resultado actual e limitações](SGF_SIX_MODULE_CLOSURE_20261110.md) e o [guião dos seis módulos](SGF_GUIAO_APRESENTACAO.md).
|
||||
|
||||
| Para consultar | Função e percurso |
|
||||
|---|---|
|
||||
| Documento comercial1000MZN e PDF | Comercial — preparação; escolher Comercial e abrir documentos emitidos. |
|
||||
| Aquisição aceite até obrigação100MZN | Funções anteriores de Compras; conservar REQ-2026-000003, OC-2026-000001 e FACT-COMPRA-COMPLETA-20261104. |
|
||||
| Saldo e movimentos físicos | Armazém — Compras; escolher Stock. As operações de Stock mostram o impacto antes da confirmação. |
|
||||
| Ordem de oficina, tarefa e materiais | Gestão/técnico/verificador de Oficina; escolher Oficinas conforme a responsabilidade. |
|
||||
| Recebível1000 e saldo400 após reversão | Financeiro — preparação/revisão; escolher Financeiro, recebíveis. |
|
||||
| Obrigação original e afectação20/reversão20 | Financeiro — preparação/revisão; escolher Financeiro e obrigações a fornecedores. O saldo actual é100MZN; o histórico preserva o percurso100→80→100. |
|
||||
| Custos295 e1820 e respectivas versões anteriores | Financeiro — preparação/revisão; custos directos e industriais. O residual industrial300 está separado. |
|
||||
| Diário comum, pares de correcção e balancete | Contabilidade — preparação/revisão; escolher Contabilidade e diário integrado. Existem18 lançamentos equilibrados/15 contas QA. |
|
||||
| Trânsito, lotes e inventário | Armazém — Compras, módulo Stock; abrir trânsito/lotes/inventário. A função Oficina — conferência técnica, escolhendo Stock, faz recepção distinta, activação/libertação e revisão de ajuste. |
|
||||
| Oficina → Comercial500MZN | Financeiro — preparação/revisão, módulo Oficinas, Oficina → rascunho. O botão de continuação escolhe Comercial explicitamente e abre o mesmo rascunho; não emite automaticamente outra factura. |
|
||||
| Consulta sem decisões | Função de consulta, escolhendo o módulo autorizado. |
|
||||
|
||||
Para uma decisão nova, escolher explicitamente a origem e conferir o impacto. A preparação não substitui a revisão por outra função. Cada confirmação volta a verificar o estado. Não executar novamente os exemplos anteriores só para os consultar.
|
||||
|
||||
Se uma resposta se perder, conservar a página e usar o mesmo botão de recuperação. Os campos ficam protegidos e a mesma chave recupera a operação original. Uma recusa de versão/contexto exige nova conferência; não alterar IDs ou criar outra chave para contornar a recusa.
|
||||
|
||||
No diário, os filtros de origem têm páginas de25/100 por família. O relatório financeiro tem páginas independentes para pagamentos, propostas, afectações e eventos, conservando os filtros. Uma página vazia não autoriza escolher outro documento automaticamente.
|
||||
|
||||
O lançador `scripts/abrir-sgf.ps1` conserva a instalação8085; `scripts/abrir-compras.ps1` também permanece. Arranque/reutilização e reinício dirigido do PHP já foram conferidos, com29 tabelas canónicas idênticas. Não repetir migrations globais, resets, limpeza da cache ou criação de bases/portas. Reinício completo do computador/cluster partilhado parado ainda não foi ensaiado.
|
||||
|
||||
Oficina–Stock/devolução/valorização100/50/25, Oficina–Comercial500, continuidades contabilísticas, lotes/ajuste80/10 e fecho QA integral foram concluídos. O fecho foi revertido no ensaio; a apresentação mantém período aberto. O utilizador confirmou abertura/legibilidade do novo Stock. Revisão visual restante, aceitação do conjunto, carga sustentada e implantação conservam pendências próprias. Nenhuma operação real/fiscal/bancária é validada por estas provas.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Oficinas — agenda e equipamentos na8085
|
||||
|
||||
10/11/2026. Implementação funcional instalada na mesma8085, sem novas demonstrações, direitos, contas ou serviço SGC. Usa `workshop.view/assign/open` existentes. Não é só um catálogo de funções.
|
||||
|
||||
- **Agenda:** ordem existente, técnico já atribuído e equipamento; calendário por intervalo máximo93dias, filtros/SQL25/100, disponibilidade sem sobreposição de técnico/equipamento, fronteiras adjacentes permitidas. Prévia não reserva; confirmação volta a conferir fonte/versão/contexto/direitos. Reagendamento e cancelamento fundamentados são versões append-only com histórico; cancelamento não elimina a reserva antiga. Lembretes apenas visuais (próximas24h/em curso/decorrido), sem enviar mensagens ou declarar trabalho concluído. Horários com zona explícita, armazenados em UTC e mostrados UTC+02.
|
||||
- **Cadastro de equipamentos:** registo independente por cliente explicitamente associado a Oficinas, identificador, descrição/marca/modelo e série. Pesquisa literal/páginas25/100, escolha do cliente e prévia, confirmação auditada/idempotente. Identificação original imutável; sem troca automática de proprietário. Técnicos apenas vêem equipamentos das ordens que lhes estão atribuídas. Nova ordem pode seleccionar equipamento existente, por cliente/pesquisa, em vez de redigitar ID ou duplicar cadastro. O writer original da ordem é reutilizado.
|
||||
- **Entrada de apresentação corrigida:** o atalho de consulta de Oficinas usa agora a função QA de gestão já autorizada. A função genérica de consulta tem `workshop.view`, mas a política original só lhe mostrava ordens atribuídas; não foi alargada para contornar essa restrição.
|
||||
|
||||
Provas próprias:20 verificações de agenda em regressão, dois processos concorrentes (503 no bloqueio de empresa,409 após libertação e nova reserva adjacente sem sobreposição),14 verificações HTTP8085,15 verificações do equipamento/ordem em regressão e14 HTTP8085. Não repetidas as aquisições, pagamentos ou lançamentos anteriores. Recuperação cliente reutiliza o mecanismo já provado `WorkshopStockOperation`.
|
||||
|
||||
No exemplo8085, marcação da ordem existente em12/11/2026 foi reagendada de09–10 para10–11 UTC+02, com ambas as versões preservadas. Um equipamento QA novo foi registado sem abrir ordem automaticamente. O ensaio de reutilização do ID pelo writer original foi feito e revertido na regressão. Os18 lançamentos continuam18; os livros de stock, clientes, associações protegidas e cache não foram alterados por estas funções.
|
||||
|
||||
Limites: não há lembretes externos, salários, gestão completa de recursos humanos, calendário sincronizado, correcção mutável de identificações antigas, fiscalidade ou efeitos de stock/custo por agendar. O estado «intervalo decorrido» não significa serviço realizado. A agenda não reatribui técnico ou autoriza tarefa automaticamente; utiliza as decisões da ordem. A revisão visual dos novos ecrãs e carga sustentada continuam sem declaração de validação.
|
||||
|
||||
As funcionalidades ainda em falta foram conferidas nos menus/código. Orçamentos comerciais/reparação, documentos adicionais de teste e política/disposição Stock estão no bloco [explicitamente autorizado em seguida](SGF_NEXT_BLOCK_RIGHTS.md). Não são apresentados como concluídos por esta entrega.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Oficina — ordens por equipamento
|
||||
|
||||
11/11/2026. Entregue na mesma8085 em **Oficinas → Equipamentos → Consultar ordens deste equipamento**. A escolha é individual, sem seleccionar o primeiro registo. Apresenta código, descrição, série e cliente actuais, ordens associadas, responsável e apontamentos. Permite pesquisa/estado/datas, páginas25/100, CSV da página, abertura da ordem exacta e regresso à pesquisa do catálogo.
|
||||
|
||||
Reutiliza o catálogo e `/api/workshop/orders` com `equipment_id` validado. O servidor resolve o equipamento autorizado na mesma transacção de leitura consistente das ordens e aplica o filtro na SQL antes da paginação. Mantém contexto empresa/unidade/módulo, associação do cliente e atribuição actual do técnico. Equipamento fora do catálogo autorizado é recusado antes de expor a contagem. Equipamento sem ordens devolve a sua identificação e zero resultados, sem substituir por outro.
|
||||
|
||||
Resposta de outro equipamento é recusada pelo cliente. O botão fica bloqueado enquanto há formulário, prévia ou confirmação em curso. O regresso conserva a pesquisa original. Carregamento diferido evita incorporar a lista completa de ordens no pacote principal. Identificação e apontamentos são actuais; não constituem histórico imutável de reparações, conclusão, entrega ou facturação.
|
||||
|
||||
## Verificação
|
||||
|
||||
-23 verificações de regressão:28 ordens/um equipamento SQL artificiais,25+2/100, filtros combinados, páginas vazias, equipamento irmão/estrangeiro, técnico atribuído, módulo/flag e parâmetros inválidos. Todas as fixtures revertidas; sete conjuntos originais iguais. Não se repetiram workflows de ordens ou cadastro.
|
||||
-12 verificações dos handlers reais com respostas simuladas: segunda escolha explícita, regresso/pesquisa, filtros/páginas, abertura exacta, metadados, resposta de outro equipamento recusada e CSV protegido. Não é revisão visual.
|
||||
-17 HTTP na8085 com fontes efectivas: paridade com ordens existentes, equipamento sem ordens, filtros25/100, período, recusas e atribuição. JS principal/lazy servidos com MIME e SHA correctos.
|
||||
-56 conjuntos de dados idênticos antes/depois da instalação e das leituras, incluindo as cinco tabelas de demonstrações internas recém-entregues. Permissões/binding/27 lançamentos e dados anteriores intactos; zero comandos de negócio ou concessões. Seis registos e cache não foram alvo de escrita/limpeza.
|
||||
|
||||
[Índice de provas](proofs/sgf-workshop-equipment-orders-20261111.json). São52 verificações dirigidas; provas anteriores reutilizadas sem repetição. Só cinco ficheiros de fonte e os assets compilados foram copiados para a instalação existente, com anteriores conservados em privado. Sem nova demonstração, base, porta, SGC, publicação, candidata de Compras, aceitação ou checkpoint. Visual, carga sustentada e implantação mantêm provas próprias pendentes.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Oficina — relatório por abertura de ordens
|
||||
|
||||
10/11/2026. Entregue na mesma8085: **Oficinas → Relatórios**, escolha explícita de datas de abertura, pesquisa/estado, páginas25/100 e CSV da página efectivamente consultada. Reutiliza `/api/workshop/orders`, `workshop.view` e a atribuição actual ao técnico. Nenhum novo direito, esquema ou comando de negócio.
|
||||
|
||||
O intervalo usa o dia local já definido pela Oficina, `Africa/Johannesburg`: início incluído, meia-noite seguinte ao último dia excluída. A resposta identifica o intervalo UTC exacto. O filtro incide sobre `wo_orders.created_at` na SQL, antes de contar/paginar. Não corta os apontamentos pela data: mostra identificação, responsável e apontamentos **actuais** das ordens abertas no período. Não é fecho diário, relatório histórico de produção, entrega, facturação ou pagamento.
|
||||
|
||||
O modo Relatórios inicia sem datas e exige ambas antes da consulta. Painel/equipa conservam a lista sem corte, podendo indicar datas. Alterar filtros sem pesquisar não muda os dados exportados: o CSV usa o pedido aplicado e a página devolvida, inclui instante de observação, zona, total de ordens do filtro e os minutos/apontamentos dessa página. Não soma materiais, custos ou tempos do universo. Textos livres são protegidos contra fórmulas e escapados com aspas/quebras de linha. Resposta atrasada ou período/página incompatíveis não são aceites como o relatório pedido.
|
||||
|
||||
## Provas e preservação
|
||||
|
||||
-21 verificações dirigidas na regressão:30 ordens SQL apenas de leitura de relatório, fronteiras de meia-noite/microssegundos,25+3/100, ordenação, combinação de estado/pesquisa, intervalo alargado/vazio, datas inválidas/invertidas/incompletas, atribuição do técnico e módulo recusado. Todas as fixtures revertidas, cinco conjuntos originais comparados. Não são ordens criadas pelo workflow.
|
||||
-13 de apresentação/contrato/CSV: datas obrigatórias só no relatório, ausência de indicadores inventados, resposta com período/página errados recusada, fonte efectiva, limite de página e escapagem. Renderização simulada não constitui revisão visual.
|
||||
-15 HTTP8085: dia local de uma ordem efectivamente existente, paridade com a lista anterior,25/100, pesquisa/estado, páginas vazias, argumentos/contexto recusados, atribuição e CSV. Ficheiros JS principal/lazy realmente servidos com MIME e SHA iguais aos instalados.
|
||||
-48 conjuntos actuais idênticos antes/depois, incluindo condições de vencimento/recibos recentes, artigos, permissões, ordens e diário; binding intacto. Diário27, Caixa950, cinco cálculos e todas as operações anteriores conservados. Zero comandos de negócio ou concessões na8085; seis registos e cache não foram alvo de comandos.
|
||||
|
||||
São49 verificações dirigidas, sem repetir as suites de emissão, recebimentos, Stock, Caixa, vencimentos ou lançamentos. [Índice das provas](proofs/sgf-workshop-period-20261110.json). Código compilado em privado, ficheiros anteriores conservados; nenhuma limpeza de cache/reinício, demonstração, SGC, publicação, candidata de Compras, aceitação ou checkpoint.
|
||||
|
||||
O leitor continua sem mutex de escrita da empresa. A prova anterior desse comportamento foi reutilizada, não repetida nem apresentada como nova medição de carga. Carga sustentada, revisão visual e implantação permanecem separadas. Não entrega corte histórico, fecho diário imutável, PDF arquivado, períodos contabilísticos ou relatórios legais. Datas/valores são os das fontes QA existentes; esta entrega não declara o produto completo.
|
||||
@@ -0,0 +1,761 @@
|
||||
{
|
||||
"version": "SGF-8085-SYNTHETIC-ACCESS-PROPOSAL-v1",
|
||||
"approved": true,
|
||||
"applied": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_database_roles": false,
|
||||
"real_accounts": false,
|
||||
"credentials_in_repository": false,
|
||||
"source_policy": "Existing right names must be checked against the installed CHECK before any grant; fail on unknown names rather than broaden privileges.",
|
||||
"profiles": [
|
||||
{
|
||||
"id": "commercial_prepare",
|
||||
"label": "QA Comercial — preparação",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_invoices.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.create",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "clients.edit",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.create",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.edit",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.create",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.edit",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.create",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.edit",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.confirm_internal",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "issuer_documents.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "issuer_documents.edit",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "client_documents.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "client_documents.edit",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "draft_documents.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "draft_documents.edit",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.propose",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.calculate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "invoice_series.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "invoice_series.propose",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_invoices.issue",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_invoices.correction_request",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "document_preview.configure",
|
||||
"scope": "company"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "commercial_review",
|
||||
"label": "QA Comercial — revisão",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_invoices.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.approve",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "invoice_series.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "invoice_series.approve",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "issuer_documents.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "client_documents.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "draft_documents.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "workshop_manage",
|
||||
"label": "QA Oficinas — gestão",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.open",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.assign",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.authorize",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "workshop_record",
|
||||
"label": "QA Oficinas — técnico",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.record",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "stock.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_stock.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_stock.prepare",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "workshop_verify",
|
||||
"label": "QA Oficinas — conferência",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.verify",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "stock.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_stock.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance_prepare",
|
||||
"label": "QA Financeiro — preparação",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.allocate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.correction_request",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "direct_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_costs.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budgets.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budgets.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_billing.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_billing.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_billing.generate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "direct_costs.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budget_comparisons.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budget_comparisons.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.create",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.create",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_corrections.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_corrections.request",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_corrections.apply",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance_review",
|
||||
"label": "QA Financeiro — revisão",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.confirm",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.reconcile",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.correction_approve",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "direct_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "direct_costs.validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budgets.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_billing.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_billing.review",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_costs.validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budgets.validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_budget_comparisons.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_corrections.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop_corrections.review",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "accounting_prepare",
|
||||
"label": "QA Contabilidade — preparação",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "catalogue_accounting.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "catalogue_accounting.propose",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.post",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.correct_prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.correct_post",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.period_prepare",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.period_close",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "purchasing_obligations.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "purchasing_invoices.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "accounting_review",
|
||||
"label": "QA Contabilidade — revisão",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "catalogue_accounting.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "catalogue_accounting.approve",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.correct_validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.period_validate",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "purchasing_obligations.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "purchasing_invoices.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "read_only",
|
||||
"label": "QA Consulta — seis módulos",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "clients.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "services.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_invoices.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "workshop.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "direct_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "industrial_costs.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "service_receivables.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "catalogue_accounting.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "general_ledger.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "stock.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"existing_stock_profile": {
|
||||
"role": "validator",
|
||||
"user_id": 2,
|
||||
"rights": [
|
||||
"stock.operations.prepare",
|
||||
"stock.operations.confirm",
|
||||
"workshop.view",
|
||||
"workshop_stock.view",
|
||||
"workshop_stock.confirm"
|
||||
],
|
||||
"warehouse_policy": "existing main warehouse and one new empty explicitly mapped synthetic warehouse; no foreign warehouse"
|
||||
},
|
||||
"new_right_names": [
|
||||
"stock.operations.prepare",
|
||||
"stock.operations.confirm"
|
||||
],
|
||||
"forbidden": [
|
||||
"access.manage",
|
||||
"automatic legacy module association",
|
||||
"changes to six protected records",
|
||||
"cache clearing",
|
||||
"real money or fiscal documents",
|
||||
"period reopening",
|
||||
"publication",
|
||||
"new demo/server/database",
|
||||
"SGC connector activation"
|
||||
],
|
||||
"financial_source_policy": {
|
||||
"payables": "retain authoritative native obligation, no copy of debt",
|
||||
"ledger": "one common ledger in existing native book with explicit SGF company/unit scope",
|
||||
"native_finance_bindings": {
|
||||
"finance_prepare": 4,
|
||||
"finance_review": 7,
|
||||
"accounting_prepare": 4,
|
||||
"accounting_review": 7,
|
||||
"read_only": 8
|
||||
},
|
||||
"real_permissions": false,
|
||||
"sgc_server_required": false
|
||||
},
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "autorizo",
|
||||
"scope": "docs/SGF_8085_NEXT_AUTHORIZATION.md"
|
||||
},
|
||||
"integration_grants": {
|
||||
"finance_prepare": {
|
||||
"unit": [
|
||||
"supplier_payables.view",
|
||||
"service_invoices.view"
|
||||
]
|
||||
},
|
||||
"finance_review": {
|
||||
"unit": [
|
||||
"supplier_payables.view",
|
||||
"service_invoices.view"
|
||||
]
|
||||
},
|
||||
"read_only": {
|
||||
"unit": [
|
||||
"supplier_payables.view"
|
||||
]
|
||||
},
|
||||
"accounting_prepare": {
|
||||
"unit": [
|
||||
"service_invoices.view",
|
||||
"service_receivables.view",
|
||||
"workshop.view",
|
||||
"direct_costs.view",
|
||||
"industrial_costs.view"
|
||||
],
|
||||
"company": [
|
||||
"clients.view",
|
||||
"services.view"
|
||||
]
|
||||
},
|
||||
"accounting_review": {
|
||||
"unit": [
|
||||
"service_invoices.view",
|
||||
"service_receivables.view",
|
||||
"workshop.view",
|
||||
"direct_costs.view",
|
||||
"industrial_costs.view"
|
||||
],
|
||||
"company": [
|
||||
"clients.view",
|
||||
"services.view"
|
||||
]
|
||||
}
|
||||
},
|
||||
"integration_grants_reason": "Minimum existing read rights needed for the approved cross-module origin conferences; no new permission names or business-write authority."
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"version": "SGF-BANK-RECONCILIATION-QA-v1",
|
||||
"approved": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_BANK_RECONCILIATION_SCOPE.md",
|
||||
"existing_books": [
|
||||
"cc50a276c10c",
|
||||
"b4093c6f6707"
|
||||
],
|
||||
"new_right_names": [
|
||||
"bank_reconciliation.view",
|
||||
"bank_reconciliation.import",
|
||||
"bank_reconciliation.prepare",
|
||||
"bank_reconciliation.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "bank_reconciliation.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "bank_reconciliation.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 15,
|
||||
"permission": "bank_reconciliation.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 16,
|
||||
"permission": "bank_reconciliation.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 17,
|
||||
"permission": "bank_reconciliation.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "bank_reconciliation.import"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "bank_reconciliation.prepare"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "bank_reconciliation.review"
|
||||
}
|
||||
],
|
||||
"grants_per_book_count": 8,
|
||||
"total_proposed_grants": 16,
|
||||
"new_users": false,
|
||||
"new_pg_roles": false,
|
||||
"real_access": false,
|
||||
"public_access": false,
|
||||
"new_financial_effects": false,
|
||||
"business_writes_applied": 0,
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar a conferência bancária QA e os direitos apresentados"
|
||||
},
|
||||
"implemented": true,
|
||||
"grants_applied_per_book": 8,
|
||||
"delivery": "docs/SGF_BANK_RECONCILIATION_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"version": "SGF-CASH-QA-v1",
|
||||
"approved": true,
|
||||
"authorization": "10/11/2026: Autorizar o ciclo Caixa QA e os direitos apresentados",
|
||||
"applied": true,
|
||||
"implementation": "implemented_and_http_verified_8085",
|
||||
"installation": "cc50a276c10c",
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
{
|
||||
"permission": "cash.view",
|
||||
"profiles": [
|
||||
"finance_prepare",
|
||||
"finance_review",
|
||||
"accounting_prepare",
|
||||
"accounting_review",
|
||||
"read_only"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "cash.prepare",
|
||||
"profiles": [
|
||||
"finance_prepare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "cash.review",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "cash.close",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
]
|
||||
}
|
||||
],
|
||||
"profiles": {
|
||||
"finance_prepare": 13,
|
||||
"finance_review": 14,
|
||||
"accounting_prepare": 15,
|
||||
"accounting_review": 16,
|
||||
"read_only": 17
|
||||
},
|
||||
"permission_names": 4,
|
||||
"concessions_per_existing_qa_book": 8,
|
||||
"additional_native_function_grants": 0,
|
||||
"scenario": {
|
||||
"opening_minor": 0,
|
||||
"explicit_existing_synthetic_receipt_classification_minor": 100000,
|
||||
"new_synthetic_expense_minor": 5000,
|
||||
"expected_count_and_close_minor": 95000,
|
||||
"currency": "MZN",
|
||||
"journal_effects": "two individually reviewed origins; no new invoice, receipt or debt"
|
||||
},
|
||||
"qa_accounts": [
|
||||
"QA-CAIXA",
|
||||
"QA-DESPESA-CAIXA"
|
||||
],
|
||||
"existing_counteraccount": "QA-LIQUIDACAO-CLIENTE",
|
||||
"limits": {
|
||||
"new_demo": false,
|
||||
"new_database": false,
|
||||
"new_port": false,
|
||||
"new_user_or_profile": false,
|
||||
"new_pg_role": false,
|
||||
"real_access": false,
|
||||
"real_money_or_payments": false,
|
||||
"bank_connection": false,
|
||||
"sgc": false,
|
||||
"automatic_adjustment": false,
|
||||
"cash_reopening": false,
|
||||
"publication": false,
|
||||
"purchasing_candidate": false,
|
||||
"preserve_existing_25_journals": true,
|
||||
"preserve_six_records_and_blocked_cache": true
|
||||
},
|
||||
"scope_document": "docs/SGF_CASH_NEXT_SCOPE.md"
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"version": "SGF-DOCUMENT-READ-QA-v1",
|
||||
"approved": true,
|
||||
"authorization": "10/11/2026: Autorizar as10 concessões de consulta QA",
|
||||
"applied": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"reason": "O motor original de emissão exige consulta do emitente, cliente, preparação e enquadramento fiscal; a aprovação anterior concedeu service_invoices.issue ao revisor Financeiro mas não estes direitos de consulta. Não contornar as guardas originais.",
|
||||
"existing_host_rights": [
|
||||
{
|
||||
"permission": "issuer_documents.view",
|
||||
"scope": "company",
|
||||
"profiles": [
|
||||
"finance_prepare",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "client_documents.view",
|
||||
"scope": "company",
|
||||
"profiles": [
|
||||
"finance_prepare",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_fiscal.view",
|
||||
"scope": "company",
|
||||
"profiles": [
|
||||
"finance_prepare",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "draft_documents.view",
|
||||
"scope": "unit",
|
||||
"profiles": [
|
||||
"finance_prepare",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "billing_drafts.view",
|
||||
"scope": "unit",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_drafts.view",
|
||||
"scope": "unit",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
]
|
||||
}
|
||||
],
|
||||
"concessions": 10,
|
||||
"new_permission_names": 0,
|
||||
"profiles": {
|
||||
"finance_prepare": 13,
|
||||
"finance_review": 14
|
||||
},
|
||||
"limitations": {
|
||||
"existing_qa_books_only": true,
|
||||
"no_new_profiles": true,
|
||||
"no_real_rights": true,
|
||||
"no_public_grants": true,
|
||||
"no_new_demos": true,
|
||||
"no_writing_document_profiles": true,
|
||||
"no_fiscal_rule_change": true,
|
||||
"no_publication": true,
|
||||
"preserve_six_records_and_cache": true
|
||||
},
|
||||
"applied_only_existing_qa_books": [
|
||||
"b4093c6f6707",
|
||||
"cc50a276c10c"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"version": "SGF-FINANCIAL-INDICATORS-QA-v1",
|
||||
"approved": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_FINANCIAL_INDICATORS_SCOPE.md",
|
||||
"existing_books": [
|
||||
"cc50a276c10c",
|
||||
"b4093c6f6707"
|
||||
],
|
||||
"new_right_names": [
|
||||
"financial_analysis.view",
|
||||
"financial_analysis.prepare",
|
||||
"financial_analysis.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "financial_analysis.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "financial_analysis.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 15,
|
||||
"permission": "financial_analysis.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 16,
|
||||
"permission": "financial_analysis.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 17,
|
||||
"permission": "financial_analysis.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "financial_analysis.prepare"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "financial_analysis.review"
|
||||
}
|
||||
],
|
||||
"grants_per_book_count": 7,
|
||||
"total_proposed_grants": 14,
|
||||
"new_users": false,
|
||||
"new_pg_roles": false,
|
||||
"real_access": false,
|
||||
"public_access": false,
|
||||
"new_financial_effects": false,
|
||||
"business_writes_applied": 0,
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar os indicadores QA e os direitos apresentados"
|
||||
},
|
||||
"implemented": true,
|
||||
"grants_applied_per_book": 7,
|
||||
"delivery": "docs/SGF_FINANCIAL_INDICATORS_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"source_repository": "portal-investidor",
|
||||
"source_file": "app/Services/SimulationTaxRuleExpression.php",
|
||||
"source_sha256": "a976c0eb43ebb706275ca17efc9354a8d84f2dbe698375211704b158df02f7e1",
|
||||
"consumer_file": "app/Modules/Services/FiscalRuleExpression.php",
|
||||
"adaptations": [
|
||||
"Namespace/class only; decimal input capped24 whole/8 fractional instead of unbounded.",
|
||||
"Runtime executes only the exact pinned QA percentage DAG; metadata expressions never execute."
|
||||
],
|
||||
"runtime_portal_dependency": false,
|
||||
"legal_knowledge_import": false
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"version": "SGF-FISCAL-OBLIGATIONS-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_FISCAL_OBLIGATIONS_SCOPE.md",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
"fiscal_obligations.view",
|
||||
"fiscal_obligations.prepare",
|
||||
"fiscal_obligations.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 13,
|
||||
"permission": "fiscal_obligations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"permission": "fiscal_obligations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 15,
|
||||
"permission": "fiscal_obligations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 16,
|
||||
"permission": "fiscal_obligations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 17,
|
||||
"permission": "fiscal_obligations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 13,
|
||||
"permission": "fiscal_obligations.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"permission": "fiscal_obligations.review"
|
||||
}
|
||||
],
|
||||
"total_grants_both_books": 14,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"real_operations": false,
|
||||
"evidence": [
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-223220-05f5c9f3/fiscal-obligations-access-readonly.json",
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-223221-33cdee62/fiscal-obligations-access-readonly.json"
|
||||
],
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar o bloco QA e os três direitos apresentados"
|
||||
},
|
||||
"delivery": "docs/SGF_FISCAL_OBLIGATIONS_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"version": "SGF-FISCAL-RULES-COMMON-QA-v1",
|
||||
"approved": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_FISCAL_RULES_COMMON_SCOPE.md",
|
||||
"existing_books": [
|
||||
"cc50a276c10c",
|
||||
"b4093c6f6707"
|
||||
],
|
||||
"new_right_names": [
|
||||
"fiscal_rules.view",
|
||||
"fiscal_rules.prepare",
|
||||
"fiscal_rules.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "fiscal_rules.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "fiscal_rules.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 15,
|
||||
"permission": "fiscal_rules.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 16,
|
||||
"permission": "fiscal_rules.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 17,
|
||||
"permission": "fiscal_rules.view"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 13,
|
||||
"permission": "fiscal_rules.prepare"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"user_id": 14,
|
||||
"permission": "fiscal_rules.review"
|
||||
}
|
||||
],
|
||||
"grants_per_book_count": 7,
|
||||
"total_proposed_grants": 14,
|
||||
"new_users": false,
|
||||
"new_pg_roles": false,
|
||||
"real_access": false,
|
||||
"public_access": false,
|
||||
"existing_iva_book_rights_unchanged": true,
|
||||
"business_writes_applied": 0,
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar o núcleo comum QA e os direitos apresentados"
|
||||
},
|
||||
"implemented": true,
|
||||
"grants_applied_per_book": 7,
|
||||
"delivery": "docs/SGF_FISCAL_RULES_COMMON_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "SGF-HUMAN-RESOURCES-AUTONOMOUS-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"applied": true,
|
||||
"module_authorized": true,
|
||||
"access_authorized": true,
|
||||
"scope_file": "docs/SGF_HUMAN_RESOURCES_AUTONOMY_SCOPE.md",
|
||||
"supersedes_access_proposal": "docs/integration/sgf-remunerations-access-proposal.json",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"module": "human_resources",
|
||||
"profiles": [
|
||||
{
|
||||
"id": "hr_prepare",
|
||||
"label": "QA Recursos Humanos — preparação",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "human_resources.remunerations.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "human_resources.remunerations.prepare",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hr_review",
|
||||
"label": "QA Recursos Humanos — revisão",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "human_resources.remunerations.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "human_resources.remunerations.review",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hr_read",
|
||||
"label": "QA Recursos Humanos — consulta",
|
||||
"rights": [
|
||||
{
|
||||
"permission": "company.view",
|
||||
"scope": "company"
|
||||
},
|
||||
{
|
||||
"permission": "unit.view",
|
||||
"scope": "unit"
|
||||
},
|
||||
{
|
||||
"permission": "human_resources.remunerations.view",
|
||||
"scope": "unit"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"new_host_rights": [
|
||||
"human_resources.remunerations.view",
|
||||
"human_resources.remunerations.prepare",
|
||||
"human_resources.remunerations.review"
|
||||
],
|
||||
"new_profiles_per_book": 3,
|
||||
"grants_per_book": 11,
|
||||
"total_grants_both_books": 22,
|
||||
"new_database_roles": 0,
|
||||
"new_public_rights": 0,
|
||||
"real_accounts": false,
|
||||
"new_demo": false,
|
||||
"original_financial_profile_grants_retracted": true,
|
||||
"authorization": {
|
||||
"date": "2026-11-11",
|
||||
"decision": "Autorizar os perfis QA próprios de RH e as concessões apresentadas"
|
||||
},
|
||||
"delivery": "docs/SGF_HUMAN_RESOURCES_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"version": "SGF-HR-CONTRACTS-ATTENDANCE-LEAVE-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": false,
|
||||
"applied": false,
|
||||
"scope_file": "docs/SGF_HUMAN_RESOURCES_PERSONNEL_SCOPE.md",
|
||||
"module": "human_resources",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"existing_profile_keys": [
|
||||
"hr_prepare",
|
||||
"hr_review",
|
||||
"hr_read"
|
||||
],
|
||||
"new_host_rights": [
|
||||
"human_resources.contracts.view",
|
||||
"human_resources.contracts.prepare",
|
||||
"human_resources.contracts.review",
|
||||
"human_resources.attendance.view",
|
||||
"human_resources.attendance.prepare",
|
||||
"human_resources.attendance.review",
|
||||
"human_resources.leave.view",
|
||||
"human_resources.leave.prepare",
|
||||
"human_resources.leave.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.contracts.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.contracts.prepare"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.attendance.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.attendance.prepare"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.leave.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_prepare",
|
||||
"permission": "human_resources.leave.prepare"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.contracts.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.contracts.review"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.attendance.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.attendance.review"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.leave.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_review",
|
||||
"permission": "human_resources.leave.review"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_read",
|
||||
"permission": "human_resources.contracts.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_read",
|
||||
"permission": "human_resources.attendance.view"
|
||||
},
|
||||
{
|
||||
"profile_key": "hr_read",
|
||||
"permission": "human_resources.leave.view"
|
||||
}
|
||||
],
|
||||
"grant_count_per_book": 15,
|
||||
"total_grants_both_books": 30,
|
||||
"new_profiles": 0,
|
||||
"new_users": 0,
|
||||
"new_database_roles": 0,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"new_sgc_dependency": false,
|
||||
"new_journals": 0,
|
||||
"new_payments": 0,
|
||||
"evidence": [
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-083950-2b7f6505/hr-personnel-access-readonly.json",
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-083951-b86bcdeb/hr-personnel-access-readonly.json"
|
||||
],
|
||||
"authorization": {
|
||||
"date": "2026-11-11",
|
||||
"decision": "Autorizar o bloco e as30 concessões QA apresentadas"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"version": "SGF-IVA-ASSESSMENT-FORM-QA-v1",
|
||||
"approved": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_IVA_ASSESSMENT_NEXT_SCOPE.md",
|
||||
"existing_books": [
|
||||
"cc50a276c10c",
|
||||
"b4093c6f6707"
|
||||
],
|
||||
"new_right_names": [
|
||||
"fiscal_assessments.prepare",
|
||||
"fiscal_assessments.review",
|
||||
"fiscal_assessments.view",
|
||||
"fiscal_forms.prepare",
|
||||
"fiscal_forms.review",
|
||||
"fiscal_forms.view"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 13,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.view"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.view"
|
||||
},
|
||||
{
|
||||
"user_id": 15,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.view"
|
||||
},
|
||||
{
|
||||
"user_id": 16,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.view"
|
||||
},
|
||||
{
|
||||
"user_id": 17,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.view"
|
||||
},
|
||||
{
|
||||
"user_id": 13,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_assessments.review"
|
||||
},
|
||||
{
|
||||
"user_id": 13,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.view"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.view"
|
||||
},
|
||||
{
|
||||
"user_id": 15,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.view"
|
||||
},
|
||||
{
|
||||
"user_id": 16,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.view"
|
||||
},
|
||||
{
|
||||
"user_id": 17,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.view"
|
||||
},
|
||||
{
|
||||
"user_id": 13,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2,
|
||||
"permission": "fiscal_forms.review"
|
||||
}
|
||||
],
|
||||
"grants_per_book_count": 14,
|
||||
"total_proposed_grants": 28,
|
||||
"new_users": false,
|
||||
"new_pg_roles": false,
|
||||
"real_access": false,
|
||||
"public_access": false,
|
||||
"business_writes_applied": 0,
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar o livro/mapa IVA QA e os direitos apresentados"
|
||||
},
|
||||
"implemented": true,
|
||||
"delivery": "docs/SGF_IVA_ASSESSMENT_DELIVERY.md",
|
||||
"grants_applied_per_book": 14
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"version": "SGF-KNOWLEDGE-INVENTORY-20261110-v1",
|
||||
"reference_document": {
|
||||
"name": "Incorporacao de impostos e analise ao SGF.docx",
|
||||
"sha256": "212ae656646b6cc3cad9d077d74887de0ba8111b5c7a39bc5efc0adf20cbeb7b",
|
||||
"type": "User requirements/questions; not normative legislation or activation authority"
|
||||
},
|
||||
"existing_inventory": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"portal_repository": "portal-investidor",
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Services/SimulationTaxRuleExpression.php",
|
||||
"located": true,
|
||||
"sha256": "a976c0eb43ebb706275ca17efc9354a8d84f2dbe698375211704b158df02f7e1",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "app/Services/SimulationTaxParameterResolver.php",
|
||||
"located": true,
|
||||
"sha256": "a4621e672ea4f38e81ff9828f4017889cc09d229c5940f6e38607acc9b27e1a8",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "app/Services/SimulationFiscalSnapshot.php",
|
||||
"located": true,
|
||||
"sha256": "7dcc7d4f30c95fc30aa4fb73d771ed74e9ca8be30ae5fa82d8e310e565e0b24f",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/fiscal-rational.ts",
|
||||
"located": true,
|
||||
"sha256": "941408aa1cd92652507b5e675e307d0883ff25921a903e60365175d02be0cbdf",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/iva-operations.ts",
|
||||
"located": true,
|
||||
"sha256": "87f616ea2b3a844dea352a6c4d2db25a8de612df3e4edab4c395cc8fa0297a50",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/iva-acquisitions.ts",
|
||||
"located": true,
|
||||
"sha256": "b8a8c4a72e35fea7026fd01b0e8e26d44248539eca1a77e8d58ca15a72f218fb",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/iva-modelo-a.ts",
|
||||
"located": true,
|
||||
"sha256": "e34cac6d3c0473a64e896cfc4641c1da29382aab13de2bd0e78e1ff33c770c87",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/irpc-normal.ts",
|
||||
"located": true,
|
||||
"sha256": "5594b913e795e1e7d4bf1bba915af08a54c3d3a2d69a86e9ce3a966667cd01fd",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/irpc-normal-forms.ts",
|
||||
"located": true,
|
||||
"sha256": "504c95891ad9d06478c2fe30416cf8d05e91f027d85cacaf0d4d7de9c8f04d81",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/irpc-withholdings.ts",
|
||||
"located": true,
|
||||
"sha256": "b751aa1a326960516c8abfc9ade637a205c7bf053cbaa98c2058f50d56ea0c0d",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/ispc-quarter.ts",
|
||||
"located": true,
|
||||
"sha256": "5bce00353d58e503693550610aabcfb9e3e81c36109e831ac0532ca66ecb0e92",
|
||||
"sgf_operational_transfer_verified": false
|
||||
},
|
||||
{
|
||||
"file": "resources/js/lib/ispc-eligibility.ts",
|
||||
"located": true,
|
||||
"sha256": "d8a32ee08e27c6ffcead739f9917d3196da6ab83ce6aac9163ffb74478d7e2fa",
|
||||
"sgf_operational_transfer_verified": false
|
||||
}
|
||||
],
|
||||
"new_research": false,
|
||||
"runtime_portal_dependency": false,
|
||||
"normative_validity_verified": false,
|
||||
"new_rates_imported": 0,
|
||||
"sgf_missing_operational_areas": [
|
||||
"IVA multi-line/included-price and assessment/deduction books",
|
||||
"IRPS and payroll/INSS",
|
||||
"IRPC tax bridge/withholding and assessment",
|
||||
"ISPC",
|
||||
"ICE",
|
||||
"Official form mappings and fiscal calendar",
|
||||
"Bank reconciliation",
|
||||
"Reconciled financial ratios/trends"
|
||||
],
|
||||
"limitations": [
|
||||
"File presence/hash is not a legal or numerical validation. Existing named proofs remain historical and were not rerun.",
|
||||
"IRPS/INSS/ICE complete reusable source set was not established by this limited inventory; do not infer no knowledge exists in all prior chats or archives.",
|
||||
"Do not copy portal user dossiers or import projected values as effective SGF operations."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"version": "SGF-MULTI-LINE-INCLUDED-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"scope_file": "docs/SGF_MULTI_LINE_INCLUDED_SCOPE.md",
|
||||
"new_right_names": [],
|
||||
"new_grants": 0,
|
||||
"existing_rights_reused": [
|
||||
"fiscal_rules.view",
|
||||
"fiscal_rules.prepare",
|
||||
"fiscal_rules.review"
|
||||
],
|
||||
"policy": {
|
||||
"per_line_tax": "TRUNCATE2",
|
||||
"gross_included_document_base": "gross_document_minus_tax_document",
|
||||
"exact_fractions_and_both_differences_preserved": true,
|
||||
"aggregate": "sum_document_lines",
|
||||
"net_noncent_base": "pending",
|
||||
"gross_noncent_amount": "pending"
|
||||
},
|
||||
"new_invoices": 0,
|
||||
"new_receivables": 0,
|
||||
"new_journals": 0,
|
||||
"new_demo": false,
|
||||
"real_legal_activation": false,
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar a modalidade QA e a política apresentada"
|
||||
},
|
||||
"delivery": "docs/SGF_MULTI_LINE_INCLUDED_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"version": "SGF-PAYABLE-DUE-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_PAYABLE_DUE_SCOPE.md",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
"supplier_payables.due.prepare",
|
||||
"supplier_payables.due.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 13,
|
||||
"permission": "supplier_payables.due.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"permission": "supplier_payables.due.review"
|
||||
}
|
||||
],
|
||||
"total_grants_both_books": 4,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"real_operations": false,
|
||||
"evidence": [
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-221055-d3c1bc55/payable-due-access-readonly.json",
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-221056-6bf7f3d6/payable-due-access-readonly.json"
|
||||
],
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar o percurso QA e os dois direitos apresentados"
|
||||
},
|
||||
"delivery": "docs/SGF_PAYABLE_DUE_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"version": "SGF-REMAINING-COMMERCIAL-STOCK-QA-v1",
|
||||
"approved": true,
|
||||
"authorization": "10/11/2026: Autorizar o bloco QA e os direitos discriminados",
|
||||
"applied": true,
|
||||
"access_applied_in_existing_qa_books": true,
|
||||
"functional_progress": {
|
||||
"quotes": "implemented_and_http_verified_8085",
|
||||
"stock_policies_supplier_return": "implemented_and_http_verified_8085",
|
||||
"additional_documents": "implemented_http_verified_8085_with_rollback_tested_cancellations"
|
||||
},
|
||||
"installation": "cc50a276c10c",
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
{
|
||||
"permission": "commercial_quotes.view",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"commercial_review",
|
||||
"finance_prepare",
|
||||
"finance_review",
|
||||
"read_only"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "commercial_quotes.prepare",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"finance_prepare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "commercial_quotes.review",
|
||||
"profiles": [
|
||||
"commercial_review",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "commercial_quotes.convert",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"finance_prepare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_documents.view",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"commercial_review",
|
||||
"finance_prepare",
|
||||
"finance_review",
|
||||
"read_only"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_documents.prepare",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"finance_prepare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_documents.review",
|
||||
"profiles": [
|
||||
"commercial_review",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_documents.issue",
|
||||
"profiles": [
|
||||
"commercial_prepare",
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "service_documents.credit_apply",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.planning.view",
|
||||
"profiles": [
|
||||
"purchasing:validator",
|
||||
"workshop_verify"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.planning.prepare",
|
||||
"profiles": [
|
||||
"purchasing:validator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.planning.review",
|
||||
"profiles": [
|
||||
"workshop_verify"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.disposition.view",
|
||||
"profiles": [
|
||||
"purchasing:validator",
|
||||
"workshop_verify"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.disposition.prepare",
|
||||
"profiles": [
|
||||
"purchasing:validator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"permission": "stock.disposition.review",
|
||||
"profiles": [
|
||||
"workshop_verify"
|
||||
]
|
||||
}
|
||||
],
|
||||
"additional_existing_host_rights": [
|
||||
{
|
||||
"permission": "service_invoices.issue",
|
||||
"profiles": [
|
||||
"finance_review"
|
||||
],
|
||||
"reason": "Finalização atómica da factura-recibo sintética após as decisões documental e financeira distintas; sem concessão real."
|
||||
}
|
||||
],
|
||||
"existing_native_functions_to_grant_only_in_qa": [
|
||||
{
|
||||
"native_user_id": 6,
|
||||
"functions": [
|
||||
"supply_read",
|
||||
"supply_prepare",
|
||||
"inventory_disposition_read",
|
||||
"inventory_disposition_prepare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"native_user_id": 3,
|
||||
"functions": [
|
||||
"supply_read",
|
||||
"supply_review",
|
||||
"inventory_disposition_read",
|
||||
"inventory_disposition_review"
|
||||
]
|
||||
}
|
||||
],
|
||||
"limits": {
|
||||
"new_profiles": false,
|
||||
"new_postgresql_roles": false,
|
||||
"real_rights": false,
|
||||
"public_grants": false,
|
||||
"new_databases": false,
|
||||
"new_demos": false,
|
||||
"sgc": false,
|
||||
"publication": false,
|
||||
"protected_six_unchanged": true,
|
||||
"blocked_cache_unchanged": true,
|
||||
"existing_eighteen_journals_preserved": true
|
||||
},
|
||||
"scope_document": "docs/SGF_NEXT_BLOCK_RIGHTS.md"
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"version": "SGF-REMUNERATIONS-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": false,
|
||||
"applied": false,
|
||||
"scope_file": "docs/SGF_REMUNERATIONS_SCOPE.md",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
"remunerations.view",
|
||||
"remunerations.prepare",
|
||||
"remunerations.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 13,
|
||||
"permission": "remunerations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"permission": "remunerations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 15,
|
||||
"permission": "remunerations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 16,
|
||||
"permission": "remunerations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 17,
|
||||
"permission": "remunerations.view"
|
||||
},
|
||||
{
|
||||
"user_id": 13,
|
||||
"permission": "remunerations.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 14,
|
||||
"permission": "remunerations.review"
|
||||
}
|
||||
],
|
||||
"total_grants_both_books": 14,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"real_operations": false,
|
||||
"new_journals": 0,
|
||||
"legal_payroll_validated": false,
|
||||
"evidence": [
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-074857-8dc00a16/remunerations-access-readonly.json",
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-074858-c159b61c/remunerations-access-readonly.json"
|
||||
],
|
||||
"authorization": {
|
||||
"date": "2026-11-11",
|
||||
"decision": "Autorizar o bloco QA e os três direitos apresentados"
|
||||
},
|
||||
"status": "superseded_by_autonomous_hr_directive",
|
||||
"applied_then_revoked": true,
|
||||
"superseded_by": "docs/integration/sgf-human-resources-access-proposal.json"
|
||||
}
|
||||
@@ -0,0 +1,600 @@
|
||||
{
|
||||
"version": "SGF-SOLUTION-CLOSURE-v25",
|
||||
"target": "existing8085",
|
||||
"sgc_required": false,
|
||||
"new_demonstrations": false,
|
||||
"modules": [
|
||||
{
|
||||
"id": "commercial",
|
||||
"label": "Comercial",
|
||||
"features": [
|
||||
"Clientes e serviços com associação explícita",
|
||||
"Rascunho, revisão e cálculo",
|
||||
"Documento emitido de teste e PDF",
|
||||
"Continuação para recebível sem duplicação",
|
||||
"Orçamentos Comercial/Oficina, revisão e aceitação documentadas e conversão explícita em rascunho",
|
||||
"Recibo de afectação efectiva400, crédito nominal100/saldo500 e factura-recibo1000 atómica",
|
||||
"PDF/SHA, histórico e anulação técnica com reversão explícita e diário único",
|
||||
"Registo unificado autorizado com seis famílias, filtros/SQL25/100 e projecções limitadas à página",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"a_clients",
|
||||
"a_services",
|
||||
"a_service_drafts",
|
||||
"a_billing_drafts",
|
||||
"b_internal_confirmations",
|
||||
"doc_records",
|
||||
"document_preview_models",
|
||||
"service_calculation_profiles",
|
||||
"sf_proposals",
|
||||
"si_invoices",
|
||||
"sd_versions",
|
||||
"sd_outputs",
|
||||
"sd_commands",
|
||||
"sd_cancellations"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Services/ServiceWorkflow.php",
|
||||
"app/Modules/Services/ServiceInvoicing.php",
|
||||
"resources/js/ServicesWorkspace.jsx",
|
||||
"resources/js/ServiceInvoiceWorkspace.jsx",
|
||||
"app/Modules/Services/ServiceDocuments.php",
|
||||
"app/Modules/Services/DocumentPeriod.php",
|
||||
"app/Modules/Services/BillingRegister.php",
|
||||
"resources/js/BillingRegisterWorkspace.jsx",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/invoice-test-results.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_SERVICE_DOCUMENTS_DELIVERY.md",
|
||||
"docs/SGF_BILLING_REGISTER_DELIVERY.md",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Revisão visual, aceitação explícita e conformidade real; emissão fiscal real permanece bloqueada",
|
||||
"Carga sustentada, armazenamento e capacidade de implantação exigem evidências próprias"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "purchasing",
|
||||
"label": "Compras",
|
||||
"features": [
|
||||
"Fornecedores e revisão distinta",
|
||||
"Requisição até adjudicação e ordem",
|
||||
"Recepção, documento e stock único",
|
||||
"Factura conferida e obrigação reconhecida",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"users",
|
||||
"companies",
|
||||
"units",
|
||||
"permission_grants"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Purchasing/ReceiptRuntime.php",
|
||||
"app/Modules/Purchasing/RequestController.php",
|
||||
"app/Modules/Purchasing/InvoiceController.php",
|
||||
"app/Modules/Purchasing/ObligationController.php",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Conferência visual restante e aceitação explícita do conjunto; ver SGF_SIX_MODULE_CLOSURE_20261110.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "stock",
|
||||
"label": "Stock",
|
||||
"features": [
|
||||
"Artigos, armazéns e saldos físicos",
|
||||
"Entradas, saídas e origem autorizada",
|
||||
"Transferência e conferência de destino",
|
||||
"Contagens, ajustamentos e devoluções",
|
||||
"Movimentos e relatórios por período",
|
||||
"Política QA revista e devolução ao fornecedor por origem exacta; saldo8UN/160MZN no mesmo diário",
|
||||
"Inactividade de pares com história conhecida, corte UTC explícito, filtros e SQL25/100 sem inferir ausência de actividade",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes",
|
||||
"Cadastro de artigos: preparação/revisão distintas, criação sem saldo, designação revista só dos novos, código/unidade imutáveis, histórico/recibos e catálogo canónico único"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"users",
|
||||
"companies",
|
||||
"units"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Inventory/StockReadController.php",
|
||||
"app/Modules/Inventory/CompositionStockRead.php",
|
||||
"app/Modules/Inventory/StockPeriodReport.php",
|
||||
"app/Modules/Workshop/WorkshopStock.php",
|
||||
"app/Modules/Inventory/StockOperationsController.php",
|
||||
"resources/views/stock-operations-workspace.blade.php",
|
||||
"public/stock-operations-workspace.mjs",
|
||||
"app/Modules/Inventory/StockFinalController.php",
|
||||
"resources/views/stock-final-workspace.blade.php",
|
||||
"public/sgf-stock-final.mjs",
|
||||
"app/Modules/Inventory/StockInactiveReport.php",
|
||||
"resources/js/StockInactiveReportWorkspace.jsx",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js",
|
||||
"app/Modules/Inventory/StockCatalogueController.php",
|
||||
"resources/views/stock-catalogue-workspace.blade.php",
|
||||
"public/sgf-stock-catalogue.mjs",
|
||||
"config/stock_catalogue.php",
|
||||
"database/sql/stock_catalogue.sql"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/stock-period-report-20261103.json",
|
||||
"docs/proofs/sgf-stock-operations-20261110.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_STOCK_POLICIES_SUPPLIER_RETURN.md",
|
||||
"docs/SGF_STOCK_INACTIVITY_DELIVERY.md",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md",
|
||||
"docs/SGF_STOCK_CATALOGUE_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Revisão visual dos novos relatórios e aceitação explícita do conjunto; carga sustentada e implantação separadas"
|
||||
],
|
||||
"required_native_tables": [
|
||||
"stock_movements",
|
||||
"stock_operations",
|
||||
"inventory_lot_allocations",
|
||||
"supply_records",
|
||||
"sgf_stock_transit_events",
|
||||
"sc_catalogue_meta",
|
||||
"sc_catalogue_versions",
|
||||
"sc_catalogue_commands"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "workshop",
|
||||
"label": "Oficinas",
|
||||
"features": [
|
||||
"Ordem e autorização",
|
||||
"Apontamentos e revisão distinta",
|
||||
"Material consumido ligado ao movimento físico",
|
||||
"Custo directo/industrial e correcção",
|
||||
"Continuação comercial por documento de origem",
|
||||
"Agenda sem sobreposição, reagendamento e cancelamento versionados",
|
||||
"Cadastro independente e reutilização de equipamento por cliente",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes",
|
||||
"Ordens SQL25/100 por cliente/equipamento/responsável/estado, apontamentos actuais e minutos verificados, sem mutex de escrita na leitura",
|
||||
"Relatório por período de abertura explícito/dia local, SQL25/100 antes de paginar, apontamentos actuais e CSV da página sem fecho histórico presumido",
|
||||
"Equipamento escolhido → ordens exactas SQL25/100 com filtros, identificação actual, CSV da página e regresso ao catálogo"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"wo_orders",
|
||||
"wo_entries",
|
||||
"dc_calculations",
|
||||
"ic_results",
|
||||
"wb_proposals"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Workshop/WorkshopStock.php",
|
||||
"resources/js/WorkshopWorkspace.jsx",
|
||||
"resources/js/DirectCostsWorkspace.jsx",
|
||||
"resources/js/IndustrialCostsWorkspace.jsx",
|
||||
"resources/js/WorkshopBillingWorkspace.jsx",
|
||||
"app/Modules/Workshop/ComposedWorkshopStockBook.php",
|
||||
"app/Modules/Workshop/WorkshopBilling.php",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js",
|
||||
"app/Modules/Workshop/WorkshopOrderRead.php",
|
||||
"app/Modules/Workshop/Http/WorkshopOrderReadController.php",
|
||||
"resources/js/WorkshopOrderList.jsx",
|
||||
"resources/js/workshop-report-view.js",
|
||||
"app/Modules/Workshop/WorkshopEquipment.php",
|
||||
"resources/js/WorkshopEquipmentWorkspace.jsx"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/workshop-stock-closure-20261102.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_WORKSHOP_AGENDA_EQUIPMENT.md",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md",
|
||||
"docs/SGF_WORKSHOP_PERIOD_REPORT_DELIVERY.md",
|
||||
"docs/SGF_WORKSHOP_EQUIPMENT_ORDERS_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Conferência visual restante e aceitação explícita do conjunto; ver SGF_SIX_MODULE_CLOSURE_20261110.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance",
|
||||
"label": "Financeiro",
|
||||
"features": [
|
||||
"Obrigações a fornecedores",
|
||||
"Recebíveis de clientes",
|
||||
"Liquidação/afectação e reversão sintéticas",
|
||||
"Posição financeira e comprovativos por origem",
|
||||
"Caixa QA explícita0+1000-50=950, revisão distinta, contagem e fecho sem reabertura",
|
||||
"Extracto paginado, recuperação de confirmação e classificação/despesa no mesmo diário",
|
||||
"Extracto artificial QA e correspondências individuais com duas linhas nativas existentes, revisão distinta, conferência final e relatório",
|
||||
"Critérios e indicadores QA950/100=9,5 vezes e50/1000=5%, revisão distinta, fontes conciliadas/retrato/fracção/histórico/relatório",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes",
|
||||
"Posições actuais de clientes por documento, pesquisa/estado/vencimento, SQL25/100, saldos reconhecidos e CSV da página; referência de vencimento distinta de saldo histórico",
|
||||
"Posições de fornecedores por factura/fornecedor e estado documental, SQL25/100, saldos do motor original, CSV da página e abertura exacta do documento; vencimento desconhecido sem atraso presumido",
|
||||
"Condições administrativas QA de vencimento: preparação13/revisão14, evidência/fundamento, prévia/revalidação de origem/saldo/versão/pessoa, recusa/correcção, histórico25/100, recibo e recuperação; lista/CSV separam original e condição revista, referência explícita no detalhe",
|
||||
"Mapa de antiguidade de fornecedores por referência explícita e condição administrativa revista, faixas0/1–30/31–60/61–90/>90/desconhecido, valores exactos por moeda só da página/CSV, sem alterar saldo ou vencimento original"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"sr_records",
|
||||
"sr_effects",
|
||||
"cash_events",
|
||||
"cash_commands",
|
||||
"br_statements",
|
||||
"br_events",
|
||||
"br_commands",
|
||||
"an_criteria",
|
||||
"an_results",
|
||||
"an_commands"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Services/ServiceReceivables.php",
|
||||
"app/Modules/Purchasing/SupplierPayables.php",
|
||||
"resources/js/ServiceReceivablesWorkspace.jsx",
|
||||
"app/Modules/Purchasing/ComposedFinance.php",
|
||||
"app/Modules/Purchasing/ComposedFinanceController.php",
|
||||
"app/Modules/Finance/CashWorkspace.php",
|
||||
"app/Modules/Finance/Http/CashController.php",
|
||||
"app/Modules/Accounting/CashLedgerSource.php",
|
||||
"app/Modules/Finance/BankReconciliation.php",
|
||||
"app/Modules/Finance/BankLedgerSource.php",
|
||||
"app/Modules/Finance/Http/BankReconciliationController.php",
|
||||
"public/sgf-bank.mjs",
|
||||
"app/Modules/Finance/FinancialIndicators.php",
|
||||
"app/Modules/Finance/FinancialIndicatorSource.php",
|
||||
"app/Modules/Finance/Http/FinancialIndicatorsController.php",
|
||||
"public/sgf-indicators.mjs",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js",
|
||||
"app/Modules/Services/ReceivablePositionRead.php",
|
||||
"app/Modules/Services/Http/ReceivablePositionReadController.php",
|
||||
"resources/js/ReceivablePositionsWorkspace.jsx",
|
||||
"resources/js/receivable-position-view.js",
|
||||
"app/Modules/Purchasing/PayablePositionReadController.php",
|
||||
"app/Modules/Purchasing/ComposedFinanceController.php",
|
||||
"resources/js/PayablePositionsWorkspace.jsx",
|
||||
"resources/js/payable-position-view.js",
|
||||
"app/Modules/Purchasing/PayableDueController.php",
|
||||
"resources/js/PayableDueWorkspace.jsx",
|
||||
"database/sql/payable_due.sql",
|
||||
"config/payable_due.php",
|
||||
"app/Modules/Purchasing/PayableAge.php"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/supplier-settlements.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_CASH_DELIVERY.md",
|
||||
"docs/SGF_BANK_RECONCILIATION_DELIVERY.md",
|
||||
"docs/SGF_FINANCIAL_INDICATORS_DELIVERY.md",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md",
|
||||
"docs/SGF_RECEIVABLE_POSITIONS_DELIVERY.md",
|
||||
"docs/SGF_PAYABLE_POSITIONS_DELIVERY.md",
|
||||
"docs/SGF_PAYABLE_DUE_DELIVERY.md",
|
||||
"docs/SGF_PAYABLE_AGING_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Conferência visual restante e aceitação explícita do conjunto; ver SGF_SIX_MODULE_CLOSURE_20261110.md",
|
||||
"Conferência de extracto QA entregue; reconciliação bancária geral/real permanece fora do recorte"
|
||||
],
|
||||
"required_native_tables": [
|
||||
"pa_obligations",
|
||||
"pa_access",
|
||||
"ps_payments",
|
||||
"pd_due_meta",
|
||||
"pd_due_versions",
|
||||
"pd_due_commands"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "accounting",
|
||||
"label": "Contabilidade",
|
||||
"features": [
|
||||
"Plano e classificação",
|
||||
"Diário com preparação/revisão distintas",
|
||||
"Razão e balancete",
|
||||
"Estorno/correcção e conferência de período",
|
||||
"Fecho sintético com rastreabilidade de origens",
|
||||
"Livro de saídas e mapa interno IVA QA da origem FR seleccionada, revisão distinta, histórico e CSV congelado",
|
||||
"Catálogo de fontes/regras versionadas QA, revisão distinta, vigência/conflitos/retirada e cálculo explicável com história preservada",
|
||||
"Cálculo QA por1–25linhas sem/com imposto incluído, representação por linha aprovada, exactos/diferenças e mapa interno recuperável",
|
||||
"Início operacional com percurso, evidências, funções autorizadas e consulta explícita das fontes existentes",
|
||||
"Submenus distintos e balancete/razão por datas explícitas, escolha de conta por linha, páginas25/100, detecção de mudança de livro e CSV da página",
|
||||
"Controlo administrativo QA de obrigação/prazo/responsável do mapa interno revisto, preparação13/revisão14, correcção/cancelamento, entrega apenas simulada com SHA verificado, histórico/recibo/SQL25/100/CSV; sem calendário legal ou submissão",
|
||||
"Correspondências explícitas revistas15/16 e balanço/resultados internos parciais QA:19contas/nove pendentes, resultado congelado19linhas/SHA, história/recibo/CSV contextual, ligação exacta ao razão; capital e resultado completo não presumidos"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"ca_proposals",
|
||||
"ca_resolutions",
|
||||
"fx_versions",
|
||||
"fx_commands",
|
||||
"fr_events",
|
||||
"fr_calculations",
|
||||
"fr_commands",
|
||||
"fo_meta",
|
||||
"fo_versions",
|
||||
"fo_commands"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/Accounting/GeneralLedger.php",
|
||||
"app/Modules/Accounting/GeneralLedgerController.php",
|
||||
"packages/general-ledger/src/LedgerSchema.php",
|
||||
"app/Modules/Accounting/ComposedLedger.php",
|
||||
"app/Modules/Accounting/ComposedLedgerController.php",
|
||||
"packages/general-ledger/src/StockTransitEvidence.php",
|
||||
"app/Modules/Services/FiscalCoverage.php",
|
||||
"app/Modules/Services/FiscalAssessment.php",
|
||||
"app/Modules/Services/Http/FiscalAssessmentController.php",
|
||||
"public/sgf-iva.mjs",
|
||||
"app/Modules/Services/FiscalRules.php",
|
||||
"app/Modules/Services/FiscalRuleExpression.php",
|
||||
"app/Modules/Services/Http/FiscalRulesController.php",
|
||||
"public/sgf-fiscal-rules.mjs",
|
||||
"app/Modules/Services/FiscalDocumentMath.php",
|
||||
"resources/js/WorkspaceHome.jsx",
|
||||
"resources/js/workspace-overview.js",
|
||||
"resources/js/ComposedAccountingWorkspace.jsx",
|
||||
"resources/js/LedgerReportsWorkspace.jsx",
|
||||
"resources/js/ledger-report-view.js",
|
||||
"app/Modules/Services/FiscalObligations.php",
|
||||
"app/Modules/Services/Http/FiscalObligationsController.php",
|
||||
"resources/js/FiscalObligationsWorkspace.jsx",
|
||||
"resources/js/fiscal-obligations-view.js",
|
||||
"database/sql/fiscal_obligations.sql",
|
||||
"config/fiscal_obligations.php",
|
||||
"app/Modules/Accounting/InternalStatementsController.php",
|
||||
"app/Modules/Accounting/InternalStatementTotals.php",
|
||||
"resources/js/InternalStatementsWorkspace.jsx",
|
||||
"resources/js/internal-statements-view.js",
|
||||
"resources/js/statement-download.js",
|
||||
"resources/js/FiscalObligationsWorkspace.jsx",
|
||||
"database/sql/internal_statements.sql",
|
||||
"config/internal_statements.php"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/proofs/purchasing-completion-matrix-final-20261104.json",
|
||||
"docs/proofs/sgf-six-module-functional-review-20261110.json",
|
||||
"docs/SGF_FISCAL_COVERAGE_DELIVERY.md",
|
||||
"docs/SGF_IVA_ASSESSMENT_DELIVERY.md",
|
||||
"docs/SGF_FISCAL_RULES_COMMON_DELIVERY.md",
|
||||
"docs/SGF_MULTI_LINE_INCLUDED_DELIVERY.md",
|
||||
"docs/SGF_OPERATIONAL_INFORMATION_DELIVERY.md",
|
||||
"docs/SGF_ACCOUNTING_REPORTS_DELIVERY.md",
|
||||
"docs/SGF_FISCAL_OBLIGATIONS_DELIVERY.md",
|
||||
"docs/SGF_FINANCIAL_STATEMENTS_DELIVERY.md"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Conferência visual restante e aceitação explícita do conjunto; ver SGF_SIX_MODULE_CLOSURE_20261110.md",
|
||||
"Backlog fiscal/financeiro amplo pendente; tabela de cobertura não implementa motores ou modelos"
|
||||
],
|
||||
"required_native_tables": [
|
||||
"gl_accounts",
|
||||
"gl_periods",
|
||||
"gl_journals",
|
||||
"gl_lines",
|
||||
"fs_meta",
|
||||
"fs_versions",
|
||||
"fs_results",
|
||||
"fs_result_lines",
|
||||
"fs_commands"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "human_resources",
|
||||
"label": "Recursos Humanos",
|
||||
"features": [
|
||||
"Módulo autónomo com perfis QA próprios separados do Financeiro",
|
||||
"Cadastro pseudónimo individual preparado e revisto",
|
||||
"Regras artificiais versionadas com vigência e fonte explícitas",
|
||||
"Processamento exacto por trabalhador/período com escolha de fontes e revisão distinta",
|
||||
"Correcção/cancelamento versionados, prévia, histórico, recibos e recuperação",
|
||||
"Mapa individual revisto conservado com SHA e exportação autenticada; filtros SQL25/100"
|
||||
],
|
||||
"required_host_tables": [
|
||||
"rm_meta",
|
||||
"rm_versions",
|
||||
"rm_commands",
|
||||
"hr_qa_profiles"
|
||||
],
|
||||
"required_source_files": [
|
||||
"app/Modules/HumanResources/Remunerations.php",
|
||||
"app/Modules/HumanResources/Http/RemunerationsController.php",
|
||||
"app/Shared/Installation/HumanResourcesProfiles.php",
|
||||
"resources/js/RemunerationsWorkspace.jsx",
|
||||
"resources/js/statement-download.js"
|
||||
],
|
||||
"proofs": [
|
||||
"docs/SGF_HUMAN_RESOURCES_DELIVERY.md",
|
||||
"docs/proofs/sgf-human-resources-20261111.json"
|
||||
],
|
||||
"work_remaining": [
|
||||
"Contratos/alterações contratuais, assiduidade, turnos, férias e ausências",
|
||||
"Regimes, IRPS/INSS/modelos legais e ligação salarial a dívida/pagamentos/Contabilidade",
|
||||
"Revisão visual, carga sustentada e capacidade de implantação"
|
||||
]
|
||||
}
|
||||
],
|
||||
"release_gates": [
|
||||
{
|
||||
"id": "single_installation",
|
||||
"criterion": "Os seis módulos operam no mesmo endereço e empresa/unidade, sem mudar de demonstração"
|
||||
},
|
||||
{
|
||||
"id": "functional_modules",
|
||||
"criterion": "Cada funcionalidade obrigatória tem ecrã/comando/consulta executável; menus e fontes isoladas não bastam"
|
||||
},
|
||||
{
|
||||
"id": "cross_module_flows",
|
||||
"criterion": "Os documentos atravessam as fronteiras mantendo origem, versão, autoridade e efeito único"
|
||||
},
|
||||
{
|
||||
"id": "access_isolation",
|
||||
"criterion": "Perfis explícitos e recusas de empresa/unidade/módulo/permissão verificadas"
|
||||
},
|
||||
{
|
||||
"id": "presentation",
|
||||
"criterion": "Percurso de apresentação coerente, dados fictícios identificados, linguagem e navegação revistas"
|
||||
},
|
||||
{
|
||||
"id": "operations",
|
||||
"criterion": "Arranque e recuperação da instalação entregues e ensaiados, sem depender do SGC"
|
||||
},
|
||||
{
|
||||
"id": "commercial_honesty",
|
||||
"criterion": "Documentos de teste não são emissão fiscal; capacidade de implantação exige prova própria"
|
||||
},
|
||||
{
|
||||
"id": "preservation",
|
||||
"criterion": "Seis registos, cache, dados aprovados e trabalho alheio preservados"
|
||||
}
|
||||
],
|
||||
"acceptance_proof": "docs/proofs/sgf-single-solution-acceptance.json",
|
||||
"scope_policy": "Recorte QA dos seis módulos e requisitos amplos de produto separados explicitamente; nenhum painel de cobertura equivale à implementação dos motores ou modelos pendentes.",
|
||||
"revision_note": "A prova funcional anterior conserva o contrato v1 histórico; as lacunas agora discriminadas não são aceitação nem capacidade de implantação.",
|
||||
"proposed_scope_extensions": [
|
||||
{
|
||||
"id": "cash",
|
||||
"access": "docs/integration/sgf-cash-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"scope": "docs/SGF_CASH_NEXT_SCOPE.md",
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "iva_assessment_internal_form",
|
||||
"scope": "docs/SGF_IVA_ASSESSMENT_NEXT_SCOPE.md",
|
||||
"access": "docs/integration/sgf-iva-assessment-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "fiscal_rules_common",
|
||||
"scope": "docs/SGF_FISCAL_RULES_COMMON_SCOPE.md",
|
||||
"access": "docs/integration/sgf-fiscal-rules-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "bank_reconciliation_qa",
|
||||
"scope": "docs/SGF_BANK_RECONCILIATION_SCOPE.md",
|
||||
"access": "docs/integration/sgf-bank-reconciliation-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "financial_indicators_qa",
|
||||
"scope": "docs/SGF_FINANCIAL_INDICATORS_SCOPE.md",
|
||||
"access": "docs/integration/sgf-financial-indicators-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "multi_line_included_qa",
|
||||
"scope": "docs/SGF_MULTI_LINE_INCLUDED_SCOPE.md",
|
||||
"decision": "docs/integration/sgf-multi-line-included-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "stock_catalogue",
|
||||
"scope": "docs/SGF_STOCK_CATALOGUE_SCOPE.md",
|
||||
"access": "docs/integration/sgf-stock-catalogue-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "supplier_due_qa",
|
||||
"scope": "docs/SGF_PAYABLE_DUE_SCOPE.md",
|
||||
"access": "docs/integration/sgf-payable-due-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "fiscal_obligations_qa",
|
||||
"scope": "docs/SGF_FISCAL_OBLIGATIONS_SCOPE.md",
|
||||
"access": "docs/integration/sgf-fiscal-obligations-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
},
|
||||
{
|
||||
"id": "internal_statements_qa",
|
||||
"scope": "docs/SGF_FINANCIAL_STATEMENTS_SCOPE.md",
|
||||
"access": "docs/integration/sgf-statements-access-proposal.json",
|
||||
"approval_required_for_new_qa_rights": false,
|
||||
"implemented": true
|
||||
}
|
||||
],
|
||||
"full_product_complete": false,
|
||||
"product_backlog": [
|
||||
{
|
||||
"id": "fiscal_books",
|
||||
"status": "partial",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Livro/mapa interno QA de uma origem entregue; IVA geral, dedução/regularizações e restantes tratamentos pendentes"
|
||||
},
|
||||
{
|
||||
"id": "irps_inss",
|
||||
"status": "partial",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Cadastro/regras/processamento interno artificial QA em RH autónomo entregue; operações laborais gerais, cálculo legal IRPS/INSS/modelos e ligação salarial financeira/contabilística pendentes"
|
||||
},
|
||||
{
|
||||
"id": "irpc",
|
||||
"status": "pending",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "IRPC operacional: ajustamentos, retenções, apuramento"
|
||||
},
|
||||
{
|
||||
"id": "ispc_ice",
|
||||
"status": "pending",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Motores operacionais ISPC e ICE"
|
||||
},
|
||||
{
|
||||
"id": "official_forms",
|
||||
"status": "pending",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Modelos oficiais com correspondências e reconciliação de campos"
|
||||
},
|
||||
{
|
||||
"id": "fiscal_calendar",
|
||||
"status": "partial",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Controlo administrativo de prazo e entrega simulada de uma origem QA entregue; calendário legal, aplicabilidade geral, prazos por fonte/vigência e submissão continuam pendentes"
|
||||
},
|
||||
{
|
||||
"id": "bank_reconciliation",
|
||||
"status": "partial",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Conferência de duas linhas/extracto artificial QA entregue; integração e reconciliação bancária gerais/reais pendentes"
|
||||
},
|
||||
{
|
||||
"id": "financial_analysis",
|
||||
"status": "partial",
|
||||
"implemented": false,
|
||||
"basis": "docs/SERVICE_INVOICE_CALCULATION_SPEC.md sections10/11",
|
||||
"description": "Dois critérios/indicadores QA com fontes conciliadas entregues; rácios gerais, critérios reais e tendências/séries permanecem pendentes"
|
||||
}
|
||||
],
|
||||
"client_delivery_sources": [
|
||||
"scripts/receipt-composition-http.php",
|
||||
"scripts/sgf-selected-assets.php",
|
||||
"resources/js/statement-download.js"
|
||||
],
|
||||
"client_delivery_proof": "docs/SGF_CLIENT_ASSET_DELIVERY.md",
|
||||
"planned_modules": []
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"version": "SGF-INTERNAL-STATEMENTS-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"applied": true,
|
||||
"scope_file": "docs/SGF_FINANCIAL_STATEMENTS_SCOPE.md",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
"general_ledger.statements.prepare",
|
||||
"general_ledger.statements.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 15,
|
||||
"permission": "general_ledger.statements.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 16,
|
||||
"permission": "general_ledger.statements.review"
|
||||
}
|
||||
],
|
||||
"total_grants_both_books": 4,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"real_operations": false,
|
||||
"source_evidence": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/statements-source-private.json",
|
||||
"evidence": [
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-225950-b75e07c1/statements-access-readonly.json",
|
||||
"C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-225951-e66026dc/statements-access-readonly.json"
|
||||
],
|
||||
"authorization": {
|
||||
"date": "2026-11-11",
|
||||
"decision": "Autorizar o bloco QA e os dois direitos apresentados"
|
||||
},
|
||||
"delivery": "docs/SGF_FINANCIAL_STATEMENTS_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"version": "SGF-STOCK-CATALOGUE-QA-v1",
|
||||
"approved": true,
|
||||
"implemented": true,
|
||||
"scope_file": "docs/SGF_STOCK_CATALOGUE_SCOPE.md",
|
||||
"books": [
|
||||
"existing8085",
|
||||
"existing_regression"
|
||||
],
|
||||
"scope": {
|
||||
"tenant_id": 1,
|
||||
"company_id": 2,
|
||||
"unit_id": 2
|
||||
},
|
||||
"new_host_rights": [
|
||||
"stock.items.prepare",
|
||||
"stock.items.review"
|
||||
],
|
||||
"grants_per_book": [
|
||||
{
|
||||
"user_id": 2,
|
||||
"permission": "stock.items.prepare"
|
||||
},
|
||||
{
|
||||
"user_id": 12,
|
||||
"permission": "stock.items.review"
|
||||
}
|
||||
],
|
||||
"total_grants_both_books": 4,
|
||||
"new_postgres_grants": 0,
|
||||
"new_public_rights": 0,
|
||||
"new_demo": false,
|
||||
"real_operations": false,
|
||||
"evidence": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-212018-5bd7aab6/stock-catalogue-access-readonly.json",
|
||||
"authorization": {
|
||||
"date": "2026-11-10",
|
||||
"decision": "Autorizar o cadastro QA e os dois direitos apresentados"
|
||||
},
|
||||
"applied": true,
|
||||
"delivery": "docs/SGF_STOCK_CATALOGUE_DELIVERY.md"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": "SGF-STOCK-TRANSIT-LOTS-CLOSURE-QA-v1",
|
||||
"approved": true,
|
||||
"approval": "Autorização expressa do proprietário em10/11/2026: Autorizar este fecho QA de Stock",
|
||||
"applied": true,
|
||||
"scope": {"tenant_id": 1, "company_id": 2, "unit_id": 2},
|
||||
"installation": "cc50a276c10c",
|
||||
"new_accounts": false,
|
||||
"new_database_roles": false,
|
||||
"real_access": false,
|
||||
"new_host_rights": [
|
||||
{"permission": "stock.transfers.receive", "recipient_profile": "workshop_verify", "scope": "unit", "destination_warehouse_ids": [1]},
|
||||
{"permission": "stock.lots.review", "recipient_profile": "workshop_verify", "scope": "unit", "warehouse_ids": [3], "only_new_qa_lot_article": true}
|
||||
],
|
||||
"existing_native_functions_to_grant_only_in_qa": [
|
||||
{"native_user_id": 6, "functions": ["inventory_lot_read", "inventory_lot_prepare", "inventory_lot_hold"]},
|
||||
{"native_user_id": 3, "functions": ["inventory_lot_read", "inventory_lot_review", "inventory_lot_release", "inventory_adjust_review"]}
|
||||
],
|
||||
"receiving_native_identity": 3,
|
||||
"receiving_authority": "explicit scoped SGF stock.transfers.receive; not a generic native warehouse grant",
|
||||
"preserve_existing_select_only_reader": true,
|
||||
"no_new_native_warehouse_function": true,
|
||||
"fixture_examples": {"internal_transfer_milli": 1000, "owned_stock_value_unchanged_minor": 7500, "lot_receipt_milli": 4000, "lot_count_milli": 3500, "lot_unit_value_minor": 2000, "lot_adjustment_expense_minor": 1000, "lot_final_value_minor": 7000},
|
||||
"scope_document": "docs/SGF_STOCK_FINAL_SCOPE.md"
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"passed": true,
|
||||
"scope": "integration preparation, no installation or activation",
|
||||
"preparation": {
|
||||
"id": "d09aac9d09da98e61df5",
|
||||
"manifest_sha256": "e7dbcff1261b239ea07f570a075e492404a9309fcfbd29287c895bcd20bc06a7",
|
||||
"endpoint_files": 8,
|
||||
"client_files": 3,
|
||||
"configurations_disabled": true,
|
||||
"source_package_installed": false,
|
||||
"target_package_installed": false,
|
||||
"mappings_assigned": false,
|
||||
"credentials_created": false
|
||||
},
|
||||
"unit": {
|
||||
"command": "php vendor/phpunit/phpunit/phpunit tests/Unit/SgcInvoiceClientTest.php --no-progress",
|
||||
"tests": 16,
|
||||
"assertions": 46,
|
||||
"passed": true,
|
||||
"database_connections": 0,
|
||||
"network_requests": 0,
|
||||
"evidence": "Observed successful command output; fake transport, no native SGC workflow boot"
|
||||
},
|
||||
"kernel": {
|
||||
"result_sha256": "f1e0c8d3311db387593b75720818ba5b6a57f7f0acd6146eb0fc6b72cf09bb12",
|
||||
"checks": [
|
||||
"prepared client recovers real existing native receipt through kernel",
|
||||
"client performs exact context read and explicit preview/recovery only",
|
||||
"native protocol retains one original UUID",
|
||||
"prepared client consumes real native impact without confirming",
|
||||
"client contract proof adds no invoice or audit rows",
|
||||
"serialised transport states exclude bearer credential"
|
||||
],
|
||||
"new_business_rows": 0,
|
||||
"existing_regression_book": "da77bb730751",
|
||||
"tcp_8085": false
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"file": "packages/sgc-invoice-client/src/InvoiceClient.php",
|
||||
"sha256": "64572c1630f4ed05086241ed519abf02b6e16b508af5b71f2f099df1ed5a72d8"
|
||||
},
|
||||
{
|
||||
"file": "tests/Unit/SgcInvoiceClientTest.php",
|
||||
"sha256": "a52660eda916daa6baf75394c6da16847ee8126fe845e572b15fb73de8cd5652"
|
||||
},
|
||||
{
|
||||
"file": "scripts/prepare-sgc-8085.mjs",
|
||||
"sha256": "b0078b804210f042c2cdd55eb9bfcd2677bf4ad29f48a173b5783618dbe4b051"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-client-kernel-proof.php",
|
||||
"sha256": "f1527a69e786751a3cd7111cc8fd638460b50cb16b8904ef69f88181b83da5c1"
|
||||
}
|
||||
],
|
||||
"sgc_sources": [
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/SgfInvoiceGateway.php",
|
||||
"sha256": "8fb4eb64f63562ca83be96584beb42de70b4f47a951900c92d14a8ab7e7b8039"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/config/sgf_invoice.php",
|
||||
"sha256": "e82fea9fae8ab6fe0fb30daf21b88fd31881a20b3ecbdec28f88edc1615e8fdd"
|
||||
}
|
||||
],
|
||||
"reused_proofs": [
|
||||
{
|
||||
"file": "docs/proofs/sgc-invoice-endpoint-20261110.json",
|
||||
"sha256": "5dcdb843b18c1d33e9b1bc8351d7d0addeb780a63ae9fb374821bd414faa7c75",
|
||||
"checks": 78,
|
||||
"repeated": false
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"sha256": "3b63f8653e8dbb089dfdd8f389e271c022a070d5a67a9f9d4585ce84438070cc",
|
||||
"checks": 63,
|
||||
"repeated": false
|
||||
}
|
||||
],
|
||||
"preservation": {
|
||||
"protected_8085_code_and_state_unchanged": true,
|
||||
"protected_8085_database_writes": 0,
|
||||
"sgc_pilot_database_connections": 0,
|
||||
"six_records_changed": false,
|
||||
"cache_cleared": false,
|
||||
"new_demo": false,
|
||||
"new_database": false,
|
||||
"new_server": false,
|
||||
"new_role": false,
|
||||
"new_real_rights": false,
|
||||
"activation": false,
|
||||
"publication": false,
|
||||
"checkpoint": false
|
||||
},
|
||||
"pending": [
|
||||
"Durable unregistered source-draft/intent/approval/receipt workflow and UI in SGC before use; no existing SGC Invoice forwarding",
|
||||
"Explicit approved source/target/order/line mappings",
|
||||
"Approved named QA principal and private credentials/context versions",
|
||||
"Disabled-code installation followed by separately approved end-to-end network trial in the same8085",
|
||||
"Real use/deployment is not established by these preparation checks"
|
||||
],
|
||||
"report": "docs/SGC_8085_INTEGRATION_PREPARATION.md"
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"passed": true,
|
||||
"checks": 78,
|
||||
"tests": {
|
||||
"result.json": {
|
||||
"sha256": "ba882fdd91b731f128f77810e737960ca60962864c5bcc8a903858fd580163e3",
|
||||
"checks": [
|
||||
"existing regression native order readable with mapped identity",
|
||||
"actual invoice preview via API transport",
|
||||
"preview has no budget consumption or payable",
|
||||
"preview rolls all business rows back",
|
||||
"successful response is not cached",
|
||||
"disabled endpoint refuses even valid credentials",
|
||||
"missing or wrong principal/token refused",
|
||||
"missing or wrong principal/token refused",
|
||||
"missing or wrong principal/token refused",
|
||||
"stale context version refused",
|
||||
"non-TLS remote request refused",
|
||||
"non JSON refused",
|
||||
"oversized body refused",
|
||||
"malformed JSON refused",
|
||||
"client cannot choose tenant",
|
||||
"supplier cannot be silently associated",
|
||||
"floating point amounts refused",
|
||||
"inconsistent total refused by original writer",
|
||||
"foreign native line refused",
|
||||
"foreign native order refused",
|
||||
"malformed idempotency key refused",
|
||||
"revoked authentication version refused",
|
||||
"unauthorised unit mapping refused",
|
||||
"revoked prepare right refused",
|
||||
"confirmation creates pending invoice only",
|
||||
"lost response recovered by same confirmation",
|
||||
"same request recovered through preview after commit",
|
||||
"same key different content conflicts",
|
||||
"confirmation must use the preview key",
|
||||
"tampered preview refused",
|
||||
"replay revalidates current authority",
|
||||
"second individually prepared document confirmed",
|
||||
"changed source invalidates earlier preview",
|
||||
"failure between writer and receipt rolls invoice back",
|
||||
"same operation recovers after failure",
|
||||
"concurrent same-key confirmations return one create and one recovery",
|
||||
"concurrent receipts identify one invoice",
|
||||
"no new consumption stock obligation payment or ledger effects",
|
||||
"previous accepted invoice rows preserved",
|
||||
"host rows permissions budget and sequences unchanged",
|
||||
"8085 host/native all rows and sequences unchanged",
|
||||
"context cleaned after request"
|
||||
]
|
||||
},
|
||||
"security-result.json": {
|
||||
"sha256": "60b3e603926d1896ef0a37366e57f05b54f21eb68b61c14865839b09b0016ef4",
|
||||
"checks": [
|
||||
"existing confirmed invoice recovered without new business write",
|
||||
"foreign tenant_id principal rejected",
|
||||
"foreign company_id principal rejected",
|
||||
"disabled principal rejected even for replay",
|
||||
"rotated credential invalidates old bearer",
|
||||
"old context header rejected after rotation",
|
||||
"old preview rejected with new context header",
|
||||
"disabled purchasing module refuses API replay",
|
||||
"same key cannot be moved to another authorised order",
|
||||
"UUID case does not create a second operation",
|
||||
"query cannot inject another context",
|
||||
"nested unknown authority field rejected",
|
||||
"transport cannot approve or consume invoice",
|
||||
"legacy payment route remains unmounted",
|
||||
"durable receipt recovered after preview lifetime with current authority",
|
||||
"expired unapplied preview cannot write",
|
||||
"lock timeout returns recoverable503 without duplicate",
|
||||
"after lock release same operation recovers correct invoice",
|
||||
"security and lock continuation added no invoices or audit commands",
|
||||
"source configuration remains disabled with no principals"
|
||||
]
|
||||
},
|
||||
"context-result.json": {
|
||||
"sha256": "a8260e789c2020fcca9c9bd159e6f73c221fd9dc320fd81ccf2c4b65e377ab57",
|
||||
"checks": [
|
||||
"authenticated exact order exposes current revision and lines",
|
||||
"context response is uncached and excludes unrelated invoice list",
|
||||
"context read requires bearer",
|
||||
"context read refuses foreign tenant order",
|
||||
"context read rejects query authority",
|
||||
"context read rejects a request body",
|
||||
"context read revalidates view grant",
|
||||
"context route also remains disabled",
|
||||
"POST durable replay unchanged after adding read-only context route",
|
||||
"context checks add no business effects"
|
||||
]
|
||||
},
|
||||
"authority-result.json": {
|
||||
"sha256": "789964b5f41a4bc143caad7d69e445890125f0ceb0db49c17092fbd68495b124",
|
||||
"checks": [
|
||||
"current native operator lock permits authorised recovery",
|
||||
"revoked native finance function prevents receipt recovery",
|
||||
"native finance fixture restored by transaction rollback",
|
||||
"maintenance-only native operator cannot recover invoice receipt",
|
||||
"normal recovery resumes without another business command",
|
||||
"operator guard checks add no invoice or audit commands"
|
||||
]
|
||||
}
|
||||
},
|
||||
"transport": "Laravel HTTP kernel, actual PostgreSQL and independent PHP workers; no TCP server",
|
||||
"routes": [
|
||||
"POST /api/v1/integration/sgc/invoices",
|
||||
"GET /api/v1/integration/sgc/invoices/orders/{order}"
|
||||
],
|
||||
"result": {
|
||||
"new_pending_invoices": 4,
|
||||
"concurrent_statuses": [
|
||||
200,
|
||||
201
|
||||
],
|
||||
"lock_statuses": [
|
||||
503,
|
||||
200
|
||||
],
|
||||
"invoice_audit_atomicity_proved": true,
|
||||
"workflow": "original pending invoice writer",
|
||||
"auto_financial_validation": false
|
||||
},
|
||||
"isolation": {
|
||||
"existing_regression_book": "da77bb730751",
|
||||
"source_fixture": "SQL fixture only; not executed request/award/receipt/stock workflows",
|
||||
"protected_8085_hashes": [
|
||||
"6168b382599448d71b39691ba4c347db0c8ab8a8d8dc7388283b212239ac9290",
|
||||
"58e032c3a30234433adf66cc75478bd729ba0f62592637cf737e2ee23e01773b"
|
||||
],
|
||||
"protected_8085_code_unchanged": true,
|
||||
"prior_receipts_and_movements_sha256": "8fc992e83559200f691b253fd72e22986a972eb58f77b50bdf32d4d18d5f5dd4",
|
||||
"prior_consumed_minor": 10000,
|
||||
"external_payments": 0,
|
||||
"six_protected_records_changed": false,
|
||||
"cache_cleared": false,
|
||||
"new_database": false,
|
||||
"new_role": false,
|
||||
"new_server": false,
|
||||
"new_demo": false,
|
||||
"new_real_grants": false
|
||||
},
|
||||
"disabled_configuration": {
|
||||
"enabled": false,
|
||||
"principals": []
|
||||
},
|
||||
"publication": false,
|
||||
"checkpoint": false,
|
||||
"business_authority_unchanged": [
|
||||
{
|
||||
"file": "app/Modules/Purchasing/InvoiceController.php",
|
||||
"sha256": "85eb46ca7e65c60bed190e592a134eb48db5762c0a90b8cd4c9d6fbd81198ba4"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/ReceiptRuntime.php",
|
||||
"sha256": "9b426476b2805094fb317cc753385ef43882fb4964883e880eac287eed89d9e0"
|
||||
},
|
||||
{
|
||||
"file": "packages/payables/src/Payables.php",
|
||||
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d"
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "bootstrap/app.php",
|
||||
"sha256": "42aacf13b19658e80b93c8b2f640133a349e9302f295b5e4c57702e352013382"
|
||||
},
|
||||
{
|
||||
"file": "routes/sgc.php",
|
||||
"sha256": "1ca49298535c1edfe1afd494b56274ee1b25842079f4da7557755db471c73348"
|
||||
},
|
||||
{
|
||||
"file": "config/sgc_invoice.php",
|
||||
"sha256": "bd5615a9eadd5d98e831db10ce60713d792f9b324282fdd87d52367ad2bf62a4"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Context/ModuleNavigation.php",
|
||||
"sha256": "88a86523568643b4f285647ab341c435819715e9b7eb963bf8a44b3a4167f6dc"
|
||||
},
|
||||
{
|
||||
"file": "app/Http/Middleware/AuthenticateSgcInvoice.php",
|
||||
"sha256": "f99e2e26a8b09c31e1b84618a10ec6e7016a9b02a7f9049b64c5a157cc1d9888"
|
||||
},
|
||||
{
|
||||
"file": "app/Http/Requests/Sgc/StoreInvoiceRequest.php",
|
||||
"sha256": "e2a859fe54c412cba9cd70353c98582774034996c382e1da4916abef46497d47"
|
||||
},
|
||||
{
|
||||
"file": "app/Http/Controllers/Api/V1/SgcInvoiceIngressController.php",
|
||||
"sha256": "d590601efa6c46d9a34f77c655767758c88326e4d64f0da1b66f3174216ad782"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/SgcInvoiceIngress.php",
|
||||
"sha256": "4acde7b84193b509f09d0cac5c7993b298384651443c0ce58ee9effcefc4d6bf"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-proof-bootstrap.php",
|
||||
"sha256": "0988f2e9f6c2b59e057de893fafe8996070e313354d82056ad4494223f0efea7"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-proof.php",
|
||||
"sha256": "725f985e8429a7456b87d44066e8339b3204255f07dc83bde2806b75158bcf85"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-security-proof.php",
|
||||
"sha256": "71095d6c20fbbe0e5874741a915de6c45c37cae4149c38c027559c090f91b146"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-context-proof.php",
|
||||
"sha256": "44d290770f6e3bd2127b0be96c2e663aef9b67d0d68a4e29d994a76c5f1247ec"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-authority-proof.php",
|
||||
"sha256": "d5b41a4594b79e0b61a40654d831a00e2e4dc9542df94672ac755aa2565b2087"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-invoice-check.mjs",
|
||||
"sha256": "7ecc6bc75d228285e3a5917b9d8db78d36ac7b3cbdaa3c9d1a42e305cf080119"
|
||||
},
|
||||
{
|
||||
"file": "scripts/summarize-sgc-invoice.php",
|
||||
"sha256": "52f3aa34fce4d7463aa614280500ad4ef4453d43f93d78a86567a0ae2ed4a91a"
|
||||
},
|
||||
{
|
||||
"file": "tests/payloads/invoice_test.json",
|
||||
"sha256": "1a584f2540f48be5b0e57df67796aff07fb77511f3d347a606a02a95b43a34a6"
|
||||
}
|
||||
],
|
||||
"report": "docs/SGC_INVOICE_ENDPOINT.md",
|
||||
"limitations": [
|
||||
"QA adapter only; no real activation/deployment.",
|
||||
"Kernel requests are not network/TLS/visual or sustained-load tests.",
|
||||
"Initial72 checks reused; last6 exercise the strengthened native-operator recovery guard without repeating writes.",
|
||||
"Synthetic bearer tokens, encrypted previews and private logs are excluded from this proof.",
|
||||
"Source preparation adds SQL fixtures to the existing regression book; previous proofs and rows are preserved."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"passed": true,
|
||||
"scope": "SGC durable invoice source workspace for SGF intake; no operational activation",
|
||||
"sqlite": {
|
||||
"unique_cases": 19,
|
||||
"assertions": 138,
|
||||
"cases": {
|
||||
"test_full_durable_cycle_and_audited_decision": 15,
|
||||
"test_lost_response_reuses_same_key_cut_and_durable_intent": 7,
|
||||
"test_failure_after_remote_commit_keeps_durable_sending_for_recovery": 7,
|
||||
"test_revision_preserves_before_after_and_invalidates_preview": 8,
|
||||
"test_no_edit_after_any_confirmation_started": 3,
|
||||
"test_local_registration_is_blocked_even_when_feature_is_disabled": 3,
|
||||
"test_existing_local_invoice_cannot_be_sent": 3,
|
||||
"test_duplicate_source_cannot_get_second_intent": 3,
|
||||
"test_stale_version_and_wrong_approval_do_not_send": 5,
|
||||
"test_operator_context_and_mapping_changes_require_new_conference": 5,
|
||||
"test_http_screen_csrf_and_audited_history_are_private": 16,
|
||||
"test_foreign_tenant_and_warehouse_actor_cannot_read_or_write": 6,
|
||||
"test_pagination_history_and_output_escaping": 10,
|
||||
"test_events_and_drafts_cannot_be_deleted_or_rewritten": 5,
|
||||
"test_disabled_transport_keeps_draft_and_disabled_workspace_refuses": 6,
|
||||
"test_changed_remote_context_refuses_decision_before_recording_it": 8,
|
||||
"test_revoked_operator_cannot_confirm_and_live_lease_prevents_duplicate_send": 5,
|
||||
"test_actual_screen_forms_complete_registration_and_keep_exact_sgf_handoff": 18,
|
||||
"test_missing_schema_is_refused_without_activating_or_migrating": 5
|
||||
},
|
||||
"junit": [
|
||||
{
|
||||
"private_file": "source-sqlite-junit.xml",
|
||||
"sha256": "ac2adb90fda1ad7837033a58ea441b038f86c9eaff0f7c2b4c1645a999a77f0d"
|
||||
},
|
||||
{
|
||||
"private_file": "source-screen-junit.xml",
|
||||
"sha256": "3a31a747dab297e58c67e4c9f964eb3286f0e9ee5f1907fd6332064d9c73e6b8"
|
||||
},
|
||||
{
|
||||
"private_file": "source-readiness-junit.xml",
|
||||
"sha256": "34115e3e5d18a6c526705ad17db38d9ee92a9ff5a85711303b9d0e50757eebad"
|
||||
}
|
||||
],
|
||||
"database": ":memory:",
|
||||
"migration_scope": "only minimal synthetic fixtures and the new migration"
|
||||
},
|
||||
"postgresql": {
|
||||
"checks": [
|
||||
"two source persistence tables installed only in existing regression book",
|
||||
"actual SGC service persists real SGF kernel preview",
|
||||
"remote commit with lost response is durably uncertain at source",
|
||||
"source recovers one actual pending invoice from receiver",
|
||||
"first end-to-end intent creates exactly one receiver invoice",
|
||||
"native SGC writer refuses claimed invoice before any local duplicate",
|
||||
"concurrent source decisions yield one send and stale/in-flight refusal",
|
||||
"second end-to-end intent creates only one receiver invoice",
|
||||
"source has one durable decision and receipt for concurrent intent",
|
||||
"PostgreSQL refuses rewriting source event history",
|
||||
"all original source business rows and sequences preserved",
|
||||
"receiver budget stock and payments unchanged by pending-document intake",
|
||||
"8085 all host/native rows and sequences unchanged",
|
||||
"exactly two individually audited decisions for two sources"
|
||||
],
|
||||
"result_sha256": "17c702478dd6bb3cf81367a370a39f36f1b290ace02902f5a2b72b7680bf638a",
|
||||
"source_book": "b4093c6f6707",
|
||||
"receiver_book": "da77bb730751",
|
||||
"new_receiver_pending_invoices": 2,
|
||||
"source_concurrent_statuses": [
|
||||
200,
|
||||
409
|
||||
],
|
||||
"remote_commit_response_loss_recovered": true,
|
||||
"new_schema_only_in_regression": true,
|
||||
"original_source_rows_and_sequences_preserved": true
|
||||
},
|
||||
"ui": {
|
||||
"route": "/facturas/envio-sgf",
|
||||
"blade_http_forms_tested": true,
|
||||
"history_and_list_page_size": 25,
|
||||
"typescript_no_emit_exit": 0,
|
||||
"private_tsx_sha256": "f8b1869842dc10832fc9d9a90678a4e620c98dd6a97b40bb0dea7b6021508e23",
|
||||
"typescript_diagnostics_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"rendered_inline_scripts_syntax_checked": 3,
|
||||
"visual_browser_review": false,
|
||||
"full_product_build": false
|
||||
},
|
||||
"preparation": {
|
||||
"id": "4a6df60a8e9f8ae95c1d",
|
||||
"manifest_sha256": "bb09254e16a7598fb797af1bbb69d7e4b2992e5580a248747c30c7a44ffecf04",
|
||||
"endpoint_files": 8,
|
||||
"client_source_files": 15,
|
||||
"installed": false,
|
||||
"activated": false,
|
||||
"sql_privileges_approved": false
|
||||
},
|
||||
"preservation": {
|
||||
"8085_all_host_native_rows_and_sequences_sha256": [
|
||||
"6168b382599448d71b39691ba4c347db0c8ab8a8d8dc7388283b212239ac9290",
|
||||
"58e032c3a30234433adf66cc75478bd729ba0f62592637cf737e2ee23e01773b"
|
||||
],
|
||||
"8085_code_unchanged": true,
|
||||
"six_records_changed": false,
|
||||
"cache_cleared": false,
|
||||
"pilot_schema_changed": false,
|
||||
"new_operational_credentials": false,
|
||||
"new_business_rights": false,
|
||||
"new_database": false,
|
||||
"new_role": false,
|
||||
"new_demo": false,
|
||||
"new_http_server": false,
|
||||
"publication": false,
|
||||
"checkpoint": false
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"file": "C:\\laragon\\www\\sgf-tempo/packages/sgc-invoice-client/src/InvoiceClient.php",
|
||||
"sha256": "64572c1630f4ed05086241ed519abf02b6e16b508af5b71f2f099df1ed5a72d8"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/SgfInvoiceGateway.php",
|
||||
"sha256": "8fb4eb64f63562ca83be96584beb42de70b4f47a951900c92d14a8ab7e7b8039"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/config/sgf_invoice.php",
|
||||
"sha256": "8f90cd662cea2537b578a514a5c14a951db750360799fb12c50a65c7ef444d1d"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/SgfInvoiceDispatches.php",
|
||||
"sha256": "206fc70f4f99689cace59b3f17ca35e78683ed29bfe0f3cecd59adb6c611cf7d"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Http/Controllers/SgfInvoiceDispatchController.php",
|
||||
"sha256": "224bbebe0df3cd82fbab55a02408534704c170d54b536ffc0e3cd8f9ccd99942"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/database/migrations/2026_11_10_000001_create_sgf_invoice_dispatches.php",
|
||||
"sha256": "91702237b3fde1026dd63b6a26dd571fa0e331235fc216dd927d340c5ecb1888"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/layout.blade.php",
|
||||
"sha256": "f4da950b56cff30c57961485f83876ea4fdafa389360a3294d0f35bf025c9cec"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/document-form.blade.php",
|
||||
"sha256": "8333219385743cc1826ef7ba29ee68380c08fd44e96c612f4021606d95df4360"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/index.blade.php",
|
||||
"sha256": "19ce2d589f208e585f906fa3633d6881286c64a3477d997e03269c41c066ac05"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/evidence.blade.php",
|
||||
"sha256": "e65a8830126061626532dc47f3536d726fd1388cca373dfc3dea5295575fa166"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/show.blade.php",
|
||||
"sha256": "a5f5b4859872f18875dfbc08bbc63d9df3cf675d0d89ece7224fdb868a52b6cb"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/InvoiceWorkflow.php",
|
||||
"sha256": "4f056f195fb7a091ec4e80dead714241514e34c7998695607c6803959fd0561c"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Http/Controllers/InvoiceController.php",
|
||||
"sha256": "37d9e1037dca3bd142bbbae30f40aaa6d68c5cf3f08b3b22a6a2a3824e12cc7c"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/routes/web.php",
|
||||
"sha256": "d842702959639234e849bc78fb029af0d8018889f6632ee178997ba79b5bea56"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/js/pages/invoices/index.tsx",
|
||||
"sha256": "fe9382794b440108be9d04a0a53cac1f95c58fe4abc5f673bd98d9525445e045"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-receiver.php",
|
||||
"sha256": "8919a3cb43743aacca2b797a1dd49710de809432a563f24f8037d32a3f39b872"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-pg-bootstrap.php",
|
||||
"sha256": "28265cad1a5b64875d03738c45d31a42d8aa7247c14a7e60511a68283cedc9ba"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-pg-proof.php",
|
||||
"sha256": "24ae626cc7e001f087d5379540ac9874261588723b5aa209802c611e349ab5c1"
|
||||
},
|
||||
{
|
||||
"file": "scripts/summarize-sgc-dispatch.php",
|
||||
"sha256": "4a6b19761e5e073142b878a56997bc6a2ac21a062c5adfa2d6b25b7ac10a4c1d"
|
||||
},
|
||||
{
|
||||
"file": "scripts/prepare-sgc-8085.mjs",
|
||||
"sha256": "57e0136bc5e4dd26c84719a6972acf5a5a936e2cc9b9debcc4bb131309eadc3b"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/tests/Integration/SgfInvoiceDispatchesTest.php",
|
||||
"sha256": "0635ea1edac965da339159b9bd7c1cae9e8e304767a25ad590334205e1c186cd"
|
||||
}
|
||||
],
|
||||
"reused_proofs": [
|
||||
{
|
||||
"file": "docs/proofs/sgc-invoice-endpoint-20261110.json",
|
||||
"sha256": "5dcdb843b18c1d33e9b1bc8351d7d0addeb780a63ae9fb374821bd414faa7c75",
|
||||
"repeated": false
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/sgc-8085-integration-preparation-20261110.json",
|
||||
"sha256": "c9db703f25731610ab58f19a87917eb5a112b507159bba587dfdc8e0e8e76216",
|
||||
"repeated": false
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"sha256": "3b63f8653e8dbb089dfdd8f389e271c022a070d5a67a9f9d4585ce84438070cc",
|
||||
"repeated": false
|
||||
}
|
||||
],
|
||||
"report": "docs/SGC_INVOICE_WORKSPACE_DELIVERY.md",
|
||||
"limits": [
|
||||
"Two real application kernels in independent PHP processes, intercepted CLI bridge; no TCP8085 or pilot activation.",
|
||||
"The initial receiver harness inherited SGC cache metadata; isolated environment corrected and same draft/key resumed without replaying an accepted confirmation.",
|
||||
"19 unique selected cases, not20 executions or a sum with old endpoint/client suites.",
|
||||
"Final schema-readiness guard covered by a directed SQLite check; successful integrated business commits were not repeated.",
|
||||
"No full product bundle build, visual review, sustained load, disaster recovery or deployment capacity claim.",
|
||||
"Exact source migration/SQL privileges, code installation, approved mappings/principal/secret and activation still require their authorised rollout."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"passed": true,
|
||||
"scope": "SGC durable invoice source workspace for SGF intake; no operational activation",
|
||||
"sqlite": {
|
||||
"unique_cases": 20,
|
||||
"assertions": 142,
|
||||
"cases": {
|
||||
"test_full_durable_cycle_and_audited_decision": 15,
|
||||
"test_lost_response_reuses_same_key_cut_and_durable_intent": 7,
|
||||
"test_failure_after_remote_commit_keeps_durable_sending_for_recovery": 7,
|
||||
"test_revision_preserves_before_after_and_invalidates_preview": 8,
|
||||
"test_no_edit_after_any_confirmation_started": 3,
|
||||
"test_local_registration_is_blocked_even_when_feature_is_disabled": 3,
|
||||
"test_existing_local_invoice_cannot_be_sent": 3,
|
||||
"test_duplicate_source_cannot_get_second_intent": 3,
|
||||
"test_stale_version_and_wrong_approval_do_not_send": 5,
|
||||
"test_operator_context_and_mapping_changes_require_new_conference": 5,
|
||||
"test_http_screen_csrf_and_audited_history_are_private": 16,
|
||||
"test_foreign_tenant_and_warehouse_actor_cannot_read_or_write": 6,
|
||||
"test_pagination_history_and_output_escaping": 10,
|
||||
"test_events_and_drafts_cannot_be_deleted_or_rewritten": 5,
|
||||
"test_disabled_transport_keeps_draft_and_disabled_workspace_refuses": 6,
|
||||
"test_changed_remote_context_refuses_decision_before_recording_it": 8,
|
||||
"test_revoked_operator_cannot_confirm_and_live_lease_prevents_duplicate_send": 5,
|
||||
"test_actual_screen_forms_complete_registration_and_keep_exact_sgf_handoff": 18,
|
||||
"test_missing_schema_is_refused_without_activating_or_migrating": 5,
|
||||
"test_audit_freezes_preview_actor_and_context_fingerprint": 4
|
||||
},
|
||||
"junit": [
|
||||
{
|
||||
"private_file": "source-sqlite-junit.xml",
|
||||
"sha256": "ac2adb90fda1ad7837033a58ea441b038f86c9eaff0f7c2b4c1645a999a77f0d"
|
||||
},
|
||||
{
|
||||
"private_file": "source-screen-junit.xml",
|
||||
"sha256": "3a31a747dab297e58c67e4c9f964eb3286f0e9ee5f1907fd6332064d9c73e6b8"
|
||||
},
|
||||
{
|
||||
"private_file": "source-readiness-junit.xml",
|
||||
"sha256": "34115e3e5d18a6c526705ad17db38d9ee92a9ff5a85711303b9d0e50757eebad"
|
||||
},
|
||||
{
|
||||
"private_file": "source-context-audit-junit.xml",
|
||||
"sha256": "3b5e352a1cb43e576e714e5753862b961cd3ceb3659fbb63b6df48c04e5dc81f"
|
||||
}
|
||||
],
|
||||
"database": ":memory:",
|
||||
"migration_scope": "only minimal synthetic fixtures and the new migration"
|
||||
},
|
||||
"postgresql": {
|
||||
"checks": [
|
||||
"two source persistence tables installed only in existing regression book",
|
||||
"actual SGC service persists real SGF kernel preview",
|
||||
"remote commit with lost response is durably uncertain at source",
|
||||
"source recovers one actual pending invoice from receiver",
|
||||
"first end-to-end intent creates exactly one receiver invoice",
|
||||
"native SGC writer refuses claimed invoice before any local duplicate",
|
||||
"concurrent source decisions yield one send and stale/in-flight refusal",
|
||||
"second end-to-end intent creates only one receiver invoice",
|
||||
"source has one durable decision and receipt for concurrent intent",
|
||||
"PostgreSQL refuses rewriting source event history",
|
||||
"all original source business rows and sequences preserved",
|
||||
"receiver budget stock and payments unchanged by pending-document intake",
|
||||
"8085 all host/native rows and sequences unchanged",
|
||||
"exactly two individually audited decisions for two sources"
|
||||
],
|
||||
"result_sha256": "17c702478dd6bb3cf81367a370a39f36f1b290ace02902f5a2b72b7680bf638a",
|
||||
"source_book": "b4093c6f6707",
|
||||
"receiver_book": "da77bb730751",
|
||||
"new_receiver_pending_invoices": 2,
|
||||
"source_concurrent_statuses": [
|
||||
200,
|
||||
409
|
||||
],
|
||||
"remote_commit_response_loss_recovered": true,
|
||||
"new_schema_only_in_regression": true,
|
||||
"original_source_rows_and_sequences_preserved": true
|
||||
},
|
||||
"ui": {
|
||||
"route": "/facturas/envio-sgf",
|
||||
"blade_http_forms_tested": true,
|
||||
"history_and_list_page_size": 25,
|
||||
"typescript_no_emit_exit": 0,
|
||||
"private_tsx_sha256": "f8b1869842dc10832fc9d9a90678a4e620c98dd6a97b40bb0dea7b6021508e23",
|
||||
"typescript_diagnostics_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"rendered_inline_scripts_syntax_checked": 3,
|
||||
"visual_browser_review": false,
|
||||
"full_product_build": false
|
||||
},
|
||||
"preparation": {
|
||||
"id": "3bb99e866f52965dbb7d",
|
||||
"manifest_sha256": "b4abf43bcaa78a674b2b79b17143d8711eae63eba231330feae962c66cd004fe",
|
||||
"endpoint_files": 8,
|
||||
"client_source_files": 15,
|
||||
"installed": false,
|
||||
"activated": false,
|
||||
"sql_privileges_approved": false
|
||||
},
|
||||
"preservation": {
|
||||
"8085_all_host_native_rows_and_sequences_sha256": [
|
||||
"6168b382599448d71b39691ba4c347db0c8ab8a8d8dc7388283b212239ac9290",
|
||||
"58e032c3a30234433adf66cc75478bd729ba0f62592637cf737e2ee23e01773b"
|
||||
],
|
||||
"8085_code_unchanged": true,
|
||||
"six_records_changed": false,
|
||||
"cache_cleared": false,
|
||||
"pilot_schema_changed": false,
|
||||
"new_operational_credentials": false,
|
||||
"new_business_rights": false,
|
||||
"new_database": false,
|
||||
"new_role": false,
|
||||
"new_demo": false,
|
||||
"new_http_server": false,
|
||||
"publication": false,
|
||||
"checkpoint": false
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"file": "C:\\laragon\\www\\sgf-tempo/packages/sgc-invoice-client/src/InvoiceClient.php",
|
||||
"sha256": "64572c1630f4ed05086241ed519abf02b6e16b508af5b71f2f099df1ed5a72d8"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/SgfInvoiceGateway.php",
|
||||
"sha256": "8fb4eb64f63562ca83be96584beb42de70b4f47a951900c92d14a8ab7e7b8039"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/config/sgf_invoice.php",
|
||||
"sha256": "8f90cd662cea2537b578a514a5c14a951db750360799fb12c50a65c7ef444d1d"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/SgfInvoiceDispatches.php",
|
||||
"sha256": "643c77976f9a71e0e61402dcb246eb762a26bf1f8013f17528c1fb0e8d669186"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Http/Controllers/SgfInvoiceDispatchController.php",
|
||||
"sha256": "224bbebe0df3cd82fbab55a02408534704c170d54b536ffc0e3cd8f9ccd99942"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/database/migrations/2026_11_10_000001_create_sgf_invoice_dispatches.php",
|
||||
"sha256": "91702237b3fde1026dd63b6a26dd571fa0e331235fc216dd927d340c5ecb1888"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/layout.blade.php",
|
||||
"sha256": "f4da950b56cff30c57961485f83876ea4fdafa389360a3294d0f35bf025c9cec"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/document-form.blade.php",
|
||||
"sha256": "8333219385743cc1826ef7ba29ee68380c08fd44e96c612f4021606d95df4360"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/index.blade.php",
|
||||
"sha256": "19ce2d589f208e585f906fa3633d6881286c64a3477d997e03269c41c066ac05"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/evidence.blade.php",
|
||||
"sha256": "e65a8830126061626532dc47f3536d726fd1388cca373dfc3dea5295575fa166"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/views/sgf-invoices/show.blade.php",
|
||||
"sha256": "a5f5b4859872f18875dfbc08bbc63d9df3cf675d0d89ece7224fdb868a52b6cb"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Services/InvoiceWorkflow.php",
|
||||
"sha256": "4f056f195fb7a091ec4e80dead714241514e34c7998695607c6803959fd0561c"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/app/Http/Controllers/InvoiceController.php",
|
||||
"sha256": "37d9e1037dca3bd142bbbae30f40aaa6d68c5cf3f08b3b22a6a2a3824e12cc7c"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/routes/web.php",
|
||||
"sha256": "d842702959639234e849bc78fb029af0d8018889f6632ee178997ba79b5bea56"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/resources/js/pages/invoices/index.tsx",
|
||||
"sha256": "fe9382794b440108be9d04a0a53cac1f95c58fe4abc5f673bd98d9525445e045"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-receiver.php",
|
||||
"sha256": "8919a3cb43743aacca2b797a1dd49710de809432a563f24f8037d32a3f39b872"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-pg-bootstrap.php",
|
||||
"sha256": "28265cad1a5b64875d03738c45d31a42d8aa7247c14a7e60511a68283cedc9ba"
|
||||
},
|
||||
{
|
||||
"file": "scripts/sgc-dispatch-pg-proof.php",
|
||||
"sha256": "24ae626cc7e001f087d5379540ac9874261588723b5aa209802c611e349ab5c1"
|
||||
},
|
||||
{
|
||||
"file": "scripts/summarize-sgc-dispatch.php",
|
||||
"sha256": "a77dac8b28574f3ed5c9f9a372bc44d921081d6c9656fd322a385c40b2da061c"
|
||||
},
|
||||
{
|
||||
"file": "scripts/prepare-sgc-8085.mjs",
|
||||
"sha256": "57e0136bc5e4dd26c84719a6972acf5a5a936e2cc9b9debcc4bb131309eadc3b"
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/www/compras/tests/Integration/SgfInvoiceDispatchesTest.php",
|
||||
"sha256": "e78368849e4f4cf5bd3bcb9cd6dc52215cffecba3dd5aba76de2a7838b9cb9bd"
|
||||
}
|
||||
],
|
||||
"reused_proofs": [
|
||||
{
|
||||
"file": "docs/proofs/sgc-invoice-endpoint-20261110.json",
|
||||
"sha256": "5dcdb843b18c1d33e9b1bc8351d7d0addeb780a63ae9fb374821bd414faa7c75",
|
||||
"repeated": false
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/sgc-8085-integration-preparation-20261110.json",
|
||||
"sha256": "c9db703f25731610ab58f19a87917eb5a112b507159bba587dfdc8e0e8e76216",
|
||||
"repeated": false
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"sha256": "3b63f8653e8dbb089dfdd8f389e271c022a070d5a67a9f9d4585ce84438070cc",
|
||||
"repeated": false
|
||||
}
|
||||
],
|
||||
"report": "docs/SGC_INVOICE_WORKSPACE_DELIVERY.md",
|
||||
"limits": [
|
||||
"Two real application kernels in independent PHP processes, intercepted CLI bridge; no TCP8085 or pilot activation.",
|
||||
"The initial receiver harness inherited SGC cache metadata; isolated environment corrected and same draft/key resumed without replaying an accepted confirmation.",
|
||||
"20 unique selected cases; earlier19-case summary preserved, duplicate executions not added.",
|
||||
"Final schema-readiness and frozen actor/context audit metadata covered by directed SQLite checks; integrated commits not repeated.",
|
||||
"No full product bundle build, visual review, sustained load, disaster recovery or deployment capacity claim.",
|
||||
"Exact source migration/SQL privileges, code installation, approved mappings/principal/secret and activation still require their authorised rollout."
|
||||
],
|
||||
"initial_proof_preserved": {
|
||||
"file": "docs/proofs/sgc-invoice-workspace-20261110.json",
|
||||
"sha256": "d1d8c20867604171dbd8f3926916c4df43c4571717c673d94d5aeaa66860c7dd"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"database": "sgf_tempo_dev",
|
||||
"port": 55432,
|
||||
"migrations": [
|
||||
{
|
||||
"file": "database/migrations/2026_11_09_000001_create_sgc_integration_tables.php",
|
||||
"batch": 18
|
||||
},
|
||||
{
|
||||
"file": "database/migrations/2026_11_09_000002_create_sgc_analytics_tables.php",
|
||||
"batch": 19
|
||||
}
|
||||
],
|
||||
"calendar": {
|
||||
"start": "2026-01-01",
|
||||
"end": "2035-12-31",
|
||||
"rows": 3652,
|
||||
"first_inserted": 3652,
|
||||
"repeated_inserted": 0,
|
||||
"official_holidays_validated": false
|
||||
},
|
||||
"unit_tests": {
|
||||
"tests": 4,
|
||||
"assertions": 17,
|
||||
"passed": true,
|
||||
"database_connections": 0
|
||||
},
|
||||
"preservation": {
|
||||
"preexisting_tables": 86,
|
||||
"all_rows_identical": true,
|
||||
"snapshot_sha256": "700dbf44140801dd93b194cd8e8c74e7822a5aef1494036a2ccd8f851c64face",
|
||||
"private_backup_sha256": "3592c2b865a9671f2df51622a4c9cd2f402e888b2b823278eac64be959ac64fe",
|
||||
"data_cache_cleared": false,
|
||||
"existing_six_records_changed": false,
|
||||
"new_explicit_grants": false,
|
||||
"new_demo": false
|
||||
},
|
||||
"cache_commands": [
|
||||
"config:clear",
|
||||
"route:clear"
|
||||
],
|
||||
"endpoint": {
|
||||
"http_status": 404,
|
||||
"diagnostic_empty_json": true,
|
||||
"positive_invoice_test_completed": false,
|
||||
"payload_file_present": false,
|
||||
"routes_registered": false,
|
||||
"activated": false
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Console/Commands/PopulateDimTempo.php",
|
||||
"sha256": "9d03d0cbbc6b4d60605061b3726f02159b409b42f26853ce1b73b374a27ec581"
|
||||
},
|
||||
{
|
||||
"file": "app/Services/Sgc/CalendarDimension.php",
|
||||
"sha256": "51884e37b7adac68e85d9aa5596414787b3c3090ca09a37cce845046d6880db9"
|
||||
},
|
||||
{
|
||||
"file": "database/migrations/2026_11_09_000001_create_sgc_integration_tables.php",
|
||||
"sha256": "228ceea51d000a5823b8952e7ff90a3a83c1cca266bf24e220ae80427679df05"
|
||||
},
|
||||
{
|
||||
"file": "database/migrations/2026_11_09_000002_create_sgc_analytics_tables.php",
|
||||
"sha256": "1ea905e3fd3db41d0fdbee85f4ec0db1170af9e01656460e90b00eeae0e1d25f"
|
||||
},
|
||||
{
|
||||
"file": "tests/Unit/CalendarDimensionTest.php",
|
||||
"sha256": "a78cf6ea3057f317b215aa47ba1372b76a69156f57753b81f419bc7af95548aa"
|
||||
}
|
||||
],
|
||||
"report": "docs/SGC_PREPARATION_20261110.md",
|
||||
"deployment_validated": false
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"passed": true,
|
||||
"date": "2026-11-10",
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-205824-49693644\\accounting-report-boundaries.json",
|
||||
"sha256": "1005f1566f316bc68243934d98881bae7ecd9f29b98b4cd5db57d3f1099512b1",
|
||||
"checks": 5,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\accounting-reports-http-20261110.json",
|
||||
"sha256": "4c319e135af06efec59a7c2ee91e9bef922c9612d8c4d7c7212267c945e4a851",
|
||||
"checks": 19,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\accounting-reports-ui-20261110.json",
|
||||
"sha256": "4638512a8951522b9da1315a6353b383b49218cb7b9a39c3dbb9d47a9e509ecd",
|
||||
"checks": 14,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-205938-4a3c2c51\\accounting-reports-installation.json",
|
||||
"sha256": "4a637461e01d6a6854f7c948552d45572179d66afb39d0925c36160a2ba570dc",
|
||||
"checks": 0,
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Accounting/ComposedLedgerController.php",
|
||||
"sha256": "b96749981b0d4daa7861eab62c5de60c96c5ffa9c72183f88bb89e2d4f7bdf2b"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/AccountingMenuWorkspace.jsx",
|
||||
"sha256": "f07dbbf60dfc3c26e528b0845becc22f851e8b774e368c44f33285775e124ea2"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ComposedAccountingWorkspace.jsx",
|
||||
"sha256": "9288df122be42e436bb4aeffc3e84cc1687ba82ab4cab07754d27d507d0012ac"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/LedgerReportsWorkspace.jsx",
|
||||
"sha256": "312157b80599e0f4407520ec968460af9c31913f79365ef6efa9a243c98ba419"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ledger-report-view.js",
|
||||
"sha256": "54a1eb09ab4b451b4aa34d8b0c1ebc3d8cea91da4f242ea25a0c4b3bb1db79b4"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/app.jsx",
|
||||
"sha256": "93f6b46ecd17d3e80f31b63c3d6f9ac0c02e015876e9a4b114fabb6875310a23"
|
||||
}
|
||||
],
|
||||
"business_commands": 0,
|
||||
"new_grants": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"date": "2026-11-10",
|
||||
"scope": "SGF-BANK-RECONCILIATION-QA-v1",
|
||||
"checks": {
|
||||
"regression": 37,
|
||||
"boundaries": 11,
|
||||
"http": 28,
|
||||
"dom_http": 15,
|
||||
"report_http": 3
|
||||
},
|
||||
"concurrency": {
|
||||
"during_lock": 503,
|
||||
"after_release": 409,
|
||||
"duplicate_reviews": 0
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-192046-f2578deb\\bank-result.json",
|
||||
"sha256": "fbb32ea79f056648fb3abec481fefb9ae6d9e6f04c65fbab376af65bda0d1a04",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\bank-concurrency\\result.json",
|
||||
"sha256": "01ee8e63528ded2ae51bf93836cb236b772fca9bd52be2920bfa1ed290310747",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-192150-09f32ff0\\bank-boundaries.json",
|
||||
"sha256": "2c056b940aa20025ef69231ee61f02a5967bfe3c4b0032884bd3c9dc01044b56",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\bank-http-20261110.json",
|
||||
"sha256": "3c98024535d925ad32fec7c7cdba246367102f0b0d1e91249f50993ee77464b9",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\bank-dom-http-20261110.json",
|
||||
"sha256": "63a0fd91ce123c8a2bf50963bc950d31f709281c2ecb2b267e74eaa58285278e",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\bank-report-http-20261110.json",
|
||||
"sha256": "267b05f198d51c6bcbddff4b0e4fab72e99d3abc30974bc400b04e57de592e74",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-192840-498e9270\\bank-preservation.json",
|
||||
"sha256": "d48fd73347c3499275269657a6c4cfef986eeb441f763a50e48225a60c03adcd",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-192015-f8b4be42\\bank-setup.json",
|
||||
"sha256": "b7a90195403019cdc84c49cd0e61b5f3eb872ae0a92f5e2d58e8f260ac419e30",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-192538-3373509f\\bank-setup.json",
|
||||
"sha256": "5c845e3f20ef77748addb3a2b09dcbd27a40413285143bb33f1e92836fe06418",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Finance/BankReconciliation.php",
|
||||
"sha256": "5421141bcc6e15bda142687661774238c7203c85d0ef30696fd4d56dd5b9e328"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Finance/BankLedgerSource.php",
|
||||
"sha256": "f33779fa736aea7027d4cf449ba85c5982bfb565c75bbb2a477d7a2666820338"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Finance/Http/BankReconciliationController.php",
|
||||
"sha256": "896d710db108364263a1404d2aafdc52eff4d3b6efcbe3dbdbcca1978befffe4"
|
||||
},
|
||||
{
|
||||
"file": "database/sql/bank_reconciliation.sql",
|
||||
"sha256": "3c05a20fd46b3292017a2ab475be3418344de5a03271c4bf53d832bd97a40535"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/finance/bank.blade.php",
|
||||
"sha256": "6277db6224b71da394c8507c1d721fba6046a7d9ba9a5b564973018a7eac5fb3"
|
||||
},
|
||||
{
|
||||
"file": "resources/data/bank-statement-qa.csv",
|
||||
"sha256": "bd2b29a50f952c27c4df37ef1c2cca0cdc7f241fbfcf186c82aa49ce9834ffcb"
|
||||
},
|
||||
{
|
||||
"file": "public/sgf-bank.mjs",
|
||||
"sha256": "959214ad94bb5c29ffdaf1c8fd3e59bf8718837d4c1fe9bea52d3b04c261a80b"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Context/ModuleNavigation.php",
|
||||
"sha256": "37f201571f8faf1819fa02876697604b32115754c488b71caef8e14c92275438"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
||||
"sha256": "25e0b9c00e604e9406e2c145f8e21e06a57820ff8faa73f735c7421f52569560"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/App.jsx",
|
||||
"sha256": "ce55c8b035c256358e2d7b3f9018ff0dbf7a7bc4df2300e587a456793baf43af"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkspaceNavigation.jsx",
|
||||
"sha256": "4f118ed4ed9ea40931084ea41bf2fffb0454c0904aeac83bcb4c92dd0f2cebed"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "bb0606a61a4d771a604a0fc9d93b24d6f93b59a55becc3eca1fcc4da35b6c573"
|
||||
}
|
||||
],
|
||||
"source_distinction": {
|
||||
"regression": "simulated provider injected only in CLI harness",
|
||||
"8085_http": "actual two native QA ledger lines",
|
||||
"production_reader_fallback": false
|
||||
},
|
||||
"statements_retained": 1,
|
||||
"statement_rows_retained": 2,
|
||||
"events_retained": 7,
|
||||
"journals_preserved": 27,
|
||||
"new_journals": 0,
|
||||
"prior_iva_versions_preserved": 4,
|
||||
"prior_rule_events_preserved": 4,
|
||||
"prior_calculations_preserved": 2,
|
||||
"grants_per_existing_qa_book": 8,
|
||||
"new_demo": false,
|
||||
"sgc_dependency": false,
|
||||
"real_bank_operations": false,
|
||||
"account_classification_changed": false,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"acceptance": false
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"contract_sha256": "2d809fe09bb83bb0da37d37b0528895fb050cef0376435e95bc45119dfa7d091",
|
||||
"new_demo": false,
|
||||
"business_commands": 0,
|
||||
"cache_cleared": false,
|
||||
"passed": true,
|
||||
"proofs": [
|
||||
{
|
||||
"kind": "register_regression",
|
||||
"sha256": "e4990e8cb95a91effeaa1a839ada0f8be73636d08af4559f705b9730de4a80a3",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-174502-e0b30bb6/billing-register-result.json"
|
||||
},
|
||||
{
|
||||
"kind": "register_http",
|
||||
"sha256": "89e8ac8e05c1af1c73e65a1f46628492edb898562d1d87afe72194472eaae1db",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/billing-register-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"kind": "cash_rights_readonly",
|
||||
"sha256": "21dc9aaf95c2e93e14f02543cad94ef783cd118b78be4c487cf4beebe6a504f9",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-174122-55d06675/cash-rights-readonly.json"
|
||||
}
|
||||
],
|
||||
"date": "2026-11-10",
|
||||
"new_schema": 0,
|
||||
"deployment_capacity_validated": false,
|
||||
"cash_approval_pending": "docs/integration/sgf-cash-access-proposal.json",
|
||||
"cash_implemented": false,
|
||||
"new_rights": 0,
|
||||
"browser_visual_review": false,
|
||||
"source_hashes": {
|
||||
"app/Modules/Services/BillingRegister.php": "115e7832b63e5c29be716140629845137d951da7790421832e1ab4058fb468cc",
|
||||
"resources/js/BillingRegisterWorkspace.jsx": "9ab8d036c9e6d20c588427f5a8c44677810e9713722baea908b8f6b76c8b79f9",
|
||||
"routes/web.php": "18898252f2ffe8e9be20076d57bc3e3514df7d31eebc10ee64a697d7ff7bc696",
|
||||
"resources/js/BillingMenuWorkspace.jsx": "7265e433bc2bf4b15674fc3a44892dfb288b4c2a2fe1db761f4ebd3c988da65b",
|
||||
"app/Modules/Services/ServiceDocuments.php": "816a85be48b05043f41f9c7d5f842a3fa139b21aaedf9c944d811f74be6f6208",
|
||||
"app/Modules/Services/Http/ServiceDocumentsController.php": "f8fa96e837b586468ad6a63d83dd942bb59a474ffd1bf905942d7712cdaff2e7"
|
||||
},
|
||||
"published": false,
|
||||
"installation": "cc50a276c10c"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"cash_closed_minor": 95000,
|
||||
"public_grants": 0,
|
||||
"installation": "cc50a276c10c",
|
||||
"source_hashes": {
|
||||
"app/Modules/Finance/CashWorkspace.php": "bb65060461cea3a844cf523733644cdd630f35ba02c82aeed961821ec5970800",
|
||||
"packages/general-ledger/src/PayableJournal.php": "100feec93b22d0f1b33f659445e8ef1bea73a39b0c1fb5e4d93d70fce5d97b01",
|
||||
"app/Modules/Accounting/ComposedLedger.php": "2e4dfa133831c78514e1010d373db905b892c315c455ba53b997edd514cac035",
|
||||
"packages/general-ledger/src/LedgerSales.php": "e339bd430e9632ba0db590a34f87742d7e7fa65e030e336a5b8340a6ca9e6c18",
|
||||
"app/Modules/Accounting/CashLedgerSource.php": "3a46162f0a62363dd4015f0047a5bff95e8aebd8dd3007fc705daaf58c10684b",
|
||||
"app/Modules/Finance/Http/CashController.php": "982c161f3ef7314a9671f848f0da2aefb27841e40003ef47102d0d956c08cd78",
|
||||
"public/sgf-cash.mjs": "24d8b9c20939dc9695aa18514ee9a94765ad486b0aab8fb4f567e7a3923d290f"
|
||||
},
|
||||
"cash_right_names": 4,
|
||||
"cash_grants_per_qa_book": 8,
|
||||
"cache_cleared": false,
|
||||
"journal_total": 27,
|
||||
"new_profiles": 0,
|
||||
"source_facts": 38,
|
||||
"deployment_capacity_validated": false,
|
||||
"passed": true,
|
||||
"proofs": [
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-175251-07723b42/cash-result.json",
|
||||
"sha256": "4a491e7b992a1e0a1239f255a08e8760dc292a40f6ac5f7e322445c92cb7ea03",
|
||||
"kind": "cash_regression"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/cash-concurrency/result.json",
|
||||
"sha256": "18940a1a72dc1516ced3baf3225a24a24d555ed5517a36515b1bf2a01e47a07e",
|
||||
"kind": "cash_concurrency"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-175845-a7f3eb7b/cash-read-boundaries.json",
|
||||
"sha256": "68b45f74dab3d11d03d2b74713105cfcab2dc7f01c3007eea12838bce20747f1",
|
||||
"kind": "cash_read_boundaries"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/cash-http-20261110.json",
|
||||
"sha256": "412f1f0463e15cc3bb3a4f8d6ae9af9655ed309f033e646e435e44d99368d64f",
|
||||
"kind": "cash_http"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/cash-dom-http-20261110.json",
|
||||
"sha256": "c2008bdb29929e5a0a4db1fe8c51eda8886fbd7b248c54127d3665e23daa810d",
|
||||
"kind": "cash_dom_http"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-180324-fe0a46fd/period-cash-result.json",
|
||||
"sha256": "148761ae3b369f6eaea88ce1ca71ea94c933ce7dabaed9d421b920a3ab418376",
|
||||
"kind": "cash_period"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-180329-e03178dc/cash-preservation.json",
|
||||
"sha256": "427f59a867549b2badd8d76eb5c8d562223a7ab9ee97712515e14a4c5aa4c39c",
|
||||
"kind": "cash_preservation"
|
||||
}
|
||||
],
|
||||
"previous_journals_compared_unchanged": 25,
|
||||
"published": false,
|
||||
"cash_audit_events": 9,
|
||||
"real_money": false,
|
||||
"date": "2026-11-10",
|
||||
"entry": "http://127.0.0.1:8085/finance/cash",
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"sgc_required": false,
|
||||
"qa_period_open": true,
|
||||
"pending_facts": 0
|
||||
}
|
||||
@@ -0,0 +1,380 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"contract_sha256": "147ae1653b028c0a09f296b9c87799de25ee9bad0fcf35a35840bfb6df6bd447",
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"sgc_dependency": false,
|
||||
"modules": [
|
||||
{
|
||||
"id": "commercial",
|
||||
"label": "Comercial",
|
||||
"features": [
|
||||
"Clientes e serviços com associação explícita",
|
||||
"Rascunho, revisão e cálculo",
|
||||
"Documento emitido de teste e PDF",
|
||||
"Continuação para recebível sem duplicação"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/ServiceWorkflow.php",
|
||||
"present": true,
|
||||
"sha256": "6f5c8af14412427134f1c40bda9215de68b3a66d46ed2287b59895f68b929179"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/ServiceInvoicing.php",
|
||||
"present": true,
|
||||
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ServicesWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "c170b195ccd78aa74f283a91b0b4f4cd93aea4677e3aaefe0b50af46f7e31669"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ServiceInvoiceWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "347869a371084ae91bd7d651334f67f16369495263f28b8b8348bc442f7d6534"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/invoice-test-results.json",
|
||||
"present": true,
|
||||
"sha256": "fd04a58727ffddf1c62ac184d7834b81228dce2abb5b0c1e397505df6a45237c",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Compor estruturas e guardas sintéticas na instalação única",
|
||||
"Conservar o documento e identidade entre Comercial e Financeiro",
|
||||
"Provar o percurso por interface na mesma empresa/unidade de apresentação"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "purchasing",
|
||||
"label": "Compras",
|
||||
"features": [
|
||||
"Fornecedores e revisão distinta",
|
||||
"Requisição até adjudicação e ordem",
|
||||
"Recepção, documento e stock único",
|
||||
"Factura conferida e obrigação reconhecida"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Purchasing/ReceiptRuntime.php",
|
||||
"present": true,
|
||||
"sha256": "a8f3aac4b65ceea15ac7a8e8e34510d689b09fab8c2f689c466eb90d5e8632dc"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/RequestController.php",
|
||||
"present": true,
|
||||
"sha256": "c5c2b78866be7f0e1c8ba09c1af538cefcfbafbea81197833b50821bba0fcbca"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/InvoiceController.php",
|
||||
"present": true,
|
||||
"sha256": "85eb46ca7e65c60bed190e592a134eb48db5762c0a90b8cd4c9d6fbd81198ba4"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/ObligationController.php",
|
||||
"present": true,
|
||||
"sha256": "347e629306d6c1f4873afac547d13fae8ade7b268906d1312a64e7eb6998e701"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"present": true,
|
||||
"sha256": "3b63f8653e8dbb089dfdd8f389e271c022a070d5a67a9f9d4585ce84438070cc",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Reutilizar o percurso aceite sem o reexecutar por rotina",
|
||||
"Ligar a continuação financeira e contabilística da mesma origem",
|
||||
"Conservar a composição local sem serviço SGC obrigatório"
|
||||
],
|
||||
"accepted_component_journey": true
|
||||
},
|
||||
{
|
||||
"id": "stock",
|
||||
"label": "Stock",
|
||||
"features": [
|
||||
"Artigos, armazéns e saldos físicos",
|
||||
"Entradas, saídas e origem autorizada",
|
||||
"Transferência e conferência de destino",
|
||||
"Contagens, ajustamentos e devoluções",
|
||||
"Movimentos e relatórios por período"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Inventory/StockReadController.php",
|
||||
"present": true,
|
||||
"sha256": "fd02da1a69f76bf1412f86f43095a0a476de49fbb7d2676a51fe3b29ec66e298"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Inventory/CompositionStockRead.php",
|
||||
"present": true,
|
||||
"sha256": "01c558457df290879bdf6c7f8de8cd9efccad81b940731f0aaf2489cf02bfcf7"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Inventory/StockPeriodReport.php",
|
||||
"present": true,
|
||||
"sha256": "d491541c6c60bc0c661dc442b8db8ce2e757f1d63dfc4982a3631f820cfb7a06"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Workshop/WorkshopStock.php",
|
||||
"present": true,
|
||||
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Inventory/StockOperationsController.php",
|
||||
"present": true,
|
||||
"sha256": "34d6c7be4787f4f18ca2a7aa322f6f33dfb281e22336599234c93c655ab4eebf"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/stock-operations-workspace.blade.php",
|
||||
"present": true,
|
||||
"sha256": "5db67c2d23e5557548c38c82a0d7f6e373651849727b2237dcd73f620309c25a"
|
||||
},
|
||||
{
|
||||
"file": "public/stock-operations-workspace.mjs",
|
||||
"present": true,
|
||||
"sha256": "56734499e8dd89da293c2edadd0d0e10ac6d06b39f0365e5ae29a8d14e9176d8"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/stock-period-report-20261103.json",
|
||||
"present": true,
|
||||
"sha256": "0ab25af6ffbff7d8ecb651df833771b082bf92d52f97eca4278fcac3fd5ea53b",
|
||||
"not_reexecuted": true
|
||||
},
|
||||
{
|
||||
"file": "docs/proofs/sgf-stock-operations-20261110.json",
|
||||
"present": true,
|
||||
"sha256": "1d241fcfb81fcf6c1b374f9fc89c1f2130b17eee1314f06b4b8e4b59c476fc08",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Instalar a interface de saída/transferência já implementada após decisão sobre os dois direitos propostos e mapeamentos; flag continua desligada",
|
||||
"Concluir trânsito/recepção e divergências onde o percurso ainda é só definido",
|
||||
"Conservar reservas, unidades e ausência de saldo negativo",
|
||||
"Concluir interfaces de contagens/ajustamentos/devoluções e selecção de equipamento, preservando workflows próprios"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "workshop",
|
||||
"label": "Oficinas",
|
||||
"features": [
|
||||
"Ordem e autorização",
|
||||
"Apontamentos e revisão distinta",
|
||||
"Material consumido ligado ao movimento físico",
|
||||
"Custo directo/industrial e correcção",
|
||||
"Continuação comercial por documento de origem"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Workshop/WorkshopStock.php",
|
||||
"present": true,
|
||||
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkshopWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "acc01d934dd11f783df82b40a6ece0905a67b0d26ff0bdfc3b18c11a027d66bb"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/DirectCostsWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "dcaf72fe36d80e16bab8e962f939168650336d1450fc3eb01693acb7ef7e0743"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/IndustrialCostsWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "51a3307fa8b2526efa12d8a16fee613bdfe141d02bd6e5af4535d581ed69c6d0"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkshopBillingWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "99ea0b2c0941db0a42ff1f3833225430a73efb6933b3f88a8be4481f902ac571"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/workshop-stock-closure-20261102.json",
|
||||
"present": true,
|
||||
"sha256": "261d5502f6905d53ef8046e0e900c9bee159c8c9d7e1bae4fddd8ec698313bf7",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Compor na mesma instalação sem perder as aprovações existentes",
|
||||
"Completar o percurso oficina → stock → custo → Comercial/Contabilidade",
|
||||
"Conservar a distinção entre apontamento e movimento físico"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance",
|
||||
"label": "Financeiro",
|
||||
"features": [
|
||||
"Obrigações a fornecedores",
|
||||
"Recebíveis de clientes",
|
||||
"Liquidação/afectação e reversão sintéticas",
|
||||
"Posição financeira e comprovativos por origem"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/ServiceReceivables.php",
|
||||
"present": true,
|
||||
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Purchasing/SupplierPayables.php",
|
||||
"present": true,
|
||||
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ServiceReceivablesWorkspace.jsx",
|
||||
"present": true,
|
||||
"sha256": "f5207e5f16a4477034185d0cdeb79adc8e462cbf04d5e3fd7e633b8a5433b0ba"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/supplier-settlements.json",
|
||||
"present": true,
|
||||
"sha256": "b1bce9218f99ea2d8c780022ad385e169c7acc5778ac6950236eef0630f77ad0",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [
|
||||
"pa_obligations",
|
||||
"pa_access",
|
||||
"ps_payments"
|
||||
],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Unificar as origens autorizadas sem copiar dívida ou saldos",
|
||||
"Compor a tesouraria sintética e os relatórios na mesma empresa/unidade",
|
||||
"Conservar vencimento desconhecido e histórico imutável"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "accounting",
|
||||
"label": "Contabilidade",
|
||||
"features": [
|
||||
"Plano e classificação",
|
||||
"Diário com preparação/revisão distintas",
|
||||
"Razão e balancete",
|
||||
"Estorno/correcção e conferência de período",
|
||||
"Fecho sintético com rastreabilidade de origens"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Accounting/GeneralLedger.php",
|
||||
"present": true,
|
||||
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Accounting/GeneralLedgerController.php",
|
||||
"present": true,
|
||||
"sha256": "8c83538a5df4625bb3a15c81e3bf618d12187eca77da5f6e73dd1b4b781c64ce"
|
||||
},
|
||||
{
|
||||
"file": "packages/general-ledger/src/LedgerSchema.php",
|
||||
"present": true,
|
||||
"sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb"
|
||||
}
|
||||
],
|
||||
"existing_evidence": [
|
||||
{
|
||||
"file": "docs/proofs/purchasing-completion-matrix-final-20261104.json",
|
||||
"present": true,
|
||||
"sha256": "94cb37698f294c38df9b94a5535ba4b9ac63907f94dab1e7f951a3bb27623083",
|
||||
"not_reexecuted": true
|
||||
}
|
||||
],
|
||||
"missing_host_tables": [
|
||||
"gl_accounts",
|
||||
"gl_periods",
|
||||
"gl_journals",
|
||||
"gl_lines"
|
||||
],
|
||||
"integrated_release_verified": false,
|
||||
"client_presentable": false,
|
||||
"remaining": [
|
||||
"Compor diário e relatórios reais do núcleo na instalação única",
|
||||
"Ligar Compras/Comercial/custos sem gerar lançamentos automáticos",
|
||||
"Substituir os catálogos de relatórios por consultas disponíveis e verificadas"
|
||||
]
|
||||
}
|
||||
],
|
||||
"release_gates": [
|
||||
{
|
||||
"id": "single_installation",
|
||||
"criterion": "Os seis módulos operam no mesmo endereço e empresa/unidade, sem mudar de demonstração",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "functional_modules",
|
||||
"criterion": "Cada funcionalidade obrigatória tem ecrã/comando/consulta executável; menus e fontes isoladas não bastam",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "cross_module_flows",
|
||||
"criterion": "Os documentos atravessam as fronteiras mantendo origem, versão, autoridade e efeito único",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "access_isolation",
|
||||
"criterion": "Perfis explícitos e recusas de empresa/unidade/módulo/permissão verificadas",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "presentation",
|
||||
"criterion": "Percurso de apresentação coerente, dados fictícios identificados, linguagem e navegação revistas",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "operations",
|
||||
"criterion": "Arranque e recuperação da instalação entregues e ensaiados, sem depender do SGC",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "commercial_honesty",
|
||||
"criterion": "Documentos de teste não são emissão fiscal; capacidade de implantação exige prova própria",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "preservation",
|
||||
"criterion": "Seis registos, cache, dados aprovados e trabalho alheio preservados",
|
||||
"passed": false
|
||||
}
|
||||
],
|
||||
"client_presentable": false,
|
||||
"limits": [
|
||||
"Host-table footprint is a minimum projection, not a full migration/dependency validation.",
|
||||
"Native purchasing/stock tables live in their existing separate native book; this scan does not call that missing.",
|
||||
"Source/evidence presence does not mean a feature is integrated, visually accepted or deployment-ready."
|
||||
],
|
||||
"database_writes": 0,
|
||||
"application_bootstraps": 0,
|
||||
"cache_cleared": false,
|
||||
"new_demo": false,
|
||||
"new_rights": false
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"date": "2026-11-10",
|
||||
"scope": "SGF-FINANCIAL-INDICATORS-QA-v1",
|
||||
"checks": {
|
||||
"regression": 41,
|
||||
"boundaries": 12,
|
||||
"http": 29,
|
||||
"dom_http": 16
|
||||
},
|
||||
"concurrency": {
|
||||
"during_lock": 503,
|
||||
"after_release": 409,
|
||||
"duplicate_reviews": 0
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-193838-60b5bbb2\\analysis-result.json",
|
||||
"sha256": "1de78fbd0cbed88a17606000c718ee2b9b283f3a128ed384cf8b7961c8230b41",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\analysis-concurrency\\result.json",
|
||||
"sha256": "28726d58f71957875738a93739d17fd8271295161ad9d983229084c13f12f517",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-193954-bd861757\\analysis-boundaries.json",
|
||||
"sha256": "7c7cb82a2d1d702cad3c4e3c381515eb5b06f6658adb928c7ad3fd3134a3d875",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\analysis-http-20261110.json",
|
||||
"sha256": "ffe1600fd0d43987531041dd6a6b7abd3a71f652e5c10aa3115942661116891f",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\analysis-dom-http-20261110.json",
|
||||
"sha256": "564917db91aff0327e46d3367643afe1551dbf432dffb4daa9c5c06493956bfb",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-194532-f7d97924\\analysis-preservation.json",
|
||||
"sha256": "9a7c439832d0de3af45bac1ed6e53bc048fe2e50b7a0f242a18721b246cdb83a",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-193836-0b408b46\\analysis-setup.json",
|
||||
"sha256": "5f758ddf82a21117f531bbf7bdba686e817eb1d588723c9bc03d64395445ecc2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-194340-de1f0d4f\\analysis-setup.json",
|
||||
"sha256": "fda2b837bdfc8d8026632afaed1476542747e6c07f53f8ce5e8505e6eae9762c",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Finance/FinancialIndicators.php",
|
||||
"sha256": "9785a801c5fb13b34770bdd05c828f5e924058eb872a7b33bc1db139a3024d10"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Finance/FinancialIndicatorSource.php",
|
||||
"sha256": "72039264cbb25ae2eaa5eaa4af488aabf7061a4a298c09490b8957b4ade55731"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Finance/Http/FinancialIndicatorsController.php",
|
||||
"sha256": "5245064e40b884e432afa2fd26d45fddccebf6963ef3366f585b93ee78f12cca"
|
||||
},
|
||||
{
|
||||
"file": "database/sql/financial_indicators.sql",
|
||||
"sha256": "733cd4aa90911b1e6f5de4562eb21720d5abcc829fd8d7ba91b18a1ddfd8cfbc"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/finance/indicators.blade.php",
|
||||
"sha256": "32e02d53eb00a01eb463b26cd346a387f6edae5fe70e235276047e8d529beec5"
|
||||
},
|
||||
{
|
||||
"file": "public/sgf-indicators.mjs",
|
||||
"sha256": "62442edc14da534e0166cc65074389e74cc67246cd5922994628644fd900cbb9"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Context/ModuleNavigation.php",
|
||||
"sha256": "3cfbb05e70405cf0e5086e952b0760d3fae2d068eea0802b27f8a8c8f0258753"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
||||
"sha256": "a5b4bb3a8ba910072121c539bdf547fe89a0b6024764237e0141d222b4032000"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/App.jsx",
|
||||
"sha256": "2caac918a6e5c91608b2649a1ad8b1b3e7f47bf8c54e8eac0de7908fe2c20270"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkspaceNavigation.jsx",
|
||||
"sha256": "1e16e4f2b9e44aece2f77c3ea4bb20147d29aa99cea4cdd10c06fe6469773f0f"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "d28dd8d20ea00401b1d86003dc0b05e24eb156bb0896064467ec177a6e938717"
|
||||
}
|
||||
],
|
||||
"source_distinction": {
|
||||
"regression": "simulated provider injected only in CLI harness",
|
||||
"8085_http": "actual composed cash and ledger sources",
|
||||
"production_reader_fallback": false
|
||||
},
|
||||
"criteria_events_retained": 4,
|
||||
"results_retained": 2,
|
||||
"journals_preserved": 27,
|
||||
"new_journals": 0,
|
||||
"prior_iva_versions_preserved": 4,
|
||||
"prior_rule_events_preserved": 4,
|
||||
"prior_calculations_preserved": 2,
|
||||
"prior_bank_events_preserved": 7,
|
||||
"grants_per_existing_qa_book": 7,
|
||||
"new_demo": false,
|
||||
"sgc_dependency": false,
|
||||
"real_company_criteria": false,
|
||||
"payment_recommendation": false,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"acceptance": false
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"date": "2026-11-10",
|
||||
"port": 8085,
|
||||
"checks": {
|
||||
"regression": 17,
|
||||
"http": 10,
|
||||
"render": 7,
|
||||
"context_lifecycle": 3,
|
||||
"entry_http": 3
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-182835-4be44cc1\\fiscal-coverage-result.json",
|
||||
"sha256": "2396a4ae9931e5c0cd4da6489966bed0db4145d22ba03abaa891321eaaa7631d",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-coverage-http-20261110.json",
|
||||
"sha256": "40133eee3d43307aaad3ebbf5ce455b9c214f099c81f51fe3f21db4c06587931",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-coverage-ui-20261110.json",
|
||||
"sha256": "03c9c888fd3d50ba16db3ffd32bd99cac8ab7eb75c8d695e4bd8e2ef74859953",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-context-ui-20261110.json",
|
||||
"sha256": "c3a6f368e68acbc213e73c0e4a94fe323187ce9fa3be0a274c2e5ae0525c86fb",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-entry-http-20261110.json",
|
||||
"sha256": "55962f9e6779447ce5f2ac7bc0af3187bb7a6a61e216edfff99a5c02f4cae383",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-183004-13ce4bbf\\fiscal-coverage-preservation.json",
|
||||
"sha256": "ffdc500507689ebfb2a6f7ef1d12d54168bfe0be084ee3ec434c1587f1623af3",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalCoverage.php",
|
||||
"sha256": "239c23697dcfb306fddfb1bc9b92340cfcd5f5033916bdb11f611bf23bad0eac"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/ServiceFiscal.php",
|
||||
"sha256": "754d30fbe2f3c2c0e576d445a96449f54f9be93f2ce10858bbd31a228569d942"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Installation/PresentationEntry.php",
|
||||
"sha256": "8eac6134b50fb1c69f2a3c585d5669f005876b19fef1a69bd343b096f46d321f"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/FiscalCoverage.jsx",
|
||||
"sha256": "31d2c451dc94a617796a692934833e0f0a25dba186fa5ac6bbb825f8c917f61b"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ServiceFiscalWorkspace.jsx",
|
||||
"sha256": "55dd0f6e8eee3a767f6c1c6df6cb22994d0fcb30ccd6af681afc140a84b67955"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/App.jsx",
|
||||
"sha256": "9504145b4881066ac4e3e4054222c27b6f004466a4eed23052a991ba4674849c"
|
||||
}
|
||||
],
|
||||
"journals_preserved": 27,
|
||||
"new_rights": 0,
|
||||
"new_schema": 0,
|
||||
"new_demo": false,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"fiscal_engines_completed": false,
|
||||
"legal_activation": false,
|
||||
"deployment_validated": false,
|
||||
"acceptance": false
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"version": "SGF-FISCAL-OBLIGATIONS-QA-v1",
|
||||
"passed": true,
|
||||
"target": "existing8085",
|
||||
"functional_contract_checks": 118,
|
||||
"preservation_acl_checks": 61,
|
||||
"new_right_names": 3,
|
||||
"qa_grants_per_book": 7,
|
||||
"total_qa_grants": 14,
|
||||
"administrative_commands_8085": 4,
|
||||
"new_financial_effects": 0,
|
||||
"map_recreated_8085": false,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"evidence": {
|
||||
"regression": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-223845-a69d8003/fiscal-obligations-result.json",
|
||||
"boundaries": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-224117-d4f04edc/fiscal-obligations-boundaries.json",
|
||||
"ui": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/fiscal-obligations-ui-20261110.json",
|
||||
"http": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/fiscal-obligations-http-20261110.json",
|
||||
"entry": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/fiscal-obligations-entry-http-20261110.json",
|
||||
"concurrency": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/fo-concurrency-1794343303801/result.json",
|
||||
"source_preparation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-223835-5a7feadd/fiscal-obligations-source.json",
|
||||
"regression_setup": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-223658-e86fe229/fiscal-obligations-setup.json",
|
||||
"selected_setup": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-224409-7a20bedf/fiscal-obligations-setup.json",
|
||||
"installation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-224431-d7f8536d/fiscal-obligations-installation.json",
|
||||
"preservation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-224624-16075a70/fiscal-obligations-preservation.json"
|
||||
},
|
||||
"evidence_sha256": {
|
||||
"regression": "ca964925cba373b62e77f776d21acecbdd7868f66e7b50e5770fa142cfece6a7",
|
||||
"boundaries": "cbc0cb8ca3c6ac977c1bca23c430823bcdf4f84efcf273c2e6f41bb9fc071637",
|
||||
"ui": "d46b52080dcf9bd6ad9cf18cbb0a5509c3177011bed690c97e0a0551bb4ec94d",
|
||||
"http": "6d10dd721f27fa31a685ae34b200fd13ef6804c457963f531e3e93927735fc44",
|
||||
"entry": "2c6ce36ef463958dd6deb9b433acf0fca7a422406af38d1405c0fe70cd67e837",
|
||||
"concurrency": "8350033bf93aa03c8db9611dd5d6352949ba0640b0c4322e973aba209a971eb1",
|
||||
"source_preparation": "2b604fbf1993ca3a5fc2efa27076a0804b198dc1c95a85833931f42f5e7bc252",
|
||||
"regression_setup": "b50a48a76ea010ca9a5fa3b6a59d66eebc735b28d9282cdefb4d41ea596b19e2",
|
||||
"selected_setup": "a0551eeea96192d7767928148b1a4e46dbc8a6905c9ed490cbf33eeb51b3fbfc",
|
||||
"installation": "d7e6ac094bdd408dc055e67d636be9f4a59a4fdc72a9d1f55ab31f3265d82940",
|
||||
"preservation": "2ca506fd1f47fcd501ce3a7de5e45c8daf72c25da5b6dc25ff8b7b854cd6cfe8"
|
||||
},
|
||||
"sources": [
|
||||
"app/Modules/Services/FiscalObligations.php",
|
||||
"app/Modules/Services/Http/FiscalObligationsController.php",
|
||||
"resources/js/FiscalObligationsWorkspace.jsx",
|
||||
"resources/js/fiscal-obligations-view.js",
|
||||
"database/sql/fiscal_obligations.sql",
|
||||
"config/fiscal_obligations.php"
|
||||
],
|
||||
"source_sha256": {
|
||||
"app/Modules/Services/FiscalObligations.php": "bcf24717cf5828fed440b8e86f29a5ed4d325d392000240b224d155954170d1d",
|
||||
"app/Modules/Services/Http/FiscalObligationsController.php": "95b03b505e588333206766b862d0f0cff006b1af1a3dc0466370ac6a7518e097",
|
||||
"resources/js/FiscalObligationsWorkspace.jsx": "cf50c8eebbd9aafc985229740cc724fc8c66d176454875f0e4f346797d531fc9",
|
||||
"resources/js/fiscal-obligations-view.js": "d3c1aafddac987de0a8e432746533da8832c140474f9d9d49055020f7c9e67dd",
|
||||
"database/sql/fiscal_obligations.sql": "c68988342ca1ed5817485355844c2f502f5c2ca12954461c1555d5c5f2abf7fe",
|
||||
"config/fiscal_obligations.php": "39fc036c111c443ee2bc8fac28d94dde055083b2abfb955d5aa9299b90b26cdb"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"date": "2026-11-10",
|
||||
"scope": "SGF-FISCAL-RULES-COMMON-QA-v1",
|
||||
"checks": {
|
||||
"regression": 39,
|
||||
"parity": 8,
|
||||
"boundaries": 14,
|
||||
"http": 24,
|
||||
"dom_http": 14,
|
||||
"input": 3
|
||||
},
|
||||
"concurrency": {
|
||||
"during_lock": 503,
|
||||
"after_release": 409,
|
||||
"duplicate_reviews": 0
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-190138-e1c57bb4\\fiscal-rules-result.json",
|
||||
"sha256": "4963a0f49425abbc56e25acc4e7cdd669e4315b30b6a8c76cbc37dc08b533a7a",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-190224-293fa949\\fiscal-expression-parity.json",
|
||||
"sha256": "1f460cf37e91c2d8cb8a9f682c703cfa323510e6a205733ff18e28f7a4300b00",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-190357-58ef4f30\\fiscal-rules-boundaries.json",
|
||||
"sha256": "e35560a6e6cdd93543dd860dc99f58384f730495868792f4a993f989322095c2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\fiscal-rules-concurrency\\result.json",
|
||||
"sha256": "399742d55c4690e8548efdd54c68007f71f24a03e99b9c0b951abb00844f5640",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-rules-http-20261110.json",
|
||||
"sha256": "20566cf071a545feaf1d18e1a3410855b8c104c1b13372efb47afdb69995b338",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\fiscal-rules-dom-http-20261110.json",
|
||||
"sha256": "c22899a91898c2d5f6c5cb3c3d36ee336b8a7e68723293c88a72b612c3112fb0",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-191041-6e45b82d\\fiscal-rules-input.json",
|
||||
"sha256": "5071ec0d3dc2a632f7acb567867631c2aacf5e303a0a430bf74c4fd1f287ea8f",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-191018-6b74a111\\fiscal-rules-preservation.json",
|
||||
"sha256": "f970a71f22d130c61d3c81863c03b746401991d2aab8ed0a3009a96501a2b602",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-190133-7a1e5e14\\fiscal-rules-setup.json",
|
||||
"sha256": "5f758ddf82a21117f531bbf7bdba686e817eb1d588723c9bc03d64395445ecc2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-190702-f19a4794\\fiscal-rules-setup.json",
|
||||
"sha256": "fda2b837bdfc8d8026632afaed1476542747e6c07f53f8ce5e8505e6eae9762c",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalRules.php",
|
||||
"sha256": "e7ead66818df2ba644b3b22d35707637ae05dcfcfbe28e57c0a3ed61b05180db"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalRuleExpression.php",
|
||||
"sha256": "108d8401c9c2bc85b3e5f663322c3d36c267afd8529b370e7e16c1d565a3daef"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/Http/FiscalRulesController.php",
|
||||
"sha256": "ad648825ec55b3bdb8eca038a01c5bd685b8b62b23f79bfd7771282506e1f66a"
|
||||
},
|
||||
{
|
||||
"file": "database/sql/fiscal_rules.sql",
|
||||
"sha256": "facb9ce8f7304d0c3df83cddaa548158cf72ff12c4d21c3ab0ccc002ae6fd8b4"
|
||||
},
|
||||
{
|
||||
"file": "public/sgf-fiscal-rules.mjs",
|
||||
"sha256": "a14a6d71d206b64445990a197e30387acb5882f1331ac13c2f283d7de0cb2477"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/fiscal/rules.blade.php",
|
||||
"sha256": "ffdf1049c52fd7ea5a3000dd42e8c567354d430e108dc95023eab1fd5ecccf84"
|
||||
},
|
||||
{
|
||||
"file": "resources/data/fiscal-rule-qa.json",
|
||||
"sha256": "a9273524d65cd002b0a109959e3f77e4cf41125f8d2e71769ceb5dbecdb20dec"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Context/ModuleNavigation.php",
|
||||
"sha256": "11b7b2cfc3eadbb7c077bc505e0c017987838d7a8fb3e2385c227a5d0a4b337d"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
||||
"sha256": "b567ae24e4209b42350010527e4bf2fb5b80732179116d959ac75800c6e55284"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/App.jsx",
|
||||
"sha256": "c75f8421f81eba4674092a0c79d30b0bfd47c07c3fd0d8ec231123a0a0f141eb"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkspaceNavigation.jsx",
|
||||
"sha256": "5c7dbf048d48b0e73c6f8f226d03ec35f5f3bcaa506f07fa38ed587cdf94f3e2"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "77047a48bd8284ff516cd0a9e05d0636daae59c586e89c2a3f104493e31fd625"
|
||||
}
|
||||
],
|
||||
"rule_events_retained": 4,
|
||||
"calculations_retained": 2,
|
||||
"prior_iva_versions_preserved": 4,
|
||||
"journals_preserved": 27,
|
||||
"new_journals": 0,
|
||||
"grants_per_existing_qa_book": 7,
|
||||
"new_demo": false,
|
||||
"sgc_dependency": false,
|
||||
"portal_runtime_dependency": false,
|
||||
"automatic_knowledge_import": false,
|
||||
"legal_activation": false,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"acceptance": false
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"passed": true,
|
||||
"date": "2026-11-11",
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"module": "human_resources",
|
||||
"autonomous": true,
|
||||
"new_profiles_both_existing_books": 6,
|
||||
"new_grants_both_existing_books": 22,
|
||||
"individual_commands_8085": 6,
|
||||
"directed_checks": 132,
|
||||
"preservation_checks": 71,
|
||||
"concurrency_observed": true,
|
||||
"new_journals": 0,
|
||||
"new_payments": 0,
|
||||
"new_debt": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"cache_cleared": false,
|
||||
"new_demo": false,
|
||||
"evidence": [
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-081138-a4e9dcaa/remunerations-result.json",
|
||||
"sha256": "9ac93a64316a4c7d8168e2977ddb2f4364ff9c49f6c80b9b6f070600e6cd2e4f",
|
||||
"checks": 40
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-081400-da22b428/hr-boundaries.json",
|
||||
"sha256": "38aae9abbe5fd0f82bea2e7f397ffc4ffc13eac0c3accf6ec877ec26e0c84a38",
|
||||
"checks": 23
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/hr-concurrency-1794377543991/result.json",
|
||||
"sha256": "c7993282e31433f9336433fac3fdda4d3e08fe25b30c92764577e8a6756b0a64",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/hr-prepared-ui-20261111.json",
|
||||
"sha256": "48480a08f3e06d1851897c206b9eb64209c7f826ad63d5c2647b23d178fe7dff",
|
||||
"checks": 16
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/hr-http-20261111.json",
|
||||
"sha256": "c109f83646ae5d17d4e6da687cadfd0cb58ec29ec816000af846f1fc0b09bc8b",
|
||||
"checks": 43
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-081436-73034977/hr-installation.json",
|
||||
"sha256": "3d7bd8501dd412250f726041bf26ebb76bcc33d049e082444e909bf4a28886f2",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-081711-a4de93ee/hr-preservation.json",
|
||||
"sha256": "a93ec450e1edd72efba43f26b35b59d5aee9828c4aabd1ee43dfa80440a0a8ad",
|
||||
"checks": 71
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-081103-75214c68/hr-profiles-setup.json",
|
||||
"sha256": "f2e6c90d80c710bdd0b9422894111676391dc0c8db9e217132095022754b410f",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-081104-76740a68/hr-profiles-setup.json",
|
||||
"sha256": "a1ed94fe30594cb925685ee10e260c13e0e7f4e2c00343d7fac1bf3b6fa88a4a",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-081937-32c95f30/hr-finalization.json",
|
||||
"sha256": "4f50520b195ad36fa6ff3423c3ae0453eed41c3f099cce768152f47e1f6af178",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/hr-final-entry-20261111.json",
|
||||
"sha256": "c86d294368c9032a37c9aad269c884d3d153fe15a0124e129375781be19290fb",
|
||||
"checks": 10
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"prepared": true,
|
||||
"functional_delivery_complete": false,
|
||||
"approved_new_access": false,
|
||||
"new_grants": 0,
|
||||
"new_profiles": 0,
|
||||
"installed_8085": false,
|
||||
"business_writes": 0,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"evidence": [
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-083950-2b7f6505/hr-personnel-access-readonly.json",
|
||||
"sha256": "b4bc3d273a5dcf9e13bad81105f0e3334aebc3f9f8a3c19cd790079d566d452d",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-083951-b86bcdeb/hr-personnel-access-readonly.json",
|
||||
"sha256": "b02dc9e3f2c35ec83b9c61d71a58f3aee49da5834b44a6b3cecec8a21fccda77",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-083927-46fc6776/hr-personnel-time-core.json",
|
||||
"sha256": "d11bd4745a72ecf293cb455143b491d201e0e47ce107da8c0bc31f00a8e5c850",
|
||||
"checks": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"preparation_checks_passed": true,
|
||||
"functional_delivery_complete": false,
|
||||
"installed_8085": false,
|
||||
"new_hr_access_authorized": false,
|
||||
"new_hr_grants": 0,
|
||||
"new_hr_profiles": 0,
|
||||
"cache_cleared": false,
|
||||
"visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"evidence": [
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/hr-prepared-ui-20261111.json",
|
||||
"sha256": "48480a08f3e06d1851897c206b9eb64209c7f826ad63d5c2647b23d178fe7dff",
|
||||
"checks": 16
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-075918-07b14258/hr-preauthorization.json",
|
||||
"sha256": "b3fcac09d3289815eb865b00e42d1b187a948d020c18d14b683abeca65b16660",
|
||||
"checks": 11
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-080054-f17dbd76/hr-preauthorization.json",
|
||||
"sha256": "b3fcac09d3289815eb865b00e42d1b187a948d020c18d14b683abeca65b16660",
|
||||
"checks": 11
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-080055-00cf324f/hr-preparation-preservation.json",
|
||||
"sha256": "7d1720fff55621043ff926aef42859eb2ea180faa40ed705b0a1af75bc807343",
|
||||
"checks": 65
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261111-075531-6cd6db05/remunerations-finance-retracted.json",
|
||||
"sha256": "6cead3dc86f89f972d4930598db2353e8d2951e385d479088864573cb4193e8b",
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-075530-6881ed14/remunerations-finance-retracted.json",
|
||||
"sha256": "16ba21a5255d368f9e86e9e9e5328017817a5f83028fb944d850a90296960d41",
|
||||
"checks": 0
|
||||
}
|
||||
],
|
||||
"earlier_pre_separation_proof": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261111-075420-9718f6f1/remunerations-result.json",
|
||||
"checks": 40,
|
||||
"only_pre_separation_core_evidence": true,
|
||||
"not_hr_integration_acceptance": true
|
||||
},
|
||||
"build_manifest": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/single-hr-prepared-final-build-20261111/manifest.json",
|
||||
"sha256": "096391f91f918deaeb7ed92dc3ba1745f75d2e9b884aed97b53629f8a69340fb"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"scope": "SGF-IVA-ASSESSMENT-FORM-QA-v1",
|
||||
"checks": {
|
||||
"regression": 38,
|
||||
"boundaries": 10,
|
||||
"http": 23,
|
||||
"dom_http": 14
|
||||
},
|
||||
"concurrency": {
|
||||
"during_lock": 503,
|
||||
"after_release": 409,
|
||||
"duplicate_reviews": 0
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-183923-8c78d580\\iva-result.json",
|
||||
"sha256": "7dc37c693d60f120a985042cea8e68d7ee2d48b4363abc71cb95a482c639a6d1",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\iva-concurrency-validated\\result.json",
|
||||
"sha256": "5ea7d314ad730ae6bf6f292f5ce39fe0b13c55aca9848c7861231db36b4b0029",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-184043-8652e74e\\iva-boundaries.json",
|
||||
"sha256": "236450fbd1c68c099ad41311257d675a3abc8218fd27faeb085b4ae7876a2760",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\iva-http-20261110.json",
|
||||
"sha256": "a11bcdee2a2d9c730e5b1e010dc254bb69360af55372bcb9ea664de21f3480b3",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\iva-dom-http-20261110.json",
|
||||
"sha256": "7cb4d77fea98a99b6c6840a5821f52620548dac422abd1d891b78e3696719d47",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-184725-50388df1\\iva-preservation.json",
|
||||
"sha256": "05eb1dfd476ce0071372f8b591c4f95f48967bc449b9333a909e0e4f9bd5133c",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-183618-ef69629b\\iva-setup.json",
|
||||
"sha256": "acad5d93fb12b8f5dc1c8dd1e2a275228b23fba004e9d086f58b595f344283a2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-184414-05608767\\iva-setup.json",
|
||||
"sha256": "a0f35dbfaf569b13bf7e4037e3af6ff5502e70ed08d6fd5a09832ce8e11d0e2b",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalAssessment.php",
|
||||
"sha256": "c2dbe192e6bba75f6fc4057bbb51c85bcf024a674cfeb7950ba239e700213128"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/Http/FiscalAssessmentController.php",
|
||||
"sha256": "425278110af20393e71de446f9b0ce41408352216249e5055de4165b075631e4"
|
||||
},
|
||||
{
|
||||
"file": "database/sql/fiscal_assessment.sql",
|
||||
"sha256": "a64a912822c54da9fa6efbcd24f430d8466f19dca82ef747fbd3847b8a68925e"
|
||||
},
|
||||
{
|
||||
"file": "public/sgf-iva.mjs",
|
||||
"sha256": "1d8c2a07f606799257c090ab2ddb52c309553a15009d6fb457dbbf4770c51ee6"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/fiscal/workspace.blade.php",
|
||||
"sha256": "bb86dd60e1d9b3aeab97d991fe54005bd0412beccdfa6119552493eb8b16df50"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Context/ModuleNavigation.php",
|
||||
"sha256": "7791ae9114d2cfd9b4c6603188b561fbadfe8d754f2f362d7cb6ae2408306617"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
||||
"sha256": "72a84a3924d1a78e0bbbaaf3f7f0f7f0e1e640227a1c1842eac74e3ec4c06a74"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/App.jsx",
|
||||
"sha256": "bf8dd43bbad1f96c0043b34307f2fb6959e16bf8ec6ebcccb9858462102736c0"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkspaceNavigation.jsx",
|
||||
"sha256": "6c84b50f37561fd79ce3404ba7d4e25f88d233cd84645151a6fbe23ec67f9be3"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "bed2954af1ea0bc1537e892f04e455b3baa5f87c43670bb46688a85e8813b9c1"
|
||||
}
|
||||
],
|
||||
"retained_fiscal_versions": 4,
|
||||
"journals_preserved": 27,
|
||||
"new_journals": 0,
|
||||
"deductible_vat": null,
|
||||
"tax_payable": null,
|
||||
"company_assessment_complete": false,
|
||||
"grants_per_existing_qa_book": 14,
|
||||
"new_demo": false,
|
||||
"sgc_dependency": false,
|
||||
"cache_cleared": false,
|
||||
"official_form": false,
|
||||
"official_submission": false,
|
||||
"visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"acceptance": false
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"passed": true,
|
||||
"scope": "SGF-MULTI-LINE-INCLUDED-QA-v1",
|
||||
"date": "2026-11-10",
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"checks": {
|
||||
"regression": 34,
|
||||
"recovery": 3,
|
||||
"http": 29,
|
||||
"dom_http": 16
|
||||
},
|
||||
"concurrency": {
|
||||
"passed": true,
|
||||
"during_lock": {
|
||||
"status": 503,
|
||||
"retry_after": "5",
|
||||
"elapsed_seconds": 5.17136287689209
|
||||
},
|
||||
"after_release": 200,
|
||||
"replayed": true,
|
||||
"one_calculation": true,
|
||||
"regression_only": true
|
||||
},
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-195444-c0e2a14a\\document-math-result.json",
|
||||
"sha256": "3b7749421c9fa836ab595cabc9dcd6e929a1ca07a4b3c9e454c977c7797b7d9f",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\document-math-concurrency\\result.json",
|
||||
"sha256": "73331577472b9a937f93de098b30ef42f65e9257a0d6f2a7068fef2605a4e4c2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-195644-d598bace\\document-math-recovery.json",
|
||||
"sha256": "b86594a87d5e105b69de5efd0285dfbd30bc96331e05fe2fcad23bdfbff3a408",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\document-math-http-20261110.json",
|
||||
"sha256": "6370193e2a9725fe7f7b1f9fbd56214b0d8d8641e1e54cb9714196ffe29af663",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\document-math-dom-http-20261110.json",
|
||||
"sha256": "fab41b6d48b675bcc70d72e2d6f88e70dab20df7b3ed70dede166aece0b07ba6",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-200237-fe3b87c6\\document-math-preservation.json",
|
||||
"sha256": "4e8ecf54b315285a14196e00e7a5c3507ab171909ef51a06e35337dbd1b1d481",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-200126-3e24e881\\document-math-installation.json",
|
||||
"sha256": "676a20b372db477487104b230f367a9a04caa704ad9182f8f13156ad6034f8ba",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalDocumentMath.php",
|
||||
"sha256": "6e67b7b1363d24b38ca0dd40c4349dba82a4b746965f0af8aa7d65bb4f8f731d"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalRules.php",
|
||||
"sha256": "520edda0a013d41a80e3e3b56a1b39597a4f1b6407d78118f8855277ffeb3548"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/Http/FiscalRulesController.php",
|
||||
"sha256": "cc7e05e18c4bbc98a70a19eabdd653bbb44a717214f8d8ee19cd2ffeb1c032c9"
|
||||
},
|
||||
{
|
||||
"file": "public/sgf-fiscal-rules.mjs",
|
||||
"sha256": "5c865e018c5b7d3b3f1232b80e81da379c729ea816a9e08a73225e76a678502c"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/fiscal/rules.blade.php",
|
||||
"sha256": "39ca795a4469399896644add622a62a54f216ca67b822337c3cd7ec61c1e9698"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "ce7c248b0f110f73e2f9c1bea0b6d5f2a9fa9f24ab8cc3f99707b21692ac14af"
|
||||
},
|
||||
{
|
||||
"file": "config/fiscal_rules_qa.php",
|
||||
"sha256": "bf0ed125e277994adb79c14c516ff779a0593eb501b7d02cd81dccae71398bca"
|
||||
}
|
||||
],
|
||||
"new_grants": 0,
|
||||
"new_financial_effects": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"entry": "http://127.0.0.1:8085/sgf",
|
||||
"installation": "cc50a276c10c",
|
||||
"proofs": [
|
||||
{
|
||||
"sha256": "1dbffaa4fd6f8ce6bf3e1c372e45084fba34c4292451834e4b4dac3f57deeaee",
|
||||
"kind": "quotes_http",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/commercial-quotes-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"sha256": "81d8cc826e5f535db204f624a9c8fd5eb4b1d8076bc283a23955df55ad97cb8d",
|
||||
"kind": "schedule_http",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/workshop-schedule-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"sha256": "040f9fed00b4b9ceba179504b14d0b87a1393716fc09503b6afd71ec636a27da",
|
||||
"kind": "equipment_http",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/workshop-equipment-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"sha256": "4df0501a71fc4c415dcb861153610fac9edf639e1b042852181e9c1519ea216b",
|
||||
"kind": "stock_http",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/stock-completion-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"sha256": "1c332b62e6bbd44b29abc989b5cedbfb1d7d09d04bf234462aa70ff1e2ff30d8",
|
||||
"kind": "stock_dom_http",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/stock-completion-dom-http-20261110.json"
|
||||
},
|
||||
{
|
||||
"sha256": "ce1feb474c79e4e1368d0273d9c3bb88736ed9bbdeff65c7927a8ec93dff92c5",
|
||||
"kind": "stock_regression",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-162212-7fc0c484/stock-completion-result.json"
|
||||
},
|
||||
{
|
||||
"sha256": "d7dce26e185f40e74a33455db4448b10bec025ccc94fbc8355806fc044201181",
|
||||
"kind": "stock_concurrency",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/stock-completion-concurrency/result.json"
|
||||
},
|
||||
{
|
||||
"sha256": "a9eb79fc029d3da5f824bd77b17b891239a7ef4cf1a6a260271c2e2bbf40d435",
|
||||
"kind": "documents_candidate_regression",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-163526-13905e7f/service-documents-result.json"
|
||||
},
|
||||
{
|
||||
"sha256": "9d2e9902930a97eda22f87861751c80d4c75e9580964f6f0850bc6101adfb48d",
|
||||
"kind": "preservation",
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-162658-c0b15a30/next-block-preservation.json"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-171528-10e1c5f0/service-documents-result.json",
|
||||
"kind": "documents_regression",
|
||||
"sha256": "2c09d27a9bc9b9c9c68b8b6b19a5e3553a615138ef6aeee2ade7ab253bfbabac"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/documents-concurrency/result.json",
|
||||
"kind": "documents_concurrency",
|
||||
"sha256": "383f2aaa78c7db59563f25701e03ea99b0359d0c35c9c290b51369864c4275b6"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-172728-ac2008fe/document-cancellation-result.json",
|
||||
"kind": "cancellation_regression",
|
||||
"sha256": "6a5645e4c310aa1be1fefea9240a16da0e3bac2d99e67ca3d0e0c1ebc56d8ee3"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/service-documents-http-20261110.json",
|
||||
"kind": "documents_http",
|
||||
"sha256": "a93046d86b2bc1ad87b407c0cc15750accede96ba7c68a0e46cff86c34f615f6"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/service-documents-dom-http-20261110.json",
|
||||
"kind": "documents_dom_http",
|
||||
"sha256": "7abccf812e1c75ca8b96dc0a19a345023f581de30406221207b92413c567b443"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-172510-6e7769dd/period-documents-result.json",
|
||||
"kind": "period_documents",
|
||||
"sha256": "59826b9f3bb406cc6a5af37eeab2b5ddcd9ed7e4ecaad7f6436034c670e70471"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-172904-86c06a96/service-documents-status.json",
|
||||
"kind": "final_documents_status",
|
||||
"sha256": "68bd3f699e813b31800d82a4bbae894d0631493a60826bfffc51054513a07ec4"
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-172905-2acea48f/next-block-preservation.json",
|
||||
"kind": "final_preservation",
|
||||
"sha256": "f98371e600bbbb9c79d696b72fe1b51755362727a0338f92370e892eb7dddebf"
|
||||
}
|
||||
],
|
||||
"published": false,
|
||||
"sgc_required": false,
|
||||
"previous_journals_compared_unchanged": 18,
|
||||
"cache_cleared": false,
|
||||
"new_demo": false,
|
||||
"deployment_capacity_validated": false,
|
||||
"browser_visual_review": false,
|
||||
"date": "2026-11-10",
|
||||
"documents_candidate_not_installed": false,
|
||||
"authorization_pending": null,
|
||||
"completed_increments": [
|
||||
"workshop_schedule",
|
||||
"workshop_equipment",
|
||||
"commercial_workshop_quotes",
|
||||
"stock_policies_supplier_return",
|
||||
"receipt_credit_invoice_receipt",
|
||||
"technical_cancellations_and_linked_reversals"
|
||||
],
|
||||
"journal_count_at_stock_completion": 20,
|
||||
"application_complete": false,
|
||||
"current_journal_count": 25,
|
||||
"current_selected_balances": {
|
||||
"invoice_receipt": "0.00",
|
||||
"credit_invoice": "500.00"
|
||||
},
|
||||
"approved_next_block_functionally_delivered": true,
|
||||
"contract_sha256": "4983cacdb45d001090b569e1780384a9f31fba1528b90f7e2355bb3e57ff34f2",
|
||||
"source_hashes": {
|
||||
"app/Modules/Services/ServiceReceivables.php": "79e1669b2423c521c0c56ab6fb07e085daef88eff8a41748c424e4a827f1e453",
|
||||
"app/Modules/Services/DocumentPeriod.php": "100c6cf038b925126ddc8fb50adde2f6d938b4d68df6d0ab193f16ea28836ae2",
|
||||
"public/sgf-service-documents.mjs": "1d7345d1e504250fab9679170f56774a1decae0f0ba9ab9aac0e8efdec7df044",
|
||||
"app/Modules/Services/ServiceDocuments.php": "ab5e2c5fbbb790fc9c2fb3e6e30cb25c017b95314e4aa59df6d9c361cc9acc96",
|
||||
"app/Modules/Services/ServiceInvoicing.php": "4138afb7e001b546a65552d71223cd642154945b8021e1ff45ef60a34076e3c5",
|
||||
"app/Modules/Accounting/SalesLedgerSource.php": "cc5300bcce567d7d6aed9f967b48daf87bff3a106c34bdc0d03dcd10b8f89241"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"date": "2026-11-10",
|
||||
"port": 8085,
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\overview-http-20261110.json",
|
||||
"sha256": "b42c0d35339ed02ad3d6cdd8660a2a0bb89a280b6bda2ff10e4a5ed7175efc56",
|
||||
"passed": true,
|
||||
"checks": 50
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\overview-ui-20261110.json",
|
||||
"sha256": "f497bf08589115ef3bb056b1069fbdb50b7c63e9e5d24c790aacc4840bdb401b",
|
||||
"passed": true,
|
||||
"checks": 28
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\overview-entry-http-20261110.json",
|
||||
"sha256": "e25213942e5cce421c9ed31d2661c6357f1d76aa71e2b4b42004d308c3d6c77b",
|
||||
"passed": true,
|
||||
"checks": 11
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\overview-final-http-20261110.json",
|
||||
"sha256": "f357cd47e8683e5d968ef7113633e0b2fab798dc77e2f6e6ec009aa2bfc9d0c9",
|
||||
"passed": true,
|
||||
"checks": 3
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-204551-708cb2cb\\workshop-orders-result.json",
|
||||
"sha256": "9f20deadcd196ba437599850e92cfd980ea64444355443f75cc2ccd811b73cb0",
|
||||
"passed": true,
|
||||
"checks": 29
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\workshop-orders-http-20261110.json",
|
||||
"sha256": "0100d1cea07ff2c43356471fbab3d3f96e40bb0392b3fc80c7b78b43b9f3837a",
|
||||
"passed": true,
|
||||
"checks": 11
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\workshop-orders-ui-20261110.json",
|
||||
"sha256": "5cb13f70f6ea0caa96a367efff08a9832845d0909268fa3fafd53215e8ad96fb",
|
||||
"passed": true,
|
||||
"checks": 12
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\workshop-read-lock-1794336449856\\result.json",
|
||||
"sha256": "5554e73cbce64de9115a02313d98723b42cec931ffd8731cd155ade34c809adc",
|
||||
"passed": true,
|
||||
"checks": 0
|
||||
},
|
||||
{
|
||||
"path": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-205202-210c8f94/overview-installation.json",
|
||||
"sha256": "3ebb2dd6537c3393f7c43657d03e544881f8606ec928cd2bf98827e98544552a",
|
||||
"passed": true,
|
||||
"checks": 0
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "resources/js/WorkspaceHome.jsx",
|
||||
"sha256": "32bf2871a52ad5a5632aec4c2eb74207f49a8765d351ebfa5c14b475d54ebd4f"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/workspace-overview.js",
|
||||
"sha256": "192e29600321e00abd6290f96a15fa529268b4ee312e7501436ef40f2a25502d"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ModuleNavigation.jsx",
|
||||
"sha256": "e68a8353d2de8e137a102ccd3c768245ecb81fbee0ece0589eb84e40122ae7b3"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/app.jsx",
|
||||
"sha256": "2c4b7a4ffd8ab3117194126f48f0351c67723aeae5508273ac8070828c485f47"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkshopOrderList.jsx",
|
||||
"sha256": "8b652d8a30bcd9ea477a9af88583fccaa5897aff28fdc65014fa9393bfc16f8a"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkshopMenuWorkspace.jsx",
|
||||
"sha256": "f636fdbf0425bc845506ff59b487e0212fc3e08eef2220daceed79143213279a"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Workshop/WorkshopOrderRead.php",
|
||||
"sha256": "b433c85d76609d2696c2818b34ba5c63059d673bad37c638e12d99f6ae0aac68"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Workshop/Http/WorkshopOrderReadController.php",
|
||||
"sha256": "f4dd027d01c0730603f3b312c2eb263740f6ebe1c969c762ed99d19520fab584"
|
||||
},
|
||||
{
|
||||
"file": "app/Shared/Installation/PresentationEntry.php",
|
||||
"sha256": "7974815682b8fad6448619633d35bb29c82596cb19156d7914ade588ff678b9a"
|
||||
},
|
||||
{
|
||||
"file": "resources/views/sgf-presentation-entry.blade.php",
|
||||
"sha256": "df557b3d42df882b7998a23ae8944a757dd7d70b718c6391777f2ba77571b395"
|
||||
},
|
||||
{
|
||||
"file": "resources/css/tempo-theme.css",
|
||||
"sha256": "ac2ecd3a012cd2fa5b9fc527a3e264936871a55ef259388afe1f5af6f352786c"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "f99427a98c56875710d0aa667b658d4b33ec18a3b10cdf4d7eb6bf9336565d29"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/context-transition.js",
|
||||
"sha256": "9b21d005c7ea6529cbd84b289962e4ca6a7ed310fcdd0465e5c4ecb4479f51fa"
|
||||
}
|
||||
],
|
||||
"business_commands_8085": 0,
|
||||
"new_grants": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"full_product_complete": false
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"version": "SGF-PAYABLE-AGING-QA-v1",
|
||||
"passed": true,
|
||||
"target": "existing8085",
|
||||
"regression_checks": 26,
|
||||
"ui_checks": 12,
|
||||
"http_checks": 14,
|
||||
"original_tables_identical": 51,
|
||||
"business_commands": 0,
|
||||
"new_rights": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"evidence": {
|
||||
"regression": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-225625-14e36b63/payable-aging-result.json",
|
||||
"ui": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/payable-aging-ui-20261110.json",
|
||||
"http": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/payable-aging-http-20261110.json",
|
||||
"installation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-225714-3c10e767/payable-aging-installation.json",
|
||||
"preservation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-225759-f5487777/payable-aging-preservation.json"
|
||||
},
|
||||
"sources": [
|
||||
"app/Modules/Purchasing/PayableAge.php",
|
||||
"app/Modules/Purchasing/PayablePositionReadController.php",
|
||||
"resources/js/PayablePositionsWorkspace.jsx",
|
||||
"resources/js/payable-position-view.js"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"version": "SGF-PAYABLE-DUE-QA-v1",
|
||||
"passed": true,
|
||||
"target": "existing8085",
|
||||
"functional_checks": 113,
|
||||
"preservation_acl_checks": 58,
|
||||
"new_business_rights": 2,
|
||||
"grants_per_book": 2,
|
||||
"total_qa_grants": 4,
|
||||
"confirmed_administrative_commands_8085": 2,
|
||||
"new_financial_effects": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"evidence": {
|
||||
"regression": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-222519-ca328516/payable-due-result.json",
|
||||
"identity": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-222138-ff65b1c8/payable-due-identity.json",
|
||||
"pagination": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-222241-1ccd5eab/payable-due-pagination.json",
|
||||
"page_integration": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-222407-f448c6e1/payable-due-list.json",
|
||||
"concurrency": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/due-concurrency-1794341858739/result.json",
|
||||
"http": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/payable-due-http-20261110.json",
|
||||
"final_http": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/payable-due-final-http-20261110.json",
|
||||
"ui": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/payable-due-ui-20261110.json",
|
||||
"preservation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-222251-7c151972/payable-due-preservation.json",
|
||||
"installation": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-222425-0e9c9bf3/payable-due-installation.json",
|
||||
"regression_setup": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-221458-cb0acadb/payable-due-setup.json",
|
||||
"selected_setup": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-221825-b5939799/payable-due-setup.json"
|
||||
},
|
||||
"sources": [
|
||||
"app/Modules/Purchasing/PayableDueController.php",
|
||||
"app/Modules/Purchasing/PayablePositionReadController.php",
|
||||
"resources/js/PayableDueWorkspace.jsx",
|
||||
"resources/js/PayablePositionsWorkspace.jsx",
|
||||
"resources/js/payable-position-view.js",
|
||||
"database/sql/payable_due.sql",
|
||||
"config/payable_due.php"
|
||||
],
|
||||
"harnesses": [
|
||||
"scripts/sgf-payable-due-proof.php",
|
||||
"scripts/sgf-payable-due-identity-proof.php",
|
||||
"scripts/sgf-payable-due-pagination-proof.php",
|
||||
"scripts/sgf-payable-due-list-proof.php",
|
||||
"scripts/sgf-payable-due-http.mjs",
|
||||
"scripts/sgf-payable-due-final-http.mjs",
|
||||
"scripts/sgf-payable-due-ui.mjs",
|
||||
"scripts/sgf-payable-due-concurrency.mjs",
|
||||
"scripts/sgf-payable-due-preservation.php"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"version": "SGF-PAYABLE-POSITIONS-QA-v1",
|
||||
"passed": true,
|
||||
"target": "existing8085",
|
||||
"regression_checks": 23,
|
||||
"ui_checks": 15,
|
||||
"http_checks": 19,
|
||||
"business_commands_8085": 0,
|
||||
"new_rights": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false,
|
||||
"evidence": {
|
||||
"regression": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-220530-07616d21\\payable-positions-result.json",
|
||||
"ui": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\payable-positions-ui-20261110.json",
|
||||
"http": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\payable-positions-http-20261110.json",
|
||||
"installation": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-220903-1bf94d1f\\payable-positions-installation.json",
|
||||
"preservation": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-220955-ad348ffc\\payable-positions-preservation.json"
|
||||
},
|
||||
"sources": [
|
||||
"app/Modules/Purchasing/PayablePositionReadController.php",
|
||||
"app/Modules/Purchasing/ComposedFinanceController.php",
|
||||
"resources/js/PayablePositionsWorkspace.jsx",
|
||||
"resources/js/payable-position-view.js",
|
||||
"scripts/sgf-payable-positions-proof.php",
|
||||
"scripts/sgf-payable-positions-ui.mjs",
|
||||
"scripts/sgf-payable-positions-http.mjs"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"passed": true,
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"date": "2026-11-10",
|
||||
"evidence": [
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-b4093c6f6707\\single-integration\\20261110-211215-0a0ad6c1\\receivable-positions-result.json",
|
||||
"sha256": "7f9e305a16e06578bc0541a6f217ba64c97655070a4cece918820344da215eb9",
|
||||
"checks": 30,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\receivable-positions-ui-20261110.json",
|
||||
"sha256": "607eae89da99d8c8367ce1a38c86f329e6a0f041bafd336aa1d0faa966d79062",
|
||||
"checks": 16,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\receivable-positions-http-20261110.json",
|
||||
"sha256": "90dbbcdba1e510be8cb3895aac63b6ba8e1d8abed4b9c979c16d0e8b26dde8e6",
|
||||
"checks": 15,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"path": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\receipt-composition-cc50a276c10c\\single-integration\\20261110-211623-52cb8499\\receivable-positions-installation.json",
|
||||
"sha256": "53d03cd993ed302cea4817c16bfe0182c330fe85ce2aafeea974fc32a9e4fcd3",
|
||||
"checks": 0,
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"file": "app/Modules/Services/ReceivablePositionRead.php",
|
||||
"sha256": "6aaf0211c4427643c84152edc6a7937dbf48387e2844d3bbe31328d1f6789f2d"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/Http/ReceivablePositionReadController.php",
|
||||
"sha256": "9e8be7c2cd328aebb31cbe0be4eeaaa6abc02d5bff0895aeb90c24ab8d134541"
|
||||
},
|
||||
{
|
||||
"file": "app/Modules/Services/FiscalCoverage.php",
|
||||
"sha256": "55f8b947bd63cffdc63f268a88ac441fda62e144d1a2013eaa954d57970fa716"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ReceivablePositionsWorkspace.jsx",
|
||||
"sha256": "5bd8ee952aeee87d733ab434cfe50b675d84c0341ade4f354c93e4acfdbe57e9"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/receivable-position-view.js",
|
||||
"sha256": "08f8cb6d17b79b89ee8cebe4723458c1a4979d8fb824afa0b585ae51076e6f21"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/ServiceReceivablesWorkspace.jsx",
|
||||
"sha256": "6e654a03cb47e52dedd52ce6b2abf89a61d22860e4ffae92fd393027a54cc445"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/WorkspaceNavigation.jsx",
|
||||
"sha256": "e8b6177a1fa7dfa906f78b9c06d32f0493ff46c4c4b569623ce06f4f0f42d4df"
|
||||
},
|
||||
{
|
||||
"file": "resources/js/app.jsx",
|
||||
"sha256": "59bd224c883dedce891264d29919422fb347e0b7039efcd9176787137f6bec97"
|
||||
},
|
||||
{
|
||||
"file": "routes/web.php",
|
||||
"sha256": "65ad031fc3d2ecbb6722e446aa62af4c33fb50558e8aa681491af44796c4e118"
|
||||
}
|
||||
],
|
||||
"business_commands_8085": 0,
|
||||
"new_grants": 0,
|
||||
"new_demo": false,
|
||||
"browser_visual_review": false,
|
||||
"deployment_validated": false
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"date": "2026-11-10",
|
||||
"passed": true,
|
||||
"meaning": "directed synthetic integration evidence; not complete product acceptance",
|
||||
"installation": "cc50a276c10c",
|
||||
"port": 8085,
|
||||
"entry": "http://127.0.0.1:8085/sgf",
|
||||
"checks": 92,
|
||||
"proofs": {
|
||||
"profiles": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-integration/20261110-133942-55f43aff/profiles-check.json",
|
||||
"sha256": "ceb16e29f6498a57aff4b2c50584823e771ab960302a31de07ede0a33ab5d726",
|
||||
"checks": 23
|
||||
},
|
||||
"reads": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-read-http-20261110.json",
|
||||
"sha256": "b7014d494c54db9b309a8aa711f18fac3f766bc14f20accab0d3035cc7f12106",
|
||||
"checks": 15
|
||||
},
|
||||
"http_boundaries": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-boundaries-http-20261110.json",
|
||||
"sha256": "cd9684589c6fbbc15fa862aae23ef25ef282024d34be8cebe60edde9954bb13d",
|
||||
"checks": 10
|
||||
},
|
||||
"client_recovery": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-finance-ledger-client-20261110.json",
|
||||
"sha256": "8dd66173b519c4b52079c95cc8282b7756e4d523d79d1766a4646c9ceee774c8",
|
||||
"checks": 12
|
||||
},
|
||||
"rate_controller": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-132247-169255fa/stock-rate-controller-result.json",
|
||||
"sha256": "84d4737bbe25060adfff2ef25a5420948b163977334a1c8aa8b109717191929d",
|
||||
"checks": 9
|
||||
},
|
||||
"direct_correction": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-132829-d446e90c/direct-ledger-result.json",
|
||||
"sha256": "b1d25f4a6b4629be03e11977081792aa4ce10ae535b4eaa96e1fb31888589b93",
|
||||
"checks": 7
|
||||
},
|
||||
"industrial_correction": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-132833-ef2bb812/industrial-ledger-result.json",
|
||||
"sha256": "c88e44f9fab298e7fa65439431f1c62225276a62ebfd6df03c5e0952be0bb5a2",
|
||||
"checks": 6
|
||||
},
|
||||
"material_isolation": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-133334-5449e218/material-isolation-result.json",
|
||||
"sha256": "344b53d0cd7c6400a33fc0f1329388b35df275570af3358653df1359f5234b2b",
|
||||
"checks": 5
|
||||
},
|
||||
"finance_lock": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-b4093c6f6707/single-integration/20261110-134018-356f8135/finance-lock-result.json",
|
||||
"sha256": "32948d7153bb70b67cd38ff86a64ed327e6ab0fa3e551462a6de61a40669fc01",
|
||||
"checks": 5
|
||||
}
|
||||
},
|
||||
"effects": {
|
||||
"financial": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-financial-http-progress.json",
|
||||
"sha256": "db5a84d812d96a321693b6654488a81cb34b2d359a7354248195f3727ff8f857",
|
||||
"completed_operations": 33
|
||||
},
|
||||
"corrections": {
|
||||
"file": "C:/laragon/data/sgf-tempo/run/modular-regression-2576427d1939/private/receipt-composition-cc50a276c10c/single-corrections-http-progress.json",
|
||||
"sha256": "0e1718eed4eef96e1076ceb4d740908bf977f4af8ee2bbd03c5e526b499b22ac",
|
||||
"completed_operations": 14
|
||||
}
|
||||
},
|
||||
"sources": {
|
||||
"app/Modules/Accounting/ComposedLedger.php": "74d92e0c9dcbb940f66afc5a0f5fa29025cfa7b6691043b87fba82b428cf9901",
|
||||
"app/Modules/Accounting/ComposedLedgerController.php": "4e259e52d86e05e028c8042082cf7aa05aafdf2c0a722fa019fa9aa19b515f78",
|
||||
"app/Modules/Accounting/ComposedMaterialIsolation.php": "539000b2bee9ee84e12197175fcdf334ce65dd4ca6048aab128fa3d56a6b5372",
|
||||
"app/Modules/Accounting/SourceBook.php": "273b6d0d52e350f045f2d2b9515da49b0522a96596699294dbab09fc75d3f78a",
|
||||
"app/Modules/Purchasing/ComposedFinance.php": "ad7e837c7608ab85c59eb169bcdd986b08c5802a0f218926e1abd7568e8a4b16",
|
||||
"app/Modules/Purchasing/ComposedFinanceController.php": "b417a6dc7d05f7b5ea1c8c043dcf647cb4ba5e09855d0030affa232728fce5b5",
|
||||
"app/Modules/Purchasing/ReceiptRuntime.php": "d368d03239b457eacb61d67c28274d8ed30cf382e7a5586f8a18a7b0ab79ce18",
|
||||
"app/Shared/Installation/PresentationEntry.php": "4b72f35a25ce76a7a54887ecb7f491985bc4c7b356bde34e5d377f9a5133c101",
|
||||
"packages/general-ledger/src/PayableJournal.php": "184115b4e937ca163b8d8a02264104aa794bd3f6380934e5757438346d0e989e",
|
||||
"packages/general-ledger/src/LedgerCycle.php": "904111b4e093e0613eb779d46fa394d6f1654906ffef7ca5ef2311ec6d5ce33a",
|
||||
"packages/general-ledger/src/StockValuation.php": "f4be85e183eb33860a5a7b99f012e6e4490dc04f80deb22d452fb5048ae913fb",
|
||||
"public/sgf-finance-payables.mjs": "68b772884512e353e1186fb82b9f732d7f785de3a01458198e49fe359ec5f666",
|
||||
"public/sgf-composed-ledger.mjs": "13f5c2d514c09573f0844da71e766aca9b03a489b40c554235c54da17b4fb1c5"
|
||||
},
|
||||
"journals": 13,
|
||||
"supplier_principal_minor": 10000,
|
||||
"supplier_balance_minor": 10000,
|
||||
"receivable_balance_minor": 40000,
|
||||
"sgc_required": false,
|
||||
"new_demo": false,
|
||||
"new_database": false,
|
||||
"new_database_roles": false,
|
||||
"cache_cleared": false,
|
||||
"protected_records_changed": false,
|
||||
"published": false,
|
||||
"client_presentable": false,
|
||||
"visual_review": false,
|
||||
"deployment_capacity_validated": false,
|
||||
"remaining": [
|
||||
"workshop-stock physical integration and unused return",
|
||||
"selected stock receipt2/issue1/return0.5 valuation100/50/25 in8085",
|
||||
"remaining commercial workshop origin and legacy accounting continuations",
|
||||
"accounting origin pagination beyond25",
|
||||
"complete QA period conference and close",
|
||||
"visual review and full startup/recovery acceptance"
|
||||
],
|
||||
"historical_proofs_reused": [
|
||||
"docs/proofs/purchasing-completion-final-20261104-r2.json",
|
||||
"docs/proofs/sgf-six-module-composition-20261110.json"
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user