Merge demonstrated L7 treatments preserving concurrent portal changes and accepted history
tests / ci (push) Canceled after 0s
tests / ci (push) Canceled after 0s
This commit is contained in:
@@ -741,3 +741,133 @@ Fontes: PDF M22 SHA2564b61bd83d1fbcfd3b7b5c5523cea5923f7d0f65dc4c004eff58e5db38f
|
||||
| Contas/quadros e anexos restantes fora das seis linhas financeiras demonstradas | Reutilizar dados existentes,classificar componentes com suporte e acrescentar correspondência específica;sem tomar campos preenchidos do exemplar como dados do investidor |
|
||||
|
||||
L7 mantém benefícios/casos especiais/taxas reduzidas eL8 mantém retenções,pagamentos,créditos e saldo final. Restantes regras deL6 e as dez dúvidasL5 conservam o saldo e as condições já documentadas. **L6 continua parcial;colecta não é saldo final a pagar.** Recibo:`docs/investmoz/simulations/irpc-l6-values-forms-qa-20261026.json`.
|
||||
|
||||
## 26/10/2026 — representação dos valores e campos M20/M22 5aaf1a56 entregues pelo Git
|
||||
|
||||
Instalado `5aaf1a56f9d928331364fcc8b0d1528e51dba327` sobre `56475acb`,preservado como versão anterior. Backup fresco `2026-10-26T08:57:09Z` e restauro isolado sem rede/porta55441: **174tabelas** por contagem/checksum e **369ficheiros/configuração** conferidos. **4ficheiros do delta,50protegidos e31originais** verificados;schema,roles/grants e permissões iguais. As172tabelas de negócio mantêm os valores do backup;cache/sessões reconciliadas com eventos operacionais/acessos anónimos,sem alteração de dados de negócio. Revisão/manifest público,7marcadores compilados,4assets e simuladorHTTP200 conferidos. Sem migrações,importações ou escrita privada sintética no activo.
|
||||
|
||||
Pipeline normal concluído;provasQA15frontend/API1-97/UI/tipos/build reutilizadas,sem nova ronda manual. **Disponível no âmbito demonstrado: resultado líquido3120 + ajustamento10 → lucro/base3130 → colecta1001,60MZN.** Representação exacta,ausência/informação em falta/campo sem aplicação e valores ainda sem correspondência conservados. M20 mantém fracções sem arredondamento presumido;M22 mantém preparação exacta ao cêntimo já aceite. Imposto próprio320 exterior produz resultado líquido2800,mas campo de acréscimo próprio continua pendente,sem usar213 de outrem. Divergência201/Q8 versus200/Q10 só limita o transporte afectado. Históricos e cálculos anteriores,pressupostos cambiais e âmbitosL3/ISPC/câmbio/L5 preservados. **Colecta não é saldo finalL8.** Recibo:`docs/investmoz/simulations/irpc-l6-values-forms-delivery-20261026.json`.
|
||||
|
||||
O estado anterior «QA sem instalação» de5aaf1a56 é histórico. O saldo seguinte separa desenvolvimento de esclarecimento documental,com exemplo e condição de retoma,para decidir o fecho operacional delimitado. **L6 não está integralmente concluído;L7 eL8 mantêm os seus âmbitos.** Não foi executada pesquisa nova nem repetição dos testes aceites para esta consolidação.
|
||||
|
||||
## 26/10/2026 — saldo consolidado de L6 para decisão de fecho operacional delimitado
|
||||
|
||||
Referência actual após a entrega `5aaf1a56`: percurso normal demonstrado até à **colecta**, com períodos/moedas/ajustamentos e preparação parcialM20/M22 documentados. Colecta não é saldo final a pagar ou recuperar;L8 conserva esse fecho. Esta lista consolida o saldo das notas anteriores,sem reabrir o que já foi demonstrado. Os pormenores e exemplares continuam nas mesmas secções/recibos;nenhuma nova matriz ou backlog é criado.
|
||||
|
||||
**Código ainda por implementar.** São extensões não demonstradas;as fontes já aceites permitem iniciar os casos correspondidos. Dados de um investidor em falta dentro de regra já implementada são uma pendência desse caso, não outra tarefa genérica deL6.
|
||||
|
||||
| Trabalho | Exemplo | Condição de retoma / alcance |
|
||||
|---|---|---|
|
||||
| Amortizações e quota de aluguer36h restantes | Ar condicionadoII/3/3,12,5%,fora dos10códigos implementados;bem usado com vida esperada e quotas anteriores documentadas. | Acrescentar catálogo e variantes previstas nas fontes aceites:usados/abertura/reparações/reavaliação,uso intensivo/concessões/peças/intangíveis,transição e excepções de método/vida útil,art17 em período curto e quota36h automática. Implementar só o caso escolhido e provar o delta;sem aguardar validação genérica daAT. Só activo,método ou quota ainda não suportados;amortizações demonstradas preservadas. |
|
||||
| Custos e periodizações específicos | Campanha de lançamento300 com imputação por3exercícios;obra com receita antecipada positiva em vez do zero demonstrado. | Implementar36-A e articulação com36n,reforços financeiros28(3),19(5)/19(6) e18(6–10),com saldos/condições do caso. Autorização de mudança de método apenas quando a disposição aplicável a exigir. Provisões sectoriais dependem primeiro da norma específica indicada abaixo. Só campanha,obra ou periodização específica;limites/provisões ordinários e casos já demonstrados mantidos. |
|
||||
| Períodos e sequência de perdas | Transição de4meses seguida dos períodos posteriores:aplicar a exclusão de contagem de41(5) ao período7(4)d,sem contar apenas anos civis. | Representar a sequência efectiva de períodos/perdas e acrescentar datas parciais,liquidação/períodos superiores a12meses e outros exercícios com regra/taxa aplicável. Não há nova pesquisa necessária para repetir o recorte de meses completos2026 já entregue. Só período ou utilização de perda dependente;lucro independente e semestres demonstrados preservados. |
|
||||
| Desdobramentos contabilísticos e quadros/anexos M20/M22 restantes | Imposto próprio200 já incluído no plano e320 exterior:discriminar as duas componentes sem duplicar gasto;contas fora das6linhas financeiras ainda não transportadas. | Acrescentar o desdobramento e as correspondências dos quadros/anexos escolhidos,reutilizando dados existentes. Campos sem correspondência aguardam a referência concreta abaixo;os outros componentes podem ser implementados/provados separadamente. Só componente/conta/campo ainda não suportado;valores e campos correspondidos preservados. |
|
||||
| Saldos em moeda estrangeira | Crédito final100USD não é soma das receitas convertidas por mês. | Implementar reconciliação de saldo e conversão pela data/regra que vier identificada,usando o motor cambial já entregue. A selecção mensal para simulação continua disponível;esta tarefa não cria outro mecanismo cambial. Só saldo/conversão fiscal dependente da regra;plano e pressupostos mensais permanecem disponíveis. |
|
||||
|
||||
**Esclarecimentos documentais aguardados.** Cada ponto abaixo exige apenas a referência/resposta específica indicada. A ausência dessa informação não significa revogação das fontes aceites,nem autoriza transformar a dúvida numa validação genérica deL6. Não se presume que um pedido já tenha sido enviado àAT;estes são pontos delimitados para o esclarecimento aplicável.
|
||||
|
||||
| Informação em falta | Exemplo da dúvida | Condição de retoma / alcance |
|
||||
|---|---|---|
|
||||
| Edição e campos M20/M22 | M20A.1/D35 remete201/quadro8;PDF M22 usa200/quadro10. Imposto próprio320 não pertence ao213 de outrem;quota recuperada−26 não tem campo de dedução confirmado. | Obter exemplar compatível ou instrução que identifique edição/período,campo e sentido do transporte. Para periodização/obras/reversões ainda sem campo,identificar a correspondência específica. Até informação nova,manter valores/efeitos sem código presumido e não repetir pesquisa. Só transporte,campo e somas dependentes;resultado líquido próprio,260/278/300 e demais campos conhecidos mantidos. |
|
||||
| Representação fiscal de fracções | M20:300,50=601/2MZN,num exemplar que pede meticais sem centavos;M22:1/300MZN não é um número exacto de cêntimos. | Identificar instrução de representação/arredondamento da edição/campo ou esclarecimento específico. Conservar a fracção até lá;não deduzir regra de arredondamento apenas do rótulo «sem centavos». Só transcrição não exactamente representável;inteirosM20,cêntimos exactosM22 e cálculo racional preservados. |
|
||||
| Articulação de limites em combinações não demonstradas | Combustível100,comprovado80,viatura de passageiros sem excepção:36h/i com36(4). Provisão de créditos200 num período curto de3meses:limite anual por corresponder. | Esclarecer especificamente a articulação h/i/36(4) e a base/limite dos períodos curtos de publicidade/créditos,se houver proporcionalização aplicável. Não somar exclusões,anualizar ou repartir por presunção. Retomar só perante referência/resposta concreta para o exemplo. Só combinação ou limite do período;casos independentes com regra já aplicada mantidos. |
|
||||
| Regra fiscal de conversão anual | PlanoUSD com64MZN/USD por mês é pressuposto sintético de simulação,não confirmação da data/taxa fiscal anual ou da cotação do saldo final. | Identificar disposição/âmbito,data,base e taxa/boletim aplicáveis ao resultado e,quando necessário,ao saldo. Reutilizar o motor existente e demonstrar só a correspondência nova;sem taxa actual por defeito ou nova ronda da pesquisa anterior. Só confirmação fiscal anual e saldo dependente;conversões mensais documentadas de simulação mantidas com os avisos. |
|
||||
| Norma sectorial de provisões reguladas | Provisão200 de uma entidade financeira sujeita ao28d não herda os1,5%/6% do regime ordinário29. | Identificar sector,regulador,norma de supervisão aplicável e saldos/condições necessários,antes da implementação específica. A fonte oficial fornecida é aceite;falta a regra concreta do caso,não certificação genérica da fonte. Só provisão regulada respectiva;provisões ordinárias demonstradas preservadas. |
|
||||
|
||||
**Base da decisão operacional:** o âmbito demonstrado e as suas limitações permanecem disponíveis na interface e nas exportações;as provas aceites mantêm validade. Um fecho operacional delimitado pode referir esse âmbito,com estas extensões/documentos fora da cobertura e retoma por caso. Esta consolidação **não declara L6 integralmente concluído nem regista uma decisão de fecho ainda não tomada**. Permite preparar o avanço paraL7 sem condicionar os casos independentes à resolução de todo este saldo. Benefícios/isenções/taxas reduzidas/tributações autónomas e operações especiais mantêm âmbitoL7;retenções,pagamentos,créditos e saldo anual mantêm âmbitoL8. As dez dúvidasL5 só afectam dependências efectivas e não foram pesquisadas novamente.
|
||||
|
||||
## 26/10/2026 — L6 operacional no âmbito demonstrado e delimitação de L7
|
||||
|
||||
**Decisão expressa da Tempo:** L6 fica operacional no âmbito demonstrado disponível em `5aaf1a56`, com limitações explícitas. Não é conclusão integral de L6 ou do IRPC. Os cinco grupos de código e cinco grupos documentais da secção «saldo consolidado de L6» permanecem separados, com exemplos e condições de retoma. As notas anteriores que deixavam a decisão operacional por tomar conservam o seu valor histórico; esta decisão é posterior. As provas aceites são reutilizadas. As pendências de L5/L6 só impedem tratamentos que dependam delas.
|
||||
|
||||
**Estado deste incremento:** delimitação documental de L7, sem novo cálculo, instalação, migração, importação ou alteração de dados activos. A colecta normal entregue mantém-se distinta do saldo a pagar/recuperar. Retenções, pagamentos, aplicação anual de créditos e liquidação final permanecem em L8. Recibo: `simulations/irpc-l7-scope-20261026.json` (relativo a `docs/investmoz/`).
|
||||
|
||||
### Dados existentes e fronteiras de integração
|
||||
|
||||
| Reutilização | Contrato para L7 e limite |
|
||||
| --- | --- |
|
||||
| Oportunidade/dossier: `context_opportunity`, `context_opportunity_snapshot`, `context_applicability_snapshot`, `context_reuse` | Conservar origem e data, selecção de campos compatíveis e edições deliberadas; `context-inheritance.ts` e `dossier-prefill.tsx` já sustentam esta reutilização. Associação documental a oportunidade/âncora não confirma implantação ou incentivo. |
|
||||
| `sector_id`, `province_id`, `district_id`, `admin_post_id`, `locality_id` e respectivas designações | Servem para identificar candidatos e pedir apenas elementos em falta. Confirmar actividade efectivamente exercida, estabelecimento/projecto e parcela abrangida por documentos do caso. Localização, polígono, DUAT ou código sectorial isolados não concedem benefício. |
|
||||
| Sujeito, NUIT, residência/EP, período, início de actividade/exploração e dados do plano | Reutilizar valores declarados e respectivas provas. Data prevista no dossier não substitui início efectivo quando esse for o termo inicial da norma. Distinguir conhecido, ausência declarada e desconhecido. |
|
||||
| `business_plan_snapshot`, livro `modelo_a_snapshot.irpcNormal` e versões L6 | Receber lucro/base/colecta e parcelas identificadas, com chave e versão de origem. Só alterar o ponto previsto pela norma: ajustamento ao lucro, dedução à base, taxa por parcela ou tributação autónoma separada. Não alterar nem recalcular silenciosamente históricos. |
|
||||
| Activos, quotas anteriores e despesas já registadas | Reutilizar os mesmos identificadores e montantes; calcular apenas o efeito adicional permitido. Não repetir o acréscimo de uma despesa nem deduzir duas vezes a amortização do mesmo activo. Um caso dependente de regra L6 não implementada conserva essa dependência específica. |
|
||||
| Preparação M20/M22 e aritmética racional existentes | Conservar montante exacto, unidade/moeda e parcela. Transporte só com correspondência demonstrada para a edição; campo desconhecido, fracção não representável ou divergência editorial não invalida o cálculo independente. Não arredondar por conveniência. |
|
||||
|
||||
O motor actual de matéria colectável não subtrai benefícios positivos livres: exige regra, condições, limite e ordem. A colecta normal cobre a taxa geral no recorte demonstrado; escolher «outro tratamento» não implementa uma taxa especial. A presença de campos ou de fontes no portal não equivale a execução de L7.
|
||||
|
||||
### Famílias de tratamentos a implementar por casos compatíveis
|
||||
|
||||
As referências seguintes delimitam a regra e o ponto de integração; **não constituem benefícios concedidos nem cobertura executável nova**. O exercício do caso, alterações aplicáveis e duração individual ficam associados à versão da regra. Não se transportam taxas temporárias para outro período.
|
||||
|
||||
| Família / fonte identificada | Condições e período a guardar | Efeito e exemplo de dúvida delimitada / condição de retoma |
|
||||
| --- | --- | --- |
|
||||
| **Despesas com tributação autónoma** — CIRPC, Lei34/2007, art.61(4), com art.36(1)g; PDF17/p768(71) | Natureza legal documentada da despesa não devidamente documentada, confidencial ou ilícita; valor e exercício; taxa de 35% da disposição e versão aplicável ao período. Não classificar pela simples falta de ficheiro anexado. | Parcela autónoma separada da colecta normal; reutilizar o acréscimo36g já feito, sem duplicação. Ex.: despesa100 já acrescida em L6 → parcela autónoma35 no caso qualificado; não é saldo final. Se só falta anexo, pedir a caracterização/prova da despesa e manter indeterminado apenas este tratamento. |
|
||||
| **Mais-valias autónomas** — Lei12/2025, art.2, CIRPC61-A; art.3 revoga39/47; art.6 vigora em01/01/2026; PDF20/p2180(20) | Alienação, activo, datas, realização/valor fiscal, origem contabilística, período e parcela identificados; taxa32% do61-A. Separar eventos anteriores a2026. | Apurar parcela autónoma, reconciliando o que já integra o resultado L6, sem dupla incidência ordinária/autónoma nem compensação presumida de perdas. Ex.: ganho100 incluído no resultado exige identificar a sua parcela antes de integrar a colecta autónoma32. Retoma: implementar essa reconciliação e a regra de apuramento aplicável ao activo; não bloqueia despesas autónomas ou benefícios independentes. |
|
||||
| **Isenções e redução por natureza da entidade** — CIRPC9–14; cooperativas no art.12, PDF5/p768(59), e taxa geral61(1) | Tipo efectivo da entidade, rendimentos elegíveis/excluídos, destino dos rendimentos, constituição e reconhecimento apenas onde exigido pela disposição; exercício e norma aplicável. Art.12 refere cooperativas agrárias, de artesanato e culturais e redução de50% da taxa geral; não todas as cooperativas. Arts.12(2)/14 separam rendimentos sujeitos a retenção. | Isenção ou taxa reduzida apenas na parcela coberta; actividade comercial acessória não se torna isenta por designação da entidade. Ex.: cooperativa com actividade elegível e outra não abrangida exige separar rendimentos e custos. Retoma: classificação documental e segregação da parcela, sem transportar a dispensa para retenções L5 ou liquidar créditos L8. |
|
||||
| **Amortização acelerada** — CBF, Lei4/2009, art.16; compilaçãoAPIEX p72 | Imóveis novos usados no projecto; imóveis reabilitados e máquinas/equipamentos industriais/agro-industriais nas condições da disposição; enquadramento CBF3/9/10 quando aplicável, entrada em uso, taxa normal, base, quota contabilizada e quotas anteriores. Incremento de50% sobre a taxa normal, não cinquenta pontos percentuais. | Efeito no ajustamento ao lucro e, através da cadeia L6, na base/colecta. Ex.: taxa normal10% → taxa acelerada15%, antes das restantes condições/limites; não autoriza uma segunda dedução integral. Retoma por activo com classificação/documentos e conciliação de quotas/custo disponíveis; tabelas L6 em falta bloqueiam só o activo dependente. |
|
||||
| **Deduções e majorações de despesas/investimentos** — CBF17–19; compilaçãoAPIEX pp73–74 | Tecnologia de ponta, formação de trabalhadores moçambicanos e despesas elegíveis de utilidade pública: natureza, base, exercício inicial, janela dos primeiros cinco anos/exercícios conforme artigo, limites, exclusões, ordem e não cumulaçãoCBF4. Distinguir dedução à matéria colectável de majoração de custo. | Efeito no ponto exacto previsto pela disposição. Ex.: formação sem prova do tipo não permite escolher entre o limite5% e o ramo10% para novas tecnologias do art.18. Retoma: identificar tipo/base de limite e conciliar a despesa já contabilizada; não converter percentagem em dedução livre. |
|
||||
| **Crédito fiscal por investimento** — CBF15; compilaçãoAPIEX pp71–72 | Investimento novo elegível, exclusões, início, Maputo/outras províncias como uma das condições, parcela da colecta atribuível ao projecto e prazo de utilização/transporte de cinco exercícios. Taxas5%/10% distinguem os ramos da disposição, sem direito automático por localização. | **L7 identifica origem, elegibilidade e crédito potencial; L8 aplica o crédito anual, limites/saldos e liquidação.** Ex.: projecto situado fora de Maputo, sem discriminação do investimento elegível, não gera automaticamente10% de crédito. Retoma: base elegível e calendário documentados; utilização anual aguarda o mecanismo L8. |
|
||||
| **Tratamentos sectoriais/territoriais CBF** — infra-estruturas20–22; agricultura/pescas27–29; turismo30–33; parques de ciência34–35; grandes projectos36–38; zonas de rápido desenvolvimento39–44; ZFI45–46; ZEE47–48 | Seleccionar a disposição de IRPC efectivamente pertinente, actividade/projecto, delimitação/estabelecimento e estatuto comprovados, data de autorização/início quando exigidos, escalões, duração, cumulação e cessaçãoCBF49–52. ZFI46 e ZEE48 são os artigos de impostos sobre rendimento. Não tratar benefícios exclusivamente aduaneiros como benefícios IRPC. | Isenção, redução ou dedução por parcela e intervalo próprio, em vez de taxa comum ao sector/localização. Ex.: endereço numa ZEE sem estatuto documentado deixa o ramo ZEE pendente; o cálculo normal independente continua. CIRPC61(2) na Lei20/2022 tem termo31/12/2025: não presumir prorrogação para2026. Retoma de cada ramo: condições e cronologia da disposição específica preenchidas, com regra versionada; não exigir pesquisa repetida de todos os sectores. |
|
||||
| **Operações e regimes especiais** — CIRPC54–56 (entradas de activos, fusões/cisões e sócios), transferência de perdas41-A; regimes sectoriais específicos do acervo | Tipo de operação, intervenientes, residência, datas, activos/passivos/valores fiscais e continuidade; identificar diploma sectorial/artigo e regra aplicável antes de escolher tratamento. Não inferir neutralidade por chamar «fusão» à operação nem aplicar regime mineiro/petrolífero por rótulo sectorial. | Continuidade/ajustamento/tributação diferida ou parcela própria conforme norma, mantendo bases históricas. Ex.: perda recebida de outra sociedade não é perda própria ordinária41 de L6. Retoma: correspondência específica41-A e operação documentada; regras sectoriais sem artigo correspondido ficam candidatas, sem taxa provisória. Não há bloqueio transversal de L7. |
|
||||
|
||||
### Registo por tratamento e demonstração a exigir ao código novo
|
||||
|
||||
Cada tratamento terá: identificador estável; sujeito/NUIT; oportunidade/projecto/estabelecimento e parcela; contexto herdado e divergências; fonte/exemplar/hash/artigo/versão; intervalo de vigência e período do caso; facto que inicia/termina a duração; condições individualizadas em «sim/não/desconhecido» com prova ou ausência declarada; título/reconhecimento somente quando a regra o exige; base elegível, taxa, limite, ordem e compatibilidade com outros tratamentos; resultado normal de origem; efeito adicional e ponto da cadeia; moeda/conversão e pressupostos; montante exacto; motivos de exclusão/informação em falta; versão/histórico e dependência concreta.
|
||||
|
||||
Os estados «candidato», «não aplicável», «informação em falta» e «calculado por regra implementada» não se confundem. Ausência declarada pode produzir efeito zero justificado; desconhecido não produz benefício zero nem benefício presumido. Uma condição negativa exclui o tratamento e conserva o percurso normal quando os seus dados são suficientes. Com potencial benefício ainda indeterminado, apresentar o cenário normal de referência e a parcela pendente sem declarar total fiscal definitivo. Mudança de sector/localização/documento invalida apenas a correspondência dependente e pede confirmação de reutilização; conserva o original e as edições deliberadas.
|
||||
|
||||
**Primeiro incremento delimitado para implementação:** qualificação comum e segregação de efeitos, acompanhadas do caso35% do61(4), com despesa já ajustada36g e caso de informação insuficiente. É independente de transporte M20/M22 não correspondido e de amortizações L6 em falta. **Incremento compatível seguinte:** cooperativa abrangida pelo12 com parcela elegível separada e amortização acelerada16 para activo já suportado em L6; cada caso só acompanha a entrega se demonstrado. Mais-valias61-A, deduções17–19, ramos sectoriais e operações especiais seguem separadamente quando as respectivas parcelas/regras estiverem correspondidas. Crédito15 prepara direito potencial em L7 e contrato de passagem para L8, sem antecipar liquidação anual.
|
||||
|
||||
Para cada nova regra: condição satisfeita, negativa, informação em falta, período incompatível/benefício expirado, sobreposição com ajustamento existente e alteração de contexto. Demonstrar apenas o delta: cálculo → gravação → recuperação → relatório, incluindo fonte, período, condições, efeito no lucro/base/colecta ou parcela autónoma e saldo final L8 por determinar. Recuperar históricos anteriores sem os alterar; não duplicar ajustamentos ao voltar a guardar. Reutilizar as provas aceites; não reabrir L3, ISPC, câmbio ou percursos L5/L6 independentes.
|
||||
|
||||
### Fontes consultadas e pendências delimitadas
|
||||
|
||||
Reutilizado o inventário autorizado de **8143ficheiros**, sem nova varredura de pastas. Para delimitação foram consultados os originais CIRPC/alterações já arquivados, a Lei4/2009 local e a compilação oficial [APIEX — Legislação de Investimentos em Moçambique](https://pt.apiex.gov.mz/wp-content/uploads/2025/02/LEGISLACAO-DE-INVESTIMENTOS-EM-MOCAMBIQUE.pdf), que reúne Lei8/2023, Decreto8/2024 e CBF4/2009. Disponibilidade, situação documental/jurídica e uso no cálculo continuam estados independentes. O acesso actual à cópia CBF supera a indisponibilidade assinalada em notas antigas; não activa regra nem apaga a nota histórica. Artigos, páginas, hashes e limites no recibo. A compilação não dispensa o período/alterações de cada tratamento, nem cria validação jurídica genérica adicional.
|
||||
|
||||
**Código por implementar em L7:** qualificação e persistência específicas; efeitos segregados; regras das famílias acima, por parcelas; conciliação sem duplicação; relatório/exportação correspondente. **Documentação por caso:** estatuto/reconhecimento ou enquadramento individual quando a fonte o exige; identificação de parcela/limite/cronologia; norma sectorial ainda sem correspondência; edição/campo de transporte afectado. Cada uma conserva exemplo e condição de retoma na linha correspondente. Não é necessário resolver todos os documentos para começar o primeiro incremento independente. L6 operacional não elimina este desenvolvimento; L7 delimitado não é L7 implementado; L8 conserva a liquidação final.
|
||||
|
||||
## 26/10/2026 — L7: qualificação, despesas autónomas e casos compatíveis em QA
|
||||
|
||||
**QA, sem instalação.** Base instalada preservada `5aaf1a56`; delimitação `d37fffb2`; ramo `codex/irpc-l7-common-autonomous-qa-20261026`, fotografia opcional `IRPC-normal-adjustments/10`. L6 continua operacional no âmbito demonstrado, com os cinco grupos de código e cinco documentais preservados. A implementação abaixo acrescenta apenas os tratamentos demonstrados; não conclui L7 nem o IRPC. Saldo final, retenções, pagamentos e aplicação anual de créditos permanecem em L8.
|
||||
|
||||
**Qualificação comum executável:** reutiliza sujeito/NUIT, âmbito, período, origem da oportunidade/dossier, sector e território; guarda condições, prova, fonte/artigo e período por tratamento. «Informação em falta», «ausência declarada», «não aplicável/condição negativa» e «calculado» têm resultados distintos. Desconhecido não vira zero. Período incompatível, identidade por reconciliar ou contradição afectam só o resultado dependente. A localização não escolhe taxa nem activa benefício. Os snapshots de origem ficam internos; o relatório apresenta contexto legível e as condições documentadas.
|
||||
|
||||
**Despesas61(4):** cada parcela aponta para uma linha `undocumented` do mapa36(1)g de L6, com acréscimo integral já calculado. Montante, documento e linha são reutilizados; L7 não introduz outro acréscimo nem outra despesa. A classificação legal e incidência são declaradas com prova própria; falta de anexo não classifica uma despesa. O imposto autónomo usa35% apenas nos casos qualificados. Duplicação da referência, parcela não correspondida, ausência contraditória ou informação insuficiente deixam o imposto reconciliado indeterminado; as parcelas conhecidas permanecem discriminadas. Condição negativa documentada conserva o ajustamentoL6 e não aplica imposto autónomo à parcela.
|
||||
|
||||
**Cooperativas12/14:** agrárias, artesanato ou culturais, residentes, com base ordinária integralmente elegível e ausência documentada de rendimentos sujeitos a retenção, aplicam redução de50% à taxa geral32%, ou16%. Não depende de seleccionar um sector semelhante. A qualificação especial pode coexistir com a opção «outro tratamento» da colectaL6: não exige fingir que a taxa reduzida é regime geral. Parcela mista, rendimentos retidos, outra entidade ou ausência contraditória conservam pendência própria; não recebem redução global presumida. O imposto autónomo de despesas não é reduzido por esta taxa.
|
||||
|
||||
**CBF16:** reutiliza identificadores e valores dos activosL6 suportados; imóvel novo do projecto ou máquinas industriais/agro-industriais das categorias correspondidas, com enquadramentoCBF3/9 e reconhecimento10 quando exigido (ou excepção identificada). Recorte inicial: primeiro exercício anual civil2026, método constante pela taxa normal máxima da tabela, activo desde01/01/2026, custo histórico novo, sem quotas anteriores/saída e sem cumulação de outros benefícios. Incrementa a taxa normal em50% e reutiliza limites de contabilização/saldo fiscal. Deduz apenas a diferença entre o mapa normal e o acelerado, sem alterar o activo de origem, os documentos ou os saldos oficiais. Quotas constantes gerais e demais cálculosL6 conservam o comportamento anterior quandoL7 está ausente.
|
||||
|
||||
| Caso sintético recuperado da API QA | Lucro/base e colecta de referênciaL6 | EfeitoL7 demonstrado | Resultado e limite |
|
||||
| --- | --- | --- | --- |
|
||||
| Despesa100 já acrescida36g | Lucro/base3230;colecta1033,60MZN | Novo ajustamento ao lucro0;imposto autónomo35 | Colecta combinada1068,60MZN;saldo finalL8indeterminado |
|
||||
| Classificação da mesma despesa em falta | Lucro/base3230;colecta1033,60MZN preservados | Imposto autónomo indeterminado | Colecta combinada indeterminada;sem perda dos cálculos independentes |
|
||||
| Condição negativa documentada na parcela | Ajustamento36g100 preservado | Parcela não aplicável;imposto autónomo0 justificado | Não confunde condição negativa com informação em falta |
|
||||
| Ausência declarada de despesas autónomas | Lucro/base3130;colecta1001,60MZN | Ausência com suporte;imposto autónomo0 | Ausência contraditória com despesa36g fica pendente |
|
||||
| Cooperativa integralmente abrangida | Base3130;colecta geral1001,60MZN | Taxa16%;colecta500,80MZN | Base/proveitos não alterados;sem retenções/créditos abatidos |
|
||||
| Máquina industrial existente:base1000,taxa10%,quota contabilística120 | Quota normal100;lucro/base6260;colecta2003,20MZN | Quota acelerada150,mas dedução limitada120;diferença adicional20 | Lucro/base6240;colecta1996,80MZN;sem deduzir50 nem150 outra vez |
|
||||
|
||||
**Cálculo → gravação → recuperação → relatório:** fotografia10 opcional no mesmo livro/snapshot, chave com entradas/contexto e histórico imutável anterior. SemL7, a fotografia9 aceite e a sua chave/totais permanecem iguais. Recalcular não acumula imposto nem duplica o acréscimo. HTML e dossier financeiro mostram referênciaL6, efeitosL7, parcelas autónomas, fonte, condições, período e limitações; recuperação e download demonstrados no componente real. Uma mudança de origem/entradas torna a fotografia anterior histórica; não altera o registo anterior. M20/M22 conservam a preparaçãoL6 de referência: **este incremento não transporta efeitosL7 para campos oficiais por aproximação**, nem resolve as divergências documentais existentes.
|
||||
|
||||
**Provas novas:** Wayfinder `--with-form` gerou routes/actions pelo wrapper QA; TypeScript e build QA passaram. Dezanove testes dirigidos novos passaram, incluindo comparação exacta com a fotografia9 aceite, duplicação, período curto, opção especial de cooperativa, ausência contraditória, dados em falta e contexto apresentado sem despejar snapshots internos. API privada:1teste/108asserções, `simulator_fiscal_delta_20261021_test`,127.0.0.1:55441, transacção com rollback e guarda de identidade/base; seis casos recuperados com plano/livro/históricos idênticos. UI do componente real: alteração de classificação, informação em falta, ausência, cooperativa mista, cumulação pendente, gravação/recuperação local e exportação; sem erros de página. A prova local é distinta da API. Não houve testes/escrita no activo nem repetição das suites funcionais aceites de L3, ISPC, câmbio ou L5/L6.
|
||||
|
||||
**Entrega agrupada preparada:** qualificação + despesas autónomas, cooperativa integralmente elegível e amortizaçãoCBF16 no recorte acima. Despesa autónoma e cooperativa também foram demonstradas juntas:parcela35 sem redução,colecta sobre a base516,80 e combinada551,80MZN no exemplo de base3230. Isto não autoriza cumulação cooperativa+CBF16: essa combinação mantém resultado dependente indeterminado. A futura instalação segue o procedimento Git existente, com backup/restauro fresco e conferência do delta; não foi executada nesta passagem.
|
||||
|
||||
**SaldoL7 na mesma matriz:**
|
||||
|
||||
| Natureza | Ainda fora da cobertura / exemplo | Condição concreta de retoma |
|
||||
| --- | --- | --- |
|
||||
| Código | Despesa autónoma fora de linha36g calculada ou parcela ainda não segregada | Implementar origem/segregação correspondente e prova da incidência;não copiar montante para uma segunda despesa |
|
||||
| Código | Cooperativa com actividade abrangida e outra não abrangida,ou rendimento sujeito a retenção | Segregar proveitos/custos/base e aplicar o tratamento apenas à parcela elegível;L5 conserva a retenção |
|
||||
| Código | CBF16 em imóvel reabilitado,outra categoria,quota inferior à máxima,método degressivo,duodécimos,quotas anteriores ou exercício posterior | Corresponder regra e cronologia respectivas e reutilizar o activo/quotas existentes;pendênciaL6 limita apenas o activo dependente |
|
||||
| Código/documento por caso | Cooperativa+CBF16 ou outro benefício positivo a cumular | Identificar compatibilidade,ordem e limites específicos;implementar a combinação,sem presumir soma de benefícios |
|
||||
| Código | Mais-valias61-A,demais isenções/deduçõesCBF17–19,regimes sectoriais/territoriais e operações especiais | Implementar a família/parcelas já delimitadas na secção anterior;período e fonte específicos,sem nova pesquisa transversal |
|
||||
| Documento por caso | Estatuto/título/excepçãoCBF ou prova das condições em falta;endereçoZEE sem estatuto | Juntar o elemento que a disposição exige ou registar condição negativa;localização isolada permanece insuficiente |
|
||||
| Transporte/documento | CampoM20/M22 para efeitoL7,edição divergente ou representação não correspondida | Correspondência do campo/edição e regra de representação demonstradas;preservar o cálculo independente exacto |
|
||||
| ÂmbitoL8 | Direito potencial ao créditoCBF15,aplicação anual de créditos,retenções,pagamentos e saldo final | Executar o mecanismo próprioL8;nenhuma dedução/compensação anual é presumida neste lote |
|
||||
|
||||
Fontes reutilizadas: inventário autorizado8143ficheiros; originaisCIRPC/alterações e CBF/compilaçãoAPIEX já identificados na delimitação,com hashes conservados. Sem activação por consulta ou revalidação jurídica genérica. Recibo: `docs/investmoz/simulations/irpc-l7-common-qa-20261026.json`. Provas locais: `outputs/irpc-l7-common/`; reprodução dirigida: `node --test tests/frontend/irpc-special.test.mjs`, `php tools/irpc-special-qa.php routes`, `php tools/irpc-special-qa.php test`, `tsc --noEmit`, build com `INVESTMOZ_QA_BUILD=1`.
|
||||
|
||||
## 26/10/2026 — preparação da entrega L7 e preservação do main concorrente
|
||||
|
||||
A entrega do âmbito QA `ab2ff2fd` integra o `main` concorrente `a2122dc3`, sem substituir as alterações de apresentação/navegação. Os seis ficheiros de execução L7 conservam exactamente o código QA;os oito ficheiros concorrentes conservam exactamente o código do main. Reutilizadas as provas19testes/API108/UI/tipos/build de L7. O conflito documental foi resolvido recuperando586linhas de histórico do manual que tinham sido removidas no merge concorrente,sem apagar a sua notaV2-01 no CSV. As3555linhas mantêm-se,com o único delta fiscal emAUD-SIM-INT02. O registo de instalação só será actualizado após backup/restauro fresco,conferência do destino e conclusão da entrega Git;esta nota não a antecipa.
|
||||
|
||||
@@ -0,0 +1,774 @@
|
||||
{
|
||||
"status": "installed_L6_exact_values_and_M20_M22_fields",
|
||||
"installed": {
|
||||
"status": "installed",
|
||||
"commit": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
|
||||
"release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/56475acb2f39e58cb51664913f7fb499f58eb7ab-694b3932",
|
||||
"database_migrations": 0,
|
||||
"content_imports": 0
|
||||
},
|
||||
"previous_baseline": "56475acb2f39e58cb51664913f7fb499f58eb7ab",
|
||||
"backup": {
|
||||
"stage": "/var/backups/investmoz-irpc-l6-values-forms-delivery-20261026/backup",
|
||||
"created_at": "2026-10-26T08:57:09Z",
|
||||
"target": {
|
||||
"database": "teste_investidor",
|
||||
"port": 5432
|
||||
},
|
||||
"tables": 174,
|
||||
"files_verified": 369,
|
||||
"dump_sha256": "97c1594250800531776ee204043a947b2522b3b63f6eb99d0ce8a74fd5af9213",
|
||||
"files_sha256": "12fd138ae415dbf2361d94987848db49a49580ef8c75cd6f8e4f5cb19d911e6a",
|
||||
"restore_verified": false
|
||||
},
|
||||
"restore": {
|
||||
"restore_verified": true,
|
||||
"tables_verified": 174,
|
||||
"container_network": "none",
|
||||
"database": "irpc_l5_restore_20261025",
|
||||
"port": 55441,
|
||||
"source_dump_sha256": "97c1594250800531776ee204043a947b2522b3b63f6eb99d0ce8a74fd5af9213",
|
||||
"active_database_writes": 0
|
||||
},
|
||||
"preservation": {
|
||||
"previous_release_preserved": "/var/www/investmoz-homologacao/releases/56475acb2f39e58cb51664913f7fb499f58eb7ab-694b3932",
|
||||
"installed": {
|
||||
"status": "installed",
|
||||
"commit": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
|
||||
"release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/56475acb2f39e58cb51664913f7fb499f58eb7ab-694b3932",
|
||||
"database_migrations": 0,
|
||||
"content_imports": 0
|
||||
},
|
||||
"runtime_files_verified": 4,
|
||||
"preserved_L3_ISPC_FX_runtime_files_verified": 50,
|
||||
"documentary_files_verified": 31,
|
||||
"persistent_files_and_env_verified": 369,
|
||||
"tables_compared": 174,
|
||||
"changed_tables": {
|
||||
"cache": {
|
||||
"before": {
|
||||
"rows": 106,
|
||||
"checksum": "a845f75cfcf49b86ebb8a3816f886a63"
|
||||
},
|
||||
"after": {
|
||||
"rows": 106,
|
||||
"checksum": "feb9a49bc8109928e6bfd6a7e1964d46"
|
||||
}
|
||||
},
|
||||
"sessions": {
|
||||
"before": {
|
||||
"rows": 13,
|
||||
"checksum": "5e210898e0b9fdf0049492cba9fe097b"
|
||||
},
|
||||
"after": {
|
||||
"rows": 14,
|
||||
"checksum": "19b40c4ac924c81749e7170841401696"
|
||||
}
|
||||
}
|
||||
},
|
||||
"preserved_counts": {
|
||||
"published_fiches": 29,
|
||||
"relations": 28,
|
||||
"geometries": 408
|
||||
},
|
||||
"migration_count": 0,
|
||||
"content_imports": 0,
|
||||
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
|
||||
"writes_by_verification": 0
|
||||
},
|
||||
"schema_permissions": {
|
||||
"schema_sha256": "5045b3e51d2185377aa3d9ac7fa07a44fad3ec620cdfa83ffe31c8884ee1601d",
|
||||
"roles_grants_sha256": "1530c33cb016e67bfdc64891ddfce7f185b13b56b2cd87c012871a685e118109",
|
||||
"filesystem_permissions": {
|
||||
".env": {
|
||||
"mode": 416,
|
||||
"uid": 1001,
|
||||
"gid": 33
|
||||
},
|
||||
"storage": {
|
||||
"mode": 1533,
|
||||
"uid": 1001,
|
||||
"gid": 33
|
||||
},
|
||||
"storage/app": {
|
||||
"mode": 1533,
|
||||
"uid": 1001,
|
||||
"gid": 33
|
||||
},
|
||||
"bootstrap/cache": {
|
||||
"mode": 1528,
|
||||
"uid": 1001,
|
||||
"gid": 33
|
||||
}
|
||||
},
|
||||
"comparison_identity": "postgres;catalogue read only;no passwords collected",
|
||||
"unchanged": true
|
||||
},
|
||||
"operational_delta": {
|
||||
"status": "operational_delta_reconciled",
|
||||
"comparison_identity": "postgres before/after;isolated restored baseline;no RLS visibility inference",
|
||||
"cache": "queue:restart;requestthrottle;identical home-sector cached value with refreshed expiry(HomeController remember10min);no deletedcache",
|
||||
"sessions": "anonymous sessions from delivery user-agent or exactUA/time correlated with nginx public request;deleted sessions individually expired beyond configured lifetime,normal database session garbage collection(config/session lottery2/100)",
|
||||
"delta": {
|
||||
"cache": {
|
||||
"before_rows": 106,
|
||||
"after_rows": 106,
|
||||
"changes": [
|
||||
{
|
||||
"key_sha256": "8d6ea77eb4b34d86d207362d583cfa8bf2880b907becd9b00398964482c6b4bd",
|
||||
"kind": "updated",
|
||||
"fields": [
|
||||
"value",
|
||||
"expiration"
|
||||
],
|
||||
"key_pattern": "investemoz-cache-{hash}",
|
||||
"is_queue_restart_key": false,
|
||||
"expiration_unchanged": false,
|
||||
"throttle_timer_pair": true,
|
||||
"same_value_home_cache_expiry_refresh": false
|
||||
},
|
||||
{
|
||||
"key_sha256": "2f251473865d14b953236ab95b1521764754d76abd79b58ca7d38c96dfe2fab1",
|
||||
"kind": "updated",
|
||||
"fields": [
|
||||
"value",
|
||||
"expiration"
|
||||
],
|
||||
"key_pattern": "investemoz-cache-{hash}:timer",
|
||||
"is_queue_restart_key": false,
|
||||
"expiration_unchanged": false,
|
||||
"throttle_timer_pair": true,
|
||||
"same_value_home_cache_expiry_refresh": false
|
||||
},
|
||||
{
|
||||
"key_sha256": "7f7dd83f47f5bf404d55e6e9f1367948721579970b195680645e356031a070ff",
|
||||
"kind": "updated",
|
||||
"fields": [
|
||||
"value",
|
||||
"expiration"
|
||||
],
|
||||
"key_pattern": "investemoz-cache-illuminate:queue:restart",
|
||||
"is_queue_restart_key": true,
|
||||
"expiration_unchanged": false,
|
||||
"throttle_timer_pair": false,
|
||||
"same_value_home_cache_expiry_refresh": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"sessions": {
|
||||
"before_rows": 13,
|
||||
"after_rows": 16,
|
||||
"changes": [
|
||||
{
|
||||
"key_sha256": "dd5c5235e9b48e28573884145b201d1f92cdabfea21a1602307c2569efe5d56c",
|
||||
"kind": "added",
|
||||
"fields": [
|
||||
"id",
|
||||
"ip_address",
|
||||
"user_agent",
|
||||
"payload",
|
||||
"last_activity"
|
||||
],
|
||||
"anonymous_user": true,
|
||||
"delivery_user_agent": true,
|
||||
"expired_before_comparison": false,
|
||||
"session_lifetime_minutes": 120,
|
||||
"anonymous_public_request_logged": true
|
||||
},
|
||||
{
|
||||
"key_sha256": "3da37b843afdc870f2c0b1336344e97218a264ab5a7b44825a194c89a48fab32",
|
||||
"kind": "added",
|
||||
"fields": [
|
||||
"id",
|
||||
"ip_address",
|
||||
"user_agent",
|
||||
"payload",
|
||||
"last_activity"
|
||||
],
|
||||
"anonymous_user": true,
|
||||
"delivery_user_agent": true,
|
||||
"expired_before_comparison": false,
|
||||
"session_lifetime_minutes": 120,
|
||||
"anonymous_public_request_logged": true
|
||||
},
|
||||
{
|
||||
"key_sha256": "f8e1fa11cf234c2c9f498402557b4c4aed3b89c83dace57af783ae840e4dc821",
|
||||
"kind": "added",
|
||||
"fields": [
|
||||
"id",
|
||||
"ip_address",
|
||||
"user_agent",
|
||||
"payload",
|
||||
"last_activity"
|
||||
],
|
||||
"anonymous_user": true,
|
||||
"delivery_user_agent": true,
|
||||
"expired_before_comparison": false,
|
||||
"session_lifetime_minutes": 120,
|
||||
"anonymous_public_request_logged": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"business_tables_to_confirm_separately": 172,
|
||||
"active_data_writes_by_comparison": 0,
|
||||
"restore_network": "none"
|
||||
},
|
||||
"public_verification": {
|
||||
"status": "installed_delta_verified",
|
||||
"served_revision": {
|
||||
"commit": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
|
||||
"branch": "main",
|
||||
"built_at": "2026-10-26T09:02:46.728717+00:00",
|
||||
"manifest_sha256": "e145286fdcb31ffe687568637861f7a630f9b943586d765f8d2e09957780ba14"
|
||||
},
|
||||
"manifest_hash_matches": true,
|
||||
"compiled_delta_markers": {
|
||||
"IRPC-normal-adjustments/9": [
|
||||
"assets/project-dossier-BwFhiBwz.js"
|
||||
],
|
||||
"Preparar representação dos valores e campos M20/M22": [
|
||||
"assets/services-DF985_Sf.js"
|
||||
],
|
||||
"Imposto contabilizado e resultado líquido": [
|
||||
"assets/services-DF985_Sf.js"
|
||||
],
|
||||
"Parcela de taxa reduzida para a colecta total302": [
|
||||
"assets/services-DF985_Sf.js"
|
||||
],
|
||||
"Saldo final — âmbito L8": [
|
||||
"assets/project-dossier-BwFhiBwz.js"
|
||||
],
|
||||
"Pressuposto documentado da conversão mensal para simulação": [
|
||||
"assets/services-DF985_Sf.js"
|
||||
],
|
||||
"Reutilizar selecção cambial": [
|
||||
"assets/services-DF985_Sf.js"
|
||||
]
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"file": "assets/services-DF985_Sf.js",
|
||||
"status": 200,
|
||||
"sha256": "0b96484962fa553514d85d8a13319a46b0aa6ca7e53135100cc2955ec559a713"
|
||||
},
|
||||
{
|
||||
"file": "assets/project-dossier-BwFhiBwz.js",
|
||||
"status": 200,
|
||||
"sha256": "0aa305851e99b8825bca18b21d69cf58d335f7499f09c1e4508084653325e88b"
|
||||
},
|
||||
{
|
||||
"file": "assets/project-dossier-document-HOU8u9Tk.js",
|
||||
"status": 200,
|
||||
"sha256": "03219fd42f932e0f8cc39e2be721a3a2b7cbb519d7d5378e8fb18567951b686d"
|
||||
},
|
||||
{
|
||||
"file": "assets/simulation-form-BqVD91Ek.js",
|
||||
"status": 200,
|
||||
"sha256": "85cbd533c5bc92af5a448db71da006d4346d2d0adb09dde825db0aa19ad5048c"
|
||||
}
|
||||
],
|
||||
"simulator_status": 200,
|
||||
"simulator_entry": "assets/app-C9PCQDSl.js",
|
||||
"existing_fiscal_availability": {
|
||||
"data": {
|
||||
"enabled": true,
|
||||
"coverage_start": "2026-01-01",
|
||||
"coverage_end": "2026-12-31",
|
||||
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
|
||||
}
|
||||
},
|
||||
"synthetic_private_writes": 0,
|
||||
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
|
||||
},
|
||||
"runtime_delta": [
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-form-preparation.tsx",
|
||||
"sha256_LF": "9080304461bc55e3add4cfc68d756ab969b0648e6419cfb5f7175eea6861a4ff"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-normal.tsx",
|
||||
"sha256_LF": "87178faabee3a6092ff14f74fb120841ca6d88ccc611006e549f49115596ca1f"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-form-preparation.ts",
|
||||
"sha256_LF": "61db2e8f6303f82194ff45782e8baf405bded489645cf1b90eae4945a454d649"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal.ts",
|
||||
"sha256_LF": "aa3e7305edd0957f52163ecd0f67f3d513c65d3f3c5d64fc1af1ff843bc9d729"
|
||||
}
|
||||
],
|
||||
"protected_runtime": [
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-period-fx.tsx",
|
||||
"sha256": "4b5f718b5ef415ecf5f96dabb0e3806254558c20905de6478e10dacf67569c49"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-schedules.tsx",
|
||||
"sha256": "3768c316d5887d337eb3647671863c9464f961d1df4703403e7d57e5641273ed"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-assessment.ts",
|
||||
"sha256": "a9b3ced852e37e3e087ce5dab1add4ec0737145ce19f61857a54d5d3d24a6f8c"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-base.ts",
|
||||
"sha256": "22019d678f6eb16fead2207dc3d3fa9fd63413c6254633c1ffd4f1c0320344ac"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-costs.ts",
|
||||
"sha256": "471457692a2a2f70a1bd1c7abb38d3ce42f07b62a63e5a4ab985ad1bbd068b46"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-depreciation.ts",
|
||||
"sha256": "1dad3053157aeac44f6d3bd58885cfc47a73c19d2808284c16931679dfe4291b"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-period-fx.ts",
|
||||
"sha256": "a2e7b066623eae17f0d8185d065d0adf5d3a485f780f8b09118a664dc4ba0531"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-depreciation.tsx",
|
||||
"sha256": "1f9918bfb435bb5b7c0ddd2fafd7bace2a02514c6ece04b93f15975e494a5f53"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-profit.ts",
|
||||
"sha256": "909e129a0245e6bf098317485b886a2d19e02c64bbfd9c6f718e98ec6b935b8d"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-schedules.ts",
|
||||
"sha256": "edfb6fd338411fa8f87a6bdf9a9d4fd5c6dc2fad9d2eb3d32f2640e2951cbbe9"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-costs.tsx",
|
||||
"sha256": "c4156916835daf0f33addf89dfedd40c31b8dc3297112cd98beac33422af274d"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-normal-forms.ts",
|
||||
"sha256": "4e986addb9f2d74e7a80345f8f1e4d8e0b2f562c867fa6eee84880d9f72a3649"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-taxable-base.tsx",
|
||||
"sha256": "e4fe9f66d35d24aa68fd87de6a5a6a0e901706b270c18962fd0c7ab00f9abd93"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-assessment.tsx",
|
||||
"sha256": "7174cc0160005a0c332ea40f02ba8a6d57985081b5ab45177ccd6e721bceea54"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/acquisition-beverage-restitution.tsx",
|
||||
"sha256": "6f44897b8b12569314551df0022c26da57a165634087942a724293e66837558d"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/fiscal-calculation-gaps.tsx",
|
||||
"sha256": "1dab6ceb73756d4e023096b3b2ba767aaa843ff6cc69046ea630ab449a00b0dd"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/fiscal-l3-preparation.tsx",
|
||||
"sha256": "e84a7b1ccadaa1b5bd78d778a3287f96ccaf530855eef404786cd7aa3d321b73"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-acquisitions.tsx",
|
||||
"sha256": "c206d4cfe575d6ba007aa2b425b5f898efa97e4162b8710e358b6ecfd9458542"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-operations.tsx",
|
||||
"sha256": "a7e55972fa790063dcf11945055de2af46a77db9e509900af22ede7ec47bb4cf"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-acquisition-bc.ts",
|
||||
"sha256": "b0ef55e0917bdb79f14b53ba9e95d73c08153befeb7d4ce73f81e6fb13992225"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-beverage-allocation.ts",
|
||||
"sha256": "32968d198c7fe0c53ca89641c22d5749be6636be2c79127b867e4e3afd0dd40d"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-beverage-restitution.ts",
|
||||
"sha256": "5c650cbd9469d5f99001f56fc4ff99ac973eb368036d4e96c6d171f1b220bd9e"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-calculation-gaps.ts",
|
||||
"sha256": "2e7d84a0c196bd5b56fd67cc1a389d43d5041894184e675680a4de3cd10b31a2"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-operations.ts",
|
||||
"sha256": "ec37b949f1233c5f5c14a87450c421ed29fabf1ed5b73fb32564564a2bc31f54"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/l3-form-preparation.ts",
|
||||
"sha256": "fc47f5fa5ec1420fbd847d0d081f00d99ebbb524164eef785b20877e0562f704"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/ispc-residuals.ts",
|
||||
"sha256": "40d5751c06c7c155ab4b7a17ee2d1653da2fbbf075807fbb8561cdbe19820955"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-ispc-residuals.tsx",
|
||||
"sha256": "a9219d6f41ccbd0ce45659d4f6aa0fa1c169a685840f5cb1e18daeca377d5e18"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/ispc-eligibility.ts",
|
||||
"sha256": "44675c5efacdc1ae19505667611ba3b522d3043cebacc8754597c3a68ca89d25"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-ispc-quarter.tsx",
|
||||
"sha256": "2c2555309b32d4261f14e7164f39314c9188129c2990357fc54090a2468dd2b4"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-ispc-withholding.tsx",
|
||||
"sha256": "e0445d015b72859e48726959aa52686f79b1cf5c2ade29751efa83257068b878"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/ispc-quarter.ts",
|
||||
"sha256": "f66bd52e9cdfe1ddaa6b00a931465862b3d890b9be216b7a056740f027f24129"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/ispc-withholding.ts",
|
||||
"sha256": "6c31b240299edd3262efa28f7f3d5aee21123f94e30ef4ab90e26c35777cb6e4"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-ispc-eligibility.tsx",
|
||||
"sha256": "f48dd4a8f87a994eda0447f81a463589905e5873b2e1044debac9d10825a880c"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-acquisitions.ts",
|
||||
"sha256": "cce283b1d0a07fb383fcb527225f4dd5bec829010a662cbaae1d60e595221977"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-modelo-a.ts",
|
||||
"sha256": "c641619a05613c1620385baad0e9ffbf810dd970aafb30e12b3a7f9a3bf11846"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-fx-selection.ts",
|
||||
"sha256": "9aa07ad443bc777b80510a3b5bd6aff9ddb9814d2450f3c690e531e74d71d998"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-fx-selection.tsx",
|
||||
"sha256": "39bb6d87d404745b0b66349bc11626545a3672ae27321ce9b4658416592059bf"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/business-financial-plan.ts",
|
||||
"sha256": "c20274722d1ffcd0360f041a6cacb5d868fe0621cb27a1aca6e06826612c3ebb"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/iva-currency-events.ts",
|
||||
"sha256": "cc9f2045d302d7987310da4006cc250fc5c99a27397918d166d649bfc32fab08"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-fx.ts",
|
||||
"sha256": "5c4a7a477429f8d775acf6db3e117008468f5554e5731dec81f60fbb75e948fb"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-withholdings.ts",
|
||||
"sha256": "8e5f3c035ce5e4d6c3fc82f933439ab580fa5519492f9c4d32cfb71b77b54803"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-withholdings.tsx",
|
||||
"sha256": "751af4fab346659bc5ccb08b8a2169769af7521ea0035050af32b41ea7f5aa76"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-interest.ts",
|
||||
"sha256": "f8e6390b3b2c58c296f7e3fd14576e06ae248bc0cabce1a666b7094611f2a7dd"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-mrfta.ts",
|
||||
"sha256": "76dcce8954f68b081d500be61de9c5b146a452a3eb578a0b78776ba9e1f8051c"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/irpc-mrfta-cases.ts",
|
||||
"sha256": "4266746076ab3f70312fd042351e24dd2f136c4f3e8a277b57dd97849a9f1862"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-irpc-mrfta.tsx",
|
||||
"sha256": "913d1bb4ac0fc59763cf5d27bc637f6a713b2050c4463748db554af4be451538"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/financial-fiscal-bridge.ts",
|
||||
"sha256": "5a30c501653b16b5fedcb12631ce81fcce4fe473aa542e94374986b3c50f2d33"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-form.tsx",
|
||||
"sha256": "85b024a7f45ceb52efd6ff1f21d0eab1fd8fcf1ab59e4b5302c08685235c472a"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/project-dossier.ts",
|
||||
"sha256": "a0909bbfcdf7e8542b010faa104fcb918e86ae38ddf096082d4d5be98d31b2b9"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/project-dossier-report.ts",
|
||||
"sha256": "5207a2ffeb208cd5ace6713038cee85208020ee618194dca7114e94fc3200b6c"
|
||||
}
|
||||
],
|
||||
"originals": [
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/AT-Comunicado-9-2026-ISPC.pdf",
|
||||
"sha256": "106f8a9ce9255c03549c70bf07fe999d32e6e55302d009b509862aa74ccb4973"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/AT-Modelo-30-ISPC.pdf",
|
||||
"sha256": "6802edd06b6ff638a0b851a3ec7ecf69af8f07840faa47446becad67d35d445c"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/AT-Modelo-B-Geral.pdf",
|
||||
"sha256": "bd977c7c59d4d98befd92e2c566b1bf168cb1343bb519f51b41a3807f431fc57"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/AT-MRFTA-19-39.pdf",
|
||||
"sha256": "8ea62c53066b482f87078a7a7b1ecf15ca98a12a122e8d7abca63acfc993186b"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BM-Mercado-Monetario-MAIBOR-20261025.html",
|
||||
"sha256": "00e8a7e0d3a1db4ca3beb56d5361b2084a0f1684f3d40fc1c203702a2190e063"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BR-16-I-Serie-2008-04-16.pdf",
|
||||
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BR-248-I-Suplemento-1-2025.pdf",
|
||||
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BR-89-I-Serie-2017-06-08.pdf",
|
||||
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BR-95-I-Suplemento-2025-05-21.pdf",
|
||||
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/BR252-I-Serie-2022-Lei20-PESOE.pdf",
|
||||
"sha256": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-22-2021-BR70.pdf",
|
||||
"sha256": "a8fac38dcfe08f9c7a8e46254cff10e1ec82fc4f7a8d88ad6e4fe7d91ffc21a5"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-27-2026-BR123.pdf",
|
||||
"sha256": "26249c3fa58f149c81de36e99d1aac2819a4771379d9e8833159660dabf539bb"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-29-1998-BR22-5-suplemento.pdf",
|
||||
"sha256": "6242cbe675faadf085f43f95ec8c7e8868aafe67c3b2ab2bb010992288f954f8"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-3-2011-BR-11-I-mineiros.pdf",
|
||||
"sha256": "5bca1133666ba9c69870b89823420175b7b5b8d0eccb667ecdf5c29716f3b6be"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-37-2023-BR124.pdf",
|
||||
"sha256": "7e680b191481faa0e2e9057fa5053587eb2a29d1d8c819e0eb9f02814255a04c"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Decreto-9-2008-BR16.pdf",
|
||||
"sha256": "96fccdecbfdc11c9eafb90fbc6c7bc259f88bbd4c7507d1ac3af1fa03f960697"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
|
||||
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-14-1992-BR42.pdf",
|
||||
"sha256": "089fff7423e99a70a230a73ca379e4ea3a91d124703f91016e57ff82794b9e56"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-17-2022-BR251-exemplar-MCNet5.pdf",
|
||||
"sha256": "14eb34f0af91a8f5cb1770c7b52d6ff839c6818302d1ed96d79afbfb9fe999d4"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-17-2022-IPP-BR250-Parlamento.pdf",
|
||||
"sha256": "978cd22403ffd336a631704ecd7a5bbd814a427c815b9acdaca5515591dd9e2a"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-19-2013-BR76.pdf",
|
||||
"sha256": "bba96d645cc935ffc3d1a79b9f0f73ac1c693d6459c2ad41f56cd2841accae76"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-19-2017-IRPS-BR-OCAM.pdf",
|
||||
"sha256": "c3a0186cb9ad090d7a9533006295dc9bb6a62ad0d6150173cbd49dba4ee4b52d"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-2-2011-BR-1-4-suplemento-MCNet.pdf",
|
||||
"sha256": "a7543a68cc3287a46a83c39a04821b40f649dd06c4e9b5dc51ff0b47fba08899"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-20-2009-BR36-AT-exemplar19.pdf",
|
||||
"sha256": "fc1c8144db42960cbf73e717e095896f511ece0f907f58f78819b27d6917a7ee"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
|
||||
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-34-2007-BR52.pdf",
|
||||
"sha256": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-4-1994-BR37-3-suplemento.pdf",
|
||||
"sha256": "210df9db8980d0a5690cd187a6eeec7e37a900d743e39062c16f4e0d12215c7e"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-4-2012-BR3.pdf",
|
||||
"sha256": "b8845cef41dcbd9ba50c43dbfa743a56030dd3d348242a107e1ae30279eec121"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/Lei-7-1991-Partidos-IFES.pdf",
|
||||
"sha256": "6b783a0bb3330688ef10660a58060d9724aa2da6a873d234fe902f0eaaeda42d"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/PT-MZ-CDT-1992.pdf",
|
||||
"sha256": "d504e1024b28aee5c6acf4592acb96ec9c915a8414f67a61ab6984d6acf9df9d"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/source-archive/PT-MZ-Protocolo-2009.pdf",
|
||||
"sha256": "f353773dcf41f09f4daa6cf5ba5a5f7994f3e02615867c2dcffc61c3d901bf9b"
|
||||
}
|
||||
],
|
||||
"pipeline_checks": [
|
||||
"OK (1 test, 3106 assertions)",
|
||||
"built in 31.73s",
|
||||
"OK (59 tests, 317 assertions)",
|
||||
"# tests 988",
|
||||
"# pass 988",
|
||||
"# fail 0"
|
||||
],
|
||||
"accepted_QA_proofs": {
|
||||
"frontend_tests": 15,
|
||||
"API_tests": 1,
|
||||
"API_assertions": 97,
|
||||
"database": "127.0.0.1:55441/simulator_fiscal_delta_20261021_test;DatabaseTransactions rollback",
|
||||
"routes_actions": "existing guarded procedure",
|
||||
"typescript": "passed",
|
||||
"build": "passed",
|
||||
"UI": "actual component/classification/taxstate/fractions/recover/export/independentcolecta",
|
||||
"accepted_proofs": "reused"
|
||||
},
|
||||
"accepted_proofs_reused": true,
|
||||
"manually_repeated_accepted_suites": false,
|
||||
"sequence": {
|
||||
"mapped": "net3120+depreciation10→profit/base3130→colecta1001.60MZN unchanged",
|
||||
"fraction": "M20 amount300.50=601/2 kept exact;no fiscal rounding presumed",
|
||||
"own_booktax": "net2800 known with booktax320;ownM22code pending,not213 ofothers",
|
||||
"FX_assumptions": "preserved and explicit;no fiscal annual conversion confirmation",
|
||||
"final_payable": null,
|
||||
"final_recoverable": null,
|
||||
"final_balance_scope": "L8"
|
||||
},
|
||||
"remaining_L6": {
|
||||
"installed_scope_reference": "5aaf1a56",
|
||||
"implementation_remaining": [
|
||||
{
|
||||
"case": "Amortizações e quota de aluguer36h restantes",
|
||||
"example": "Ar condicionadoII/3/3,12,5%,fora dos10códigos implementados;bem usado com vida esperada e quotas anteriores documentadas.",
|
||||
"resume": "Acrescentar catálogo e variantes previstas nas fontes aceites:usados/abertura/reparações/reavaliação,uso intensivo/concessões/peças/intangíveis,transição e excepções de método/vida útil,art17 em período curto e quota36h automática. Implementar só o caso escolhido e provar o delta;sem aguardar validação genérica daAT.",
|
||||
"affected": "Só activo,método ou quota ainda não suportados;amortizações demonstradas preservadas."
|
||||
},
|
||||
{
|
||||
"case": "Custos e periodizações específicos",
|
||||
"example": "Campanha de lançamento300 com imputação por3exercícios;obra com receita antecipada positiva em vez do zero demonstrado.",
|
||||
"resume": "Implementar36-A e articulação com36n,reforços financeiros28(3),19(5)/19(6) e18(6–10),com saldos/condições do caso. Autorização de mudança de método apenas quando a disposição aplicável a exigir. Provisões sectoriais dependem primeiro da norma específica indicada abaixo.",
|
||||
"affected": "Só campanha,obra ou periodização específica;limites/provisões ordinários e casos já demonstrados mantidos."
|
||||
},
|
||||
{
|
||||
"case": "Períodos e sequência de perdas",
|
||||
"example": "Transição de4meses seguida dos períodos posteriores:aplicar a exclusão de contagem de41(5) ao período7(4)d,sem contar apenas anos civis.",
|
||||
"resume": "Representar a sequência efectiva de períodos/perdas e acrescentar datas parciais,liquidação/períodos superiores a12meses e outros exercícios com regra/taxa aplicável. Não há nova pesquisa necessária para repetir o recorte de meses completos2026 já entregue.",
|
||||
"affected": "Só período ou utilização de perda dependente;lucro independente e semestres demonstrados preservados."
|
||||
},
|
||||
{
|
||||
"case": "Desdobramentos contabilísticos e quadros/anexos M20/M22 restantes",
|
||||
"example": "Imposto próprio200 já incluído no plano e320 exterior:discriminar as duas componentes sem duplicar gasto;contas fora das6linhas financeiras ainda não transportadas.",
|
||||
"resume": "Acrescentar o desdobramento e as correspondências dos quadros/anexos escolhidos,reutilizando dados existentes. Campos sem correspondência aguardam a referência concreta abaixo;os outros componentes podem ser implementados/provados separadamente.",
|
||||
"affected": "Só componente/conta/campo ainda não suportado;valores e campos correspondidos preservados."
|
||||
},
|
||||
{
|
||||
"case": "Saldos em moeda estrangeira",
|
||||
"example": "Crédito final100USD não é soma das receitas convertidas por mês.",
|
||||
"resume": "Implementar reconciliação de saldo e conversão pela data/regra que vier identificada,usando o motor cambial já entregue. A selecção mensal para simulação continua disponível;esta tarefa não cria outro mecanismo cambial.",
|
||||
"affected": "Só saldo/conversão fiscal dependente da regra;plano e pressupostos mensais permanecem disponíveis."
|
||||
}
|
||||
],
|
||||
"documentary_clarifications": [
|
||||
{
|
||||
"case": "Edição e campos M20/M22",
|
||||
"example": "M20A.1/D35 remete201/quadro8;PDF M22 usa200/quadro10. Imposto próprio320 não pertence ao213 de outrem;quota recuperada−26 não tem campo de dedução confirmado.",
|
||||
"resume": "Obter exemplar compatível ou instrução que identifique edição/período,campo e sentido do transporte. Para periodização/obras/reversões ainda sem campo,identificar a correspondência específica. Até informação nova,manter valores/efeitos sem código presumido e não repetir pesquisa.",
|
||||
"affected": "Só transporte,campo e somas dependentes;resultado líquido próprio,260/278/300 e demais campos conhecidos mantidos."
|
||||
},
|
||||
{
|
||||
"case": "Representação fiscal de fracções",
|
||||
"example": "M20:300,50=601/2MZN,num exemplar que pede meticais sem centavos;M22:1/300MZN não é um número exacto de cêntimos.",
|
||||
"resume": "Identificar instrução de representação/arredondamento da edição/campo ou esclarecimento específico. Conservar a fracção até lá;não deduzir regra de arredondamento apenas do rótulo «sem centavos».",
|
||||
"affected": "Só transcrição não exactamente representável;inteirosM20,cêntimos exactosM22 e cálculo racional preservados."
|
||||
},
|
||||
{
|
||||
"case": "Articulação de limites em combinações não demonstradas",
|
||||
"example": "Combustível100,comprovado80,viatura de passageiros sem excepção:36h/i com36(4). Provisão de créditos200 num período curto de3meses:limite anual por corresponder.",
|
||||
"resume": "Esclarecer especificamente a articulação h/i/36(4) e a base/limite dos períodos curtos de publicidade/créditos,se houver proporcionalização aplicável. Não somar exclusões,anualizar ou repartir por presunção. Retomar só perante referência/resposta concreta para o exemplo.",
|
||||
"affected": "Só combinação ou limite do período;casos independentes com regra já aplicada mantidos."
|
||||
},
|
||||
{
|
||||
"case": "Regra fiscal de conversão anual",
|
||||
"example": "PlanoUSD com64MZN/USD por mês é pressuposto sintético de simulação,não confirmação da data/taxa fiscal anual ou da cotação do saldo final.",
|
||||
"resume": "Identificar disposição/âmbito,data,base e taxa/boletim aplicáveis ao resultado e,quando necessário,ao saldo. Reutilizar o motor existente e demonstrar só a correspondência nova;sem taxa actual por defeito ou nova ronda da pesquisa anterior.",
|
||||
"affected": "Só confirmação fiscal anual e saldo dependente;conversões mensais documentadas de simulação mantidas com os avisos."
|
||||
},
|
||||
{
|
||||
"case": "Norma sectorial de provisões reguladas",
|
||||
"example": "Provisão200 de uma entidade financeira sujeita ao28d não herda os1,5%/6% do regime ordinário29.",
|
||||
"resume": "Identificar sector,regulador,norma de supervisão aplicável e saldos/condições necessários,antes da implementação específica. A fonte oficial fornecida é aceite;falta a regra concreta do caso,não certificação genérica da fonte.",
|
||||
"affected": "Só provisão regulada respectiva;provisões ordinárias demonstradas preservadas."
|
||||
}
|
||||
],
|
||||
"sources_reused": [
|
||||
{
|
||||
"path": "docs/investmoz/simulations/irpc-l6-costs-provisions-timing-qa-20261026.json",
|
||||
"sha256": "b12df09899cbbf53fdb066f24dbe4852400b2d4bff01627e16e64c56f9860780"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/irpc-l6-depreciation-qa-20261026.json",
|
||||
"sha256": "167267f23a59cebfa874e46bf0238675fd7f92b4ee4e4c12cd0fda6ff3a99df5"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/irpc-l6-periods-fx-qa-20261026.json",
|
||||
"sha256": "a893c0608977a4b2b2a40379b2d54534f3ae96b082c0c64e43b4e2392b9152d9"
|
||||
},
|
||||
{
|
||||
"path": "docs/investmoz/simulations/irpc-l6-values-forms-qa-20261026.json",
|
||||
"sha256": "2fcf80b2493ab8472f247091ba59a9e6f84d00bab210ab667cefcba241c29a0d"
|
||||
}
|
||||
],
|
||||
"existing_matrix_row": "AUD-SIM-INT02",
|
||||
"new_research": false,
|
||||
"new_functional_tests": false,
|
||||
"L6_integrally_complete": false,
|
||||
"operational_closure_decision_recorded": false,
|
||||
"L7_L8_own_scopes": true
|
||||
},
|
||||
"L6_complete": false,
|
||||
"operational_closure_decision_recorded": false,
|
||||
"L7_L8_own_scopes": true,
|
||||
"proof_files": {
|
||||
"backup.txt": "cf1f754f54ef98184562357b55acd12b479beea5e92b2212c75d1d03560b2274",
|
||||
"balance-section.md": "26907b1ecd068819e8fb6fd9635b103750c7459d614dce28d653d6a96018fcbb",
|
||||
"balance.json": "ea400110264925daa84380c370c4b5129de4ef7923b3d1af5433a7a7879d8e00",
|
||||
"installed-protected.txt": "e5d8530e3a6be9ed5f88a326d45b0748eca4faa1b5c64f39591930be329e41ec",
|
||||
"installed-public-delta.json": "90d2a9a7d9fffb076e2773b4174fc20ce9c577d73c8154140e2b504e683638cf",
|
||||
"installed-public.txt": "074fc7a1bc4055cd357764670c17a29f678bd1d3351da918813555d53b50a5e5",
|
||||
"integration.txt": "828ca004ab574a3a687b7dc3a3176b0b4da81797af770a5e81694f5f7cee543f",
|
||||
"manifest-served.json": "e145286fdcb31ffe687568637861f7a630f9b943586d765f8d2e09957780ba14",
|
||||
"operational-delta.txt": "15c876ffa750c6b26d7cef368d78df21c101bf82dbb08e1dc7beb533bac2022c",
|
||||
"preflight.txt": "8e90d1a978640df1dd161c54ab80c0e2b4c8046d3bd484bcc866ca40046081a5",
|
||||
"preparation.json": "7df19578178f3ad55deb2c6fe8a48cb44233e64859be2e47b51b6f8e56da55e4",
|
||||
"progress.txt": "dcc4abfd0fded4529ecf58b4a24392d3e3ae5071cad1474421ff3768da8e786d",
|
||||
"restore.txt": "48c8f2a3b060ce86164273f072978eeffb57d01aa365e4c71a34cab2c1925b44",
|
||||
"schema-permissions-after.txt": "76b5a4d8af11e4898a205062766cfb7ab6ec0783200e77e60a1927aa1ca18597",
|
||||
"schema-permissions-before.txt": "0ab7c964792acdd8917bce256c472e55e034b103500a58b49f020b5084823ed7",
|
||||
"status-final.txt": "7dedabc439b43d2938fa524a275a48b350cb948d6e4bfb1d551eac66d877fff1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,570 @@
|
||||
{
|
||||
"status": "L7_common_qualification_autonomous_expenses_cooperative_acceleration_QA_prepared_not_installed",
|
||||
"recorded_date": "2026-10-26",
|
||||
"installed_baseline": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
|
||||
"scope_baseline": "d37fffb2d2eacef6300f1c81fc29993178532f35",
|
||||
"branch": "codex/irpc-l7-common-autonomous-qa-20261026",
|
||||
"version": "IRPC-normal-adjustments/10",
|
||||
"installed": false,
|
||||
"L6_operational_scope_preserved": true,
|
||||
"IRPC_integrally_complete": false,
|
||||
"runtime_delta": {
|
||||
"resources/js/lib/irpc-special.ts": "5d261cdb54506bd892fa49776bb53a20600e62e64a4c180ef26cdcdb8b6a3806",
|
||||
"resources/js/components/simulation-irpc-special.tsx": "9ccd89e46703f9dd14c1110459b22673623a19bd652d137f40ec83e0f7c223db",
|
||||
"resources/js/lib/irpc-normal.ts": "7e63e7e5928a90c5305fd1fca49db883fec32666381ee99ae6fa4b06c711d9a7",
|
||||
"resources/js/lib/irpc-normal-depreciation.ts": "00ba22e449b23e570bfbbf3895bd334029a16f938d5a5ff999ca67b4318f58c3",
|
||||
"resources/js/components/simulation-irpc-normal.tsx": "e01e54dee4cd2555a8a27ed77512cf220056b5899ea9dacbaaae6d4063ce2d42",
|
||||
"resources/js/lib/project-dossier-report.ts": "cba66c88391da83b4fdb345a9570eca5ae83979cbbd508eb44b53995d812718d"
|
||||
},
|
||||
"cases_recovered": {
|
||||
"expense": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": {
|
||||
"numerator": "35",
|
||||
"denominator": "1"
|
||||
},
|
||||
"combined_colecta": {
|
||||
"numerator": "5343",
|
||||
"denominator": "5"
|
||||
},
|
||||
"expense_status": "calculated",
|
||||
"cooperative_status": "absent",
|
||||
"acceleration_status": "absent",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
},
|
||||
"missing": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": null,
|
||||
"combined_colecta": null,
|
||||
"expense_status": "indeterminate",
|
||||
"cooperative_status": "absent",
|
||||
"acceleration_status": "absent",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
},
|
||||
"negative": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "3230",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"combined_colecta": {
|
||||
"numerator": "5168",
|
||||
"denominator": "5"
|
||||
},
|
||||
"expense_status": "calculated",
|
||||
"cooperative_status": "absent",
|
||||
"acceleration_status": "absent",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
},
|
||||
"absent": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "5008",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "5008",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"combined_colecta": {
|
||||
"numerator": "5008",
|
||||
"denominator": "5"
|
||||
},
|
||||
"expense_status": "absent",
|
||||
"cooperative_status": "absent",
|
||||
"acceleration_status": "absent",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
},
|
||||
"cooperative": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "5008",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "3130",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "2504",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"combined_colecta": {
|
||||
"numerator": "2504",
|
||||
"denominator": "5"
|
||||
},
|
||||
"expense_status": "absent",
|
||||
"cooperative_status": "calculated",
|
||||
"acceleration_status": "absent",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
},
|
||||
"acceleration": {
|
||||
"L6_reference": {
|
||||
"taxableProfit": {
|
||||
"numerator": "6260",
|
||||
"denominator": "1"
|
||||
},
|
||||
"taxableBase": {
|
||||
"numerator": "6260",
|
||||
"denominator": "1"
|
||||
},
|
||||
"colecta": {
|
||||
"numerator": "10016",
|
||||
"denominator": "5"
|
||||
}
|
||||
},
|
||||
"L7_profit": {
|
||||
"numerator": "6240",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_base": {
|
||||
"numerator": "6240",
|
||||
"denominator": "1"
|
||||
},
|
||||
"L7_colecta": {
|
||||
"numerator": "9984",
|
||||
"denominator": "5"
|
||||
},
|
||||
"autonomous_tax": {
|
||||
"numerator": "0",
|
||||
"denominator": "1"
|
||||
},
|
||||
"combined_colecta": {
|
||||
"numerator": "9984",
|
||||
"denominator": "5"
|
||||
},
|
||||
"expense_status": "absent",
|
||||
"cooperative_status": "absent",
|
||||
"acceleration_status": "calculated",
|
||||
"additional_depreciation_deduction": {
|
||||
"numerator": "20",
|
||||
"denominator": "1"
|
||||
},
|
||||
"history_versions": [
|
||||
"IRPC-normal-adjustments/1",
|
||||
"IRPC-normal-adjustments/2",
|
||||
"IRPC-normal-adjustments/3",
|
||||
"IRPC-normal-adjustments/4",
|
||||
"IRPC-normal-adjustments/5",
|
||||
"IRPC-normal-adjustments/6",
|
||||
"IRPC-normal-adjustments/7",
|
||||
"IRPC-normal-adjustments/8",
|
||||
"IRPC-normal-adjustments/9"
|
||||
],
|
||||
"final_balance": {
|
||||
"scope": "L8",
|
||||
"payable": null,
|
||||
"recoverable": null
|
||||
}
|
||||
}
|
||||
},
|
||||
"source_inventory": {
|
||||
"files_reused": 8143,
|
||||
"broad_search_repeated": false,
|
||||
"receipt": "irpc-l7-scope-20261026.json",
|
||||
"sources": [
|
||||
{
|
||||
"id": "CIRPC",
|
||||
"title": "Lei34/2007",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\Lei-34-2007-BR52.pdf",
|
||||
"bytes": 1676884,
|
||||
"sha256": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e",
|
||||
"references": "PDF5/p768(59):12,14,15; PDF15–16:54–56; PDF17/p768(71):61",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "IRPC-2026",
|
||||
"title": "Lei12/2025",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
|
||||
"bytes": 440018,
|
||||
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
|
||||
"references": "PDF18–20; PDF20:art2/61-A,art3,art6; vigência01/01/2026",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "IRPC-2022",
|
||||
"title": "Lei20/2022",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR252-I-Serie-2022-Lei20-PESOE.pdf",
|
||||
"bytes": 17966640,
|
||||
"sha256": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d",
|
||||
"references": "PDF1/p2731:61(2), termo31/12/2025",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "CBF-local",
|
||||
"title": "Lei4/2009",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\CBF-Lei4-2009-APIEX.pdf",
|
||||
"bytes": 10998765,
|
||||
"sha256": "4231a5b6783e603cedb98992f3e93ecaf1c1d5be341b093560cf2fdd0845b0dc",
|
||||
"references": "Original local disponível; scan sem extracção textual útil; cotejo textual pela compilação oficial",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false,
|
||||
"authorised_original": "\\\\Mac\\Home\\Documents\\TEMPO\\Portal Tempo\\Legislacao\\Apiex\\3.-Lei-no4-2009-de-12-de-Janeiro-Codigo-dos-Beneficios-Fiscais.pdf"
|
||||
},
|
||||
{
|
||||
"id": "APIEX",
|
||||
"title": "Compilação oficial APIEX",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\APIEX-legislacao-investimentos-2025.pdf",
|
||||
"bytes": 6467655,
|
||||
"sha256": "ba1e9eaabfec5d0c4cb2d9f2444a6860f7a90f222034764197829be402d408ed",
|
||||
"references": "pp8–32:Lei8/2023; pp36–59:Decreto8/2024; pp64–92:CBF4/2009; p68:9/10;p71–74:15–19",
|
||||
"official_url": "https://pt.apiex.gov.mz/wp-content/uploads/2025/02/LEGISLACAO-DE-INVESTIMENTOS-EM-MOCAMBIQUE.pdf",
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "RCBF",
|
||||
"title": "Decreto56/2009",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\Decreto56-2009-BR40.pdf",
|
||||
"bytes": 422005,
|
||||
"sha256": "6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017",
|
||||
"references": "Procedimento já cotejado em iva-l1-p084-p085-model-i1-cotejo-20261024.json; não estende isenções IVA a IRPC",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
}
|
||||
],
|
||||
"document_consultation_activates_calculation": false
|
||||
},
|
||||
"coverage": {
|
||||
"optional_input_backward_compatible": true,
|
||||
"accepted_version9_current_key_and_result_unchanged_without_L7": true,
|
||||
"expense_source": "calculated36(1)g schedule ID;full amount reused;no parallel amount",
|
||||
"expense_rate": "35/100",
|
||||
"expense_additional_profit_adjustment": "0",
|
||||
"cooperative_rate": "32/100 × 1/2 =16/100;eligible ordinary base only",
|
||||
"accelerated_rate": "normal maximum table rate ×3/2;lower optional quota not covered;first full civil2026,new supported asset,prior quotas zero",
|
||||
"accelerated_deduction": "min calculated quota/accounted eligible amount/fiscal remaining balance;only difference over normal map",
|
||||
"mixed_cases": "cooperative+autonomous expense demonstrated;cooperative+CBF16 not supported",
|
||||
"context": "reuses documented sector/territory/provenance;no benefit by location alone;raw snapshots not dumped in report",
|
||||
"states": [
|
||||
"information_missing",
|
||||
"declared_absence",
|
||||
"not_applicable_or_negative_condition",
|
||||
"calculated"
|
||||
],
|
||||
"report": "same normalReportRows/HTML and financial project dossier;L6 reference separated from L7 effects",
|
||||
"final_settlement": "not calculated;L8"
|
||||
},
|
||||
"pending": {
|
||||
"code": [
|
||||
"autonomous expenses outside already-calculated36g parcel",
|
||||
"mixed cooperative income/withheld parcels",
|
||||
"CBF16 rehabilitated/other categories/lower optional quota/methods/months/prior quotas/later years",
|
||||
"specific benefit combinations and cumulation",
|
||||
"61-A capital gains and other previously delimited treatment families",
|
||||
"L7 official form transport"
|
||||
],
|
||||
"documents_per_case": [
|
||||
"individual status/title/exception and qualification proof when required by applicable norm",
|
||||
"parcel/limit/order/cumulation/chronology not evidenced",
|
||||
"affected form field/edition/representation correspondence"
|
||||
],
|
||||
"resume_conditions": "same existing matrix/manual L7 QA section;no blanket validation or repeated transversal research",
|
||||
"L6_pending_unchanged": true,
|
||||
"L8_annual_credit_application_retentions_payments_final_balance_separate": true
|
||||
},
|
||||
"checks": {
|
||||
"new_frontend_tests": 19,
|
||||
"API_tests": 1,
|
||||
"API_assertions": 108,
|
||||
"API_database": "simulator_fiscal_delta_20261021_test",
|
||||
"API_host": "127.0.0.1",
|
||||
"API_port": 55441,
|
||||
"API_transaction_rollback": true,
|
||||
"QA_identity_guard": true,
|
||||
"Wayfinder_generated_with_form": true,
|
||||
"typescript_noEmit": true,
|
||||
"QA_build": true,
|
||||
"API_recovered_to_HTML_and_financial_dossier_cases": 6,
|
||||
"UI": {
|
||||
"actualComponent": true,
|
||||
"expenseL6Addback100Autonomous35": true,
|
||||
"missingClassificationDoesNotEraseNormalProfit": true,
|
||||
"absenceExplicit": true,
|
||||
"cooperative16MixedCaseBlockedOnly": true,
|
||||
"acceleratedQuota150LimitedToAccounted120": true,
|
||||
"netAdditionalDeduction20": true,
|
||||
"cumulationMissingExplicit": true,
|
||||
"saveRecoveryDownload": true,
|
||||
"finalBalanceL8Unknown": true,
|
||||
"errors": []
|
||||
},
|
||||
"old_functional_suites_repeated": false,
|
||||
"building_and_lower_optional_quota_cases": true
|
||||
},
|
||||
"preservation": {
|
||||
"baseline": "d37fffb2d2eacef6300f1c81fc29993178532f35",
|
||||
"files_compared": 662,
|
||||
"only_existing_changed": [
|
||||
"resources/js/lib/irpc-normal-depreciation.ts",
|
||||
"resources/js/lib/irpc-normal.ts",
|
||||
"resources/js/lib/project-dossier-report.ts"
|
||||
],
|
||||
"protected_code_schema_config_routes_contract_files": 576,
|
||||
"originals": {
|
||||
"docs/investmoz/simulations/source-archive/AT-Comunicado-9-2026-ISPC.pdf": "106f8a9ce9255c03549c70bf07fe999d32e6e55302d009b509862aa74ccb4973",
|
||||
"docs/investmoz/simulations/source-archive/AT-MRFTA-19-39.pdf": "8ea62c53066b482f87078a7a7b1ecf15ca98a12a122e8d7abca63acfc993186b",
|
||||
"docs/investmoz/simulations/source-archive/AT-Modelo-30-ISPC.pdf": "6802edd06b6ff638a0b851a3ec7ecf69af8f07840faa47446becad67d35d445c",
|
||||
"docs/investmoz/simulations/source-archive/AT-Modelo-B-Geral.pdf": "bd977c7c59d4d98befd92e2c566b1bf168cb1343bb519f51b41a3807f431fc57",
|
||||
"docs/investmoz/simulations/source-archive/BM-Mercado-Monetario-MAIBOR-20261025.html": "00e8a7e0d3a1db4ca3beb56d5361b2084a0f1684f3d40fc1c203702a2190e063",
|
||||
"docs/investmoz/simulations/source-archive/BR-16-I-Serie-2008-04-16.pdf": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
|
||||
"docs/investmoz/simulations/source-archive/BR-248-I-Suplemento-1-2025.pdf": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
|
||||
"docs/investmoz/simulations/source-archive/BR-89-I-Serie-2017-06-08.pdf": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
|
||||
"docs/investmoz/simulations/source-archive/BR-95-I-Suplemento-2025-05-21.pdf": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
|
||||
"docs/investmoz/simulations/source-archive/BR252-I-Serie-2022-Lei20-PESOE.pdf": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-22-2021-BR70.pdf": "a8fac38dcfe08f9c7a8e46254cff10e1ec82fc4f7a8d88ad6e4fe7d91ffc21a5",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-27-2026-BR123.pdf": "26249c3fa58f149c81de36e99d1aac2819a4771379d9e8833159660dabf539bb",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-29-1998-BR22-5-suplemento.pdf": "6242cbe675faadf085f43f95ec8c7e8868aafe67c3b2ab2bb010992288f954f8",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-3-2011-BR-11-I-mineiros.pdf": "5bca1133666ba9c69870b89823420175b7b5b8d0eccb667ecdf5c29716f3b6be",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-37-2023-BR124.pdf": "7e680b191481faa0e2e9057fa5053587eb2a29d1d8c819e0eb9f02814255a04c",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-9-2008-BR16.pdf": "96fccdecbfdc11c9eafb90fbc6c7bc259f88bbd4c7507d1ac3af1fa03f960697",
|
||||
"docs/investmoz/simulations/source-archive/Lei-13-2016-CIVA-BR-156-10-suplemento.pdf": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
|
||||
"docs/investmoz/simulations/source-archive/Lei-14-1992-BR42.pdf": "089fff7423e99a70a230a73ca379e4ea3a91d124703f91016e57ff82794b9e56",
|
||||
"docs/investmoz/simulations/source-archive/Lei-17-2022-BR251-exemplar-MCNet5.pdf": "14eb34f0af91a8f5cb1770c7b52d6ff839c6818302d1ed96d79afbfb9fe999d4",
|
||||
"docs/investmoz/simulations/source-archive/Lei-17-2022-IPP-BR250-Parlamento.pdf": "978cd22403ffd336a631704ecd7a5bbd814a427c815b9acdaca5515591dd9e2a",
|
||||
"docs/investmoz/simulations/source-archive/Lei-19-2013-BR76.pdf": "bba96d645cc935ffc3d1a79b9f0f73ac1c693d6459c2ad41f56cd2841accae76",
|
||||
"docs/investmoz/simulations/source-archive/Lei-19-2017-IRPS-BR-OCAM.pdf": "c3a0186cb9ad090d7a9533006295dc9bb6a62ad0d6150173cbd49dba4ee4b52d",
|
||||
"docs/investmoz/simulations/source-archive/Lei-2-2011-BR-1-4-suplemento-MCNet.pdf": "a7543a68cc3287a46a83c39a04821b40f649dd06c4e9b5dc51ff0b47fba08899",
|
||||
"docs/investmoz/simulations/source-archive/Lei-20-2009-BR36-AT-exemplar19.pdf": "fc1c8144db42960cbf73e717e095896f511ece0f907f58f78819b27d6917a7ee",
|
||||
"docs/investmoz/simulations/source-archive/Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
|
||||
"docs/investmoz/simulations/source-archive/Lei-34-2007-BR52.pdf": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e",
|
||||
"docs/investmoz/simulations/source-archive/Lei-4-1994-BR37-3-suplemento.pdf": "210df9db8980d0a5690cd187a6eeec7e37a900d743e39062c16f4e0d12215c7e",
|
||||
"docs/investmoz/simulations/source-archive/Lei-4-2012-BR3.pdf": "b8845cef41dcbd9ba50c43dbfa743a56030dd3d348242a107e1ae30279eec121",
|
||||
"docs/investmoz/simulations/source-archive/Lei-7-1991-Partidos-IFES.pdf": "6b783a0bb3330688ef10660a58060d9724aa2da6a873d234fe902f0eaaeda42d",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-CDT-1992.pdf": "d504e1024b28aee5c6acf4592acb96ec9c915a8414f67a61ab6984d6acf9df9d",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-Protocolo-2009.pdf": "f353773dcf41f09f4daa6cf5ba5a5f7994f3e02615867c2dcffc61c3d901bf9b"
|
||||
},
|
||||
"active_writes": 0,
|
||||
"migrations": 0,
|
||||
"permission_changes": false
|
||||
},
|
||||
"evidence_directory": "outputs/irpc-l7-common",
|
||||
"delivery": {
|
||||
"prepared_only": true,
|
||||
"Git_branch_isolated": true,
|
||||
"active_installation": false,
|
||||
"fresh_backup_restore_and_delta_check_required_at_future_installation": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
{
|
||||
"status": "L6_operational_demonstrated_scope_accepted_L7_delimited_not_implemented",
|
||||
"recorded_date": "2026-10-26",
|
||||
"authority": {
|
||||
"origin": "express_user_instruction",
|
||||
"decision": "L6 operacional no âmbito demonstrado, com limitações explícitas; delimitar L7; L8 conserva liquidação final",
|
||||
"new_generic_approval_required": false
|
||||
},
|
||||
"baseline": {
|
||||
"installed_commit": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
|
||||
"reused_delivery_receipt": "irpc-l6-values-forms-delivery-20261026.json",
|
||||
"documentation_parent": "45fd591c7faa765f33de0a0b9000c3ceb4057abe",
|
||||
"root_documentation_parent": "31651a76b11ed50576c52cd274e3c59cda0f8924"
|
||||
},
|
||||
"L6": {
|
||||
"operational_scope_accepted": true,
|
||||
"integrally_complete": false,
|
||||
"existing_code_pending_groups": 5,
|
||||
"existing_documentary_pending_groups": 5,
|
||||
"pending_list": "same matrix/manual: saldo consolidado de L6",
|
||||
"old_pending_decision_records_preserved_as_history": true,
|
||||
"dependent_cases_only_blocked": true,
|
||||
"accepted_proofs_reused": true
|
||||
},
|
||||
"L7": {
|
||||
"state": "delimited; no new executable treatment",
|
||||
"context_reused": [
|
||||
"opportunity/dossier snapshots",
|
||||
"sector and territorial IDs/labels/provenance",
|
||||
"subject/NUIT/residence/EP/period",
|
||||
"business_plan_snapshot",
|
||||
"modelo_a_snapshot.irpcNormal versions",
|
||||
"asset and expense IDs/previous quotas",
|
||||
"exact rational values and demonstrated form mappings"
|
||||
],
|
||||
"location_grants_benefit": false,
|
||||
"effect_types": [
|
||||
"profit_adjustment",
|
||||
"taxable_base_deduction",
|
||||
"rate_by_eligible_parcel",
|
||||
"separate_autonomous_tax",
|
||||
"potential_credit_entitlement_for_L8"
|
||||
],
|
||||
"families": [
|
||||
"61(4) expenses autonomous tax",
|
||||
"61-A capital gains autonomous tax from2026",
|
||||
"CIRPC9–14 entity exemptions/cooperative12",
|
||||
"CBF16 accelerated depreciation",
|
||||
"CBF17–19 deductions/magnifications",
|
||||
"CBF15 potential investment credit; annual use L8",
|
||||
"CBF sector/territory specific provisions",
|
||||
"special operations54–56/41-A and specifically mapped sector regimes"
|
||||
],
|
||||
"first_increment": [
|
||||
"common qualification, provenance, period and separate effects",
|
||||
"61(4) expense35% with existing36g addback, no duplicate",
|
||||
"missing-information and negative-condition cases"
|
||||
],
|
||||
"next_compatible_cases": [
|
||||
"cooperative12 eligible parcel",
|
||||
"CBF16 supported asset and reconciled prior quotas"
|
||||
],
|
||||
"not_implemented_yet": [
|
||||
"specific qualification/persistence",
|
||||
"new treatment calculations and per-parcel reconciliation",
|
||||
"treatment-specific reporting/exports"
|
||||
],
|
||||
"documentary_pending_scope": "Only individual status/title where required, parcel/limit/chronology, unmapped specific sector norm or affected form edition/field; examples and resume conditions in same matrix/manual",
|
||||
"historical_mutation_permitted": false
|
||||
},
|
||||
"L8": {
|
||||
"retentions_payments_annual_credit_application_final_settlement": true,
|
||||
"final_balance_calculated": false
|
||||
},
|
||||
"source_inventory": {
|
||||
"reused_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\ispc-l4a-20261025\\preservation-before-tests.json",
|
||||
"files": 8143,
|
||||
"fresh_broad_scan": false,
|
||||
"sources": [
|
||||
{
|
||||
"id": "CIRPC",
|
||||
"title": "Lei34/2007",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\Lei-34-2007-BR52.pdf",
|
||||
"bytes": 1676884,
|
||||
"sha256": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e",
|
||||
"references": "PDF5/p768(59):12,14,15; PDF15–16:54–56; PDF17/p768(71):61",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "IRPC-2026",
|
||||
"title": "Lei12/2025",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
|
||||
"bytes": 440018,
|
||||
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
|
||||
"references": "PDF18–20; PDF20:art2/61-A,art3,art6; vigência01/01/2026",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "IRPC-2022",
|
||||
"title": "Lei20/2022",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR252-I-Serie-2022-Lei20-PESOE.pdf",
|
||||
"bytes": 17966640,
|
||||
"sha256": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d",
|
||||
"references": "PDF1/p2731:61(2), termo31/12/2025",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "CBF-local",
|
||||
"title": "Lei4/2009",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\CBF-Lei4-2009-APIEX.pdf",
|
||||
"bytes": 10998765,
|
||||
"sha256": "4231a5b6783e603cedb98992f3e93ecaf1c1d5be341b093560cf2fdd0845b0dc",
|
||||
"references": "Original local disponível; scan sem extracção textual útil; cotejo textual pela compilação oficial",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false,
|
||||
"authorised_original": "\\\\Mac\\Home\\Documents\\TEMPO\\Portal Tempo\\Legislacao\\Apiex\\3.-Lei-no4-2009-de-12-de-Janeiro-Codigo-dos-Beneficios-Fiscais.pdf"
|
||||
},
|
||||
{
|
||||
"id": "APIEX",
|
||||
"title": "Compilação oficial APIEX",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\APIEX-legislacao-investimentos-2025.pdf",
|
||||
"bytes": 6467655,
|
||||
"sha256": "ba1e9eaabfec5d0c4cb2d9f2444a6860f7a90f222034764197829be402d408ed",
|
||||
"references": "pp8–32:Lei8/2023; pp36–59:Decreto8/2024; pp64–92:CBF4/2009; p68:9/10;p71–74:15–19",
|
||||
"official_url": "https://pt.apiex.gov.mz/wp-content/uploads/2025/02/LEGISLACAO-DE-INVESTIMENTOS-EM-MOCAMBIQUE.pdf",
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
},
|
||||
{
|
||||
"id": "RCBF",
|
||||
"title": "Decreto56/2009",
|
||||
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\Decreto56-2009-BR40.pdf",
|
||||
"bytes": 422005,
|
||||
"sha256": "6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017",
|
||||
"references": "Procedimento já cotejado em iva-l1-p084-p085-model-i1-cotejo-20261024.json; não estende isenções IVA a IRPC",
|
||||
"official_url": null,
|
||||
"available_for_consultation": true,
|
||||
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
|
||||
"new_calculation_activation": false
|
||||
}
|
||||
],
|
||||
"rendered_pages_reviewed": [
|
||||
"CIRPC PDF5",
|
||||
"CIRPC PDF17",
|
||||
"APIEX PDF68",
|
||||
"APIEX PDF72",
|
||||
"Lei12/2025 PDF20"
|
||||
],
|
||||
"no_period_extension_presumed": "61(2) Law20/2022 ends31/12/2025; no automatic2026 rate",
|
||||
"availability_is_not_rule_activation": true
|
||||
},
|
||||
"preservation": {
|
||||
"source_archive_files": {
|
||||
"docs/investmoz/simulations/source-archive/AT-Comunicado-9-2026-ISPC.pdf": "106f8a9ce9255c03549c70bf07fe999d32e6e55302d009b509862aa74ccb4973",
|
||||
"docs/investmoz/simulations/source-archive/AT-Modelo-30-ISPC.pdf": "6802edd06b6ff638a0b851a3ec7ecf69af8f07840faa47446becad67d35d445c",
|
||||
"docs/investmoz/simulations/source-archive/AT-Modelo-B-Geral.pdf": "bd977c7c59d4d98befd92e2c566b1bf168cb1343bb519f51b41a3807f431fc57",
|
||||
"docs/investmoz/simulations/source-archive/AT-MRFTA-19-39.pdf": "8ea62c53066b482f87078a7a7b1ecf15ca98a12a122e8d7abca63acfc993186b",
|
||||
"docs/investmoz/simulations/source-archive/BM-Mercado-Monetario-MAIBOR-20261025.html": "00e8a7e0d3a1db4ca3beb56d5361b2084a0f1684f3d40fc1c203702a2190e063",
|
||||
"docs/investmoz/simulations/source-archive/BR-16-I-Serie-2008-04-16.pdf": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
|
||||
"docs/investmoz/simulations/source-archive/BR-248-I-Suplemento-1-2025.pdf": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
|
||||
"docs/investmoz/simulations/source-archive/BR-89-I-Serie-2017-06-08.pdf": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
|
||||
"docs/investmoz/simulations/source-archive/BR-95-I-Suplemento-2025-05-21.pdf": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
|
||||
"docs/investmoz/simulations/source-archive/BR252-I-Serie-2022-Lei20-PESOE.pdf": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-22-2021-BR70.pdf": "a8fac38dcfe08f9c7a8e46254cff10e1ec82fc4f7a8d88ad6e4fe7d91ffc21a5",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-27-2026-BR123.pdf": "26249c3fa58f149c81de36e99d1aac2819a4771379d9e8833159660dabf539bb",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-29-1998-BR22-5-suplemento.pdf": "6242cbe675faadf085f43f95ec8c7e8868aafe67c3b2ab2bb010992288f954f8",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-3-2011-BR-11-I-mineiros.pdf": "5bca1133666ba9c69870b89823420175b7b5b8d0eccb667ecdf5c29716f3b6be",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-37-2023-BR124.pdf": "7e680b191481faa0e2e9057fa5053587eb2a29d1d8c819e0eb9f02814255a04c",
|
||||
"docs/investmoz/simulations/source-archive/Decreto-9-2008-BR16.pdf": "96fccdecbfdc11c9eafb90fbc6c7bc259f88bbd4c7507d1ac3af1fa03f960697",
|
||||
"docs/investmoz/simulations/source-archive/Lei-13-2016-CIVA-BR-156-10-suplemento.pdf": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
|
||||
"docs/investmoz/simulations/source-archive/Lei-14-1992-BR42.pdf": "089fff7423e99a70a230a73ca379e4ea3a91d124703f91016e57ff82794b9e56",
|
||||
"docs/investmoz/simulations/source-archive/Lei-17-2022-BR251-exemplar-MCNet5.pdf": "14eb34f0af91a8f5cb1770c7b52d6ff839c6818302d1ed96d79afbfb9fe999d4",
|
||||
"docs/investmoz/simulations/source-archive/Lei-17-2022-IPP-BR250-Parlamento.pdf": "978cd22403ffd336a631704ecd7a5bbd814a427c815b9acdaca5515591dd9e2a",
|
||||
"docs/investmoz/simulations/source-archive/Lei-19-2013-BR76.pdf": "bba96d645cc935ffc3d1a79b9f0f73ac1c693d6459c2ad41f56cd2841accae76",
|
||||
"docs/investmoz/simulations/source-archive/Lei-19-2017-IRPS-BR-OCAM.pdf": "c3a0186cb9ad090d7a9533006295dc9bb6a62ad0d6150173cbd49dba4ee4b52d",
|
||||
"docs/investmoz/simulations/source-archive/Lei-2-2011-BR-1-4-suplemento-MCNet.pdf": "a7543a68cc3287a46a83c39a04821b40f649dd06c4e9b5dc51ff0b47fba08899",
|
||||
"docs/investmoz/simulations/source-archive/Lei-20-2009-BR36-AT-exemplar19.pdf": "fc1c8144db42960cbf73e717e095896f511ece0f907f58f78819b27d6917a7ee",
|
||||
"docs/investmoz/simulations/source-archive/Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
|
||||
"docs/investmoz/simulations/source-archive/Lei-34-2007-BR52.pdf": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e",
|
||||
"docs/investmoz/simulations/source-archive/Lei-4-1994-BR37-3-suplemento.pdf": "210df9db8980d0a5690cd187a6eeec7e37a900d743e39062c16f4e0d12215c7e",
|
||||
"docs/investmoz/simulations/source-archive/Lei-4-2012-BR3.pdf": "b8845cef41dcbd9ba50c43dbfa743a56030dd3d348242a107e1ae30279eec121",
|
||||
"docs/investmoz/simulations/source-archive/Lei-7-1991-Partidos-IFES.pdf": "6b783a0bb3330688ef10660a58060d9724aa2da6a873d234fe902f0eaaeda42d",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-CDT-1992.pdf": "d504e1024b28aee5c6acf4592acb96ec9c915a8414f67a61ab6984d6acf9df9d",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-Protocolo-2009.pdf": "f353773dcf41f09f4daa6cf5ba5a5f7994f3e02615867c2dcffc61c3d901bf9b"
|
||||
},
|
||||
"source_archive_count": 31,
|
||||
"root_existing_source_files": 28,
|
||||
"root_preexisting_branch_absences": [
|
||||
"docs/investmoz/simulations/source-archive/BM-Mercado-Monetario-MAIBOR-20261025.html",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-CDT-1992.pdf",
|
||||
"docs/investmoz/simulations/source-archive/PT-MZ-Protocolo-2009.pdf"
|
||||
],
|
||||
"root_absences_introduced_by_this_change": false,
|
||||
"runtime_schema_config_permissions_changed": false,
|
||||
"active_writes": 0,
|
||||
"migrations": 0,
|
||||
"imports": 0,
|
||||
"deployment": false,
|
||||
"functional_tests_repeated": false,
|
||||
"existing_accepted_proofs_reused": true
|
||||
},
|
||||
"validation": {
|
||||
"expected_tracked_delta": [
|
||||
"docs/investmoz/consolidated-review-matrix-2026-10-03.md",
|
||||
"docs/investmoz/unification/traceability-and-manual.md",
|
||||
"docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv",
|
||||
"docs/investmoz/simulations/irpc-l7-scope-20261026.json"
|
||||
],
|
||||
"csv_only_changed_id": "AUD-SIM-INT02",
|
||||
"scope_present_in_existing_matrix_and_manual": true,
|
||||
"new_backlog_created": false
|
||||
}
|
||||
}
|
||||
@@ -2522,8 +2522,8 @@ As estimativas são **horas de trabalho técnico**, não calendário nem mediç
|
||||
| L3 — IVA: saldo e fecho do Modelo A | Totais14–18 quando todas as parcelas estão determinadas | Campos19–27 aplicáveis, transporte de crédito, rectificações/substituição, imposto a entregar e pedido de reembolso; estados documentados e relação com tesouraria; via de restituição de bebidas13(2), identificada porG4D e ainda não apurada, conforme procedimento próprio | Execuções mensais, parcelas L1/L2, documentos e histórico | L1/L2 para apuramento integral; saldo anterior identificado e procedimento de reembolso aplicável. Pedido não significa deferimento/recebimento | 48–80 h |
|
||||
| L4 — ISPC: elegibilidade e apuramento | Campos de enquadramento e motor genérico | Regime/actividade/volume elegível, opções/exclusões, escalões/taxas aplicáveis, mínimo, trimestre e retenções específicas; comparação só entre regimes admissíveis | Vendas por actividade, custos, NUIT, natureza jurídica e residência confirmada | Lei9/2025 e regulamentação/período; distinguir receita anual, trimestre e excesso | 40–64 h |
|
||||
| L5 — retenções IRPC e guias | Documentos de compras/vendas e guia M/39 como exemplar | Rendimento pago/recebido, entidade que retém, residente/não residente/EP, evento temporal, excepções e casos digitais/e-money; guia e comprovativo ligados à operação | Contrapartes, facturas, pagamentos, período, moeda, oportunidade | Artigos aplicáveis por rendimento, taxa/convenção se invocada; corrigir remissões do exemplar. Sem submissão electrónica AT presumida | 32–56 h |
|
||||
| L6 — IRPC anual: regime normal | Disponível043dd35d:lucro6730→base4430→colecta1417,60MZN;custos limitados/provisões/reversões/periodização demonstrados;âmbitos anteriores preservados;a2de7259 preservado | Saldo curtoL6:categorias de custos/limites e periodização específica;restantes activos/métodos;períodos curtos/conversão anual;representação de fracções;camposM20/M22 e transporte entre edições. Ver seis condições na secção «saldo curto deL6». L7/L8 próprios | Plano financeiro,dados comuns,activos/livros e histórico;retenções/pagamentos/créditos anuais reservadosL8 | CódigoIRPC/período/caso;benefícios e tratamentos especiais anuaisL7;sem dependência genérica do fechoL8 | Estimativa inicial48–80h;saldo não reestimado |
|
||||
| L7 — IRPC: tratamentos específicos | Contexto sectorial/territorial e fontes cadastradas | Casos identificados: tributação autónoma de despesas e mais-valias, taxas reduzidas/cooperativas, isenções/benefícios e operações especiais com condições rastreadas | Base L6, despesas, activos, relação territorial documentada | Disposição e período por tratamento; localização por si só não concede benefício. Lista de tratamentos aplicáveis explicitada no lote | 48–80 h |
|
||||
| L6 — IRPC anual: regime normal | Disponível5aaf1a56:percurso normal demonstrado atécolecta,períodos/moedas e preparação parcialM20/M22 | Operacional no âmbito demonstrado por decisãoTempo26/10;limitações explícitas;5grupos código+5documentais preservados;sem conclusão integral | Plano financeiro,dados comuns,activos/livros e histórico;retenções/pagamentos/créditos anuaisL8 | Pendências bloqueiam só os casos dependentes;L7/L8 próprios | Estimativa inicial48–80h;saldo não reestimado |
|
||||
| L7 — IRPC: tratamentos específicos | Qualificação/despesas61(4),cooperativa12 eCBF16 no recorte demonstrado emQA,fotografia10;sem instalação | Gravação/recuperação/relatório com referênciaL6 separada dos efeitosL7;informação em falta/ausência/não aplicação explícitas. Restantes famílias,parcelas mistas,cumulação e transporte oficial pendentes por caso | Sujeito/período/contexto,despesas36g e activos/quotasL6 reutilizados,sem benefício por localização | Fontes,condições/período e critérios de retoma na secção L7QA;L8 mantém liquidação anual | Estimativa inicial48–80h;saldo não reestimado |
|
||||
| L8 — IRPC: liquidação e pagamentos | Parcelas L5–L7 e formulários originais | PPC/PEC, deduções/créditos, dupla tributação quando aplicável, saldo anual a pagar/recuperar; calendário e reconciliação com pagamentos | Retenções, colecta, saldos anteriores, pagamentos/comprovativos | Base anterior para PPC/PEC, regras de limitação/transporte; não usar cinco anos ou compensação automática sem cotejo específico | 32–56 h |
|
||||
| L9 — INSS: contribuição social | Massa salarial agregada e referência TCO3%+4% | Trabalhadores, remuneração/base contributiva, exclusões, empregador/trabalhador, TCO/TCP, declaração e encargos por período | Equipa/custos, entidade e calendário; cadastro de pessoa partilhado com L10 | Regulamento e alterações aplicáveis, natureza do vínculo; confirmar base antes da taxa. Contribuição social, distinta dos impostos | 24–40 h |
|
||||
| L10 — IRPS: retenção mensal e líquido | Entrada IRPS, custos salariais e escalões anuais documentais | Tabela mensal própria, remunerações/benefícios, situação pessoal relevante, retenção, salário líquido e contribuição ligada a L9 | Mesmo trabalhador/folha salarial, pagamentos e retenções | Tabela mensal do período, residência e condições familiares necessárias; não dividir escalões anuais por12 | 40–64 h |
|
||||
@@ -5672,3 +5672,719 @@ Preservação por comparação dos registos preexistentes: **32 documentos, 31 r
|
||||
**Guia da equipa no destino:** abrir a [gestão única](https://teste-investidor.tempo.co.mz/gestao-conteudos) → **Gerir conteúdos, versões e histórico** → escolher **Rascunhos**, pesquisar o título e abrir **Editar artigo** ou **Ler / pré-visualizar artigo**. Corrigir o texto e o tratamento de imagem → **Pré-visualizar alterações** → **Guardar artigo como rascunho** → **Ler revisão guardada**. Usar **Voltar ao acervo para metadados e publicação** para corrigir título, descrição, origem, enquadramento, acesso e direitos. **Publicar** continua separado, conforme a autorização e os campos existentes, quando a equipa decidir publicar. Guardar uma edição de um artigo publicado retira-o até nova publicação expressa. Não há comandos ou intervenção do Codex neste percurso corrente.
|
||||
|
||||
Recibo: [cadastro, acessos e preservação no destino](legacy-editorial-installation-receipt-20261022.json). A [lista única dos 50](../v2/auditoria-portal/legado-correspondencia-integral.md) e o CSV existente contêm os endereços **privados** efectivos dos 28; não são links de artigos já publicados. Capturas locais em `outputs/legacy-editorial-install-20261022/`, incluindo `editor-recovered-homologation.png`. Mantêm-se dois originais incompletos e a revisão editorial dos textos pela equipa. A Tempo não declarou ter conferido commit, pacote ou guia. **A carteira vazia e os projectos âncora continuam como falha separada, sem causa confirmada; esta entrega não a resolve.** (Saldo histórico desta entrega de 22/10; superado pela reposição auditada e reconciliação de 23/10 descritas acima. Não representa o estado actual.)
|
||||
|
||||
## 25/10/2026 — E entregue; continuação de L3
|
||||
|
||||
E instalado em `7ad187f9`, candidata `47086625`; C/D `de36f028` e recibo `46944402` preservados. Backup novo e restauro real isolado confirmam174tabelas;369ficheiros/configuração e12ficheiros de execução conferidos. Manifesto/revisão,marcadoresE/C/D e simuladorHTTP200 confirmados. Apenas cache/sessions podem variar;sem migrações,importações ou recálculo de históricos. Pipeline:746testes frontend,59testesAPI/317asserções econtrolo1/3106 passaram.
|
||||
|
||||
Mantém16MZN deIVA documental,zero de dedução nesta via,12reconhecidos,7recebidos e5porreceber. Não éIVA do fornecimento nem pagamento bancário. Recibo:`docs/investmoz/simulations/l3-e-delivery-20261025.json`. L3permanece aberto;repartição/reconciliação,apuramentos eformalidades avançam separadamente emQA. L1conserva129fechos eP058/P084/P085/P001;L2conserva18(6)+mista,sucessivas/plurianuais,erros/incobráveis. ProcedimentoTempo intacto;estatísticas/IAadiadas.
|
||||
|
||||
## 25/10/2026 — inventário antes dos novos testes de parcelas/indeterminados/formalidades
|
||||
|
||||
E7ad187f9/recibodbeaf886 eC/Dde36f028/46944402 preservados;129fechosL1 eP058/P084/P085/P001,limitaçõesL2 eprocedimentoTempo permanecem na matriz existente. Sem perdas confirmadas no delta;provas aceites reutilizadas. Inventário completo das fontes fiscais eanexos acessíveis nas pastas autorizadas Notas/Modelos antes de seleccionar consulta:outputs/iva-l3-e-partitions-20261025/preservation-before-tests.json. Escolha técnica de representação:intervalos doIVA documental evitam sobreposição,sem criar requisito organizacional ou novo benefício. Desenvolvimento e novos testes apenasQA.
|
||||
|
||||
## 25/10/2026 — parcelas de E, diagnóstico e preparação formal em QA
|
||||
|
||||
E entregue mantém `7ad187f9`, recibo `dbeaf886`, com16MZNdocumentais/zero de dedução nesta via/12reconhecidos/7recebidos/5porreceber. Este incremento permanece emQA,sem instalação,migrações ou importações. C/D eprocedimentoTempo preservados;L3continua aberto.
|
||||
|
||||
Na restituição existente,escolher linha integral ou parcela documentada. Os limites representam partes doIVA documental:0–6 e6–16 não se sobrepõem num total16. A parte não utilizada não recebe destino/dedução automáticos. Para uma dedução efectiva anterior estável6,indicar a sua afectação documentada0–6;somente6–16=10 pode seguirE. O livro original de dedução mantém-se. Sem suporte,montantes históricos divergentes,sobreposição ou dedução integral16,não há restituição presumida. A anulação/redução da dedução exige fundamento,sequência e tratamento fiscal próprios ainda não automatizados nesta via;editar a aquisição ou preparar uma correcção não liberta a parcela. Não usar51(4),que exige manutenção do âmbito/direito,como regra automática de mudança paraE. Livros/históricos efectivos recuperados impedem duplicação;isto não é reconciliação central daAT.
|
||||
|
||||
O componente de aquisições mostra,por contexto,os cálculos guardados indeterminados:montantes em falta,motivo,dados necessários econdição de resolução. Base/margem,localização ou momento determinados não significamIVA liquidado. Fornecimento13(2),margens/viagens/eventos e integrações ainda limitadas conservam IVA próprio indeterminado;os16da aquisição não o substituem. Os mesmos diagnósticos seguem no relatório,com entradas congeladas preservadas. O inventário de67contextos/331ocorrências do corpusQA inclui provas negativas deliberadas,não331novos requisitos. Evidência:outputs/iva-l3-e-partitions-20261025/calculation-inventory.json;matriz existente mantémAUD-SIM-INT02.
|
||||
|
||||
Preparação dos quadros8–11 doVATReturn recebido:AB19/20/22–27;C21–24;D25/26/27. ExportaçãoHTML para conferência reutiliza apenas campos identificados,resultados congelados efracções exactas;campos05/06,assinaturas,meio de pagamento e uso dos serviços não são preenchidos por presunção. Egera dossier de apoio próprio,sem o transformar em campo27. A exportação não atesta edição electrónica nem submissãoAT. DependênciaC:ModeloB/RCIVA15 versus substituiçãoModeloA do exemplar;D:exemplares/instruções dosDecretos78/2017,30/2022,52/2025 identificados antes;E:modelo/procedimento específico13(2). Retomar cada dependência apenas com exemplar/instrução pertinente;sem pesquisas repetidas sem evidência nova e sem importar condições deD paraE.
|
||||
|
||||
Verificação:43testesfrontend dirigidos;API1teste/105asserções,QA55441 comrollback erecuperação exacta;TypeScript/build passaram. UIreal:rejeita5–16 sobre dedução0–6;repor6–16 recupera pedido10;gravar/recuperar/relatar preserva restantes mapas;HTML realmente descarregado econferido.37fontes/anexos acessíveis conservaram hashes. A baseQA estava parada;arranque erecuperação automática concluídos antes do teste privado,sem usar a baseactiva. ReciboQA:docs/investmoz/simulations/l3-e-additional-coverage-qa-20261025.json.
|
||||
|
||||
L1conserva129fechos,P058/P084/P085 eP00105/06. L2mantém18(6)+mista,sucessivas/plurianuais,erros/incobráveis. ProcedimentoTempo pedido→decisão→formulário intacto. Estatísticas/IAadiadas.
|
||||
|
||||
Limites das parcelas também aceitam fracções exactas,por exemplo16/3. Dedução anterior16/3 eparcelaE32/3 somam16sem aproximação;indicar5.333333 como início da restituição sobrepõe-se à dedução exacta e é recusado. Escolha técnica de representação,sem nova condição fiscal ou organizacional.
|
||||
|
||||
## 25/10/2026 — P084/P085 concluídos no procedimento operacional da Tempo
|
||||
|
||||
Decisão expressa desta sessão:retirada a pesquisa de outro procedimento como condição de fecho. A origem é o procedimento operacional comunicado pelaTempo,não uma publicação normativa. Referência implementada:pedido escrito ao Ministério das Finanças/AT → decisão → submissão externa do formulário com o despacho de isenção anexado.
|
||||
|
||||
P084conserva pedido fundamentado epossibilidade de deferimento ou recusa. P085conserva finalidade de emergência eassistência humanitária. Emambos,o benefício limita-se aos bens,operações,período econdições do despacho. Pedido apresentado não concede automaticamente;decisão eformulário mantêm documentos,identificadores/hash e histórico. O fecho é do percurso implementado,não declaração de submissão real de todos os pedidos ou de benefício geral.
|
||||
|
||||
Prova já aceite reutilizada:iva-l1-tempo-offers-fx-qa-20261025.json,UIgravação/recuperação/relatório,pacotesP084/P085 eentrega e38aa749 eml1-tempo-offers-fx-delivery-20261025.json,preservada até7ad187f9. Os caminhos deworkflow/anexos mantêm o delta aceite. Sem nova pesquisa,ronda funcional,alteração de código,escrita de dados activos ou validação jurídica genérica. P084/P085 ficam concluídos nesse âmbito na matriz existente;131itensL1concluídos,restamP058 eP00105/06,total133. As condições anteriores de pesquisa/correspondência normativa ficam superadas;linhas anteriores integralmente preservadas no recibo de fecho.
|
||||
|
||||
Recibo:docs/investmoz/simulations/l1-p084-p085-tempo-operational-closure-20261025.json. L2residuais eL3aberto mantêm-se. Eentregue7ad187f9/recibodbeaf886 eQAb189d0fa preservados. Estatísticas/IAadiadas.
|
||||
|
||||
## 25/10/2026 — incremento QA, saldo concreto deL3 e apresentação directa deP001
|
||||
|
||||
InstaladoE7ad187f9:16MZN deIVA documental,zero de dedução nesta via,12reconhecidos,7recebidos e5porreceber. C/Dentreguesde36f028 preservados. b189d0fa permanece emQA;acrescenta repartição6+10numa linha16,reconciliação de dedução efectiva estável6com restituição complementar10,fracções exactas16/3+32/3,impedimento de sobreposição e preservação de versões. Não automatiza anulação da dedução original. Acrescenta diagnóstico por cálculo epreparaçãoHTML dos campos identificadosAB19/20/22–27,C21–24,D25–27;Econtinua dossier próprio,sem campo27. Provas anteriores reutilizadas:43testesfrontend,API1/105,tipos/build,gravação/recuperação/relatório eexportação;nenhuma nova ronda nesta explicação.
|
||||
|
||||
SaldoL3:entregar o incrementoQA pelo processo existente;implementar regularizações/sequência para mudança ou anulação de deduções eversões divergentes;resolver os cálculos próprios ainda indeterminados de fornecimentos/margem/viagens/eventos e suas integrações;completar formalidadesC(ModeloB/RCIVA15 versus exemplarModeloA),D(exemplares/instruções específicos78/2017,30/2022,52/2025)eE(modelo/procedimento13(2)). Cada item econdição concreta constam do recibo existente l3-e-additional-coverage-qa-20261025.json:current_L3_balance_20261025. Limite dos livros recuperados não cria obrigação nova de reconciliação centralAT. IVA da aquisição nunca substitui IVA do fornecimento. Sem pesquisa repetida sem evidência nova.
|
||||
|
||||
P001:mostrados directamente os campos do original recebido NovoModeloA.docx,hash62c198e9,imagem incorporada7ae7f02e. Campo05:"Vendas isentas com direito à dedução". Campo06:"Op.do n.º1,al.b)doart.º18doCIVA",agrupado com07sob"Isentas". Recorte:outputs/l3-saldo-p001-20261025/campos-05-06-exemplar-recebido.png. Pergunta específica àTempo:que operações pretende inscrever no06,distintas das do05? P001permanece pendente desse esclarecimento;original/remissão não foram corrigidos nem substituídos por outra edição. Nenhuma nova pesquisa jurídica,teste,importação ou alteração de dados activos.
|
||||
|
||||
L1mantém131/133;P058três casos residuais eP00105/06. P084/P085permanecem fechados no âmbito operacionalTempo,sem nova pesquisa. ResiduaisL2 eEstatísticas/IAadiadas preservados.
|
||||
|
||||
## 25/10/2026 — inventário anterior à reconciliação funcional deP001
|
||||
|
||||
Tempo conferiuVATReturn(1).pdf e disposição doquadro8:05vendas isentas comdireito;06operações18(1)b;07operações semdireito;14=01+03+05+06+07. A identificação já está esclarecida;prossegue apenas reconciliação dos tratamentos existentes,separação05/06 eausência de duplicação. Não procurar outro modelo nem presumir estrangeiro=06.131fechos anteriores,incluindoP084/P085no procedimentoTempo,foram inventariados epreservados antes dos novos testes. Fontes/anexos acessíveis inventariados emoutputs/p001-reconciliation-20261025/preservation-before-tests.json. E7ad187f9 eQAb189d0fa preservados;L3aberto;sem alteraçõesactivas.
|
||||
|
||||
## 25/10/2026 — P001 reconciliado emQA no catálogo existente;entrega pendente
|
||||
|
||||
A conferência comunicada pelaTempo doVATReturn(1).pdf esclarece05/06/07e14. Não falta procurar outro modelo. Catálogo actual inventariado integralmente:109tratamentos,47atribuídos05,45atribuídos07,4atribuídos01,4atribuídos03e9semcampo/classificação determinada;nenhumatribuído06. Fundamentos/condições próprios mantidos. Outros livros de classificação/base/eventos não são somados automaticamente como operações06. A localização estrangeira continua análise própria,semcampo06presumido.
|
||||
|
||||
Correcção incremental:06soma apenas as suas linhas,como01/03/05/07,emvezdezeroimposto no código;cada identidade pertence no máximo aumcampo de base. Repetir a mesma identidade05/06ouduasvezesno05érecusado.14continua01+03+05+06+07,semrepetição.06sóézeroquandooperíodoestácompletoesemlinhas06;operaçãoaindadesconhecidaouperíodoincompletofaz06/14permaneceremindeterminados. Não foi inventado tratamento fiscal positivo06. Uma sonda mecânica de agregação não é apresentada como esse tratamento.
|
||||
|
||||
O consumidorL2reutilizaaclassificaçãoactual,sem somar novamente aexecuçãogeral01/02. Corrigido aviso legado que dizia faltar01/02quandoL1jáosdetermina,mesmo semaquisições. Snapshots/históricos aceites não foram reescritos;edições deliberadas conservam resultados anteriores e exigem nova versão.
|
||||
|
||||
Prova:23testesfrontend(8novosP001+15dirigidosanteriores),TypeScript ebuildexit0. Componentesreais:01=100/03=200/05=300/06=0/07=400e14=1000MZN;gravar→recuperar→relatórioconfirmamcontagemúnica. CasoIVAincluído5%mantém14exacto18800/21;desconhecidosnãoviramzero. Contrato/APIprivadosexistentesreutilizados;nenhumnovoformatoouendpointnemnovarondaAPI. Fontes/anexosaccessibleisinventariadosmantêmhashes. Recibo:docs/investmoz/simulations/p001-treatment-reconciliation-qa-20261025.json.
|
||||
|
||||
P001concluídoemQAapenasnoâmbitodacorrespondênciadostratamentosexistentes;entregaGitpendente,nãodisponívelnoactivo. SaldoL1:131entregues+1QA(P001)+1funcional(P058)=133. P084/P085mantêmfechooperacionalTempo,semreabrirpesquisa. P058mantémostrêscasosresiduais. L2/L3limitaçõesprópriaspreservadas;E7ad187f9entregueeb189d0faQA;estatísticas/IAadiadas.
|
||||
|
||||
## 25/10/2026 — rectificação deP001:correspondência positiva06ainda não demonstrada
|
||||
|
||||
A identificação05/06/07easprovas deexclusãoindevida/anti-duplicação são aceites epreservadas. Não demonstram,por si,quais operações alimentam legitimamente06. A conclusão funcional anterior foi excessiva nesse ponto:P001mantém-se emQAparcial,não encerrado funcionalmente. Saldo comunicado preservado:131entregues+P001emQA+P058residual=133;P084/P085fechados.
|
||||
|
||||
Auditoria das provas existentes,sem repetição de testes:nenhumdos109tratamentosestáatribuído06;oexemploUIusa06=0. aggregation-only-06éuma cópia sintética de resultado para testaragrupamento,nãoumaoperaçãofiscallegitimamenteclassificada. Recibo actual:p001-treatment-reconciliation-qa-20261025.json:positive_field06_case;reciboanteriorpreservadoemoutputs/p001-positive-case-audit-20261025/receipt-before.json.
|
||||
|
||||
Lacunaúnica:operação concreta e correspondência depreenchimento que liguem legitimamente a baseao06,distinta de05. OacervojáconferidoCIVA13/2016,PDF14/p1426(272),18(1)bdescreveimpostodevidopelaimportaçãodebens;issonãoforneceporsiabase06doquadro8. Remissãopreservada,semcorrigi-lapara19ouatribuirimportação/estrangeiroautomaticamente06. Nãoépediadaprocura deoutromodelonemvalidaçãogenéricadafonte.
|
||||
|
||||
Depois deidentificadaessacorrespondência,conferirapenasocasopositivodirigido:basepositivaem06,mesmaoperaçãoausented05,14incluiabaseumavez,gravação/recuperação/relatóriocomdocumentosehistóricopreservados. Os23testesetipos/buildanterioresmantêmaaceitaçãonoseuâmbito;nãoseabrenovarondaglobal. Nestapassagem,nãohouveimplementação,testesnovosouescritaactiva. L2/L3/EentregueecoberturaQA,estatísticas/IAadiadaspreservados.
|
||||
|
||||
## 25/10/2026 — responsabilidade técnica deP001
|
||||
|
||||
A identificação do exemplar e o critério deaceitação já foram definidos pelaTempo. Foi indevido devolver ao responsável a identificação da operação positiva como condição de prosseguimento. A reconciliação técnica da remissão e o caso dirigido pertencem aoCodex;P001nãoaguarda nova decisão organizacional ou informação impostaàTempo. Esta correcção de responsabilidade não transforma a sonda mecânica em prova fiscal nem altera os resultados anteriores. P084/P085mantêm-sefechados;saldoeâmbitosanteriorespreservados.
|
||||
|
||||
## 25/10/2026 — prosseguirL3eadvancerL4;residuaissem bloqueio
|
||||
|
||||
DecisãoTempo:P001ficaresidual,provaspreservadasesematribuiçãoautomática06;retomaapenascomesclarecimentoconcretonovo.P058mantémâmbitoparcialdisponíveleexclusõesidentificadas.P084/P085mantêmfechooperacional.Avance:coberturaadicionalL3b189d0faQA,conferirapenasofaltanteepreparentregacompatível;reconciliarsaldoL3edepoisL4ISPCconformeplanoexistente.Semrepetirpesquisa/testesdosmesmospontossemnovainformação.Limitaçõesvisíveisnãoimpedempercursosindependentes.
|
||||
|
||||
CandidataisoladaemC:/laragon/www/portal-investidor-l3-qa-20261025,ramoscodex/l3-additional-delivery-20261025,baseb189d0fa/7ad187f9;provas43frontend/API1-105reutilizadas,nova conferência apenas dehashes,compatibilidadeecompilação. Preparação nãoéinstalação;execuçãoexigecomparaçãoautenticadaebackup/restauro fresco.
|
||||
|
||||
CandidataL3preparada:`0f4df8a4`,ramo`codex/l3-additional-delivery-20261025`. Buildetipos passaram;12ficheirosdedelta(10funcionaisjáaceites+2textosdelimitaçãoP001),7marcadorescompilados,schemas/PHP/configurações/dependênciassemalterações. Main/manifestopúblicoconferidosem7ad187f9;simuladorHTTP200. Scriptsprivadosdepreflight,backup/restauro,conferênciaprotegidaepúblicapreparadoscomguardasdenovoestado. Nenhumteste funcionalrepetido,nenhumaescritaactiva. Próximaexecuçãodaentrega:comparaçãoautenticadafresca,backup/restaurorealeconferênciadodelta. Não declararinstaladopelapreparação.
|
||||
|
||||
## 25/10/2026 — inícioL4-AISPCdepoisdapreparaçãoL3
|
||||
|
||||
L3candidata0f4df8a4preparada,provasaceitesreutilizadas;entregaefectivaexigepreflightautenticadoebackup/restaurofresco. SaldoL3mantémregularizaçõessequenciais/estornos,apuramentospróprios eformalidadesC/D/E;limitecontacentralATnãoénovacondiçãoorganizacional. NenhumresidualP001/P058bloqueiaL4.131fechosL1eP084/P085preservadosantesdosnovostestes. Acervofiscal/legislação/anexosacessíveisinventariadosemoutputs/ispc-l4a-20261025/preservation-before-tests.json.
|
||||
|
||||
L4-Aprimeiroincremento:enquadramentoelegibilidade2026,MZN,territórionacional,tipodepessoa,actividade,referênciaanual/prévisão,incompatibilidadesarts2–5,opçãoseparada.Reutilizarcamposválidosepreservarediçõesdeliberadas. Lei9/2025republicadaéfonteaceite;nenhumaaprovaçãogenéricaFiscalistaécriadacomoetapa. Apuramentotrimestral,escalões/excesso,mínimo/retençõeseformalidadescontinuamtrabalhopróprioL4seguinte;nenhumimpostocalculadoouregimeadoptadopelainventariação.
|
||||
|
||||
## 25/10/2026 — L4-A ISPC: primeiro incremento QA
|
||||
|
||||
Implementado enquadramento preliminar2026/MZN da actividade habitual pelos arts2–5 da Lei9/2025: referência anterior2025 ou previsão de início2026,limite4.000.000 inclusivo,incompatibilidades e dados concretos em falta. Regra183dias restrita aos serviços8(1)c. Opção permanece separada;seleccionarISPC não adopta regime. Perfil reutilizado com prévia e confirmação das divergências,edições deliberadas e outros livros preservados. Livro por contexto e histórico integrado no relatório existente.
|
||||
|
||||
Provas novas:12testesfrontend,tipos/build exit0. Não foram repetidos os testes aceites deL1/L2/L3/P001. Serialização/recuperação cobertas nos novos testes;transporte privado existente reutilizado. Demonstração visual integrada e gravação privada deste incremento continuam antes de propor entregaL4;nenhuma escrita activa. Recibo:ispc-l4a-eligibility-qa-20261025.json.
|
||||
|
||||
L4 continua aberto:apuramento trimestral,escalões e actividades mistas/excesso,mínimo500,retenção5%,percurso ocasional e formalidades próprias. As correspondências concretas serão tratadas no incremento seguinte,sem aprovação jurídica genérica ou bloqueio pelos residuaisP001/P058. L3 permanece aberto com candidata0f4df8a4 preparada e execução autenticada/backup-restauro por realizar. P084/P085 fechados;estatísticas/IA adiadas.
|
||||
|
||||
## 25/10/2026 — L4 ISPC: apuramento trimestral e percurso demonstrado em QA
|
||||
|
||||
O enquadramento e a opção guardados alimentam o apuramento trimestral de 2026 em MZN. O volume anual de acesso anterior, o volume anual do escalão e a base trimestral são distintos. Calculam-se as taxas de 3/4/5%, os serviços a 12/15%, a cumulação pela taxa maior e o excesso a 20%, com valores racionais exactos. O acumulado anterior impede repetir o excesso. O ano encerrado reconcilia os quatro trimestres; uma previsão permanece cenário. A prestação inferior a 500 MZN dispensa pagamento e conserva a declaração; exactamente 500 MZN mantém pagamento. A retenção de 5% nas aquisições ocasionais do artigo 12(3–4) tem livro e limite global de 2.500.000 MZN próprios, sem reduzir o imposto do adquirente.
|
||||
|
||||
Percurso demonstrado com componentes reais: elegibilidade/opção → cálculo → gravação → recuperação → relatório financeiro. Exemplo do T2: base de 200.000 MZN, taxa de 12%, imposto/prestação de 24.000 MZN e opção documentada em 01/01/2026. A API privada em QA passou 1 teste com 21 asserções, rollback e recusa de acesso a outra conta (404); os livros anteriores foram preservados exactamente. Passaram 13 testes novos (10 trimestrais e 3 de retenção), tipos e compilação. As fontes, provas aceites de L1/L2/L3/P001 e os 12 testes de L4-A foram reutilizados. Recibo: ispc-l4-quarterly-qa-20261025.json; provas: outputs/ispc-l4b-20261025.
|
||||
|
||||
O âmbito habitual trimestral está demonstrado em QA, ainda não instalado. O saldo de L4 fica delimitado às operações ocasionais próprias do artigo 3(3–4), às aquisições acima do limite global e à correspondência de formulários, instruções e regulamentação de 2026. O aviso primário do Governo sobre a aprovação de novo regulamento não fornece o articulado nem o modelo. Não se inventam formulários, prazos ou aprovadores; essas dependências não bloqueiam o cálculo habitual demonstrado. P001/P058 permanecem residuais e não interrompem a sequência; P084/P085 permanecem fechados.
|
||||
|
||||
## 25/10/2026 — entrega adicional de L3 com preservação conferida
|
||||
|
||||
O incremento de `0f4df8a4` foi instalado em `fa32a2b9`. Este descendente altera apenas a asserção de texto de um teste legado para o estado residual de P001 acordado; os cálculos e os 12 ficheiros runtime preparados mantêm os mesmos hashes. A referência de entrega conserva o candidato original e a correcção de compatibilidade. Backup fresco de 174 tabelas e 369 ficheiros, restauro isolado sem rede e comparação protegida com a mesma identidade confirmados. Nenhuma migração, importação de conteúdo ou alteração das 172 tabelas de negócio foi efectuada. Revisão/manifesto, sete marcadores compilados e simulador HTTP200 conferidos. As diferenças em cache correspondem ao reinício da fila e ao par contador/temporizador de limitação de pedidos; as sessões novas são anónimas e têm o agente das verificações de entrega.
|
||||
|
||||
A falta de espaço foi resolvida pela compactação verificada das dependências de construção de 11 versões antigas, conservadas em arquivo com hashes, ficheiros e ligações conferidos. A versão activa e a anterior não foram compactadas. Originais, código, backups, dados e recibos permaneceram disponíveis. O processo Git existente executou os seus controlos obrigatórios; não houve nova ronda manual dos casos funcionais aceites.
|
||||
|
||||
L3 continua aberto para regularizações sequenciais/reversões, apuramentos próprios de fornecimento/margem/viagens/eventos e formalidades C/D/E. Apenas esses casos dependentes ficam limitados. Preservam-se 16 MZN de IVA documental, zero de dedução nesta via, 12 reconhecidos, 7 recebidos e 5 por receber. P001 residual, P058 parcial e P084/P085 fechados mantêm os seus estados. L4 habitual trimestral está demonstrado em QA e não foi instalado. Recibo: l3-additional-delivery-20261025.json.
|
||||
|
||||
## 25/10/2026 — preparação Git da entrega L4 trimestral habitual
|
||||
|
||||
O candidato `6af7092e` foi preparado e publicado apenas no ramo `codex/ispc-l4-quarterly-qa-20261025`, sobre L3 instalado em `fa32a2b9`. O ramo principal e a revisão pública foram conferidos nesta base e não foram alterados. O bundle foi verificado. A comparação identificou nove ficheiros de aplicação: as três integrações existentes receberam apenas adições (6+6+1 linhas); onze ficheiros próprios de L3 e dezassete originais permanecem exactamente iguais. Os cinco marcadores compilados de L4 e os sete de L3 estão presentes. Não há delta de schema, PHP de aplicação, configuração ou dependências; o PHP acrescentado é apenas teste QA. O código experimental de P001 ficou excluído.
|
||||
|
||||
As provas QA aceites de cálculo, gravação privada, recuperação e relatório, assim como tipos e compilação da composição compatível, foram reutilizadas pelos respectivos hashes. Não houve nova ronda funcional. Prepararam-se os scripts guardados de comparação autenticada, backup, restauro isolado, integração Git sem force-push e conferência pública/protegida. Backup/restauro fresco e conferência de espaço continuam necessários na execução; o backup de L3 não foi apresentado como backup novo de L4. Esta preparação não instalou L4 nem alterou dados activos. Recibo: `ispc-l4-prepared-delivery-20261025.json`; pacote: `outputs/ispc-l4-delivery-20261025`.
|
||||
|
||||
L4 não fica integralmente concluído. Operações ocasionais próprias, aquisições acima do limite e formalidades de 2026 conservam os âmbitos e condições concretas registados. L3 mantém o saldo residual e a separação de 16 MZN documentais, zero de dedução nesta via, 12 reconhecidos, 7 recebidos e 5 por receber. P001/P058 aguardam os esclarecimentos previstos sem bloquear a entrega; P084/P085 permanecem fechados. Estatísticas e IA permanecem adiadas.
|
||||
|
||||
## 25/10/2026 — instalação do âmbito ISPC trimestral habitual
|
||||
|
||||
O candidato `6af7092e` foi integrado pelo Git e instalado sobre `fa32a2b9`. Foram conferidos backup/restauro fresco e isolado, nove ficheiros de aplicação de L4, onze ficheiros de L3 sem alteração, dezassete originais e os doze marcadores compilados de L4/L3. Os ficheiros persistentes e a configuração conservam os hashes do backup; as tabelas de negócio foram comparadas com a mesma identidade e contexto, sem inferir perda a partir de RLS. Diferenças operacionais de cache/sessões ficam explicitadas no recibo. Não houve migrações ou importações de conteúdo. As provas QA aceites foram reutilizadas; apenas os controlos obrigatórios do processo Git existente voltaram a executar, sem nova ronda manual.
|
||||
|
||||
Para assegurar espaço, dependências de construção de versões antigas foram compactadas em arquivo e verificadas antes de libertar a cópia descompactada. Versões activa e anterior, dados, originais, configurações e backups foram preservados. O recibo discrimina o arquivo e os respectivos controlos.
|
||||
|
||||
A equipa pode avaliar no portal o percurso habitual: elegibilidade/opção → cálculo trimestral → gravação → recuperação → relatório. O exemplo demonstrado mantém base de 200.000 MZN, taxa de 12% e imposto/prestação de 24.000 MZN. O ISPC não é apresentado como integralmente concluído: operações ocasionais próprias, aquisições acima do limite e formalidades de 2026 permanecem discriminadas. L3 e os seus residuais ficam preservados, incluindo 16 MZN documentais, zero de dedução nesta via, 12 reconhecidos, 7 recebidos e 5 por receber. P001/P058 aguardam os esclarecimentos previstos sem bloquear a sequência; P084/P085 permanecem fechados. Estatísticas e IA continuam adiadas. Recibo: `ispc-l4-delivery-20261025.json`.
|
||||
|
||||
## 25/10/2026 — inventário anterior ao delta residual ISPC
|
||||
|
||||
Antes dos testes novos, foram recuperadas as provas do percurso habitual instalado em6af7092e, L3 e os131fechos deL1; não há perdas confirmadas. P001/P058 eP084/P085 mantêm estados. O inventário local anterior foi reutilizado e os novos directórios oficiais daAT foram inventariados antes da selecção. O delta QA separa operações ocasionais próprias, cálculo das aquisições acima do limite e formalidades externas. Fontes novas: comunicadoAT9/2026 e exemplares B–Geral/Modelo30; republicaçãoIRPS19/2017 para incidência de actos isolados e taxa57(2)k, sem nova validação genérica. Não há alteração activa.
|
||||
|
||||
## 25/10/2026 — residuais ISPC agrupados em QA
|
||||
|
||||
Os três pontos foram tratados num delta compatível sobre o instalado `6af7092e`. Nas operações ocasionais próprias, o percurso distingue pessoa singular sem actividade habitual, acto imprevisível/não reiterado, operação nacional e famílias do artigo3(4); a correspondência positiva IRPS8(3h,4)/9 está identificada. A liquidação própria ISPC é separada da retenção liberatória comprovada: esta não gera segunda liquidação nem crédito duplicado. O exemplo próprio de100.000MZN a3%produz3.000MZN, mantendo opção documentada e pressupostos de projecção distintos.
|
||||
|
||||
Nas aquisições, acumulado de2.400.000MZN mais aquisição de200.000MZN separa100.000até ao limite e100.000excedentes. A primeira parcela conserva5.000MZN a5%. A parcela excedente não adquire taxa apenas pela ultrapassagem: o caso positivo implementado é acto isoladoIRPS57(2k), sem opçãoISPCaplicável e com rendimento ilíquido identificado, produzindo20.000MZN. As retenções são distintas e não reduzem o imposto próprio do adquirente. Enquadramento desconhecido ou fornecedor com opçãoISPC não recebem automaticamente5%ou20%. Vendedor/contexto376 e adquirente/contexto375 foram demonstrados separadamente.
|
||||
|
||||
As formalidades apoiam-se agora no ComunicadoAT9/2026 e no original B–Geral de duas páginas. Foram preparados os quadros1/2/3/5/6/8/10 e exportaçãoHTML, com identificadores de campo próprios de cada quadro; o Modelo30 ainda com75.000/3%antigos foi preservado e excluído do cálculo2026. O mês do período não é copiado do mês de pagamento. Submissão, recepção e pagamento ficam como actos externos declarados, com referências e histórico, sem os executar ou certificar.
|
||||
|
||||
O saldo separa cálculos de formalidades: juros compensatórios continuam sem fórmula por falta de regra/taxa/base/período aplicáveis; só montante documentado é conservado. Outros enquadramentos da parcela excedente exigem os seus dados e regra próprios, sem taxa genérica. Externamente faltam a correspondência concreta do período do quadro2, o modelo/código de entrega das retençõesISPC/IRPS e as instruções específicas2026 ainda não fornecidas. Identidade/NUIT/endereço/juros do caso sintético são dados da operação, não condição nova de acesso ao cálculo. Nenhuma dessas pendências bloqueia os casos positivos implementados.
|
||||
|
||||
Provas do delta:19testes novos distintos, APIprivadaQA1/22 comrollback, tipos e compilação, componentes reais com gravação/recuperação/relatório e preparaçãoHTML. O percurso habitual não foi recalculado: motores trimestral e de retenção existentes estão inalterados; o resultado de24.000MZN foi preservado exactamente. Conferiu-se apenas a visibilidade afectada: no modo ocasional os controlos habituais/do adquirente ficam ocultos com explicação e histórico; no contexto habitual continuam disponíveis. L3,17originais anteriores e131fechosL1foram preservados;P001/P058nãointerrompem eP084/P085permanecemfechados. QA não é instalação nem fecho integralISPC. Recibo:`ispc-residuals-qa-20261025.json`.
|
||||
|
||||
Na representação do B–Geral, a dispensa inferior a500MZN permanece uma correspondência formal específica: imposto calculado e prestação zero são mostrados separadamente, sem preencher o montante apurado como zero. O código não inventa a instrução de preenchimento. Este ponto não altera nem bloqueia o cálculo10-Ajá demonstrado.
|
||||
|
||||
Uma retenção liberatória documentada na mesma operação permanece no histórico e impede nova prestação própria sem referência concreta de correcção; mudar apenas a opção de liquidação não apaga o benefício anterior. Caso dirigido adicional aceite.
|
||||
|
||||
## 25/10/2026 — entrega conjunta dos residuais ISPC demonstrados
|
||||
|
||||
Instalado `5c0cb25c` pelo Git sobre `6af7092e`, com backup/restauro fresco isolado, conferência dos sete ficheiros afectados, dos ficheiros de preservação habitual/L3, de21originais, dos ficheiros persistentes/configuração e das tabelas com identidade equivalente. As provas funcionais aceites foram reutilizadas; apenas o processo Git existente executou os seus controlos obrigatórios. Sem migrações ou importações. Diferenças operacionais de cache/sessões estão delimitadas no recibo `ispc-residual-delivery-20261025.json`.
|
||||
|
||||
Disponível: operações ocasionais próprias no âmbito demonstrado, parcela excedente no caso IRPS qualificado e preparação/exportação B–Geral. A retenção liberatória anterior não é apagada ao mudar o percurso. Ainda por concluir: fórmula de juros, outros enquadramentos do excedente e correspondências/instruções de preenchimento2026 identificadas no recibo. Actos da AT permanecem externos: exportar não submete nem obtém aceitação. Este incremento não conclui todo o ISPC nem o IRPS. O habitual e L3 permanecem preservados, incluindo16documentais/0dedução nesta via/12reconhecidos/7recebidos/5por receber. P001/P058não bloqueiam;P084/P085fechados;estatísticas/IAadiadas.
|
||||
|
||||
## 25/10/2026 — inventário anterior a L5
|
||||
|
||||
Recuperadas as provas aceites de L3, ISPC instalado5c0cb25c e131fechosL1. Sem perdas confirmadas. IRPS continua limitado ao caso demonstrado; residuaisISPC não bloqueiam retençõesIRPC independentes. Acervo anterior inventariado é reutilizado antes da selecção; contrapartes/documentos/pagamentos serão ligados aos livros existentes sem os duplicar ou apagar. Não houve testes novos nem alteração activa neste inventário.
|
||||
|
||||
## 25/10/2026 — L5: primeiro incremento executável em QA
|
||||
|
||||
Preparado sobre o instalado `5c0cb25c`, com livros de retenções por contexto. Reutiliza fornecedores, documentos e linhas de aquisições e operações de venda existentes. As vendas não têm um cadastro próprio de contraparte: esse dado permanece por completar, sem ser inferido da localização. As edições deliberadas são conservadas; uma alteração na origem mostra os valores divergentes e permite reconciliar o vínculo sem sobrescrever essas edições.
|
||||
|
||||
O cálculo implementado corresponde aos 10% da Lei 12/2025 para bens e serviços digitais e comissões de agentes de moeda electrónica, no recorte não residente e não imputável a estabelecimento estável. Exige a qualificação do titular e devedor como sujeitos a IRPC, a incidência moçambicana e os factos ou pressupostos aplicáveis, sem convenção ou dispensa invocada. A data resulta dos eventos aplicáveis do artigo 67(5), incluindo o reconhecimento do custo; um pagamento posterior não desloca o evento anterior para outro período. A base do rendimento fica separada do IVA.
|
||||
|
||||
No exemplo sintético de rendimento pago, 100.000 MZN produzem retenção de 10.000 MZN; a entrega associada é de 6.000 MZN e o saldo por reconciliar é de 4.000 MZN. No exemplo de retenção sofrida, o cálculo é de 2.000 MZN, com comprovativo de 1.500 MZN e diferença de 500 MZN, sem crédito anual automático. Um comprovativo pode ser repartido entre operações e contextos, sem exceder o montante disponível. Alterações em contextos sem pagamentos partilhados não desactualizam o resultado. Pagamentos de IVA mantêm os vínculos anteriores.
|
||||
|
||||
O MRFTA 19/39 da AT foi conferido nas duas páginas, incluindo as instruções. O quadro 1 identifica retenção, o quadro 2 corresponde a um mês/ano único e o quadro 7 contém base, taxa e imposto. O CER e a correspondência das novas categorias digitais permanecem por esclarecer. A Lei 12/2025 contém uma remissão concreta do artigo 67(7) para 62(6), enquanto a nova taxa aparece em 62(5): essa diferença é preservada, sem renumerar o original ou bloquear o cálculo independente. As instruções do exemplar indicam o prazo nominal de dia 20 do mês seguinte à dedução; não foram presumidos ajustes de calendário, prorrogações ou instruções específicas de 2026. A exportação é um mapa de preparação, sem assinatura, submissão, recepção ou aceitação AT.
|
||||
|
||||
**Saldo de L5:** correspondência das taxas normais e especiais dos artigos 62(1–4), dispensas para residentes/EP, convenções invocadas, conversão cambial, juros, rectificações e guia agregada. A Lei 20/2022 está identificada pela INM na página 2731 do BR 252, mas o exemplar local com essa data/número contém apenas o 3.º suplemento turístico. A ausência desse texto específico não é um pedido de revalidação da sua credibilidade. O código local de 2002 foi identificado como revogado e não foi usado em cálculos de 2026. Cada lacuna afecta apenas o ramo dependente, sem taxa ou zero genéricos.
|
||||
|
||||
Provas do delta: 17 testes novos distintos; API privada em QA, 1 teste e 23 verificações com rollback; tipos e compilação; componente real com cálculo, gravação, recuperação, relatório, exportação e reutilização de uma aquisição anterior. A demonstração visual local em ficheiro é distinguida da prova da API privada. O controlo adicional de pagamentos partilhados foi conferido por caso dirigido, sem repetir as provas funcionais anteriores.
|
||||
|
||||
L3 e ISPC permanecem preservados, assim como os 21 originais anteriores e os 131 fechos de L1. Os residuais ISPC ficam na mesma matriz; o IRPS conserva apenas o caso anteriormente demonstrado. P001/P058 não bloqueiam e P084/P085 permanecem fechados. Estatísticas e IA continuam adiadas. L5, IRPC e IRPS não estão integralmente concluídos. Não houve instalação, migração, importação ou alteração activa. Recibo: `irpc-l5-withholdings-qa-20261025.json`.
|
||||
|
||||
## 25/10/2026 — inventário anterior ao agrupamento de L5
|
||||
|
||||
Recuperadas as provas aceites de `da0d8abb`, L3, ISPC instalado `5c0cb25c` e 131 fechos de L1. Sem perdas confirmadas. O selector cambial, a conversão e os históricos entregues foram identificados por hash antes do novo delta e serão reutilizados. O novo exemplar integral do BR 252/2022 contém a Lei 20/2022 na primeira página; as 268 páginas ficam preservadas e inventariadas, sem activar outras regras do PESOE. Dispensas, convenções, juros e MRFTA permanecem discriminados. Nenhum teste novo ou alteração activa neste inventário.
|
||||
|
||||
## 25/10/2026 — L5: agrupamento de taxas e reutilização do câmbio entregue
|
||||
|
||||
O conjunto preparado inclui `da0d8abb` e os novos enquadramentos compatíveis, sem instalar no portal. A Lei 20/2022 foi recuperada no exemplar completo do BR 252/I, página 2731, resolvendo a falta de texto que impedia o cotejo anterior. O original antigo, com o 3.º suplemento turístico, permanece identificado e preservado. Não se repetem pesquisas ou validações genéricas sem nova evidência.
|
||||
|
||||
Foram acrescentados os ramos qualificados de 20% para royalties, equipamentos, serviços e capitais não cotados de não residentes; royalties de residentes e rendas comuns conservam a natureza por conta quando aplicável. Os ramos dependentes das dispensas ficam separados. Os juros de bilhetes do Tesouro/dívida cotada e permutas de liquidez qualificadas de entidades com sede e direcção efectiva nacionais têm retenção liberatória de 20% pelo artigo 62(3), sem crédito anual automático.
|
||||
|
||||
As taxas especiais de 10% do artigo 62(4) ficam limitadas às condições demonstradas: telecomunicações, transportes internacionais, equipamentos conexos, manutenção/fretamento de aeronaves, infraestruturas eléctricas em projectos públicos de electrificação rural, afretamento marítimo de pesca/cabotagem e outros títulos cotados na Bolsa de Valores de Moçambique, com a exclusão da dívida/bilhetes abrangidos pelo número 3(a). Não se confundem com a taxa digital do número 5. Os benefícios agrícolas com termo em 31/12/2025 não foram transportados para 2026.
|
||||
|
||||
O câmbio reutiliza, sem alteração, `SimulationFxSelection`, `selectFx`, `fxSelectionKey` e `convertCents`. O adaptador de retenções liga a selecção existente à base ou ao comprovativo de retenção sofrida. Conserva montante/moeda originais, boletim, coluna, sentido e data; não usa taxa actual nem calcula uma média própria. A data cambial fica distinta do evento do artigo 67(5). Uma confirmação sem alteração conserva o vínculo à origem; uma edição deliberada passa a selecção para o controlo dessa linha, mantendo o histórico anterior. Uma origem alterada torna visível a divergência apenas nos resultados dependentes.
|
||||
|
||||
Exemplo de royalty: 1.000 USD, com taxa sintética 64 MZN/USD, produzem base de 64.000 MZN e retenção de 12.800 MZN a 20%; comprovativo AT de 5.000 MZN deixa 7.800 MZN por reconciliar. No exemplo de retenção sofrida, a base de 100 USD converte para 6.400 MZN, o imposto é de 1.280 MZN e o comprovativo de 10 USD corresponde a 640 MZN, com diferença de 640 MZN. A conversão não transforma o pagamento ao beneficiário em entrega à AT; esta conserva o montante MZN efectivamente documentado. Pagamentos e parcelas continuam ligados e não podem ser usados além do montante disponível, incluindo entre contextos.
|
||||
|
||||
Passaram 19 testes novos distintos, com casos dirigidos para natureza dos capitais, relatório e vínculo cambial; os 17 testes anteriores de L5 não foram repetidos. A API privada em QA passou 1 teste e 34 verificações com rollback e guardas contra a base activa. Tipos, compilação, conferência do selector existente dentro da retenção, cálculo, gravação, recuperação, relatório e exportação foram demonstrados. A página visual sintética grava apenas um ficheiro local; a prova da API privada é separada. Os resultados aceites de `da0d8abb` permanecem actuais quando não afectados e foram preservados no histórico do conjunto.
|
||||
|
||||
Permanecem separados: dispensas e casos residentes/EP que delas dependem, convenções invocadas, categorias/devedores/períodos fora deste recorte, juros, rectificações e correspondências/CER do MRFTA. Cada pendência identifica os dados e a condição de resolução no recibo `irpc-l5-grouped-qa-20261025.json`; não bloqueia casos independentes. Exportar a preparação não submete nem obtém aceitação AT. L5, IRPC e IRPS não estão integralmente concluídos.
|
||||
|
||||
O portal mantém `5c0cb25c`, com L3 e ISPC preservados. O saldo ISPC continua na mesma matriz e o IRPS conserva o caso anteriormente demonstrado. P001/P058 não bloqueiam; P084/P085 permanecem fechados; estatísticas e IA continuam adiadas. Foram conservados os 26 originais anteriores e acrescentado um novo original. A instalação futura exige a comparação autenticada do destino, backup/restauro fresco e conferência do delta pelo procedimento Git existente, sem repetir provas aceites.
|
||||
|
||||
|
||||
## 25/10/2026 — L5: dispensas e convenção demonstradas em QA
|
||||
|
||||
Base de código `2b33a1c3`, ramo `codex/irpc-l5-reliefs-qa-20261025`. O último relatório de instalação mantém o portal nessa entrega; este candidato não executa instalação. O inventário anterior de L3, ISPC, câmbio, fontes e provas aceites é reutilizado. Comparação do delta: sem alteração nesses módulos, em schema/migrações, configuração ou permissões; sem escrita na base activa. As correcções de codificação que tinham atingido trechos históricos durante a preparação foram retiradas do delta; os registos anteriores são conservados.
|
||||
|
||||
**Executável:** dispensa 68(d) para serviços/uso de equipamento 67(1)b/g com natureza por conta, titular sujeito a IRPC relativamente ao rendimento; dispensa 68(f) para rendas de sociedade de gestão de imóveis próprios fora da transparência fiscal 6(1)c; limite convencional de 10% sobre royalties/uso de equipamento qualificados PT–MZ, não digitais, titular residente convencional em Portugal, beneficiário efectivo, sem EP em Moçambique, devedor residente em Moçambique e montante sem excesso por relações especiais. As condições são dados documentados do caso, sem aprovador adicional. A selecção de regra não é substituída por texto livre ou taxa manual. Outros ramos continuam separados.
|
||||
|
||||
Reutilizados contraparte, residência/EP, documento, qualificação, montante e conversão da linha. Diploma, artigo, período, documentos e condições ficam no mesmo livro e no histórico. Alterar a prova invalida apenas a correspondência do resultado afectado. A dispensa produz retenção zero justificada, apresentada como dispensa, sem isentar o rendimento nem gerar crédito anual. Informação insuficiente, negativa, período incompatível ou artigo divergente fica indeterminada, sem zero/taxa reduzida presumidos. A existência de prova de entrega numa linha dispensada pede reconciliação sem apagar o pagamento.
|
||||
|
||||
**Demonstração:** Wayfinder `wayfinder:generate --with-form`, pelo wrapper QA guardado `tools/irpc-reliefs-qa.php routes`; TypeScript passou; compilação completa QA passou. Nove testes novos e cinco verificações dirigidas de compatibilidade IRPC passaram. API privada: um teste/17 verificações, base `simulator_fiscal_delta_20261021_test`, loopback55441, transacção com rollback. Resultados 68(d),68(f), convenção e informação insuficiente recuperados com documentos/histórico. Relatório de retenções, exportação de preparação e dossier financeiro conferidos a partir da recuperação da API. Corrigida a associação da secção «IRPC — retenções» à secção financeira do dossier: a linha existia, mas era omitida nessa apresentação. UI sintética do componente real demonstra cálculo, gravação/recuperação local e relatório; esta prova local é distinta da API privada.
|
||||
|
||||
**Reprodução:** gerar routes/actions com `php tools/irpc-reliefs-qa.php routes`; executar `node --test tests/frontend/irpc-reliefs.test.mjs` (produz a amostra sintética); executar `php tools/irpc-reliefs-qa.php test`. Usar PHP8.5/Node24 e dependências existentes. `tsc --noEmit`; compilação `INVESTMOZ_QA_BUILD=1 vp build` no ramo QA. Os módulos gerados são artefactos locais, sem edição manual ou commit.
|
||||
|
||||
**Saldo na mesma matriz:** restantes alíneas68, categorias digitais/residentes não correspondidas, outras convenções/Estados e casos com EP, dividendos/juros ou excesso por relações especiais mantêm correspondência própria. Juros de mora, rectificações, agregação, rubricas/CER e preenchimento do MRFTA permanecem discriminados. O cálculo convencional não declara cumpridas as formalidades de accionamento, recepção ou aceitação AT. Não são transportados formulários portugueses21-RFI para obrigações moçambicanas. Pendências condicionam apenas os casos dependentes. L5, IRPC e IRPS não estão integralmente concluídos. L3/ISPC/câmbio não foram retestados; as suas provas são reutilizadas. Entrega conjunta preparada apenas para os recortes demonstrados. Instalação futura segue o procedimento Git e os controlos de destino/backup/restauro já existentes.
|
||||
|
||||
Recibo: `docs/investmoz/simulations/irpc-l5-reliefs-qa-20261025.json`; provas locais em `outputs/irpc-reliefs/`.
|
||||
|
||||
|
||||
## 25/10/2026 — dispensas IRPC e convenção PT–MZ instaladas pelo Git
|
||||
|
||||
Instalada `ce746d88`, com `2b33a1c3` preservada como release anterior. Backup fresco2026-10-25T18:00:39Z:174 tabelas e369 ficheiros/configuração;restauro isolado em contentor sem rede/55441 passou. Quatro ficheiros de execução conferidos,28 protegidos L3/ISPC/câmbio e29 originais preservados. Schema,permissões e configuração iguais;zero migrações/importações. As172 tabelas de negócio mantêm checksums;apenas cache operacional e sessões anónimas das verificações foram reconciliadas. O mínimo de espaço do instalador foi reposto pelo arquivo e verificação de dependências de5 releases antigas,sem tocar na actual/anterior nem apagar dados/backups.
|
||||
|
||||
Manifesto público/revisão servida,8marcadores compilados e simuladorHTTP200 conferidos. Provas QA aceites reutilizadas;CI habitual do procedimento Git passou. Sem ampliar a cobertura:68(d/f) e royalties/uso de equipamento PT–MZ nos casos efectivamente demonstrados. Juros,MRFTA e restantes casos continuam na mesma matriz;L5 permanece parcial. Seguimento em QA separado,sem instalar novos cálculos. Recibo:`irpc-l5-reliefs-delivery-20261025.json`.
|
||||
|
||||
|
||||
## 25/10/2026 — juros e preenchimento MRFTA: incremento QA após ce746d88
|
||||
|
||||
O portal mantém a entrega instalada `ce746d88`, com `2b33a1c3` preservada;recibo de instalação `irpc-l5-reliefs-delivery-20261025.json`. Seguimento isolado em `codex/irpc-juros-mrfta-qa-20261025`,sem nova instalação. Reutilizadas as provas aceites;29 originais e29 ficheiros protegidos conferidos por hash. Sem delta de schema,configuração ou permissões.
|
||||
|
||||
**Preenchimento:** quadros1–7 do MRFTA de preparação,um mês/ano;identidade fiscal reutilizável entre livros sem sobrescrever edições nem misturar NUIT distintos. Base,taxa,imposto,documentos e entregas vêm do cálculo IRPC guardado. Agrupamento apenas da mesma rubrica/taxa/CER. Retenções sofridas,dispensas e outros períodos ficam separados. CER requer referência aplicável;os números de campos do M/39 antigo não são convertidos em códigos de receita. Rubricas digitais/especiais desconhecidas e múltiplas taxas na mesma rubrica permanecem discriminadas. Quadros8/9 não são assinados/preenchidos pelo portal. Exportação HTML de preparação,não alteração do PDF oficial nem declaração submetida.
|
||||
|
||||
**Juros:** Decreto9/2008,25/35,PDF6/8,p121/123 identifica MAIBOR12meses+2p.p.;BM documenta a descontinuidade da publicação. Não foi obtido parâmetro fiscal sucessor aplicável2026;MIMO/Prime não o substituem. Implementada transcrição de juros compensatórios de liquidação documentada,com período,data,montante e referência;ou ausência de atraso quando entrega integral e datas/prazo documentados coincidem. Informação insuficiente não vira zero. Juros de mora continuam por implementar. O subtotal do principal permanece disponível;total do formulário fica indeterminado enquanto faltarem juros,CER,completude ou situação de outras rubricas (IRPS/autónoma),sem isenções ou créditos presumidos. A completude é um dado da preparação,não novo aprovador organizacional.
|
||||
|
||||
**Prova do delta:**12 testes novos+1 de apresentação IRPC;TypeScript e compilação QA passaram. API privada1teste/14verificações com rollback no55441;preparação→gravação→recuperação→relatório/dossier. UI real em exemplo sintético:preparação,gravação/recuperação local,informação insuficiente e download HTML;prova API separada. CER999 é fictício de teste,não taxa/código oficial activado. Exemplo:principal20000MZN,entrega3000,juros documentados500,total17500;alterar provas conserva histórico e desactualiza a preparação. Não foram repetidas manualmente suites L3/ISPC/câmbio.
|
||||
|
||||
**Saldo:**cálculo automático dos juros e taxa aplicável2026,juros de mora,catálogo CER integral,rubricas digitais/especiais,mistura de taxas e obrigações IRPS/autónomas fora do recorte. Limita apenas as parcelas dependentes;L5/IRPC/IRPS continuam parciais. Recibo `irpc-juros-mrfta-qa-20261025.json`;provas locais `outputs/irpc-mrfta/`.
|
||||
|
||||
Reprodução QA: `php tools/irpc-mrfta-qa.php routes`; `node --test tests/frontend/irpc-mrfta.test.mjs`; `php tools/irpc-mrfta-qa.php test`. PHP8.5,Node24,dependências existentes;alvo e identidadeQA guardados antes de fornecedores/testes.
|
||||
|
||||
|
||||
## 25/10/2026 — entrega5fa64bc0 instalada;seguimento restrito a juros/CER em QA
|
||||
|
||||
Instalada pelo Git a revisão exacta `5fa64bc0`,com `ce746d88` preservada como release anterior. Backup fresco2026-10-25T18:28:38Z;174tabelas e369ficheiros/configuração;restauro isolado sem rede/55441 passou. Quatro ficheiros de execução,29protegidos e30originais conferidos. Schema,permissões e configuração iguais;zero migrações/importações. As172tabelas de negócio mantêm checksums;apenas cache operacional e sessões anónimas da instalação/verificação foram reconciliadas. Revisão/manifesto públicos,8marcadores compilados e simuladorHTTP200 passaram. Provas aceites reutilizadas,sem nova ronda manual;CI habitual do instalador passou.
|
||||
|
||||
Cobertura instalada:preparação por período,registo de juros documentados e relatório/exportação MRFTA. Registar não significa calcular automaticamente;CER/rubricas desconhecidos continuam identificados sem preenchimento presumido. Não houve submissão ou aceitação AT. Seguimento isolado apenas de juros automáticos eCER/rubricas;L5continua parcial,L3/ISPC/câmbio preservados. Recibo:`irpc-mrfta-delivery-20261025.json`.
|
||||
|
||||
|
||||
## 25/10/2026 — seguimento QA restrito: juros automáticos e casos CER/rubricas
|
||||
|
||||
Portal instalado em `5fa64bc0`,com `ce746d88` preservada;recibo `irpc-mrfta-delivery-20261025.json`. Novo ramo `codex/irpc-interest-cer-qa-20261025`,sem instalação. Não foram reabertos outros saldos L5.
|
||||
|
||||
**Juros:** nova aritmética racional diária por parâmetros documentados do caso:taxa anual final,fonte/fundamento fiscal,vigência na data de liquidação,base anual,arredondamento do total e ocorrência. Nenhum valor vem pré-definido. Intervalos começam no dia posterior ao prazo documentado;entregas reduzem a base após o seu dia e o pagamento integral pára encargos. Contagem por ano/base365/366 e arredondamento só conforme convenção preenchida com referência. Definitiva e por conta retida cobertas neste recorte;por conta não retida e mora mantêm regra própria. Sem perfil completo,juros indeterminados e principal preservado. A taxa10%,base365 e convenções dos testes são fictícias,sem activação de parâmetro fiscal2026. O registo de liquidação documentada da entrega instalada mantém significado e histórico.
|
||||
|
||||
**CER/rubricas:** separação estável por período,rubrica,taxa e CER,com documentos e referências. Fichas de trabalhoHTML independentes conservam as pendências globais;não são declarações autónomas,anexos oficiais nem uma taxa média. Teste integrado distingue retenções20%/10% e CERfictícios999/998;juros por perfil permanecem demonstráveis,mas o total do formulário continua indeterminado pela transposição de rubricas distintas. Ausência de código ou referência continua identificada,sem preenchimento presumido. Nenhum catálogo CER oficial foi acrescentado.
|
||||
|
||||
**Compatibilidade/provas:** campos novos adicionais conservam os modos conhecidos pelo leitor5fa64bc0. Prova só de leitura/gravação exacta do novo payload nesse leitor:retenções actuais e nova preparação histórica,sem executar novamente cálculos antigos. Preservados31ficheiros de execução e30originais por hash. TypeScript,buildQA e13testes novos passaram;API1teste/19verificações com rollback em55441. UI:parâmetro fictício explícito,sem taxa→indeterminado,gravação/recuperação,relatório e download de casos20%/999 e10%/998. Relatório do dossier a partir da recuperação API. Provas aceites L3/ISPC/câmbio e5fa64bc0 reutilizadas;sem nova ronda manual das suites antigas.
|
||||
|
||||
**Saldo,apenas os mesmos dois pontos:** (1)corresponder fonte/parâmetro fiscal vigente2026 e convenções aplicáveis,além dos ramos mora/por conta não retida fora desta aritmética;(2)corresponder catálogo CER/rubricas ainda pendentes e procedimento oficial para taxas/códigos distintos. O inventário oficial AT189documentos foi consultado por metadados,não relido integralmente;nenhuma taxa/código foi inferido de rascunho,número de campo,agregado orçamental,MIMO ouPrime. L5 continua parcial. Recibo `irpc-interest-cer-qa-20261025.json`;provas em`outputs/irpc-interest-cer/`.
|
||||
|
||||
Reprodução do delta em QA: `php tools/irpc-interest-cer-qa.php routes`;`node --test tests/frontend/irpc-interest-cer.test.mjs`;`php tools/irpc-interest-cer-qa.php test`. Dependências existentes,PHP8.5/Node24;alvo QA guardado antes dos fornecedores/testes.
|
||||
|
||||
|
||||
## 25/10/2026 — esclarecimentos concretos para a AT (AUD-SIM-INT02, L5 parcial)
|
||||
|
||||
Esta discriminação desenvolve os mesmos dois pontos; não cria outra matriz nem reabre provas aceites. Base instalada: `5fa64bc0`; funcionalidade demonstrada em QA: `acf8ec3c`. Os exemplos abaixo são perguntas de aplicação, não parâmetros ou códigos oficiais. Não foram enviados à AT por este registo.
|
||||
|
||||
| Dúvida na mesma matriz | Parâmetro ou correspondência exacta em falta / esclarecimento a obter | Exemplo para acompanhar o esclarecimento | Comportamento enquanto falta |
|
||||
|---|---|---|---|
|
||||
| J1 — taxa e vigência | Valor anual final aplicável na data de liquidação em 2026, incluindo eventual acréscimo; série/diploma sucessor da referência MAIBOR 12 meses + 2 p.p., fonte, início e fim de vigência (`annualRate`, `rateSource`, `fiscalBasis`, `validFrom`, `validTo`). | Retenção definitiva de 7 300 MZN, prazo documentado 20/11/2026 e liquidação em 30/11/2026: qual taxa anual final usar? Os 10% do ensaio são fictícios. | Sem taxa predefinida; não substituir por MIMO/Prime. Perfil completo permite apenas simulação pelos dados introduzidos. |
|
||||
| J2 — contagem diária | Base anual aplicável: 365, 366 ou dias efectivos por ano (`dayBasis`, `dayBasisRef`); incidência do dia da entrega parcial e divisão de períodos entre anos. | Mesmo principal de 7 300 MZN, entrega de 3 650 em 25/11 e liquidação em 30/11: a redução começa em 26/11? Num intervalo 31/12/2027–02/01/2028, qual denominador em cada ano? | Motor demonstra dia posterior ao prazo, dia da entrega incluído e redução no dia seguinte; só usar como pressuposto de simulação até esclarecer a aplicação. |
|
||||
| J3 — arredondamento | Método e momento oficiais: total ou parcela/dia, cêntimos, metade por excesso ou outra convenção (`rounding`, `roundingRef`). | 7 300 MZN × taxa fictícia 10,0025% × 10/365 = 20,005 MZN: declarar 20,00 ou 20,01? Arredondar só o total ou cada segmento? | As duas opções do motor são convenções explícitas de simulação; outra convenção mantém o caso por implementar. |
|
||||
| J4 — retenção por conta não efectuada | Regra e datas específicas dependentes da declaração/liquidação anual, base e limite temporal; não equiparar a retenção efectuada ou definitiva (`retention`, `occurrenceRef`). | Retenção por conta de 7 300 MZN não efectuada em Novembro/2026: até que evento anual se contam juros e sobre que montante? | Ramo indeterminado; não herda a fórmula do ramo demonstrado. |
|
||||
| J5 — mora | Taxa, fundamento, início/fim, base após pagamentos e articulação com juros compensatórios, evitando duplicação. | Liquidação documentada de compensatórios, com saldo de imposto de 3 650 MZN ainda não pago após o prazo: quando começa a mora e sobre que parcelas? | Mora não calculada; registo de liquidação documentada mantém-se independente. |
|
||||
| C1 — CER de capitais e prediais por conta | Código CER exacto e referência/versão para cada rubrica “Taxa normal — Rendimentos de capitais e mais valias” e “Taxa normal — Rendimentos prediais”. | Dois pagamentos no mesmo mês: juros de financiamento e renda de imóvel, ambos com retenção por conta: quais CER respectivos? São códigos distintos? | CER por identificar; nome da rubrica já correspondido não prova o código. |
|
||||
| C2 — CER das quatro rubricas liberatórias | Código CER exacto e referência/versão por rubrica: actividade intelectual/industrial e informações; uso de equipamento; aplicação de capitais e rendimentos prediais; comissões/intermediação/prestação de serviços. | No mesmo período, royalties, aluguer de equipamento, juros e comissão a não residentes: indicar o CER de cada natureza e eventual distinção adicional. | Cada natureza permanece separada; não reutilizar números de campos do M/39 como CER. |
|
||||
| C3 — rendimentos digitais/especiais | Rubrica MRFTA e CER exactos para cada categoria não correspondida, conforme qualificação fiscal documentada; distinguir de serviços comuns. | Pagamento a não residente por serviço digital já qualificado no livro IRPC: em que rubrica/CER deve ser transcrito? Um serviço comum tem a mesma correspondência? | Categoria sem correspondência continua pendente; não copiar para serviços comuns por aproximação. |
|
||||
| C4 — taxas diferentes na mesma rubrica | Forma oficial de transcrever várias taxas: linhas adicionais, anexo ou outro procedimento, com indicação dos campos; confirmar se o CER varia com regime/convenção. | Royalties de base 10 000 MZN à taxa interna de 20% e outros de 10 000 à taxa convencional demonstrada de 10%, no mesmo mês: como apresentar bases/impostos sem taxa média? | Duas fichas de trabalho; total oficial permanece indeterminado enquanto depender dessa transposição. |
|
||||
| C5 — códigos diferentes na mesma rubrica | Forma oficial de conservar códigos distintos no mesmo período/rubrica e regra de totalização/entregas; obter os códigos reais antes de preencher. | Duas parcelas agrupáveis por rubrica mas com CER distintos segundo documentos do caso: uma ou várias linhas/guias? Nos ensaios, 999/998 são apenas marcadores fictícios. | Separar período/rubrica/taxa/CER; não inventar declarações autónomas nem reconhecer marcadores como oficiais. |
|
||||
|
||||
**Entrega funcional independente:** aritmética pelos pressupostos explicitados, reconciliação de entregas, gravação/recuperação/relatório e fichas separadas podem acompanhar a entrega. Interface e exportações identificam simulação e CER introduzido sem validação por catálogo; referência digitada não equivale a confirmação fiscal. Não activar taxa ou catálogo global por esta entrega. A ausência de dados conserva indeterminação e principal. As respostas da AT poderão completar apenas as células correspondentes, com fonte e vigência, sem outra pesquisa genérica ou nova aprovação inventada.
|
||||
|
||||
**Preservação:** L3, ISPC, câmbio, `ce746d88` e `5fa64bc0` conservam provas aceites; nenhum caso aceite foi reaberto. L5 permanece parcial. O presente delta de apresentação/documentação não altera schema, API, permissões, originais ou regras de retenção.
|
||||
|
||||
|
||||
## 25/10/2026 — L5 operacional no âmbito demonstrado; entrega 7a11c4ef
|
||||
|
||||
Instalado pelo Git `7a11c4ef8f06ef149eb0488be3cd0749dc609bd0`, sobre `5fa64bc0`, sem força, migrações ou importações. Backup fresco em 25/10/2026 19:14:23 UTC, restaurado em PostgreSQL isolado (rede nenhuma/porta55441):174 tabelas por contagem/checksum. Conferidos4ficheiros do delta,31protegidos,30originais e369ficheiros/configuração persistentes. Schema,roles/grants e permissões conservados.172tabelas de negócio iguais;cache/sessões reconciliadas com reinício da fila,throttle e sessões anónimas da verificação. Versão5fa64bc0 conservada como anterior;L3,ISPC,câmbio e provas aceites preservados. Arquivadas e verificadas dependências de8versões antigas para respeitar espaço mínimo,sem eliminar fontes,dados ou backups nem modificar versões actual/anterior.
|
||||
|
||||
Revisão/manifest públicos,8marcadores compilados,4assets e simuladorHTTP200 conferidos. Pipeline normal:1teste/3106asserções,59testes/317asserções,872testesfrontend,tipo/build;sem outra ronda manual das provas aceites. Recibo:`irpc-interest-cer-delivery-20261025.json`.
|
||||
|
||||
**L5 fica operacional apenas no âmbito demonstrado**, incluindo preparação por período,registo de juros documentados,simulação por pressupostos explícitos e fichas separadas porCER/rubrica/taxa. Não confirma fiscalmente juros nem converte códigos provisórios em correspondências oficiais. As dez dúvidas J1–J5/C1–C5 da secção anterior acompanham a reunião com a AT;permanecem pendentes e não foram enviadas por esta operação. Sem informação nova,não reabrir a pesquisa desses pontos. Não declararL5 integralmente concluído.
|
||||
|
||||
**Sequência autorizada:**L6—IRPC normal,começando pela ponte do resultado financeiro aos ajustamentos documentados. Retenções/créditos anuais,amortizações,perdas e colecta conservam desenvolvimento próprio;nenhuma pendênciaL5 bloqueia o primeiro recorte independenteL6.
|
||||
|
||||
|
||||
## 25/10/2026 — L6 iniciado em QA: primeiros ajustamentos ao resultado financeiro
|
||||
|
||||
Base instalada7a11c4ef;L5 operacional apenas no âmbito demonstrado. Primeiro recorteL6 reutiliza a ponte financeira reconciliada por oportunidade,receitas/custos discriminados e resultado antes de imposto. Corresponde explicitamente12meses aJan–Dez2026,MZN,sujeito residente no regime geral fora de transparência/regimes especiais. Projecção com pressupostos,não demonstração contabilística confirmada. Art17(1)é enquadramento da ponte,não equivalência automática do resultado antes de imposto ao lucro tributável.
|
||||
|
||||
Implementados acréscimos integrais36(1)c de multas/encargos por infracções sem origem contratual e juros compensatórios já incluídos no custo de origem. Documento/linha,qualificação,montante e inclusão têm suporte/pressuposto expresso. Não classifica juros comerciais nem multas contratuais por aproximação,não importa juros simuladosL5 como despesa efectiva. Limites por custo da origem e duplicação documental previnem dupla contagem. Encargo já excluído não é acrescentado de novo. Lacuna limita a respectiva parcela;acréscimos independentes continuam disponíveis,resultado parcial agregado indeterminado se houver parcela não resolvida.
|
||||
|
||||
Exemplo sintético:resultado financeiro6480MZN,multa100 e juros compensatórios20 incluídos;acréscimos120,resultado parcial6600. Sem suporte da multa:apenas20 demonstrados,resultado parcial indeterminado. Lucro tributável,matéria colectável e imposto permanecem indeterminados em todos os casos. Outros ajustamentos,custos/variações patrimoniais,amortizações,perdas,deduções/colecta,créditos anuais eM20/M22 seguem por recortes próprios;EP/regimes especiais,outra moeda/exercício/horizonte não abrangidos.
|
||||
|
||||
Prova do delta:7testes novos;APIprivada1teste/19asserções comrollback naQA55441;routes/actions gerados pelo procedimentoWayfinder;TypeScript/buildQA passaram. UI real:cálculo,gravação/recuperação local,relatório,informação insuficiente e download;API demonstrada separadamente,dossier gerado da recuperaçãoAPI. LivroL6 separado mantém payloadL5 e restante histórico;alterar plano/entradas torna resultado histórico sem o apagar.32ficheiros anteriores protegidos e30originais sem alteração;integração mínima emsimulation-form/project-dossier/project-dossier-report. Provas aceites não repetidas. Recibo:`irpc-l6-adjustments-qa-20261025.json`;QA isolada,sem instalaçãoL6.
|
||||
|
||||
Fonte adicional necessária apenas paraL6:exemplar oficialAT intitulado19/2009 contém tambémLei20/2009;PDF4/p272(16),36(1)a–i mantidas ealíneasj–n aditadas,conferido visualmente. Lei4/2012PDF2/3 e19/2013PDF1/2 mantêm36(1)c. Não reabre as dez dúvidasL5,que ficam paraAT até informação nova. L5 eL6 não integralmente concluídos.
|
||||
|
||||
|
||||
## 25/10/2026 — L6: percurso delimitado até ao lucro tributável demonstrado em QA
|
||||
|
||||
Base instalada `7a11c4ef`; primeiro recorte QA `664c88c8` preservado. A continuação reutiliza o plano reconciliado, o exercício, a oportunidade e os ajustamentos existentes. Não obriga a reintroduzir os montantes financeiros. Âmbito: projecção de Janeiro a Dezembro de 2026, MZN, sujeito residente no regime geral, com referência expressa de que o cenário cobre o sujeito passivo/exercício completo. Uma oportunidade parcial não se transforma automaticamente no total da empresa.
|
||||
|
||||
Cada linha do resultado exige qualificação ordinária e suporte: proveitos do exercício (18/20), custos remanescentes indispensáveis e documentados (22), sem outras exclusões/limites declarados. Os acréscimos 36(1)c reutilizam documentos e parcelas já registados. Seis grupos conservam a situação das variações patrimoniais positivas/negativas fora do resultado, outras correcções de rendimentos/custos, diferenças de periodização e operações especiais. **Valor conhecido (incluindo zero), ausência declarada com suporte e informação em falta são estados distintos.** Ausência não pode apagar uma origem financeira positiva ou descartar um montante já preenchido. Um valor conhecido não zero sem tratamento implementado permanece visível e impede apenas o fecho dependente, sem ser aplicado por presunção.
|
||||
|
||||
No caso ordinário delimitado, resultado financeiro + acréscimos fundamentados = lucro tributável simulado quando a conferência anual está completa e os outros efeitos são expressamente ausentes ou de valor conhecido zero. Exemplo sintético: 6480 + multa100 + juros compensatórios120 = 6700 MZN. Os 120 são um custo/pressuposto qualificado já incluído na origem; não são juros automaticamente calculados ou fiscalmente confirmados por L5. Falta de prova da variação patrimonial negativa mantém o lucro indeterminado, conservando resultado6480 e acréscimos220. Variação conhecida500, depreciação positiva ou juros financeiros remanescentes mantêm correspondência específica pendente. Sem acréscimos, uma conferência completa pode conservar o resultado financeiro; resultados negativos não são convertidos em zero nem em crédito/perda reportável.
|
||||
|
||||
Prova do delta: 9 testes novos; API privada 1 teste/38 verificações, criação → alteração com If-Match → recuperação, com rollback na QA isolada55441. Wayfinder gerou routes/actions; TypeScript e buildQA passaram. UI real: cálculo, gravação/recuperação local, valor conhecido zero, ausência, informação em falta, contradição e exportação HTML. Relatórios/dossiers dos casos conhecido e incompleto gerados a partir da recuperação efectiva da API. Versão2 adicional mantém o snapshot/resultado1 de664c88c8 legível e actual sem o recalcular; mudanças nas entradas desactualizam apenas o novo resultado e conservam histórico. Preservados33ficheiros anteriores de execução e31originais por hash;integrações anteriores de formulário/dossier não alteradas neste delta. Provas aceites L3/ISPC/câmbio/L5 reutilizadas, sem nova ronda manual.
|
||||
|
||||
**Preparação conjunta para entrega pelo Git:** primeiro recorte664c88c8 e continuação até lucro tributável, sobre7a11c4ef, com pacote/manifest e delta conferido. Não instalado nem integrado em main por esta preparação. Backup/restauro fresco e conferência do destino fazem parte da instalação posterior; não reutilizar como fresco o backup da entregaL5. Recibo `irpc-l6-taxable-profit-qa-20261025.json`; provas `outputs/irpc-l6-profit/` na QA isolada.
|
||||
|
||||
Matéria colectável, perdas reportadas, deduções, colecta, créditos de retenção e M20/M22 continuam fora deste percurso; L6 não está integralmente concluído. L5 permanece operacional no âmbito demonstrado; J1–J5/C1–C5 ficam para a AT e só limitam os casos efectivamente dependentes. Nenhuma nova pesquisa de taxas/CER de L5 foi feita.
|
||||
|
||||
|
||||
## 25/10/2026 — entrega conjunta L6 até lucro tributável instalada:5e02c23a
|
||||
|
||||
Instalado pelo Git `5e02c23af863485f6881e409c8704ec7e7573cc9`, sobre `7a11c4ef`, incluindo o primeiro recorte664c88c8. Backup fresco de25/10/2026 19:38:10UTC,restauro isolado sem rede na porta55441:174tabelas conferidas por contagem/checksum. Conferidos6ficheiros do delta,33protegidos,31originais e369ficheiros/configuração persistentes. Schema,roles/grants e permissões iguais.172tabelas de negócio preservadas;cache/sessões reconciliadas com reinício da fila,throttle e sessões anónimas da verificação.7a11c4ef conservado como versão anterior. Arquivadas/verificadas dependências de4versões antigas para margem de espaço,sem eliminar fontes,dados ou backups nem modificar as versões actual/anterior.
|
||||
|
||||
Revisão/manifest servidos,10marcadores compilados,4assets e simuladorHTTP200 conferidos. Pipeline normal:1teste/3106asserções,59testes/317asserções,888testesfrontend,tipo/build;sem outra ronda manual das provas aceites. Recibo:`irpc-l6-profit-delivery-20261025.json`.
|
||||
|
||||
**Disponível no âmbito demonstrado:**resultado financeiro6480+acréscimos220=lucro tributável simulado6700MZN;estados conhecidos,ausência declarada e informação em falta preservados. **6700MZN não é imposto a pagar.** Matéria colectável,deduções/perdas e colecta não são concluídas por esta instalação. L6 permanece parcial;dúvidasL5J1–J5/C1–C5 só limitam casos efectivamente dependentes. Continuação independente emQA para matéria colectável,sem repetir pesquisa ou provas aceitesL5/L3/ISPC/câmbio.
|
||||
|
||||
|
||||
## 25/10/2026 — L6 matéria colectável: perdas próprias e deduções delimitadas em QA
|
||||
|
||||
Base instalada `5e02c23a`, com lucro tributável simulado6700MZN; não é imposto a pagar. A continuação reutiliza esse resultado e a identidade fiscal já disponível na mesma oportunidade, mediante acção expressa que conserva edições. Recorte: sujeito residente no regime geral,2026,método declarativo/directo,perdas fiscais próprias em exercícios anuais ordinários. CIRPC15(1)a/15(2–4) e41(1–7),PDF5/p768(59) ePDF12/p768(66),conferidos nos originais aceites;cadeia de alterações existente reutilizada. Sem novos originais ou pesquisa dos pontosL5.
|
||||
|
||||
Livro de perdas por exercício e sujeito:montante fiscal apurado/corrigido,utilizações anteriores,saldo disponível e utilização proposta deste ano,com documentos e completude. Não usa perda contabilística como fiscal. Confere cinco exercícios ordinários posteriores,manutenção/alteração da actividade/objecto no termo do exercício,regime geral e saldo corrigido. Métodos indirectos,períodos especiais/curtos,transparência/isenção parcial,transferências/fusão41-A e correcções pendentes ficam fora do recorte. Expiração/exclusão conhecidas não são apagadas;pedido positivo contra perda excluída exige reconciliação. Utilização proposta é expressa,sem FIFO obrigatório,percentagem inventada ou saldo negativo;excesso sobre saldo/lucro mantém base indeterminada. Simular/gravar não consome o saldo oficial nem actualiza utilizações anteriores.
|
||||
|
||||
Exemplo sintético:lucro6700;perda2021apurada1000/utilizada200/saldo800/proposta800;perda2024apurada3000/utilizada500/saldo2500/proposta1500. Dedução2300,**matéria colectável simulada4400MZN**,saldos aritméticos0/1000. **Imposto a pagar permanece indeterminado.** Perda ordinária2020 expira após2025;2021pode ser usada em2026 no recorte demonstrado. Sem perdas/benefícios,ausência expressa e suportada pode conservar base6700;informação em falta não ézero. Benefício conhecido positivo é conservado com referência,mas não subtraído sem regra/condições/limite específicos. Deduções à base15(4) são distintas de efeitos já conferidos no lucro e de créditos à colecta/retenções. Resultado actual negativo permanece conhecido,sem basezero ou reporte automático neste recorte.
|
||||
|
||||
Prova do delta:10testes novos;APIprivada1teste/42verificações,criação→alteração comIf-Match→recuperação,rollback naQA55441. Routes/actions peloWayfinder,tipo/buildQA passaram. UI:cálculo4400,gravação/recuperação local,alteração expressa de utilização para700→base4500,repetição sem consumo,sobreutilização recusada,download,informação em falta e benefício positivo conservado sem subtracção. Dossier/HTML gerados da recuperação efectiva daAPI. Versão3 opcional conserva resultado2 actual e históricos1/2;alteração de entradas desactualiza apenas o novo resultado.37ficheiros anteriores de execução e31originais preservados por hash. Provas aceites reutilizadas,sem nova ronda manual. Recibo:`irpc-l6-taxable-base-qa-20261025.json`;QA isolada,sem instalação deste incremento.
|
||||
|
||||
L6 continua parcial. Colecta/imposto,créditos anuais,M20/M22,benefícios positivos e casos fora do recorte mantêm desenvolvimento próprio. As dúvidasL5J1–J5/C1–C5 só limitam casos efectivamente dependentes;nenhuma taxa de juros ou CER provisório foi promovido a confirmação fiscal.
|
||||
|
||||
|
||||
## 25/10/2026 — L6 colecta normal demonstrada em QA; entrega conjunta com a matéria colectável
|
||||
|
||||
Portal mantém `5e02c23a`. A continuação parte da QA `b8d45796` e reutiliza a matéria colectável actual, sem reintroduzir montantes. No recorte de sujeito residente em regime normal/MZN, exercício anual de01/01/2026 a31/12/2026, o enquadramento explícito do artigo61(1) aplica a taxa geral32%. A fonte/versão, período, classificação e suporte/pressuposto do caso são guardados. Campo por identificar ou caso especial não recebe taxa geral por aproximação; a matéria colectável conhecida permanece disponível.
|
||||
|
||||
**Sequência demonstrada:**lucro tributável simulado6700 → matéria colectável simulada4400 → colecta simulada4400×32%=1408MZN → **saldo final a pagar ou recuperar indeterminado, âmbitoL8**. Retenções, pagamentos e créditos do fecho anual não são abatidos nem reconciliados nesta etapa. Colecta não é saldo final. O campo legado `tax` continua nulo e o novo modelo guarda `colecta` separadamente; `finalBalance` mantém pagar/recuperar nulos, não zero.
|
||||
|
||||
Taxa32% conferida no CIRPC Lei34/2007,PDF17/p768(71). Lei4/2012 altera61(2); Lei20/2022PDF1/p2731 mantém61(1) e delimita medidas temporárias61(2) até31/12/2025; Lei12/2025PDF18/20 não altera61(1) e distingue61-A. Taxas reduzidas, benefícios, tributação autónoma e mais-valias continuam com tratamento próprio, mesmo se uma percentagem coincidir. Nenhuma extensão temporal/benefício foi inferida. A aritmética é racional exacta; eventual fracção de cêntimo é conservada sem arredondamento fiscal inventado. Não preenche/submeteM20/M22.
|
||||
|
||||
Prova do delta:8testes novos;APIprivada1teste/40verificações com criação→alteraçãoIf-Match→recuperação e rollback naQA55441. Wayfinder gerou routes/actions;TypeScript e buildQA passaram. UI real:base reutilizada,colecta1408,taxa/período/enquadramento visíveis,sequência ordenada,gravação/recuperação local,download e casos especiais/informação em falta sem taxa presumida. Dossier/HTML dos casos conhecido e incompleto gerados da recuperação efectiva daAPI. Versão4 opcional conserva versões1/2/3 e o resultado3 actual sem recálculo;mudanças nas entradas desactualizam só o novo resultado e conservam histórico.39ficheiros anteriores daQA e37do portal preservados,31originais sem alteração. Provas aceites reutilizadas,sem outra ronda manual. Recibo:`irpc-l6-colecta-qa-20261025.json`.
|
||||
|
||||
**Preparação conjunta compatível:**matéria colectávelb8d45796 e colecta normal neste candidato,base5e02c23a,6ficheiros de execução no delta conjunto. PacoteGit/provas/manifest conferidos apóscommit;sem integração emmain ou instalação nesta preparação. Instalação futura mantém procedimento de destino autenticado,backup/restauro fresco e conferência do delta. L6 continua parcial. Benefícios e casos especiais permanecem explícitos;L8 conserva o fecho anual e as dúvidasL5 só limitam os casos efectivamente dependentes.
|
||||
|
||||
|
||||
## 25/10/2026 — entrega conjunta matéria colectável/colecta instalada:2f684e59
|
||||
|
||||
Instalado pelo Git `2f684e59846187f3fb8a338d9d6f6a08cadb4d0d`, incluindo a matéria colectávelb8d45796, sobre `5e02c23a`, sem força, migrações ou importações. Backup fresco de25/10/2026 20:05:19UTC;restauro em base isolada sem rede/porta55441:174tabelas conferidas por contagem/checksum. Conferidos6ficheiros do delta,37protegidos,31originais e369ficheiros/configuração persistentes. Schema,roles/grants e permissões iguais;172tabelas de negócio preservadas. Cache/sessões reconciliadas com reinício da fila,throttle e sessões anónimas da verificação.5e02c23a permanece disponível como versão anterior. Arquivadas/verificadas dependências de4versões antigas para margem de espaço,sem eliminar fontes,dados ou backups nem modificar as versões actual/anterior.
|
||||
|
||||
Revisão/manifest públicos,11marcadores compilados,4assets e simuladorHTTP200 conferidos. Pipeline normal:1teste/3106asserções,59testes/317asserções,906testesfrontend,tipo/build. Provas aceites reutilizadas,sem outra ronda manual. Recibo:`irpc-l6-colecta-delivery-20261025.json`.
|
||||
|
||||
**Disponível no âmbito demonstrado:**lucro tributável simulado6700→matéria colectável4400→colecta normal32%/2026=1408MZN. **1408MZN não é saldo final a pagar.** A pagar/a recuperar continuam indeterminados emL8. Benefícios/casos especiais anuais sãoL7. O saldo concreto deL6 que justifica «parcial» fica discriminado na secção seguinte;esta actualização substitui,para o estado actual,as pendências genéricas de lucro/base/colecta anteriores já entregues,preservando-as apenas como histórico.
|
||||
|
||||
## 25/10/2026 — saldo concreto de L6 após a entrega 2f684e59
|
||||
|
||||
Esta discriminação actualiza **AUD-SIM-INT02 na mesma matriz**, com o âmbito L6/L7/L8 já registado no plano consolidado e a leitura do código de `2f684e59`. Não cria outro lote, matriz ou backlog. O estado «L6 parcial» decorre das lacunas funcionais abaixo; **não decorre de faltar o saldo anual de L8 ou os tratamentos de L7**. Os exemplos são casos de fronteira para desenvolvimento, não novos cálculos fiscais confirmados.
|
||||
|
||||
**Concluído no âmbito demonstrado e a preservar:** plano financeiro reconciliado → acréscimos36(1)c → lucro tributável6700 → perdas próprias ordinárias2300 → matéria colectável4400 → colecta normal32%/2026=1408MZN. Inclui conhecido/zero/ausência/falta de informação, limites de utilização, gravação/recuperação, histórico, relatório/exportação e indeterminação dos casos dependentes. Não repetir estas provas para fechar os pontos seguintes, excepto se o delta os afectar.
|
||||
|
||||
| Saldo que continua em L6 | Evidência concreta no código entregue | Exemplo do caso ainda não coberto | Critério concreto de fecho |
|
||||
|---|---|---|---|
|
||||
| Outros ajustamentos ordinários: admissibilidade de custos e correcções aos proveitos | `irpc-normal.ts`, `NormalAdjustment.rule` e `calculateNormal`: apenas multas não contratuais e juros compensatórios36(1)c; `other` fica fora do recorte. `irpc-normal-profit.ts` não aplica `incomeCorrections`/`expenseCorrections` conhecidos não zero. | Encargo de terceiro de250MZN com qualificação36(1)b, ou despesa não documentada36(1)g, incluído no resultado; a correcção não tem regra executável neste livro. A eventual tributação autónoma é outra operação, emL7. | Corresponder a regra geral e condições de cada categoria incluída, calcular acréscimo/dedução/exclusão com sinal e origem, evitar dupla contagem e demonstrar reflexo no lucro, base e colecta. A tributação autónoma que possa coexistir pertence aL7. |
|
||||
| Dedutibilidade dos juros financeiros ordinários | `irpc-normal-profit.ts`, `closeNormalProfit`: qualquer remanescente não zero de `interest_expense` mantém pendência; só os compensatórios integralmente acrescidos estão cobertos. | Juros de financiamento comercial de120MZN, distintos de juros compensatórios, com finalidade/custo documentados. | Qualificar a parcela ordinária, dedutibilidade e correcção aplicável, conservar os montantes reconhecidos/pagos separados e fechar o lucro sem a equiparar a infracção. Relações especiais/benefícios e regras especiais seguemL7; taxa de juros compensatóriosL5 só é dependência se esse cálculo for efectivamente usado. |
|
||||
| Reintegrações/amortizações fiscais e diferença face à contabilidade | `irpc-normal-profit.ts`: `depreciation` positivo bloqueia o fecho; não existe mapa fiscal de activos/quotas nesta família de módulos. | Depreciação contabilística120MZN com quota fiscal do activo ainda por corresponder. | Reutilizar activo, base e datas; corresponder método/taxa/limites e afectação ordinários, calcular quota fiscal e diferença para o resultado; manter mapas por activo/exercício e histórico. Incentivos, majorações e regimes especiais de activos seguemL7. |
|
||||
| Variações patrimoniais e periodização ordinárias de montante não zero | `irpc-normal-profit.ts`, `profitTopics`/`closeNormalProfit`: `positivePatrimonial`, `negativePatrimonial` e `timing` conhecidos não zero conservam valor e impedem o fecho; ausência/zero suportados são o caminho demonstrado. | Variação500MZN fora do resultado, ou diferença temporal300MZN entre reconhecimento contabilístico e exercício fiscal, com natureza concreta documentada. | Corresponder natureza/ano/regra ordinária e decidir inclusão, exclusão ou ajustamento com sinal; impedir reaplicação em dois exercícios; demonstrar cálculo→gravação→recuperação→relatório. Operações especiais/benefícios do tópico `special` não são saldo deL6. |
|
||||
| Resultado fiscal negativo do próprio exercício | `irpc-normal-base.ts`, `calculateNormalBase`: lucro negativo é conservado, mas a base fica indeterminada; o livro de perdas só admite exercícios anteriores ao de utilização. | Resultado fiscal actual−500MZN conhecido; não é uma perda anterior dedutível a si própria. | Tratar a situação da base/colecta nesse exercício e preparar a perda fiscal própria com origem/ano para utilização futura, conforme regra aplicável, sem confundir ausência de lucro, falta de informação, crédito ou consumo do saldo oficial. Perdas anteriores ordinárias já demonstradas continuam aceites. |
|
||||
| Extensões do âmbito normal previstas no L6 original | `irpc-normal.ts` fixa12meses/ano civil2026/residente/MZN; `irpc-normal-base.ts` exige exercícios anuais ordinários; a entrada deL6 no plano original inclui exercício fiscal e residência/EP. | Caso de estabelecimento estável sob regime geral, ou período fiscal normal diferente do calendário/horizonte do plano; plano noutra moeda ainda sem reconciliação fiscal anualMZN. | Delimitar os casos normais a admitir, imputação de resultados ao sujeito/EP, datas/períodos e reconciliaçãoMZN usando o câmbio já entregue; demonstrar o percurso dependente. Não reimplementar câmbio, exigir pesquisa de todos os anos históricos ou aplicar automaticamente32% fora do período correspondido. Benefícios/convenções/regimes específicos pertencem aos lotes próprios. |
|
||||
| Representação fiscal da colecta com fracção de cêntimo | `irpc-normal-assessment.ts` conserva o racional e assinala `centExact:false`; não aplica regra fiscal de arredondamento/transcrição. | Base0,01MZN×32%=0,0032MZN exactos; o caso1408MZN não tem esta ambiguidade e continua válido. | Identificar e executar a convenção aplicável à colecta/representação do formulário, mantendo o exacto e a rastreabilidade do valor transcrito. Não importar por analogia arredondamento de prestações/pagamentosL8 nem criar uma regra por defeito. |
|
||||
| Correspondência dos dados de L6 aos exemplares M/20/M/22 | A família `irpc-normal*` produz mapaHTML/dossier e exclui expressamente correspondência/transcrição oficial; o âmbito original deL6 inclui M/20/M/22 e diferenças de ediçãoPDF/XLSX. | Resultado, correcções, perdas, base4400 e colecta1408 existem no mapa de trabalho; os respectivos campos/anexos aplicáveis dos exemplares não estão correspondidos no motor. | Cotejar os exemplares já inventariados e mapear apenas os dados deL6 aos campos/versões efectivamente aplicáveis, com prova de preenchimento/recuperação. Os campos de retenções,pagamentos,créditos e saldo final sãoL8. Submissão electrónica/aceitaçãoAT não são presumidas como parte desta correspondência. |
|
||||
|
||||
**Encaminhado a L7, sem manter L6 parcial por essa razão:** benefícios/isenções da determinação anual do IRPC, taxas reduzidas/cooperativas, tributação autónoma de despesas e mais-valias61-A, operações especiais, perdas transmitidas/fusão41-A e segregação de regimes especiais. Uma dedução positiva de benefício à base continua sem aplicação no recorte entregue, mas o trabalho substantivo desse benefício éL7, não uma dedução livre nem um novo saldo genérico deL6. A integração posterior usa as interfaces/versionamento já existentes e afecta só os casos dependentes.
|
||||
|
||||
**Encaminhado a L8, sem manter L6 parcial por essa razão:** retenções sofridas a imputar ao fecho anual, PPC/PEC e outros pagamentos, créditos/deduções à colecta, dupla tributação quando aplicável, limites/transportes respectivos, reconciliação e saldo final a pagar ou recuperar/calendário. **1408MZN é colecta; pagar e recuperar continuam indeterminados.** Não abater parcelas L5 nem promover os seus códigos/taxas provisórios ao fecho anual nesta entrega.
|
||||
|
||||
**Informação do caso, distinta de desenvolvimento em falta:** falta de documento, NUIT, completude anual, montante, prova de saldo ou qualificação dentro de uma regra já implementada mantém o caso indeterminado, mas não constitui por si só outra tarefa deL6. O mesmo vale para a ausência de uma nova prova de uma funcionalidade já aceite. Não exigir nova aprovação genérica das fontes oficiais, novo aprovador ou repetição deL3/ISPC/câmbio/L5. Anos não incluídos no recorte temporal não se tornam automaticamente um projecto de cobertura histórica integral.
|
||||
|
||||
**Ordem de continuação delimitada:** ajustamentos ordinários/juros financeiros e amortizações; depois variações/periodização e resultado negativo; ampliar apenas os casos normais concretamente abrangidos e concluir a representação/correspondência dos dados deL6. Cada fecho deve demonstrar o delta e substituir a pendência correspondente nesta mesma linha/nota. Não há estimativa nova nem declaração deL6 integralmente concluído nesta revisão documental.
|
||||
|
||||
## 25/10/2026 — L6: três conjuntos compatíveis em QA sobre 2f684e59
|
||||
|
||||
Actualização de **AUD-SIM-INT02**, na matriz existente. O percurso instalado em `2f684e59` permanece aceite: lucro6700 → perdas2300 → matéria colectável4400 → colecta1408MZN; saldo anual continua indeterminado emL8. Este incremento é **QA, sem instalação**. Não repete as provas de L3, ISPC, câmbio ou L5; conserva a fotografia4 e o histórico sem recalcular a aceitação anterior.
|
||||
|
||||
| Conjunto | Delta executável demonstrado | Efeito e prova nova | Pendência concreta que subsiste |
|
||||
|---|---|---|---|
|
||||
| 1 — ajustamentos, juros, variações e periodização | Acréscimos36(1)a/b/g com parcela incluída e origem reconciliada; juros financeiros22c de exploração documentados, sem capitalização/relações/limites especiais; entradas de capital21a e distribuições24c externas ao resultado sem efeito fiscal; variações positivas21 e negativas22/24 ordinárias; especialização18(1) de custo/proveito entre exercício corrente e seguinte. Documento/linha únicos entre mapas, sinal e soma bruta por tema conferidos. | Resultado financeiro6240 + acréscimos anteriores220 + imposto de terceiro250 + variação positiva200 − negativa50 + custo de2027 contabilizado em2026 de100 + diferença de amortização20 = lucro6980. Juros reconhecidos240, compensatórios acrescidos120, remanescente ordinário120; pagamentos continuam separados. Informação insuficiente mantém os efeitos independentes visíveis e impede somente os totais dependentes. | Correcções ordinárias ainda sem regra: encargos e limites36(1)e/f/h/i/n, provisões28/29, operações plurianuais19 e componentes de exercícios anteriores18(2). Juros capitalizáveis/relações especiais e limites exigem o tratamento próprio; não são aceites por simples selecção de juros ordinários. A tributação autónoma que possa coexistir pertence aL7. |
|
||||
| 2 — amortizações e perda corrente | Decreto72/2013: quotas anuais constantes, custo/residual/acumulado, limite do saldo e vida útil; tabelaII/grupo3/item9 computadores25% e9.1 servidores20%, sem taxa específica da tabelaI prevalecente. Soma da depreciação contabilística por activo reconciliada com o plano; nenhum efeito de mapa incompleto aplicado. Perda corrente separada das perdas anteriores, sem auto-reporte. | Servidor500 ×20%=100 fiscal, depreciação contabilística120 → acréscimo20. Alterar quota/categoria, exceder vida útil ou não reconciliar a origem mantém o lucro dependente indeterminado. Outro exemplo: resultado fiscal−3820 → perda corrente3820 → base0/colecta0 apenas com suporte e conferência completos, sem dedução de perdas anteriores a si própria nem criação de saldo oficial. | Restante catálogo sectorial/genérico de activos, taxas reduzidas dentro dos limites, duodécimos, quotas decrescentes, bens usados/reavaliados, activos intangíveis e recuperação de quotas contabilizadas em anos anteriores. Não declarar toda a amortização fiscal concluída por estes dois itens. |
|
||||
| 3 — âmbitos, representação e M20/M22 | EP no regime geral, resultado completo exclusivamente imputável ao estabelecimento; ano civil ou período anual diferente autorizado7(2)/comunicado7(3), correspondência dos12 meses e termo em2026/MZN. Valores racionais exactos, sem arredondamento fiscal inventado. M22 campos259/260,269/270,276/277/278 e300 conforme aplicação; M20A.1 quadro4 contas6.1.1/6.2/6.5/6.9 com valores contabilísticos próprios. |6980 − perdas2300 = base4680; ×32%=colecta1497,60MZN, não saldo a pagar. EP com período01/07/2025–30/06/2026 demonstrado; período curto incompatível fica pendente. API privada recupera os quatro casos calculado/falta/perda/EP e os relatórios respectivos. M20 inteiro e M22 ao cêntimo apenas quando a representação é exacta; fracções conservadas e marcadas sem transcrição pronta. | Períodos curtos/transição/liquidação e reconciliação fiscal anual de planos noutra moeda (motor cambial aceite preservado). Representação fiscal de fracções de unidade/cêntimo por corresponder. No M20 faltam discriminação vendas/serviços, fornecimentos/outros gastos, imposto e resultado líquido; no M22 faltam a reconciliação do campo200 e detalhe dos restantes ajustamentos. Divergência delimitada de edições: folha M20A.1 do XLSX remete ao campo201/quadro8 do M22; PDF inventariado utiliza200/quadro10. Bloqueia esse transporte, não os outros campos. |
|
||||
|
||||
**Provas apenas do delta:** 14 testes frontend; API privada1 teste/78 asserções com transacção revertida na base QA127.0.0.1:55441; geração de routes/actions pelo procedimento existente, TypeScript e build; interface real com edição, taxa/categoria incompatível, falta de juros, gravação/recuperação, download e perda corrente; relatórios/dossier construídos a partir dos dados recuperados. Recibo `docs/investmoz/simulations/irpc-l6-compatible-sets-qa-20261025.json`; pacote/bundle em `outputs/irpc-l6-sets`. Sem alteração de schema, API, configuração, permissões ou dependências.
|
||||
|
||||
**Âmbitos próprios preservados:** L7 conserva benefícios, isenções, taxas reduzidas, tributações autónomas e operações especiais; L8 conserva retenções, pagamentos, créditos e saldo final. M22 campo302 não é preenchido só com a parcela normal300, nem os campos309–316 são preenchidos com zeros presumidos. As dez dúvidas deL5 continuam na mesma matriz, sem nova pesquisa e bloqueando apenas dependências efectivas. L6 continua parcial exclusivamente pelas pendências concretas da tabela; nenhum desses pontos reabre o percurso instalado.
|
||||
|
||||
## 25/10/2026 — conjunto L6 a2de7259 entregue pelo Git
|
||||
|
||||
Instalado `a2de725901c308fb2ac2bc3d72181ab50ef46b7a` sobre `2f684e59`, pelo procedimento Git existente, sem força, migrações ou importações. Backup fresco `2026-10-25T20:34:03Z` e restauro isolado sem rede/porta55441: **174tabelas** conferidas por contagem/checksum; **369ficheiros/configuração** preservados. Conferidos **8ficheiros do delta,38protegidos e31originais**; schema,roles/grants e permissões iguais. Tabelas de negócio preservadas; cache/sessões reconciliadas com os eventos operacionais da entrega. `2f684e59` permanece como versão anterior. Dependências de5versões antigas arquivadas e verificadas para espaço, sem modificar as versões actual/anterior, fontes, dados ou backups.
|
||||
|
||||
Revisão/manifest público,10marcadores compilados e simuladorHTTP200 conferidos. Pipeline normal concluído; as provas QA aceites foram reutilizadas, sem nova ronda manual. **Disponível no âmbito demonstrado: lucro6980 → base4680 → colecta1497,60MZN. O saldo final a pagar/recuperar continua indeterminado emL8.** Também preservados o caso de perda corrente e as distinções conhecido/ausência/falta de informação, os períodos/EP demonstrados e a preparação parcialM20/M22. Recibo:`docs/investmoz/simulations/irpc-l6-sets-delivery-20261025.json`.
|
||||
|
||||
O estado «QA sem instalação» da nota anterior é histórico para este conjunto. **L6 continua parcial pelos seis grupos concretos da secção seguinte**, cada um com condição de resolução e bloqueio delimitado. L7 eL8 mantêm os seus âmbitos.
|
||||
|
||||
|
||||
## 25/10/2026 — saldo curto de L6 após o conjunto a2de7259
|
||||
|
||||
Actualização de **AUD-SIM-INT02 na mesma matriz**, sem novo lote ou backlog. O percurso financeiro → ajustamentos documentados → lucro tributável → matéria colectável → colecta está demonstrado; no caso novo,6980 →4680 →1497,60MZN. A colecta não é saldo final a pagar. As pendências abaixo substituem a enumeração genérica anterior para o saldo actual deL6; não revogam as provas aceites.
|
||||
|
||||
| Caso ou correspondência pendente | Condição concreta de resolução | Limite do bloqueio |
|
||||
|---|---|---|
|
||||
| Custos com limites36(1)e/f/h/i/n, provisões28/29, obras plurianuais19 e componentes de exercícios anteriores18(2). | Implementar a regra de cada categoria a partir do diploma aplicável: parcela contabilizada, limite/base próprios, documentação e exercício de imputação; demonstrar o efeito com sinal nos totais. Nos exercícios anteriores, distinguir o que era imprevisível/manifestamente desconhecido no encerramento. | Só a categoria ou parcela ainda sem regra; os acréscimos36a/b/c/g, juros ordinários e periodização corrente/seguinte demonstrados permanecem utilizáveis. Eventual tributação autónoma pertence aL7. |
|
||||
| Amortizações além dos itensII/3/9 e9.1: restantes tabelas, quotas inferiores, duodécimos, quotas decrescentes, bens usados/reavaliados/intangíveis e recuperação de quotas anteriormente tributadas. | Corresponder categoria/tabela prevalecente, método, entrada em uso, vida útil, base depreciável e quotas contabilizadas/fiscais acumuladas; implementar o cálculo e a reconciliação que impeçam dupla dedução. | Só os activos/métodos afectados. Computadores25% e servidores20% no recorte anual constante e a perda corrente já demonstrada não são reabertos. |
|
||||
| Períodos curtos, transição/liquidação e reconciliação fiscal anual de plano noutra moeda. | Ligar os meses e factos de início/cessação/transição ao período fiscal; implementar os efeitos sobre quotas e contagem das perdas. Para outra moeda, identificar os eventos/datas e a regra de conversão anual aplicável, reutilizando o motor cambial aceite. | Só o período ou origem cambial sem reconciliação. Os períodos anuais emMZN e oEP com imputação documentada conservam o cálculo demonstrado. |
|
||||
| Representação fiscal de fracções de unidade/cêntimo. | Identificar a instrução de representação/arredondamento da edição/campo aplicável ou obter esclarecimento específico daAT; então implementar essa regra conservando o valor racional original. O exemplarM20A.1 pede meticais sem centavos, mas isso não determina sozinho como arredondar uma fracção. | Só a transcrição do valor não exactamente representável. Os cálculos racionais e os valores exactamente representáveis permanecem disponíveis; não é necessária nova validação genérica das fontes. |
|
||||
| M20A.1: discriminação de vendas/serviços, fornecimentos/outros gastos, imposto sobre o rendimento e resultado líquido; M22: campo200 e detalhe dos restantes ajustamentos. | Reutilizar a origem financeira, recolhendo apenas a classificação em falta e o imposto contabilizado; reconciliar resultado antes/depois de imposto e cada ajustamento com a edição aplicável. Não usar a colecta simulada como imposto contabilizado. Completar as correspondências por campo e demonstrar a recuperação/exportação. | Só os campos sem correspondência. M20A.1/Q4 contas6.1.1/6.2/6.5/6.9 e M22 campos259/260,269/270,276/277/278 e300 conservam a preparação parcial demonstrada. |
|
||||
| Transporte de resultado entre ediçõesM20/M22: XLSXM20A.1 remete para201/quadro8; PDFM22 inventariado usa200/quadro10. | Identificar a edição do formulário de destino e corresponder explicitamente o resultado líquido a essa edição; registar a remissão corrigida sem substituir os exemplares ou reutilizar fórmulas antigas por aproximação. | Só esse transporte entre edições; não bloqueia os cálculos independentes nem os outros campos já correspondidos. |
|
||||
|
||||
**L6 continua parcial por estes casos concretos.** Documento ou parâmetro em falta dentro de regra implementada é uma pendência do caso, não outra tarefa genérica deL6. Juros capitalizáveis, relações especiais e tratamentos especiais conservam o enquadramento próprio, sem presumir que satisfazem o recorte de juros ordinários.
|
||||
|
||||
**L7** mantém benefícios, isenções, taxas reduzidas, tributações autónomas e operações especiais. **L8** mantém retenções, pagamentos, créditos e saldo final a pagar/recuperar. A ausência desses tratamentos não reabre o percurso normal entregue nem justifica, por si, «L6 parcial». A divergência documental não autoriza preencher M22 campo302 ou309–316 com zeros presumidos. As dez dúvidas deL5 permanecem válidas e bloqueiam apenas os casos efectivamente dependentes; sem nova pesquisa ou repetição das provas aceites.
|
||||
|
||||
## 26/10/2026 — L6: custos com limites, provisões e periodização em QA
|
||||
|
||||
Actualização de **AUD-SIM-INT02 na mesma matriz**, sobre o conjunto instalado `a2de7259`. **Novo incremento em QA, sem instalação.** O percurso e as provas já aceites deL6/L3/ISPC/câmbio/L5 foram reutilizados; não foram novamente executados os testes funcionais anteriores. A fotografia5 continua actual sem activar os novos campos; a fotografia6 guarda estes mapas e conserva o resultado anterior no histórico.
|
||||
|
||||
**Reutilização e resultado demonstrado:** resultado financeiro6240MZN, acréscimos anteriores220 e mapas anteriores520 conservados; novos ajustamentos de custos/provisões/periodização+350 e obra−600 → **lucro tributável6730MZN**. Dedução expressa das perdas anteriores2300 → **matéria colectável4430MZN**; taxa normal32% → **colecta1417,60MZN**. Não é saldo final a pagar. Nenhum saldo oficial de provisões/perdas é consumido, nem é alterada declaração ou história anterior.
|
||||
|
||||
| Categoria e condição no exercício anual com termo em2026 | Parcela aceite, limite e ajustamento demonstrados | Informação insuficiente ou caso separado |
|
||||
|---|---|---|
|
||||
| Ajudas de custo/deslocação em viatura própria36(1)e: parcelas facturadas e tributadas emIRPS identificadas sem sobreposição. Representação36(1)f/36(3) ordinária documentada. | Ajudas100:facturadas20,tributadas e não facturadas20;remanescente60 →30 acrescido/70 aceite. Representação50 →40 acrescido/10 aceite. Zero conhecido nos parâmetros é distinto de campo vazio. | Parcela facturada/tributada em falta impede a aceitação dependente; não presumir ausência deIRPS. Eventual tributação autónoma continuaL7. |
|
||||
| Publicidade ordinária36(1)n,Lei20/2009: receita declarada reconciliada com vendas normais e completude anual das parcelas. | Um limite anual partilhado de1% de12000=120. Caso com duas parcelas100+100:aceites60+60,acréscimo80. A repartição proporcional é apenas aritmética de simulação, não uma ordem fiscal obrigatória. | Campanha de lançamento com horizonte superior a um ano não recebe este tratamento por aproximação: periodização36-A e articulação do limite permanecem por implementar. |
|
||||
| Encargos com viaturas36(4), combustível36i e aluguer sem condutor36h, distinguindo categoria/serviço público/locação na actividade normal. | Outros encargos100 de passageiros sem excepção:aceite50/acréscimo50. Combustível50 não sujeito a36(4),com40 comprovados no activo/locação e consumo normal:aceite40/acréscimo10. Renda100 no caso documentado de excepção36(4),quota não aceite36h de20:aceite80/acréscimo20; a quota é reutilizada do suporte e não apurada automaticamente. | Se há simultaneamente parcela excluída porh/i e aplicação dos50% de36(4), a combinação fica pendente. Exemplo:fuel100,comprovado80,passageiro sem excepção; não somar nem repartir correcções por presunção. Resolver a regra de articulação dos trechos aplicáveis ou esclarecer esse exemplo especificamente comAT. Apuramento automático da quota36h permanece no saldo de amortizações; só bloqueia esse caso. |
|
||||
| Provisão/perda por imparidade de créditos28a/29: regime ordinário identificado, créditos normais finais e provisão fiscal anterior conhecidos. | Base10000:limite anual1,5%=150,acumulado6%=600. Saldo anterior550 deixa50;provisão contabilística200 →50 aceite/150 acrescido. Duas parcelas100+100 partilham25+25; não repetem os limites nem consomem o saldo oficial. | Saldo anterior vazio não é zero; anterior superior ao tecto pede reconciliação/reversão28(2). Provisões sujeitas a supervisão financeira/seguradora28d ou reforços financeiros28(3) exigem correspondência própria, sem aplicar29 por aproximação. |
|
||||
| Existências28b:perda efectivamente observada. Processo judicial28c:em curso e obrigação subjacente fiscalmente dedutível. | Existências:parcela60,perda total40,provisão anterior10 →30 aceite/30 acrescido. Judicial:parcela90,obrigação100,anterior20 →80 aceite/10 acrescido. Perda não observada ou processo que não esteja em curso são condições negativas conhecidas:acréscimo integral, sem zero presumido como dedução. | Falta de prova do evento,obrigação,perda ou saldo anterior fica indeterminada. Objecto/saldo repetido entre documentos impede reutilizar a cobertura; agregar/reconciliar as parcelas do mesmo objecto. |
|
||||
| Reversões28(2) e provisões anteriormente tributadas:mesmo objecto e tratamento fiscal anterior comprovados. | Provisão antes deduzida:reversão50 já incluída no resultado não acrescenta novamente;omitida dos proveitos acrescenta50. Reversão contabilística50 de provisão antes tributada comprovada é excluída por50. | Não inferir o tratamento anterior do saldo contabilístico. Quantia superior à parcela fiscal demonstrada,evento que continua a subsistir ou objecto duplicado ficam pendentes. Sem alteração retrospectiva ou consumo do saldo oficial. |
|
||||
| Componentes de exercícios anteriores18(2):conhecimento/imprevisibilidade no encerramento anterior documentados. | Custo80 conhecido no fecho2025,incluído no resultado actual →acréscimo80. Se imprevisível/manifestamente desconhecido à data daquele fecho →sem acréscimo por periodização. Proveito50 conhecido no fecho anterior →excluído do actual por50;se imprevisível/desconhecido →considerado no actual. | Conhecimento no fecho em falta impede apenas a imputação da parcela. Nenhuma rectificação de declaração anterior é executada. Periodizações específicas18(6–10) não passam a estar cobertas por este recorte18(2). |
|
||||
| Obras plurianuais19 e perdas meramente estimadas36m:critério uniforme,preço,custo incorporado/custo total e acumulados fiscais anteriores documentados. | Percentagem:preço2000,custo total1000,incorrido500;proveito fiscal acumulado1000 menos anterior600=400 corrente;custo500 menos anterior300=200 corrente. Proveito contabilizado1000/custo200 →ajustamento−600. Encerramento tem caso separado;facturação parcial com acabamento correspondente/entregas fraccionadas impõem percentagem;95% com preço conhecido ou recepção provisória pública determina conclusão. Perda meramente estimada50 de obra em curso →acréscimo50. | Acumulados incoerentes ou método incompatível bloqueiam essa obra. Receita antecipada19(5) positiva e mudança de critério com autorização19(6) ficam por corresponder; o caso demonstrado declara expressamente zero de receita antecipada e método mantido, sem presumir essas condições. |
|
||||
|
||||
**Percurso demonstrado:** cálculo → gravação → recuperação pela API privada → relatório/dossier/exportação em cinco casos:conjunto calculado,informação insuficiente,categorias adicionais,limites partilhados e encerramento de obra. Só os novos casos foram testados: **22 testes frontend,1 testeAPI/83asserções**, transacção revertida na base QA127.0.0.1:55441; routes/actions gerados pelo procedimento existente,TypeScript/build e interface real passaram. Interface permite reutilizar a parcela livre da origem e o saldo financeiro de créditos quando conhecido; alterações às somas dos temas são revistas antes de aplicar e não apagam escolhas ou históricos. Fonte ausente ou saldo não acompanhado nunca cria zero. Valores racionais são conservados, apresentações decimais aproximadas são identificadas e uma perda inferior a um cêntimo não é truncada para zero.
|
||||
|
||||
**Preservação:**6ficheiros de runtime no delta,42protegidos e31originais conferidos; sem schema/API/configuração/permissões/dependências alterados, sem escrita no activo. Recibo:`docs/investmoz/simulations/irpc-l6-costs-provisions-timing-qa-20261026.json`;bundle/pacote em `outputs/irpc-l6-costs`. DivergênciaM20/M22 permanece limitada ao transporte201/quadro8 versus200/quadro10; não é uma condição destes cálculos. Não foram criadas correspondências oficiais de campos para estes novos ajustamentos por presunção.
|
||||
|
||||
**Saldo deL6 após estes casos QA:**combinação36h/i+36(4);quota36h automática e restantes amortizações;campanhas36-A e sua articulação com1%;provisões reguladas/reforços financeiros e periodizações específicas não cobertas;receita antecipada positiva/mudança autorizada do método de obra;períodos curtos/conversão fiscal anual;representação fiscal de fracções e restantes correspondênciasM20/M22. Cada pendência afecta o caso/campo dependente, não o conjunto independente demonstrado. Benefícios,isenções,taxas reduzidas e operações especiais mantêm âmbitoL7;retenções,pagamentos,créditos e saldo anual mantêm âmbitoL8. **L6 continua parcial.** As dez dúvidas deL5 não foram reabertas.
|
||||
|
||||
## 26/10/2026 — conjunto L6 043dd35d entregue pelo Git
|
||||
|
||||
Instalado `043dd35d8ee247123b3a32f1fc10fd2ede81e9f4` sobre `a2de7259`, pelo procedimento Git existente, sem força, migrações ou importações. Backup fresco `2026-10-26T06:35:29Z` e restauro isolado sem rede/porta55441: **174tabelas** conferidas por contagem/checksum; **369ficheiros/configuração** preservados. Conferidos **6ficheiros do delta,42protegidos e31originais**; schema,roles/grants e permissões iguais. Tabelas de negócio preservadas; cache/sessões reconciliadas com os eventos operacionais da entrega. `a2de7259` permanece como versão anterior. Dependências de4versões antigas arquivadas e verificadas para espaço, sem modificar as versões actual/anterior, fontes, dados ou backups.
|
||||
|
||||
Revisão/manifest público,11marcadores compilados e simuladorHTTP200 conferidos. Pipeline normal concluído; as provas QA aceites foram reutilizadas, sem nova ronda manual. **Disponível no âmbito demonstrado: lucro6730 → base4430 → colecta1417,60MZN. O saldo final a pagar/recuperar continua indeterminado emL8.** Também preservados o caso de perda corrente e as distinções conhecido/ausência/falta de informação, os períodos/EP demonstrados e a preparação parcialM20/M22. Recibo:`docs/investmoz/simulations/irpc-l6-costs-delivery-20261026.json`.
|
||||
|
||||
O estado «QA sem instalação» da nota anterior é histórico para este conjunto. **L6 continua parcial pelos seis grupos concretos da secção seguinte**, cada um com condição de resolução e bloqueio delimitado. L7 eL8 mantêm os seus âmbitos.
|
||||
|
||||
|
||||
## 26/10/2026 — saldo de L6 após a entrega043dd35d
|
||||
|
||||
Mesma matriz AUD-SIM-INT02. Custos/provisões/periodização demonstrados entregues; trabalho seguinte:amortizações. Provas aceites reutilizadas.
|
||||
|
||||
| Caso ou correspondência pendente | Condição concreta de resolução | Limite do bloqueio |
|
||||
|---|---|---|
|
||||
| Combinação36h/i com36(4) | Corresponder a regra de articulação dos trechos aplicáveis ou esclarecer comAT o exemplo combustível100/comprovado80/passageiro sem excepção;sem somar ou repartir correcções por presunção. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
| Quota36h automática e amortizações restantes | Reconciliar tabela/método/entrada emuso/quotas contabilísticas e fiscais anteriores;prioridade seguinte deL6. A parcela36h documentada continua reutilizável nos casos independentes. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
| Campanhas plurianuais36-A e limite1% | Implementar a periodização por três exercícios e a sua articulação com36n; não tratar a campanha como publicidade ordinária. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
| Provisões reguladas28d e reforços financeiros28(3) | Corresponder a regra sectorial/supervisão ou o reforço financeiro e os saldos documentados; não usar os limites ordinários29 por aproximação. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
| Receita antecipada19(5) positiva e mudança autorizada19(6) | Corresponder os custos futuros/receita antecipada e o transporte entre exercícios ou a autorização da mudança de método;os casos zero conhecido/método mantido permanecem executáveis. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
| Outras periodizações,âmbitos eM20/M22 | Tratar apenas os casos específicos18(6–10),períodos curtos/conversão anual,representação fiscal e campos ainda sem correspondência,com os parâmetros da edição/caso;divergência201/Q8 versus200/Q10 só afecta o transporte indicado. | Apenas o caso/campo dependente; cálculos independentes preservados. |
|
||||
|
||||
L6 continua parcial. L7 mantém benefícios/casos especiais;L8 mantém retenções/pagamentos/créditos/saldo final. As dez dúvidasL5 não foram reabertas.
|
||||
|
||||
## 26/10/2026 — L6: amortizações em QA, sem instalação
|
||||
|
||||
O portal mantém `043dd35d` instalado: colecta demonstrada1417,60MZN, sem saldo finalL8. O novo conjunto optativo `IRPC-normal-adjustments/7` reutiliza os activos e o resultado financeiro já declarados. Versões1–6 e históricos permanecem intactos; activar o novo mapa substitui o efeito fiscal anterior das amortizações, sem o somar novamente. Ausência declarada de quotas anteriores é distinta de informação em falta e exige referência.
|
||||
|
||||
Cobertura delimitada ao exercício anual2026/MZN e bens novos ao custo histórico: tabelaII/3/9 computadores25%,3/9.1 servidores20%,3/23 segurança20%,3/22 máquinas não especificadas10%,5/7 mobiliário10%,1/2.2 edifícios comerciais/administrativos2%,4/9.2 veículos ligeiros/mistos25%,5/8 software25%; tabelaI/84.2/B decoração hoteleira20% e84.3/A máquinas de lavandaria12,5%. A tabelaI prevalece quando aplicável; não se presume que esta lista cobre todo o catálogo. Fonte: Decreto72/2013, artigos3–10/17 e tabelas, exemplar original anteriormente aceite e hash preservado; CIRPC27e para limite800000MZN de viaturas e exclusão de terrenos.
|
||||
|
||||
Método constante com taxa expressamente escolhida no recorte metade–máximo; degressivo apenas para bens elegíveis novos, factores máximos1,5/2/2,5 segundo vida útil. Opção8(2) demonstrada apenas em ano civil/início1Janeiro, com quotas anteriores completas documentadas. Duodécimos incluem mês de entrada e excluem mês de saída, respeitando vida máxima. Software exige direitos onerosos/exclusivos e duração limitada; art17 exige bem individual até20000 e opção documentada. Quotas anteriores recuperáveis têm prova contabilística/fiscal e são limitadas à parte elegível: quotas nunca contabilizadas ou permanentemente excluídas não se tornam dedutíveis. Nenhum saldo oficial é consumido.
|
||||
|
||||
| Novo caso | Efeito demonstrado em MZN: lucro → matéria colectável → colecta |
|
||||
|---|---|
|
||||
| Computador em uso desdeJulho: quota fiscal50, ajustamento70, substituindo anterior20 | 6780 →4480 →1433,60 |
|
||||
| Mesmo activo, saída15Outubro:3meses/quota25 | Colecta1441,60; entrada/saída identificadas no relatório |
|
||||
| Degressivo elegível: quota200, ajustamento40 | 6630 →4330 →1385,60 |
|
||||
| Quota anterior documentada:20 recuperados,20 restantes; ajustamento−20 | 6730 →4430 →1417,60 |
|
||||
| Máquina de lavandariaI/84.3/A: quota62,50, ajustamento57,50 | 6767,50 →4467,50 →1429,60 |
|
||||
| Quota contabilística anterior em falta | Lucro/base/colecta indeterminados; ajustamentos independentes conhecidos continuam discriminados |
|
||||
|
||||
Cálculo → gravação → recuperação pela API privada → relatório/dossier demonstrado em cinco casos. **18novos testes frontend;1testeAPI/84asserções**, rollback na baseQA127.0.0.1:55441; routes/actions gerados, TypeScript/build e interface real passaram, incluindo edição, reutilização, ausência declarada, falta de informação, recuperação e exportação. Provas aceites reutilizadas. **7ficheiros de runtime no delta,43protegidos e31originais conferidos**; sem migração/API/configuração/permissões/dependências ou escrita no activo.
|
||||
|
||||
| Saldo concreto das amortizações | Condição de retoma |
|
||||
|---|---|
|
||||
| Outros códigos/taxas, por exemploII/3/3 ar condicionado12,5% | Acrescentar correspondência verificada, elegibilidade e prova apenas desse delta; sem aprovação genérica adicional |
|
||||
| Bens usados, abertura de escrita, grandes reparações/benfeitorias7(2)/(4), reavaliações15 e transição anterior2014 | Documentar vida esperada, bases/quotas anteriores e implementar a regra específica aplicável |
|
||||
| Uso intensivo11, concessões12, peças14, intangíveis específicos16 e eventos de transferência/relocação | Corresponder condições legais e histórico do evento; desenvolvimento/goodwill não herdam taxa do software |
|
||||
| Mudança de método10, excepções, taxas fora do recorte, vida máxima anual terminada a meio do período e opção8(2) fora do caso demonstrado | Histórico concreto e regra/excepção correspondente; autorização apenas quando a norma a exigir |
|
||||
| Restantes custos/provisões/periodizações da entrega043dd35d; períodos curtos, conversão anual, representação fiscal e correspondênciasM20/M22 | Mantêm os critérios concretos já registados na matriz; este incremento não os encerra |
|
||||
|
||||
A divergência201/quadro8 versus200/quadro10 bloqueia apenas o transporte afectado. Não foram presumidas correspondências oficiais para estes novos campos. **L6 continua parcial;L7 eL8 mantêm os seus âmbitos.** As dez dúvidasL5 não foram reabertas. Recibo: `docs/investmoz/simulations/irpc-l6-depreciation-qa-20261026.json`.
|
||||
|
||||
## 26/10/2026 — amortizações e9fe1022 entregues pelo Git
|
||||
|
||||
Instalado `e9fe102259c183a9d9bf7e39f246a8c3860839c6` sobre `043dd35d`, preservado como versão anterior. Backup fresco `2026-10-26T07:31:29Z` e restauro isolado sem rede/porta55441: **174tabelas** por contagem/checksum e **369ficheiros/configuração** conferidos. **7ficheiros do delta,43protegidos e31originais** verificados; schema,roles/grants e permissões iguais. As172tabelas de negócio mantêm os valores do backup. Cache:reinício da fila,contadores/timers e renovação da validade do mesmo valor de cache da página inicial. Sessões:expiração individual comprovada pelo prazo configurado120minutos,novas consultas da entrega e acessos anónimos correlacionados por agente/data no nginx;sem perda de dados de negócio. Dependências de5versões antigas arquivadas/verificadas para a margem do pipeline,preservando versões actual/anterior,fontes,dados e backups.
|
||||
|
||||
Revisão/manifest público,5marcadores compilados,4assets e simuladorHTTP200 conferidos. Pipeline normal concluído; provas QA18frontend/API1-84/UI/tipos/build reutilizadas,sem nova ronda manual. **Exemplo disponível: lucro6780 → matéria colectável4480 → colecta1433,60MZN. Saldo final a pagar/recuperar indeterminado emL8.** Históricos1–6 preservados; versão7 apenas por activação do novo mapa,substituindo o efeito anterior sem duplicação. Recibo:`docs/investmoz/simulations/irpc-l6-depreciation-delivery-20261026.json`.
|
||||
|
||||
O estado anterior «QA sem instalação» de e9fe1022 é histórico. Mantêm-se explícitos os outros códigos de tabela;usados/abertura de escrita/reparações/reavaliação/transição;uso intensivo/concessões/peças/intangíveis específicos/eventos;mudanças/excepções de método e opções fora do recorte. Retoma por correspondência da regra específica,base/vida/quotas e prova do delta,sem autorização genérica adicional. Períodos curtos e planos noutra moeda são o próximo incrementoQA,reutilizando o mecanismo cambial. Restantes custos/períodos/representação/camposM20-M22 conservam critérios próprios;divergência201/Q8 versus200/Q10 restringe apenas o transporte afectado. **L6 parcial;L7/L8 próprios;dez dúvidasL5 não reabertas.**
|
||||
|
||||
## 26/10/2026 — L6: períodos curtos e planos noutra moeda em QA
|
||||
|
||||
`e9fe1022` está instalado, com o âmbito de amortizações já demonstrado e os restantes casos de tabela/método explícitos acima. Este novo conjunto optativo `IRPC-normal-adjustments/8` está **emQA,sem instalação**. Reutiliza os meses e montantes do plano,os mapas fiscais emMZN e o mecanismo cambial entregue. Os históricos1–7 e o plano original não são reescritos.
|
||||
|
||||
Períodos de meses completos com termo em2026: início7(4)a,cessação7(4)b,início/fim de sujeição7(4)c e transição7(4)d,mediante identificação do evento/datas/suporte; plano com6meses ou selecção explícita de6dos12meses,sem anualizar receita,resultado,base ou taxa. Primeiro mês civil do plano é declarado,não inferido do mês orçamental. Anual diferente do ano civil conserva a correspondência do período autorizado/comunicado existente. Duodécimos ordinários do art9(3) do Decreto72/2013 aplicam o número de meses de utilização;art17 integral em período curto e restantes excepções não se tornam suportados por aproximação. Elemento conhecido como não amortizável mantém acréscimo integral,sem exigir método irrelevante.
|
||||
|
||||
Planos em outra moeda: cada mês seleccionado reutiliza ou confirma selecção cambial pelo procedimento existente,coluna/data/boletim/sentido e vínculo à origem. Moeda e valores originais permanecem no relatório. Não se adopta taxa actual,única ou de outro mês por defeito. **A conversão mensal para simulação exige pressuposto documentado;não confirma automaticamente uma regra fiscal de conversão anual.** Os mapas/activos/quotas/perdas existentes continuam emMZN e são reconciliados expressamente;nenhuma segunda conversão automática. Saldos patrimoniais de créditos em moeda estrangeira não são apresentados comoMZN pela conversão dos fluxos do plano;correspondência de saldo/data/taxa continua separada.
|
||||
|
||||
| Caso novo | Efeito demonstrado emMZN |
|
||||
|---|---|
|
||||
| Início1Julho–31Dezembro,meses7–12: resultado3120;quota fiscal50 e ajustamento10 | Lucro3130 → matéria colectável3130 → colecta1001,60,à taxa32%;ausência de perdas/benefícios declarada |
|
||||
| Mesmo recorte emUSD,pressuposto sintético64MZN/USD identificado em cada mês;mapasMZN reconciliados | Resultado199680;ajustamento640;lucro/base200320 → colecta64102,40. Taxa64 é pressupostoQA,não boletimBM real ou parâmetro fiscal confirmado |
|
||||
| Anual emUSD;plano de6meses iniciado emJulho;cessação e sujeição no mesmo ano | Novos testes próprios;respectivamente colecta128204,80 e1001,60nos casos correspondidos,sem anualização do semestre |
|
||||
| Falta de selecção de um mês,moeda incompatível ou taxa editada sem confirmação | Valores originais e conversões independentes visíveis;resultado/lucro/base/colecta dependentes indeterminados |
|
||||
| Perdas reportadas propostas num período curto | Lucro3130conhecido;dedução/base/colecta pendentes da sequência de períodos. Art41(5) exclui da contagem o período de transição7(4)d inferior a6meses;não autoriza agregar todos os períodos curtos |
|
||||
|
||||
Cálculo → gravação → recuperaçãoAPI → relatório/dossier demonstrado em4casos. **13testes novos frontend,API1teste/58asserções**, rollback na baseQA127.0.0.1:55441;routes/actions pelo procedimento existente,TypeScript/build e interface real passaram. Interface demonstrou alteração de datas e taxa,confirmação cambial,recuperação e exportação. Mudança na origem cambial invalida a actualidade do novo resultado,conservando o histórico. Provas aceites reutilizadas,sem repetição manual. Delta:**9ficheiros de runtime,43protegidos e31originais**;sem API/schema/configuração/permissões/dependências ou escrita no activo.
|
||||
|
||||
| Pendência concreta | Condição de retoma e bloqueio |
|
||||
|---|---|
|
||||
| Datas parciais,períodos superiores a12meses/liquidação e curtos fora do recorte2026 | Corresponder datas/evento,parcelas de dias e regra aplicável;apenas esse período depende da implementação |
|
||||
| Dedução de perdas em sequência com períodos curtos/transição | Declarar sequência efectiva de períodos posteriores e aplicar41(5) ao caso7(4)d inferior a6meses;sem prazo presumido só por ano civil. Lucro independente continua calculável |
|
||||
| Limites anuais de publicidade e provisão de créditos em período curto | Corresponder expressamente a base/limite do período e regra de proporcionalização,se aplicável;sem anualização ou rateio presumidos. Outros custos e períodos anuais não bloqueados |
|
||||
| Quota integral art17 em período curto,opções/métodos/tabelas e casos de amortização ainda não suportados | Implementar combinação específica e provar só o novo efeito;condições restantes do conjuntoe9fe1022 continuam válidas |
|
||||
| Conversão fiscal anual confirmada,saldos em moeda estrangeira e fracções de cêntimo da conversão | Identificar regra fiscal/data/base,taxa e âmbito;para saldos,conversão própria em vez de somar fluxos;para fracções,regra de representação. Até lá,pressupostos de simulação explícitos e total indeterminado quando não representável neste recorte |
|
||||
| Restantes custos/periodizações e correspondênciasM20/M22 | Mantêm os critérios já registados. Divergência201/Q8 versus200/Q10 limita só o transporte afectado |
|
||||
|
||||
Fontes primárias reutilizadas: CIRPC Lei34/2007 PDF4/p768(58),art7(4)/(7),ePDF12/p768(66),art41(5);Decreto72/2013 PDF3/p1074(7),art9(3). Exemplar e originais/hash preservados;sem importação/publicação documental. **L6 continua parcial. Colecta não é saldo final a pagar;L7 eL8 mantêm âmbitos próprios.** As dez dúvidasL5 não foram reabertas. Recibo:`docs/investmoz/simulations/irpc-l6-periods-fx-qa-20261026.json`.
|
||||
|
||||
## 26/10/2026 — períodos curtos e planos noutra moeda56475acb entregues pelo Git
|
||||
|
||||
Instalado `56475acb2f39e58cb51664913f7fb499f58eb7ab` sobre `e9fe1022`,preservado como versão anterior. Backup fresco `2026-10-26T08:17:39Z` e restauro isolado sem rede/porta55441: **174tabelas** por contagem/checksum e **369ficheiros/configuração** conferidos. **9ficheiros do delta,43protegidos e31originais** verificados;schema,roles/grants e permissões iguais. As172tabelas de negócio mantêm os valores do backup. Cache/sessões reconciliadas com os eventos operacionais e acessos anónimos registados;expiração,quando aplicável,comprovada individualmente pelo prazo configurado. Dependências de5versões antigas arquivadas/verificadas,preservando versões actual/anterior,fontes,dados e backups.
|
||||
|
||||
Revisão/manifest público,6marcadores compilados,4assets e simuladorHTTP200 conferidos. Pipeline normal concluído;provasQA13frontend/API1-58/UI/tipos/build reutilizadas,sem nova ronda manual. **Semestre demonstrado: lucro3130 → matéria colectável3130 → colecta1001,60MZN.** PlanoUSD:pressuposto sintético64MZN/USD por mês identificado,originais conservados e mapasMZN reconciliados;lucro/base200320 → colecta64102,40MZN. **Não confirma regra fiscal de conversão anual nem boletimBM real. Saldo final a pagar/recuperar continua indeterminado emL8.** Históricos1–7 preservados;versão8 optativa,sem anualizar resultados ou usar taxa actual por defeito. Recibo:`docs/investmoz/simulations/irpc-l6-periods-fx-delivery-20261026.json`.
|
||||
|
||||
O estado anterior «QA sem instalação» de56475acb é histórico. Permanecem explícitos os casos de datas parciais/liquidação,sequência de perdas41(5),limites anuais em período curto,art17 curto/restantes amortizações,conversão fiscal anual/saldos em outra moeda/fracções e demais custos/periodizações. Condições de retoma continuam na mesma matriz. Próximo incrementoQA:representação de valores e camposM20/M22 por corresponder;divergência201/Q8 versus200/Q10 limitada ao transporte do resultado afectado,sem reabrir cálculos demonstrados. **L6 parcial;L7/L8 próprios;dez dúvidasL5 não reabertas.**
|
||||
|
||||
## 26/10/2026 — L6: representação dos valores e campos M20/M22 em QA
|
||||
|
||||
`56475acb` está instalado. Este novo conjunto optativo `IRPC-normal-adjustments/9` está **em QA, sem instalação** e acrescenta preparação dos valores/campos, sem alterar fórmulas de lucro tributável, matéria colectável ou colecta. Históricos1–8, plano original, pressupostos cambiais e demais livros preservados. A falta de uma correspondência documental afecta o campo e a sua reconciliação, mantendo os totais fiscais existentes.
|
||||
|
||||
**Representação:** valor racional exacto conservado, apresentação aproximada identificada por«≈» e fracção original; zero conhecido, informação em falta e campo sem aplicação distintos. M20A.1/quadro4/M12 pede meticais sem centavos: valores inteiros são representáveis, fracções ficam por corresponder, sem arredondamento/truncagem. Preparação M22 já aceite com valores exactos ao cêntimo preservada; fracções de cêntimo continuam explícitas e pendentes da regra fiscal aplicável. Resultado líquido negativo M20 é apresentado entre parêntesis; M22 separa campo de lucro do de prejuízo, sem colocar perda no lucro ou criar matéria colectável negativa.
|
||||
|
||||
**M20:** reutiliza as quatro correspondências directas de custos das vendas,pessoal,depreciação e juros. Discrimina as receitas e despesas operacionais por conta com suporte e reconciliação exacta ao plano do período/moeda. Demonstra prestação de serviços7.2,fornecimentos/serviços6.3,outros gastos6.8 e imposto contabilizado8.5, além das contas directas6.1.1/6.2/6.5/6.9. Rótulos das demais contas são estrutura disponível; não constituem novas regras fiscais nem provam a qualificação de uma parcela. Uma origem incompleta não apaga as contas directas independentes.
|
||||
|
||||
O imposto contabilizado tem valor/ausência e suporte próprios, e localização já incluída ou exterior ao plano. Colecta não é despesa contabilística presumida. Valor já incluído não é subtraído novamente; contradição com o mapa de imposto próprio ou coexistência das duas localizações fica identificada. O resultado líquido é apurado para preparação; o transporte automático entre edições continua impedido só no resultado afectado.
|
||||
|
||||
**M22 PDF:** correspondências de variações patrimoniais201/202,resultado203,amortizações não aceites206,provisões/imparidade209,impostos de outrem213,multas/juros compensatórios215,ajudas219,representação220,publicidade221,despesas não documentadas223,aluguer224,combustíveis225,viaturas226 e reposição de provisões tributadas239. Reutiliza os ajustamentos demonstrados; não reaplica as percentagens impressas. A representação já calculada usa80%,compatível com220. Campo213 é apenas de outrem: imposto próprio36(1)a continua **sem campo presumido**. Efeitos positivos de amortização vão a206; recuperações negativas de quotas anteriores ficam separadas até correspondência própria, sem compensação no mesmo campo.
|
||||
|
||||
Somas238/258 e lucro reconstruído apenas quando todas as parcelas têm correspondência e reconciliam; campos259/260/269/270/276/277/278/300 reutilizam o cálculo existente, mesmo havendo uma parcela sem campo. Colecta total302 só é preparada com ausência de parcela de taxa reduzida declarada com suporte;caso conhecido mantém âmbitoL7 e não apaga300. Campos309–316/saldo final permanecem emL8.
|
||||
|
||||
| Caso novo | Resultado e limite de aplicação |
|
||||
|---|---|
|
||||
| Correspondência no semestre demonstrado, ausência de imposto contabilizado e taxa reduzida declaradas | Resultado líquido3120;203=3120;206=10;238=3130;258=0;lucro/base3130;colecta normal300 e total302=1001,60MZN. Reconciliação aritmética exacta, sem transporte automático entre edições |
|
||||
| Fornecimentos300,50 e outros gastos299,50, origem600 | Parcela300,50 conserva601/2;M20 em meticais inteiros pendente só nas parcelas fraccionárias;resultado e colecta1001,60inalterados |
|
||||
| Imposto contabilizado em falta | Resultado líquido/campo200 e somas dependentes indeterminados;lucro/base3130 e colecta1001,60mantidos |
|
||||
| Recuperação de quota anterior:ajustamento−26 | Efeito fiscal e colecta1001,60preservados;sem código de dedução inventado,somas238/258 pendentes;260/278/300 conhecidos |
|
||||
| Imposto próprio320 contabilizado exterior ao plano | Resultado líquido2800 conhecido;campo de acréscimo próprio por corresponder,sem usar213 de outrem;lucro/base3130 e colecta1001,60preservados |
|
||||
|
||||
Percurso cálculo → gravação → recuperação privada → relatório/dossier demonstrado em **5casos**. **15testes novos frontend;API1teste/97asserções**, transacção revertida na baseQA127.0.0.1:55441;routes/actions gerados pelo procedimento existente,TypeScript/build e interface real passaram. Interface demonstrou edição de parcelas,imposto em falta sem apagar valor anterior,recuperação/exportação e pendências apenas dependentes. Provas aceites reutilizadas;sem repetir suites anteriores. **4ficheiros de runtime no delta,50protegidos e31originais** conferidos;sem API/schema/configuração/permissões/dependências ou escrita no activo.
|
||||
|
||||
Fontes: PDF M22 SHA2564b61bd83d1fbcfd3b7b5c5523cea5923f7d0f65dc4c004eff58e5db38f763c88,3páginas já aceites reutilizadas;M20A.1 SHA2561ceca6f4c6d77853c1b2b445876599b42093175fa89eecf40590180956d83a9e,M12/D13–D35. Inventariados os20ficheiros acessíveis deModelos/Notas,incluindo temporários;originais/hash preservados. Só rótulos genéricos necessários extraídos do XLSX;sem valores privados,fórmulas/cache do exemplar,importação ou publicação documental.
|
||||
|
||||
| Saldo concreto da preparação M20/M22 | Condição de retoma e alcance |
|
||||
|---|---|
|
||||
| Transporte do resultado M20A.1/D35→M22 | Exemplar compatível ou instrução que resolva201/quadro8 versus200/quadro10. Só esse transporte fica impedido;valor líquido próprio e demais campos continuam visíveis |
|
||||
| Imposto próprio36(1)a,quota anterior recuperada e restantes efeitos de periodização/obras/reversões sem campo | Corresponder rótulo,edição/período e regra específica do campo. Efeito/valor conservados sem código provisório;apenas somas/campos dependentes aguardam |
|
||||
| Fracções M20 e subcentavos M22 | Identificar regra de representação do caso;preservar fracção e apresentar aproximação identificada até então. InteirosM20 e cêntimos exactosM22 não bloqueados |
|
||||
| Imposto contabilizado simultaneamente incluído e exterior ao plano | Discriminar ambas as componentes/referências e conciliar8.5/acréscimo próprio sem repetir gasto;sem inferir o valor da colecta |
|
||||
| Contas/quadros e anexos restantes fora das seis linhas financeiras demonstradas | Reutilizar dados existentes,classificar componentes com suporte e acrescentar correspondência específica;sem tomar campos preenchidos do exemplar como dados do investidor |
|
||||
|
||||
L7 mantém benefícios/casos especiais/taxas reduzidas eL8 mantém retenções,pagamentos,créditos e saldo final. Restantes regras deL6 e as dez dúvidasL5 conservam o saldo e as condições já documentadas. **L6 continua parcial;colecta não é saldo final a pagar.** Recibo:`docs/investmoz/simulations/irpc-l6-values-forms-qa-20261026.json`.
|
||||
|
||||
## 26/10/2026 — representação dos valores e campos M20/M22 5aaf1a56 entregues pelo Git
|
||||
|
||||
Instalado `5aaf1a56f9d928331364fcc8b0d1528e51dba327` sobre `56475acb`,preservado como versão anterior. Backup fresco `2026-10-26T08:57:09Z` e restauro isolado sem rede/porta55441: **174tabelas** por contagem/checksum e **369ficheiros/configuração** conferidos. **4ficheiros do delta,50protegidos e31originais** verificados;schema,roles/grants e permissões iguais. As172tabelas de negócio mantêm os valores do backup;cache/sessões reconciliadas com eventos operacionais/acessos anónimos,sem alteração de dados de negócio. Revisão/manifest público,7marcadores compilados,4assets e simuladorHTTP200 conferidos. Sem migrações,importações ou escrita privada sintética no activo.
|
||||
|
||||
Pipeline normal concluído;provasQA15frontend/API1-97/UI/tipos/build reutilizadas,sem nova ronda manual. **Disponível no âmbito demonstrado: resultado líquido3120 + ajustamento10 → lucro/base3130 → colecta1001,60MZN.** Representação exacta,ausência/informação em falta/campo sem aplicação e valores ainda sem correspondência conservados. M20 mantém fracções sem arredondamento presumido;M22 mantém preparação exacta ao cêntimo já aceite. Imposto próprio320 exterior produz resultado líquido2800,mas campo de acréscimo próprio continua pendente,sem usar213 de outrem. Divergência201/Q8 versus200/Q10 só limita o transporte afectado. Históricos e cálculos anteriores,pressupostos cambiais e âmbitosL3/ISPC/câmbio/L5 preservados. **Colecta não é saldo finalL8.** Recibo:`docs/investmoz/simulations/irpc-l6-values-forms-delivery-20261026.json`.
|
||||
|
||||
O estado anterior «QA sem instalação» de5aaf1a56 é histórico. O saldo seguinte separa desenvolvimento de esclarecimento documental,com exemplo e condição de retoma,para decidir o fecho operacional delimitado. **L6 não está integralmente concluído;L7 eL8 mantêm os seus âmbitos.** Não foi executada pesquisa nova nem repetição dos testes aceites para esta consolidação.
|
||||
|
||||
## 26/10/2026 — saldo consolidado de L6 para decisão de fecho operacional delimitado
|
||||
|
||||
Referência actual após a entrega `5aaf1a56`: percurso normal demonstrado até à **colecta**, com períodos/moedas/ajustamentos e preparação parcialM20/M22 documentados. Colecta não é saldo final a pagar ou recuperar;L8 conserva esse fecho. Esta lista consolida o saldo das notas anteriores,sem reabrir o que já foi demonstrado. Os pormenores e exemplares continuam nas mesmas secções/recibos;nenhuma nova matriz ou backlog é criado.
|
||||
|
||||
**Código ainda por implementar.** São extensões não demonstradas;as fontes já aceites permitem iniciar os casos correspondidos. Dados de um investidor em falta dentro de regra já implementada são uma pendência desse caso, não outra tarefa genérica deL6.
|
||||
|
||||
| Trabalho | Exemplo | Condição de retoma / alcance |
|
||||
|---|---|---|
|
||||
| Amortizações e quota de aluguer36h restantes | Ar condicionadoII/3/3,12,5%,fora dos10códigos implementados;bem usado com vida esperada e quotas anteriores documentadas. | Acrescentar catálogo e variantes previstas nas fontes aceites:usados/abertura/reparações/reavaliação,uso intensivo/concessões/peças/intangíveis,transição e excepções de método/vida útil,art17 em período curto e quota36h automática. Implementar só o caso escolhido e provar o delta;sem aguardar validação genérica daAT. Só activo,método ou quota ainda não suportados;amortizações demonstradas preservadas. |
|
||||
| Custos e periodizações específicos | Campanha de lançamento300 com imputação por3exercícios;obra com receita antecipada positiva em vez do zero demonstrado. | Implementar36-A e articulação com36n,reforços financeiros28(3),19(5)/19(6) e18(6–10),com saldos/condições do caso. Autorização de mudança de método apenas quando a disposição aplicável a exigir. Provisões sectoriais dependem primeiro da norma específica indicada abaixo. Só campanha,obra ou periodização específica;limites/provisões ordinários e casos já demonstrados mantidos. |
|
||||
| Períodos e sequência de perdas | Transição de4meses seguida dos períodos posteriores:aplicar a exclusão de contagem de41(5) ao período7(4)d,sem contar apenas anos civis. | Representar a sequência efectiva de períodos/perdas e acrescentar datas parciais,liquidação/períodos superiores a12meses e outros exercícios com regra/taxa aplicável. Não há nova pesquisa necessária para repetir o recorte de meses completos2026 já entregue. Só período ou utilização de perda dependente;lucro independente e semestres demonstrados preservados. |
|
||||
| Desdobramentos contabilísticos e quadros/anexos M20/M22 restantes | Imposto próprio200 já incluído no plano e320 exterior:discriminar as duas componentes sem duplicar gasto;contas fora das6linhas financeiras ainda não transportadas. | Acrescentar o desdobramento e as correspondências dos quadros/anexos escolhidos,reutilizando dados existentes. Campos sem correspondência aguardam a referência concreta abaixo;os outros componentes podem ser implementados/provados separadamente. Só componente/conta/campo ainda não suportado;valores e campos correspondidos preservados. |
|
||||
| Saldos em moeda estrangeira | Crédito final100USD não é soma das receitas convertidas por mês. | Implementar reconciliação de saldo e conversão pela data/regra que vier identificada,usando o motor cambial já entregue. A selecção mensal para simulação continua disponível;esta tarefa não cria outro mecanismo cambial. Só saldo/conversão fiscal dependente da regra;plano e pressupostos mensais permanecem disponíveis. |
|
||||
|
||||
**Esclarecimentos documentais aguardados.** Cada ponto abaixo exige apenas a referência/resposta específica indicada. A ausência dessa informação não significa revogação das fontes aceites,nem autoriza transformar a dúvida numa validação genérica deL6. Não se presume que um pedido já tenha sido enviado àAT;estes são pontos delimitados para o esclarecimento aplicável.
|
||||
|
||||
| Informação em falta | Exemplo da dúvida | Condição de retoma / alcance |
|
||||
|---|---|---|
|
||||
| Edição e campos M20/M22 | M20A.1/D35 remete201/quadro8;PDF M22 usa200/quadro10. Imposto próprio320 não pertence ao213 de outrem;quota recuperada−26 não tem campo de dedução confirmado. | Obter exemplar compatível ou instrução que identifique edição/período,campo e sentido do transporte. Para periodização/obras/reversões ainda sem campo,identificar a correspondência específica. Até informação nova,manter valores/efeitos sem código presumido e não repetir pesquisa. Só transporte,campo e somas dependentes;resultado líquido próprio,260/278/300 e demais campos conhecidos mantidos. |
|
||||
| Representação fiscal de fracções | M20:300,50=601/2MZN,num exemplar que pede meticais sem centavos;M22:1/300MZN não é um número exacto de cêntimos. | Identificar instrução de representação/arredondamento da edição/campo ou esclarecimento específico. Conservar a fracção até lá;não deduzir regra de arredondamento apenas do rótulo «sem centavos». Só transcrição não exactamente representável;inteirosM20,cêntimos exactosM22 e cálculo racional preservados. |
|
||||
| Articulação de limites em combinações não demonstradas | Combustível100,comprovado80,viatura de passageiros sem excepção:36h/i com36(4). Provisão de créditos200 num período curto de3meses:limite anual por corresponder. | Esclarecer especificamente a articulação h/i/36(4) e a base/limite dos períodos curtos de publicidade/créditos,se houver proporcionalização aplicável. Não somar exclusões,anualizar ou repartir por presunção. Retomar só perante referência/resposta concreta para o exemplo. Só combinação ou limite do período;casos independentes com regra já aplicada mantidos. |
|
||||
| Regra fiscal de conversão anual | PlanoUSD com64MZN/USD por mês é pressuposto sintético de simulação,não confirmação da data/taxa fiscal anual ou da cotação do saldo final. | Identificar disposição/âmbito,data,base e taxa/boletim aplicáveis ao resultado e,quando necessário,ao saldo. Reutilizar o motor existente e demonstrar só a correspondência nova;sem taxa actual por defeito ou nova ronda da pesquisa anterior. Só confirmação fiscal anual e saldo dependente;conversões mensais documentadas de simulação mantidas com os avisos. |
|
||||
| Norma sectorial de provisões reguladas | Provisão200 de uma entidade financeira sujeita ao28d não herda os1,5%/6% do regime ordinário29. | Identificar sector,regulador,norma de supervisão aplicável e saldos/condições necessários,antes da implementação específica. A fonte oficial fornecida é aceite;falta a regra concreta do caso,não certificação genérica da fonte. Só provisão regulada respectiva;provisões ordinárias demonstradas preservadas. |
|
||||
|
||||
**Base da decisão operacional:** o âmbito demonstrado e as suas limitações permanecem disponíveis na interface e nas exportações;as provas aceites mantêm validade. Um fecho operacional delimitado pode referir esse âmbito,com estas extensões/documentos fora da cobertura e retoma por caso. Esta consolidação **não declara L6 integralmente concluído nem regista uma decisão de fecho ainda não tomada**. Permite preparar o avanço paraL7 sem condicionar os casos independentes à resolução de todo este saldo. Benefícios/isenções/taxas reduzidas/tributações autónomas e operações especiais mantêm âmbitoL7;retenções,pagamentos,créditos e saldo anual mantêm âmbitoL8. As dez dúvidasL5 só afectam dependências efectivas e não foram pesquisadas novamente.
|
||||
|
||||
## 26/10/2026 — L6 operacional no âmbito demonstrado e delimitação de L7
|
||||
|
||||
**Decisão expressa da Tempo:** L6 fica operacional no âmbito demonstrado disponível em `5aaf1a56`, com limitações explícitas. Não é conclusão integral de L6 ou do IRPC. Os cinco grupos de código e cinco grupos documentais da secção «saldo consolidado de L6» permanecem separados, com exemplos e condições de retoma. As notas anteriores que deixavam a decisão operacional por tomar conservam o seu valor histórico; esta decisão é posterior. As provas aceites são reutilizadas. As pendências de L5/L6 só impedem tratamentos que dependam delas.
|
||||
|
||||
**Estado deste incremento:** delimitação documental de L7, sem novo cálculo, instalação, migração, importação ou alteração de dados activos. A colecta normal entregue mantém-se distinta do saldo a pagar/recuperar. Retenções, pagamentos, aplicação anual de créditos e liquidação final permanecem em L8. Recibo: `simulations/irpc-l7-scope-20261026.json` (relativo a `docs/investmoz/`).
|
||||
|
||||
### Dados existentes e fronteiras de integração
|
||||
|
||||
| Reutilização | Contrato para L7 e limite |
|
||||
| --- | --- |
|
||||
| Oportunidade/dossier: `context_opportunity`, `context_opportunity_snapshot`, `context_applicability_snapshot`, `context_reuse` | Conservar origem e data, selecção de campos compatíveis e edições deliberadas; `context-inheritance.ts` e `dossier-prefill.tsx` já sustentam esta reutilização. Associação documental a oportunidade/âncora não confirma implantação ou incentivo. |
|
||||
| `sector_id`, `province_id`, `district_id`, `admin_post_id`, `locality_id` e respectivas designações | Servem para identificar candidatos e pedir apenas elementos em falta. Confirmar actividade efectivamente exercida, estabelecimento/projecto e parcela abrangida por documentos do caso. Localização, polígono, DUAT ou código sectorial isolados não concedem benefício. |
|
||||
| Sujeito, NUIT, residência/EP, período, início de actividade/exploração e dados do plano | Reutilizar valores declarados e respectivas provas. Data prevista no dossier não substitui início efectivo quando esse for o termo inicial da norma. Distinguir conhecido, ausência declarada e desconhecido. |
|
||||
| `business_plan_snapshot`, livro `modelo_a_snapshot.irpcNormal` e versões L6 | Receber lucro/base/colecta e parcelas identificadas, com chave e versão de origem. Só alterar o ponto previsto pela norma: ajustamento ao lucro, dedução à base, taxa por parcela ou tributação autónoma separada. Não alterar nem recalcular silenciosamente históricos. |
|
||||
| Activos, quotas anteriores e despesas já registadas | Reutilizar os mesmos identificadores e montantes; calcular apenas o efeito adicional permitido. Não repetir o acréscimo de uma despesa nem deduzir duas vezes a amortização do mesmo activo. Um caso dependente de regra L6 não implementada conserva essa dependência específica. |
|
||||
| Preparação M20/M22 e aritmética racional existentes | Conservar montante exacto, unidade/moeda e parcela. Transporte só com correspondência demonstrada para a edição; campo desconhecido, fracção não representável ou divergência editorial não invalida o cálculo independente. Não arredondar por conveniência. |
|
||||
|
||||
O motor actual de matéria colectável não subtrai benefícios positivos livres: exige regra, condições, limite e ordem. A colecta normal cobre a taxa geral no recorte demonstrado; escolher «outro tratamento» não implementa uma taxa especial. A presença de campos ou de fontes no portal não equivale a execução de L7.
|
||||
|
||||
### Famílias de tratamentos a implementar por casos compatíveis
|
||||
|
||||
As referências seguintes delimitam a regra e o ponto de integração; **não constituem benefícios concedidos nem cobertura executável nova**. O exercício do caso, alterações aplicáveis e duração individual ficam associados à versão da regra. Não se transportam taxas temporárias para outro período.
|
||||
|
||||
| Família / fonte identificada | Condições e período a guardar | Efeito e exemplo de dúvida delimitada / condição de retoma |
|
||||
| --- | --- | --- |
|
||||
| **Despesas com tributação autónoma** — CIRPC, Lei34/2007, art.61(4), com art.36(1)g; PDF17/p768(71) | Natureza legal documentada da despesa não devidamente documentada, confidencial ou ilícita; valor e exercício; taxa de 35% da disposição e versão aplicável ao período. Não classificar pela simples falta de ficheiro anexado. | Parcela autónoma separada da colecta normal; reutilizar o acréscimo36g já feito, sem duplicação. Ex.: despesa100 já acrescida em L6 → parcela autónoma35 no caso qualificado; não é saldo final. Se só falta anexo, pedir a caracterização/prova da despesa e manter indeterminado apenas este tratamento. |
|
||||
| **Mais-valias autónomas** — Lei12/2025, art.2, CIRPC61-A; art.3 revoga39/47; art.6 vigora em01/01/2026; PDF20/p2180(20) | Alienação, activo, datas, realização/valor fiscal, origem contabilística, período e parcela identificados; taxa32% do61-A. Separar eventos anteriores a2026. | Apurar parcela autónoma, reconciliando o que já integra o resultado L6, sem dupla incidência ordinária/autónoma nem compensação presumida de perdas. Ex.: ganho100 incluído no resultado exige identificar a sua parcela antes de integrar a colecta autónoma32. Retoma: implementar essa reconciliação e a regra de apuramento aplicável ao activo; não bloqueia despesas autónomas ou benefícios independentes. |
|
||||
| **Isenções e redução por natureza da entidade** — CIRPC9–14; cooperativas no art.12, PDF5/p768(59), e taxa geral61(1) | Tipo efectivo da entidade, rendimentos elegíveis/excluídos, destino dos rendimentos, constituição e reconhecimento apenas onde exigido pela disposição; exercício e norma aplicável. Art.12 refere cooperativas agrárias, de artesanato e culturais e redução de50% da taxa geral; não todas as cooperativas. Arts.12(2)/14 separam rendimentos sujeitos a retenção. | Isenção ou taxa reduzida apenas na parcela coberta; actividade comercial acessória não se torna isenta por designação da entidade. Ex.: cooperativa com actividade elegível e outra não abrangida exige separar rendimentos e custos. Retoma: classificação documental e segregação da parcela, sem transportar a dispensa para retenções L5 ou liquidar créditos L8. |
|
||||
| **Amortização acelerada** — CBF, Lei4/2009, art.16; compilaçãoAPIEX p72 | Imóveis novos usados no projecto; imóveis reabilitados e máquinas/equipamentos industriais/agro-industriais nas condições da disposição; enquadramento CBF3/9/10 quando aplicável, entrada em uso, taxa normal, base, quota contabilizada e quotas anteriores. Incremento de50% sobre a taxa normal, não cinquenta pontos percentuais. | Efeito no ajustamento ao lucro e, através da cadeia L6, na base/colecta. Ex.: taxa normal10% → taxa acelerada15%, antes das restantes condições/limites; não autoriza uma segunda dedução integral. Retoma por activo com classificação/documentos e conciliação de quotas/custo disponíveis; tabelas L6 em falta bloqueiam só o activo dependente. |
|
||||
| **Deduções e majorações de despesas/investimentos** — CBF17–19; compilaçãoAPIEX pp73–74 | Tecnologia de ponta, formação de trabalhadores moçambicanos e despesas elegíveis de utilidade pública: natureza, base, exercício inicial, janela dos primeiros cinco anos/exercícios conforme artigo, limites, exclusões, ordem e não cumulaçãoCBF4. Distinguir dedução à matéria colectável de majoração de custo. | Efeito no ponto exacto previsto pela disposição. Ex.: formação sem prova do tipo não permite escolher entre o limite5% e o ramo10% para novas tecnologias do art.18. Retoma: identificar tipo/base de limite e conciliar a despesa já contabilizada; não converter percentagem em dedução livre. |
|
||||
| **Crédito fiscal por investimento** — CBF15; compilaçãoAPIEX pp71–72 | Investimento novo elegível, exclusões, início, Maputo/outras províncias como uma das condições, parcela da colecta atribuível ao projecto e prazo de utilização/transporte de cinco exercícios. Taxas5%/10% distinguem os ramos da disposição, sem direito automático por localização. | **L7 identifica origem, elegibilidade e crédito potencial; L8 aplica o crédito anual, limites/saldos e liquidação.** Ex.: projecto situado fora de Maputo, sem discriminação do investimento elegível, não gera automaticamente10% de crédito. Retoma: base elegível e calendário documentados; utilização anual aguarda o mecanismo L8. |
|
||||
| **Tratamentos sectoriais/territoriais CBF** — infra-estruturas20–22; agricultura/pescas27–29; turismo30–33; parques de ciência34–35; grandes projectos36–38; zonas de rápido desenvolvimento39–44; ZFI45–46; ZEE47–48 | Seleccionar a disposição de IRPC efectivamente pertinente, actividade/projecto, delimitação/estabelecimento e estatuto comprovados, data de autorização/início quando exigidos, escalões, duração, cumulação e cessaçãoCBF49–52. ZFI46 e ZEE48 são os artigos de impostos sobre rendimento. Não tratar benefícios exclusivamente aduaneiros como benefícios IRPC. | Isenção, redução ou dedução por parcela e intervalo próprio, em vez de taxa comum ao sector/localização. Ex.: endereço numa ZEE sem estatuto documentado deixa o ramo ZEE pendente; o cálculo normal independente continua. CIRPC61(2) na Lei20/2022 tem termo31/12/2025: não presumir prorrogação para2026. Retoma de cada ramo: condições e cronologia da disposição específica preenchidas, com regra versionada; não exigir pesquisa repetida de todos os sectores. |
|
||||
| **Operações e regimes especiais** — CIRPC54–56 (entradas de activos, fusões/cisões e sócios), transferência de perdas41-A; regimes sectoriais específicos do acervo | Tipo de operação, intervenientes, residência, datas, activos/passivos/valores fiscais e continuidade; identificar diploma sectorial/artigo e regra aplicável antes de escolher tratamento. Não inferir neutralidade por chamar «fusão» à operação nem aplicar regime mineiro/petrolífero por rótulo sectorial. | Continuidade/ajustamento/tributação diferida ou parcela própria conforme norma, mantendo bases históricas. Ex.: perda recebida de outra sociedade não é perda própria ordinária41 de L6. Retoma: correspondência específica41-A e operação documentada; regras sectoriais sem artigo correspondido ficam candidatas, sem taxa provisória. Não há bloqueio transversal de L7. |
|
||||
|
||||
### Registo por tratamento e demonstração a exigir ao código novo
|
||||
|
||||
Cada tratamento terá: identificador estável; sujeito/NUIT; oportunidade/projecto/estabelecimento e parcela; contexto herdado e divergências; fonte/exemplar/hash/artigo/versão; intervalo de vigência e período do caso; facto que inicia/termina a duração; condições individualizadas em «sim/não/desconhecido» com prova ou ausência declarada; título/reconhecimento somente quando a regra o exige; base elegível, taxa, limite, ordem e compatibilidade com outros tratamentos; resultado normal de origem; efeito adicional e ponto da cadeia; moeda/conversão e pressupostos; montante exacto; motivos de exclusão/informação em falta; versão/histórico e dependência concreta.
|
||||
|
||||
Os estados «candidato», «não aplicável», «informação em falta» e «calculado por regra implementada» não se confundem. Ausência declarada pode produzir efeito zero justificado; desconhecido não produz benefício zero nem benefício presumido. Uma condição negativa exclui o tratamento e conserva o percurso normal quando os seus dados são suficientes. Com potencial benefício ainda indeterminado, apresentar o cenário normal de referência e a parcela pendente sem declarar total fiscal definitivo. Mudança de sector/localização/documento invalida apenas a correspondência dependente e pede confirmação de reutilização; conserva o original e as edições deliberadas.
|
||||
|
||||
**Primeiro incremento delimitado para implementação:** qualificação comum e segregação de efeitos, acompanhadas do caso35% do61(4), com despesa já ajustada36g e caso de informação insuficiente. É independente de transporte M20/M22 não correspondido e de amortizações L6 em falta. **Incremento compatível seguinte:** cooperativa abrangida pelo12 com parcela elegível separada e amortização acelerada16 para activo já suportado em L6; cada caso só acompanha a entrega se demonstrado. Mais-valias61-A, deduções17–19, ramos sectoriais e operações especiais seguem separadamente quando as respectivas parcelas/regras estiverem correspondidas. Crédito15 prepara direito potencial em L7 e contrato de passagem para L8, sem antecipar liquidação anual.
|
||||
|
||||
Para cada nova regra: condição satisfeita, negativa, informação em falta, período incompatível/benefício expirado, sobreposição com ajustamento existente e alteração de contexto. Demonstrar apenas o delta: cálculo → gravação → recuperação → relatório, incluindo fonte, período, condições, efeito no lucro/base/colecta ou parcela autónoma e saldo final L8 por determinar. Recuperar históricos anteriores sem os alterar; não duplicar ajustamentos ao voltar a guardar. Reutilizar as provas aceites; não reabrir L3, ISPC, câmbio ou percursos L5/L6 independentes.
|
||||
|
||||
### Fontes consultadas e pendências delimitadas
|
||||
|
||||
Reutilizado o inventário autorizado de **8143ficheiros**, sem nova varredura de pastas. Para delimitação foram consultados os originais CIRPC/alterações já arquivados, a Lei4/2009 local e a compilação oficial [APIEX — Legislação de Investimentos em Moçambique](https://pt.apiex.gov.mz/wp-content/uploads/2025/02/LEGISLACAO-DE-INVESTIMENTOS-EM-MOCAMBIQUE.pdf), que reúne Lei8/2023, Decreto8/2024 e CBF4/2009. Disponibilidade, situação documental/jurídica e uso no cálculo continuam estados independentes. O acesso actual à cópia CBF supera a indisponibilidade assinalada em notas antigas; não activa regra nem apaga a nota histórica. Artigos, páginas, hashes e limites no recibo. A compilação não dispensa o período/alterações de cada tratamento, nem cria validação jurídica genérica adicional.
|
||||
|
||||
**Código por implementar em L7:** qualificação e persistência específicas; efeitos segregados; regras das famílias acima, por parcelas; conciliação sem duplicação; relatório/exportação correspondente. **Documentação por caso:** estatuto/reconhecimento ou enquadramento individual quando a fonte o exige; identificação de parcela/limite/cronologia; norma sectorial ainda sem correspondência; edição/campo de transporte afectado. Cada uma conserva exemplo e condição de retoma na linha correspondente. Não é necessário resolver todos os documentos para começar o primeiro incremento independente. L6 operacional não elimina este desenvolvimento; L7 delimitado não é L7 implementado; L8 conserva a liquidação final.
|
||||
|
||||
## 26/10/2026 — L7: qualificação, despesas autónomas e casos compatíveis em QA
|
||||
|
||||
**QA, sem instalação.** Base instalada preservada `5aaf1a56`; delimitação `d37fffb2`; ramo `codex/irpc-l7-common-autonomous-qa-20261026`, fotografia opcional `IRPC-normal-adjustments/10`. L6 continua operacional no âmbito demonstrado, com os cinco grupos de código e cinco documentais preservados. A implementação abaixo acrescenta apenas os tratamentos demonstrados; não conclui L7 nem o IRPC. Saldo final, retenções, pagamentos e aplicação anual de créditos permanecem em L8.
|
||||
|
||||
**Qualificação comum executável:** reutiliza sujeito/NUIT, âmbito, período, origem da oportunidade/dossier, sector e território; guarda condições, prova, fonte/artigo e período por tratamento. «Informação em falta», «ausência declarada», «não aplicável/condição negativa» e «calculado» têm resultados distintos. Desconhecido não vira zero. Período incompatível, identidade por reconciliar ou contradição afectam só o resultado dependente. A localização não escolhe taxa nem activa benefício. Os snapshots de origem ficam internos; o relatório apresenta contexto legível e as condições documentadas.
|
||||
|
||||
**Despesas61(4):** cada parcela aponta para uma linha `undocumented` do mapa36(1)g de L6, com acréscimo integral já calculado. Montante, documento e linha são reutilizados; L7 não introduz outro acréscimo nem outra despesa. A classificação legal e incidência são declaradas com prova própria; falta de anexo não classifica uma despesa. O imposto autónomo usa35% apenas nos casos qualificados. Duplicação da referência, parcela não correspondida, ausência contraditória ou informação insuficiente deixam o imposto reconciliado indeterminado; as parcelas conhecidas permanecem discriminadas. Condição negativa documentada conserva o ajustamentoL6 e não aplica imposto autónomo à parcela.
|
||||
|
||||
**Cooperativas12/14:** agrárias, artesanato ou culturais, residentes, com base ordinária integralmente elegível e ausência documentada de rendimentos sujeitos a retenção, aplicam redução de50% à taxa geral32%, ou16%. Não depende de seleccionar um sector semelhante. A qualificação especial pode coexistir com a opção «outro tratamento» da colectaL6: não exige fingir que a taxa reduzida é regime geral. Parcela mista, rendimentos retidos, outra entidade ou ausência contraditória conservam pendência própria; não recebem redução global presumida. O imposto autónomo de despesas não é reduzido por esta taxa.
|
||||
|
||||
**CBF16:** reutiliza identificadores e valores dos activosL6 suportados; imóvel novo do projecto ou máquinas industriais/agro-industriais das categorias correspondidas, com enquadramentoCBF3/9 e reconhecimento10 quando exigido (ou excepção identificada). Recorte inicial: primeiro exercício anual civil2026, método constante pela taxa normal máxima da tabela, activo desde01/01/2026, custo histórico novo, sem quotas anteriores/saída e sem cumulação de outros benefícios. Incrementa a taxa normal em50% e reutiliza limites de contabilização/saldo fiscal. Deduz apenas a diferença entre o mapa normal e o acelerado, sem alterar o activo de origem, os documentos ou os saldos oficiais. Quotas constantes gerais e demais cálculosL6 conservam o comportamento anterior quandoL7 está ausente.
|
||||
|
||||
| Caso sintético recuperado da API QA | Lucro/base e colecta de referênciaL6 | EfeitoL7 demonstrado | Resultado e limite |
|
||||
| --- | --- | --- | --- |
|
||||
| Despesa100 já acrescida36g | Lucro/base3230;colecta1033,60MZN | Novo ajustamento ao lucro0;imposto autónomo35 | Colecta combinada1068,60MZN;saldo finalL8indeterminado |
|
||||
| Classificação da mesma despesa em falta | Lucro/base3230;colecta1033,60MZN preservados | Imposto autónomo indeterminado | Colecta combinada indeterminada;sem perda dos cálculos independentes |
|
||||
| Condição negativa documentada na parcela | Ajustamento36g100 preservado | Parcela não aplicável;imposto autónomo0 justificado | Não confunde condição negativa com informação em falta |
|
||||
| Ausência declarada de despesas autónomas | Lucro/base3130;colecta1001,60MZN | Ausência com suporte;imposto autónomo0 | Ausência contraditória com despesa36g fica pendente |
|
||||
| Cooperativa integralmente abrangida | Base3130;colecta geral1001,60MZN | Taxa16%;colecta500,80MZN | Base/proveitos não alterados;sem retenções/créditos abatidos |
|
||||
| Máquina industrial existente:base1000,taxa10%,quota contabilística120 | Quota normal100;lucro/base6260;colecta2003,20MZN | Quota acelerada150,mas dedução limitada120;diferença adicional20 | Lucro/base6240;colecta1996,80MZN;sem deduzir50 nem150 outra vez |
|
||||
|
||||
**Cálculo → gravação → recuperação → relatório:** fotografia10 opcional no mesmo livro/snapshot, chave com entradas/contexto e histórico imutável anterior. SemL7, a fotografia9 aceite e a sua chave/totais permanecem iguais. Recalcular não acumula imposto nem duplica o acréscimo. HTML e dossier financeiro mostram referênciaL6, efeitosL7, parcelas autónomas, fonte, condições, período e limitações; recuperação e download demonstrados no componente real. Uma mudança de origem/entradas torna a fotografia anterior histórica; não altera o registo anterior. M20/M22 conservam a preparaçãoL6 de referência: **este incremento não transporta efeitosL7 para campos oficiais por aproximação**, nem resolve as divergências documentais existentes.
|
||||
|
||||
**Provas novas:** Wayfinder `--with-form` gerou routes/actions pelo wrapper QA; TypeScript e build QA passaram. Dezanove testes dirigidos novos passaram, incluindo comparação exacta com a fotografia9 aceite, duplicação, período curto, opção especial de cooperativa, ausência contraditória, dados em falta e contexto apresentado sem despejar snapshots internos. API privada:1teste/108asserções, `simulator_fiscal_delta_20261021_test`,127.0.0.1:55441, transacção com rollback e guarda de identidade/base; seis casos recuperados com plano/livro/históricos idênticos. UI do componente real: alteração de classificação, informação em falta, ausência, cooperativa mista, cumulação pendente, gravação/recuperação local e exportação; sem erros de página. A prova local é distinta da API. Não houve testes/escrita no activo nem repetição das suites funcionais aceites de L3, ISPC, câmbio ou L5/L6.
|
||||
|
||||
**Entrega agrupada preparada:** qualificação + despesas autónomas, cooperativa integralmente elegível e amortizaçãoCBF16 no recorte acima. Despesa autónoma e cooperativa também foram demonstradas juntas:parcela35 sem redução,colecta sobre a base516,80 e combinada551,80MZN no exemplo de base3230. Isto não autoriza cumulação cooperativa+CBF16: essa combinação mantém resultado dependente indeterminado. A futura instalação segue o procedimento Git existente, com backup/restauro fresco e conferência do delta; não foi executada nesta passagem.
|
||||
|
||||
**SaldoL7 na mesma matriz:**
|
||||
|
||||
| Natureza | Ainda fora da cobertura / exemplo | Condição concreta de retoma |
|
||||
| --- | --- | --- |
|
||||
| Código | Despesa autónoma fora de linha36g calculada ou parcela ainda não segregada | Implementar origem/segregação correspondente e prova da incidência;não copiar montante para uma segunda despesa |
|
||||
| Código | Cooperativa com actividade abrangida e outra não abrangida,ou rendimento sujeito a retenção | Segregar proveitos/custos/base e aplicar o tratamento apenas à parcela elegível;L5 conserva a retenção |
|
||||
| Código | CBF16 em imóvel reabilitado,outra categoria,quota inferior à máxima,método degressivo,duodécimos,quotas anteriores ou exercício posterior | Corresponder regra e cronologia respectivas e reutilizar o activo/quotas existentes;pendênciaL6 limita apenas o activo dependente |
|
||||
| Código/documento por caso | Cooperativa+CBF16 ou outro benefício positivo a cumular | Identificar compatibilidade,ordem e limites específicos;implementar a combinação,sem presumir soma de benefícios |
|
||||
| Código | Mais-valias61-A,demais isenções/deduçõesCBF17–19,regimes sectoriais/territoriais e operações especiais | Implementar a família/parcelas já delimitadas na secção anterior;período e fonte específicos,sem nova pesquisa transversal |
|
||||
| Documento por caso | Estatuto/título/excepçãoCBF ou prova das condições em falta;endereçoZEE sem estatuto | Juntar o elemento que a disposição exige ou registar condição negativa;localização isolada permanece insuficiente |
|
||||
| Transporte/documento | CampoM20/M22 para efeitoL7,edição divergente ou representação não correspondida | Correspondência do campo/edição e regra de representação demonstradas;preservar o cálculo independente exacto |
|
||||
| ÂmbitoL8 | Direito potencial ao créditoCBF15,aplicação anual de créditos,retenções,pagamentos e saldo final | Executar o mecanismo próprioL8;nenhuma dedução/compensação anual é presumida neste lote |
|
||||
|
||||
Fontes reutilizadas: inventário autorizado8143ficheiros; originaisCIRPC/alterações e CBF/compilaçãoAPIEX já identificados na delimitação,com hashes conservados. Sem activação por consulta ou revalidação jurídica genérica. Recibo: `docs/investmoz/simulations/irpc-l7-common-qa-20261026.json`. Provas locais: `outputs/irpc-l7-common/`; reprodução dirigida: `node --test tests/frontend/irpc-special.test.mjs`, `php tools/irpc-special-qa.php routes`, `php tools/irpc-special-qa.php test`, `tsc --noEmit`, build com `INVESTMOZ_QA_BUILD=1`.
|
||||
|
||||
## 26/10/2026 — preparação da entrega L7 e preservação do main concorrente
|
||||
|
||||
A entrega do âmbito QA `ab2ff2fd` integra o `main` concorrente `a2122dc3`, sem substituir as alterações de apresentação/navegação. Os seis ficheiros de execução L7 conservam exactamente o código QA;os oito ficheiros concorrentes conservam exactamente o código do main. Reutilizadas as provas19testes/API108/UI/tipos/build de L7. O conflito documental foi resolvido recuperando586linhas de histórico do manual que tinham sido removidas no merge concorrente,sem apagar a sua notaV2-01 no CSV. As3555linhas mantêm-se,com o único delta fiscal emAUD-SIM-INT02. O registo de instalação só será actualizado após backup/restauro fresco,conferência do destino e conclusão da entrega Git;esta nota não a antecipa.
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,3 +1,4 @@
|
||||
import {SimulationIrpcSpecial} from '@/components/simulation-irpc-special';
|
||||
import {SimulationIrpcFormPreparation} from '@/components/simulation-irpc-form-preparation';
|
||||
import {SimulationIrpcPeriodFx} from '@/components/simulation-irpc-period-fx';
|
||||
import {SimulationIrpcDepreciation} from '@/components/simulation-irpc-depreciation';
|
||||
@@ -39,8 +40,9 @@ export function SimulationIrpcNormal({draft,onChange}:{draft:Record<string,unkno
|
||||
<SimulationIrpcCosts draft={draft} book={b} save={save}/>
|
||||
<SimulationIrpcTaxableBase draft={draft} book={b} save={save}/>
|
||||
<SimulationIrpcAssessment book={b} save={save}/>
|
||||
<SimulationIrpcSpecial draft={draft} book={b} save={save}/>
|
||||
<SimulationIrpcFormPreparation draft={draft} book={b} save={save}/>
|
||||
<button type="button" onClick={()=>{try{save(recordNormal(draft,b));}catch(e){setError(String(e));}}}>Calcular e guardar ajustamentos L6</button>
|
||||
<button type="button" onClick={()=>{try{save(recordNormal(draft,b));}catch(e){setError(String(e));}}}>Calcular e guardar L6 e tratamentos L7 preparados</button>
|
||||
<button type="button" onClick={()=>{try{const html=normalHtml(draft),url=URL.createObjectURL(new Blob([html],{type:'text/html;charset=utf-8'})),a=document.createElement('a');a.href=url;a.download='IRPC-normal-ajustamentos.html';a.click();URL.revokeObjectURL(url);setError('');}catch(e){setError(String(e));}}}>Exportar mapa parcial L6</button>
|
||||
{normalReportRows(draft).map((r,n)=><p key={n}>{r[1]} — {r[2]} — {r[3]}</p>)}
|
||||
</section>;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import type {NormalBook} from '@/lib/irpc-normal';
|
||||
import {newSpecialInput,newSpecialExpense,newAcceleratedAsset,specialSources,type SpecialInput,type Qualification} from '@/lib/irpc-special';
|
||||
|
||||
type Props={draft:Record<string,unknown>;book:NormalBook;save:(b:NormalBook)=>void};
|
||||
const states=[['','Informação em falta'],['known','Tratamento conhecido — qualificar condições'],['absent','Ausência declarada com suporte'],['not_applicable','Tratamento não aplicável — justificar']]as const;
|
||||
function QualificationFields({label,value,onChange}:{label:string;value:Qualification;onChange:(v:Qualification)=>void}){
|
||||
const field=(key:'from'|'to'|'reference'|'periodReference',text:string)=><label className="block">{text}<input aria-label={label+' — '+text} value={value[key]} onChange={e=>onChange({...value,[key]:e.target.value})}/></label>;
|
||||
return<div className="space-y-2"><label className="block">Estado — {label}<select aria-label={'Estado — '+label} value={value.state} onChange={e=>onChange({...value,state:e.target.value as Qualification['state'],eligible:''})}>{states.map(([v,t])=><option key={v} value={v}>{t}</option>)}</select></label>{value.state==='known'&&<label className="block">Condições — {label}<select aria-label={'Condições — '+label} value={value.eligible} onChange={e=>onChange({...value,eligible:e.target.value as Qualification['eligible']})}><option value="">Por esclarecer</option><option value="yes">Sim — condições documentadas</option><option value="no">Não — condição negativa documentada</option></select></label>}{field('reference','Prova das condições, ausência ou não aplicação')}{field('from','Período — início (AAAA-MM-DD)')}{field('to','Período — termo (AAAA-MM-DD)')}{field('periodReference','Suporte do período e da vigência aplicável')}</div>;
|
||||
}
|
||||
export function SimulationIrpcSpecial({draft,book:b,save}:Props){
|
||||
const i=b.special;
|
||||
const start=()=>{const next=newSpecialInput(),p=b.periodsFx??b.schedules?.period;for(const part of[next.expenses,next.cooperative,next.acceleration])Object.assign(part.qualification,{from:p?.from??b.year+'-01-01',to:p?.to??b.year+'-12-31'});save({...b,special:next});};
|
||||
if(!i)return<section className="rounded border p-3"><h5>L7 — benefícios e casos especiais</h5><p>Preparação opcional e separada do percursoL6 já entregue. Localização e sector não activam benefícios. A liquidação final permanece emL8.</p><button type="button" onClick={start}>Preparar qualificação L7</button></section>;
|
||||
const change=(patch:Partial<SpecialInput>)=>save({...b,special:{...i,...patch}});
|
||||
const yesno=(label:string,value:string,onChange:(v:''|'yes'|'no')=>void)=><label className="block">{label}<select aria-label={label} value={value} onChange={e=>onChange(e.target.value as ''|'yes'|'no')}><option value="">Informação em falta</option><option value="yes">Sim — documentado</option><option value="no">Não — documentado</option></select></label>;
|
||||
return<section aria-label="L7 — qualificação e tratamentos" className="space-y-3 rounded border p-3"><h5>L7 — qualificação comum e tratamentos documentados</h5><p>Reutiliza sujeito, NUIT, período, despesas e activos L6. Contexto herdado:sector {String(draft.sector_id??'por identificar')};província {String(draft.province_id??'por identificar')}. A localização, por si só, não concede benefícios. Os valores L6 continuam como referência;os efeitosL7 são apresentados separadamente. Saldo final a pagar/recuperar:âmbitoL8.</p>
|
||||
<fieldset className="space-y-2 rounded border p-3"><legend>Despesas — tributação autónoma61(4)</legend><p>{specialSources.expenses}</p><QualificationFields label="Despesas autónomas" value={i.expenses.qualification} onChange={qualification=>change({expenses:{...i.expenses,qualification}})}/>
|
||||
<button type="button" onClick={()=>change({expenses:{...i.expenses,rows:[...i.expenses.rows,...(b.schedules?.rows??[]).filter(r=>r.rule==='undocumented'&&!i.expenses.rows.some(x=>x.scheduleId===r.id)).map(r=>({...newSpecialExpense('expense-'+r.id),scheduleId:r.id}))]}})}>Reutilizar despesas36g de L6 para qualificar</button>
|
||||
{i.expenses.rows.map((r,index)=>{const origin=b.schedules?.rows.find(x=>x.id===r.scheduleId),patch=(p:Partial<typeof r>)=>change({expenses:{...i.expenses,rows:i.expenses.rows.map(x=>x.id===r.id?{...x,...p}:x)}});return<fieldset key={r.id} className="rounded border p-2"><legend>{origin?origin.document+'/'+origin.line:'Parcela por corresponder'} — {origin?.amount??'Indeterminado'} MZN</legend><p>O acréscimo36g já pertence aL6;esta linha só apura o eventual imposto autónomo.</p><label className="block">Natureza legal da despesa<select aria-label={'Natureza da despesa '+(index+1)} value={r.nature} onChange={e=>patch({nature:e.target.value as typeof r.nature})}><option value="">Informação em falta</option><option value="undocumented">Encargo não devidamente documentado</option><option value="confidential">Despesa confidencial</option><option value="illicit">Despesa ilícita</option><option value="other">Outra natureza — correspondência própria</option></select></label>{yesno('Incidência61(4) — parcela '+(index+1),r.eligible,eligible=>patch({eligible}))}<label className="block">Suporte da classificação e incidência<input aria-label={'Suporte da despesa '+(index+1)} value={r.reference} onChange={e=>patch({reference:e.target.value})}/></label><button type="button" onClick={()=>change({expenses:{...i.expenses,rows:i.expenses.rows.filter(x=>x.id!==r.id)}})}>Retirar qualificação da parcela {index+1}</button></fieldset>;})}</fieldset>
|
||||
<fieldset className="space-y-2 rounded border p-3"><legend>Cooperativas abrangidas — artigo12</legend><p>{specialSources.cooperative} Este incremento exige base integralmente elegível;parcelas mistas continuam explícitas.</p><QualificationFields label="Cooperativa" value={i.cooperative.qualification} onChange={qualification=>change({cooperative:{...i.cooperative,qualification}})}/>{(i.cooperative.qualification.state==='known'||i.cooperative.kind!==''||i.cooperative.allIncomeEligible!==''||i.cooperative.withheldIncome!=='')&&<><label className="block">Tipo de cooperativa documentado<select value={i.cooperative.kind} onChange={e=>change({cooperative:{...i.cooperative,kind:e.target.value as typeof i.cooperative.kind}})}><option value="">Por identificar</option><option value="agrarian">Agrária</option><option value="craft">Artesanato</option><option value="cultural">Cultural</option><option value="other">Outra — não correspondida</option></select></label>{yesno('Base ordinária integralmente elegível',i.cooperative.allIncomeEligible,allIncomeEligible=>change({cooperative:{...i.cooperative,allIncomeEligible}}))}<label className="block">Rendimentos sujeitos a retenção<select value={i.cooperative.withheldIncome} onChange={e=>change({cooperative:{...i.cooperative,withheldIncome:e.target.value as typeof i.cooperative.withheldIncome}})}><option value="">Informação em falta</option><option value="absent">Ausência documentada</option><option value="known">Existem — segregação própria em falta</option></select></label></>}</fieldset>
|
||||
<fieldset className="space-y-2 rounded border p-3"><legend>Amortizações aceleradas — CBF16</legend><p>{specialSources.acceleration} Apenas activos já suportados,primeiro ano civil2026 e método constante;outras combinações permanecem por corresponder.</p><QualificationFields label="Amortização acelerada" value={i.acceleration.qualification} onChange={qualification=>change({acceleration:{...i.acceleration,qualification}})}/>{i.acceleration.qualification.state==='known'&&<>{yesno('EnquadramentoCBF3 e pressupostos9 documentados',i.acceleration.cbfRequirements,cbfRequirements=>change({acceleration:{...i.acceleration,cbfRequirements}}))}<label className="block">ReconhecimentoCBF10<select value={i.acceleration.recognition} onChange={e=>change({acceleration:{...i.acceleration,recognition:e.target.value as typeof i.acceleration.recognition}})}><option value="">Informação em falta</option><option value="documented">Instrumento/reconhecimento documentado</option><option value="not_required">Excepção prevista — identificar norma e suporte</option></select></label><label className="block">Instrumento ou norma da excepção<input value={i.acceleration.recognitionReference} onChange={e=>change({acceleration:{...i.acceleration,recognitionReference:e.target.value}})}/></label>{yesno('Ausência documentada de outros benefícios a cumular',i.acceleration.noOtherBenefits,noOtherBenefits=>change({acceleration:{...i.acceleration,noOtherBenefits}}))}</>}
|
||||
<button type="button" onClick={()=>change({acceleration:{...i.acceleration,rows:[...i.acceleration.rows,newAcceleratedAsset(crypto.randomUUID())]}})}>Qualificar activo existente paraCBF16</button>{i.acceleration.rows.map((r,index)=>{const patch=(p:Partial<typeof r>)=>change({acceleration:{...i.acceleration,rows:i.acceleration.rows.map(x=>x.id===r.id?{...x,...p}:x)}});return<fieldset key={r.id} className="rounded border p-2"><legend>Activo qualificado {index+1}</legend><label className="block">Activo do mapaL6<select value={r.assetId} onChange={e=>patch({assetId:e.target.value})}><option value="">Seleccione activo existente</option>{b.depreciation?.assets.map(a=><option key={a.id} value={a.id}>{a.description} — {a.assetKey}</option>)}</select></label><label className="block">Afectação documentada<select value={r.kind} onChange={e=>patch({kind:e.target.value as typeof r.kind})}><option value="">Por identificar</option><option value="new_project_building">Imóvel novo utilizado no projecto</option><option value="rehabilitated_project_building">Imóvel reabilitado — regra ainda por corresponder</option><option value="industrial_equipment">Máquina/equipamento industrial</option><option value="agroindustrial_equipment">Máquina/equipamento agro-industrial</option><option value="other">Outro — correspondência própria</option></select></label>{yesno('Condições do activoCBF16 — '+(index+1),r.eligible,eligible=>patch({eligible}))}<label className="block">Prova da afectação e condições do activo<input value={r.reference} onChange={e=>patch({reference:e.target.value})}/></label><button type="button" onClick={()=>change({acceleration:{...i.acceleration,rows:i.acceleration.rows.filter(x=>x.id!==r.id)}})}>Retirar tratamento do activo {index+1}</button></fieldset>;})}</fieldset>
|
||||
<p>Use «Calcular e guardar» abaixo para gravar uma nova versão e apresentar os efeitos. Os históricos anteriores são conservados. M20/M22 mantém apenas correspondências demonstradas;camposL7 não são preenchidos por aproximação.</p></section>;
|
||||
}
|
||||
@@ -30,7 +30,7 @@ const ratio=(a:FiscalFraction,b:FiscalFraction)=>fraction(BigInt(a.numerator)*Bi
|
||||
const date=(v:string)=>/^20\d{2}-\d{2}-\d{2}$/.test(v)&&Number.isFinite(Date.parse(v))&&new Date(v).toISOString().slice(0,10)===v;
|
||||
const month=(v:string)=>Number(v.slice(0,4))*12+Number(v.slice(5,7))-1;
|
||||
const show=(v:FiscalFraction|null)=>{if(!v)return'Indeterminado';const p=fractionPresentation(v);return(p.approximate?'≈':'')+p.decimal+' MZN'+(p.approximate?' (exacto '+v.numerator+'/'+v.denominator+')':'');};
|
||||
export function calculateNormalDepreciation(input:NormalDepreciationInput,source:{currency:string;accountingLines:Array<{code:string;total:string}>}|null,period:{from:string;to:string},claims:Array<{sourceCode:string;document:string;line:string;amount:string}>,short=false){
|
||||
export function calculateNormalDepreciation(input:NormalDepreciationInput,source:{currency:string;accountingLines:Array<{code:string;total:string}>}|null,period:{from:string;to:string},claims:Array<{sourceCode:string;document:string;line:string;amount:string}>,short=false,acceleratedIds:ReadonlySet<string>=new Set()){
|
||||
validateNormalDepreciation(input);const pending:string[]=[];
|
||||
if(!input.completenessReference.trim())pending.push('Reconciliação integral dos activos e quotas anteriores com a depreciação da origem em falta.');
|
||||
if(source?.currency!=='MZN'||!date(period.from)||!date(period.to)||!period.to.startsWith('2026-')||(!short&&month(period.to)-month(period.from)!==11||short&&(month(period.to)<month(period.from)||month(period.to)-month(period.from)>=11)))pending.push('Período anual emMZN com termo em2026 por reconciliar; períodos curtos permanecem separados.');
|
||||
@@ -60,7 +60,7 @@ export function calculateNormalDepreciation(input:NormalDepreciationInput,source
|
||||
if(a.method==='low_value'){if(cmp(cost,fraction(20000n))>0n||!yesno(a.individual,'Activo individual fora de conjunto depreciado como um todo')||cmp(priorFiscal,zero())!==0n||a.start<period.from||a.start>period.to)throw Error('Art17:valor unitário até20000MZN,activo individual e início no período,sem amortização fiscal anterior; condições em falta/incompatíveis.');quota=remaining;months=month(period.to)-month(a.start)+1;notes.push('Art17:opção de depreciação integral em um período,limitada ao que está contabilizado e ao saldo fiscal.');}
|
||||
else{
|
||||
if(!entry||!maxRate||!maxLifeMonths)throw Error('Taxa aplicável não identificada.');
|
||||
if(a.method==='constant'){if(!/^\d+(?:\.\d{1,6})?$/.test(a.rate))throw Error('Taxa constante escolhida por identificar.');const selected=decimalFraction(a.rate);if(cmp(selected,multiply(maxRate,fraction(1n,2n)))<0n||cmp(selected,maxRate)>0n)throw Error('Taxa constante fora do recorte entre metade da máxima e a máxima;quotas inferiores exigem correspondência própria dos limites de vida útil, artigos5/7.');quota=multiply(taxBasis,multiply(selected,fraction(1n,100n)));notes.push('Quota constante pela taxa escolhida:'+a.rate+'%;tabela'+entry.table+'/'+entry.code+'.');}
|
||||
if(a.method==='constant'){if(!/^\d+(?:\.\d{1,6})?$/.test(a.rate))throw Error('Taxa constante escolhida por identificar.');const selected=decimalFraction(a.rate);if(cmp(selected,multiply(maxRate,fraction(1n,2n)))<0n||cmp(selected,maxRate)>0n)throw Error('Taxa constante fora do recorte entre metade da máxima e a máxima;quotas inferiores exigem correspondência própria dos limites de vida útil, artigos5/7.');quota=multiply(taxBasis,multiply(selected,fraction(acceleratedIds.has(a.id)?3n:1n,acceleratedIds.has(a.id)?200n:100n)));if(acceleratedIds.has(a.id))notes.push('CBF16:L7 qualificado,incremento50% da taxa normal;mantidos contabilização e saldo fiscal.');notes.push('Quota constante pela taxa escolhida:'+a.rate+'%;tabela'+entry.table+'/'+entry.code+'.');}
|
||||
else if(a.method==='declining'){if(!yesno(a.newTangible,'Activo tangível novo adquirido a terceiros/construído')||['building','furniture','software'].includes(entry.kind)||entry.kind==='vehicle'&&a.vehicleException!=='yes')throw Error('Art6:quotas degressivas só nos activos tangíveis novos elegíveis;edifícios,mobiliário/equipamento social,intangíveis e veículos sem excepção ficam separados.');const life=ratio(fraction(100n),maxRate),maxFactor=cmp(life,fraction(5n))<0n?fraction(3n,2n):cmp(life,fraction(6n))<=0n?fraction(2n):fraction(5n,2n);if(!/^\d+(?:\.\d{1,6})?$/.test(a.factor))throw Error('Coeficiente degressivo escolhido em falta.');const factor=decimalFraction(a.factor);if(cmp(factor,zero())<=0n||cmp(factor,maxFactor)>0n)throw Error('Coeficiente degressivo excede o máximo do artigo8:1,5/2/2,5 conforme vida útil mínima.');quota=multiply(remaining,multiply(maxRate,multiply(factor,fraction(1n,100n))));notes.push('Art8:saldo fiscal por amortizar ×taxa máxima'+entry.rate+'% ×coeficiente'+a.factor+';máximo'+fractionPresentation(maxFactor).decimal+'.');
|
||||
if(yesno(a.switchToStraight,'Opção pela regra de saldo/vida útil restante8(2)')){if(!yesno(a.priorFullQuotas,'Condição das quotas anteriores8(2)')||!a.start.endsWith('-01-01')||period.from!=='2026-01-01'||a.timing!=='annual')throw Error('Art8(2):condição das quotas anteriores por documentar;este recorte da opção exige início emJaneiro e período anual civil.');const remainingYears=subtractFractions(life,fraction(BigInt(2026-Number(a.start.slice(0,4)))));if(cmp(remainingYears,zero())<=0n)throw Error('Art8(2):vida útil mínima esgotada;sem dividir por anos inexistentes.');const linear=ratio(remaining,remainingYears);if(cmp(quota,linear)<0n){quota=linear;notes.push('Art8(2):usado saldo/número de anos de vida útil mínima restantes,com condições anteriores documentadas.');}}
|
||||
}else throw Error('Método de amortização por identificar.');
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import {irpcSpecialVersion,validateSpecial,calculateSpecial,specialReportRows,specialDependency,type SpecialInput,type SpecialModel} from './irpc-special.ts';
|
||||
import {normalFormPreparationVersion,validateNormalFormPreparation,prepareNormalForms,normalFormPreparationReport,type NormalFormPreparationInput,type NormalFormPreparationModel} from './irpc-normal-form-preparation.ts';
|
||||
import {normalPeriodFxVersion,validateNormalPeriodFx,mapNormalPeriodFx,normalPeriodFxDependency,normalPeriodFxReport,type NormalPeriodFxInput,type NormalPeriodFxModel} from './irpc-normal-period-fx.ts';
|
||||
import {normalDepreciationVersion,validateNormalDepreciation,calculateNormalDepreciation,normalDepreciationReport,type NormalDepreciationInput,type NormalDepreciationModel} from './irpc-normal-depreciation.ts';
|
||||
@@ -15,8 +16,8 @@ import {addFractions,decimalFraction,fraction,fractionPresentation,type FiscalFr
|
||||
export const irpcNormalVersion='IRPC-normal-adjustments/1';
|
||||
export const irpcNormalSource='CIRPC Lei34/2007 art17(1),PDF6/p768(60):resultado e correcções;art36(1)c,PDF10/p768(64):multas e encargos por infracções sem origem contratual,incluindo juros compensatórios. Lei4/2012 PDF2 altera17(6)/acrescenta36(1)o;Lei19/2013 PDF2 mantém36(1)a–o e acrescenta p/q. Lei12/2025 altera3/5/20/62/67/75,adita61-A e revoga39/47/75(2)/76;sem alteração deste recorte36(1)c. Não é apuramento integral nem Modelo20/22.';
|
||||
export type NormalAdjustment={id:string;sourceCode:string;document:string;line:string;amount:string;rule:''|'noncontractual_fine'|'compensatory_interest'|'other';included:''|'yes'|'no';reference:string};
|
||||
export type NormalBook={version:1;year:string;mappingReference:string;scope:''|'resident_general'|'ep_general'|'other';scopeReference:string;rows:NormalAdjustment[];profit?:NormalProfitInput;base?:NormalBaseInput;assessment?:NormalAssessmentInput;schedules?:NormalSchedules;costs?:NormalCostsInput;depreciation?:NormalDepreciationInput;forms?:NormalFormPreparationInput;periodsFx?:NormalPeriodFxInput;result?:NormalRecord;history?:NormalRecord[]};
|
||||
type NormalModel={formPreparation?:NormalFormPreparationModel;periodsFx?:NormalPeriodFxModel;depreciation?:NormalDepreciationModel;costs?:NormalCostsModel;fiscalPeriod?:{kind:string;from:string;to:string;reference:string;pending:string[]};schedules?:SchedulesModel;currentLoss?:FiscalFraction|null;assessment?:NormalAssessmentModel;colecta?:FiscalFraction|null;base?:NormalBaseModel;profit?:NormalProfitModel;version:string;year:string;currency:string;origin:'projected';accountingProfit:FiscalFraction|null;additions:FiscalFraction;partialAdjustedResult:FiscalFraction|null;taxableProfit:FiscalFraction|null;taxableBase:FiscalFraction|null;tax:null;rows:Array<NormalAdjustment&{status:'calculated'|'indeterminate'|'outside_scope';adjustment:FiscalFraction|null;reason:string}>;pending:string[];source:string};
|
||||
export type NormalBook={version:1;year:string;mappingReference:string;scope:''|'resident_general'|'ep_general'|'other';scopeReference:string;rows:NormalAdjustment[];special?:SpecialInput;profit?:NormalProfitInput;base?:NormalBaseInput;assessment?:NormalAssessmentInput;schedules?:NormalSchedules;costs?:NormalCostsInput;depreciation?:NormalDepreciationInput;forms?:NormalFormPreparationInput;periodsFx?:NormalPeriodFxInput;result?:NormalRecord;history?:NormalRecord[]};
|
||||
export type NormalModel={special?:SpecialModel;formPreparation?:NormalFormPreparationModel;periodsFx?:NormalPeriodFxModel;depreciation?:NormalDepreciationModel;costs?:NormalCostsModel;fiscalPeriod?:{kind:string;from:string;to:string;reference:string;pending:string[]};schedules?:SchedulesModel;currentLoss?:FiscalFraction|null;assessment?:NormalAssessmentModel;colecta?:FiscalFraction|null;base?:NormalBaseModel;profit?:NormalProfitModel;version:string;year:string;currency:string;origin:'projected';accountingProfit:FiscalFraction|null;additions:FiscalFraction;partialAdjustedResult:FiscalFraction|null;taxableProfit:FiscalFraction|null;taxableBase:FiscalFraction|null;tax:null;rows:Array<NormalAdjustment&{status:'calculated'|'indeterminate'|'outside_scope';adjustment:FiscalFraction|null;reason:string}>;pending:string[];source:string};
|
||||
type NormalRecord={key:string;createdAt:string;model:NormalModel};
|
||||
export const newNormalBook=():NormalBook=>({version:1,year:'',mappingReference:'',scope:'',scopeReference:'',rows:[]});
|
||||
export const newNormalAdjustment=(id:string):NormalAdjustment=>({id,sourceCode:'',document:'',line:'',amount:'',rule:'',included:'',reference:''});
|
||||
@@ -28,6 +29,7 @@ export function rawNormalFinancialSource(d:Record<string,unknown>){
|
||||
export function normalFinancialSource(d:Record<string,unknown>){const raw=rawNormalFinancialSource(d),input=normalBook(d).periodsFx;return input?mapNormalPeriodFx(d,input,raw).source:raw;}
|
||||
function store(d:Record<string,unknown>){const s=JSON.parse(String(d.modelo_a_snapshot||'{"version":1,"books":{}}'));if(s.version!==1||!s.books||typeof s.books!=='object'||Array.isArray(s.books))throw Error('Livros fiscais não recuperáveis;originais preservados.');return s;}
|
||||
export function validateNormal(b:NormalBook){
|
||||
if(b?.special!==undefined)validateSpecial(b.special);
|
||||
if(b?.forms!==undefined)validateNormalFormPreparation(b.forms);
|
||||
if(b?.periodsFx!==undefined)validateNormalPeriodFx(b.periodsFx);
|
||||
if(b?.depreciation!==undefined)validateNormalDepreciation(b.depreciation);
|
||||
@@ -39,13 +41,13 @@ export function validateNormal(b:NormalBook){
|
||||
if(!b||b.version!==1||['year','mappingReference','scopeReference'].some(k=>typeof b[k as 'year']!=='string')||!['','resident_general','ep_general','other'].includes(b.scope)||!Array.isArray(b.rows)||b.history!==undefined&&!Array.isArray(b.history))throw Error('Preparação IRPC normal não recuperável.');
|
||||
for(const r of b.rows)if(!r||Object.keys(newNormalAdjustment('')).some(k=>typeof r[k as keyof NormalAdjustment]!=='string')||!['','noncontractual_fine','compensatory_interest','other'].includes(r.rule)||!['','yes','no'].includes(r.included))throw Error('Ajustamento IRPC não recuperável;original conservado.');
|
||||
if(new Set(b.rows.map(r=>r.id)).size!==b.rows.length)throw Error('Identificador de ajustamento duplicado.');
|
||||
for(const r of [b.result,...(b.history??[])])if(r&&(!r.model||![irpcNormalVersion,normalProfitVersion,normalBaseVersion,normalAssessmentVersion,normalSchedulesVersion,normalCostsVersion,normalDepreciationVersion,normalPeriodFxVersion,normalFormPreparationVersion].includes(r.model.version)||typeof r.key!=='string'||typeof r.createdAt!=='string'||!Array.isArray(r.model.rows)||!Array.isArray(r.model.pending)))throw Error('Histórico IRPC normal não recuperável.');
|
||||
for(const r of [b.result,...(b.history??[])])if(r&&(!r.model||![irpcSpecialVersion,irpcNormalVersion,normalProfitVersion,normalBaseVersion,normalAssessmentVersion,normalSchedulesVersion,normalCostsVersion,normalDepreciationVersion,normalPeriodFxVersion,normalFormPreparationVersion].includes(r.model.version)||typeof r.key!=='string'||typeof r.createdAt!=='string'||!Array.isArray(r.model.rows)||!Array.isArray(r.model.pending)))throw Error('Histórico IRPC normal não recuperável.');
|
||||
}
|
||||
export function normalBook(d:Record<string,unknown>):NormalBook{
|
||||
const m=store(d).irpcNormal;if(m===undefined)return newNormalBook();if(!m||typeof m!=='object'||Array.isArray(m))throw Error('Mapa IRPC normal não recuperável.');const b=m[acquisitionScope(d)]??newNormalBook();validateNormal(b);return b;
|
||||
}
|
||||
export function saveNormalBook(d:Record<string,unknown>,b:NormalBook){validateNormal(b);const s=store(d);if(s.irpcNormal!==undefined&&(!s.irpcNormal||typeof s.irpcNormal!=='object'||Array.isArray(s.irpcNormal)))throw Error('Mapa IRPC normal não recuperável.');return JSON.stringify({...s,irpcNormal:{...s.irpcNormal,[acquisitionScope(d)]:b}});}
|
||||
function key(d:Record<string,unknown>,b:NormalBook){return JSON.stringify([b.forms?normalFormPreparationVersion:b.periodsFx?normalPeriodFxVersion:b.depreciation?normalDepreciationVersion:b.costs?normalCostsVersion:b.schedules?normalSchedulesVersion:b.assessment?normalAssessmentVersion:b.base?normalBaseVersion:b.profit?normalProfitVersion:irpcNormalVersion,acquisitionScope(d),d.business_plan_snapshot??'',b.year,b.mappingReference,b.scope,b.scopeReference,b.rows,...(b.profit?[b.profit]:[]),...(b.base?[b.base]:[]),...(b.assessment?[b.assessment]:[]),...(b.schedules?[b.schedules]:[]),...(b.costs?[b.costs]:[]),...(b.depreciation?[b.depreciation]:[]),...(b.periodsFx?[b.periodsFx,normalPeriodFxDependency(d,b.periodsFx)]:[]),...(b.forms?[b.forms]:[])]);}
|
||||
function key(d:Record<string,unknown>,b:NormalBook){return JSON.stringify([b.special?irpcSpecialVersion:b.forms?normalFormPreparationVersion:b.periodsFx?normalPeriodFxVersion:b.depreciation?normalDepreciationVersion:b.costs?normalCostsVersion:b.schedules?normalSchedulesVersion:b.assessment?normalAssessmentVersion:b.base?normalBaseVersion:b.profit?normalProfitVersion:irpcNormalVersion,acquisitionScope(d),d.business_plan_snapshot??'',b.year,b.mappingReference,b.scope,b.scopeReference,b.rows,...(b.profit?[b.profit]:[]),...(b.base?[b.base]:[]),...(b.assessment?[b.assessment]:[]),...(b.schedules?[b.schedules]:[]),...(b.costs?[b.costs]:[]),...(b.depreciation?[b.depreciation]:[]),...(b.periodsFx?[b.periodsFx,normalPeriodFxDependency(d,b.periodsFx)]:[]),...(b.forms?[b.forms]:[]),...(b.special?[b.special,specialDependency(d)]:[])]);}
|
||||
export function normalCurrent(d:Record<string,unknown>,b:NormalBook){return !!b.result&&b.result.key===key(d,b);}
|
||||
const zero=()=>fraction(0n,1n);
|
||||
const cents=(s:string)=>{if(!/^-?\d+(?:\.\d{1,2})?$/.test(s))throw Error('Montante MZN inválido;máximo dois decimais.');const v=decimalFraction(s.startsWith('-')?s.slice(1):s);return s.startsWith('-')?fraction(-BigInt(v.numerator),BigInt(v.denominator)):v;};
|
||||
@@ -94,7 +96,8 @@ export function calculateNormal(d:Record<string,unknown>,b:NormalBook):NormalMod
|
||||
const assessment=b.assessment?calculateNormalAssessment(b.assessment,base?.taxableBase??null,{year:b.year,scope:b.scope,extended:!!b.schedules||!!periodsFx,short:!!periodsFx?.short,currency:source?.currency??'',...(fiscalPeriod?{period:{from:fiscalPeriod.from,to:fiscalPeriod.to}}:{})}):undefined;
|
||||
if(assessment)pending.push(...assessment.pending,assessment.finalBalance.reason);
|
||||
const currentLoss=b.schedules&&profit?.taxableProfit&&BigInt(profit.taxableProfit.numerator)<0n?fraction(-BigInt(profit.taxableProfit.numerator),BigInt(profit.taxableProfit.denominator)):null;
|
||||
const model:NormalModel={...(periodsFx?{periodsFx}:{}),...(depreciation?{depreciation}:{}),...(costs?{costs}:{}),...(schedules?{schedules,currentLoss,fiscalPeriod}:{}),...(assessment?{assessment,colecta:assessment.colecta}:{}),...(base?{base}:{}),...(profit?{profit}:{}),version:b.forms?normalFormPreparationVersion:b.periodsFx?normalPeriodFxVersion:b.depreciation?normalDepreciationVersion:b.costs?normalCostsVersion:b.schedules?normalSchedulesVersion:b.assessment?normalAssessmentVersion:b.base?normalBaseVersion:b.profit?normalProfitVersion:irpcNormalVersion,year:b.year,currency:source?.currency??'',origin:'projected',accountingProfit,additions,partialAdjustedResult:contextReady&&rows.length>0&&rows.every(r=>r.status==='calculated')&&accountingProfit?addFractions([accountingProfit,additions]):null,taxableProfit:profit?.taxableProfit??null,taxableBase:base?.taxableBase??null,tax:null,rows,pending,source:irpcNormalSource+(periodsFx?' '+periodsFx.rule:b.schedules?' Mapas complementares: CIRPC18/21/22/24/36; Decreto72/2013 art3–7. EP: CIRPC15(1)c, apenas resultado imputável ao estabelecimento no regime geral, anual2026/MZN.':'')};
|
||||
const model:NormalModel={...(periodsFx?{periodsFx}:{}),...(depreciation?{depreciation}:{}),...(costs?{costs}:{}),...(schedules?{schedules,currentLoss,fiscalPeriod}:{}),...(assessment?{assessment,colecta:assessment.colecta}:{}),...(base?{base}:{}),...(profit?{profit}:{}),version:b.special?irpcSpecialVersion:b.forms?normalFormPreparationVersion:b.periodsFx?normalPeriodFxVersion:b.depreciation?normalDepreciationVersion:b.costs?normalCostsVersion:b.schedules?normalSchedulesVersion:b.assessment?normalAssessmentVersion:b.base?normalBaseVersion:b.profit?normalProfitVersion:irpcNormalVersion,year:b.year,currency:source?.currency??'',origin:'projected',accountingProfit,additions,partialAdjustedResult:contextReady&&rows.length>0&&rows.every(r=>r.status==='calculated')&&accountingProfit?addFractions([accountingProfit,additions]):null,taxableProfit:profit?.taxableProfit??null,taxableBase:base?.taxableBase??null,tax:null,rows,pending,source:irpcNormalSource+(periodsFx?' '+periodsFx.rule:b.schedules?' Mapas complementares: CIRPC18/21/22/24/36; Decreto72/2013 art3–7. EP: CIRPC15(1)c, apenas resultado imputável ao estabelecimento no regime geral, anual2026/MZN.':'')};
|
||||
if(b.special)model.special=calculateSpecial(d,b,model,source);
|
||||
if(b.forms){model.formPreparation=prepareNormalForms(b.forms,model,source);model.pending.push(...model.formPreparation.pending.map(p=>'Preparação M20/M22: '+p));}
|
||||
return model;
|
||||
}
|
||||
@@ -102,5 +105,5 @@ export function recordNormal(d:Record<string,unknown>,b:NormalBook,now=new Date(
|
||||
const money=(v:FiscalFraction|null)=>v?fractionPresentation(v).decimal+' MZN':'Indeterminado';
|
||||
function normalBaseReport(m:NormalBaseModel):Array<[string,string,string,string]>{return[['IRPC normal — L6','Matéria colectável — deduções/perdas',`Lucro tributável:${money(m.taxableProfit)};perdas propostas elegíveis:${money(m.requestedLosses)};perdas deduzidas nesta simulação:${money(m.deductedLosses)};benefícios deduzidos:${money(m.benefitDeduction)};matéria colectável simulada:${money(m.taxableBase)};imposto a pagar:Indeterminado. ${m.pending.join(' | ')}`,`NUIT:${m.input.subjectNuit};${m.input.identityReference};método:${m.input.method==='direct'?'Declarativo/directo':m.input.method==='indirect'?'Indirecto':'Por identificar'};${m.input.methodReference};perdas:${m.input.lossesState==='absent'?'Ausência declarada':m.input.lossesState==='known'?'Conhecidas':'Informação em falta'};${m.input.lossesReference};objecto:${m.input.unchangedObject==='yes'?'Sem alteração declarada':m.input.unchangedObject==='no'?'Alteração declarada':'Por esclarecer'};${m.input.objectReference};${m.source}`],['IRPC normal — L6','Benefícios à matéria colectável',`Estado:${m.input.benefits.state==='known'?'Valor conhecido':m.input.benefits.state==='absent'?'Ausência declarada':'Informação em falta'};montante original:${m.input.benefits.amount||'Não preenchido'};dedução:${money(m.benefitDeduction)};não inclui créditos à colecta ou retenções sofridas.`,m.input.benefits.reference],...m.losses.map(l=>['IRPC normal — L6','Perda fiscal de '+l.year,`Estado:${l.status==='eligible'?'Elegível neste recorte':l.status==='excluded'?'Excluída neste exercício':'Indeterminada'};apurada:${l.assessed};utilizada antes:${l.previouslyUsed};saldo:${money(l.available)};utilização proposta:${l.requested};dedução nesta simulação:${money(l.deducted)};saldo aritmético posterior:${money(l.remaining)};último exercício ordinário:${l.lastOrdinaryYear??'Por determinar'};${l.reason}`,`NUIT:${l.subjectNuit};${l.reference};sem consumo do saldo oficial nem reporte automático.`]as[string,string,string,string])];}
|
||||
function normalAssessmentReport(m:NormalAssessmentModel):Array<[string,string,string,string]>{return[['IRPC normal — L6','Colecta — regime normal',`Matéria colectável:${money(m.taxableBase)};taxa:${m.rate?m.rate.numerator+'%':'Por identificar'};colecta simulada:${money(m.colecta)};${m.classification};${m.centExact===false?'Valor racional exacto com fracção de cêntimo;sem arredondamento fiscal aplicado.':''}${m.pending.join(' | ')}`,`Exercício:${m.period.year};período:${m.period.from}–${m.period.to};${m.input.reference};${m.rule};${m.source}`],['IRPC normal — L6','Saldo final — âmbito L8','A pagar:Indeterminado;a recuperar:Indeterminado. '+m.finalBalance.reason,'Sequência:lucro tributável → matéria colectável → colecta → saldo final;retenções,pagamentos e créditos anuais reservados aL8.']];}
|
||||
export function normalReportRows(d:Record<string,unknown>):Array<[string,string,string,string]>{try{const b=normalBook(d),r=b.result;if(!r)return[];const m=r.model;return[['IRPC normal — L6','Ajustamentos ao resultado financeiro',`Exercício:${m.year};resultado contabilístico antes de imposto:${money(m.accountingProfit)};acréscimos demonstrados:${money(m.additions)};resultado parcial ajustado:${money(m.partialAdjustedResult)};${m.profit?'lucro tributável simulado:'+money(m.taxableProfit)+(m.base?';matéria colectável simulada:'+money(m.taxableBase)+(m.assessment?';colecta simulada:'+money(m.colecta??null)+';saldo final a pagar ou recuperar:Indeterminado (L8).':';imposto a pagar:Indeterminado.'):';matéria colectável/imposto:Indeterminados.'):'lucro tributável/matéria colectável/imposto:Indeterminados.'} Projecção com pressupostos;${m.pending.join(' | ')}`,`${normalCurrent(d,b)?'Entradas correspondentes':'Histórico;origem ou entradas alteradas'};${r.createdAt};${m.source}`],...(m.formPreparation?normalFormPreparationReport(m.formPreparation):[]),...(m.periodsFx?normalPeriodFxReport(m.periodsFx):[]),...(m.depreciation?normalDepreciationReport(m.depreciation):[]),...(m.costs?normalCostReport(m.costs):[]),...(m.base?normalBaseReport(m.base):[]),...(m.assessment?normalAssessmentReport(m.assessment):[]),...(m.schedules?[['IRPC normal — L6','Mapas complementares',`Efeito líquido adicional:${money(m.schedules.net)};perda fiscal do próprio exercício:${money(m.currentLoss??null)};sem reporte ou consumo automático. ${m.schedules.pending.join(' | ')}`,m.schedules.source]as[string,string,string,string],...m.schedules.effects.map(e=>{const i=m.schedules!.input.rows.find(r=>r.id===e.id)!;return['IRPC normal — L6',i.document+'/'+i.line,`Montante:${money(e.amount)};efeito:${money(e.effect)};${e.reason}`,`${i.reference};exercício de imputação:${i.fiscalYear||'Não aplicável'}`]as[string,string,string,string];}),...m.schedules.assets.map(a=>['IRPC normal — L6',a.description,`Depreciação contabilística:${money(a.accountingValue)};quota fiscal:${money(a.fiscal)};acréscimo:${money(a.adjustment)};${a.reason}`,`${a.tableReference};${a.reference}`]as[string,string,string,string]),['IRPC normal — L6','Juros financeiros ordinários',`Remanescente aceite no recorte:${money(m.schedules.interest)};não corresponde a juros de mora/compensatórios L5.`,m.schedules.input.interest.reference]as[string,string,string,string]]:[]),...(m.schedules&&!m.formPreparation?[...normalFormFields(m).fields.map(f=>['IRPC normal — L6','M22 campo '+f.code+' — '+f.label,`${f.display};exacto:${f.value?f.value.numerator+'/'+f.value.denominator:'Indeterminado'};transcrição:${f.transcriptionReady?'Preparação parcial com valor exacto ao cêntimo':'Pendente ou sem aplicação'};${f.reason}`,normalFormFields(m).source]as[string,string,string,string]),...normalFormFields(m).m20.fields.map(f=>['IRPC normal — L6','M20 A.1 — conta '+f.account+' — '+f.label,`${f.display};representação em meticais inteiros:${f.transcriptionReady?'Exacta':'Pendente'};${f.reason}`,`${f.reference};${normalFormFields(m).m20.source}`]as[string,string,string,string]),['IRPC normal — L6','M20 — correspondência',normalFormFields(m).m20.reason,normalFormFields(m).m20.source]as[string,string,string,string]]:[]),...m.rows.map(r=>['IRPC normal — L6',r.document+'/'+r.line,`${({calculated:'Calculado neste recorte',indeterminate:'Indeterminado',outside_scope:'Fora deste recorte'})[r.status]};montante:${r.amount};acréscimo:${money(r.adjustment)};${r.reason}`,`Origem:${({revenue:'Receitas',cost_of_sales:'Custo das vendas',operating_expenses:'Despesas operacionais',personnel:'Pessoal',depreciation:'Depreciação contabilística',interest_expense:'Juros reconhecidos'}as Record<string,string>)[r.sourceCode]??'Por corresponder'};incluído:${r.included==='yes'?'Sim':r.included==='no'?'Não':'Por demonstrar'};suporte:${r.reference}`]as[string,string,string,string]),...(m.profit?[...m.profit.lines.map(l=>['IRPC normal — L6','Conferência: '+l.label,`Estado:${l.state==='known'?'Valor conhecido':l.state==='absent'?'Ausência declarada':'Informação em falta'};origem:${l.amount};acréscimos:${money(l.addedBack)};remanescente:${money(l.remainder)};${l.reason}`,l.reference]as[string,string,string,string]),...m.profit.topics.map(t=>['IRPC normal — L6',t.label,`Estado:${t.state==='known'?'Valor conhecido':t.state==='absent'?'Ausência declarada':'Informação em falta'};montante:${money(t.value)};${t.reason}`,t.reference]as[string,string,string,string]),['IRPC normal — L6','Âmbito da conferência',m.profit.input.completenessReference,m.profit.source]as[string,string,string,string]]:[])];}catch(e){return[['IRPC normal — L6','Não recuperável',String(e),'Originais conservados.']];}}
|
||||
export function normalHtml(d:Record<string,unknown>){const b=normalBook(d);if(!normalCurrent(d,b))throw Error('Calcule e guarde as entradas actuais antes de exportar.');const esc=(s:string)=>s.replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]!));return'<!doctype html><html lang="pt"><meta charset="utf-8"><title>IRPC normal — ajustamentos</title><h1>L6 — mapa parcial de ajustamentos</h1><p>Projecção pelos pressupostos do plano. Não é demonstração contabilística,liquidação ou Modelo20/22.</p>'+normalReportRows(d).map(r=>'<section><h2>'+esc(r[1])+'</h2><p>'+esc(r[2])+'</p><small>'+esc(r[3])+'</small></section>').join('')+'</html>';}
|
||||
export function normalReportRows(d:Record<string,unknown>):Array<[string,string,string,string]>{try{const b=normalBook(d),r=b.result;if(!r)return[];const m=r.model;return[['IRPC normal — L6','Ajustamentos ao resultado financeiro',`Exercício:${m.year};resultado contabilístico antes de imposto:${money(m.accountingProfit)};acréscimos demonstrados:${money(m.additions)};resultado parcial ajustado:${money(m.partialAdjustedResult)};${m.profit?'lucro tributável simulado:'+money(m.taxableProfit)+(m.base?';matéria colectável simulada:'+money(m.taxableBase)+(m.assessment?';colecta simulada:'+money(m.colecta??null)+';saldo final a pagar ou recuperar:Indeterminado (L8).':';imposto a pagar:Indeterminado.'):';matéria colectável/imposto:Indeterminados.'):'lucro tributável/matéria colectável/imposto:Indeterminados.'} Projecção com pressupostos;${m.pending.join(' | ')}`,`${normalCurrent(d,b)?'Entradas correspondentes':'Histórico;origem ou entradas alteradas'};${r.createdAt};${m.source}`],...(m.special?specialReportRows(m.special):[]),...(m.formPreparation?normalFormPreparationReport(m.formPreparation):[]),...(m.periodsFx?normalPeriodFxReport(m.periodsFx):[]),...(m.depreciation?normalDepreciationReport(m.depreciation):[]),...(m.costs?normalCostReport(m.costs):[]),...(m.base?normalBaseReport(m.base):[]),...(m.assessment?normalAssessmentReport(m.assessment):[]),...(m.schedules?[['IRPC normal — L6','Mapas complementares',`Efeito líquido adicional:${money(m.schedules.net)};perda fiscal do próprio exercício:${money(m.currentLoss??null)};sem reporte ou consumo automático. ${m.schedules.pending.join(' | ')}`,m.schedules.source]as[string,string,string,string],...m.schedules.effects.map(e=>{const i=m.schedules!.input.rows.find(r=>r.id===e.id)!;return['IRPC normal — L6',i.document+'/'+i.line,`Montante:${money(e.amount)};efeito:${money(e.effect)};${e.reason}`,`${i.reference};exercício de imputação:${i.fiscalYear||'Não aplicável'}`]as[string,string,string,string];}),...m.schedules.assets.map(a=>['IRPC normal — L6',a.description,`Depreciação contabilística:${money(a.accountingValue)};quota fiscal:${money(a.fiscal)};acréscimo:${money(a.adjustment)};${a.reason}`,`${a.tableReference};${a.reference}`]as[string,string,string,string]),['IRPC normal — L6','Juros financeiros ordinários',`Remanescente aceite no recorte:${money(m.schedules.interest)};não corresponde a juros de mora/compensatórios L5.`,m.schedules.input.interest.reference]as[string,string,string,string]]:[]),...(m.schedules&&!m.formPreparation?[...normalFormFields(m).fields.map(f=>['IRPC normal — L6','M22 campo '+f.code+' — '+f.label,`${f.display};exacto:${f.value?f.value.numerator+'/'+f.value.denominator:'Indeterminado'};transcrição:${f.transcriptionReady?'Preparação parcial com valor exacto ao cêntimo':'Pendente ou sem aplicação'};${f.reason}`,normalFormFields(m).source]as[string,string,string,string]),...normalFormFields(m).m20.fields.map(f=>['IRPC normal — L6','M20 A.1 — conta '+f.account+' — '+f.label,`${f.display};representação em meticais inteiros:${f.transcriptionReady?'Exacta':'Pendente'};${f.reason}`,`${f.reference};${normalFormFields(m).m20.source}`]as[string,string,string,string]),['IRPC normal — L6','M20 — correspondência',normalFormFields(m).m20.reason,normalFormFields(m).m20.source]as[string,string,string,string]]:[]),...m.rows.map(r=>['IRPC normal — L6',r.document+'/'+r.line,`${({calculated:'Calculado neste recorte',indeterminate:'Indeterminado',outside_scope:'Fora deste recorte'})[r.status]};montante:${r.amount};acréscimo:${money(r.adjustment)};${r.reason}`,`Origem:${({revenue:'Receitas',cost_of_sales:'Custo das vendas',operating_expenses:'Despesas operacionais',personnel:'Pessoal',depreciation:'Depreciação contabilística',interest_expense:'Juros reconhecidos'}as Record<string,string>)[r.sourceCode]??'Por corresponder'};incluído:${r.included==='yes'?'Sim':r.included==='no'?'Não':'Por demonstrar'};suporte:${r.reference}`]as[string,string,string,string]),...(m.profit?[...m.profit.lines.map(l=>['IRPC normal — L6','Conferência: '+l.label,`Estado:${l.state==='known'?'Valor conhecido':l.state==='absent'?'Ausência declarada':'Informação em falta'};origem:${l.amount};acréscimos:${money(l.addedBack)};remanescente:${money(l.remainder)};${l.reason}`,l.reference]as[string,string,string,string]),...m.profit.topics.map(t=>['IRPC normal — L6',t.label,`Estado:${t.state==='known'?'Valor conhecido':t.state==='absent'?'Ausência declarada':'Informação em falta'};montante:${money(t.value)};${t.reason}`,t.reference]as[string,string,string,string]),['IRPC normal — L6','Âmbito da conferência',m.profit.input.completenessReference,m.profit.source]as[string,string,string,string]]:[])];}catch(e){return[['IRPC normal — L6','Não recuperável',String(e),'Originais conservados.']];}}
|
||||
export function normalHtml(d:Record<string,unknown>){const b=normalBook(d);if(!normalCurrent(d,b))throw Error('Calcule e guarde as entradas actuais antes de exportar.');const esc=(s:string)=>s.replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]!));return'<!doctype html><html lang="pt"><meta charset="utf-8"><title>IRPC normal — ajustamentos</title><h1>IRPC — L6 de referência e tratamentos L7 quando qualificados</h1><p>Projecção pelos pressupostos do plano. Não é demonstração contabilística,liquidação ou Modelo20/22.</p>'+normalReportRows(d).map(r=>'<section><h2>'+esc(r[1])+'</h2><p>'+esc(r[2])+'</p><small>'+esc(r[3])+'</small></section>').join('')+'</html>';}
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
import type {NormalBook,NormalModel} from './irpc-normal.ts';
|
||||
import {calculateNormalBase} from './irpc-normal-base.ts';
|
||||
import {calculateNormalAssessment} from './irpc-normal-assessment.ts';
|
||||
import {calculateNormalDepreciation,type NormalDepreciationModel} from './irpc-normal-depreciation.ts';
|
||||
import {addFractions,subtractFractions,decimalFraction,fraction,fractionPresentation,type FiscalFraction} from './fiscal-rational.ts';
|
||||
|
||||
export const irpcSpecialVersion='IRPC-normal-adjustments/10';
|
||||
export const specialSources={expenses:'CIRPC,Lei34/2007,art61(4),PDF17/p768(71):35% sobre encargos não devidamente documentados e despesas confidenciais/ilícitas,sem prejuízo do36(1)g. Exercício2026;sem regra inferida da falta de anexo.',cooperative:'CIRPC,Lei34/2007,art12/14,PDF5/p768(59),e61(1):cooperativas agrárias,de artesanato e culturais;redução de50% da taxa geral32%=16%;rendimentos sujeitos a retenção excluídos deste benefício. Recorte2026,residente,parcela ordinária integralmente elegível.',acceleration:'CBF,Lei4/2009,art3/4/9/10/16;compilação oficial APIEX pp66–68/72:incremento50% das taxas normais nos imóveis novos do projecto e,nas mesmas condições,imóveis reabilitados/máquinas e equipamentos industriais ou agro-industriais. Decreto72/2013 art3(3):limite contabilizado e saldo fiscal. Recorte constante pela taxa normal máxima da tabela,primeiro exercício anual2026,sem cumulação presumida.'}as const;
|
||||
export type Qualification={state:''|'known'|'absent'|'not_applicable';eligible:''|'yes'|'no';from:string;to:string;reference:string;periodReference:string};
|
||||
export const newQualification=():Qualification=>({state:'',eligible:'',from:'',to:'',reference:'',periodReference:''});
|
||||
export type SpecialExpense={id:string;scheduleId:string;nature:''|'undocumented'|'confidential'|'illicit'|'other';eligible:''|'yes'|'no';reference:string};
|
||||
export type AcceleratedAsset={id:string;assetId:string;kind:''|'new_project_building'|'rehabilitated_project_building'|'industrial_equipment'|'agroindustrial_equipment'|'other';eligible:''|'yes'|'no';reference:string};
|
||||
export type SpecialInput={version:1;expenses:{qualification:Qualification;rows:SpecialExpense[]};cooperative:{qualification:Qualification;kind:''|'agrarian'|'craft'|'cultural'|'other';allIncomeEligible:''|'yes'|'no';withheldIncome:''|'absent'|'known'};acceleration:{qualification:Qualification;cbfRequirements:''|'yes'|'no';recognition:''|'documented'|'not_required';recognitionReference:string;noOtherBenefits:''|'yes'|'no';rows:AcceleratedAsset[]}};
|
||||
export const newSpecialInput=():SpecialInput=>({version:1,expenses:{qualification:newQualification(),rows:[]},cooperative:{qualification:newQualification(),kind:'',allIncomeEligible:'',withheldIncome:''},acceleration:{qualification:newQualification(),cbfRequirements:'',recognition:'',recognitionReference:'',noOtherBenefits:'',rows:[]}});
|
||||
export const newSpecialExpense=(id:string):SpecialExpense=>({id,scheduleId:'',nature:'',eligible:'',reference:''});
|
||||
export const newAcceleratedAsset=(id:string):AcceleratedAsset=>({id,assetId:'',kind:'',eligible:'',reference:''});
|
||||
const choices=(v:unknown,allowed:string[])=>typeof v==='string'&&allowed.includes(v);
|
||||
export function validateSpecial(i:SpecialInput){
|
||||
if(!i||i.version!==1||!i.expenses||!i.cooperative||!i.acceleration)throw Error('Qualificação L7 não recuperável;originais conservados.');
|
||||
for(const q of[i.expenses.qualification,i.cooperative.qualification,i.acceleration.qualification])if(!q||!choices(q.state,['','known','absent','not_applicable'])||!choices(q.eligible,['','yes','no'])||['from','to','reference','periodReference'].some(k=>typeof q[k as 'from']!=='string'))throw Error('Condição/período L7 não recuperável.');
|
||||
for(const [rows,keys]of [[i.expenses.rows,Object.keys(newSpecialExpense(''))],[i.acceleration.rows,Object.keys(newAcceleratedAsset(''))]]as const){if(!Array.isArray(rows)||new Set(rows.map(r=>r.id)).size!==rows.length||rows.some(r=>!r||keys.some(k=>typeof(r as unknown as Record<string,unknown>)[k]!=='string')||!choices(r.eligible,['','yes','no'])))throw Error('Parcela L7 não recuperável ou identificador repetido.');}
|
||||
if(i.expenses.rows.some(r=>!choices(r.nature,['','undocumented','confidential','illicit','other']))||i.acceleration.rows.some(r=>!choices(r.kind,['','new_project_building','rehabilitated_project_building','industrial_equipment','agroindustrial_equipment','other'])))throw Error('Natureza L7 desconhecida.');
|
||||
if(!choices(i.cooperative.kind,['','agrarian','craft','cultural','other'])||!choices(i.cooperative.allIncomeEligible,['','yes','no'])||!choices(i.cooperative.withheldIncome,['','absent','known'])||!choices(i.acceleration.cbfRequirements,['','yes','no'])||!choices(i.acceleration.noOtherBenefits,['','yes','no'])||!choices(i.acceleration.recognition,['','documented','not_required'])||typeof i.acceleration.recognitionReference!=='string')throw Error('Parâmetro L7 não recuperável.');
|
||||
}
|
||||
type Status='calculated'|'absent'|'not_applicable'|'indeterminate';
|
||||
type Decision={status:Status;reason:string;pending:string[]};
|
||||
const z=()=>fraction(0n),mul=(v:FiscalFraction,n:bigint,d=1n)=>fraction(BigInt(v.numerator)*n,BigInt(v.denominator)*d);
|
||||
const cmp=(a:FiscalFraction,b:FiscalFraction)=>BigInt(a.numerator)*BigInt(b.denominator)-BigInt(b.numerator)*BigInt(a.denominator);
|
||||
const iso=(s:string)=>/^20\d{2}-\d{2}-\d{2}$/.test(s)&&Number.isFinite(Date.parse(s))&&new Date(s).toISOString().slice(0,10)===s;
|
||||
export function specialContext(d:Record<string,unknown>){return Object.fromEntries(['context_opportunity','context_opportunity_snapshot','context_applicability_snapshot','context_reuse','sector_id','sector_id_label','province_id','province_id_label','district_id','district_id_label','admin_post_id','admin_post_id_label','locality_id','locality_id_label','selection_labels'].map(k=>[k,d[k]??null]));}
|
||||
export const specialDependency=(d:Record<string,unknown>)=>JSON.stringify(specialContext(d));
|
||||
const specialPeriod=(b:NormalBook,m:NormalModel)=>b.periodsFx?{from:b.periodsFx.from,to:b.periodsFx.to,pending:m.periodsFx?.pending??[]}:m.fiscalPeriod??{from:b.year+'-01-01',to:b.year+'-12-31',pending:[]};
|
||||
function qualify(q:Qualification,b:NormalBook,m:NormalModel):Decision{
|
||||
const pending:string[]=[],p=specialPeriod(b,m);
|
||||
if(!q.state)pending.push('Informação em falta:identifique o estado do tratamento.');
|
||||
if(!q.reference.trim())pending.push('Falta prova/declaração das condições ou da ausência/não aplicação.');
|
||||
if(!iso(q.from)||!iso(q.to)||q.from!==p.from||q.to!==p.to||!q.periodReference.trim())pending.push('Período do tratamento deve corresponder ao período fiscal documentado,com suporte próprio;sem transpor vigência.');
|
||||
if(b.year!=='2026'||m.currency!=='MZN'||!b.base?.subjectNuit.match(/^\d{9}$/)||!b.base.identityReference.trim()||!b.scopeReference.trim()||!['resident_general','ep_general'].includes(b.scope)||p.pending.length)pending.push('Sujeito/NUIT,âmbito ou período2026 emMZN por reconciliar na base existente.');
|
||||
if(q.state==='known'&&!q.eligible)pending.push('Condições documentadas por qualificar:sim,não ou informação em falta.');
|
||||
if(q.state!=='known'&&q.eligible)pending.push('Estado de ausência/não aplicação/informação em falta não admite condição de benefício preenchida.');
|
||||
if(pending.length)return{status:'indeterminate',pending,reason:pending.join(' ')};
|
||||
const status=q.state==='absent'?'absent':q.state==='not_applicable'||q.eligible==='no'?'not_applicable':'calculated';
|
||||
return{status,pending,reason:status==='absent'?'Ausência declarada com suporte;efeito zero neste período.':status==='not_applicable'?'Tratamento não aplicável/condição negativa documentada;percurso normal conservado.':'Condições e período documentados no recorte.'};
|
||||
}
|
||||
function fail(d:Decision,reason:string){d.status='indeterminate';d.pending.push(reason);d.reason=d.pending.join(' ');}
|
||||
export function calculateSpecial(draft:Record<string,unknown>,b:NormalBook,m:NormalModel,source:Parameters<typeof calculateNormalDepreciation>[1]){
|
||||
const i=b.special!;validateSpecial(i);const expenseDecision=qualify(i.expenses.qualification,b,m),coopDecision=qualify(i.cooperative.qualification,b,m),accDecision=qualify(i.acceleration.qualification,b,m);
|
||||
const existing=(b.schedules?.rows??[]).filter(r=>r.rule==='undocumented');
|
||||
if(expenseDecision.status==='absent'&&(existing.length||i.expenses.rows.length))fail(expenseDecision,'Ausência declarada contradiz despesas36g ou linhasL7 presentes;reconcilie sem apagar o ajustamento.');
|
||||
if(expenseDecision.status!=='calculated'&&i.expenses.rows.length&&expenseDecision.status!=='indeterminate')fail(expenseDecision,'Estado global e parcelas da despesa contraditórios;qualifique as parcelas ou conserve apenas a declaração.');
|
||||
const expenses=i.expenses.rows.map(r=>{
|
||||
const origin=existing.find(x=>x.id===r.scheduleId),effect=m.schedules?.effects.find(x=>x.id===r.scheduleId);let amount:FiscalFraction|null=effect?.amount??null,tax:FiscalFraction|null=null,status:Status='indeterminate';const reasons:string[]=[];
|
||||
if(expenseDecision.status!=='calculated')reasons.push(expenseDecision.reason);
|
||||
if(!origin||!effect?.effect||!effect.amount||cmp(effect.effect,effect.amount)!==0n)reasons.push('Seleccione ajustamento36g calculado emL6;imposto autónomo não acrescenta novamente a despesa.');
|
||||
if(i.expenses.rows.filter(x=>x.scheduleId===r.scheduleId).length!==1)reasons.push('Despesa L6 repetida no imposto autónomo;uma referência por parcela.');
|
||||
if(!r.reference.trim()||!r.eligible||!r.nature)reasons.push('Falta classificação legal documentada da despesa;ausência de anexo não prova61(4).');
|
||||
if(!reasons.length){status=r.eligible==='no'?'not_applicable':r.nature==='other'?'indeterminate':'calculated';if(status==='indeterminate')reasons.push('Outra natureza por corresponder;sem taxa provisória.');else tax=status==='calculated'?mul(amount!,35n,100n):z();}
|
||||
return{...structuredClone(r),document:origin?.document??'',line:origin?.line??'',sourceCode:origin?.sourceCode??'',amount,l6Adjustment:effect?.effect??null,additionalProfitAdjustment:z(),rate:status==='calculated'?fraction(35n):null,tax,status,reason:reasons.join(' ')||(status==='calculated'?'CIRPC61(4):despesa ×35%;ajustamento36g reutilizado,sem duplicação.':'Condição negativa documentada;sem imposto autónomo aplicado à parcela.')};
|
||||
});
|
||||
if(expenseDecision.status==='calculated'){
|
||||
if(!existing.length&&!expenses.length)fail(expenseDecision,'Não há parcelas conhecidas;declare ausência com suporte ou seleccione despesas36g.');
|
||||
if(existing.some(r=>!expenses.some(x=>x.scheduleId===r.id)))fail(expenseDecision,'Há despesa36g sem qualificação autónoma;corresponda cada parcela ou justifique a sua não aplicação.');
|
||||
for(const r of expenses)if(r.status==='indeterminate')fail(expenseDecision,(r.document||r.id)+': '+r.reason);
|
||||
}
|
||||
const knownAutonomous=addFractions(expenses.flatMap(r=>r.tax?[r.tax]:[])),autonomousTax=expenseDecision.status==='indeterminate'?null:expenseDecision.status==='calculated'?knownAutonomous:z();
|
||||
if(coopDecision.status==='absent'&&['agrarian','craft','cultural'].includes(i.cooperative.kind)&&i.cooperative.allIncomeEligible==='yes'&&i.cooperative.withheldIncome==='absent')fail(coopDecision,'Ausência de redução contradiz os dados positivos de cooperativa integralmente elegível;reconcilie a declaração sem apagar os dados.');
|
||||
if(coopDecision.status==='calculated'){
|
||||
if(b.scope!=='resident_general'||!['agrarian','craft','cultural'].includes(i.cooperative.kind))fail(coopDecision,'Art12:tipo de cooperativa abrangida e residência por documentar;outras entidades têm correspondência própria.');
|
||||
if(i.cooperative.allIncomeEligible!=='yes'||i.cooperative.withheldIncome!=='absent')fail(coopDecision,'Recorte exige base ordinária integralmente elegível e ausência documentada de rendimentos sujeitos a retenção;parcelas mistas/retidas exigem segregação própria,sem redução global presumida.');
|
||||
}
|
||||
if(accDecision.status==='absent'&&i.acceleration.rows.length)fail(accDecision,'Ausência de amortização acelerada contradiz activos seleccionados.');
|
||||
if(accDecision.status!=='calculated'&&i.acceleration.rows.length&&accDecision.status!=='indeterminate')fail(accDecision,'Não aplicação global com activos seleccionados:reconcilie o estado e as parcelas.');
|
||||
if(accDecision.status==='calculated'){
|
||||
if(i.acceleration.cbfRequirements!=='yes'||!i.acceleration.recognition||!i.acceleration.recognitionReference.trim())fail(accDecision,'Falta enquadramentoCBF3/9 e reconhecimento10 quando exigido;excepção deve ter norma/suporte,não localização.');
|
||||
if(i.acceleration.noOtherBenefits!=='yes')fail(accDecision,'CumulaçãoCBF4 por corresponder;este recorte não combina outros benefícios positivos.');
|
||||
if(coopDecision.status==='calculated')fail(accDecision,'Combinação de redução cooperativa comCBF16 ainda não correspondida;cada caso independente continua demonstrável.');
|
||||
if(!b.depreciation||!m.depreciation||!i.acceleration.rows.length)fail(accDecision,'Seleccione activos do mapaL6 já reconciliado;sem criar activo ou quota paralelos.');
|
||||
}
|
||||
const accelerations=i.acceleration.rows.map(r=>{
|
||||
const a=b.depreciation?.assets.find(x=>x.id===r.assetId),base=m.depreciation?.assets.find(x=>x.id===r.assetId),issues:string[]=[];let status:Status='indeterminate';
|
||||
if(accDecision.status!=='calculated')issues.push(accDecision.reason);
|
||||
if(!r.reference.trim()||!r.eligible||!r.kind)issues.push('Condição/afectação do activo ao projecto por documentar.');
|
||||
if(i.acceleration.rows.filter(x=>x.assetId===r.assetId).length!==1)issues.push('Activo repetido no benefício.');
|
||||
if(!a||base?.status!=='calculated')issues.push('ActivoL6 inexistente ou cálculo de origem indeterminado.');
|
||||
if(!issues.length&&r.eligible==='no')status='not_applicable';
|
||||
else if(!issues.length&&a){
|
||||
const building=r.kind==='new_project_building'&&base?.catalog?.kind==='building',equipment=['industrial_equipment','agroindustrial_equipment'].includes(r.kind)&&['machine','laundry_machine'].includes(a.category);
|
||||
if(!building&&!equipment)issues.push('Categoria/afectação fora do recorte:imóvel novo ou máquina industrial/agro-industrial correspondida;reabilitados e outras categorias/métodos exigem regra própria.');
|
||||
if(base?.catalog&&cmp(decimalFraction(a.rate),decimalFraction(base.catalog.rate))!==0n)issues.push('RecorteCBF16 usa a taxa normal máxima da tabela;opção por quota inferior exige correspondência própria,sem a acelerar por aproximação.');
|
||||
if(a.method!=='constant'||a.timing!=='annual'||a.start!=='2026-01-01'||a.exitState!=='absent'||a.previousAccounting!=='0'||a.previousFiscal!=='0'||a.priorAvailable!=='0'||m.fiscalPeriod?.from!=='2026-01-01'||m.fiscalPeriod?.to!=='2026-12-31')issues.push('CBF16 inicial:primeiro exercício anual civil2026,método constante,sem quotas anteriores ou saída;duodécimos e recuperação anterior continuam separados.');
|
||||
if(!issues.length)status='calculated';
|
||||
}
|
||||
return{...structuredClone(r),assetKey:a?.assetKey??'',description:a?.description??'',status,reason:issues.join(' ')||(status==='calculated'?'Activo existente elegível;taxa normal ×1,5,com limite contabilístico e saldo fiscal.':'Condição negativa documentada;quota normal mantida.')};
|
||||
});
|
||||
let acceleratedDepreciation:NormalDepreciationModel|null=null,additionalDeduction:FiscalFraction|null=accDecision.status==='indeterminate'?null:z();
|
||||
if(accDecision.status==='calculated'){
|
||||
for(const r of accelerations)if(r.status==='indeterminate')fail(accDecision,(r.description||r.id)+': '+r.reason);
|
||||
if(accDecision.status==='calculated'&&b.depreciation&&m.depreciation?.adjustment){
|
||||
acceleratedDepreciation=calculateNormalDepreciation(b.depreciation,source,{from:'2026-01-01',to:'2026-12-31'},[...b.rows,...(b.schedules?.rows??[]),...(b.costs?.rows??[])],false,new Set(accelerations.filter(r=>r.status==='calculated').map(r=>r.assetId)));
|
||||
if(acceleratedDepreciation.adjustment===null)fail(accDecision,acceleratedDepreciation.pending.join(' '));
|
||||
else additionalDeduction=subtractFractions(m.depreciation.adjustment,acceleratedDepreciation.adjustment);
|
||||
}else if(accDecision.status==='calculated')fail(accDecision,'Reconciliação da amortização normal em falta.');
|
||||
}
|
||||
if(accDecision.status==='indeterminate')additionalDeduction=null;
|
||||
const taxableProfit=m.taxableProfit&&additionalDeduction?subtractFractions(m.taxableProfit,additionalDeduction):null;
|
||||
const base=b.base?calculateNormalBase(b.base,taxableProfit,b.year,b.schedules?.currentLossReference,!!m.periodsFx?.short):null;
|
||||
const assessmentInput=coopDecision.status==='calculated'?{version:1 as const,treatment:'general_61_1' as const,reference:i.cooperative.qualification.reference}:b.assessment;
|
||||
const assessment=assessmentInput?calculateNormalAssessment(assessmentInput,base?.taxableBase??null,{year:b.year,scope:b.scope,currency:m.currency,extended:!!b.schedules||!!b.periodsFx,short:!!m.periodsFx?.short,period:specialPeriod(b,m)}):null;
|
||||
const normalColecta=assessment?.colecta??null,colecta=coopDecision.status==='indeterminate'?null:normalColecta?(coopDecision.status==='calculated'?mul(normalColecta,1n,2n):normalColecta):null;
|
||||
const combinedColecta=colecta&&autonomousTax?addFractions([colecta,autonomousTax]):null;
|
||||
return{input:structuredClone(i),context:structuredClone(specialContext(draft)),subjectNuit:b.base?.subjectNuit??'',period:specialPeriod(b,m),expenses:{...expenseDecision,rows:expenses,knownAutonomous,autonomousTax,source:specialSources.expenses},cooperative:{...coopDecision,rate:coopDecision.status==='calculated'?fraction(16n):null,source:specialSources.cooperative},acceleration:{...accDecision,rows:accelerations,additionalDeduction,normal:m.depreciation??null,accelerated:acceleratedDepreciation,source:specialSources.acceleration},reference:{taxableProfit:m.taxableProfit,taxableBase:m.taxableBase,colecta:m.colecta??null},taxableProfit,taxableBase:base?.taxableBase??null,colecta,combinedColecta,pending:[...expenseDecision.pending,...coopDecision.pending,...accDecision.pending,...(base?.pending??[]),...(assessment?.pending??[])],limitations:['L7 parcial:apenas61(4),cooperativa integralmente elegível12 eCBF16 no recorte documentado.','Localização/sector só contextualizam;não activam benefícios.','Parcelas mistas,cumulação,mais-valias e demais famílias têm correspondência própria.','M20/M22 permanecem preparaçãoL6 de referência;efeitosL7 sem campo oficial presumido.','Colecta combinada não é saldo final a pagar/recuperar;retenções,pagamentos e créditos anuais emL8.'],finalBalance:{scope:'L8',payable:null,recoverable:null}};
|
||||
}
|
||||
export type SpecialModel=ReturnType<typeof calculateSpecial>;
|
||||
const money=(v:FiscalFraction|null)=>{if(!v)return'Indeterminado';const p=fractionPresentation(v);return(p.approximate?'≈':'')+p.decimal+' MZN (exacto '+v.numerator+'/'+v.denominator+')';};
|
||||
const status=(s:Status)=>({calculated:'Calculado no recorte',absent:'Ausência declarada',not_applicable:'Não aplicável',indeterminate:'Informação em falta'})[s];
|
||||
const contextDescription=(c:Record<string,unknown>)=>[['Sector','sector_id'],['Província','province_id'],['Distrito','district_id'],['Posto administrativo','admin_post_id'],['Localidade','locality_id']].map(([label,key])=>label+': '+String(c[key+'_label']||c[key]||'Por identificar')).join(';');
|
||||
export function specialReportRows(m:SpecialModel):Array<[string,string,string,string]>{return[
|
||||
['IRPC — L7','Qualificação comum',`NUIT:${m.subjectNuit};período:${m.period.from}–${m.period.to};${contextDescription(m.context)};${m.limitations.join(' ')}`,'Origem herdada conservada;fonte/condições/período por tratamento;sem concessão pela localização.'],
|
||||
['IRPC — L7','Despesas — imposto autónomo',`${status(m.expenses.status)};parcela conhecida:${money(m.expenses.knownAutonomous)};imposto autónomo reconciliado:${money(m.expenses.autonomousTax)};${m.expenses.reason}`,`${m.input.expenses.qualification.reference};${m.input.expenses.qualification.periodReference};${m.expenses.source}`],
|
||||
...m.expenses.rows.map(r=>['IRPC — L7',r.document+'/'+r.line,`${status(r.status)};natureza:${r.nature||'Por identificar'};despesa:${money(r.amount)};ajustamento36g já emL6:${money(r.l6Adjustment)};novo ajustamento ao lucro:${money(r.additionalProfitAdjustment)};taxa:${r.rate?'35%':'Não aplicada'};imposto autónomo:${money(r.tax)};${r.reason}`,r.reference]as[string,string,string,string]),
|
||||
['IRPC — L7','Cooperativa — redução da taxa',`${status(m.cooperative.status)};tipo:${m.input.cooperative.kind||'Por identificar'};taxa:${m.cooperative.rate?'16%':'Não aplicada'};${m.cooperative.reason}`,`${m.input.cooperative.qualification.reference};${m.input.cooperative.qualification.periodReference};${m.cooperative.source}`],
|
||||
['IRPC — L7','Amortizações aceleradas',`${status(m.acceleration.status)};dedução adicional conciliada:${money(m.acceleration.additionalDeduction)};${m.acceleration.reason}`,`${m.input.acceleration.qualification.reference};${m.input.acceleration.qualification.periodReference};${m.input.acceleration.recognitionReference};${m.acceleration.source}`],
|
||||
...m.acceleration.rows.map(r=>{const a=m.acceleration.accelerated?.assets.find(a=>a.id===r.assetId),n=m.acceleration.normal?.assets.find(a=>a.id===r.assetId);return['IRPC — L7',r.description||r.assetId,`${status(r.status)};quota normal:${money(n?.quota??null)};quota acelerada:${money(a?.quota??null)};dedução normal:${money(n?.deduction??null)};dedução acelerada:${money(a?.deduction??null)};${r.reason}`,r.reference]as[string,string,string,string];}),
|
||||
['IRPC — L7','Efeitos nos totais',`ReferênciaL6:lucro:${money(m.reference.taxableProfit)};base:${money(m.reference.taxableBase)};colecta:${money(m.reference.colecta)}. Após tratamentosL7:lucro:${money(m.taxableProfit)};base:${money(m.taxableBase)};colecta sobre a base:${money(m.colecta)};imposto autónomo:${money(m.expenses.autonomousTax)};colecta combinada:${money(m.combinedColecta)}. Saldo final a pagar/recuperar:Indeterminado (L8).`,m.pending.join(' | ')||'Regras/parcelas reconciliadas neste recorte;simulação,não liquidação final.'],
|
||||
];}
|
||||
@@ -178,6 +178,7 @@ const rowSection: Record<string, DossierReportSectionId> = {
|
||||
ISPC: 'finance',
|
||||
'IRPC — retenções': 'finance',
|
||||
'IRPC normal — L6': 'finance',
|
||||
'IRPC — L7': 'finance',
|
||||
Equipa: 'team',
|
||||
'Necessidade de negócio': 'resources',
|
||||
Financiamento: 'resources',
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Tests\TestCase;
|
||||
|
||||
final class IrpcSpecialDraftTest extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
public function test_special_treatments_recover_with_original_plan_history_and_indeterminate_cases(): void
|
||||
{
|
||||
$target=DB::selectOne('select current_database() as name,inet_server_port() as port');
|
||||
$this->assertSame('simulator_fiscal_delta_20261021_test',$target->name);
|
||||
$this->assertSame(55441,(int)$target->port);
|
||||
config(['investor-path.enabled'=>true,'suitecrm.enabled'=>false]);
|
||||
$this->actingAs(User::factory()->create(['email_verified_at'=>now()]));
|
||||
$id=null;$etag=null;
|
||||
foreach(['expense','missing','negative','absent','cooperative','acceleration'] as $case){
|
||||
$d=json_decode(file_get_contents(base_path('outputs/irpc-l7-common/'.$case.'.json')),true,flags:JSON_THROW_ON_ERROR);
|
||||
$personal=['person_type'=>$d['person_type']];unset($d['person_type']);
|
||||
if($id===null)$id=$this->postJson('/api/v1/simulation-drafts',['personal_snapshot'=>$personal,'economic_snapshot'=>$d],['Idempotency-Key'=>(string)Str::uuid()])->assertCreated()->json('data.id');
|
||||
else $this->putJson('/api/v1/simulation-drafts/'.$id,['personal_snapshot'=>$personal,'economic_snapshot'=>$d],['If-Match'=>$etag])->assertOk();
|
||||
$r=$this->getJson('/api/v1/simulation-drafts/'.$id)->assertOk();$etag=$r->headers->get('ETag');$back=$r->json('data.economic_snapshot');
|
||||
$this->assertSame($d['business_plan_snapshot'],$back['business_plan_snapshot']);
|
||||
$this->assertSame($d['modelo_a_snapshot'],$back['modelo_a_snapshot']);
|
||||
$s=json_decode($back['modelo_a_snapshot'],true,flags:JSON_THROW_ON_ERROR);$b=$s['irpcNormal'][$d['context_opportunity']];$m=$b['result']['model'];$l7=$m['special'];
|
||||
$this->assertSame('IRPC-normal-adjustments/10',$m['version']);
|
||||
$this->assertSame($b['special'],$l7['input']);
|
||||
$this->assertContains('IRPC-normal-adjustments/9',array_column(array_column($b['history'],'model'),'version'));
|
||||
$this->assertArrayHasKey('irpcWithholdings',$s);$this->assertArrayHasKey('books',$s);
|
||||
$this->assertNull($m['tax']);$this->assertNull($l7['finalBalance']['payable']);$this->assertNull($l7['finalBalance']['recoverable']);
|
||||
$this->assertSame('123456789',$l7['subjectNuit']);
|
||||
$this->assertStringContainsString('61(4)',$l7['expenses']['source']);
|
||||
if($case==='expense'){
|
||||
$this->assertSame('35',$l7['expenses']['autonomousTax']['numerator']);
|
||||
$this->assertSame('100',$l7['expenses']['rows'][0]['l6Adjustment']['numerator']);
|
||||
$this->assertSame('0',$l7['expenses']['rows'][0]['additionalProfitAdjustment']['numerator']);
|
||||
$this->assertSame($m['taxableProfit'],$l7['taxableProfit']);
|
||||
$this->assertSame(['numerator'=>'5343','denominator'=>'5'],$l7['combinedColecta']);
|
||||
}elseif($case==='missing'){
|
||||
$this->assertSame('indeterminate',$l7['expenses']['status']);$this->assertNull($l7['expenses']['autonomousTax']);$this->assertNull($l7['combinedColecta']);
|
||||
$this->assertSame('3230',$m['taxableProfit']['numerator']);
|
||||
}elseif($case==='negative'){
|
||||
$this->assertSame('not_applicable',$l7['expenses']['rows'][0]['status']);$this->assertSame('0',$l7['expenses']['autonomousTax']['numerator']);
|
||||
}elseif($case==='absent'){
|
||||
$this->assertSame('absent',$l7['expenses']['status']);$this->assertSame('0',$l7['expenses']['autonomousTax']['numerator']);
|
||||
}elseif($case==='cooperative'){
|
||||
$this->assertSame('16',$l7['cooperative']['rate']['numerator']);$this->assertSame(['numerator'=>'2504','denominator'=>'5'],$l7['colecta']);
|
||||
$this->assertSame(['numerator'=>'5008','denominator'=>'5'],$m['colecta']);
|
||||
}else{
|
||||
$this->assertSame('20',$l7['acceleration']['additionalDeduction']['numerator']);
|
||||
$this->assertSame('150',$l7['acceleration']['accelerated']['assets'][0]['quota']['numerator']);
|
||||
$this->assertSame('120',$l7['acceleration']['accelerated']['assets'][0]['deduction']['numerator']);
|
||||
$this->assertSame('6240',$l7['taxableProfit']['numerator']);$this->assertSame('6260',$m['taxableProfit']['numerator']);
|
||||
$this->assertSame($b['depreciation'],$l7['acceleration']['accelerated']['input']);
|
||||
}
|
||||
file_put_contents(base_path('outputs/irpc-l7-common/recovered-'.$case.'.json'),json_encode($back,JSON_THROW_ON_ERROR|JSON_UNESCAPED_UNICODE));
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,32 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import fs from 'node:fs';
|
||||
import {normalBook,normalCurrent,calculateNormal,recordNormal,saveNormalBook,normalHtml} from '../../resources/js/lib/irpc-normal.ts';
|
||||
import {newSpecialInput,newQualification,newSpecialExpense,newAcceleratedAsset} from '../../resources/js/lib/irpc-special.ts';
|
||||
import {createProjectDossierReport} from '../../resources/js/lib/project-dossier-report.ts';
|
||||
const seed=()=>JSON.parse(fs.readFileSync(new URL('./fixtures/irpc-l6-values-preserved.json',import.meta.url),'utf8'));
|
||||
const value=v=>v?Number(v.numerator)/Number(v.denominator):null;
|
||||
const qualification=(state='absent',from='2026-07-01',to='2026-12-31')=>({...newQualification(),state,eligible:state==='known'?'yes':'',from,to,reference:'QA declaração/prova das condições legais no sujeito e parcela,sem inferência territorial',periodReference:'QA norma/exercício2026 e período documentado'});
|
||||
function setup(){const d=seed(),b=normalBook(d);b.special=newSpecialInput();for(const part of[b.special.expenses,b.special.cooperative,b.special.acceleration])part.qualification=qualification();return{d,b};}
|
||||
function expenses(){const{d,b}=setup();b.schedules.rows.push({id:'expense36g',rule:'undocumented',amount:'100',sourceCode:'operating_expenses',document:'QA-despesa',line:'1',reference:'QA despesa100 efectivamente incluída e não documentada36g',fiscalYear:'',conditions:'yes'});b.profit.topics.expenseCorrections={state:'known',amount:'100',reference:'QA acréscimo36g já conferido,sem outra correcção'};b.special.expenses.qualification=qualification('known');b.special.expenses.rows=[{...newSpecialExpense('autonomous1'),scheduleId:'expense36g',nature:'undocumented',eligible:'yes',reference:'QA qualificação legal61(4),não inferida de anexo em falta'}];return{d,b};}
|
||||
function cooperative(){const{d,b}=setup();b.special.cooperative={qualification:qualification('known'),kind:'agrarian',allIncomeEligible:'yes',withheldIncome:'absent'};return{d,b};}
|
||||
function acceleration(){const{d,b}=setup();delete b.periodsFx;delete b.forms;b.schedules.interest.amount='240';Object.assign(b.depreciation.assets[0],{category:'machine',description:'Máquina industrial existente QA',cost:'1000',rate:'10',accounting:'120',start:'2026-01-01',timing:'annual'});for(const part of[b.special.expenses,b.special.cooperative,b.special.acceleration])part.qualification=qualification('absent','2026-01-01','2026-12-31');b.special.acceleration={qualification:qualification('known','2026-01-01','2026-12-31'),cbfRequirements:'yes',recognition:'documented',recognitionReference:'QA instrumento do projecto/reconhecimento10,pressupostos3/9 e afectação industrial documentados',noOtherBenefits:'yes',rows:[{...newAcceleratedAsset('accelerated1'),assetId:b.depreciation.assets[0].id,kind:'industrial_equipment',eligible:'yes',reference:'QA factura/afectação da máquina ao projecto industrialCBF16'}]};return{d,b};}
|
||||
test('no optionalL7 keeps exact accepted9 result and key; installed history is not recalculated on read',()=>{const d=seed(),b=normalBook(d),old=structuredClone(b.result);assert.equal(normalCurrent(d,b),true);assert.deepEqual(calculateNormal(d,b),old.model);assert.deepEqual(normalBook(d).result,old);});
|
||||
test('61(4) reuses100 addback36g and computes35 autonomously without another profit adjustment',()=>{const{d,b}=expenses(),m=calculateNormal(d,b),s=m.special;assert.equal(m.version,'IRPC-normal-adjustments/10');assert.equal(value(m.taxableProfit),3230);assert.equal(value(m.colecta),1033.6);assert.equal(value(s.taxableProfit),3230);assert.equal(value(s.expenses.rows[0].l6Adjustment),100);assert.equal(value(s.expenses.rows[0].additionalProfitAdjustment),0);assert.equal(value(s.expenses.autonomousTax),35);assert.equal(value(s.combinedColecta),1068.6);assert.equal(s.finalBalance.payable,null);});
|
||||
test('missing, absent and notapplicable differ; attachment presence alone never classifies an expense',()=>{const{d,b}=setup();b.special.expenses.qualification=qualification('');let s=calculateNormal(d,b).special;assert.equal(s.expenses.status,'indeterminate');assert.equal(s.expenses.autonomousTax,null);b.special.expenses.qualification=qualification('absent');s=calculateNormal(d,b).special;assert.equal(s.expenses.status,'absent');assert.equal(value(s.expenses.autonomousTax),0);b.special.expenses.qualification=qualification('not_applicable');assert.equal(calculateNormal(d,b).special.expenses.status,'not_applicable');const c=expenses();c.b.special.expenses.rows[0].nature='';assert.equal(calculateNormal(c.d,c.b).special.expenses.autonomousTax,null);});
|
||||
test('false condition keeps existing addback and no autonomous tax; contradictory absence cannot erase expense',()=>{const{d,b}=expenses();b.special.expenses.rows[0].eligible='no';let m=calculateNormal(d,b);assert.equal(m.special.expenses.rows[0].status,'not_applicable');assert.equal(value(m.special.expenses.autonomousTax),0);assert.equal(value(m.taxableProfit),3230);b.special.expenses.rows=[];b.special.expenses.qualification=qualification('absent');m=calculateNormal(d,b);assert.equal(m.special.expenses.status,'indeterminate');assert.equal(value(m.taxableProfit),3230);});
|
||||
test('duplicate, unlinked or uncalculated36g cannot doublecharge or manufacture tax',()=>{for(const mode of['duplicate','unlinked','uncalculated','missingcoverage']){const{d,b}=expenses();if(mode==='duplicate')b.special.expenses.rows.push({...b.special.expenses.rows[0],id:'duplicate'});if(mode==='unlinked')b.special.expenses.rows[0].scheduleId='not-found';if(mode==='uncalculated')b.schedules.rows[0].conditions='';if(mode==='missingcoverage')b.special.expenses.rows=[];assert.equal(calculateNormal(d,b).special.expenses.autonomousTax,null,mode);}});
|
||||
test('common qualification rejects wrong period/year or missing identity without blocking independent L6 totals',()=>{for(const mutate of[b=>b.special.expenses.qualification.to='2025-12-31',b=>b.special.expenses.qualification.periodReference='',b=>b.base.subjectNuit='']){const{d,b}=expenses();mutate(b);const m=calculateNormal(d,b);assert.equal(m.special.expenses.autonomousTax,null);if(b.base.subjectNuit)assert.equal(value(m.colecta),1033.6);}});
|
||||
test('unknown benefit does not suppress separately calculable autonomous expense or normal reference',()=>{const{d,b}=expenses();b.special.acceleration.qualification=qualification('');const m=calculateNormal(d,b);assert.equal(value(m.special.expenses.autonomousTax),35);assert.equal(value(m.special.reference.colecta),1033.6);assert.equal(m.special.combinedColecta,null);});
|
||||
test('eligible cooperative uses16percent without changing reference32percent or autonomous expense rate',()=>{const{d,b}=cooperative(),m=calculateNormal(d,b);assert.equal(value(m.colecta),1001.6);assert.equal(m.special.cooperative.status,'calculated');assert.equal(value(m.special.cooperative.rate),16);assert.equal(value(m.special.colecta),500.8);assert.equal(value(m.special.taxableBase),3130);assert.equal(value(m.special.combinedColecta),500.8);const x=expenses();x.b.special.cooperative=structuredClone(b.special.cooperative);assert.equal(value(calculateNormal(x.d,x.b).special.combinedColecta),551.8);});
|
||||
test('mixed, withheld, unclassified or false cooperative conditions never grant blanket reduction',()=>{for(const mutate of[c=>c.allIncomeEligible='no',c=>c.withheldIncome='known',c=>c.kind='other']){const{d,b}=cooperative();mutate(b.special.cooperative);const m=calculateNormal(d,b);assert.equal(m.special.cooperative.status,'indeterminate');assert.equal(m.special.colecta,null);assert.equal(value(m.colecta),1001.6);}const{d,b}=cooperative();b.special.cooperative.qualification.eligible='no';assert.equal(value(calculateNormal(d,b).special.colecta),1001.6);});
|
||||
test('cooperative treatment does not require mislabelling special rate as L6 general; contradictory absence remains pending',()=>{const{d,b}=cooperative();b.assessment.treatment='other';let m=calculateNormal(d,b);assert.equal(m.colecta,null);assert.equal(value(m.special.colecta),500.8);b.special.cooperative.qualification=qualification('absent');m=calculateNormal(d,b);assert.equal(m.special.cooperative.status,'indeterminate');assert.equal(m.special.colecta,null);});
|
||||
test('common period follows declared shortperiod even without schedules; calendar dates cannot replace it',()=>{const{d,b}=cooperative();delete b.schedules;b.special.expenses.qualification=qualification('absent','2026-01-01','2026-12-31');const m=calculateNormal(d,b);assert.equal(m.special.period.from,'2026-07-01');assert.equal(m.special.expenses.status,'indeterminate');});
|
||||
test('CBF16 reuses asset and rate10to15 but respects120 accounted cap; additional deduction20 not50',()=>{const{d,b}=acceleration(),input=JSON.stringify(b.depreciation),m=calculateNormal(d,b),s=m.special;assert.equal(s.acceleration.status,'calculated',s.acceleration.reason);assert.equal(value(m.depreciation.assets[0].quota),100);assert.equal(value(s.acceleration.accelerated.assets[0].quota),150);assert.equal(value(s.acceleration.accelerated.assets[0].deduction),120);assert.equal(value(s.acceleration.additionalDeduction),20);assert.equal(value(m.taxableProfit),6260);assert.equal(value(s.taxableProfit),6240);assert.equal(value(s.taxableBase),6240);assert.equal(value(s.colecta),1996.8);assert.equal(JSON.stringify(b.depreciation),input);});
|
||||
test('new project building reuses land separation and legal table rate before bounded acceleration',()=>{const{d,b}=acceleration();Object.assign(b.depreciation.assets[0],{category:'commercial_building',cost:'5000',land:'0',rate:'2'});b.special.acceleration.rows[0].kind='new_project_building';const m=calculateNormal(d,b);assert.equal(m.special.acceleration.status,'calculated');assert.equal(value(m.special.acceleration.accelerated.assets[0].quota),150);assert.equal(value(m.special.acceleration.additionalDeduction),20);});
|
||||
test('lower optional normal quota remains valid L6 but is not treated as legally fixed rate in CBF16',()=>{const{d,b}=acceleration();b.depreciation.assets[0].rate='5';const m=calculateNormal(d,b);assert.equal(m.depreciation.assets[0].status,'calculated');assert.equal(m.special.acceleration.additionalDeduction,null);assert.match(m.special.acceleration.reason,/quota inferior/);});
|
||||
test('location alone, wrong activity, prior quotas, unsupported periods and benefit combinations cannot accelerate',()=>{for(const mutate of[b=>b.special.acceleration.cbfRequirements='',b=>b.special.acceleration.recognitionReference='',b=>b.special.acceleration.rows[0].kind='other',b=>b.depreciation.assets[0].timing='months',b=>b.depreciation.assets[0].previousAccounting='1',b=>b.special.acceleration.noOtherBenefits='no',b=>{b.special.cooperative={qualification:qualification('known','2026-01-01','2026-12-31'),kind:'agrarian',allIncomeEligible:'yes',withheldIncome:'absent'};}]){const{d,b}=acceleration();d.province_id='ZEE-candidate';mutate(b);const m=calculateNormal(d,b);assert.equal(m.special.acceleration.additionalDeduction,null);assert.notEqual(m.taxableProfit,null);assert.equal(m.special.acceleration.status,'indeterminate');}});
|
||||
test('save/recover/report preserves9history and L5/books; repeated calculation never accumulates tax or asset deduction',()=>{const{d,b}=expenses(),old=structuredClone(b.result),plan=d.business_plan_snapshot;d.modelo_a_snapshot=saveNormalBook(d,recordNormal(d,b,'2026-10-26T14:00:00+02:00'));let back=normalBook(JSON.parse(JSON.stringify(d)));assert.equal(normalCurrent(d,back),true);assert.deepEqual(back.history.at(-1),old);assert.equal(d.business_plan_snapshot,plan);assert.ok(JSON.parse(d.modelo_a_snapshot).irpcWithholdings);const html=normalHtml(d);assert.match(html,/imposto autónomo:35/);assert.match(html,/novo ajustamento ao lucro:0/);assert.match(html,/Saldo final a pagar\/recuperar:Indeterminado/);assert.match(JSON.stringify(createProjectDossierReport(d,{selectedSections:new Set(['finance'])})),/Despesas — imposto autónomo/);d.modelo_a_snapshot=saveNormalBook(d,recordNormal(d,back));back=normalBook(d);assert.equal(value(back.result.model.special.expenses.autonomousTax),35);assert.equal(value(back.result.model.taxableProfit),3230);d.province_id='changed';assert.equal(normalCurrent(d,normalBook(d)),false);assert.throws(()=>normalHtml(d),/Calcule/);});
|
||||
test('new evidence changes key; malformedqualification or duplicate row ID cannot overwrite book',()=>{const{d,b}=expenses();d.modelo_a_snapshot=saveNormalBook(d,recordNormal(d,b));const back=normalBook(d);back.special.expenses.rows[0].reference+=' alterado';assert.equal(normalCurrent(d,back),false);back.special.expenses.rows.push(structuredClone(back.special.expenses.rows[0]));assert.throws(()=>saveNormalBook(d,back),/identificador repetido/);});
|
||||
test('report presents context labels and retains provenance internally without dumping raw context snapshots',()=>{const{d,b}=setup();d.province_id_label='Província QA';d.context_opportunity_snapshot='{"internal":"QA implementation blob"}';d.modelo_a_snapshot=saveNormalBook(d,recordNormal(d,b));assert.match(normalHtml(d),/Província: Província QA/);assert.doesNotMatch(normalHtml(d),/QA implementation blob/);assert.equal(normalBook(d).result.model.special.context.context_opportunity_snapshot,d.context_opportunity_snapshot);});
|
||||
test('write only new QA cases for transactional API and recovered reports',()=>{const missing=expenses(),negative=expenses();missing.b.special.expenses.rows[0].nature='';negative.b.special.expenses.rows[0].eligible='no';const cases={expense:expenses(),missing,negative,absent:setup(),cooperative:cooperative(),acceleration:acceleration()};fs.mkdirSync('outputs/irpc-l7-common',{recursive:true});for(const[name,{d,b}]of Object.entries(cases)){d.modelo_a_snapshot=saveNormalBook(d,recordNormal(d,b,'2026-10-26T14:00:00+02:00'));fs.writeFileSync('outputs/irpc-l7-common/'+name+'.json',JSON.stringify(d));fs.writeFileSync('outputs/irpc-l7-common/'+name+'.html',normalHtml(d));}});
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$root=dirname(__DIR__);
|
||||
$operation=$argv[1]??'';
|
||||
if(!in_array($operation,['routes','test'],true)||basename($root)!=='portal-investidor-irpc-l7-common-qa-20261026')throw new RuntimeException('Explicit L7 QA workspace and routes/test operation required.');
|
||||
foreach(['storage/framework/views','storage/framework/cache','storage/framework/sessions','bootstrap/cache','storage/logs','outputs/irpc-l7-common']as$dir)if(!is_dir($root.'/'.$dir))mkdir($root.'/'.$dir,0700,true);
|
||||
foreach(['APP_BASE_PATH'=>$root,'APP_ENV'=>'testing','APP_KEY'=>'base64:'.base64_encode(str_repeat('Q',32)),'DB_CONNECTION'=>'pgsql','DB_HOST'=>'127.0.0.1','DB_PORT'=>'55441','DB_DATABASE'=>'simulator_fiscal_delta_20261021_test','DB_USERNAME'=>'postgres','DB_PASSWORD'=>'','DB_URL'=>'','CACHE_STORE'=>'array','SESSION_DRIVER'=>'array','QUEUE_CONNECTION'=>'sync','MAIL_MAILER'=>'array'] as $k=>$v){putenv($k.'='.$v);$_ENV[$k]=$_SERVER[$k]=$v;}
|
||||
$loader=require $root.'/vendor/autoload.php';
|
||||
spl_autoload_register(function($class)use($root){foreach(['App\\'=>'app/','Tests\\'=>'tests/','Database\\Factories\\'=>'database/factories/']as$prefix=>$dir){if(str_starts_with($class,$prefix)){$file=$root.'/'.$dir.str_replace('\\','/',substr($class,strlen($prefix))).'.php';if(is_file($file)){require $file;return;}}}},true,true);
|
||||
$app=require $root.'/bootstrap/app.php';
|
||||
(new Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables)->bootstrap($app);
|
||||
(new Illuminate\Foundation\Bootstrap\LoadConfiguration)->bootstrap($app);
|
||||
$c=config('database.connections.pgsql');
|
||||
if($app->configurationIsCached()||$c['host']!=='127.0.0.1'||(int)$c['port']!==55441||$c['database']!=='simulator_fiscal_delta_20261021_test'||!empty($c['url']))throw new RuntimeException('QA guard');
|
||||
$pdo=new PDO('pgsql:host=127.0.0.1;port=55441;dbname='.$c['database'],$c['username'],$c['password']);
|
||||
if($pdo->query('select current_database()')->fetchColumn()!==$c['database'])throw new RuntimeException('QA identity');
|
||||
if($operation==='routes'){
|
||||
$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
|
||||
$status=Illuminate\Support\Facades\Artisan::call('wayfinder:generate',['--with-form'=>true]);
|
||||
echo Illuminate\Support\Facades\Artisan::output();exit($status);
|
||||
}
|
||||
$argv=['phpunit','-c','phpunit.investmoz.xml','tests/Feature/IrpcSpecialDraftTest.php'];$argc=count($argv);$_SERVER['argv']=$argv;$_SERVER['argc']=$argc;require $root.'/vendor/phpunit/phpunit/phpunit';
|
||||
Reference in New Issue
Block a user