23 lines
2.3 KiB
JavaScript
23 lines
2.3 KiB
JavaScript
import fs from 'node:fs';
|
|
import assert from 'node:assert/strict';
|
|
import {periodAdvanceCase} from '../tests/frontend/helpers/irpc-advance-period-case.mjs';
|
|
import {annualAdvanceCashflow,annualAdvancePeriod,annualBook,annualCurrent,annualHtml,recordAnnual,saveAnnualBook} from '../resources/js/lib/irpc-annual-settlement.ts';
|
|
import {createProjectDossierReport} from '../resources/js/lib/project-dossier-report.ts';
|
|
const out=new URL('../outputs/irpc-period-consistency-20261113/',import.meta.url);fs.mkdirSync(out,{recursive:true});
|
|
for(const name of ['ordinary','noncivil','short','start']){
|
|
if(process.argv[2]==='generate'){
|
|
const {d,b}=periodAdvanceCase(name);const prior=recordAnnual(d,{...b,ppcObligation:undefined,pecObligation:undefined},'2026-11-13T22:05:00Z');
|
|
d.modelo_a_snapshot=saveAnnualBook(d,recordAnnual(d,{...prior,ppcObligation:b.ppcObligation,pecObligation:b.pecObligation},'2026-11-13T22:06:00Z'));fs.writeFileSync(new URL(name+'.json',out),JSON.stringify(d));
|
|
}else{
|
|
const d=JSON.parse(fs.readFileSync(new URL('recovered-'+name+'.json',out),'utf8')),b=annualBook(d),period=annualAdvancePeriod(d),m=annualAdvanceCashflow(b,period);
|
|
assert.equal(annualCurrent(d,b),true);assert.equal(b.history.length,1);assert.deepEqual(b.result.model.arithmeticBalance,b.history[0].model.arithmeticBalance);assert.deepEqual(b.result.model.advancePeriod,period);
|
|
if(name==='ordinary')assert.deepEqual(m.total,{numerator:'112000',denominator:'1'});else{assert.equal(m.total,null);assert.equal(m.rows.length,0);}
|
|
if(name==='start')assert.equal(m.pecKnown,true);
|
|
const html=annualHtml(d),report=createProjectDossierReport(d,{selectedSections:new Set(['finance']),generatedAt:'2026-11-13T22:07:00Z'});
|
|
assert.match(html,/Projecção mensal conjunta PPC\/PEC/);assert.match(JSON.stringify(report),/Projecção mensal conjunta PPC\/PEC/);
|
|
if(name!=='ordinary'){assert.match(html,/período L6/);assert.ok(!html.includes('Total da projecção: 112000'));}
|
|
fs.writeFileSync(new URL(name+'-report.html',out),html);fs.writeFileSync(new URL(name+'-verification.json',out),JSON.stringify({synthetic:true,nativeApiRecovery:true,annualCurrent:true,historyPreserved:true,annualCalculationUnchanged:true,report:true,period,model:m},null,2));
|
|
}
|
|
}
|
|
console.log(process.argv[2]==='generate'?'Generated four synthetic period consistency cases':'Verified four recovered period contexts and reports');
|