81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
export const pecCorrectionVersion = 'IRPC-PEC-turnover-correction/1';
|
|
export const pecCorrectionSource =
|
|
'RIRPC,Decreto9/2008,art29(3),BR16/I16-04-2008:volume de negócios determinado pelas vendas/serviços até ao final do exercício anterior,podendo ser rectificado no ano seguinte se distinto do usado no cálculo. Recorte:correcção documental do volume2025 na simulação2026;original,fundamento e diferença conservados. Não é declaração fiscal rectificativa submetida.';
|
|
export type PecCorrection = {
|
|
version: 1;
|
|
apply: '' | 'yes' | 'no';
|
|
originalTurnover: string;
|
|
revisedTurnover: string;
|
|
subjectNuit: string;
|
|
turnoverYear: string;
|
|
reference: string;
|
|
};
|
|
export const newPecCorrection = (
|
|
originalTurnover: string,
|
|
subjectNuit: string,
|
|
): PecCorrection => ({
|
|
version: 1,
|
|
apply: '',
|
|
originalTurnover,
|
|
revisedTurnover: '',
|
|
subjectNuit,
|
|
turnoverYear: '2025',
|
|
reference: '',
|
|
});
|
|
export function validatePecCorrection(c: PecCorrection) {
|
|
if (
|
|
!c ||
|
|
c.version !== 1 ||
|
|
!['', 'yes', 'no'].includes(c.apply) ||
|
|
[
|
|
'originalTurnover',
|
|
'revisedTurnover',
|
|
'subjectNuit',
|
|
'turnoverYear',
|
|
'reference',
|
|
].some(
|
|
(k) =>
|
|
typeof (c as unknown as Record<string, unknown>)[k] !==
|
|
'string',
|
|
)
|
|
)
|
|
throw Error('Rectificação PEC não recuperável;original preservado.');
|
|
}
|
|
export function correctedPecTurnover(
|
|
c: PecCorrection | undefined,
|
|
original: string,
|
|
subjectNuit: string,
|
|
previousYear: string,
|
|
) {
|
|
if (!c) return { value: original, pending: [] as string[], applied: false };
|
|
validatePecCorrection(c);
|
|
if (c.apply === 'no')
|
|
return { value: original, pending: [] as string[], applied: false };
|
|
const pending: string[] = [];
|
|
if (c.apply !== 'yes')
|
|
pending.push(
|
|
'PEC:escolha aplicar a rectificação ou conservar o volume original.',
|
|
);
|
|
if (
|
|
c.originalTurnover !== original ||
|
|
c.subjectNuit !== subjectNuit ||
|
|
c.turnoverYear !== previousYear ||
|
|
previousYear !== '2025'
|
|
)
|
|
pending.push(
|
|
'PEC:origem,titular ou exercício da rectificação divergem da base;reconfira sem sobrescrever os valores.',
|
|
);
|
|
if (
|
|
!/^\d{1,18}(\.\d{1,2})?$/.test(c.revisedTurnover) ||
|
|
!c.reference.trim()
|
|
)
|
|
pending.push(
|
|
'PEC:rectificação exige volume corrigido2025 em MZN e fonte/fundamento;valor desconhecido não equivale a zero.',
|
|
);
|
|
return {
|
|
value: pending.length ? '' : c.revisedTurnover,
|
|
pending,
|
|
applied: pending.length === 0,
|
|
};
|
|
}
|