Files
HoruxDespachosNuevo/apps/api/scripts/inspect-pair.ts

53 lines
2.7 KiB
TypeScript

import { prisma, tenantDb } from '../src/config/database.js';
const I_UUID = '5c874749-748f-11f0-96b1-2b9310891836';
const E_UUID = '7163da3b-748f-11f0-9853-e97a8e1dedd9';
async function main() {
const tenants = await prisma.tenant.findMany({ select: { id: true, rfc: true, databaseName: true } });
for (const t of tenants) {
let pool;
try { pool = await tenantDb.getPool(t.id, t.databaseName); } catch { continue; }
const { rows } = await pool.query(
`SELECT uuid, tipo_comprobante, metodo_pago, cfdi_tipo_relacion, cfdis_relacionados,
status, fecha_emision, total_mxn, iva_traslado_mxn,
rfc_emisor, rfc_receptor, contribuyente_id, type
FROM cfdis WHERE LOWER(uuid) IN (LOWER($1), LOWER($2))`,
[I_UUID, E_UUID],
);
if (rows.length === 0) continue;
console.log(`\n=== ${t.rfc} ===`);
for (const r of rows) {
const fe = new Date(r.fecha_emision).toISOString().slice(0, 10);
console.log(`\n UUID: ${r.uuid}`);
console.log(` tipo: ${r.tipo_comprobante}/${r.metodo_pago || '?'} rel=${r.cfdi_tipo_relacion ?? 'null'} status=${r.status} type=${r.type}`);
console.log(` fecha: ${fe} total=${r.total_mxn} IVA=${r.iva_traslado_mxn}`);
console.log(` ${r.rfc_emisor}${r.rfc_receptor} contrib_id=${r.contribuyente_id}`);
console.log(` cfdis_relacionados: ${r.cfdis_relacionados ?? 'NULL'}`);
}
// Si están ambos, verificar match de cfdis_relacionados
if (rows.length === 2) {
const i = rows.find((x: any) => x.uuid.toLowerCase() === I_UUID.toLowerCase());
const e = rows.find((x: any) => x.uuid.toLowerCase() === E_UUID.toLowerCase());
if (i && e) {
const iRels = (i.cfdis_relacionados || '').split('|').map((u: string) => u.trim().toLowerCase()).filter(Boolean);
const eRels = (e.cfdis_relacionados || '').split('|').map((u: string) => u.trim().toLowerCase()).filter(Boolean);
const overlap = iRels.filter((u: string) => eRels.includes(u));
console.log(`\n I refs (${iRels.length}): ${iRels.join(', ').substring(0, 200)}`);
console.log(` E refs (${eRels.length}): ${eRels.join(', ').substring(0, 200)}`);
console.log(` Overlap (${overlap.length}): ${overlap.join(', ')}`);
// Cruz: ¿la E referencia a la I directamente, o viceversa?
if (eRels.includes(I_UUID.toLowerCase())) console.log(` → E.cfdis_relacionados INCLUYE el UUID de I/07 PPD`);
if (iRels.includes(E_UUID.toLowerCase())) console.log(` → I.cfdis_relacionados INCLUYE el UUID de E`);
}
}
}
await prisma.$disconnect();
}
main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });