Files
Investidor-V2/tests/frontend/helpers/irpc-pec-case.mjs
T

147 lines
4.7 KiB
JavaScript

import {
irpcBook,
newIrpcRow,
saveIrpcBook,
recordIrpc,
} from '../../../resources/js/lib/irpc-withholdings.ts';
import fs from 'node:fs';
import { newPecPayment } from '../../../resources/js/lib/irpc-pec.ts';
import {
newAnnualBook,
newAnnualPpc,
reuseAnnualAssessment,
reuseAnnualWithholding,
} from '../../../resources/js/lib/irpc-annual-settlement.ts';
export function pecCase(amount = '200', ppc = '500', rf = '0') {
const d = JSON.parse(
fs.readFileSync(
new URL(
'../fixtures/irpc-assessment-preserved.json',
import.meta.url,
),
'utf8',
),
);
if (rf !== '0') {
const l5 = irpcBook(d);
l5.rows.push({
...newIrpcRow('pec-rf'),
direction: 'received',
origin: 'effective',
counterparty: 'QA AT',
documentRef: 'QA rendimento próprio 2026',
base: String(Number(rf) * 5),
currency: 'MZN',
kind: 'royalty',
recipientIrpc: 'yes',
payerIrpc: 'yes',
residence: 'resident',
mozambique: 'yes',
qualificationRef:
'QA royalties próprios incluídos no resultado anual',
specialRelief: 'none',
eventsComplete: 'yes',
events: [
{
kind: 'payment',
date: '2026-10-02',
reference: 'QA rendimento primeiro evento',
},
],
settlement: 'complete',
settlementRef: 'QA retenção sofrida reconciliada',
allocations: [{ paymentId: 'pec-rf-proof', amount: rf }],
ordinary: {
nonDigital: 'yes',
capitalType: '',
rentOwnPropertyManagement: '',
specialFacts: 'no',
capitalSeatAndManagement: '',
reference: 'QA royalties não digitais de residente',
},
});
l5.payments.push({
id: 'pec-rf-proof',
kind: 'withholding_proof',
reference: 'QA-RF-PEC-2026',
date: '2026-10-02',
amount: rf,
currency: 'MZN',
});
d.modelo_a_snapshot = saveIrpcBook(
d,
recordIrpc(d, l5, '2026-10-27T15:00:00+02:00'),
);
}
let b = reuseAnnualAssessment(d, newAnnualBook());
b.reference = 'QA PEC: inventário completo da entidade/exercício';
b.assessmentReference = 'QA colecta válida já demonstrada';
b.withholdings = {
state: 'absent',
reference: 'QA sem retenções próprias neste caso',
rows: [],
};
b.ppc = {
state: ppc === '0' ? 'absent' : 'known',
reference: 'QA inventário de PPC efectivo',
rows:
ppc === '0'
? []
: [
{
...newAnnualPpc('ppc'),
document: 'QA-PPC-PEC-2026',
issuer: 'QA AT',
date: '2026-06-30',
subjectNuit: b.subjectNuit,
year: b.year,
proofAmount: ppc,
amount: ppc,
effective: 'yes',
reference: 'QA prova efectiva de natureza PPC',
},
],
};
b.pec = {
state: 'absent',
amount: '',
reference: 'QA resumo anterior preservado',
};
b.credits = {
state: 'known',
amount: '0',
reference: 'QA créditos precedentes conhecidos zero',
};
b.pecPayments = {
version: 1,
state: 'known',
reference: 'QA inventário de pagamentos PEC 2026',
rows: [
{
...newPecPayment('pec'),
document: 'QA-PEC-2026',
issuer: 'QA AT',
date: '2026-08-31',
subjectNuit: b.subjectNuit,
year: b.year,
proofAmount: amount,
amount,
effective: 'yes',
previouslyUsed: '0',
priorUseReference:
'QA reconciliação: zero utilizações fora destas parcelas',
reference: 'QA comprovativo pago de natureza PEC',
},
],
};
if (rf !== '0') {
b.withholdings.state = 'known';
b = reuseAnnualWithholding(d, b, 'pec-rf', 'pec-rf-proof', 'rf-claim');
Object.assign(b.withholdings.rows[0], {
incomeIncluded: 'yes',
reference: 'QA titular e rendimento incluído no exercício',
});
}
return { d, b };
}