Files
HoruxDespachosNuevo/apps/api/scripts/debug-drill-buckets.ts

72 lines
2.6 KiB
TypeScript

/**
* Ejecuta los 3 nuevos buckets de drill-down (ncs_emitidas, ncs_recibidas,
* no_deducibles_efectivo) directamente contra una BD tenant para verificar
* que cada uno produce resultados distintos. Sirve para descartar hipótesis
* de bug en frontend / cache / dev server stale.
*/
import { prisma, tenantDb } from '../src/config/database.js';
async function main() {
const rfc = process.argv[2] || 'DESPACHO_MO7JE8BZ_VDOPR';
const fi = process.argv[3] || '2025-08-01';
const ff = process.argv[4] || '2025-08-31';
const t = await prisma.tenant.findFirst({ where: { rfc } });
if (!t) { console.log('Tenant', rfc, 'no encontrado'); return; }
const pool = await tenantDb.getPool(t.id, t.databaseName);
console.log(`Tenant: ${rfc} — Período: ${fi}${ff}\n`);
const buckets = [
{
name: 'ncs_emitidas',
sql: `
SELECT COUNT(*)::int as n, COALESCE(SUM(total_mxn),0)::numeric(14,2) as total
FROM cfdis
WHERE type = 'EMITIDO'
AND tipo_comprobante = 'E' AND metodo_pago = 'PUE'
AND status NOT IN ('Cancelado','0')
AND fecha_emision >= $1::date AND fecha_emision < ($2::date + interval '1 day')
AND regimen_fiscal_emisor IS NOT NULL
`,
},
{
name: 'ncs_recibidas',
sql: `
SELECT COUNT(*)::int as n, COALESCE(SUM(total_mxn),0)::numeric(14,2) as total
FROM cfdis
WHERE type = 'RECIBIDO'
AND tipo_comprobante = 'E' AND metodo_pago = 'PUE'
AND status NOT IN ('Cancelado','0')
AND fecha_emision >= $1::date AND fecha_emision < ($2::date + interval '1 day')
AND regimen_fiscal_receptor IS NOT NULL
`,
},
{
name: 'no_deducibles_efectivo',
sql: `
SELECT COUNT(*)::int as n, COALESCE(SUM(total_mxn),0)::numeric(14,2) as total
FROM cfdis
WHERE type = 'RECIBIDO'
AND forma_pago = '01'
AND (
(tipo_comprobante = 'I' AND metodo_pago = 'PUE' AND COALESCE(total_mxn, 0) > 2000)
OR (tipo_comprobante = 'P' AND COALESCE(monto_pago_mxn, 0) > 2000)
)
AND status NOT IN ('Cancelado','0')
AND fecha_emision >= $1::date AND fecha_emision < ($2::date + interval '1 day')
AND regimen_fiscal_receptor IS NOT NULL
`,
},
];
for (const b of buckets) {
const { rows: [r] } = await pool.query(b.sql, [fi, ff]);
console.log(`${b.name.padEnd(28)}${r.n} fila(s), total = $${Number(r.total).toLocaleString('es-MX')}`);
}
await prisma.$disconnect();
}
main().catch(e => { console.error(e); process.exit(1); });