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); });