56 lines
3.2 KiB
TypeScript
56 lines
3.2 KiB
TypeScript
/** 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); });
|