/** Detalle neto de cada CFDI del dashboard para Horux 360 mayo 2025. */ import { prisma, tenantDb } from '../src/config/database.js'; import { resolveContribuyenteContext } from '../src/utils/contribuyente-context.js'; async function main() { const tenant = await prisma.tenant.findFirst({ where: { rfc: 'DESPACHO_MO3NI6U8_B9VGG' }, select: { id: true, databaseName: true } }); if (!tenant) return; const pool = await tenantDb.getPool(tenant.id, tenant.databaseName); const ctx = await resolveContribuyenteContext(pool, tenant.id, 'b3761db6-0b8d-4251-8078-4ddc31e9c75b'); // Facturas I PUE (rendición con la misma lógica de g1Facturas) const { rows: fact } = await pool.query( `SELECT uuid, total_mxn, iva_traslado_mxn, ieps_traslado_mxn, impuestos_locales_trasladado_mxn, iva_retencion_mxn, isr_retencion_mxn, ieps_retencion_mxn, impuestos_locales_retenidos_mxn, cfdi_tipo_relacion, (COALESCE(total_mxn,0) - COALESCE(iva_traslado_mxn,0) - COALESCE(ieps_traslado_mxn,0) - COALESCE(impuestos_locales_trasladado_mxn,0)) AS neto_normal FROM cfdis WHERE ${ctx.esEmisor} AND tipo_comprobante='I' AND metodo_pago='PUE' AND status NOT IN ('Cancelado','0') AND fecha_emision >= '2025-05-01'::date AND fecha_emision < '2025-05-31'::date + interval '1 day' AND regimen_fiscal_emisor = '626' ORDER BY fecha_emision`, ); console.log(`\nI PUE régimen 626:`); for (const r of fact) { console.log(` ${r.uuid.substring(0,8)} total=${Number(r.total_mxn).toFixed(2)} iva_tras=${Number(r.iva_traslado_mxn).toFixed(2)} iva_ret=${Number(r.iva_retencion_mxn).toFixed(2)} isr_ret=${Number(r.isr_retencion_mxn).toFixed(2)} neto=${Number(r.neto_normal).toFixed(2)} rel=${r.cfdi_tipo_relacion || '-'}`); } const factNeto = fact.reduce((s, r) => s + Number(r.neto_normal), 0); console.log(` Suma neto facturas: ${factNeto.toFixed(2)}`); // Pagos P const { rows: pagos } = await pool.query( `SELECT uuid, fecha_pago_p, monto_pago_mxn, iva_traslado_pago_mxn, ieps_traslado_pago_mxn, iva_retencion_pago_mxn, isr_retencion_pago_mxn, ieps_retencion_pago_mxn, (COALESCE(monto_pago_mxn,0) - COALESCE(iva_traslado_pago_mxn,0) - COALESCE(ieps_traslado_pago_mxn,0)) AS neto_normal FROM cfdis WHERE ${ctx.esEmisor} AND tipo_comprobante='P' AND status NOT IN ('Cancelado','0') AND fecha_pago_p >= '2025-05-01'::date AND fecha_pago_p < '2025-05-31'::date + interval '1 day' AND regimen_fiscal_emisor = '626' ORDER BY fecha_pago_p`, ); console.log(`\nPagos P régimen 626:`); for (const r of pagos) { console.log(` ${r.uuid.substring(0,8)} monto_pago=${Number(r.monto_pago_mxn).toFixed(2)} iva_tras_pago=${Number(r.iva_traslado_pago_mxn).toFixed(2)} iva_ret_pago=${Number(r.iva_retencion_pago_mxn).toFixed(2)} neto=${Number(r.neto_normal).toFixed(2)}`); } const pagosNeto = pagos.reduce((s, r) => s + Number(r.neto_normal), 0); console.log(` Suma neto pagos: ${pagosNeto.toFixed(2)}`); console.log(`\nTOTAL facturas + pagos: ${(factNeto + pagosNeto).toFixed(2)}`); await prisma.$disconnect(); } main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });