86 lines
3.2 KiB
TypeScript
86 lines
3.2 KiB
TypeScript
import { prisma, tenantDb } from '../src/config/database.js';
|
|
|
|
const RFC_CARLOS = 'TORC9611214CA';
|
|
|
|
async function main() {
|
|
const tenants = await prisma.tenant.findMany({
|
|
select: { id: true, rfc: true, databaseName: true },
|
|
});
|
|
|
|
let found = false;
|
|
|
|
for (const t of tenants) {
|
|
let pool;
|
|
try {
|
|
pool = await tenantDb.getPool(t.id, t.databaseName);
|
|
} catch {
|
|
continue;
|
|
}
|
|
|
|
const { rows: contribs } = await pool.query(
|
|
`SELECT c.entidad_id, c.rfc, c.regimen_fiscal, e.nombre, fo.facturapi_org_id, fo.csd_uploaded, fo.active AS org_active
|
|
FROM contribuyentes c
|
|
JOIN entidades_gestionadas e ON e.id = c.entidad_id
|
|
LEFT JOIN facturapi_orgs fo ON fo.contribuyente_id = c.entidad_id
|
|
WHERE UPPER(c.rfc) = $1`,
|
|
[RFC_CARLOS],
|
|
);
|
|
if (contribs.length === 0) continue;
|
|
|
|
found = true;
|
|
console.log(`\n=== Tenant ${t.rfc} — BD ${t.databaseName} ===`);
|
|
for (const c of contribs) {
|
|
console.log(`Contribuyente Carlos: ${c.entidad_id}`);
|
|
console.log(` nombre=${c.nombre}`);
|
|
console.log(` regimen_fiscal (CSV)=${c.regimen_fiscal}`);
|
|
console.log(` facturapi_org_id=${c.facturapi_org_id || 'NULL (sin org)'}`);
|
|
console.log(` csd_uploaded=${c.csd_uploaded} org_active=${c.org_active}`);
|
|
}
|
|
|
|
const { rows: cfdis } = await pool.query(
|
|
`SELECT uuid, type, tipo_comprobante, metodo_pago, total, total_mxn,
|
|
rfc_emisor, rfc_receptor, nombre_receptor, status, fecha_emision,
|
|
source, facturapi_id
|
|
FROM cfdis
|
|
WHERE UPPER(rfc_emisor) = $1
|
|
AND (source = 'facturapi' OR facturapi_id IS NOT NULL OR fecha_emision >= NOW() - interval '2 days')
|
|
ORDER BY fecha_emision DESC
|
|
LIMIT 10`,
|
|
[RFC_CARLOS],
|
|
);
|
|
|
|
console.log(`\nÚltimas ${cfdis.length} facturas (facturapi o recientes) emitidas por ${RFC_CARLOS}:`);
|
|
for (const c of cfdis) {
|
|
console.log(` UUID=${c.uuid}`);
|
|
console.log(` tipo=${c.tipo_comprobante} mp=${c.metodo_pago} status=${c.status} source=${c.source}`);
|
|
console.log(` receptor=${c.rfc_receptor} (${c.nombre_receptor})`);
|
|
console.log(` total=${c.total} total_mxn=${c.total_mxn}`);
|
|
console.log(` fecha_emision=${c.fecha_emision?.toISOString?.() || c.fecha_emision}`);
|
|
console.log(` facturapi_id=${c.facturapi_id}`);
|
|
}
|
|
|
|
const { rows: [anyEmitido] } = await pool.query(
|
|
`SELECT COUNT(*)::int AS total,
|
|
SUM(CASE WHEN source='facturapi' THEN 1 ELSE 0 END)::int AS via_facturapi,
|
|
SUM(CASE WHEN source='facturapi' AND status NOT IN ('Cancelado','0') THEN 1 ELSE 0 END)::int AS vigentes
|
|
FROM cfdis
|
|
WHERE UPPER(rfc_emisor) = $1`,
|
|
[RFC_CARLOS],
|
|
);
|
|
console.log(`\nResumen total CFDIs con rfc_emisor=${RFC_CARLOS}:`);
|
|
console.log(` total=${anyEmitido.total} via_facturapi=${anyEmitido.via_facturapi} vigentes_facturapi=${anyEmitido.vigentes}`);
|
|
}
|
|
|
|
if (!found) {
|
|
console.log(`\nNo se encontró contribuyente con RFC ${RFC_CARLOS} en ningún tenant.`);
|
|
}
|
|
|
|
await prisma.$disconnect();
|
|
}
|
|
|
|
main().catch(async e => {
|
|
console.error(e);
|
|
await prisma.$disconnect().catch(() => {});
|
|
process.exit(1);
|
|
});
|