import fs from 'node:fs'; import { BUILDERS } from '../src/tools/artifacts/documents.js'; const out = 'C:/Users/HP/AppData/Local/Temp/claude/c--Users-HP-Desktop-Dev-Agentic-AI/8b30e040-7edd-46bd-97f0-c9d03d3965cf/scratchpad'; const spec = { title: 'WeLe CRM — Performance Review', subtitle: 'Last 90 days · generated from live CRM data', summary: 'Lead volume is healthy at 3,371 new leads, but conversion is the constraint: only 14 of 97 payment ' + 'attempts completed (14.4%), leaving ₹363,817 in abandoned checkouts. The largest funnel leak is ' + 'new_lead → contacted, where 91% of leads never receive a first touch.', sections: [ { heading: 'Headline figures', kpis: [ { label: 'New leads', value: '3,371' }, { label: 'Paid enrolments', value: '14' }, { label: 'Payment success', value: '14.4%' }, { label: 'Abandoned value', value: '₹3.64L' }, ], text: 'Volume is not the problem. Follow-up capacity is.', }, { heading: 'Pipeline by stage', chart: { type: 'bar', title: 'Leads by stage', format: 'number', data: [ { label: 'new_lead', value: 3417 }, { label: 'contacted', value: 500 }, { label: 'lost', value: 282 }, { label: 'qualified', value: 59 }, { label: 'demo', value: 4 }, { label: 'converted', value: 4 }, ], }, bullets: [ '76.6% of all leads have never moved past new_lead.', 'Only 59 leads reached qualified in 90 days.', ], }, { heading: 'Payment attempts', chart: { type: 'donut', title: 'Attempts by status', center_label: 'attempts', data: [{ label: 'CANCELLED', value: 206 }, { label: 'SUCCESS', value: 39 }, { label: 'FAILED', value: 5 }, { label: 'ERROR', value: 3 }], }, }, { heading: 'Top batches', table: { columns: ['Batch', 'Paid', 'Attempts', 'Revenue', 'Success %'], rows: [ ['AI Basics for Manufacturing', 12, 59, 18400, 20.3], ['AI Quality Inspection', 8, 31, 9200, 25.8], ['Build Your First AI Agent in 60 Minutes (Live)', 6, 31, 4300, 19.4], ['AI for IoT & Sensors', 3, 14, 1800, 21.4], ['Digital Marketing Mastery', 2, 12, 1200, 16.7], ], }, }, ], }; for (const [ext, build] of Object.entries(BUILDERS)) { const t = Date.now(); try { const buf = await build(spec); const p = `${out}/report.${ext}`; fs.writeFileSync(p, buf); console.log(`PASS ${ext.padEnd(5)} ${String((buf.length / 1024).toFixed(1)).padStart(8)} kB ${Date.now() - t}ms`); } catch (e) { console.log(`FAIL ${ext.padEnd(5)} ${e.message}`); console.log(e.stack?.split('\n').slice(1, 4).join('\n')); } } process.exit(0);