299 lines
12 KiB
TypeScript
299 lines
12 KiB
TypeScript
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<string, unknown>,
|
||
): 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<string, unknown>,
|
||
): 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,
|
||
}));
|
||
}
|