diff --git a/api-gateway/scripts/importar-captura-maestro.js b/api-gateway/scripts/importar-captura-maestro.js index f84b87b..25968e3 100644 --- a/api-gateway/scripts/importar-captura-maestro.js +++ b/api-gateway/scripts/importar-captura-maestro.js @@ -175,7 +175,7 @@ function parseNumero(v) { } function parseTexto(v) { - if (v == null) return null + if (v == null || v instanceof Date) return null const s = String(v).trim() return s === '' ? null : s.replace(/\s+/g, ' ') } @@ -359,6 +359,45 @@ function leer() { return agregado } +// ── Complementos ───────────────────────────────────────────────────── + +/** Ubicación/Unidad siempre llena (código canónico) + modelo faltante desde el inventario */ +async function complementar(agregado) { + const clavesUnidad = new Set() + for (const key of agregado.keys()) { + const [des, uni] = key.split('|') + clavesUnidad.add(`${des}|${uni}`) + } + + // 1) ubicacion = código canónico de la unidad + for (const k of clavesUnidad) { + const [des, uni] = k.split('|') + const key = `${des}|${uni}|VENTAS|ubicacion` + if (!agregado.has(key)) agregado.set(key, { valor: uni, tipo: 'text' }) + } + + // 2) modelo faltante: exacto desde el cotizador; fallback sin sufijo de letra + const unidadesInv = await prisma.unidad.findMany({ select: { codigo: true, modelo: true } }) + const porCodigo = new Map(unidadesInv.map((u) => [u.codigo, u.modelo])) + let llenados = 0 + const sinModelo = new Set() + for (const k of clavesUnidad) { + const [des, uni] = k.split('|') + if (agregado.has(`${des}|${uni}|VENTAS|modelo`)) continue + const modelo = porCodigo.get(uni) ?? porCodigo.get(uni.replace(/[A-Za-z]+$/, '')) + if (modelo) { + agregado.set(`${des}|${uni}|VENTAS|modelo`, { valor: modelo, tipo: 'text' }) + llenados++ + } else { + sinModelo.add(uni) + } + } + console.log(`Modelo rellenado desde inventario: ${llenados}`) + if (sinModelo.size > 0) { + console.log(`Unidades sin modelo en maestro ni inventario (${sinModelo.size}): ${[...sinModelo].slice(0, 15).join(', ')}${sinModelo.size > 15 ? '…' : ''}`) + } +} + // ── Escritura y verificación ───────────────────────────────────────── async function escribir(agregado) { @@ -401,6 +440,7 @@ async function verificar() { async function main() { const agregado = leer() + await complementar(agregado) if (DRY) { console.log('\n(dry-run: nada escrito)') } else {