Product Trail API
Gérez les mouvements d’inventaire à travers différents systèmes ERP avec une API REST unifiée.
Effectuez des ajustements de quantité, des entrées et sorties d’inventaire pour Acomba.
/Entity/ProductTrailAperçu
L’entité ProductTrail représente un mouvement d’inventaire dans votre système ERP.
Cette API permet d’effectuer des opérations de création (POST) sur les mouvements d’inventaire
de manière standardisée, permettant d’ajuster les quantités de produits en stock.
L’API utilise des endpoints REST standards avec les méthodes HTTP appropriées :
POST /Entity/ProductTrail– Créer un nouveau mouvement d’inventaire (ajustement de quantité)
Les mouvements d’inventaire permettent d’ajuster les quantités de produits en stock. Vous pouvez soumettre un seul mouvement ou une liste de mouvements pour un traitement en lot. Les produits segmentés (avec caractéristiques) sont également supportés.
Matrice de Support
Opérations supportées pour l’entité ProductTrail par système ERP :
| Système ERP | GET | POST | PUT |
|---|---|---|---|
| Acomba | ✗ Non | ✓ Oui | ✗ Non |
| QuickBooks Online | ✗ Non | ✗ Non | ✗ Non |
| Avantage | ✗ Non | ✗ Non | ✗ Non |
| Sage 50 | ✗ Non | ✗ Non | ✗ Non |
| Servex | ✗ Non | ✗ Non | ✗ Non |
| Servicentre | ✗ Non | ✗ Non | ✗ Non |
POST ProductTrail (Création)
Crée un nouveau mouvement d’inventaire (ajustement de quantité) dans le système ERP. Vous pouvez soumettre un seul mouvement ou une liste de mouvements pour un traitement en lot.
/Entity/ProductTrailChamps requis
| Champ | Type | Requis | Description |
|---|---|---|---|
| NoProduit | string | ✓ Required* | Numéro du produit à ajuster. Requis si NoProduit_NoUniqueSystemeSource n’est pas fourni. |
| NoProduit_NoUniqueSystemeSource | string | Optional* | CardPos du produit dans Acomba. Alternative à NoProduit. |
| Quantitee | decimal | ✓ Required | Quantité à ajuster (positive pour entrée, négative pour sortie) |
| PrixCoutant | decimal | Optional | Prix coûtant unitaire pour le mouvement |
| DateMouvement | datetime | Optional | Date du mouvement (par défaut : date du jour) |
| Commentaire | string | Optional | Commentaire ou note associée au mouvement |
Pour les produits segmentés avec des caractéristiques (couleur, taille, etc.), utilisez les champs IsAProductItem, Caracteristique01_ValeurNo, Caracteristique02_ValeurNo, et Caracteristique03_ValeurNo pour cibler l’item de produit spécifique.
POST /Entity/ProductTrail
Host: https://v4.api.onlineerp.solution.quebec/api
Content-Type: application/json
{
"NoProduit": "PROD-001",
"Quantitee": 10,
"PrixCoutant": 25.50,
"DateMouvement": "2024-04-24",
"Commentaire": "Réception de marchandise - Bon de livraison #12345"
}
POST /Entity/ProductTrail
Host: https://v4.api.onlineerp.solution.quebec/api
Content-Type: application/json
[
{
"NoProduit": "PROD-001",
"Quantitee": 10,
"PrixCoutant": 25.50,
"Commentaire": "Entrée d'inventaire"
},
{
"NoProduit": "PROD-002",
"Quantitee": -5, // Quantité négative = sortie d'inventaire
"PrixCoutant": 15.00,
"Commentaire": "Sortie pour perte/bris"
},
{
"NoProduit": "PROD-003",
"Quantitee": 100,
"DateMouvement": "2024-04-24",
"Commentaire": "Ajustement suite à inventaire physique"
}
]
POST /Entity/ProductTrail
Host: https://v4.api.onlineerp.solution.quebec/api
Content-Type: application/json
{
"NoProduit": "TSHIRT-001",
"IsAProductItem": true, // Indique que c'est un produit segmenté
"Caracteristique01_ValeurNo": "BLEU", // Ex: Couleur = Bleu
"Caracteristique02_ValeurNo": "XL", // Ex: Taille = XL
"Quantitee": 25,
"PrixCoutant": 12.99,
"Commentaire": "Réception T-Shirt Bleu XL"
}
{
"Success": true,
"ErrorMessage": "",
"BusinessKey": "PROD-001",
"ErpInternalId": "PROD-001"
}
[
{
"Success": true,
"ErrorMessage": "",
"BusinessKey": "MouvInv:1/3 - NoProduit:PROD-001",
"ErpInternalId": "MouvInv:1/3 - NoProduit:PROD-001"
},
{
"Success": true,
"ErrorMessage": "",
"BusinessKey": "MouvInv:2/3 - NoProduit:PROD-002",
"ErpInternalId": "MouvInv:2/3 - NoProduit:PROD-002"
},
{
"Success": false,
"ErrorMessage": "Produit 'PROD-003' introuvable",
"BusinessKey": "MouvInv:3/3 - NoProduit:PROD-003",
"ErpInternalId": "MouvInv:3/3 - NoProduit:PROD-003"
}
]
Lors d’un traitement en lot (array de mouvements), chaque mouvement est traité indépendamment. Si un mouvement échoue, les autres peuvent tout de même réussir. La réponse inclura le statut de chaque mouvement.
Modèle de Données Complet
MouvementInventaire
| Champ | Type | Description |
|---|---|---|
| NoMouvementInventaire | string | Numéro du mouvement d’inventaire (généré par le système) |
| NoMouvementInventaire_NoUniqueSystemeSource | string | Identifiant unique interne du système ERP |
| TypeMouvementInventaire | enum | Type de mouvement (Ajustement, Entrée, Sortie) |
| NoProduit | string | Numéro du produit concerné |
| NoProduit_NoUniqueSystemeSource | string | CardPos du produit dans Acomba |
| DescriptionProduit | string | Description du produit |
| Localisation | string | Emplacement du produit (entrepôt, étagère, etc.) |
| Localisation_NoUniqueSystemeSource | string | Identifiant unique de la localisation |
| DateMouvement | datetime | Date du mouvement d’inventaire |
| Commentaire | string | Note ou commentaire associé au mouvement |
| Quantitee | decimal | Quantité ajustée (positive = entrée, négative = sortie) |
| PrixCoutant | decimal | Prix coûtant unitaire |
| PrixVendant | decimal | Prix de vente unitaire |
| NoDocumentAssociee | string | Numéro du document associé (facture, bon de commande, etc.) |
| NoDocumentAssociee_NoUniqueSystemeSource | string | Identifiant unique du document associé |
| NoLigneDocumentAssociee | int | Numéro de ligne du document associé |
| UsagerNo | string | Numéro de l’usager ayant effectué le mouvement |
| NoProduitFournisseur | string | Numéro du produit chez le fournisseur |
| Fiche_DerniereModification | datetime? | Date de dernière modification de la fiche |
Champs de segmentation (Items de produit – Acomba)
Ces champs permettent de cibler un item de produit spécifique lorsque le produit est segmenté par caractéristiques (couleur, taille, etc.).
| Champ | Type | Description |
|---|---|---|
| IsAProductItem | bool | Indique si le mouvement concerne un item de produit segmenté |
| ItemProduit_no | string | Numéro de l’item de produit |
| ItemProduit_NoUniqueSystemeSource | string | Identifiant unique de l’item de produit |
| Segment_No | string | Numéro du segment (catégorie de segmentation) |
| Segment_Nom | string | Nom du segment (ex: COULEUR + GRANDEUR) |
| Caracteristique01_ValeurNo | string | Valeur de la caractéristique 1 (ex: BLEU) |
| Caracteristique01_Nom | string | Nom de la caractéristique 1 (ex: COULEUR) |
| Caracteristique02_ValeurNo | string | Valeur de la caractéristique 2 (ex: XL) |
| Caracteristique02_Nom | string | Nom de la caractéristique 2 (ex: GRANDEUR) |
| Caracteristique03_ValeurNo | string | Valeur de la caractéristique 3 |
| Caracteristique03_Nom | string | Nom de la caractéristique 3 |
Lorsque IsAProductItem est à true et que les caractéristiques sont fournies, le système recherchera automatiquement l’item de produit correspondant dans Acomba. Si l’item n’est pas trouvé, une erreur sera retournée.