Comprendre les transactions de détail
Cette section fournit des informations essentielles sur les transactions et divers aspects de l'API des Transactions de Détail.
❗ ❗ ❗ Prenez un moment pour le lire ! ❗ ❗ ❗
Concepts de Base
Cette section présente les concepts de base pour les transactions propriétés des objets.
Séparateur Décimal
Tous les champs numériques utilisent un point (.) comme séparateur décimal. La virgule (,) n'est PAS prise en charge comme séparateur décimal.
Propriétés Obligatoires et Optionnelles
Les propriétés de l'objet transaction sont listées dans le Propriétés section. Certaines propriétés sont obligatoires (celles identifiées en bleu et avec un astérisque). Les autres propriétés sont optionnelles et peuvent être exclues si vous n'avez pas l'information.
L'API renvoie un code d'état 400 Bad Request si la charge utile manque d'une propriété obligatoire.
Si la propriété obligatoire est un tableau et qu'il n'y a aucune information à envoyer, la charge utile doit contenir un tableau vide.
Par exemple, la charge utile doit contenir un tableau de pièces vide s'il n'y a pas de transaction OTC.
"parts": [],
Par exemple, le concessionnaire peut ne pas avoir inclus la lecture du compteur kilométrique dans un bon de réparation. La odometer_reading propriété peut être exclue de la charge utile ou envoyée avec une null valeur.
❗ Les propriétés optionnelles doivent être incluses dans votre charge utile si l'information est disponible dans votre DMS.
Valeur manquante pour une propriété
Si votre DMS n'a pas l'information pour une propriété de transaction et que la propriété est optionnelle, vous pouvez l'enlever de la charge utile.
Si la propriété est obligatoire, vous pouvez définir la propriété en fonction du type de propriété :
- Chaîne : une chaîne vide ("") ou null.
- Nombre : une valeur nulle.
- Date : une valeur nulle.
Prix
Il existe de nombreuses propriétés de prix trouvées dans les transactions de pièces et d'unités. La plupart sont assez simples.
- Prix du concessionnaire : Le prix unitaire (pour une quantité de 1) que le concessionnaire fixe pour la pièce ou le véhicule.
- Coût du concessionnaire : Le prix unitaire (pour une quantité de 1) auquel le concessionnaire a acheté l'article auprès de BRP.
- Prix de vente conseillé par le fabricant (MSRP) : Le prix unitaire (pour une quantité de 1) prix de vente conseillé par le fabricant pour l'article au moment de la transaction.
- Prix total client : Le total prix payé par le client, y compris toutes les taxes, remises, frais d'expédition, etc. Voir ci-dessous pour plus d'informations sur le prix total client.
Le prix total client pour les pièces commence par la quantité valeur de propriété multipliée par le prix de vente conseillé par le fabricant (MSRP).
Tous les coûts supplémentaires sont inclus dans le calcul du prix total client pour un article.
Un prix peut être négatif s'il représente un retour, un échange ou une remise.
Coûts supplémentaires
Les documents de coûts supplémentaires indiquent ce qui est ajouté au coût du concessionnaire pour obtenir le prix total client.
👉 Si le prix_total_client est différent du prix de détail suggéré, la transaction doit inclure coûts supplémentaires pour expliquer la différence.
Il existe quatre types de coûts supplémentaires :
- Taxe : Le montant de la taxe appliquée à l'article.
- Logistique : Les frais associés à l'expédition, à la livraison, à l'emballage, etc.
- Remise : Le montant de la remise est soustrait du prix total.
- Autre : Tout autre coût inclus dans le prix total client qui ne relève pas des catégories ci-dessus.
Les coûts supplémentaires peuvent être un montant positif , comme les taxes, ou un montant négatif, comme une remise.
❗❗ Vous pouvez avoir des informations dans vos DMS sur des coûts supplémentaires non inclus dans le total_customer_price valeur. Ces coûts supplémentaires ne doivent pas être envoyés dans la charge utile ❗❗
❗❗ Si le coût additionnel est un tarif fixe, n'incluez pas le applicable_amount et taux pour la transaction. Incluez uniquement le montant champ dans le coût additionnel.
Ne pas envoyer un taux avec une valeur de 0. ❗❗
Voici un exemple d'un client achetant un nouveau véhicule et échangeant un ancien.
"units": [
{
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.2,
"hours": 1.5,
"class_code": "NEW",
"sales_lead_id": "xxxx-xxxx",
"total_customer_price": 10194.35, /* 8 */
"dealer_price": 16249.00, /* 1 */
"dealer_cost": 15000.00,
"msrp": 16249.00,
"currency": "CAD",
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 16249.00,
"rate": 0.15,
"amount": 2437.35 /* 2 */
},
{
"type": "Tax",
"description": "Environmental Tax",
"amount": 8.00 /* 3 */
},
{
"type": "Logistic",
"description": "Delivery Fee",
"amount": 50.00 /* 4 */
},
{
"type": "Discount",
"description": "Spring Sale Discount",
"rate" : -0.15,
"amount": -500.00 /* 5 */
},
{
"type": "Discount",
"description": "Delivery Fee Discount",
"amount": -50.00 /* 6 */
}
],
"trade_ins": [
{
"manufacturer": "BRP",
"vin": "2BPSTCEA0AA000001",
"odometer_reading": 16180,
"hours": 1024.7,
"price": -8000.00 /* 7 */
}
],
"financed_amount": 10994.21,
"financed_rate": 0.0499,
"financed_term_duration": 60
}
]Le prix total du client est calculé comme suit :
- + 16249 (prix du concessionnaire)
- + 2437.35 (Taxe de vente)
- + 8.00 (Taxe environnementale)
- + 50 (Frais de livraison)
- - 500 (Remise de vente de printemps)
- - 50 (Remise sur les frais de livraison)
- - 8000 (échange)
- = 10194.35
Un coût supplémentaire est également utilisé pour documenter les coûts des travaux effectués en dehors de la concession, qui sont facturés au client.
Par exemple, une pièce de carrosserie peut devoir être peinte lors d'une réparation de véhicule. La pièce de carrosserie est envoyée à un atelier de peinture, et le coût associé est documenté comme un coût supplémentaire. Par exemple:
"additional_costs": [
{
"type": "Other",
"description": "Side panel paint job",
"amount": 413.58
},
{
...Taxes
Les taxes doivent être incluses dans les coûts supplémentaires de chaque article d'une transaction. Par exemple, s'il y a deux pièces dans une transaction de pièces, il devrait y avoir un coût fiscal supplémentaire pour chacune des deux pièces.
curl --location 'https://qa-cloud-api.brp.com/dcp/v4/dealer/MY_DEALER/retail-transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--data '{
"transactions": [
{
"header": {
"cancel_flag": false,
"customers": [
{
"city": "Denver",
"country": "USA",
"customer_hash": "77c6c73a430e5b4630321d52eecfba3574662dcfcee84d92cefde2b93df03161",
"customer_id": "21765GE0",
"recipient": "Customer",
"state_province": "COL"
}
],
"transaction_close_date": "2023-06-14T00:00:00Z",
"transaction_number": "33446088",
"transaction_open_date": "2023-06-13T00:00:00Z",
"transaction_source": "In-Store",
"transaction_uuid": "f6c1d22c-0325-43d6-8d62-51623b8edb61"
},
"parts": [
{
"currency": "CAD",
"is_special_order": false,
"quantity_uom": "PC",
"part_description": "FLANGED TORX SCREW M6 X 30",
"part_number": "420441575",
"quantity": 10.0,
"dealer_cost": 1.74,
"dealer_price": 2.89,
"msrp": 2.89,
"total_customer_price": 28.90,
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 28.90,
"rate": 0.15,
"amount": 4.34
}
]
},
{
"currency": "CAD",
"is_special_order": false,
"quantity_uom": "PC",
"part_description": "XPS - SYN CHAIN CASE OIL 355ML",
"part_number": "9779156",
"quantity": 1.0,
"dealer_cost": 9.44,
"dealer_price": 15.99,
"msrp": 15.99,
"total_customer_price": 15.99,
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 15.99,
"rate": 0.15,
"amount": 2.40
}
]
}
],
"units": [],
"jobs": []
}
]
}'👉 Si votre DMS ne montre que le montant total de la taxe pour la transaction, ce montant doit être réparti entre chaque article.
Avec notre exemple ci-dessus, disons que votre DMS a une taxe totale de 6,74 $. Le prix total pour le client pour la transaction est de 44,89 $. Le montant de la taxe sera réparti comme suit :
- Première partie : 28,90 $ / 44,89 $ * 6,74 $ = 4,34 $
- Deuxième partie : 15,99 $ / 44,89 $ * 6,74 $ = 2,40 $
Échange dans une vente d'unité
Lorsqu'un client achète une unité, il peut donner une unité qu'il possède en échange pour réduire le coût de la nouvelle unité. Il existe au moins 3 scénarios différents concernant un échange :
- Un échange qui réduit le prix total pour le client.
- Un échange avec un remboursement qui réduit le prix total pour le client.
- Un échange avec un remboursement qui ne réduit pas le prix total pour le client.
❗Le montant de la reprise doit être négatif ❗
Scénario Simple
Le cas simple est lorsque la valeur de reprise est soustraite du prix total du client.
"units": [
{
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.2,
"hours": 1.5,
"class_code": "NEW",
"sales_lead_id": "xxxx-xxxx",
"total_customer_price": 10194.35, /* 8 */
"dealer_price": 16249.00, /* 1 */
"dealer_cost": 15000.00,
"msrp": 16249.00,
"currency": "CAD",
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 16249.00,
"rate": 0.15,
"amount": 2437.35 /* 2 */
},
{
"type": "Tax",
"description": "Environmental Tax",
"amount": 8.00 /* 3 */
},
{
"type": "Logistic",
"description": "Delivery Fee",
"amount": 50.00 /* 4 */
},
{
"type": "Discount",
"description": "Spring Sale Discount",
"rate" : -0.15,
"amount": -500.00 /* 5 */
},
{
"type": "Discount",
"description": "Delivery Fee Discount",
"amount": -50.00 /* 6 */
}
],
"trade_ins": [
{
"manufacturer": "BRP",
"vin": "2BPSTCEA0AA000001",
"odometer_reading": 16180,
"hours": 1024.7,
"price": -8000.00 /* 7 */
}
],
"financed_amount": 10994.21,
"financed_rate": 0.0499,
"financed_term_duration": 60
}
]Le prix total du client est calculé comme suit :
- + 16249 (prix du concessionnaire)
- + 2437.35 (Taxe de vente)
- + 8.00 (Taxe environnementale)
- + 50 (Frais de livraison)
- - 500 (Remise de vente de printemps)
- - 50 (Remise sur les frais de livraison)
- - 8000 (échange)
- = 10194.35
Échange avec un paiement
Le deuxième scénario est lorsque un paiement est associé à l'échange. Un paiement est effectué lorsqu'il reste un solde de prêt sur l'unité échangée, et le concessionnaire rembourse ce solde. Le résultat est que le montant de l'échange est inférieur, et cela ne réduit pas le coût total pour le client.
"units": [
{
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.2,
"hours": 1.5,
"class_code": "NEW",
"sales_lead_id": "xxxx-xxxx",
"total_customer_price": 12194.35, /* 9 */
"dealer_price": 16249.00, /* 1 */
"dealer_cost": 15000.00,
"msrp": 16249.00,
"currency": "CAD",
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 16249.00,
"rate": 0.15,
"amount": 2437.35 /* 2 */
},
{
"type": "Tax",
"description": "Environmental Tax",
"amount": 8.00 /* 3 */
},
{
"type": "Logistic",
"description": "Delivery Fee",
"amount": 50.00 /* 4 */
},
{
"type": "Discount",
"description": "Spring Sale Discount",
"rate" : -0.15,
"amount": -500.00 /* 5 */
},
{
"type": "Discount",
"description": "Delivery Fee Discount",
"amount": -50.00 /* 6 */
},
{
"type": "Other",
"description": "Payout",
"amount": 2000.00 /* 7 */
}
],
"trade_ins": [
{
"manufacturer": "BRP",
"vin": "2BPSTCEA0AA000001",
"odometer_reading": 16180,
"hours": 1024.7,
"price": -8000.00 /* 8 */
}
],
"financed_amount": 12194.35,
"financed_rate": 0.0499,
"financed_term_duration": 60
}
]Le prix total pour le client est calculé comme suit :
- + 16249 (prix du concessionnaire)
- + 2437.35 (Taxe de vente)
- + 8.00 (Taxe environnementale)
- + 50 (Frais de livraison)
- - 500 (Remise de vente de printemps)
- - 50 (Remise sur les frais de livraison)
- + 2000 (Paiement)
- - 8000 (échange)
- = 12194.35
👉 Le paiement doit être ajouté aux coûts supplémentaires ; sinon, le prix total pour le client sera incorrect.
Paiement Supérieur à la Valeur de l'Échange
Le troisième scénario est lorsque le paiement associé à l'échange est supérieur à la valeur de l'échange. Dans ce scénario, l'échange ne réduit pas le prix total pour le client.
"units": [
{
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.2,
"hours": 1.5,
"class_code": "NEW",
"sales_lead_id": "xxxx-xxxx",
"total_customer_price": 19194.35, /* 9 */
"dealer_price": 16249.00, /* 1 */
"dealer_cost": 15000.00,
"msrp": 16249.00,
"currency": "CAD",
"additional_costs": [
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": 16249.00,
"rate": 0.15,
"amount": 2437.35 /* 2 */
},
{
"type": "Tax",
"description": "Environmental Tax",
"amount": 8.00 /* 3 */
},
{
"type": "Logistic",
"description": "Delivery Fee",
"amount": 50.00 /* 4 */
},
{
"type": "Discount",
"description": "Spring Sale Discount",
"rate" : -0.15,
"amount": -500.00 /* 5 */
},
{
"type": "Discount",
"description": "Delivery Fee Discount",
"amount": -50.00 /* 6 */
},
{
"type": "Other",
"description": "Payout",
"amount": 6000.00 /* 7 */
}
],
"trade_ins": [
{
"manufacturer": "BRP",
"vin": "2BPSTCEA0AA000001",
"odometer_reading": 16180,
"hours": 1024.7,
"price": -5000.00 /* 8 */
}
],
"financed_amount": 12194.35,
"financed_rate": 0.0499,
"financed_term_duration": 60
}
]Le prix total pour le client est calculé comme suit :
- + 16249 (prix du concessionnaire)
- + 2437.35 (Taxe de vente)
- + 8.00 (Taxe environnementale)
- + 50 (Frais de livraison)
- - 500 (Remise de vente de printemps)
- - 50 (Remise sur les frais de livraison)
- + 6000 (Paiement)
- - 5000 (échange)
- = 19194.35
👉 Le paiement doit être ajouté aux coûts supplémentaires ; sinon, le prix total pour le client sera incorrect.
Agrégation des quantités
Si la quantité de pièces dépasse un, le coût_du_concessionnaire, prix_du_concessionnaire, et prix_de_vente_recommandé les propriétés restent unitaires (pour une quantité de 1).
Le prix_total_client propriété et les coûts_additionnels pour ces pièces sont pour le nombre de pièces indiqué par le valeur_de_quantité propriété.
Taux de main-d'œuvre de la carte de temps de travail
Les informations relatives à un travail de service sont contenues dans la travaux propriété.
Les informations ressemblent à ceci :
"jobs": [
{
"job_number": "14727",
"job_code": "OTH",
"description": "Special Ultra High Altitude Tuning",
"is_warranty_job": false,
"total_customer_job_price": 135.15,
"currency": "CAD",
"time_cards": [
{
"labour_worked_hours": 1.5,
"labour_billed_hours": 1.5,
"labour_rate": 85,
"technician_party_id": "TECH00123"
}
],
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.5,
"hours": 1.7,
"additional_costs": [
{
"amount": 7.65,
"description": "Sales",
"rate": 0.06,
"type": "Tax",
"applicable_amount": 127.50
}
]
}
]Le valeur_prix_total_client_travail est la somme de toutes les cartes_de_temps pour tous les techniciens qui ont travaillé sur le travail plus les coûts additionnels du travail. Pour chaque carte de temps, le montant est heures_facturées * taux_de_main-d'œuvre.
Mais que se le travail est effectué à un prix fixe pour le client ?
Dans ce cas, le taux_de_main-d'œuvre est calculé à partir des heures_de_main-d'œuvre_facturées valeur.
Par exemple, les données devraient ressembler à ceci si le travail est effectué à un prix fixe de 75 $ pour 1,5 heures.
Le taux_de_main-d'œuvre est de 75,00 $ / 1,5 heures = 50,00 $
"jobs": [
{
"job_number": "14727",
"job_code": "OTH",
"description": "Special Ultra High Altitude Tuning",
"is_warranty_job": false,
"total_customer_job_price": 79.50,
"currency": "CAD",
"time_cards": [
{
"labour_worked_hours": 1.5,
"labour_billed_hours": 1.5,
"technician_party_id": "TECH00123",
"labour_rate" : 50.00
}
],
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.5,
"hours": 1.7,
"additional_costs": [
{
"amount": 4.50,
"description": "Sales",
"rate": 0.06,
"type": "Tax",
"applicable_amount": 75.00
}
]
}
]Comprendre les Transactions
Cette section présente des informations détaillées sur le contenu de chaque type de transaction.
Tous les champs numériques utilisent un point (.) comme séparateur décimal. La virgule (,) est NON prise en charge comme séparateur décimal.
En-tête
La transaction en-tête contient des informations sur le client et la transaction telles que définies dans votre DMS.
Propriété | Qu'est-ce que c'est? |
|---|---|
numéro_de_transaction * | L'identifiant de la transaction est défini dans votre DMS. Il doit être unique pour le concessionnaire! |
date_ouverture * | La date à laquelle la transaction a été créée. Même si la transaction est modifiée après son ouverture, cette date ne change pas. |
date_de_clôture * | La date à laquelle la transaction a été clôturée dans votre DMS. La définition d'un transaction fermée peut différer d'un système à l'autre. En général, une transaction est considérée comme fermée si le client paie et que les fonds sont envoyés à la comptabilité. |
source_de_transaction * | La source de la transaction, soit "en magasin" soit "en ligne". L'objectif est de recevoir les transactions en ligne si elles sont disponibles dans votre DMS. |
drapeau_annulation * | Indique si la transaction a été annulée. Une transaction annulée n'est pas un retour. Un retour est une transaction avec des montants négatifs, comme décrit dans le Retours section. Si vous envoyez une transaction qui est ensuite annulée pour une raison quelconque, envoyez la même transaction avec le cancel_flag défini sur TRUE et un autre transaction_uuid valeur. Nous saurons alors que la transaction a été annulée. |
uuid_de_transaction * | Un identifiant unique pour indiquer ce itération de la transaction. Si une transaction est créée puis modifiée, par exemple, en ajoutant des pièces, le numéro_de_transaction et date_ouverture les propriétés conservent la même valeur lorsque vous envoyez la charge utile. Cependant, le transaction_uuid propriété doit être différente. Le numéro_de_transaction nous permet de trouver la transaction originale, et les différentes uuid_de_transaction indique que la transaction a été mise à jour. |
clients * | La liste des clients pour les transactions. Voir ci-dessous pour les propriétés des clients. Si aucune information client n'est disponible, le tableau est vide. |
- Les propriétés en bleu et marquées d'un astérisque (*) sont obligatoires dans la ressource.
Bien qu'il n'y ait généralement qu'un seul client pour une transaction, l'en-tête contient une liste de clients au cas où vous en auriez besoin.
❗ ❗ Aucune information personnelle du client ne doit être envoyée dans la charge utile ❗ ❗
Aucun prénom, nom de famille, adresse e-mail, numéro de téléphone, etc.
La seule information fournie est la ville, l'état ou la province, et le pays du client.
Si la customer_id contient des informations personnelles du client, telles que son nom de famille, définissez la propriété sur null ou une chaîne vide.
BRP utilise les informations du client dans l'en-tête pour lier les transactions effectuées par le même client chez le même concessionnaire.
L'objectif est d'extraire des statistiques sur la fidélité des clients, des concessionnaires et des marques.
L'ID client et/ou les valeurs de hachage client sont utilisés pour cela. S'ils ne sont pas disponibles, cela ne pose aucun problème 😁.
Propriété | Qu'est-ce que c'est? |
|---|---|
identifiant_client * | Un identifiant unique au niveau du concessionnaire (ou DMS) pour ce client. S'il n'est pas disponible, par exemple, si le client se rend au comptoir sans un compte chez le concessionnaire, utilisez "INVITÉ". IMPORTANT Si le customer_id la valeur de la propriété contient les informations personnelles du client, telles que son nom de famille, définissez la propriété sur null ou une chaîne vide.
|
hash_client * | Un hachage SHA-256 sur le numéro de téléphone et l'email du client. Le hachage doit être calculé sur la chaîne : Numéro de téléphone E.164 + espace + adresse e-mail Par exemple : +18882729222 [email protected] IMPORTANT Définissez la valeur de la propriété sur null si l'email ou le numéro de téléphone est manquant. |
destinataire * | Qui était à l'origine de la transaction ? Un des : . Client . Soi-même . Concessionnaire Client: le client "standard". Soi-même: la concession elle-même, par exemple, vendre des pièces à différents départements, ajouter des accessoires à un véhicule, etc. Concessionnaire: un concessionnaire autre que lui-même. |
ville | La ville où vit le client. Si ce n'est pas disponible, la ville où se trouve le concessionnaire. |
état_province | État ou province où le client vit. Mettez-le à null s'il ne s'applique pas au pays. |
pays | Le pays où vit le client. Si ce n'est pas disponible, le pays où se trouve le concessionnaire. |
- Les propriétés en bleu, marquées d'un astérisque (*), sont obligatoires dans la ressource.
Pièces
Le Parts transaction est utilisé pour les ventes de pièces, accessoires et vêtements (PA&A) au comptoir.
❗ ❗ Seules les pièces, accessoires et vêtements BRP doivent être inclus dans les transactions de pièces ❗ ❗
Si une transaction contenant une unité BRP contient également des pièces non-BRP, ces pièces sont incluses dans un objet de pièce agrégé avec le numéro_de_pièce et description_de_pièce propriétés définies sur "PIÈCES-NON-BRP".
Propriété | Qu'est-ce que c'est? |
|---|---|
description_de_part * | La description de la pièce BRP est obtenue à partir du catalogue de pièces (voir le API des pièces). Définir sur "NON-BRP-PARTS" pour une pièce non-BRP utilisée dans un ordre de réparation. Si la description de la pièce n'est pas disponible, la propriété est définie sur null ou une chaîne vide. |
numéro_de_pièce * | Le numéro de pièce BRP est obtenu à partir du catalogue de pièces (voir le API des pièces). Définir sur “NON-BRP-PARTS” pour une pièce non-BRP utilisée idans un ordre de réparation. |
quantité * | La quantité de cette pièce. Cela peut être un nombre décimal pour des pièces avec une unité de mesure, comme la longueur (mètres, pieds) ou le volume (litres, onces, gallons). |
quantité_uom * | Les unités de mesure (UOM) sont utilisées pour qualifier la quantité. La valeur est obtenue à partir du catalogue de pièces (voir le API des pièces). Les unités de mesure valides sont listées dans le tableau des unités de mesure (UoM) ci-dessous. |
est_une_commande_spéciale * | Un drapeau pour indiquer que cette partie est une commande spéciale pour un client. C'est une pièce qui n'est généralement pas en stock et a été commandée pour un client. |
prix_total_client * prix_du_concessionnaire coût_du_concessionnaire prix de détail suggéré par le fabricant | Les prix sont tels que décrits dans la section Prix ci-dessus. |
devise * | La monnaie est utilisée pour tous les prix dans cet objet et les objets enfants. Les unités de mesure valides sont énumérées dans la section des devises ci-dessous. |
numéro_de_travail_associé | Le numéro de travail de l'ordre de réparation qui a consommé cette pièce. C'est ainsi que les pièces utilisées dans un ordre de réparation sont identifiées. La valeur doit correspondre à l'un des numéro_de_travailpropriété dans le Travaux tableau. Voir le Emplois section ci-dessous. |
coûts supplémentaires * | Un ensemble de coûts supplémentaires. S'il n'y a pas de coûts supplémentaires, le tableau est vide. Voir la section Coûts supplémentaires ci-dessus. |
- Les propriétés en bleu et marquées d'un astérisque (*) sont obligatoires dans la ressource.
Le associated_job_number est essentiel pour lier les pièces au travail en utilisant les pièces.
La valeur doit correspondre à l'un des job_number dans la Jobs tableau.
Emplois
Les Emplois transaction représente le travail effectué sur un véhicule pour un bon de réparation d'un concessionnaire.
Si le travail est effectué sur un véhicule non-BRP en utilisant des pièces BRP, la transaction ne contient que ces pièces et aucun emploi.
Propriété | Qu'est-ce que c'est? |
|---|---|
numéro_de_travail * | Le numéro de travail provient du DMS du concessionnaire et doit être unique dans la concession. |
code_de_travail * | Le code pour ce travail. |
description * | La description du poste, telle qu'elle a été saisie dans le DMS par le technicien. |
est_travail_garantie * | Drapeau pour indiquer si ce travail est couvert par une garantie |
numéro_de_demande_de_garantie | Le numéro de réclamation qui a été reçu de BRP. |
prix_total_client_travail * | Les prix totaux des clients comme décrit dans la section Prix ci-dessus. IMPORTANT Le prix total du travail client est la somme de tous les coûts de main-d'œuvre, excluant les coûts des pièces. |
devise * | La monnaie utilisée pour tous les prix dans cet objet et les objets enfants. Les unités de mesure valides sont énumérées dans la section des devises ci-dessous. |
wine | Le numéro d'identification du véhicule (NIV) de l'unité en réparation/entretien. |
lecture du compteur kilométrique | Lecture du compteur kilométrique en kilomètres. Si le compteur kilométrique du véhicule est en miles, il doit être converti en kilomètres. |
heures | Lecture du nombre d'heures de travail pour un véhicule sans odomètre, comme un Sea-Doo. |
fabricant | Le fabricant de l'unité sur laquelle le travail a eu lieu. |
modèle | Le modèle de l'unité sur laquelle le travail a eu lieu. |
année | L'année modèle de l'unité sur laquelle le travail a eu lieu. |
cartes_de_temps * | Un tableau de cartes de temps. Le tableau est vide si aucune information sur les cartes de temps n'est disponible. Voir ci-dessous pour les détails. |
coûts_additionnels * | Un ensemble de coûts supplémentaires. S'il n'y a pas de coûts supplémentaires, le tableau est vide. Voir la section Coûts Supplémentaires ci-dessus. Si le travail est effectué en dehors de la concession, par exemple, envoyer une pièce à un atelier de peinture, le coût est documenté avec un coût supplémentaire de type "Autre". |
- Les propriétés en bleu, marquées d'un astérisque (*), sont obligatoires dans la ressource.
Le Carnet de Temps documente le travail d'un technicien sur un emploi. Il y a un objet de carnet par technicien travaillant sur le travail.
Propriété | Qu'est-ce que c'est? |
|---|---|
heures_de_travail_effectuées * | Le nombre d'heures que ce technicien a travaillées sur ce travail. |
heures_facturées * | Le nombre d'heures que ce technicien a facturées au client pour ce travail. |
taux_de_travail * | Le taux horaire de ce technicien. |
id_du_partenaire_technicien * | L'ID du technicien au concessionnaire. |
- Les propriétés en bleu, marquées d'un astérisque (*), sont obligatoires dans la ressource.
Les heures travaillées et facturées peuvent différer si le concessionnaire décide de ne pas facturer le client pour toutes les heures.
Pour chaque carte de temps, la valeur de labour_billed_hours x labour_rate est ajoutée au total_customer_job_price pour le travail.
Par exemple, 2 techniciens ont travaillé sur un véhicule, l'un pour réparer un défaut et l'autre pour installer un accessoire.
{
"job_number": "5678",
"job_code": "FIX",
"description": "Repair and install",
"is_warranty_job": false,
"total_customer_job_price": 197.50,
"currency": "CAD",
"time_cards": [
{
"labour_worked_hours": 1.5,
"labour_billed_hours": 1.5,
"labour_rate": 65,
"technician_party_id": "TECH00101"
},
{
"labour_worked_hours": 2,
"labour_billed_hours": 2,
"labour_rate": 50,
"technician_party_id": "TECH00113"
}
],
"vin": "2BPSCDRB0AA000001",
"odometer_reading": 1.2,
"hours": 1.5
}Le prix total pour le travail inclus dans le total_customer_job_price est :
Unités
La Unités documente la vente d'un véhicule à un client.
❗ ❗ Votre DMS envoie uniquement les ventes unitaires de véhicules BRP ❗ ❗
Propriété | Qu'est-ce que c'est? |
|---|---|
vin * | Le numéro d'identification du véhicule (NIV) du véhicule acheté. |
compteur kilométrique | Lecture du compteur kilométrique en kilomètres. Si le compteur kilométrique du véhicule est en miles, il doit être converti en kilomètres. |
heures | Lecture du nombre d'heures de travail pour un véhicule sans odomètre, comme un Sea-Doo. |
code_classe * | Le code de classe pour ce véhicule : "Neuf", "D'occasion" ou "Démonstrateur". |
id_de_piste_de_vente | L'ID BRP des pistes de vente qui ont abouti à cette vente. |
prix_total_client * prix_du_concessionnaire coût_du_concessionnaire prix de vente conseillé | |
devise * | La monnaie est utilisée pour tous les prix de cet objet et de ses objets enfants. Les unités de mesure valides sont énumérées dans la section des devises ci-dessous. |
montant_financé | Le montant qui a été financé pour l'achat de ce véhicule. |
taux_financé | Le taux de financement. |
durée_du_terme_financé | Le nombre de mois sur lesquels l'unité est financée. |
échange_ins | Une liste de véhicules à reprendre. La propriété n'est pas envoyée ou est vide s'il n'y a pas d'échange. |
- Les propriétés en bleu et marquées d'un astérisque (*) sont obligatoires dans la ressource.
Le Trade-In documente le véhicule que le client a donné en échange pour réduire le total_customer_price valeur.
Propriété | Qu'est-ce que c'est? |
|---|---|
fabricant | Le fabricant du véhicule échangé. |
wine | Le VIN du véhicule échangé. |
compteur kilométrique | Lecture du compteur kilométrique en kilomètres. Si le compteur kilométrique du véhicule est en miles, il doit être converti en kilomètres. |
heures | Lecture du nombre d'heures de travail pour un véhicule sans odomètre, comme un Sea-Doo. |
modèle | Le modèle du véhicule échangé. |
prix * | Le prix que le concessionnaire a payé pour l'unité échangée. Le prix doit être un nombre négatif pour le soustraire de la total_customer_price valeur. |
année | L'année modèle du véhicule échangé. |
- Les propriétés en bleu et marquées d'un astérisque (*) sont obligatoires dans la ressource.
De préférence, vous devriez inclure le VIN d'un véhicule d'échange. Si le VIN n'est pas disponible, le fabricant et l'année du modèle seront utilisés.
Un véhicule d'échange prix doit être un nombre négatif pour retirer la valeur du total_client_prix valeur.
Format de données
Monnaie
Organisation de vente | Monnaie | Version 3 | Version 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 | |
Unité de Mesures
Code | Description | Dimension |
|---|---|---|
" | Pouce | Longueur |
BOX | Box | Quantity |
BR | Fût | Quantity |
BT | Bouteille | Quantity |
BU | Bucket | Quantity |
PEUT | Container | Quantity |
CC | Cubic centimeter | Volume |
MCC | Cubic decimeter | Volume |
CG | Centigrammes | Weight |
CL | Centilitres | Volume |
CM | Centimeter | Length |
CS | Caisse | Quantity |
FT | Feet | Length |
G | Gram | Poids |
GA | Gallons | Volume |
GU | American gallon | Volume |
H | Time | Time |
KG | Kilogram | Poids |
L | Litre | Volume |
LB | Book | Weight |
LT | Terrain | Quantity |
M | Mètre | Length |
M2 | Mètre carré | Zone |
MG | Milligramme | Weight |
ML | Millilitre | Volume |
MM | Millimètre | Length |
OZ | Onces | Weight |
P | Points | Quantity |
PAC | Package | Quantity |
PC | Room | Quantity |
PR | Pair | Quantity |
PT | Pintes | Volume |
QT | Quarts | Volume |
ROL | Rouler | Quantity |
RÉGLER | Define | Quantity |
SF | Pieds carrés | Zone |
SH | Leaves | Quantity |
SI | Square inch | Zone |
SY | Square meter | Zone |
TB | Tube | Quantity |
YD | Court | Length |
HL | Hectolitre | Volume |
M3 | Cubic meter | Volume |
P3 | Pieds cubes | Volume |
LM | Linear meter | length |
CM2 | Centimeter carré | Surface |
PO3 | Pouce cube | Volume |
DZ | Douzaine | Quantité |
État de la transaction
Cette section décrit comment gérer les changements dans une transaction.
Transactions mises à jour
L'exigence de base est que seules les transactions fermées sont envoyées au BRP.
Cependant, en fonction du comportement de votre DMS et de ce qui est considéré comme une transaction fermée, une transaction envoyée à l'API des Transactions de Vente au Détail peut être modifiée dans votre DMS.
Vous pouvez envoyer la transaction mise à jour tant que l' numéro_de_transaction est le même pour les deux instances, mais l' uuid_de_transaction est différent.
Une transaction peut être mise à jour tant que l'transaction_number est le même pour les deux instances, mais l'transaction_uuid est différent.
Le transaction_number,transaction_uuid, et la date de réception de la transaction ajoutée par l'API de Transaction de Vente au Détail sont utilisées lors de l'analyse des données pour trouver la dernière transaction.
Transactions Annulées
Votre DMS peut permettre au concessionnaire d'annuler une transaction. Pour annuler une transaction, mettez-la à jour avec le cancel_flag défini sur TRUE.
Puisqu'une annulation est une mise à jour, les mêmes règles s'appliquent : l'transaction_number est le même pour les deux instances, mais l'transaction_uuid est différent.
Une transaction peut être annulée en l'envoyant avec le cancel_flagset à TRUE, le même transaction_number.
Retours
Les retours sont gérés comme toute autre transaction, mais avec un total_client_prix et tous les coûts supplémentaires.
Par exemple, lorsqu'un client retourne une pièce, la transaction apparaît comme suit.
{
"part_description": "Deep Snow Soft Knee Pads",
"part_number": "860202702",
"quantity": 1,
"quantity_uom": "PC",
"is_special_order": false,
"total_customer_price": -120.74,
"dealer_price": 104.99,
"dealer_cost": 79.99,
"msrp": 99.99,
"currency": "CAD",
"additional_costs":[
{
"type": "Tax",
"description": "Sales Tax",
"applicable_amount": -104.99,
"rate": 0.15,
"amount": -15.75
}
],
"associated_job_number": ""
}Vous pouvez mélanger des transactions "normales" et des transactions de retour dans le même ensemble de transactions.
Par exemple, le tableau des pièces pourrait contenir 2 achats par un client et un retour.
Confidentialité des données
Consentement au partage de données
Comme expliqué dans le Consentement au partage de données du concessionnaire section, le concessionnaire doit consentir au partage de données avant que des données de transaction de vente au détail ne soient envoyées.
Le partage des données de transaction de détail est un sujet plus sensible que le partage des données d'inventaire de pièces avec les concessionnaires.
Comprendre ce qui est partagé et pourquoi à travers l'API des Transactions de Détail est important pour l'expliquer aux concessionnaires.
Informations Non-BRP
Seules les transactions contenant des informations BRP PA&A et d'unité sont envoyées à l'API des Transactions de Détail !
Si une transaction concerne uniquement des PA&A et des unités non-BRP, elle ne doit pas être envoyée à l'API des Transactions de Détail !
Informations Client
Les règles et lois sur la confidentialité des données existent dans certains pays depuis des années et sont maintenant mises en œuvre dans de nombreux États et pays.
C'est pourquoi la charge utile des transactions de détail ne contient pas les informations personnelles du client.
Le customer_hashpropriété dans le client objet a été conçu pour être non réversible : l'email et le numéro de téléphone du client ne peuvent pas être récupérés à partir du hash.
Il est essentiel d'inclure la valeur de hachage UNIQUEMENT si l'email et le numéro de téléphone du client sont disponibles.
Si l'un d'eux est manquant, la valeur de hachage doit être définie sur null.
Transmission de données
Quand envoyer
Votre DMS peut envoyer des transactions au fur et à mesure qu'elles sont clôturées en temps réel ou sous forme de soumission groupée à la fin de la journée de travail.
Les transactions clôturées consistent en des factures qui sont enregistrées comme complètes dans votre DMS. Si un concessionnaire rouvre une facture pour apporter des modifications, cette facture n'est pas envoyée à BRP tant qu'elle n'a pas été à nouveau clôturée.
Lorsque la facture est à nouveau clôturée, envoyez la facture mise à jour comme décrit dans la Transactions mises à jour section.
La "règle générale" concernant ce qu'il faut inclure dans votre charge utile de transaction à BRP est toute transaction enregistrée dans le grand livre général (GL).
Données historiques
Pour de nombreux programmes BRP, les données historiques des transactions de détail sont essentielles et, dans certains cas, requises. Par exemple, le programme de gestion des stocks de détail (RIM) exige que 18 à 24 mois de données de transactions de détail soient disponibles avant que le concessionnaire puisse rejoindre RIM.
Lorsque le concessionnaire consent au partage de données, toutes les données disponibles au cours des 4 dernières années doivent être envoyées.
Si le concessionnaire refuse le partage de données, la transmission des données historiques doit cesser.
Retransmission des données
Votre DMS doit être capable de renvoyer des transactions pour une plage de dates spécifique. Cette fonction est manuelle ; la demande ne sera pas envoyée via une API.
Cette fonction sera utilisée si, pour une raison quelconque, des données sont manquantes ou corrompues.
Logique de Réessai Automatique
En cas de défaillance ou d'interruption du système BRP en raison de maintenance ou d'autres problèmes imprévus, votre DMS reçoit un message d'erreur de l'API contenant une description de l'erreur.
Votre DMS doit avoir un processus d'automatisation pour renvoyer une demande jusqu'à ce que vous receviez une réponse d'accusé de réception.
Pour les premières 24 heures, une stratégie de réessai glissante est recommandée. Dans cette stratégie, votre DMS continue de réessayer l'appel à l'API, ajoutant des délais d'attente incrémentiels à chaque tentative suivante.
Par exemple, le premier réessai peut attendre 5 minutes, le deuxième attendra 10 minutes, le troisième attendra 20 minutes, et ainsi de suite. Chaque réessai double le temps d'attente jusqu'à ce que le nombre de réessais soit dépassé.
Après 24 heures de réessais, votre DMS doit continuer à réessayer une fois par jour. Si le problème persiste, votre DMS doit conserver toutes les données de transaction de détail BRP jusqu'à ce que le problème soit résolu.
Transition entre l'API V2 et l'API V4
De nombreux programmes commerciaux BRP utilisent des données de transaction de détail. L'API V2 (STAR XML) et l'API V4 (JSON) diffèrent considérablement dans leurs formats de charge utile et leur traitement en arrière-plan.
L'API V2 envoie les données de transaction de détail à une base de données SQL Server, que les programmes commerciaux BRP utilisent actuellement pour récupérer les données.
L'API V4 envoie les données de transaction de détail à une base de données cloud, et les programmes commerciaux BRP doivent être modifiés pour récupérer les données de cette base de données cloud.
Pour aider les programmes commerciaux BRP pendant la transition, l'API V2 doit rester active temporairement même si l'API V4 est certifiée et déployée en production.
👉 Les données de transaction de détail doivent être envoyées en utilisant à la fois l'API V2 et l'API V4 pendant la transition.
Dès qu'un nombre suffisant de DMS ont certifié l'API V4 pour inclure 70-75 % des concessionnaires, l'API V2 sera mise hors service.