API de piezas
Comenzando
Como se describe en la sección Compartición de Datos, DCP trata sobre datos, y los datos enviados a su DMS por BRP son tan vitales como los datos del concesionario enviados a BRP. Una pieza esencial de datos es el catálogo de Piezas, Accesorios y Ropa (PAA) de BRP, comúnmente conocido como el catálogo de piezas.
La API de Piezas permite a los concesionarios acceder al último catálogo de piezas de BRP dentro de su DMS. Dado que el catálogo de piezas se utiliza en muchas actividades del concesionario, tener el catálogo actualizado en su DMS es beneficioso para los concesionarios de numerosas maneras, por ejemplo:
- La capacidad de usar números de pieza consistentes en discusiones con BRP.
- Pedidos de piezas más precisos.
- Mayor conocimiento de los cambios más recientes en las piezas, como sustituciones y disponibilidad.
En resumen, la API de Piezas es un componente central de su integración con BRP.
La API de Piezas proporciona 3 tipos de solicitudes:
- Obtener el catálogo completo de piezas.
- Obtener los cambios realizados al catálogo de piezas después de una fecha especificada.
- Obtener información sobre una pieza específica.
Como se describe en la Comprensión de las Partes sección, las partes con estos códigos están incluidas en la API.
Como se describe en la Requisitos Funcionales sección, debe llamar a la API de Partes al menos una vez para recuperar el catálogo completo de partes.
El catálogo completo de partes debe estar disponible para el distribuidor.
¿Dónde empezar? ¡Léeme primero!
Antes de comenzar a trabajar en esta API, debes leer las siguientes secciones si aún no las has revisado:
Cuándo llamar a la API
Para las operaciones del concesionario, usar un catálogo de piezas actualizado es esencial.
¡Por eso debes llamar a la API de Piezas diariamente para obtener los últimos cambios!
❗ Como se describe en la Requisitos Funcionales sección, debes llamar a la API de Piezas diariamente para recuperar los cambios de los últimos 2 días. ❗
Sin embargo, este es el requisito mínimo. Podemos llamar a la API de Piezas diariamente para recuperar los cambios realizados la semana pasada, como se muestra en la sección Obtener los Cambios de la Semana Pasada De esta manera, aseguras que el concesionario tenga un catálogo de piezas actualizado incluso si la actualización no funciona un día.
Los datos de la API de Piezas se actualizan diariamente, y la actualización se completa a las 4:00, hora del Este (ET). Por lo tanto, el mejor momento para llamar a la API de Piezas y actualizar tu DMS es después de las 4:00 ET.
👉 Para evitar perder cambios, recomendamos que su DMS llame periódicamente a la Parts API para recuperar cambios durante un período más prolongado.
Por ejemplo, su DMS puede llamar a la Parts API una vez al mes para obtener los cambios.
Cómo llamar a la API
La Referencia de la API explica que la sección de la Parts API ofrece dos servicios: uno para recuperar el catálogo completo de piezas o los cambios más recientes, y otro para obtener una pieza específica.
El servicio para obtener una pieza específica se llama según sea necesario cuando el concesionario busca un número de pieza específico. En otras palabras, el servicio se llama manualmente.
Como se describe en la sección Requisitos funcionales , el servicio para recuperar el catálogo completo de piezas o los últimos cambios debe ser automatizado.
El concesionario no tiene que intervenir para actualizar el catálogo de piezas diariamente.
Información técnica
Características
Tipo de API | Tipo de DSP | Versión DCP | Complejidad |
|---|---|---|---|
Obtener datos de BRP | DMS | V3 - Internacional | Baja |
Enviar datos a BRP | CRM | V4 - Norteamérica | Un poco más |
Transacción con BRP | | | Algo más |
Autenticación
La API está usando Autenticación de Aplicaciones.
Necesitas un token de acceso válido antes de llamar esta API, o tienes que llamar a la API de Autenticación de Aplicaciones para obtener uno.
¡El token de acceso es válido por 30 minutos! (1799 segundos)
URL base
Prueba | https://qa-cloud-api.brp.com/dcp/<v3 or v4> |
|---|---|
Producción | https://cloud-api.brp.com/dcp/<v3 or v4> |
Recurso: Parte
Cuando se llama para solicitar el catálogo completo de partes o los últimos cambios, la API de Partes devuelve una matriz de Parte recursos. Cada recurso de Parte que se muestra a continuación contiene toda la información sobre una parte.
Cuando se llama para obtener una parte específica, la API de Partes devuelve un único recurso de Parte .
Representación JSON
{
"product_code": "080037100",
"product_descr": "CASTING COVER",
"product_type": "30",
"gross_weight": 919,
"gross_weight_uom": "G",
"first_year_utilization": 1996,
"last_year_utilization": 2007,
"product_lines": [
"SNO"
],
"sales_status_code": "7",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"is_bom": false,
"units_of_measure": [
{
"volume": 6300,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "CCM",
"length": 35,
"width": 20,
"gross_weight": 919,
"net_weight": 919,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 9
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2014-10-01",
"price_price_uom": 134.99,
"price_sales_uom": 134.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2014-10-01",
"price_price_uom": 80.98,
"price_sales_uom": 80.98,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": [
{
"superseded_product": "204071507",
"superseding_product": "080037100",
"direction": "forward"
}
]
}
Propiedades
Todos los campos numéricos con decimales utilizan el punto(.) como separador decimal. La coma (,) NO es compatible como separador decimal.
Property | Type | Definition | Notes |
|---|---|---|---|
product_code* | string | Code that uniquely identifies a product. | Max Length: 18 |
product_descr†* | string | Description of the product. | Max Length: 40 |
product_type* | string | Code that uniquely identifies product type. Refer to the Product Type table below. | RegMax Length: 5 |
gross_weight* | number | The gross weight of the product. | Precision: 0.001 |
gross_weight_uom*
| string | Weight unit of measure, as listed in the Unit of Measures table below. | Max Length: 5 |
first_year_utilization* | number | The first model year in which the product was introduced to the market. | Max Length: 4 |
last_year_utilization* | number | The last model year in which the product was available to the market. | Max Length: 4 |
product_lines* | list of strings | Code that uniquely identifies the product line. Refer to the Product Lines table below. | Max Length: 15 |
sales_status_code* | string | Code that identifies the sellable status of the part. Refer to the Sales Status Code table below. | Max Length: 2 |
minimum_order_quantity* | number | Minimum order quantity in a sales unit of measure. 👉 As of this writing, there are no parts with a minimum order quantity higher than 1. | Precision: 0.000 |
sales_uom* | string | Sales unit of measure. Units of measure used by BRP are listed in the Units of Measure table below. | Max Length: 5 |
market_classification* | string | Code that uniquely identifies the market classification. Refer to the Product Market Classification table below. | Max Length: 3 |
is_bom | boolean | V4 Only If true, the part is a sales BOM (BOM = bill of materials). When a sales BOM is ordered, many parts are delivered. | |
units_of_measure | object | V4 Only | |
units_of_measure.uom | string | The part's unit of measure is listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure. numerator | string | The numerator of the conversion factor from the Base UOM to this UOM. Example: 1 pac = 12 bt (Base UOM: bt) Numerator = 12 | |
units_of_measure. denominator | string | The numerator of the conversion factor from the Base UOM to this UOM. Example: 1 pac = 12 bt (Base UOM: bt) Denominator = 1 | |
units_of_measure. weight_unit | string | Weight unit of measure, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure. gross_weight | number | The gross weight of the product. | Precision: 0.001 |
units_of_measure. net_weight | number | The net weight of the product. | Precision: 0.001 |
units_of_measure. volume_unit | string | Volume unit of measure, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure.volume | number | The volume of the product. | Precision: 0.001 |
units_of_measure. dimension_unit | string | Unit in which a product's length, width, and height are measured, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure.length | number | Length of the product. | Precision: 0.001 |
units_of_measure.width | number | Width of the product. | Precision: 0.001 |
units_of_measure.height | number | Height of the product. | Precision: 0.001 |
pricings* | list of objects | List of pricing for the product. |
|
pricings.price_type | string | Code that identifies a type of price. One of
|
|
pricings.valid_from | date | The date at which the price becomes active in ISO 8601 format. | yyyy-mm-dd |
pricings.price_price_uom | number | Price, excluding taxes, for 1 unit of measure. The price of each part, regardless of the minimum sale quantity in the package. | Format 9999999.99 |
pricings.price_sales_uom | number | Price, excluding taxes, for one sales unit of measure. | Format 9999999.99 |
pricings.currency | string | The currency in which the price is provided. The available values are listed in the Currency table below. |
|
in_package | object | Sales package content. |
|
in_package .quantity | number | Number of items(s) contained in the package based on the unit of measure in the package. | Precision: 0.001 |
in_package .uom | string | Unit of measure for the item contained in the package, one of the units of measure listed in the Unit of Measures table below. | Max Length: 5 |
supersessions* | list of objects | List of supersession chains in which the requested product is included. |
|
supersessions .superseded_product | string | Unique identifier of the superseded product. | Max Length: 18 |
supersessions .superseding_product | string | Unique identifier of the product that supersedes. | Max Length: 18 |
supersessions .direction | string | The direction in which the supersession can be applied. One of
|
|
- Las propiedades marcadas con una daga (†) se devuelven en el idioma solicitado.
- Las propiedades marcadas con un asterisco (*) siempre se devuelven en la respuesta.
- 🛑 Diferencias entre V3 y V4.
Moneda
Organización de Ventas | Moneda | Versión 3 | Versión 4 |
|---|---|---|---|
1010 | CAD | | X |
3020 | USD | | X |
6030 | EUR | X | |
6030 | NOK | X | |
6050 | SEK | X | |
6050 | EUR | X | |
6050 | GBP | X | |
8070 | MXN | X | |
8075 | BRL | X | |
7080 | AUD | X | |
7080 | NZD | X | |
Líneas de productos
Clave | Valor | Marca |
|---|---|---|
2WV | Vehículos de dos ruedas | Can-Am On-Road |
3WV | Vehículos de tres ruedas | Can-Am On-Road |
ATV | Vehículos todo terreno | Can-Am Off-Road |
OE | Motores fueraborda | Sea-Doo |
PTN | Pontones | Sea-Doo |
PWC | Motos acuáticas personales | Sea-Doo |
SNO | Motos de nieve | Ski-Doo |
SSV | Vehículos side-by-side | Can-Am Off-Road |
Clasificación del mercado de productos
Clave | Valor |
|---|---|
CAP | Cautivo |
COM | Competitivo |
NA | Cuando no hay coincidencia de lo anterior (Indefinido) |
Tipos de productos
Clave | Valor |
|---|---|
10 | Vehículo |
20 | Motor |
30 | Piezas |
40 | Accesorios |
50 | Ropa |
60 | Licencias y Juego |
80 | Manuales |
90 | Remolque |
100 | Reconstruido |
110 | Aceites y Químicos |
NA | Cuando no hay coincidencia de lo anterior (Indefinido) |
Código de estado de ventas
Clave | Valor | Descripción |
|---|---|---|
4 | Comercializable | El material está activo sin restricciones de pedido |
5 | Uso sin agotamiento | El material puede ingresarse en el pedido pero se reemplaza directamente por su material sustituto |
7 | Añejo | Material vendido por un tercero cuando ya no es abastecido por BRP |
E | Eliminación gradual | El material está disponible pero ya no será repuesto |
H | Obsoleto | El material está descontinuado y no puede ser pedido |
NA | Cuando no coincide con lo anterior (Indefinido) | |
Unidad de medidas
Código | Descripción | Dimensión |
|---|---|---|
BT | Botella | Cantidad |
CAN | Bidón | Cantidad |
CM | Centímetro | Longitud |
CS | Caja | Cantidad |
FT | Pies | Longitud |
G | Gramo | Peso |
M | Metro | Longitud |
ML | Mililitro | Volumen |
MM | Milímetro | Longitud |
OZ | Onzas | Peso |
PAC | Paquete | Cantidad |
PC | Pieza | Cantidad |
PR | Par | Cantidad |
TB | Tubo | Cantidad |
Recurso: Lista de piezas
Cuando se llama para solicitar el catálogo completo de piezas o los últimos cambios, la API de Piezas devuelve una matriz de Parte recursos.
Las respuestas devueltas contienen dos objetos que te ayudan a navegar por las páginas del catálogo de piezas.
Representación JSON
{
"items": [
{
List of Parts resources
}
],
"links": {
"previous": "https://api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=1900-01-01&sales_org=canada¤cy=CAD&limit=200&page=1",
"next": "https://api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=1900-01-01&sales_org=canada¤cy=CAD&limit=200&page=3"
},
"meta": {
"total_records": 9999,
"total_pages": 87,
"current_page": 2,
"limit": 200
}
}
Propiedades
Propiedad | Tipo | Definición |
|---|---|---|
items | Lista de objetos | Lista de Pieza recursos que se devuelven. |
links | objeto | Enlaces de paginación. |
links.previous | cadena | URL que se utilizará para obtener la página anterior. NULL si no hay página anterior. |
links.next | cadena | URL que se utilizará para obtener la página siguiente. NULL si no hay página siguiente. |
meta | objeto | Estadísticas de la solicitud. |
meta.total_records | número | La cantidad de registros devueltos por la solicitud. |
meta.total_pages | número | El número de páginas se usa para calcular el límite. |
meta.current_page | número | El número de página actual o número de página solicitado. |
meta.limit | número | Límite de los parámetros de la solicitud. |
Enlaces
El objeto Links puede utilizarse para navegar por las páginas devueltas por la Parts API.
Cuando un enlace no es NULL, puede utilizarse para ir a la página anterior o siguiente. Esto simplifica la navegación entre páginas porque no es necesario guardar los parámetros de la consulta; la URL del enlace contiene los parámetros de consulta que proporcionaste y los parámetros predeterminados para aquellos que no proporcionaste.
Metadatos
El Meta proporciona estadísticas sobre la cantidad de recursos devueltos por su solicitud y la cantidad de páginas que puede esperar recibir.
Esta información puede ser útil para diagnósticos y para verificar que todos los Pieza recursos fueron recibidos.
Limitaciones y restricciones
Formato de número
Todos los campos numéricos con decimales usan el punto(.) como separador decimal. La coma (,) NO es compatible como separador decimal.
Fecha de Último Cambio
Cuando se utiliza el parámetro de consulta last_changed_date para recuperar los cambios desde una fecha específica, es esencial entender cuándo se actualiza el catálogo de partes.
El primer paso de una actualización de una parte se realiza en SAP. Luego, se ejecutan los trabajos de base de datos para actualizar el catálogo.
Los trabajos de base de datos que actualizan el catálogo de partes desde los sistemas backend se ejecutan al final del día, comenzando a las 10 p. m., hora del Este (ET UTC-05:00). Generalmente, los trabajos terminan antes de la medianoche del mismo día.
Si llama a la Parts API con una last_changed_date con el valor de la fecha de hoy, no se devuelven piezas porque los últimos cambios en el catálogo de piezas se hicieron ayer.
Para comprender mejor la secuencia, veamos un escenario.
A las 10:00 ET del 14 de octubre:
- 10 piezas son modificadas en SAP.
A las 22:00 ET del 14 de octubre:
- Los trabajos de la base de datos se ejecutan y actualizan el catálogo.
- Las 10 piezas modificadas se actualizan en el catálogo.
A las 2:00 ET del 15 de octubre:
- Su DMS llama a la Parts API, y la fecha del último cambio es el 15 de octubre.
- No se devolverán piezas ya que las piezas fueron modificadas el 14 de octubre.
❗ ❗ Si su DMS llama a la Parts API y nunca recibe piezas actualizadas, asegúrese de usar una last_change_date 2 o 3 días antes de la fecha actual ❗ ❗
Historial de precios y piezas obsoletas
Cuando una pieza se vuelve no comercializable (p. ej., obsoleta, vintage), su precio se establece en 0 en el sistema backend.
👉 Para estas piezas, la Parts API mantiene el último precio disponible.
Comprender las piezas
Esta sección presenta información esencial sobre cómo gestionar el catálogo de piezas.
Código de estado de venta
Las piezas no vendibles no se eliminan para mantener la coherencia del catálogo de piezas y las referencias entre los datos de los concesionarios y el catálogo de piezas.
La sales_status_code propiedad, que se encuentra en el objeto Part descrito en la sección Representación JSON de la Pieza determina si la pieza es vendible o no. Los posibles valores de sales_status_code se muestran en la tabla a continuación.
Debes mostrar el código de estado de venta o un equivalente en tu DMS para indicar al concesionario si una pieza puede ser solicitada.
Código de estado de ventas
Clave | Valor | Descripción |
|---|---|---|
4 | Comercializable | El material está activo sin restricciones de pedido |
5 | Uso sin agotamiento | El material puede introducirse en el pedido pero será reemplazado directamente por su material sustituto |
7 | Vintage | Material vendido por un tercero cuando BRP ya no lo suministra |
E | Eliminación gradual | El material está disponible pero ya no será repuesto |
H | Obsoleto | El material está descontinuado y no se puede pedir |
NA | Cuando no coincide con lo anterior (Indefinido) | |
Vendible
El valor más sencillo del código de estado de ventas es '4': la pieza se puede vender, lo que significa que el concesionario puede pedir la pieza sin restricciones.
Usar sin agotamiento
El valor del código de estado de ventas '5' indica que el concesionario puede pedir la pieza, pero recibirá una pieza de sustitución en su lugar.
Eliminación gradual
El valor del código de estado de ventas 'E' indica que el concesionario puede pedir la pieza mientras BRP tenga existencias. Una vez que el inventario disponible se agote, la pieza de sustitución se entrega al concesionario al recibir el pedido.
Antiguo
El valor del código de estado de ventas '7' indica que el concesionario no puede pedir la pieza a través de BRP pero podría solicitarla a través de un tercero.
Obsoleto
El valor del código de estado de ventas 'H' indica que el concesionario no puede pedir la pieza. En algunos casos puede existir una pieza de sustitución y se identifica en las sucesionesde la pieza.
Kit y BOM de ventas
Comencemos con dos definiciones:
- Un kit es un grupo de piezas representadas por un solo número de pieza, que se ordena y se envía como una sola unidad.
- Un sales BOM es un grupo de piezas representadas por un solo número de pieza, pero que se ordenan y envían como varias piezas.
Un ejemplo de kit
Un ejemplo de un kit es la pieza 715009632, un kit de parachoques trasero para un ATV.
Cuando llamas a la API de Piezas para solicitar esta pieza, obtienes la siguiente respuesta.
{
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"product_type": "30",
"gross_weight": 9,
"gross_weight_uom": "KG",
"first_year_utilization": 2024,
"last_year_utilization": 2025,
"product_lines": [
"ATV"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 32589,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 71,
"width": 51,
"gross_weight": 9,
"net_weight": 9,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 9
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2025-06-07",
"price_price_uom": 223.49,
"price_sales_uom": 223.49,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2025-06-07",
"price_price_uom": 150.48,
"price_sales_uom": 150.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}Ves que el campo is_bom es true, lo que indica que hay otras piezas relacionadas con esta pieza.
Cuando el concesionario ordena esta pieza, solo se envía una pieza, como se muestra en BOSSWeb.

Y en la respuesta de la API de orden de piezas, se ordena una pieza (ordered_line) y se envía una pieza (shipping_lines).
{
"pac_order_id": "79f15a68-1671-4468-a9f8-18489553ea34",
"sales_order_no": "",
"creation_date": "2025-06-19T10:18:11Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 150.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 8.52,
"currency": "USD"
},
{
"condition_type": "handling_fee",
"total_amount": 20,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 170.48,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "warning",
"code": "",
"descr": "Your PAA order is less than 250.00$, handling fee of 20.00$ will be applied to the invoice."
},
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "184a2148-3cb3-4f51-85c2-8101cf40aa64",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"order_qty": 1,
"dealer_po_item_no": "A-0010",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "ATV",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000101",
"parent_item_no": "000100",
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 223.49,
"wholesale_unit_price": 150.48,
"net_unit_price": 170.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "ATV",
"product_type": "30",
"plant": {
"name": "BRP - FORT WORTH PAA",
"city": "FORT WORTH",
"state": "TX",
"country": "US"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 150.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 8.52,
"currency": "USD"
},
{
"condition_type": "handling_fee",
"total_amount": 20,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 170.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:18:11Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-20",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}👉 Con un kit, la lista de piezas incluidas en el kit no está disponible.
En general, las piezas incluidas en el kit no se pueden pedir por separado.
Hay excepciones. Por ejemplo, este kit de parachoques trasero incluye la pieza 704902778 Calcomanía de advertencia, portaequipajes, que se puede pedir por separado.
Sin embargo, el distribuidor no sabe que la pieza 704902778 está incluida en el kit.
Un ejemplo de BOM de ventas
Un ejemplo de una BOM de ventas es la pieza 505074936, amortiguadores delanteros para una moto de nieve.
Cuando llamas a la Parts API para solicitar esta pieza, recibes la siguiente respuesta.
{
"product_code": "505074936",
"product_descr": "FRONT SHOCK",
"product_type": "30",
"gross_weight": 2.424,
"gross_weight_uom": "KG",
"first_year_utilization": 2020,
"last_year_utilization": 2020,
"product_lines": [
"SNO"
],
"sales_status_code": "5",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 13104,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 56,
"width": 18,
"gross_weight": 2.424,
"net_weight": 2.424,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 13
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2021-04-15",
"price_price_uom": 749.99,
"price_sales_uom": 749.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2021-04-15",
"price_price_uom": 523.48,
"price_sales_uom": 523.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}Ves que el campo is_bom es true, lo cual indica que hay otras piezas relacionadas con esta pieza.
Cuando el distribuidor solicita esta pieza, se envían dos piezas, como se muestra en BOSSWeb.

Y en la respuesta de la API de Orden de Piezas: una pieza está ordenada (ordered_line con "item_no": "000100", y dos son enviadas:
- 505074897 AMORTIGUADOR DELANTERO con "item_no": "000200"
- 505074898 AMORTIGUADOR DELANTERO con "item_no": "000300"
❗ No hay muchos sales BOM ya que puede causar problemas para el concesionario.
Dado que muchas piezas se envían al concesionario para un solo sales BOM, las piezas pueden llegar al concesionario en diferentes momentos.
Es por eso que solo unas pocas piezas se crean como un sales BOM.
{
"pac_order_id": "339944ab-c6b4-4884-a571-d0ee91186189",
"sales_order_no": "",
"creation_date": "2025-06-19T10:32:26Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 1262.96,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 63.14,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 1262.96,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "0b7116d4-a1f8-4aab-bab2-2bace94377e9",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "505074936",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": true,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": []
},
{
"ordered_line": {
"item_id": "",
"item_no": "000200",
"parent_item_no": "000100",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000201",
"parent_item_no": "000200",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:32:26Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
},
{
"ordered_line": {
"item_id": "",
"item_no": "000300",
"parent_item_no": "000100",
"product_code": "505074898",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000301",
"parent_item_no": "000300",
"product_code": "505074898",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:32:26Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}En el caso de una lista de materiales de ventas (Sales BOM), las piezas incluidas son visibles para los distribuidores y se pueden pedir por separado.
Al llamar a la API de Piezas para recuperar la pieza 505074897, se obtiene la siguiente información.
{
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"product_type": "30",
"gross_weight": 2.098,
"gross_weight_uom": "KG",
"first_year_utilization": 2021,
"last_year_utilization": 2025,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 13104,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 56,
"width": 18,
"gross_weight": 2.098,
"net_weight": 2.098,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 13
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2025-06-07",
"price_price_uom": 877.49,
"price_sales_uom": 877.49,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2025-06-07",
"price_price_uom": 631.48,
"price_sales_uom": 631.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}El concesionario puede pedir la pieza 505074897, como se muestra en la respuesta de la API de Pedido de Piezas.
{
"pac_order_id": "7af63abb-0d86-4eaf-a9e9-ab9a30910e81",
"sales_order_no": "",
"creation_date": "2025-06-19T10:39:15Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "c1e1cdf4-d200-4bd4-bcb5-fbf5a4fc68b0",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "A-0010",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000101",
"parent_item_no": "000100",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:39:15Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}Sustitución de pieza
Una pieza puede ser reemplazada por otra por muchas razones. Por ejemplo, BRP puede cambiar el proveedor de la pieza. La nueva pieza es equivalente en "forma, ajuste y función", pero tiene un nuevo número de pieza.
Para cada objeto de pieza, la sucesiónarray de propiedades contiene la cadena de sucesión. La cadena de sucesión va desde la pieza más nueva hasta la más antigua. Si el arreglo está vacío, la pieza no sustituye a otra.
¡Una pieza puede estar en más de una cadena de sucesión!
Esto significa que la misma pieza puede sustituir a dos piezas.
Cadena de Sucesión
Hay dos tipos de cadenas de sucesión: uno a uno y uno a muchos.
Uno a uno
Una pieza reemplaza a una sola pieza. Aquí, la pieza 204130176 (producto_sucesor) reemplaza a la pieza 204560132 (producto_sucesor_reemplazado).
Al llamar a la API de Piezas para recuperar la pieza 204130176 o 204560132, se devuelve la misma información de sucesión, como se muestra a continuación.
"supersessions": [
{
"superseded_product": "204560132",
"superseding_product": "204130176", <-- current part
"direction": "forward"
}
]Con el tiempo, se puede crear una cadena de sucesión: la pieza A es reemplazada por B, que es reemplazada por C, que es reemplazada por D, etc.
Por ejemplo, la API de Piezas devuelve la siguiente información de supersesión para la pieza 219000819.
"supersessions": [
{
"superseded_product": "219000748",
"superseding_product": "219000819", <-- current part
"direction": "forward"
},
{
"superseded_product": "219000722",
"superseding_product": "219000748",
"direction": "forward"
},
{
"superseded_product": "219000708",
"superseding_product": "219000722",
"direction": "forward"
},
{
"superseded_product": "219000562",
"superseding_product": "219000708",
"direction": "forward"
}
]La cadena de supersesión comienza con la pieza 219000562 (superseded_product en la línea 18) siendo reemplazada por la pieza 219000708 (superseding_product en la línea 19).
La cadena termina con la pieza 219000748 (superseded_product en la línea 3) siendo reemplazada por la pieza 219000819 (superseding_product en la línea 4).
👉 El primer punto crítico a recordar es que todas las entradas en el arreglo supersessions donde superseding_product es product_code representan las supersesiones actuales.
👉 El segundo punto crítico es que si la pieza está supersedida, la primera entrada en el arreglo supersession donde superseded_product es product_code representa la supersesión actual.
Esto se muestra en BOSSWeb en la pantalla de Historial de Piezas para la pieza 219000748, donde la pieza 219000819 es el número de pieza actual.

Uno a muchos
Una pieza puede reemplazar a más de una pieza. Un ejemplo es la pieza 420239135, que tiene la siguiente información de supersesión, indicando que las piezas 420239132 y 711239132 (superseded_product) son ambas reemplazadas por 420239135 (superseding_product).
👉 El primer punto crítico a recordar es que todas las entradas en el arreglo supersessions donde superseding_product es product_code representan las supersesiones actuales.
👉 El segundo punto crítico es que si la pieza está supersedida, la primera entrada en el arreglo supersession donde superseded_product es product_code representa la supersesión actual.
{
"product_code": "420239135",
"product_descr": "COMPRESSION SPRING",
....
"units_of_measure": [
...
],
"pricings": [
...
],
"supersessions": [
{
"superseded_product": "420239132",
"superseding_product": "420239135", <-- current part
"direction": "forward"
},
{
"superseded_product": "711239132",
"superseding_product": "420239135", <-- current part
"direction": "forward"
}
]
}Esto se muestra en BOSSWeb en la pantalla de Historial de Piezas para la pieza 420239135.

La información de supersesión puede ser más compleja cuando una pieza reemplaza muchas piezas que tienen su propia cadena de supersesión.
Por ejemplo, la pieza 269501920 reemplaza dos piezas, como se muestra en la información de supersesión.
"supersessions": [
{
"superseded_product": "269501855",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501783",
"superseding_product": "269501855",
"direction": "forward"
},
{
"superseded_product": "269501844",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501693",
"superseding_product": "269501783",
"direction": "forward"
},
{
"superseded_product": "269501786",
"superseding_product": "269501844",
"direction": "forward"
}
]Las dos piezas reemplazadas tienen sus cadenas de sustitución.
"product_code": "269501855",
....
"supersessions": [
{
"superseded_product": "269501855",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501783",
"superseding_product": "269501855",
"direction": "forward"
},
{
"superseded_product": "269501693",
"superseding_product": "269501783",
"direction": "forward"
}
]
"product_code": "269501844",
...
"supersessions": [
{
"superseded_product": "269501844",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501786",
"superseding_product": "269501844",
"direction": "forward"
}
]Esto se muestra en BOSSWeb en la pantalla de Historial de Piezas para las tres piezas.

Regla de Sustitución
Para determinar si una pieza ha sido sustituida, observe la matriz de sustituciones del repuesto:
- Si la matriz está vacía, la pieza no ha sido sustituida.
- Si el product_code de la pieza se encuentra en el campo superseded_product de una entrada, la pieza ha sido sustituida.
- Si el product_code de la pieza se encuentra en el campo superseding_product de una entrada, la pieza sustituye a otra pieza.
- Tanto 2 como 3 pueden ser verdaderas. En este caso, la regla 2 tiene precedencia y la pieza está sustituida. En este caso, la sustitución está representada por la primera entrada de la matriz de sustituciones.
Dirección de Sustitución
En una cadena de sustituciones, cuando una pieza es sustituida por otra, aún puede ser utilizada e intercambiable con la nueva pieza.
La propiedad de dirección para la pieza sustituida indica si las piezas antigua y nueva son intercambiables.
Ejemplo: la pieza A es sustituida (reemplazada) por la pieza B.
- La dirección es hacia adelante: cuando el distribuidor ordena la pieza A, se envía la pieza B. La pieza A ya no puede utilizarse.
- La dirección es ambas: cuando el distribuidor ordena la pieza A, el distribuidor recibe ya sea la pieza A o la pieza B. Las piezas A y B son intercambiables.
Aquí hay un ejemplo de la pieza 204160371, que reemplaza una pieza más antigua (204160343) y que a su vez es reemplazada por la pieza más nueva 267001006.
{
"product_code": "204160371",
"supersessions": [
{
"superseded_product": "204160343", // old part
"superseding_product": "204160371",
"direction": "forward"
},
{
"superseded_product": "204160371",
"superseding_product": "267001006", // newer part
"direction": "both"
}
]
}También vemos que la propiedad dirección para la sustitución de la pieza 267001006 es ambas. Esto significa que el distribuidor puede recibir ya sea la pieza 204160371 o la pieza 267001006 al ordenarla, ya que son intercambiables.
Los escenarios son:
- El distribuidor ordena 267001006 y recibe 26700100.
- El distribuidor ordena 204160371 y recibe 204160371.
- El distribuidor ordena 204160371 y recibe 267001006.
- El distribuidor ordena 267001006 y recibe 204160371.
- El distribuidor ordena 204160371 y recibe ambas 204160371 y 267001006.
- El distribuidor ordena 267001006 y recibe ambas 267001006 y 204160371.
Unidad de medida de venta
La sales_uom propiedad de la pieza es importante para comprender el precio de la pieza. Los valores posibles se enumeran en la tabla de Unidades de Medida en la sección Recurso: Pieza .
La unidad de medida más común es PC (pieza), que se usa en el 98% de las piezas. Las siguientes más comunes son PR (par), usada solo para ropa, y CS (caja).
Cantidad en paquete = Número de artículos
Las unidades PAC y CS se usan para productos vendidos en cajas o paquetes, como botellas de aceite. Para la mayoría de las unidades de medida, la propiedad pricings.in_package.quantity de una pieza contiene 1, lo que indica que cada pieza se vende por separado.
Para las unidades de medida PAC y CS , la propiedad pricings.in_package.quantity de una pieza generalmente contiene el número de artículos en el paquete o caja. Ver abajo
Veamos un ejemplo con la pieza 20037, mostrada a continuación. La PAC es la unidad de medida utilizada y la propiedad pricings.in_package.quantity contiene 10.
{
"product_code": "20037",
"product_descr": "RONDELLE *WASHER",
"product_type": "30",
"gross_weight": 1,
"gross_weight_uom": "G",
"first_year_utilization": 1995,
"last_year_utilization": 2020,
"product_lines": [
"ATV",
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PAC",
"market_classification": "COM",
"units_of_measure": [
{
"volume": 7.5,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "CCM",
"length": 3,
"width": 2.5,
"gross_weight": 1,
"net_weight": 1,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 1
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2022-08-01",
"price_price_uom": 2.49,
"price_sales_uom": 24.9,
"currency": "CAD",
"in_package": {
"uom": "PAC",
"quantity": 10
}
},
{
"price_type": "dealer",
"valid_from": "2022-08-01",
"price_price_uom": 1.48,
"price_sales_uom": 14.8,
"currency": "CAD",
"in_package": {
"uom": "PAC",
"quantity": 10
}
}
],
"supersessions": [
{
"superseded_product": "M20037",
"superseding_product": "20037",
"direction": "forward"
}
]
}La propiedad price_sales_uom es el precio para el código de producto. La propiedad price_price_uom es el precio por 1 artículo.
Ambos precios son iguales para las piezas vendidas en unidades, como todas las piezas con la PC unidad de medida.
Para las PAC y CS unidades de medida, cuando la pricings.in_package.quantity propiedad es diferente de 1, el price_sales_uom valor de la propiedad es el price_price_uom valor de la propiedad multiplicado por la pricings.in_package.quantity valor de la propiedad.
pricings.in_package.quantity x price_price_uom = price_sales_uom
En nuestro ejemplo,
10 x 1.48 = 14.80
Tenga en cuenta que puede usar los precios de distribuidor o minorista para calcular. Es algo bueno que obtengamos el mismo resultado.
La cantidad en el paquete NO = número de artículos
Para muchas piezas, usando la PAC o CS como unidad de medida, la propiedad pricings.in_package indica cuántos artículos hay en la caja. Sin embargo, para algunas piezas, la cantidad es 1.
👉 ¡Ten en cuenta que DCP no gestiona los datos del catálogo de piezas!
Podemos informar problemas al equipo de gestión de piezas, ¡pero no podemos cambiar cómo se manejan las piezas! 🤷♂️
Veamos un ejemplo de una pieza con una cantidad de CS de 1: código de producto 779158, que es aceite sintético para engranajes.
La siguiente respuesta se devuelve al llamar a la API de Parts para obtener información sobre el código de producto 779158.
{
"product_code": "779158",
"product_descr": "GEAR OIL SYNTHETIC 75W90 32 OZ/0,946L",
"product_type": "110",
"gross_weight": 10.8,
"gross_weight_uom": "KG",
"first_year_utilization": 2018,
"last_year_utilization": 2023,
"product_lines": [
"3WV",
"ATV",
"PTN",
"PWC",
"SNO",
"SSV"
],
"sales_status_code": "5",
"minimum_order_quantity": 1,
"sales_uom": "CS",
"market_classification": "COM",
"units_of_measure": [
{
"volume": 29808,
"uom": "CS",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 34.5,
"width": 27,
"gross_weight": 10.8,
"net_weight": 10.8,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 32
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2021-10-15",
"price_price_uom": 25.99,
"price_sales_uom": 25.99,
"currency": "USD",
"in_package": {
"uom": "CS",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2022-06-03",
"price_price_uom": 16.48,
"price_sales_uom": 16.48,
"currency": "USD",
"in_package": {
"uom": "CS",
"quantity": 1
}
}
],
"supersessions": []
}El pricings.in_package indica que se utiliza la unidad de medida CS . Sin embargo, la propiedad pricings.in_package.quantity es 1. Entonces, ¿cómo podemos saber cuántas botellas hay en la caja?
Pues no podemos saberlo ya que la propiedad pricings.in_package.quantity es 1, y los valores de price_price_uom y price_sales_uom son iguales.
Al procesar los datos de la API de Partes, asegúrate de validar el valor de pricings.in_package.quantity en relación con los valores de price_price_uom y price_sales_uom.
Si
pricings.in_package.quantity x price_price_uom price_sales_uom
Establece la cantidad en tu DMS a
pricings.in_package.quantity = price_sales_uom / price_price_uom
Cantidad mínima de pedido
La cantidad mínima de pedidode la pieza es una indicación para el distribuidor al ordenar la pieza.
Tenga en cuenta que la cantidad mínima de pedidono está disponible para todas las piezas. En la mayoría de los casos, la propiedad es null o una cadena vacía.
Si el cantidad mínima de pedidotiene un valor diferente de 1, al ordenar la pieza, la cantidad debe ser al menos igual a la cantidad mínima de pedidoestablecida.
Precio faltante
Mientras la API de Piezas DCP proporciona acceso al catálogo de piezas, otros grupos empresariales en BRP gestionan los datos del catálogo.
Por muchas razones, puede suceder que los precios (u otra información) falten para una pieza. Si la pieza es vendible (es decir, el código de estado de venta es 4) y los precios faltan, se debe mostrar una advertencia al distribuidor. Luego, el distribuidor debe abrir un ticket con la mesa de ayuda de BRP para informar del problema.
La fecha de última actualización versus la fecha válida desde
Cuando llamas a la Parts API para obtener los cambios desde una fecha específica, llamas al Obtener Catálogo de Piezas endpoint con el parámetro last_change_date. Se proporciona un ejemplo en la sección Obtener Cambios de la Última Semana.
Digamos que llamas a la Parts API el 7 de julio de 2024 con esta llamada:
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=2024-12-16&language=en-US&page=1' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'La Parts API devuelve todas las piezas actualizadas desde el 16 de diciembre de 2024 (incluido).
👉 El valor last_change_date NO se devuelve en la respuesta.
En la respuesta de Parts API, ves la propiedad valid_from en cada una de las entradas de pricings.
{
"items": [
{
"product_code": "517309742",
"product_descr": "COVER_CVT ASSY",
"product_type": "30",
"gross_weight": 111,
"gross_weight_uom": "G",
"first_year_utilization": 2026,
"last_year_utilization": 2026,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"units_of_measure": [
{
"volume": 0,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "",
"length": 0,
"width": 0,
"gross_weight": 111,
"net_weight": 111,
"dimension_unit": "",
"numerator": 1,
"denominator": 1,
"height": 0
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2024-01-10",
"price_price_uom": 134.99,
"price_sales_uom": 134.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2024-01-10",
"price_price_uom": 79.48,
"price_sales_uom": 79.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
},
{
"product_code": "517309725",
"product_descr": "PANEL_ACOUSTIC",
"product_type": "30",
"gross_weight": 111,
"gross_weight_uom": "G",
"first_year_utilization": 2026,
"last_year_utilization": 2026,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"units_of_measure": [
{
"volume": 0,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "",
"length": 0,
"width": 0,
"gross_weight": 111,
"net_weight": 111,
"dimension_unit": "",
"numerator": 1,
"denominator": 1,
"height": 0
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2024-01-10",
"price_price_uom": 41.99,
"price_sales_uom": 41.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2024-01-10",
"price_price_uom": 24.98,
"price_sales_uom": 24.98,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}
],
"links": {
"previous": null,
"next": "https://cloud-api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=2024-12-16&sales_org=3020¤cy=USD&limit=2&page=2"
},
"meta": {
"total_records": 6314,
"total_pages": 3157,
"current_page": 1,
"limit": 2
}
}❗ La valid_from propiedad NO ES la last_changed_date.
❗ Al llamar a la Parts API con una last_changed_date, cada pieza devuelta ha cambiado y debe actualizarse.
⛔ No puedes usar la valid_from para decidir si una pieza debe actualizarse.
La valid_from indica cuándo el precio se volvió válido; no indica cuándo se modificó una pieza.
👉 Tenga en cuenta que la valid_from siempre es igual a la fecha actual o una fecha pasada. Si un precio es válido en una fecha futura, no verá este precio en la respuesta.
El cambio de una pieza no solo incluye los precios. La descripción o supersesión de las piezas puede modificarse, y estos cambios se tienen en cuenta al procesar la last_changed_date.
Aquí hay un escenario para ayudarle a entender.
👉 Recuerde que su DMS debe llamar a la Parts API diariamente. Esto no se muestra aquí para mantener el ejemplo simple.
- El 1 de septiembre, los precios de la pieza se modifican y la fecha valid_from se establece para el 1 de octubre.
- Su DMS llama a la Parts API el 2 de septiembre con un last_changed_date del 30 de agosto:
- Los nuevos precios de la pieza no son válidos.
- Como nada más ha cambiado, la pieza no se incluye en la respuesta.
- El 3 de septiembre se cambió la descripción de la pieza.
- Su DMS llama a la Parts API el 4 de septiembre con un last_changed_date del 1 de septiembre:
- La pieza ha sido modificada, por lo que se incluye en la respuesta.
- Sin embargo, los nuevos precios aún no son válidos, por lo que se usan los precios actuales.
- Su DMS llama a la Parts API el 4 de octubre con una last_changed_date del 1 de octubre:
- Los nuevos precios son válidos, por lo que la pieza se incluye en la respuesta con los nuevos precios.
- Su DMS llama a la Parts API el 5 de octubre con una last_changed_date del 2 de octubre:
- La pieza no se incluye en la respuesta ya que nada ha cambiado desde el 2 de octubre.
Referencia de la API
curl --location 'https://qa-cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=1900-01-01&language=en-US&page=1&limit=5' \
--header 'Authorization: Bearer REPLACE_ME' curl --location 'https://cloud-api.brp.com/dcp/v4/part/779140?sales_org=1010¤cy=CAD&language=fr-CA' \
--header 'Authorization: Bearer REPLACE_ME' Tablas de referencia
Organización de Ventas
Clave | Valor | Versión 3 | Versión 4 |
|---|---|---|---|
Canadá | 1010 | | X |
EE. UU. | 3020 | | X |
Escandinavia | 6030 | X | |
Europa (EMEA) | 6050 | X | |
México | 8070 | X | |
Brasil | 8075 | X | |
Asia-Pacífico (APAC) | 7080 | X | |
Moneda
Organización de Ventas | Moneda | Versión 3 | Versión 4 |
|---|---|---|---|
1010 - Canadá | CAD | | X |
3020 - EE. UU. | USD | | X |
6030 - Escandinavia | EUR | X | |
6030 - Escandinavia | NOK | X | |
6050 - Europa (EMEA) | SEK | X | |
6050 - Europa (EMEA) | EUR | X | |
6050 - Europa (EMEA) | GBP | X | |
8070 - México | MXN | X | |
8075 - Brasil | BRL | X | |
7080 - Asia-Pacífico (APAC) | AUD | X | |
7080 - Asia-Pacífico (APAC) | NZD | X | |
Idiomas
Idioma en código de idioma ISO (ISO-639-1 + ISO 3166-1)
Formato: xx-XX
xx: código de idioma en minúsculas
XX: código de país en mayúsculas
Valores de códigos de idioma admitidos
Código | Idioma |
|---|---|
de | Alemán |
en | Inglés |
es | Español |
fi | Finés |
fr | Francés |
it | Italiano |
nl | Neerlandés |
no | Noruego |
pt | Portugués (Brasil) |
sv | Sueco |
Cómo hacerlo
Esta sección proporciona información sobre cómo obtener resultados específicos con la API.
Obtener la primera página
Obtenga la primera página del catálogo completo de piezas. En este escenario, la solicitud se realiza para un distribuidor canadiense:
- Organización de ventas: 1010
- Moneda: CAD
- Idioma: fr-CA
La carga de respuesta contiene la lista de Pieza recursos, el objeto links y el objeto meta. La propiedad links.previous es NULL ya que esta es la primera página. La propiedad links.next contiene la URL a la siguiente página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=1&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obtener página siguiente
Obtén la siguiente página del catálogo completo usando la links.next URL que se encuentra en la carga de la respuesta.
La carga de la respuesta contiene la lista de Pieza recursos, ellinks objeto, y el meta objeto. La links.previous propiedad contiene la URL de la primera página. La links.next propiedad contiene la URL de la siguiente página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=2&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obtener la última página
Obtén la siguiente página del catálogo completo usando la links.next URL que se encuentra en la respuesta.
La respuesta contiene la lista de Pieza recursos, el objeto links y el objeto meta. La propiedad links.previous contiene la URL de la página anterior. La propiedad links.next es NULL ya que esta es la última página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=606&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obtener los cambios de la última semana
Obtener la primera página de los cambios realizados en el catálogo de piezas en los últimos siete días, asumiendo que la solicitud se realizó el 16 de diciembre de 2024.
En este escenario, la solicitud se realiza para un distribuidor de EE. UU.:
- Organización de ventas: 3020
- Moneda: USD
- Idioma: en-US
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=2024-12-09&language=en-US&page=1&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'Obtener una pieza
Obtener una pieza específica para un distribuidor de EE. UU.:
- Organización de ventas: 3020
- Moneda: USD
- Idioma: en-US
curl --location 'https://cloud-api.brp.com/dcp/v4/part/271001633?sales_org=3020¤cy=USD&language=en-US' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Manejo de Errores
Esta sección presenta varios escenarios de llamadas incorrectas o impropias, que resultan en mensajes de error y resultados inadecuados.
400 Solicitud Incorrecta
El código de estado 400 generalmente se observa durante el desarrollo y la integración y no debería recibirse durante las operaciones normales. La respuesta devuelta contiene la información necesaria para corregir el problema.
Muchos problemas pueden causar un código de estado 400; los más comunes se enumeran en la tabla a continuación.
Respuesta | Resolución |
|---|---|
Se devuelve si la organización de ventas no es válida. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-1",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "request validation failed",
"payload": {
"details": [
{
"message": "Instance value (\"1000\") not found in enum (possible values: [\"6030\",\"6050\",\"8070\",\"8075\",\"7080\",\"1010\",\"3020\"]): []"
}
]
}
}
} | Asegúrate de que la organización de ventas sea una de la tabla Organización de ventas. |
Se devuelve si la moneda no es válida. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-2",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "request validation failed",
"payload": {
"details": [
{
"message": "Instance value (\"UDS\") not found in enum (possible values: [\"MXN\",\"NZD\",\"AUD\",\"EUR\",\"NOK\",\"SEK\",\"GBP\",\"BRL\",\"CAD\",\"USD\"]): []"
}
]
}
}
} | Asegúrate de que la moneda sea una de la tabla Moneda. |
Se devuelve si el formato del idioma no es válido. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423546-1",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "request validation failed",
"payload": {
"details": [
{
"message": "ECMA 262 regex \"^[a-z]{2}-[A-Z]{2}$\" does not match input string \"XX-YY\": []"
}
]
}
}
} | El formato válido del idioma es el siguiente Formato: xx-XX xx: código de idioma en minúsculas XX: código de país en mayúsculas Debe ingresarse un formato de idioma válido para obtener una respuesta adecuada. |
Se devuelve si un parámetro no es válido {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-4",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "request validation failed",
"payload": {
"details": [
{
"message": "Parameter 'sales_org' is required but is missing.: []"
}
]
}
}
} | Asegúrate de que todos los parámetros obligatorios se proporcionen y tengan un valor válido. |
Se devuelve cuando falta un parámetro obligatorio. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22695-423701-2",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "request validation failed",
"payload": {
"details": [
{
"message": "Query parameter 'currency' is required on path '/parts' but not found in request.: []"
}
]
}
}
} | Asegúrate de que todos los parámetros obligatorios se proporcionen y tengan un valor válido. |
401 No Autorizado
El código de estado de error 401 No Autorizado se devuelve cuando intentas llamar a la API con un access_token expirado.
Debes obtener un nuevo access_token con una llamada a la API de Autenticación de Aplicaciones.
El código de estado de error 401 No Autorizado también se devuelve si no solicitaste acceso a la API creando un ticket en el DCP Jira.
Cuando estés listo para comenzar a trabajar en una API, debes crear un ticket de certificación en Jira, como se describe en la sección Actividades de Certificación con Jira.
Si ya comenzaste a trabajar en una API y perdiste el acceso, crea un ticket de soporte como se describe en la sección Abrir un Ticket de Soporte.
404 No Encontrado
El código de estado 404 Not Found se devuelve cuando no se encuentra el número de pieza (código de producto).
{
"status": "404",
"id": "rrt-06edc2039f6ce7033-b-ea-9106-103440333-3.1",
"title": "not_found",
"meta": {
"service": "07",
"detail": "Product code 222981605 not found."
}
}El distribuidor puede haber cometido un error al ingresar el número de pieza. Debes informar el error al usuario para que pueda intentarlo nuevamente.
Requisitos de DSP
Requisitos funcionales
ID | Tipo | Requisito |
|---|---|---|
1 | Obligatorio | La API de Piezas debe llamarse automáticamente diariamente para obtener los cambios del catálogo de los últimos 2 días. ❗ No debe requerirse ninguna acción manual del concesionario para actualizar el catálogo en su DMS ❗ |
2 | Obligatorio | El catálogo completo de piezas debe estar disponible para el concesionario. La API de Piezas debe llamarse al menos una vez para obtener el catálogo completo de piezas. |
3 | Obligatorio | El concesionario debe poder buscar un número de pieza específico en su DMS y mostrar el resultado en la pantalla. |
4 | Obligatorio | Se muestra un mensaje al concesionario si una pieza vendible no tiene precio. |
5 | Opcional | El concesionario puede buscar y navegar el catálogo de piezas, filtrarlo por tipo de pieza y línea de producto, y buscar texto en la descripción. |
6 | Opcional | La API de Piezas debería llamarse mensualmente para obtener los cambios de los últimos 30 días. |
7 | Obligatorio | Las medidas para las piezas deben ser visibles para el concesionario. |
Actividades de certificación
Esta sección presenta todas las actividades de certificación y validaciones que deben completarse para certificar la API.
Aseguramiento de la calidad
Las pruebas enumeradas en la tabla a continuación deben realizarse con éxito en el entorno de prueba antes de que pueda comenzar la fase piloto del concesionario.
ID | Prueba | Resultado esperado |
|---|---|---|
1 | Se carga el catálogo completo de piezas y el DMS muestra las siguientes piezas:
| El catálogo completo de piezas está cargado en el DMS. ❗ Las medidas son visibles para el concesionario. |
2 | El catálogo de piezas se actualiza diariamente | Los cambios en el catálogo de piezas son visibles en el DMS. |
3 | Buscar un número de pieza específico (715009775) | Se puede buscar un número de pieza específico desde el DMS y el resultado se muestra. |
4 | Buscar un número de pieza inválido (12345678) | El DMS permite buscar un número de pieza específico; aparecerá un error si el número de pieza es inválido. |
5 | Buscar un número de pieza obsoleto (204072321) | El DMS puede buscar un número de pieza específico y aparecerá un mensaje si la pieza está obsoleta. |
6 | Buscar un número de pieza antiguo (080037100) | Se puede buscar un número de pieza específico desde el DMS y se muestra un mensaje si la pieza es antigua y no se puede pedir a través de BRP. |
Distribuidor Piloto
La siguiente tabla describe los parámetros y validaciones del piloto del concesionario.
Parámetro | Valor |
|---|---|
Entorno | Producción |
Número de concesionarios | 1 a 3 |
Duración | 2 semanas |
Validación 1 | El catálogo de piezas se actualiza diariamente |
Validación 2 | El concesionario puede acceder al catálogo de piezas |
Validación 3 | Se puede buscar un número de pieza específico desde el DMS y el resultado se muestra |
Postman
Esta sección describe lo que está disponible en Postman para explorar la API.
Entornos
Un entorno de Postman está disponible para probar la API de Parts. Este entorno de Postman contiene las variables que utilizan las consultas y está configurado para conectarse al entorno de prueba.
Colecciones
La colección DMS - Parts contiene ejemplos de llamadas API para obtener el catálogo de piezas o una pieza específica.