53 lines
2.7 KiB
TypeScript
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); });
|