Crear Factores de Conversión
Descripción
Sección titulada «Descripción»Permite crear factores de conversión para uno o múltiples productos mediante una única petición. Este endpoint está diseñado para operaciones en lote (batch), permitiendo insertar hasta 10,000 registros por petición.
Los factores de conversión definen las diferentes unidades de medida o presentaciones en las que un producto puede ser vendido o almacenado (por ejemplo: unidad, caja, paquete, docena, etc.), junto con sus características físicas como peso y volumen.
El sistema utiliza una operación MERGE que solo inserta factores nuevos. Si un factor con la misma combinación de product_code y unit ya existe, será ignorado (no se actualizará).
Endpoint
Sección titulada «Endpoint»POST /api/factors/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 factor de conversión a crear.
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) |
unit | Decimal | (18, 2) | Factor de conversión numérico (ej: 12 para docena) |
description | String | Max 20 | Descripción de la unidad de medida (ej: “DOCENA”, “CAJA”) |
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 |
|---|---|---|---|
volume | Decimal | (18, 2) | Volumen de la presentación (en litros u otra unidad) |
weight | Decimal | (18, 2) | Peso de la presentación (en kilogramos u otra unidad) |
minimum_sale | Decimal | (18, 2) | Cantidad mínima de venta en esta presentación |
Ejemplo de Petición
Sección titulada «Ejemplo de Petición»A continuación se muestra un ejemplo completo de creación de factores de conversión:
curl -X POST "https://your-api-url/api/factors/batch-create" \ -H "Content-Type: application/json" \ -d '[ { "product_code": "PROD-001", "unit": 1.00, "description": "UNIDAD", "volume": 0.50, "weight": 0.25, "minimum_sale": 1.00 }, { "product_code": "PROD-001", "unit": 12.00, "description": "DOCENA", "volume": 6.00, "weight": 3.00, "minimum_sale": 1.00 }, { "product_code": "PROD-002", "unit": 1.00, "description": "UNIDAD", "weight": 0.50 }, { "product_code": "PROD-002", "unit": 24.00, "description": "CAJA", "volume": 12.00, "weight": 12.00, "minimum_sale": 1.00 } ]'Ejemplo mínimo (solo campos requeridos)
Sección titulada «Ejemplo mínimo (solo campos requeridos)»curl -X POST "https://your-api-url/api/factors/batch-create" \ -H "Content-Type: application/json" \ -d '[ { "product_code": "PROD-003", "unit": 1.00, "description": "UNIDAD" }, { "product_code": "PROD-003", "unit": 6.00, "description": "PAQUETE" } ]'Respuesta Exitosa
Sección titulada «Respuesta Exitosa»Status Code: 201 Created
{ "statusCode": 201, "message": "Factors created successfully"}Respuestas de Error
Sección titulada «Respuestas de Error»Error 400 - JSON Inválido
Sección titulada «Error 400 - JSON Inválido»Se produce cuando el body de la petición no contiene un JSON vá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»Se produce cuando el body no es un array de objetos.
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»Se produce cuando el array no contiene ningún elemento.
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»Se produce cuando el array contiene más de 10,000 elementos.
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»Se produce cuando uno o más items del array tienen errores de validación. Cada error incluye el índice del item en el array.
Status Code: 400 Bad Request
{ "statusCode": 400, "errors": [ { "index": 0, "errors": [ { "field": "product_code", "message": "Field is required" }, { "field": "unit", "message": "Field must be of type decimal" } ] }, { "index": 2, "errors": [ { "field": "description", "message": "Field exceeds maximum length of 20 characters" } ] } ]}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 integer | El valor no es un número entero válido |
Field must be of type decimal | El valor no es un número decimal válido |
Field must be a valid decimal (e.g., 1.5, 10.25) | El formato del decimal es inválido |
Field exceeds maximum length of X characters | La cadena excede la longitud máxima permitida |
Field exceeds maximum of X integer digits | El número excede los dígitos enteros permitidos |
Field exceeds maximum of X decimal places | El número excede los decimales permitidos |
Unknown field | Se envió un campo que no existe en la configuración |
Item must be an object | Un elemento del array no es un objeto JSON |
Error 500 - Error de Validación Inesperado
Sección titulada «Error 500 - Error de Validación Inesperado»Se produce cuando ocurre un error inesperado durante el proceso de validación de datos.
Status Code: 500 Internal Server Error
{ "statusCode": 500, "errors": [ { "message": "Unexpected validation error: [descripción del error]" } ]}Error 500 - Error de Conexión a Base de Datos
Sección titulada «Error 500 - Error de Conexión a Base de Datos»Se produce cuando hay problemas de conexión con la base de datos.
Status Code: 500 Internal Server Error
{ "statusCode": 500, "errors": [ { "message": "Error connecting to database: [descripción del error]" } ]}Error 500 - Error de Operación en Base de Datos
Sección titulada «Error 500 - Error de Operación en Base de Datos»Se produce cuando la operación en la base de datos falla durante la ejecución.
Status Code: 500 Internal Server Error
{ "statusCode": 500, "errors": [ { "message": "Database operation failed: [descripción del error]" } ]}Error 500 - Error Inesperado
Sección titulada «Error 500 - Error Inesperado»Se produce ante cualquier error no controlado durante el procesamiento.
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 | Factores de conversión creados 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 solo inserta registros nuevos. - Los registros existentes (misma combinación de
product_codeyunit) son ignorados sin generar error. - 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 (
12.00) o strings ("12.00"). - La fecha de creación (
FECHA_CREA) se asigna automáticamente por el sistema. - El estado del factor (
ESTADO) se configura automáticamente como activo (“Y”). - Se recomienda enviar lotes de máximo 1,000 registros para un mejor rendimiento.
- El campo
unitrepresenta el factor de conversión numérico (ej: 12 para una docena, 24 para una caja de 24 unidades). - El campo
minimum_salees útil para definir cantidades mínimas de pedido en cada presentación. - Los campos
weightyvolumepermiten calcular costos de logística y transporte.