fix(captura): llenar ubicacion con codigo canonico y modelo faltante desde inventario

This commit is contained in:
2026-09-12 09:13:31 +00:00
parent 6473fb5981
commit 411130a127

View File

@@ -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 {