Files
SGF/docs/SGF_MULTI_LINE_INVOICE_DELIVERY.md
T
2026-11-11 15:04:01 +02:00

9.8 KiB
Raw Blame History

Facturação multilinha integrada — entrega QA na8085

11/11/2026. Âmbito SGF-MULTI-LINE-INVOICE-INTEGRATED-QA-v1, expressamente autorizado. Código, interface e percurso efectivo entregues na instalação existente; sem novas demonstrações ou dependência do SGC. Prova consolidada. Não constitui aceitação, checkpoint, publicação ou conformidade fiscal real.

Resultado utilizável

Em /sgf, módulo Comercial → Facturação → Documento com várias linhas QA: cabeçalho/cliente e dados documentais,1–25 linhas de serviços, pesquisa paginada, unidade/quantidade/preço e modalidade explícita, totais e diferenças, preparação auditada, cálculo conservado, revisão temporal distinta e emissão de teste/PDF. A configuração das séries permanece separada. O menu horizontal/dropdown aceite é preservado.

Exemplo existente Modalidade Linhas Base Imposto QA Total Recebível em aberto
TEST-MULTI-2026/1 Acrescido 400+600 1000 160 1160 1160MZN
TEST-MULTI-2026/2 Incluído 464+696 1000 160 1160 1160MZN

Dois recebíveis explicitamente preparados/revistos; nenhum pagamento, recebimento ou afectação. Duas origens explicitamente preparadas/revistas/aplicadas no mesmo diário em três linhas: D QA-CLIENTES1160 / C QA-VENDAS1000 / C QA-IMPOSTO-TESTE160. 29→31 lançamentos;24 contas intactas. Não há emissão ou contabilização automática ao guardar/calcular.

Nova preparação/revisão de resultado interno parcial v5/v6, usando a mesma correspondência revista v4:24 contas de plano,23 com movimento,31 lançamentos; activos classificados5575, fornecedor100, rendimentos4586,21, gastos2300, subtotal conhecido2286,21MZN. Dez contas continuam por classificar; capital, resultado completo e balanço completo indeterminados. Os CSV/snapshots19/27 e23/29 mantêm os bytes anteriores. Conferência actual do período somente de leitura:44 factos, zero pendentes, débitos/créditos iguais; período aberto.

Distribuição de funções sem novas concessões

Os22 nomes de direitos verificados não pertencem todos à mesma pessoa. A implementação conserva a distribuição efectiva:

  • Comercial preparação QA8 prepara o rascunho, propõe a regra temporal e emite após revisão; não enumera o catálogo fiscal comum.
  • Financeiro preparação QA13, no contexto Comercial explicitamente escolhido, conserva o cálculo com fiscal_rules.prepare e consulta a regra com fiscal_rules.view. Isto não concede ao Comercial o poder fiscal de13.
  • Comercial revisão QA9 decide a versão temporal, com revalidação estritamente vinculada ao cálculo já conservado; não administra regras fiscais.
  • Financeiro QA13/14 prepara/revê o recebível no módulo Financeiro.
  • Contabilidade QA15/16 prepara/revê/aplica o lançamento no módulo Contabilidade. Consulta conserva os seus direitos existentes.

Nenhum direito, concessão, utilizador, perfil, conta contabilística ou role PostgreSQL novo. Os rascunhos conservam associação Comercial. QualifiedInvoiceSource permite a leitura qualificada da dependência tipada pelos módulos financeiros autorizados, sem acrescentar associações modulares. A API Comercial directa continua a exigir troca explícita de módulo; a consulta financeira usa o seu próprio percurso. Não introduzir atalhos que contornem essa guarda.

Mecanismos e protecções

MultiLineDrafts compõe atomicamente os escritores originais de prestação, rascunho e preparação. Regista a origem dos novos rascunhos em mi_drafts; não adopta ou altera rascunhos antigos. Campos desconhecidos podem permanecer no rascunho; impedem cálculo/emissão em vez de assumir zero. Prévia é revertida; confirmação exige autor/contexto/versões/catálogos actuais e fundamento. Depois de emitida, esta origem não é editável pelo editor novo.

MultiLineInvoiceCalculation usa FiscalRules::invoiceDocument e o mesmo FiscalDocumentMath: truncatura por linha, base incluída=bruto−imposto documental e conservação das diferenças racionais. A captura vincula origem, preparação, unidades, modalidade, regra/vigência, data e identidade/poderes do preparador. Alterações invalidam conferências pendentes; uma recuperação de comando já concluído devolve o comprovativo histórico, sem revalidar uma emissão nova.

MultiLineInvoiceIssuance adapta apenas o novo tipo de captura ao ServiceInvoicing original, seu contador, eventos, PDF guardado e recibos. O ramo de uma linha mantém o seu contrato. SalesLedgerSource confere os totais documentais congelados pelo mesmo cálculo e fornece o mesmo escritor de vendas, sem outro diário. Prévia de emissão não atribui número nem cria dívida. Recibos novos são individuais, isolados e append-only. Catálogos novos têm SQL25/100; decisões da página são lidas conjuntamente. Não se declara que a listagem administrativa antiga passou a ser um registo universal paginado.

Nas operações novas, o bloqueio por empresa serializa confirmações; permissões são novamente conferidas após o bloqueio. O tratamento HTTP traduz espera excedida em503 com indicação para recuperar a mesma chave. A interface conserva pedido/chave quando o resultado é incerto e impede trocar origem/contexto em curso. A recuperação após recarregar a página depende do identificador original/comprovativo; não existe uma caixa de saída persistente nova no navegador.

Provas dirigidas e reutilizadas

143 verificações dirigidas,122 de preservação, concorrência separada e conferência de período somente de leitura. Não somar as passagens iniciais substituídas. As suites alheias de Compras/Stock/RH/activos não foram repetidas.

Prova final Verificações Cobertura
Percurso financeiro na regressão 26 Acrescido/incluído,100 incluído86,21+13,79, PDF, recebível, três linhas GL e propriedade Comercial; rollback
Controlador 18 Direitos, campos protegidos, SQL25/100, decisões, recibos e unidade estrangeira; rollback
Fronteiras 20 Desconhecidos,1/25/26 linhas, identidade/poderes, regra retirada, versões e modalidade; rollback
Falha parcial 6 Falha após escritores originais/antes do recibo, rollback integral e recuperação única de rascunho; falha tardia da emissão desfaz contador/factura/PDF/evento/recibo; rollback
Interface 21 Handlers com API simulada, escolha explícita, totais, incerteza/mesma operação, revisão distinta/menu; não é navegador
HTTP8085 28 Percurso concluído, fotografias/PDF/SHA, permissões e ficheiros efectivamente servidos
Resultado interno parcial 12 Duas decisões novas, mesmas correspondências, saldos e exportações históricas
Leituras finais HTTP 12 Registo Comercial25/100, posições Financeiras2320, prazo desconhecido e origem/recibos exactos
Preservação 122 96 conjuntos originais, appends exactos, três bindings, PDFs anteriores, escritores antigos, contas/diário/período e ficheiros instalados

Concorrência só na regressão existente: duas emissões com chaves distintas sobre o mesmo documento. A primeira retém a transacção; pg_blocking_pids/pg_stat_activity identificam a espera Lock/transactionid no bloqueio da empresa. A segunda recebe503 após 5,09s. Libertada a primeira, a segunda recusa a conferência desactualizada com409; recuperar a primeira devolve200/replayed. Uma factura, um recibo de emissão e último número1. A fixture de concorrência fica identificada exclusivamente na regressão, sem recebível/GL: não é uma pendência da8085 nem deve ser usada para declarar fecho geral da regressão.

Os dois percursos8085 somam22 comandos guardados em progresso privado; mais dois de resultado interno. Não os repetir para apresentação. A retomada do ensaio HTTP reutilizou resultados/chaves conservados após corrigir no harness o endereço de comando GL e a consulta de documento no módulo indevido. Não foram criados documentos suplementares. O teste de período inicialmente procurava uma propriedade balanced inexistente: a observação válida foi reutilizada e compararam-se debit_minor/credit_minor, sem repetir a consulta ou fechar o período.

PDF máximo25linhas: amostra não emitida, cinco páginas renderizadas e inspeccionadas; texto legível, sem corte/colisão observado. O renderizador textual existente pode dividir a descrição de uma linha entre páginas; não é um modelo fiscal oficial nem revisão visual da aplicação. As capturas fornecidas orientaram os campos e percurso, sem importar dados pessoais ou copiar taxas como legislação.

Preservação e limites

Todas as linhas anteriores dos96 conjuntos conferidos permanecem idênticas. Mantêm-se29 lançamentos originais,24 contas, seis versões/recibos de activos, custo1200/acumulado100/líquido1100, Caixa950, RH, Stock, Compras, permissões/utilizadores e três bindings. Novas escritas limitadas aos dois documentos e suas preparações/decisões/recebíveis/GL e resultado parcial autorizados. Os seis registos protegidos não foram escolhidos ou escritos; nenhum comando de limpeza de cache, migração geral, nova demonstração, publicação, SGC ou candidata de Compras foi executado.

A proposta de vencimento no rascunho não se converte automaticamente em condição do recebível: os dois prazos efectivos permanecem desconhecidos. O livro/mapa IVA anterior conserva quatro versões e não inclui estes documentos. Não presumir que a nova regra artificial16% é taxa legal, que este ciclo valida emissão real ou que foram implementados regimes mistos, isenções, descontos fiscais, artigos/famílias, POS ou Excel.

A instalação continua QA: revisão visual da aplicação, carga sustentada, armazenamento/recuperação operacional, fiscalidade/modelos legais e capacidade de implantação exigem evidência própria. A matriz v30 mantém full_product_complete=false e client_presentable=false.