SOURCE-002 Future Layer Mapping¶
Fecha: 2026-06-07
Estado: MAPEO CONCEPTUAL FUTURO / NO IMPLEMENTADO
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/SOURCE-002-FUTURE-LAYER-MAPPING.md
Autoridad base relacionada:
docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-002-PRODUCTOS-PRODUCTS-AUTHORITY.sql
Decision economica relacionada:
docs/tenants/alpuntodeventa/business-observer/SOURCE-002-ECONOMIC-LAYER.md
1. Proposito¶
Este documento existe para dejar cerrado un principio de diseno conceptual
antes de cualquier implementacion futura en Postgres:
SOURCE-002 es autoridad de lectura de negocio, pero no implica una unica
tabla destino pesada.
La query autoridad de SOURCE-002 concentra en una sola lectura datos de:
- producto maestro
- marca
- proveedor
- estado / vigencia / gobernanza del producto
- stock actual
- inventario
- precios
- costos
- impuestos
- margenes
- descuentos de compra
- politica comercial
- promociones
- estrategia comercial
- logistica
- volumetria
- actividad comercial
- auditoria / historicos utiles
Eso es util como autoridad de negocio.
No es una recomendacion para persistir todo junto en una sola entidad futura.
2. Principio rector¶
Regla documental oficial:
SOURCE-002sigue siendo la autoridad madre de lectura para producto y valores comerciales vigentes observadostenant_id + SKUes la clave canonica del dominio producto para todas las capas futuras derivadas desdeSOURCE-002- todo dato derivado desde
SOURCE-002debe interpretarse como atributo, medicion, relacion vigente o relacion historica delSKU - esa autoridad no obliga a crear una tabla ancha unica en
Postgres - la persistencia futura debera separar dominios por ritmo de cambio, frecuencia de lectura y necesidad de trazabilidad
- la historizacion debe responder a
valor de decision - el producto maestro debe guardar lectura rapida vigente
- la historia fina de cambios economicos debe vivir fuera del maestro
- el stock intradiario liviano debe mantenerse separado de precios, costos y margenes
Corolario documental obligatorio:
- articulo, marca, estado, stock, stock en bultos, costos, descuentos de
compra, precios, listas,
IVA, margenes, descuento permitido, precio oferta, proveedor, categoria, subcategoria, unidad de medida, palletizado, fechas operativas e historicos utiles no deben modelarse como datos sueltos sin ancla de producto - el analisis por proveedor o por marca debe derivarse siempre desde los
SKUasociados
3. Regla transversal: historicos por valor de decision¶
Regla documental oficial:
- todo dato util para indicadores, toma de decisiones, patrones, tendencias, alertas o aprendizaje futuro debe contemplar historico desde el diseno
- la historizacion debe contemplarse cuando el dato permita medir evolucion, detectar patrones, explicar tendencias, generar alertas, mejorar decisiones comerciales o alimentar aprendizaje futuro
- no se trata de guardar todo sin limite
- se trata de disenar historicos livianos, trazables y utiles
Aplicacion minima documentada para SOURCE-002 y sus capas futuras:
- cambios de costo
- cambios de precio y listas
- cambios de
IVA - cambios de margen y descuento
- quiebres de stock
- recuperaciones de stock
- ingresos de mercaderia
- snapshots diarios utiles
4. Capas futuras recomendadas¶
Sin definir tablas reales ni SQL final, la separacion conceptual recomendada
es:
- producto maestro vigente
- stock actual liviano
- stock snapshot diario
- precios vigentes
- historial de precios por cambio
- costos vigentes
- historial de costos por cambio
- impuestos vigentes
- margenes y descuentos vigentes
- politica comercial vigente
- promociones vigentes
- estrategia comercial vigente
- actividad comercial vigente
- historial liviano de impuestos cuando cambien y aporten valor de decision
- historial liviano de margenes y descuentos cuando cambien y aporten valor de decision
- proveedor y marca
- logistica / palletizado
- volumetria / logistica
- auditoria de extraccion
- eventos o historial por cambio
5. Reglas de frontera¶
Reglas que deben quedar explicitas:
SOURCE-002Dno debe traer precios, costos, impuestos, margenes, descuentos, proveedor ni palletizadoSOURCE-002Dexiste solo para stock actual liviano e intradiarioSOURCE-002Cpuede guardar stock de cierre y, opcionalmente, algunos valores economicos resumidos de cierreSOURCE-002Cno debe absorber el historico fino de listas, costos, impuestos, margenes o descuentos- precios, costos, impuestos, margenes y descuentos deben tener trazabilidad por cambio o, en su defecto, un snapshot liviano claramente separado
- quiebres, recuperaciones e ingresos de stock deben contemplar trazabilidad historica cuando sean utiles para indicadores, tendencias, alertas o decisiones de abastecimiento
- producto maestro debe guardar solo valores vigentes de lectura rapida
- proveedor, marca y logistica pueden vivir junto al maestro si se mantienen como atributos relativamente lentos
Cod Proveedordebe preservarse como identificador de negocio del proveedor asociado alSKUProveedordebe preservarse como nombre legible o razon social asociado alSKU- no debe usarse solo el texto de
Proveedorcomo clave analitica Marcadebe preservarse como atributo comercial asociado alSKU- si luego aparece codigo de marca, debera preservarse junto con
Marca - la auditoria de extraccion debe registrar fuente, fecha, version, frecuencia y evidencia de captura
- las listas de precios
L1..L9no deben modelarse como columnas fijas en la capa destino principal - la capa economica futura debe tratarlas como filas hijas normalizadas por
SKU+lista_codigo
6. Frecuencias documentales recomendadas¶
- lectura base o refresh gobernado: producto maestro vigente, proveedor, marca, logistica, precios vigentes, costos vigentes, impuestos vigentes y margenes vigentes
- alta frecuencia:
stock actual liviano via
SOURCE-002D - una vez por dia:
stock snapshot diario via
SOURCE-002C - por cambio: historial de precios, historial de costos, historial de impuestos, historial de margenes y descuentos cuando aplique, y eventos o historial economico
- por corrida: auditoria de extraccion
7. Matriz de mapeo conceptual¶
| Campo origen | Alias en autoridad | Grupo | Capa futura recomendada | Frecuencia | Motivo |
|---|---|---|---|---|---|
SKU |
SKU |
identidad | producto maestro vigente | gobernada / por cambio | clave estable del item |
[name] |
Articulo |
identidad | producto maestro vigente | gobernada / por cambio | descripcion de lectura rapida |
Estado |
Estado |
vigencia | producto maestro vigente | gobernada / por cambio | define si el item participa de lecturas operativas |
Clasificador |
Estrategico |
estrategia comercial | estrategia comercial vigente | gobernada / por cambio | atributo comercial visible que no debe confundirse con stock, costo ni precio base |
Devolucion |
Acepta Devolucion |
politica comercial | politica comercial vigente | gobernada / por cambio | lectura operativa inmediata de devolucion por SKU |
Category |
Category |
clasificacion | producto maestro vigente | gobernada / por cambio | clasificacion comercial base |
SubCategory |
SubCategoria |
clasificacion | producto maestro vigente | gobernada / por cambio | detalle de clasificacion util para mix |
MARCA |
Marca |
marca | proveedor y marca | gobernada / por cambio | dimension comercial mas estable que stock o precio |
Proveedor |
Cod Proveedor |
proveedor | proveedor y marca | gobernada / por cambio | identificador del proveedor vigente |
RazonSocial |
Proveedor |
proveedor | proveedor y marca | gobernada / por cambio | nombre legible del proveedor vigente |
Stock |
Stock |
stock | stock actual liviano | cada 10 minutos o frecuencia futura definida |
cambia seguido y debe leerse rapido |
Stock / NULLIF(Unidades_Bulto, 0) |
Stock en Bultos |
stock | stock actual liviano | cada 10 minutos o frecuencia futura definida |
ayuda a operacion sin cargar toda la capa economica |
Unidades_bulto |
Unidades_x_Bulto |
conversion | logistica / palletizado | gobernada / por cambio | conversion base para bultos y palletizado |
Stock |
Stock |
stock historico | stock snapshot diario | diaria | valor de cierre comparable en el tiempo |
Stock / NULLIF(Unidades_Bulto, 0) |
Stock en Bultos |
stock historico | stock snapshot diario | diaria | lectura de cierre util para abastecimiento |
Stock + timestamps observados futuros |
n/a | eventos de stock | eventos o historial por cambio | por cambio o deteccion | permite detectar quiebres, recuperaciones e ingresos cuando aportan valor de decision |
CostoLista |
CostoListaProveedor |
costos | costos vigentes | gobernada / por cambio | referencia vigente de lista proveedor |
Costo |
Costo |
costos | costos vigentes | gobernada / por cambio | costo unitario neto final a pagar al proveedor luego de descuentos encadenados |
UltCambioCosto |
UltCambioCosto |
costos | historial de costos por cambio | por cambio | fecha critica para trazabilidad y vigencia |
DiasSinActCosto |
DiasSinActCosto |
actividad comercial / historico util | actividad comercial vigente | diaria / derivada | indicador de recencia de costo; no debe confundirse con el costo vigente |
CostoLista, Costo, UltCambioCosto |
CostoListaProveedor, Costo, UltCambioCosto |
costos historicos | historial de costos por cambio | por cambio | evita perder cambios al sobrescribir el vigente |
Price_L1..Price_L9 |
PrecioL1..PrecioL9 |
precios | precios vigentes | gobernada / por cambio | listas activas para lectura comercial actual |
Price_OF |
PrecioOfertaFinal |
promociones | promociones vigentes | gobernada / por cambio | precio promocional vigente; no equivale a precio base ni a lista normal |
[Costo] * (1 + [Markup] / 100) |
PrecioListaNeto |
precios derivados | precios vigentes | gobernada / por cambio | lectura rapida del precio base neto |
[Costo] * (1 + [Markup] / 100) + ... |
PrecioListaFinal |
precios derivados | precios vigentes | gobernada / por cambio | precio final de referencia |
Price_L1 * (1 - ABS(MaxDctoArticulo) / 100) |
PrecioCDescPermitidoFinal |
politica comercial | politica comercial vigente | gobernada / por cambio | precio comercial calculado a partir de L1 y la regla de descuento permitido |
Price_L1..Price_L9, Price_OF, PrecioListaFinal |
PrecioL1..PrecioL9, PrecioOfertaFinal, PrecioListaFinal |
precios historicos | historial de precios por cambio | por cambio | preserva vigencia real y comparabilidad temporal |
tax |
AlicuotaIVA |
impuestos | impuestos vigentes | gobernada / por cambio | impuesto vigente del item |
expresiones con factor_iva |
IVAPListaFinal, IVAPrecioL1..IVAPrecioL9 |
impuestos | impuestos vigentes | gobernada / por cambio | separa carga fiscal de precio y costo |
expresiones con factor_iva |
PrecioNetoL1..PrecioNetoL9 |
impuestos / netos | impuestos vigentes | gobernada / por cambio | mantiene lectura neta sin recalculo constante |
tax, IVAPListaFinal, IVAPrecioL1..IVAPrecioL9, PrecioNetoL1..PrecioNetoL9 |
mismos aliases | impuestos historicos | historial liviano de impuestos por cambio | por cambio cuando aporte valor de decision | permite explicar tendencias, alertas o decisiones ante cambios fiscales |
Markup |
Markup |
margen | margenes y descuentos vigentes | gobernada / por cambio | margen general visible actual |
Margen_L1..Margen_L9 |
MargenL1..MargenL9 |
margen | margenes y descuentos vigentes | gobernada / por cambio | margenes por lista que no deben vivir en stock |
descCompra1..3 |
Dcto Compra 1..3 |
descuento | margenes y descuentos vigentes | gobernada / por cambio | descuentos de compra vigentes que se aplican en cadena sobre el neto anterior |
MaxDctoArticulo |
Descuento Permitido |
politica comercial | politica comercial vigente | gobernada / por cambio | regla comercial vigente del item; no es descuento de compra |
Markup, Margen_L1..Margen_L9, descCompra1..3, MaxDctoArticulo |
Markup, MargenL1..MargenL9, Dcto Compra 1..3, Descuento Permitido |
margen y descuento historicos | historial liviano de margenes y descuentos por cambio | por cambio cuando aporte valor de decision | ayuda a entender decisiones comerciales, patrones y aprendizaje futuro |
CantVtaMin |
CantVtaMin |
politica comercial | politica comercial vigente | gobernada / por cambio | restriccion minima de venta aplicada sobre el SKU |
CntVentaAgrupada |
CantVentaAgrupada |
politica comercial | politica comercial vigente | gobernada / por cambio | regla comercial de agrupacion de venta asociada al SKU |
UnidadMedida |
UnidadMedida |
volumetria / logistica | volumetria / logistica | gobernada / por cambio | contexto fisico del item para compras, deposito y distribucion |
Peso |
PesoxUnidad |
volumetria / logistica | volumetria / logistica | gobernada / por cambio | dato fisico de baja frecuencia util para capacidad y rentabilidad logistica |
Volumen |
VolumenxUnidad |
volumetria / logistica | volumetria / logistica | gobernada / por cambio | dato fisico de baja frecuencia util para cubicaje |
BasePallet, AlturaPallet |
BasePallet, AlturaPallet |
volumetria / logistica | volumetria / logistica | gobernada / por cambio | estructura de pallet relativamente estable |
calculos con BasePallet, AlturaPallet, Unidades_bulto, Peso, Volumen |
CantUnidxPallet, CantBultosxPallet, PesoxPalletkg, VolumenxPalletm3 |
volumetria / logistica derivada | volumetria / logistica | gobernada / por cambio | mejor separados del maestro economico y del stock; sirven para capacidad, pallets y distribucion |
PLU |
PLU Articulo |
identificacion comercial | producto maestro vigente | gobernada / por cambio | identificador auxiliar estable |
PluBulto |
[PLU Bulto] |
identificacion comercial | producto maestro vigente | gobernada / por cambio | identificador auxiliar de empaque |
UltimaCompra |
Fecha de Ultima Compra |
actividad comercial / historico util | actividad comercial vigente | diaria / por refresh gobernado | lectura rapida del estado comercial reciente |
UltimaVenta |
UltVenta |
actividad comercial / historico util | actividad comercial vigente | diaria / por refresh gobernado | lectura rapida del movimiento reciente |
DiasSinComprar, DiasSinVender |
DiasSinComprar, DiasSinVender |
actividad comercial / historico util | actividad comercial vigente | diaria / derivada | ayudan a observar recencia comercial sin exigir historia completa en el maestro |
| metadata de corrida futura | n/a | auditoria | auditoria de extraccion | cada corrida | deja trazabilidad de origen, hora, volumen y estado |
| cambios detectados entre corridas | n/a | eventos | eventos o historial por cambio | por cambio | permite explicar saltos de stock, precio, costo, vigencia, quiebres, recuperaciones o ingresos |
8. Interpretacion por capa¶
Producto maestro vigente¶
Debe concentrar:
- identidad estable del
SKU - descripcion y estado vigente
- clasificacion y atributos comerciales lentos
- fechas operativas utiles para lectura rapida
- identificadores auxiliares como
PLU
No debe intentar conservar toda la historia economica.
Stock actual liviano¶
Debe concentrar:
SKU- stock unidades
- stock bultos si sale barato
- timestamp de observacion
- metadata minima de extraccion
No debe traer precios, costos, impuestos, margenes ni descuentos.
Stock snapshot diario¶
Debe concentrar:
SKU- foto de cierre
- stock unidades
- stock bultos si aplica
- contexto minimo de producto
- opcionalmente un pequeno resumen economico de cierre
No debe absorber el historico fino de cambios economicos intradiarios.
Debe contemplarse como historico util cuando ayude a medir evolucion, detectar patrones o explicar tendencias de disponibilidad.
Precios vigentes e historial de precios¶
La lectura rapida necesita precios vigentes visibles.
La trazabilidad necesita un historial por cambio para:
- listas
L1..L9 - precio final
- precio oferta
- precio con descuento permitido
- cambios de
IVAy netos cuando afecten lectura comercial o fiscal
Decision documental especifica:
- no usar
PrecioL1..PrecioL9como diseno estructural principal de destino - modelar cada lista como entidad repetible por producto
- permitir
L10,L11o futuras listas sin cambio de estructura - el ejemplo real documentado para
L7enSKU 0135ySKU 0128confirma queMargenLn,PrecioLn,IVAPrecioLnyPrecioNetoLnson repeticiones del mismo bloque economico - usar
JSONo payload agregado solo como cache, vista materializada o auditoria secundaria, no como fuente principal de verdad analitica
Documento relacionado:
SOURCE-002-ECONOMIC-LAYER.md
Costos vigentes e historial de costos¶
La lectura operativa necesita costo vigente.
La comparabilidad temporal necesita historial por cambio con fecha efectiva.
Semantica documental obligatoria:
CostoListaProveedordebe leerse como precio de lista del proveedor antes de descuentosDcto Compra 1..3deben leerse como descuentos de compra encadenadosCostodebe leerse como costo unitario neto final a pagar al proveedor- esta semantica vive en
SOURCE-002-ECONOMIC-LAYER.mdy no implica implementacion
Si cambios de costo, impuesto, margen o descuento aportan valor para indicadores, alertas o aprendizaje, deben contemplar historico desde el diseno.
Impuestos vigentes¶
Los componentes fiscales no deberian quedar mezclados solamente dentro de precios finales.
Deben poder leerse como bloque propio vigente.
Margenes y descuentos vigentes¶
Markup, margenes por lista y descuentos de compra deben mantenerse fuera del
stock y fuera del snapshot liviano.
Si luego se requiere historia fina, debera abrirse un historial por cambio separado.
La decision de abrirlo no depende de guardar todo, sino de si el cambio aporta valor de decision.
Politica comercial vigente¶
Debe concentrar reglas comerciales vigentes que cuelgan de tenant_id + SKU
y no deben confundirse con costo, precio base ni stock.
Campos explicitamente incluidos:
Descuento PermitidoPrecioCDescPermitidoFinalAcepta DevolucionCantVtaMinCantVentaAgrupada
Lectura correcta:
Descuento Permitidoes una regla comercial, no un descuento de compraPrecioCDescPermitidoFinales un precio comercial calculado por politica y no el precio base del productoAcepta Devolucionexpresa una condicion comercial delSKUCantVtaMinyCantVentaAgrupadadeben leerse como reglas de venta, aunque tambien impacten operacion
Promociones vigentes¶
Debe separar precios promocionales de listas, costo y stock.
Campo explicito:
PrecioOfertaFinal
Lectura correcta:
PrecioOfertaFinalpertenece al dominio promociones- no debe mezclarse con
PrecioListaFinal - conviene historizarlo por cambio cuando sirva para explicar conversion, rotacion o acciones comerciales
Estrategia comercial vigente¶
Debe concentrar marcaciones estrategicas relativamente lentas del SKU.
Campo explicito:
Estrategico
Lectura correcta:
Estrategicono es vigencia tecnica, costo ni precio- es una clasificacion de foco comercial asociada al
SKU
Actividad comercial vigente¶
Debe concentrar fechas e indicadores de recencia comercial que cuelgan de
tenant_id + SKU.
Campos explicitamente incluidos:
Fecha de Ultima CompraUltVentaDiasSinComprarDiasSinVenderDiasSinActCosto
Lectura correcta:
- son historicos utiles o indicadores de recencia
- no deben confundirse con stock actual
- no deben confundirse con costo vigente ni con precio base
Proveedor y marca¶
Estos datos pueden vivir junto a la capa maestra o en una dimension cercana, pero conceptualmente no pertenecen a la sync de stock liviano.
Regla documental obligatoria:
- ambos siguen dependiendo del mismo
tenant_id + SKU - proveedor no debe reidentificarse solo por nombre legible
- marca no debe separarse del
SKUcomo hecho independiente sin relacion de producto
Volumetria / logistica¶
Conviene tratarlos como atributos fisicos relativamente lentos.
No deberian viajar en cada capa intradiaria.
Campos explicitamente incluidos:
Unidades_x_BultoStock en BultosBasePalletAlturaPalletCantBultosxPalletCantUnidxPalletPesoxUnidadVolumenxUnidadPesoxPalletkgVolumenxPalletm3UnidadMedidaCantVtaMinCantVentaAgrupada
Utilidad documental:
- capacidad de deposito y cubicaje
- planificacion de pallets y bultos
- compras y reposicion por empaque minimo
- distribucion y carga
- analisis de rentabilidad logistica
Cuando conviene historizar cambios volumetricos:
- cuando cambia
UnidadMedida,Unidades_x_Bulto, peso, volumen o palletizado - cuando el cambio altera capacidad de deposito, costo logistico o politica de compra / distribucion
- cuando negocio necesita explicar un cambio de rentabilidad o abastecimiento
Auditoria de extraccion¶
Toda persistencia futura deberia poder explicar:
- cuando se extrajo
- desde que autoridad
- con que frecuencia
- con que version o evidencia de query
- cuantos registros observo
Eventos o historial por cambio¶
Debe concentrar, cuando negocio lo necesite:
- quiebres de stock
- recuperaciones de stock
- ingresos de mercaderia
- cambios relevantes de vigencia economica
Su rol es explicar patrones, tendencias, alertas y decisiones, no duplicar todo el origen.
9. Relacion con SOURCE-002C y SOURCE-002D¶
Relaciones oficiales:
SOURCE-002: autoridad madre de lectura de negocioSOURCE-002C: capa futura para historia diaria de stock y cierre resumidoSOURCE-002D: capa futura para stock actual liviano e intradiario
Lectura correcta:
SOURCE-002Dno debe crecer hasta parecerse al maestro completoSOURCE-002Cno debe cargarse con toda la historia economica por cambio- el maestro no debe absorber toda la historia de precios o costos
10. Decision documental que queda cerrada¶
Queda cerrada la decision conceptual de que el futuro diseno Postgres para
SOURCE-002 debe nacer por capas y no como una tabla unica pesada.
Queda abierto, para una etapa posterior:
- decidir nombres finales de tablas
- decidir claves tecnicas
- decidir indices
- decidir si impuestos y margenes se separan en entidades propias o en un bloque economico intermedio
- decidir si algunos snapshots economicos de cierre se guardan dentro de
SOURCE-002C
11. Confirmaciones de alcance¶
- no se implementaron tablas
- no se diseno
SQLreal - no se crearon scripts
- no se crearon
APIs - no se crearon servicios
- no se toco runtime
- no se toco
VPS - no se toco
Docker - no se toco
OpenClaw - no se realizaron conexiones reales
- solo se cerro documentacion conceptual futura
12. Matriz integral de cobertura del SELECT¶
Conteo oficial del SELECT autoridad:
81campos devueltos81campos clasificados documentalmente0campos sin capa futura asignada0campos fuera de la relacion canonicatenant_id + SKU
12.1 Producto, clasificacion y relaciones comerciales¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
SKU |
RTRIM([SKU]) |
identificador operativo del producto | producto maestro vigente | vigente | si | clave canonica del dominio; preservar trimming sin perder valor original |
Articulo |
RTRIM([name]) |
descripcion comercial legible del SKU |
producto maestro vigente | vigente | si | texto visible; conviene mantener higiene de espacios |
Marca |
RTRIM(MARCA) |
atributo comercial de marca del SKU |
proveedor y marca | vigente | si | atributo del SKU; si aparece codigo de marca, preservarlo junto con el texto |
Estado |
RTRIM([Estado]) |
vigencia funcional del producto | producto maestro vigente | vigente | si | la autoridad ya filtra ACTIVO; igual debe preservarse como estado observado |
Acepta Devolucion |
RTRIM(Devolucion) |
politica comercial de devolucion del producto | politica comercial vigente | vigente | si | texto de negocio; no debe confundirse con stock ni con vigencia tecnica |
Estrategico |
RTRIM([Clasificador]) |
clasificacion comercial o estrategica del producto | estrategia comercial vigente | vigente | si | atributo comercial lento; conviene controlar catalogo de valores |
PLU Articulo |
RTRIM([PLU]) |
identificador auxiliar del articulo | producto maestro vigente | vigente | si | identificador secundario; preservar como atributo y no como clave primaria |
[PLU Bulto] |
RTRIM([PluBulto]) |
identificador auxiliar del bulto | producto maestro vigente | vigente | si | el alias incluye corchetes en origen; conviene normalizar solo en capas futuras, no en la autoridad |
Cod Proveedor |
RTRIM([Proveedor]) |
identificador de negocio del proveedor asociado al SKU |
proveedor y marca | vigente | si | no reemplazar por Proveedor; es la referencia comercial estable |
Proveedor |
RTRIM([RazonSocial]) |
nombre o razon social legible del proveedor vigente | proveedor y marca | vigente | si | no usar el texto solo como clave analitica |
Category |
RTRIM([Category]) |
categoria comercial del producto | producto maestro vigente | vigente | si | clasificacion textual; puede requerir normalizacion futura |
SubCategoria |
RTRIM([SubCategory]) |
subcategoria comercial del producto | producto maestro vigente | vigente | si | depende del mismo SKU; puede requerir normalizacion futura |
12.2 Stock e inventario¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
Stock |
CAST(Stock AS INT) |
stock actual observado en unidades | stock actual liviano | vigente | si | lectura viva del SKU; ademas debe poder derivar snapshot diario e historia de eventos |
Stock en Bultos |
CAST(Stock / NULLIF(Unidades_Bulto, 0) AS INT) |
equivalencia operativa del stock expresada en bultos | stock actual liviano | vigente | si | depende de Unidades_x_Bulto; usa NULLIF y truncamiento entero, por lo que requiere cuidado interpretativo |
12.3 Costos, impuestos, descuentos y precios base¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
CostoListaProveedor |
CAST(ROUND([CostoLista], 3) AS DECIMAL(18,3)) |
precio de lista proveedor antes de descuentos | costos vigentes | vigente | si | semantica cerrada en SOURCE-002-ECONOMIC-LAYER.md |
Dcto Compra 1 |
CAST([descCompra1] * +1 AS VARCHAR) + '%' |
primer descuento de compra vigente | margenes y descuentos vigentes | vigente | si | la autoridad lo publica como texto con %; la capa futura debera conservar tambien valor numerico normalizado |
Dcto Compra 2 |
CAST([descCompra2] * +1 AS VARCHAR) + '%' |
segundo descuento de compra vigente | margenes y descuentos vigentes | vigente | si | descuento encadenado; mismo cuidado de normalizacion numerica |
Dcto Compra 3 |
CAST([descCompra3] * +1 AS VARCHAR) + '%' |
tercer descuento de compra vigente | margenes y descuentos vigentes | vigente | si | descuento encadenado; mismo cuidado de normalizacion numerica |
Costo |
CAST(ROUND([Costo], 3) AS DECIMAL(18,3)) |
costo unitario neto final a pagar al proveedor | costos vigentes | vigente | si | costo ya neto final observado luego de descuentos |
Markup |
CAST(ROUND([Markup], 3) AS DECIMAL(18,3)) |
markup general vigente del producto | margenes y descuentos vigentes | vigente | si | redondeado a 3 decimales; historizar si cambia y aporta valor de decision |
PrecioListaNeto |
CAST(ROUND([Costo] * (1 + [Markup] / 100), 3) AS DECIMAL(18,3)) |
precio base neto antes de IVA |
precios vigentes | vigente | si | derivado de costo y markup; no es campo crudo del ERP |
AlicuotaIVA |
CAST(ROUND([tax], 1) AS DECIMAL(18,1)) |
alicuota de IVA vigente del producto |
impuestos vigentes | vigente | si | componente fiscal base; historizar si cambia y aporta valor de decision |
IVAPListaFinal |
CAST(ROUND(([Costo] * (1 + [Markup] / 100)) * ([tax] / 100), 3) AS DECIMAL(18,3)) |
componente IVA del precio lista final |
impuestos vigentes | vigente | si | derivado calculado; depende de costo, markup e impuesto |
PrecioListaFinal |
CAST(ROUND([Costo] * (1 + [Markup] / 100) + ([Costo] * (1 + [Markup] / 100)) * ([tax] / 100), 3) AS DECIMAL(18,3)) |
precio lista final con impuesto incluido | precios vigentes | vigente | si | derivado calculado; referencia comercial completa |
Descuento Permitido |
CAST([MaxDctoArticulo] * +1 AS VARCHAR) + '%' |
maximo descuento comercial permitido para el articulo | politica comercial vigente | vigente | si | la autoridad lo publica como porcentaje textual; no debe confundirse con descuento de compra |
PrecioCDescPermitidoFinal |
CAST([Price_L1] * (1 - (ABS([MaxDctoArticulo]) / 100)) AS DECIMAL(10,3)) |
precio final de L1 aplicando descuento permitido |
politica comercial vigente | vigente | si | depende de Price_L1; es precio comercial calculado, no precio base |
PrecioOfertaFinal |
CAST(ROUND([Price_OF], 3) AS DECIMAL(18,3)) |
precio promocional u oferta vigente | promociones vigentes | vigente | si | precio especial vigente; historizar por cambio si negocio lo necesita |
12.4 Bloque repetible de listas L1..L9¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
MargenL1 |
CAST(ROUND([Margen_L1], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L1 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L1 |
PrecioL1 |
CAST(ROUND([Price_L1], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L1 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL1 |
CAST(ROUND([Price_L1] - ([Price_L1] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L1 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L1 |
PrecioNetoL1 |
CAST(ROUND([Price_L1] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L1 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL1 |
MargenL2 |
CAST(ROUND([Margen_L2], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L2 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L2 |
PrecioL2 |
CAST(ROUND([Price_L2], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L2 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL2 |
CAST(ROUND([Price_L2] - ([Price_L2] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L2 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L2 |
PrecioNetoL2 |
CAST(ROUND([Price_L2] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L2 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL2 |
MargenL3 |
CAST(ROUND([Margen_L3], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L3 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L3 |
PrecioL3 |
CAST(ROUND([Price_L3], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L3 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL3 |
CAST(ROUND([Price_L3] - ([Price_L3] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L3 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L3 |
PrecioNetoL3 |
CAST(ROUND([Price_L3] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L3 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL3 |
MargenL4 |
CAST(ROUND([Margen_L4], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L4 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L4 |
PrecioL4 |
CAST(ROUND([Price_L4], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L4 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL4 |
CAST(ROUND([Price_L4] - ([Price_L4] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L4 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L4 |
PrecioNetoL4 |
CAST(ROUND([Price_L4] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L4 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL4 |
MargenL5 |
CAST(ROUND([Margen_L5], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L5 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L5 |
PrecioL5 |
CAST(ROUND([Price_L5], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L5 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL5 |
CAST(ROUND([Price_L5] - ([Price_L5] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L5 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L5 |
PrecioNetoL5 |
CAST(ROUND([Price_L5] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L5 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL5 |
MargenL6 |
CAST(ROUND([Margen_L6], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L6 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L6 |
PrecioL6 |
CAST(ROUND([Price_L6], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L6 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL6 |
CAST(ROUND([Price_L6] - ([Price_L6] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L6 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L6 |
PrecioNetoL6 |
CAST(ROUND([Price_L6] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L6 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL6 |
MargenL7 |
CAST(ROUND([Margen_L7], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L7 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L7 |
PrecioL7 |
CAST(ROUND([Price_L7], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L7 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL7 |
CAST(ROUND([Price_L7] - ([Price_L7] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L7 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L7 |
PrecioNetoL7 |
CAST(ROUND([Price_L7] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L7 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL7 |
MargenL8 |
CAST(ROUND([Margen_L8], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L8 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L8 |
PrecioL8 |
CAST(ROUND([Price_L8], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L8 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL8 |
CAST(ROUND([Price_L8] - ([Price_L8] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L8 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L8 |
PrecioNetoL8 |
CAST(ROUND([Price_L8] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L8 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL8 |
MargenL9 |
CAST(ROUND([Margen_L9], 3) AS DECIMAL(18,3)) |
margen vigente de la lista L9 |
margenes y descuentos vigentes | vigente | si | bloque repetible; normalizar como fila lista_codigo = L9 |
PrecioL9 |
CAST(ROUND([Price_L9], 3) AS DECIMAL(18,3)) |
precio final vigente de la lista L9 |
precios vigentes | vigente | si | no modelar como columna fija en destino principal |
IVAPrecioL9 |
CAST(ROUND([Price_L9] - ([Price_L9] / factor_iva), 3) AS DECIMAL(18,3)) |
componente IVA del precio L9 |
impuestos vigentes | vigente | si | derivado con factor_iva; parte del mismo bloque L9 |
PrecioNetoL9 |
CAST(ROUND([Price_L9] / factor_iva, 3) AS DECIMAL(18,3)) |
precio neto sin IVA de la lista L9 |
precios vigentes | vigente | si | derivado con factor_iva; normalizar junto a PrecioL9 |
12.5 Fechas operativas e historicos utiles¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
Fecha de Ultima Compra |
CONVERT(VARCHAR(10), UltimaCompra, 120) |
ultima fecha conocida de compra del SKU |
actividad comercial vigente | historico util | si | sale como texto yyyy-mm-dd; conviene normalizar a tipo fecha en capas futuras |
UltVenta |
CONVERT(VARCHAR(10), [UltimaVenta], 103) |
ultima fecha conocida de venta del SKU |
actividad comercial vigente | historico util | si | sale como texto dd/mm/yyyy; requiere normalizacion de formato para comparabilidad |
UltCambioCosto |
CONVERT(VARCHAR(10), [UltCambioCosto], 103) |
ultima fecha conocida de cambio de costo | historial de costos por cambio | historico util | si | fecha clave para vigencia; tambien requiere normalizacion de formato |
DiasSinComprar |
CAST([DiasSinComprar] AS INT) |
dias transcurridos desde la ultima compra | actividad comercial vigente | historico util | si | indicador derivado de recencia; no reemplaza la fecha base |
DiasSinVender |
CAST([DiasSinVender] AS INT) |
dias transcurridos desde la ultima venta | actividad comercial vigente | historico util | si | indicador derivado de recencia; no reemplaza la fecha base |
DiasSinActCosto |
CAST([DiasSinActCosto] AS INT) |
dias transcurridos desde la ultima actualizacion de costo | actividad comercial vigente | historico util | si | indicador de recencia de costo; depende de conservar UltCambioCosto |
12.6 Politica comercial y volumetria / logistica¶
| Campo devuelto | Origen / calculo | Significado de negocio | Capa futura asignada | Tipo | Relacion por tenant_id + SKU |
Observacion |
|---|---|---|---|---|---|---|
CantVtaMin |
CAST(CntVentaMin AS INT) |
cantidad minima de venta del producto | politica comercial vigente | vigente | si | restriccion comercial relativamente lenta que no debe leerse como stock |
CantVentaAgrupada |
CAST([CntVentaAgrupada] AS INT) |
cantidad agrupada de venta o empaque comercial | politica comercial vigente | vigente | si | conviene validar semantica operativa exacta cuando se implemente |
UnidadMedida |
RTRIM([UnidadMedida]) |
unidad de medida del producto | volumetria / logistica | vigente | si | texto relativamente lento; puede requerir catalogo normalizado |
PesoxUnidad |
CAST(ROUND([Peso], 3) AS DECIMAL(18,3)) |
peso unitario del producto | volumetria / logistica | vigente | si | dato fisico base para calculos posteriores |
VolumenxUnidad |
CAST(ROUND([Volumen], 3) AS DECIMAL(18,3)) |
volumen unitario del producto | volumetria / logistica | vigente | si | dato fisico base para calculos posteriores |
BasePallet |
CAST([BasePallet] AS INT) |
cantidad de bultos o unidades base por pallet segun layout | volumetria / logistica | vigente | si | atributo estructural del palletizado |
AlturaPallet |
CAST([AlturaPallet] AS INT) |
cantidad de niveles o altura operativa del pallet | volumetria / logistica | vigente | si | atributo estructural del palletizado |
Unidades_x_Bulto |
CAST(Unidades_bulto AS INT) |
conversion de unidades por bulto | volumetria / logistica | vigente | si | base de conversion para bultos y pallet; critica para Stock en Bultos |
CantUnidxPallet |
CAST(([BasePallet] * [AlturaPallet]) * [Unidades_bulto] AS INT) |
cantidad total de unidades por pallet | volumetria / logistica | vigente | si | derivado de estructura de pallet y bulto |
CantBultosxPallet |
CAST([BasePallet] * [AlturaPallet] AS INT) |
cantidad total de bultos por pallet | volumetria / logistica | vigente | si | derivado simple de base por altura |
PesoxPalletkg |
CAST((([BasePallet] * [AlturaPallet]) * [Unidades_bulto]) * [Peso] AS DECIMAL(18,3)) |
peso total estimado del pallet | volumetria / logistica | vigente | si | derivado fisico; depende de consistencia de peso y estructura |
VolumenxPalletm3 |
CAST((([BasePallet] * [AlturaPallet]) * [Unidades_bulto]) * [Volumen] AS DECIMAL(18,3)) |
volumen total estimado del pallet | volumetria / logistica | vigente | si | derivado fisico; depende de consistencia de volumen y estructura |
13. Cobertura funcional verificada¶
Cobertura explicitamente confirmada:
- producto:
SKU,Articulo,PLU Articulo,[PLU Bulto] - marca:
Marca - proveedor:
Cod Proveedor,Proveedor - categoria / subcategoria:
Category,SubCategoria - estado / vigencia / gobernanza:
Estado - estrategia comercial:
Estrategico - politica comercial:
Acepta Devolucion,Descuento Permitido,PrecioCDescPermitidoFinal,CantVtaMin,CantVentaAgrupada - stock:
Stock - stock en bultos:
Stock en Bultos - costos:
CostoListaProveedor,Costo,UltCambioCosto - descuentos de compra:
Dcto Compra 1,Dcto Compra 2,Dcto Compra 3 - listas de precios:
PrecioL1..PrecioL9 IVA:AlicuotaIVA,IVAPListaFinal,IVAPrecioL1..IVAPrecioL9- margenes:
Markup,MargenL1..MargenL9 - promociones:
PrecioOfertaFinal - inventario:
Stock,Stock en Bultos, mas su proyeccion documental a snapshot diario y eventos de inventario - volumetria / logistica:
Unidades_x_Bulto,UnidadMedida,PesoxUnidad,VolumenxUnidad,BasePallet,AlturaPallet,CantBultosxPallet,CantUnidxPallet,PesoxPalletkg,VolumenxPalletm3 - actividad comercial:
Fecha de Ultima Compra,UltVenta,DiasSinComprar,DiasSinVender,DiasSinActCosto - auditoria / historicos utiles: fechas de ultimo evento, dias de recencia, historia por cambio recomendada para costo, precio,
IVA, margen, descuento, promociones y cambios volumetricos cuando aporten valor - auditoria de extraccion: no aparece como campo del
SELECT; queda asignada a la capa futuraauditoria de extraccionpor corrida
Cobertura documental SOURCE-002: 100% de campos del SELECT clasificados.