38 lines
2.2 KiB
TypeScript
38 lines
2.2 KiB
TypeScript
process.env.METRICAS_BYPASS_CACHE = '1';
|
|
import { prisma, tenantDb } from '../src/config/database.js';
|
|
import { calcularIngresosPorRegimen, 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 trasladado/acreditable vs ingresos/gastos — ${año} contrib=${contribuyenteId} ===\n`);
|
|
console.log('Mes | Ingresos | IVA tras | Ratio | Gastos | IVA acred | Ratio ');
|
|
|
|
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 [ing, gas, iva] = await Promise.all([
|
|
calcularIngresosPorRegimen(pool, tenant.id, fi, ff, undefined, undefined, false, contribuyenteId),
|
|
calcularEgresosPorRegimen(pool, tenant.id, fi, ff, undefined, undefined, false, contribuyenteId),
|
|
getResumenIva(pool, fi, ff, tenant.id, false, contribuyenteId),
|
|
]);
|
|
const rTras = ing.total > 0 ? (iva.trasladado / ing.total) * 100 : 0;
|
|
const rAcr = gas.total > 0 ? (iva.acreditable / gas.total) * 100 : 0;
|
|
const flagT = Math.abs(rTras - 16) > 3 && ing.total > 0 ? '⚠️' : '';
|
|
const flagA = Math.abs(rAcr - 16) > 3 && gas.total > 0 ? '⚠️' : '';
|
|
console.log(`${mm} | ${ing.total.toFixed(2).padStart(12)} | ${iva.trasladado.toFixed(2).padStart(13)} | ${rTras.toFixed(1).padStart(5)}%${flagT} | ${gas.total.toFixed(2).padStart(12)} | ${iva.acreditable.toFixed(2).padStart(13)} | ${rAcr.toFixed(1).padStart(5)}%${flagA}`);
|
|
}
|
|
await prisma.$disconnect();
|
|
}
|
|
main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });
|