import { inputText } from './input-text.ts'; import { monthlyProjectedPurchaseOrders, restoreBusinessPlanSnapshot, } from './business-financial-plan.ts'; /** Correspondence to the Tempo exemplar, not an electronic AT declaration or a new tax ruleset. */ export const modeloAReference = { file: 'Novo Modelo A.docx', sha256: '62c198e90d8c6792f7d5ccefc6386df2e4b6089573067d3a6e1eae7fc2b9572b', edition: 'Edição/vigência do formulário não estabelecida; original preservado na biblioteca QA.', status: 'Simulação parcial: campos 01/02. Não é declaração submetida ou aceite pela Autoridade Tributária.', }; export type ModeloAField = { field: string; purpose: string; origin: string; calculation: string; basis: string; status: string; }; const pending = 'Em falta; não assumir zero'; export const modeloAFields: ModeloAField[] = [ { field: '01', purpose: 'Base das operações à taxa geral', origin: 'Vendas mensais já projectadas, declaradas sem IVA e no âmbito geral', calculation: 'Base líquida do mês', basis: 'CIVA arts.15 e 17; Lei22/2022; regra publicada existente', status: 'Implementado no âmbito declarado', }, { field: '02', purpose: 'IVA à taxa geral', origin: 'Resultado mensal congelado no servidor', calculation: 'Campo01 × taxa da versão publicada /100', basis: 'CIVA art.17(1); mesma regra/versionamento do consumidor', status: 'Implementado; componente do apuramento', }, { field: '03', purpose: 'Base de operações específicas à taxa reduzida', origin: 'Operações separadas e enquadradas; ainda não recolhidas', calculation: 'Base das operações elegíveis', basis: 'Exemplar e CIVA art.17-A, aditado pela Lei22/2022; enquadramento a cadastrar', status: pending, }, { field: '04', purpose: 'IVA à taxa reduzida', origin: 'Campo03 e futura versão fundamentada', calculation: 'Campo03 × taxa reduzida aplicável; não activa pelo exemplar', basis: 'CIVA art.17-A; âmbito/versão temporal a integrar', status: pending, }, { field: '05', purpose: 'Vendas isentas com direito à dedução', origin: 'Operações com tratamento próprio identificado no catálogo', calculation: 'Soma exclusiva das bases classificadas05; sem repetir06', basis: 'Correspondência do exemplar confirmada pelaTempo25/10/2026;fundamento próprio de cada tratamento preservado', status: 'Correspondência reconciliada no catálogo existente;condições fiscais por operação mantidas', }, { field: '06', purpose: 'Operações do n.º1,alínea b),do artigo18.ºdoCIVA', origin: 'Linhas com correspondência própria identificada;nenhum tratamento actual atribuído06', calculation: 'Soma exclusiva de06;sem repetir05 e sem inferir de localização estrangeira', basis: 'Rótulo e posição no exemplar confirmados pelaTempo25/10/2026;sem corrigir a remissão', status: 'Identificado e separado;desconhecido não vira06 nem zero;período completo sem linhas06 permitezero', }, { field: '07', purpose: 'Operações que não conferem direito à dedução', origin: 'Vendas classificadas e uso das aquisições', calculation: 'Soma das bases elegíveis', basis: 'Exemplar; incidência/isenções e exclusões de dedução a fundamentar', status: pending, }, { field: '08', purpose: 'IVA dedutível — imobilizado', origin: 'Aquisições/facturas de activos, não o valor global do investimento', calculation: 'Apenas imposto elegível documentado', basis: 'CIVA arts.18–21; art.18(2), Lei10/2025: documentos legais e fornecedor inscrito', status: pending, }, { field: '09', purpose: 'IVA dedutível — existências', origin: 'Compras projectadas reutilizáveis; falta IVA, documento e elegibilidade', calculation: 'IVA elegível das existências, não compras × taxa geral', basis: 'CIVA arts.18–21; condições/exclusões, afectação e período', status: pending, }, { field: '10', purpose: 'IVA dedutível — outros bens/serviços', origin: 'Aquisições discriminadas; despesas agregadas não provam IVA', calculation: 'IVA elegível; excluir operações sem direito', basis: 'CIVA arts.18–21; art.19(2), Lei10/2025, inclui exclusão das operações art.17-A', status: pending, }, { field: '11', purpose: 'IVA dedutível — importações', origin: 'Documento aduaneiro legal e afectação; ainda não recolhidos', calculation: 'Imposto aduaneiro elegível, não taxa sobre orçamento', basis: 'CIVA art.18(2), Lei10/2025; demais condições/exclusões a cadastrar', status: pending, }, { field: '12', purpose: 'Regularizações a favor do sujeito passivo', origin: 'Ajustamentos individualizados, documento e motivo', calculation: 'Soma de regularizações elegíveis', basis: 'Exemplar tem remissão interna 11/12 divergente das caixas12/13; fundamento por motivo por conferir', status: pending, }, { field: '13', purpose: 'Regularizações a favor do Estado', origin: 'Ajustamentos individualizados, documento e motivo', calculation: 'Soma separada das regularizações elegíveis', basis: 'Mesma divergência; não corrigir o original nem inventar incidência', status: pending, }, { field: '14', purpose: 'Soma das bases do quadro de apuramento', origin: 'Campos01,03,05,06,07 completos', calculation: '01+03+05+06+07', basis: 'Fórmula impressa no exemplar; não é apenas vendas tributáveis', status: 'Estrutura mapeada; total indeterminado', }, { field: '15', purpose: 'Total a favor do sujeito passivo', origin: 'Campos08–12 completos', calculation: '08+09+10+11+12', basis: 'Fórmula do exemplar; depende de deduções/regularizações fundamentadas', status: 'Estrutura mapeada; total indeterminado', }, { field: '16', purpose: 'Total a favor do Estado', origin: 'Campos02,04,13 completos', calculation: '02+04+13', basis: 'Fórmula impressa no exemplar; 02 sozinho não equivale a16', status: 'Estrutura mapeada; total indeterminado', }, { field: '17', purpose: 'Diferença devedora antes de créditos anteriores', origin: 'Totais15/16 completos', calculation: '16−15 quando16>15', basis: 'Instrução do exemplar; não é automaticamente pagamento', status: 'Indeterminado; sem consolidação completa', }, { field: '18', purpose: 'Diferença credora antes de créditos anteriores', origin: 'Totais15/16 completos', calculation: '15−16 quando15>16', basis: 'Instrução do exemplar; não constitui reembolso reconhecido', status: 'Indeterminado; sem consolidação completa', }, { field: '19', purpose: 'Excesso a reportar do período anterior', origin: 'Histórico fiscal anterior confirmado, separado de estimativas', calculation: 'Crédito anterior utilizável; sem copiar crédito estimado', basis: 'Quadro de utilização de créditos do exemplar; condições/prazo por conferir', status: pending, }, { field: '20', purpose: 'Créditos comunicados pelos serviços', origin: 'Comunicação efectiva da Administração Fiscal', calculation: 'Crédito efectivamente comunicado e utilizável', basis: 'Exemplar; não converter pedido ou crédito estimado em comunicação', status: pending, }, { field: '21', purpose: 'Diferencial de declaração de substituição', origin: 'Valores17/18 da declaração actual e da substituída', calculation: 'Casos impressos no quadro9, com sinal devedor/credor', basis: 'Exemplar; ligação às declarações efectivas e regras de substituição em falta', status: pending, }, { field: '22', purpose: 'IVA a entregar no contexto da declaração', origin: 'Apuramento e créditos/substituição completos', calculation: 'Não derivar apenas do campo02', basis: 'Quadro10 do exemplar; procedimento aplicável por fundamentar', status: pending, }, { field: '23', purpose: 'Juros compensatórios', origin: 'Factos e períodos que legalmente os determinem', calculation: 'Sem taxa, mora ou obrigação presumidas', basis: 'Quadro10; fundamento específico não analisado neste lote', status: pending, }, { field: '24', purpose: 'Importância a pagar', origin: 'Campos22/23 completos', calculation: '22+23', basis: 'Fórmula do exemplar; não é ordem nem execução de pagamento', status: pending, }, { field: '25', purpose: 'Crédito de imposto do quadro11', origin: 'Apuramento completo e tratamento dos créditos anteriores', calculation: 'Montante recuperável no contexto próprio, por fundamentar', basis: 'Caixa25 confirmada visualmente no bloco de recuperação; condições por consolidar', status: pending, }, { field: '26', purpose: 'Reporte para período seguinte', origin: 'Crédito utilizável e opção no quadro11', calculation: 'Separado de pedido e recebimento', basis: 'Quadro11; cotejo de condições/prazos e articulação19/20 necessário', status: pending, }, { field: '27', purpose: 'Pedido de reembolso', origin: 'Crédito elegível e pedido, sem presumir reconhecimento/caixa', calculation: 'Pedido distinto de aprovação e recebimento', basis: 'Exemplar cita art.20; Lei10/2025 altera reembolsos no art.21. Divergência registada.', status: pending, }, ]; export function modeloAComponentRows( snapshot: Record, ): Array<[string, string]> { if (!snapshot.monthly_projection) return []; return [ ['Correspondência Modelo A', modeloAReference.status], [ 'Campos01/02', 'Base líquida e IVA mensal da versão publicada. Os restantes campos não foram presumidos iguais a zero.', ], [ 'Apuramento nesta execução de vendas — campos14–18', 'Indeterminado nesta execução isolada de01/02. Consulte o bloco separado de aquisições e apuramento parcial, quando preenchido. IVA das vendas não é imposto final a pagar.', ], [ 'Origem dos dados', 'Projecção do negócio; não são operações efectivas nem declaração fiscal.', ], [ 'Exemplar de referência', `${modeloAReference.file}; SHA256 ${modeloAReference.sha256}. ${modeloAReference.edition}`, ], ]; } export function modeloAPurchaseReferences( draft: Record, ): Array<{ month: number; declared: string | null; net: null; vat: null; gross: null; deductible: null; }> { if (!draft.business_plan_snapshot) return []; const plan = restoreBusinessPlanSnapshot( inputText(draft.business_plan_snapshot), ); if (!plan) throw new Error( 'Não foi possível recuperar as aquisições projectadas. O original guardado foi preservado.', ); return monthlyProjectedPurchaseOrders(plan).map((amount, index) => ({ month: index + 1, declared: amount, net: null, vat: null, gross: null, deductible: null, })); }