Crear Precios
Descripción
Sección titulada «Descripción»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.
Endpoint
Sección titulada «Endpoint»POST /api/prices/batch-createHeaders
Sección titulada «Headers»| Header | Valor | Descripción |
|---|---|---|
Content-Type | application/json | Especifica que el contenido es JSON |
Body (JSON)
Sección titulada «Body (JSON)»El body debe ser un array de objetos, donde cada objeto representa un precio de producto a crear o actualizar.
Límites
Sección titulada «Límites»| Parámetro | Valor | Descripción |
|---|---|---|
| Mínimo de items | 1 | El array no puede estar vacío |
| Máximo de items | 10,000 | Número máximo de registros por petición |
Campos Requeridos
Sección titulada «Campos Requeridos»Estos campos son obligatorios en cada objeto del array:
| Campo | Tipo | Longitud | Descripción |
|---|---|---|---|
product_code | String | Max 20 | Código del producto (debe existir en el sistema) |
price_list | String | Max 20 | Código de la lista de precios a la que pertenece este precio |
price | Decimal | (18, 2) | Precio del producto en la lista de precios |
Formato de tipos de datos
Sección titulada «Formato de tipos de datos»- String: Cadena de texto. La longitud indica el máximo de caracteres permitidos.
- Decimal (p, s): Número decimal donde
pes la precisión total (dígitos enteros + decimales) yses la escala (dígitos decimales).- Ejemplo:
Decimal (18, 2)permite hasta 16 dígitos enteros y 2 decimales (ej:9999999999999999.99)
- Ejemplo:
Campos Opcionales
Sección titulada «Campos Opcionales»Estos campos pueden incluirse opcionalmente en cada objeto:
| Campo | Tipo | Longitud | Descripción |
|---|---|---|---|
maximum_discount | Decimal | (10, 2) | Porcentaje de descuento máximo permitido (primer nivel) |
maximum_discount2 | Decimal | (10, 2) | Porcentaje de descuento máximo permitido (segundo nivel) |
maximum_discount3 | Decimal | (10, 2) | Porcentaje de descuento máximo permitido (tercer nivel) |
base_price | Decimal | (18, 2) | Precio base antes de aplicar descuentos o promociones |
minimum_price | Decimal | (18, 2) | Precio mínimo de venta permitido |
maximum_price | Decimal | (18, 2) | Precio máximo de venta permitido |
charges | Decimal | (18, 2) | Valor de cargos adicionales aplicables al precio |
factor_description | String | Max 20 | Descripción del factor o unidad de medida asociada al precio |
Ejemplo de Petición
Sección titulada «Ejemplo de Petición»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 } ]'Respuesta Exitosa
Sección titulada «Respuesta Exitosa»Status Code: 201 Created
{ "statusCode": 201, "message": "Prices created successfully"}Respuestas de Error
Sección titulada «Respuestas de Error»Error 400 - JSON Inválido
Sección titulada «Error 400 - JSON Inválido»Status Code: 400 Bad Request
{ "statusCode": 400, "errors": [{ "message": "Invalid JSON in request body" }]}Error 400 - Body No Es Un Array
Sección titulada «Error 400 - Body No Es Un Array»Status Code: 400 Bad Request
{ "statusCode": 400, "errors": [{ "index": null, "field": null, "message": "Request body must be an array" }]}Error 400 - Array Vacío
Sección titulada «Error 400 - Array Vacío»Status Code: 400 Bad Request
{ "statusCode": 400, "errors": [{ "index": null, "field": null, "message": "Request body cannot be empty" }]}Error 400 - Excede Límite de Batch
Sección titulada «Error 400 - Excede Límite de Batch»Status Code: 400 Bad Request
{ "statusCode": 400, "errors": [{ "index": null, "field": null, "message": "Array exceeds maximum limit of 10000 items" }]}Error 400 - Errores de Validación por Item
Sección titulada «Error 400 - Errores de Validación por Item»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" } ] } ]}Tipos de errores de validación por campo
Sección titulada «Tipos de errores de validación por campo»| Error | Descripción |
|---|---|
Field is required | El campo obligatorio no fue enviado o está vacío |
Field must be a string | El valor no es una cadena de texto |
Field must be of type decimal | El valor no es un número decimal válido |
Field exceeds maximum length of X characters | La cadena excede la longitud máxima permitida |
Unknown field | Se envió un campo que no existe en la configuración |
Error 500 - Error Interno
Sección titulada «Error 500 - Error Interno»Status Code: 500 Internal Server Error
{ "statusCode": 500, "errors": [{ "message": "Unexpected error: [descripción del error]" }]}Códigos de Estado HTTP
Sección titulada «Códigos de Estado HTTP»| Código | Descripción |
|---|---|
| 201 | Precios creados/actualizados exitosamente |
| 400 | Error en la estructura o validación de los datos |
| 500 | Error interno del servidor |
Para más información sobre los códigos de estado, consulta la sección de Códigos de estado HTTP.
Notas Importantes
Sección titulada «Notas Importantes»- El endpoint utiliza una operación
MERGEque inserta o actualiza registros según su existencia. - La combinación de
product_codeyprice_listdetermina la unicidad del registro. - El
product_codedebe 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.