Ir al contenido

Crear Precios

Permite crear o actualizar precios de productos asociados a listas de precios específicas mediante una única petición. Este endpoint está diseñado para operaciones en lote (batch), permitiendo procesar hasta 10,000 registros por petición.

Los precios definen el valor monetario de un producto dentro de una lista de precios determinada, incluyendo configuraciones de descuentos máximos, precios base, mínimos y máximos.

El sistema utiliza una operación MERGE que inserta nuevos registros o actualiza los existentes si ya existe la combinación de product_code y price_list.


POST /api/prices/batch-create

HeaderValorDescripción
Content-Typeapplication/jsonEspecifica que el contenido es JSON

El body debe ser un array de objetos, donde cada objeto representa un precio de producto a crear o actualizar.

ParámetroValorDescripción
Mínimo de items1El array no puede estar vacío
Máximo de items10,000Número máximo de registros por petición

Estos campos son obligatorios en cada objeto del array:

CampoTipoLongitudDescripción
product_codeStringMax 20Código del producto (debe existir en el sistema)
price_listStringMax 20Código de la lista de precios a la que pertenece este precio
priceDecimal(18, 2)Precio del producto en la lista de precios
  • String: Cadena de texto. La longitud indica el máximo de caracteres permitidos.
  • Decimal (p, s): Número decimal donde p es la precisión total (dígitos enteros + decimales) y s es la escala (dígitos decimales).
    • Ejemplo: Decimal (18, 2) permite hasta 16 dígitos enteros y 2 decimales (ej: 9999999999999999.99)

Estos campos pueden incluirse opcionalmente en cada objeto:

CampoTipoLongitudDescripción
maximum_discountDecimal(10, 2)Porcentaje de descuento máximo permitido (primer nivel)
maximum_discount2Decimal(10, 2)Porcentaje de descuento máximo permitido (segundo nivel)
maximum_discount3Decimal(10, 2)Porcentaje de descuento máximo permitido (tercer nivel)
base_priceDecimal(18, 2)Precio base antes de aplicar descuentos o promociones
minimum_priceDecimal(18, 2)Precio mínimo de venta permitido
maximum_priceDecimal(18, 2)Precio máximo de venta permitido
chargesDecimal(18, 2)Valor de cargos adicionales aplicables al precio
factor_descriptionStringMax 20Descripción del factor o unidad de medida asociada al precio

Ventana de terminal
curl -X POST "https://your-api-url/api/prices/batch-create" \
-H "Content-Type: application/json" \
-d '[
{
"product_code": "PROD-001",
"price_list": "LISTA-MAYORISTA",
"price": 15000.00,
"maximum_discount": 10.00,
"base_price": 18000.00,
"minimum_price": 13500.00
},
{
"product_code": "PROD-002",
"price_list": "LISTA-MAYORISTA",
"price": 25000.00
}
]'

Status Code: 201 Created

{
"statusCode": 201,
"message": "Prices created successfully"
}

Status Code: 400 Bad Request

{
"statusCode": 400,
"errors": [{ "message": "Invalid JSON in request body" }]
}

Status Code: 400 Bad Request

{
"statusCode": 400,
"errors": [{ "index": null, "field": null, "message": "Request body must be an array" }]
}

Status Code: 400 Bad Request

{
"statusCode": 400,
"errors": [{ "index": null, "field": null, "message": "Request body cannot be empty" }]
}

Status Code: 400 Bad Request

{
"statusCode": 400,
"errors": [{ "index": null, "field": null, "message": "Array exceeds maximum limit of 10000 items" }]
}

Status Code: 400 Bad Request

{
"statusCode": 400,
"errors": [
{
"index": 0,
"errors": [
{ "field": "product_code", "message": "Field is required" },
{ "field": "price", "message": "Field must be of type decimal" }
]
}
]
}
ErrorDescripción
Field is requiredEl campo obligatorio no fue enviado o está vacío
Field must be a stringEl valor no es una cadena de texto
Field must be of type decimalEl valor no es un número decimal válido
Field exceeds maximum length of X charactersLa cadena excede la longitud máxima permitida
Unknown fieldSe envió un campo que no existe en la configuración

Status Code: 500 Internal Server Error

{
"statusCode": 500,
"errors": [{ "message": "Unexpected error: [descripción del error]" }]
}

CódigoDescripción
201Precios creados/actualizados exitosamente
400Error en la estructura o validación de los datos
500Error interno del servidor

Para más información sobre los códigos de estado, consulta la sección de Códigos de estado HTTP.


  • El endpoint utiliza una operación MERGE que inserta o actualiza registros según su existencia.
  • La combinación de product_code y price_list determina la unicidad del registro.
  • El product_code debe existir previamente en el maestro de productos.
  • Todos los campos de texto son sensibles a mayúsculas/minúsculas.
  • Los valores decimales pueden enviarse como números (15000.00) o strings ("15000.00").
  • Se recomienda enviar lotes de máximo 1,000 registros para un mejor rendimiento.