import assert from 'node:assert/strict'; import fs from 'node:fs/promises'; import {execFile} from 'node:child_process'; import {promisify} from 'node:util'; const run=promisify(execFile); const php='C:/Users/macbook/.config/investmoz/php-8.5.11/php.exe'; const sgf='C:/laragon/www/sgf-tempo'; for(const host of ['compras','sgf']) { const exists=await fs.access(`C:/laragon/data/sgf-tempo/secrets/payables-proof-${host}.json`).then(()=>true,()=>false); assert(!exists,'An existing proof must be reconciled before creating a new one.'); } async function job(name) { const {stdout}=await run(php,['scripts/payable-history-pg.php',name],{cwd:process.cwd(),windowsHide:true,timeout:90000,maxBuffer:100000}); return JSON.parse(stdout); } try { await run(php,[`${sgf}/scripts/payables-provision.php`,'--proof'],{cwd:sgf,windowsHide:true,timeout:180000,maxBuffer:100000}); const before=await job('setup'); const fault=await job('fault'); assert(fault.fault_rolled_back);assert.equal(fault.business_fingerprint,before.business_fingerprint); const recognised=await Promise.all([job('validate'),job('validate')]); assert(recognised.every(result=>result.state==='recognised')); assert.equal(recognised[0].obligation_id,recognised[1].obligation_id); const after=await job('inspect'); assert.equal(after.principal_minor,1160000);assert.equal(after.balance_minor,860000); assert.equal(after.confirmed_minor,300000);assert.equal(after.pending_minor,100000);assert.equal(after.rejected_minor,50000); assert.equal(after.obligations,1);assert.equal(after.imports,1);assert.equal(after.payment_links,3); assert.equal(after.business_fingerprint,before.business_fingerprint); assert(after.ui_balance_correct);assert(after.changed_history_refused); assert.equal(after.due_on,null);assert.equal(after.days_overdue,null);assert.equal(after.append_only_tables.length,2); if(process.argv.includes('--decisions')) { const fault=await job('decision_fault'); assert(fault.rolled_back);assert.equal(fault.balance_minor,860000); const concurrent=await Promise.all([job('decision_confirm'),job('decision_confirm')]); assert(concurrent.every(r=>r.balance_minor===760000 && r.frozen===r.original)); const final=await job('decision_inspect'); assert.equal(final.balance_minor,760000);assert.equal(final.confirmed_minor,400000);assert.equal(final.pending_minor,0); assert.equal(final.decisions,1);assert.equal(final.events,1);assert.equal(final.original_status,'confirmed');assert(final.append_only); assert(concurrent.every(r=>r.frozen===final.frozen)); await fs.writeFile('docs/proofs/payable-payment-decisions-pg.json',JSON.stringify({checked_at:new Date().toISOString(),passed:true,atomic_rollback:true, concurrent_decision_once:true,original_import_preserved:true,new_transfers_executed:false,scenario:final,visual_review:false},null,2)+'\n'); } await fs.writeFile('docs/proofs/payable-history-pg.json',JSON.stringify({checked_at:new Date().toISOString(),passed:true, fault_recovery:true,concurrent_recognition:true,original_business_history_unchanged:true,new_transfers_executed:false, scenario:after,visual_review:false},null,2)+'\n'); console.log('PostgreSQL historical import passed: gross principal, single deduction, pending/rejected preservation, concurrency, rollback and immutable history.'); } finally { await run(php,[`${sgf}/scripts/payables-provision.php`,'--cleanup-proof'],{cwd:sgf,windowsHide:true,timeout:90000,maxBuffer:100000}); }