YOM Docs

Untitled

Untitled

Untitled

Sobrescrituras

Las Sobrescrituras son configuraciones que permiten reemplazar campos y configuraciones para Productos dentro de Segmentos particulares en el sistema de YOM. Permite ajustar precios y condiciones de venta a un grupo de Comercios previamente segmentados. Esto facilita la personalización de precios y descuentos según diferentes criterios y períodos de tiempo.

¿Qué objetivo tienen las sobrescituras?

Permitir que un Comercio vea de forma correcta y personalizada un catalogo de Productos. Esto implica que el comercio debe ver solo los productos que tiene asignados al igual que con precios y condiciones comerciales correctas.

Consideracion de diseño importante

Si bien el objeto de Producto tambien contiene informacion de precio y si el producto se encuentra habilitado o no. se tomo la decision de diseño de que para todos los clientes(CPG) y todos los comercios estas caracteristicas (precio y habilitado) siempre deberian venir desde un override. Esto con el objetivo que el precio y la habilitacion sea responsabilidad de solo un modelo.

¿Porque y como se usan las sobrescituras?

El problema de que un comercio vea el catalogo bien es un problema que cada CPG resuelve de forma particular y con reglas de negocio variadas. La solucion de fuerza bruta a este problema es guardar el par (producto, comercio) para cada producto y comercio. si bien esto es una solucion correcta, produce una cantidad gigante de datos, por lo que es necesario usar una solucion mas eficiente que serian las sobreescrituras. En este caso se guardan dos pares de datos criticos (producto, segmento) que corresponde a la sobreescritura y (segmento, comercio) que corresponde al modelo de usersegments. De esta forma si dos comercios comparten segmentos van a ver el mismo catalogo y no necesario duplicar la informacion de productos. Esto permite reducir el tamaño de datos guardados en varios ordenes de magnitud.

Un detalle importante es que no es necesario que todos los productos tengan sobrescrituras para un segmento, y que un comercio puede pertenecer a varios segmentos. en caso de que un comercio tenga un producto modificado por dos segmentos, estas sobreescrituras se aplican en orden de prioridad mas alta a mas baja al momento de consultar el catalogo. aplicar una sobreescritura consiste en modificar los campos que se encuetran en Override, al valor de la sobrescritura que se esta aplicando. Si la sobreescritura no contien un campo, no se modifica. de forma similar el campo enabled de overrides determina si un producto esta habilitado o no. Un producto esta habilitado si el override de menor prioridad, tiene como valor true, si tiene false el producto no se ve para ese comercio.

Para asegurar que todos los productos esten habilitados y tengan precio por override se estila crear un segmento base, este es un segmento al que todos los comercios pertenecen, en este segmento base se crea una sobrescritura por producto. esta sobrescritura se caracterisa por tener el campo enabled con valor false y una prioridad con un valor alto (es decir los otros overrides sobreescriben el base), el valor que se suele usar para esto es 10000. tambien se le suele poner un precio de 99999 pero eso es algo que ese hacer para que sea mas facil encontrar algun error.

Ejemplos de negocio

Caso lista unica de precio:

si un cliente tiene una lista de precios que se usa para todos los comercios. Se van a tener dos segmentos: el segmento base y el segmento que corresponde a la lista de precio unica. Todos los comercios van a tener asignados estos dos segmentos. Y en el segmento de lista unica se van a tener un override para cada producto (si la lista de precio no incluye un producto el override base va a apagarlo).

Casos multiples listas de precio:

un comercio una lista: esto ocurre cuando un comercio tiene una unica lista de precio, esto puede ocurrir por precios regionales, por condiciones comerciales entre otros. En este caso si existen N listas de precios, existen N+1 segmentos, el segmento base, y un segmento por lista de precio. cada comercio tiene dos segmentos, el segmento base y uno de los otros segmentos. En este caso puede que no todos los productos tengan override, debido a que existen productos que son exlusivos a ciertas regiones.

Un comercio con múltiples listas de precio: Esta situación ocurre cuando la segmentación de precios varía por categoría, o cuando existen restricciones para vender ciertos productos a un comercio (por ejemplo, alcohol). A continuación se presentan varios ejemplos

Restricción de ventas a ciertos productos: Tomando el ejemplo de alcoholes y precios regionales, si hay N regiones se tendrían N+2 segmentos: el segmento base, el segmento de los productos restringidos y un segmento por región. El segmento restringido tiene una prioridad más baja (es decir, es el más autoritativo). Para este caso hay dos opciones de cómo manejar el segmento de productos restringidos:

La primera opción es que los productos restringidos estén apagados en los segmentos regionales, y el segmento de productos restringidos tenga un override que los encienda. Alternativamente, se puede hacer que los segmentos regionales enciendan el producto y el segmento restringido lo apague. El caso a usar depende de cómo maneje el cliente estas restricciones. Es importante notar que los overrides del segmento restringido no deberían tener pricing, para evitar modificar el precio.

Listas de precio segun categoria. Este es un caso que puede ocurrir cuando un cliente tiene segmentacion de precios segun categoria. Supongamos que un cliente vende lacteos y jugos. y que las listas de precio se manejan de forma separada. En este caso si hay N listas de precio de lacteos y M listas de precio de jugo. van a existir N + M + 1 segmentos. y cada comercio va a tener 3 segmentos. el segmento base, un segmento de lacteos y un segmento de jugos. los segmentos de lacteos solo van a tener overrides de productos lacteos y segmentos de jugo se van a comportar de forma analoga.

Duración

Cada Sobrescritura tiene un período de validez definido mediante un rango de fechas. Esto permite controlar cuándo estará activa la Sobrescritura en la plataforma según las estrategias comerciales.

Endpoint

GET /api/override

Campos

Override

Campo Tipo Carácter Descripción Ejemplos
productId 📝 Texto 🟢 Requerido Identificador único del Producto.
"SKU001"
segmentId 📝 Texto 🟢 Requerido Identificador único del Segmento.
"SEG001"
productName 📝 Texto 🟡 Recomendado Nombre del Producto.
"Harina de Trigo Integral"
segmentName 📝 Texto 🟡 Recomendado Nombre del Segmento.
"Segmento A"
startDate 📅 Fecha 🟢 Requerido Fecha de inicio para la validez de la Sobrescritura sobre el Segmento.
*La fecha debe estar en formato ISO 8601. "2024-07-01T00:00:00.000Z"
endDate 📅 Fecha 🟢 Requerido Fecha de término para la validez de la Sobrescritura sobre el Segmento.
*La fecha debe estar en formato ISO 8601. "2024-12-31T23:59:59.999Z"
pricing 🔠 Objeto → Pricing 🟡 Recomendado Sobrescrituras relacionadas al precio del Producto.
constraints 🔠 Objeto → Constraint 🟡 Recomendado Sobrescrituras relacionadas a las restricciones de compra para ventas B2B del Producto.
tax 🔠 Objeto → Tax ⚪ Opcional Sobrescritura relacionada a los taxes que se quieran asignar para un segmento determinado
isDisabled 🔘 Bool 🟢 Requerido ¿Está el Producto deshabilitado para venta B2B dentro del Segmento? true

Pricing

La estructura pricing permite definir Sobrescrituras relacionadas al precio del Producto dentro del Segmento.

Campo Tipo Carácter Descripción Ejemplos
pricePerUnit 🔢 Número 🟢 Requerido Precio por unidad del Producto dentro del Segmento (sin impuestos). 10000
operation 📝 Texto 🟡 Recomendado Operación a realizar sobre el pricePerUnit del Producto.
"replace" → reemplazar el precio
"add" → sumar al precio
"multiply" → multiplicar al precio "replace"
"add"
"multiply"
discountType 📝 Texto 🟡 Recomendado Tipo de descuento a aplicar.
”percentage” → Porcentaje del precio base
”amount” → Monto ”percentage”
”amount”
discountList 🔢 Lista de Números 🟡 Recomendado Lista con los valores a aplicar como descuento según los campos y discountType. [0.05, 0102]
steps 🔡 Lista de Objetos → Step 🟡 Recomendado Lista de sobrescrituras sobre el pricePerUnit del Producto según la cantidad a comprar. [{"lowerLimit": 10, "discount": 0.15}, {"lowerLimit": 20, "discount": 0.20}]

Ejemplo

"pricing": {
    "pricePerUnit": 10000,
    "operation": "replace",
    "discountType": "percentage",
    "discountList": [0.05, 0.10],
}

En este ejemplo:

Step

La estructura step permite definir Sobrescritura de precio base según la cantidad de unidades compradas. Busca permitir que mientras más unidades compre el Comercio, mejor sea su precio.

Campo Tipo Carácter Descripción Ejemplos
lowerLimit 🔢 Número 🟢 Requerido Cantidad de unidades mínimas para aplicar el discount sobre el pricePerUnit del Producto según el campo operation. 10
discount 📝 Texto 🟢 Requerido Descuento a aplicar sobre el pricePerUnit luego de alcanzar el lowerLimit.
0.20

Ejemplo

"pricing": {
    "pricePerUnit": 10000,
    "operation": "replace",
    "discountType": "percentage",
    "steps": [
        {
            "lowerLimit": 10,
            "discount": 0.15
        },
        {
            "lowerLimit": 20,
            "discount": 0.20
        }
    ]
}

En este ejemplo:

Constraint

La estructura constraints permite definir sobrescrituras sobre el mismo campo en el objeto del Producto. Esto se usa principalmente para cambiar las unidades mínimas de compra para cierto Segmento.

| --- | --- | --- | --- | --- |

Ejemplo

{
    "minUnit": 12,
    "stepSize": 6
}

En este ejemplo, este segmento pasa a estar obligado a comprar mínimo 12 unidades del Producto, y de agregarlos en grupos de 6.

Tax

La estructura tax permite definir sobrescrituras sobre el mismo campo en el objeto del Producto. Esto se usa principalmente para cambiar el impuesto de compra para cierto Segmento.

| --- | --- | --- | --- | --- |

Ejemplo

{
    "taxCode": "IVA-15",
    "taxRate": 0.15,
    "taxName": "IVA"
}

En este ejemplo, este segmento tendrá un impuesto de 15% en el valor del producto

Respuesta

La respuesta de la configuración de Overrides confirma la aplicación exitosa de las reglas de precio y condiciones para el Producto dentro del Segmento especificado.

Ejemplo de Respuesta

{
  "productName": "Harina de Trigo Integral",
  "productId": "SKU001",
  "segmentName": "Segmento A",
  "segmentId": "SEG001",
  "pricing": {
    "pricePerUnit": 10000,
    "operation": "replace",
    "discountType": "percentage",
    "discountList": [0.05, 0.10],
    "steps": [
        {
            "lowerLimit": 10,
            "discount": 0.15
        },
        {
            "lowerLimit": 20,
            "discount": 0.20
        }
    ]
  },
  "constraints": {
    "minUnit": 12,
    "stepSize": 6
  },
  "tax" :{
    "taxCode": "IVA-15",
    "taxRate": 0.15,
    "taxName": "IVA"
  },
  "isDisabled": false,
  "startDate": "2024-07-01T00:00:00.000Z",
  "endDate": "2024-12-31T23:59:59.999Z"
}

Estos campos aseguran una configuración precisa de precios y condiciones especiales para productos específicos dentro de YOM, permitiendo una gestión eficiente y flexible de la estrategia de precios.