process.env.METRICAS_BYPASS_CACHE = '1'; import { prisma, tenantDb } from '../src/config/database.js'; import { calcularEgresosPorRegimen } from '../src/services/dashboard.service.js'; import { getResumenIva } from '../src/services/impuestos.service.js'; const tenantRfc = process.argv[2] || 'DESPACHO_MO3NI6U8_B9VGG'; const contribuyenteId = process.argv[3] || 'd745a915-6a23-4818-944b-a7e1e18e536a'; const año = Number(process.argv[4] || '2025'); async function main() { const tenant = await prisma.tenant.findFirst({ where: { rfc: tenantRfc }, select: { id: true, databaseName: true } }); if (!tenant) return; const pool = await tenantDb.getPool(tenant.id, tenant.databaseName); console.log(`\n=== IVA acreditable vs Gastos por mes — ${año} contrib=${contribuyenteId} ===\n`); console.log('Mes | Gastos | IVA acreditable | Ratio | Esperado (16%) | Diff'); for (let m = 1; m <= 12; m++) { const lastDay = new Date(año, m, 0).getDate(); const mm = String(m).padStart(2, '0'); const fi = `${año}-${mm}-01`; const ff = `${año}-${mm}-${String(lastDay).padStart(2, '0')}`; const [gastos, iva] = await Promise.all([ calcularEgresosPorRegimen(pool, tenant.id, fi, ff, undefined, undefined, false, contribuyenteId), getResumenIva(pool, fi, ff, tenant.id, false, contribuyenteId), ]); const ratio = gastos.total > 0 ? (iva.acreditable / gastos.total) * 100 : 0; const esperado = gastos.total * 0.16; const diff = iva.acreditable - esperado; const flag = Math.abs(ratio - 16) > 3 && gastos.total > 0 ? ' ⚠️' : ''; console.log(`${mm} | ${gastos.total.toFixed(2).padStart(13)} | ${iva.acreditable.toFixed(2).padStart(15)} | ${ratio.toFixed(2)}% | ${esperado.toFixed(2).padStart(13)} | ${diff.toFixed(2)}${flag}`); } await prisma.$disconnect(); } main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });