Documentation API

Explorez AuditStock en mode plein écran

Naviguez dans les sections de l’API, parcourez les endpoints et accédez rapidement aux méthodes d’import depuis une interface pensée comme un portail développeur.

Accès rapide

  • Menu latéral avec navigation par sections
  • Lecture fullscreen optimisée pour les longues docs
  • Ancres directes sur chaque titre Markdown

Mise à jour : 25/03/2026 10:29

Référence technique

Présentation de l’API

API AuditStock

Change logs

v9.0 → v10.0

  • La v10.0 devient la version de référence et la version recommandée de l'API.
  • ** ⚠️ Important !** À partir de la v10.0, la méthode start-import-session nécessite d'indiquer dans le corps de la requête s'il s'agit d'un inventaire de début ou d'un inventaire de fin pour l'import de l'inventaire produit (tarif/quantité). Voir POST /api/v10.0/imports/start-import-session pour plus de détails.
  • Nouveau endpoint POST /api/v10.0/imports/import-product-list-from-file pour importer la liste initiale des produits via un fichier multipart/form-data.
  • Nouveau endpoint GET /api/v10.0/imports/initial-product-list-from-file-result/{longTaskId} pour récupérer le résultat asynchrone de l'import fichier.
  • Tous les endpoints d'import disponibles en v9.0 restent disponibles en v10.0.

v8.0 → v9.0

  • Sur Delivery, vous pouvez maintenant indiquer le code client de manière optionnelle .

v7.0 → v8.0

  • Sur la commande client, vous pouvez maintenant indiquer le nom du client en plus du code client .

Cette API permet l'import de données depuis vos systèmes externes vers AuditStock.

⚠️⚠️ BREAKING CHANGE ⚠️⚠️

Toutes les versions de l'API de v1.0 à v8.0 sont désormais OBSOLÈTES.

Merci de migrer vers la version v10.0 dès que possible.

Les versions obsolètes resteront disponibles temporairement pour assurer la transition, mais leur support sera arrêté prochainement.

Dernière version disponible : v10.0

Version recommandée : v10.0

Résumé des nouveautés v10.0

  • La v10.0 est désormais la version de référence de la documentation.
  • Les endpoints déjà disponibles en v9.0 restent utilisables en v10.0.
  • L'import initial du catalogue peut maintenant être lancé à partir d'un fichier en multipart/form-data.
  • Le résultat de cet import fichier est récupérable de manière asynchrone via un identifiant de tâche longue.
  • Dans les URLs d'appel, continuez d'utiliser explicitement le segment de version v10.0.

Méthodes d'import disponibles

Gestion de la date d'import

1. Démarrer une session d'import

Endpoint: POST /api/v{version}/imports/start-import-session

Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

⚠️ NOUVELLE MÉTHODE en v7.0 - Remplace set-date pour les versions antérieures

Permet de démarrer une session d'import massif.

Cette méthode :

  • Configure le systeme en mode file d'attente pour les imports
  • Définit le sens de traitement des données importées

Il faudra aller jusqu'a la fin de l'import pour finaliser la session via la methode Process-Import

⚠️ Important à partir de la v10.0

Il faut désormais indiquer dans le corps de la requête la direction de l'inventaire produit.

Cette information concerne uniquement l'import d'inventaire produit (notamment tarif et quantité) et permet d'indiquer si les données envoyées correspondent :

  • FromEnd : il s'agit d'un inventaire de fin
  • FromStart : il s'agit d'un inventaire de début

Ce paramètre change donc le sens métier du traitement appliqué à l'inventaire importé.

Par exemple :

  • utilisez FromStart si vous importez un inventaire de début
  • utilisez FromEnd si vous importez un inventaire de fin

Autrement dit, ce paramètre ne sert pas à décrire un simple ordre technique de lecture de fichier, mais bien à préciser la nature de l'inventaire produit importé.

Modèle : StartImportSessionRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Valeurs possibles
direction string Type d'inventaire produit importé FromEnd = inventaire de fin, FromStart = inventaire de début

Exemple de requête:

{
  "direction": "FromEnd"
}

Exemple alternatif:

{
  "direction": "FromStart"
}

Valeur par défaut côté contrat : FromEnd

Réponse : HTTP 202 Accepted


2. Finaliser la session d'import

Endpoint: POST /api/v{version}/imports/process-import

Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

⚠️ NOUVELLE MÉTHODE en v7.0 - Remplace reset-date pour les versions antérieures

Permet de finaliser la session d'import en cours et de revenir à l'état normal.

⚠️ Information importante

  • Cette méthode ne doit être appelée qu'à la fin de l'import massif.
  • Traite et finalise toutes les données importées
  • Calcule les KPI finaux
  • Réautorise les imports pour la prochaine session
  • Le traitement peut prendre plusieurs heures selon le volume de données importées

Cette méthode :

  • Rétablit l'utilisation de la date système actuelle
  • Finalise tous les calculs de la session d'import
  • Passe l'état d'import en mode "Allowed"
  • Aucun paramètre n'est requis

Paramètres : Aucun (corps de requête vide)

Exemple de requête:

{}

Réponse : HTTP 200 OK avec rapport de traitement


3. Rapport d'import

Endpoint: GET /api/v{version}/imports/report

Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.

Permet de récupérer un rapport synthétique des derniers imports effectués dans le système. Important : Cette méthode est en lecture seule et ne nécessite aucun paramètre.

Cette méthode retourne :

  • Les informations sur la dernière commande client importée (vente)
  • Les informations sur la dernière livraison importée
  • Les informations sur la dernière commande fournisseur importée (achat)
  • Les informations sur la dernière réception fournisseur importée
  • Le nombre total d'éléments importés pour chaque type

Réponse: ImportReport

Champ Type Description
ImportAllowed bool Indique qu'il est possible d'importer des données
LastImportedSaleCode string Code de la dernière commande client importée
LastImportedSaleDate datetime Date de la dernière commande client
ImportedSaleCount int Nombre total de commandes clients importées
LastImportedDeliveryCode string Code de la dernière livraison importée
LastImportedDeliveryDate datetime Date de la dernière livraison
ImportedDeliveryCount int Nombre total de livraisons importées
LastImportedPurchaseCode string Code de la dernière commande fournisseur importée
LastImportedPurchaseDate datetime Date de la dernière commande fournisseur
ImportedPurchaseCount int Nombre total de commandes fournisseur importées
LastImportedReceptionCode string Code de la dernière réception importée
LastImportedReceptionDate datetime Date de la dernière réception
ImportedReceptionCount int Nombre total de réceptions importées

Exemple de réponse:

{
  "lastImportedSaleCode": "SO-2025-0542",
  "lastImportedSaleDate": "2025-01-15T14:30:00Z",
  "importedSaleCount": 542,
  "lastImportedDeliveryCode": "DEL-2025-0489",
  "lastImportedDeliveryDate": "2025-01-15T16:45:00Z",
  "importedDeliveryCount": 489,
  "lastImportedPurchaseCode": "PO-2025-0128",
  "lastImportedPurchaseDate": "2025-01-14T09:00:00Z",
  "importedPurchaseCount": 128,
  "lastImportedReceptionCode": "REC-2025-0095",
  "lastImportedReceptionDate": "2025-01-15T11:20:00Z",
  "importedReceptionCount": 95
}

Cas d'usage: Idéal pour surveiller l'état des imports, vérifier que les synchronisations fonctionnent correctement, diagnostiquer des problèmes d'import, ou afficher un tableau de bord des imports dans votre application.

4. Import de la liste de produits initiale

Endpoint: POST /api/v{version}/imports/import-product-list

Versions d'API supportées : ⚠️ v1.0 | ⚠️ v2.0 | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer une liste de produits avec leur stock initial dans un entrepôt spécifique.

⚠️ Informations importantes

  • Cet import n'est à réaliser qu'une seule fois lors de la création initiale du catalogue produit
  • La date initiale permet de définir à quelle date le stock initial a été constaté
  • Si la date initiale est antérieure à la date du jour, le système calculera automatiquement l'historique des stocks
  • L'entrepôt sera créé automatiquement s'il n'existe pas

Cette méthode :

  • Traite les produits en stock par lots de 100 pour optimiser les performances (limite de 100 produits par requête)
  • Ignore les produits déjà existants sans générer d'erreur
  • Valide chaque ligne individuellement et continue le traitement en cas d'erreur
  • Retourne un résultat détaillé avec le nombre de produits importés et la liste des erreurs
  • Crée automatiquement l'entrepôt spécifié s'il n'existe pas
  • Enregistre le stock initial à la date spécifiée

Modèle: ImportProductListRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
ImportList List<ProductImport> Liste des produits à importer Max 100 produits
WarehouseName string Nom de l'entrepôt où importer le stock Max 200 caractères, créé si inexistant
InitialDate datetime Date de référence du stock initial Format ISO 8601, doit être ⇐ date du jour

Champs obligatoires pour chaque ProductImport:

  • Code : Code unique du produit (max 100 caractères)
  • Designation : Désignation du produit (max 500 caractères)
  • Quantity : Quantité initiale (décimale, >= 0)
  • PurchasePriceWithoutTax : Prix d'achat HT (>= 0)

Réponse: ProductImportResult

  • ImportedRowCount : Nombre de produits importés avec succès
  • ErrorList : Liste des erreurs avec numéro de ligne et raison de l'échec

Exemple de requête:

{
  "importList": [
    {
      "code": "LAPTOP-DELL-XPS15",
      "designation": "Ordinateur portable Dell XPS 15",
      "quantity": 10,
      "purchasePriceWithoutTax": 1299.99
    },
    {
      "code": "MOUSE-LOGITECH",
      "designation": "Souris sans fil Logitech",
      "quantity": 50,
      "purchasePriceWithoutTax": 29.99
    }
  ],
  "warehouseName": "ENTREPOT PRINCIPAL",
  "initialDate": "2025-01-01T00:00:00Z"
}

Exemple de réponse en cas de succès:

{
  "importedRowCount": 2,
  "errorList": [],
  "status": "Success"
}

Exemple de réponse avec erreurs:

{
  "importedRowCount": 1,
  "errorList": [
    {
      "rowIndex": 2,
      "failReason": "Le code produit est obligatoire"
    }
  ],
  "status": "Success"
}

Validations effectuées :

  • Vérification que la liste contient au maximum 100 produits
  • Validation que le nom de l'entrepôt est renseigné
  • Validation que la date initiale est valide et non future
  • Pour chaque produit :
    • Vérification que le code est unique et non vide (max 100 caractères)
    • Vérification que la désignation est renseignée (max 500 caractères)
    • Validation que la quantité est >= 0
    • Validation que le prix d'achat est >= 0

Cas d'usage :

  • Initialisation d'un nouveau catalogue produit
  • Migration depuis un système externe avec inventaire initial
  • Reprise de stock à une date donnée (inventaire physique)
  • Import d'un stock de départ pour un nouvel entrepôt

Notes :

  • Si vous devez importer plus de 100 produits, effectuez plusieurs appels successifs
  • Les produits existants avec le même code sont ignorés (pas de mise à jour)
  • La date initiale est cruciale pour le calcul correct des KPI et de l'historique des stocks

4 bis. Import de la liste de produits initiale depuis un fichier

Endpoint: POST /api/v10.0/imports/import-product-list-from-file

Versions d'API supportées : ✅ v10.0

Permet d'importer le catalogue produit initial à partir d'un fichier envoyé en multipart/form-data.

Cette méthode :

  • lance un traitement en tâche longue
  • retourne une URL de résultat via HTTP 202 Accepted
  • accepte un fichier avec les paramètres de contexte d'import

Paramètres du formulaire :

Paramètre Type Obligatoire Description
file fichier Fichier à traiter
warehouseName string Nom de l'entrepôt cible
initialDate datetime Date de référence du stock initial

Réponse : HTTP 202 Accepted avec l'URL de récupération du résultat.

Exemple de réponse :

/api/v10.0/imports/initial-product-list-from-file-result/{longTaskId}

Récupération du résultat d'import fichier

Endpoint: GET /api/v10.0/imports/initial-product-list-from-file-result/{longTaskId}

Versions d'API supportées : ✅ v10.0

Permet de récupérer le résultat d'un import de produits initial lancé depuis un fichier.

Réponse : ImportInitialProductListFromFileResult

  • Retourne HTTP 200 OK si le résultat est prêt
  • Retourne HTTP 404 Not Found si le résultat n'est pas encore disponible ou a expiré

5. Import de commandes clients (Sales)

Endpoint: POST /api/v{version}/imports/import-sale

Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer une commande client avec ses lignes de commande. Important : Si la commande existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed. Cette méthode :

  • Crée automatiquement les produits s'ils n'existent pas
  • Génère une hiérarchie de catégories de produits basée sur le ProductCategoryBreadcrumb
  • Détermine automatiquement le type d'unité (entier/décimal) selon les quantités
  • À partir de la v8.0, permet de renseigner le CustomerName dans la commande ; le client est ajouté à la volée lors de l'import s'il n'existe pas encore

Synchronisation automatique :

  • Si une commande avec le même Code est envoyée à nouveau, le système synchronise automatiquement toutes les informations
  • Les lignes de commande sont mises à jour (ajout, modification, suppression)
  • Les informations produits sont actualisées si elles ont changé
  • Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des commandes existantes

Modèle: Sale avec collection de SaleItem Sale

6. Import de livraisons clients (Deliveries)

Endpoint: POST /api/v{version}/imports/import-delivery

Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer une livraison de commande client. Important : Si la livraison existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.

Cette méthode :

  • Soustrait du stock physique les quantités livrées
  • Met à jour le stock physique de l'entrepôt spécifié
  • Calcule automatiquement la consommation moyenne quotidienne
  • Crée l'entrepôt automatiquement s'il n'existe pas
  • À partir de la v9.0, permet de renseigner le CustomerCode (optionnel) pour renforcer le rattachement client lors de l'import ; cette possibilité reste disponible en v10.0

Synchronisation automatique :

  • Si une livraison avec le même Code est envoyée à nouveau, le système synchronise automatiquement toutes les informations
  • Les lignes de livraison sont mises à jour (ajout, modification, suppression)
  • Les mouvements de stock sont recalculés pour refléter les changements
  • Utile pour corriger des erreurs de saisie ou mettre à jour des livraisons partielles

Import sans commande préalable :

  • Si la commande client référencée par SaleCode n'existe pas dans le système, la livraison n'est PAS créée
  • MAIS le système synchronise quand même les stocks pour les produits existants
  • Cela permet de mettre à jour les stocks même si la commande n'a pas été importée au préalable
  • Les produits inexistants sont ignorés (pas de création automatique dans ce cas)

Modèle: Delivery avec collection de DeliveryItem Delivery

7. Import de commandes fournisseur (Purchases)

Endpoint: POST /api/v{version}/imports/import-purchase

Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer une commande fournisseur. Important : Si la commande existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.

Cette méthode :

  • Crée automatiquement le fournisseur s'il n'existe pas
  • Crée automatiquement les produits et catégories s'ils n'existent pas
  • Gère les quantités décimales pour les unités fractionnées

Synchronisation automatique :

  • Si une commande avec le même Code est envoyée à nouveau, le système synchronise automatiquement toutes les informations
  • Les lignes de commande sont mises à jour (ajout, modification, suppression)
  • Les informations produits et fournisseur sont actualisées si elles ont changé
  • Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des commandes existantes

Modèle: Purchase avec collection de PurchaseItem Purchase

8. Import de réceptions fournisseur (Receptions)

Endpoint: POST /api/v{version}/imports/import-reception

Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer une réception de commande fournisseur. Important : Si la réception existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.

Cette méthode :

  • Met à jour le stock physique (addition des quantités reçues)
  • Calcule le délai d'approvisionnement moyen (lead time)
  • Crée l'entrepôt automatiquement s'il n'existe pas

Synchronisation automatique :

  • Si une réception avec le même Code est envoyée à nouveau, le système synchronise automatiquement toutes les informations
  • Les lignes de réception sont mises à jour (ajout, modification, suppression)
  • Les mouvements de stock sont recalculés pour refléter les changements
  • Utile pour corriger des erreurs de saisie ou mettre à jour des réceptions partielles

Import sans commande préalable :

  • Si la commande fournisseur référencée par PurchaseCode n'existe pas dans le système, la réception n'est PAS créée
  • MAIS le système synchronise quand même les stocks pour les produits existants
  • Cela permet de mettre à jour les stocks même si la commande fournisseur n'a pas été importée au préalable
  • Les produits inexistants sont ignorés (pas de création automatique dans ce cas)

Modèle: Reception avec collection de ReceptionItem Reception

9. Import de transferts de stock entre entrepôts

Endpoint: POST /api/v{version}/imports/import-stock-transfer

Versions d'API supportées : ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Permet d'importer un ou plusieurs transferts de stock entre entrepôts.

⚠️ Informations importantes

  • Si un entrepôt source ou destination n'existe pas, une erreur d'importation sera générée
  • De la même manière, si un produit n'existe pas, une erreur est générée
  • Le stock source doit être suffisant pour effectuer le transfert
  • Les entrepôts source et destination doivent être différents

Cette méthode :

  • Décrémente le stock de l'entrepôt source
  • Incrémente le stock de l'entrepôt de destination
  • Valide que le stock source est suffisant avant le transfert
  • Gère les quantités décimales pour les unités fractionnées
  • Enregistre la date du transfert pour un historique précis

Modèle: ImportStockTransferListRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
StockTransfers List<StockTransfer> Liste des transferts à effectuer Au moins 1 transfert

Champs obligatoires pour chaque StockTransfer:

Champ Type Obligatoire Description Contraintes
TransferDate datetime Date du transfert de stock Format ISO 8601
ProductCode string Code unique du produit à transférer Max 100 caractères
SourceWarehouseName string Nom de l'entrepôt source Doit exister
DestinationWarehouseName string Nom de l'entrepôt de destination Doit exister
Quantity decimal Quantité à transférer > 0

Exemple de requête:

{
  "stockTransfers": [
    {
      "transferDate": "2025-01-15T10:00:00Z",
      "productCode": "LAPTOP-DELL-XPS15",
      "sourceWarehouseName": "ENTREPOT PRINCIPAL",
      "destinationWarehouseName": "MAGASIN TOULOUSE",
      "quantity": 5.0
    },
    {
      "transferDate": "2025-01-15T11:30:00Z",
      "productCode": "MOUSE-LOGITECH",
      "sourceWarehouseName": "ENTREPOT PRINCIPAL",
      "destinationWarehouseName": "MAGASIN PARIS",
      "quantity": 10.0
    }
  ]
}

Exemple de réponse en cas de succès:

{
  "status": "Success",
  "importedRowCount": 2,
  "errorList": [],
  "warnings": []
}

Exemple de réponse avec erreurs:

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [
    {
      "rowIndex": 2,
      "failReason": "Stock insuffisant dans l'entrepôt source ENTREPOT PRINCIPAL pour le produit MOUSE-LOGITECH"
    }
  ],
  "warnings": []
}

Validations effectuées:

  • Vérification de l'existence du produit dans le système
  • Vérification de l'existence de l'entrepôt source
  • Vérification de l'existence de l'entrepôt de destination
  • Validation que la date du transfert est valide (non future)
  • Validation que la quantité est strictement positive (> 0)
  • Validation que les entrepôts source et destination sont différents
  • Vérification du stock disponible dans l'entrepôt source (doit être >= quantité)

Cas d'usage :

  • Gérer les mouvements de stock entre différents points de vente ou entrepôts
  • Réaliser des transferts inter-magasins
  • Équilibrer les stocks entre plusieurs emplacements
  • Réorganiser les stocks en fonction des besoins géographiques
  • Traçabilité complète des mouvements avec date et heure précises

Notes :

  • Les transferts sont traités individuellement, une erreur sur un transfert n'empêche pas les autres de s'effectuer
  • La date du transfert permet de maintenir un historique précis des mouvements de stock
  • Si le stock source est insuffisant, le transfert est rejeté avec un message d'erreur explicite
  • Les mouvements de stock sont enregistrés dans l'historique pour traçabilité

10. Retour client

Endpoint: POST /api/v{version}/imports/customer-delivery-return

Versions d'API supportées : ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 4.0 de l'API.

Permet d'enregistrer le retour d'un ou plusieurs produits par un client suite à une livraison. Important : Le retour client ajoute la quantité retournée au stock physique de l'entrepôt d'origine.

Cette méthode :

  • Vérifie que la commande client (SaleCode) et la livraison (DeliveryCode) existent
  • Vérifie que le produit existe et a bien été livré dans la livraison référencée
  • Ajoute la quantité retournée au stock physique de l'entrepôt
  • Crée un mouvement de stock de type "Retour client"
  • Valide que la quantité retournée est positive
  • Enregistre la date du retour pour traçabilité

Modèle: AddCustomerDeliveryReturnRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
CustomerDeliveryReturns List Liste des retours à enregistrer Au moins 1 retour
CreationDate datetime Date du retour Format ISO 8601

Champs obligatoires pour chaque CustomerDeliveryReturn:

Champ Type Obligatoire Description Contraintes
ProductCode string Code unique du produit retourné Max 100 caractères
SaleCode string Code de la commande client d'origine Doit exister
DeliveryCode string Code de la livraison concernée Doit exister
Quantity decimal Quantité retournée > 0

Exemple de requête:

{
  "customerDeliveryReturns": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "saleCode": "SO-2025-0542",
      "deliveryCode": "DEL-2025-0489",
      "quantity": 1.0
    },
    {
      "productCode": "MOUSE-LOGITECH",
      "saleCode": "SO-2025-0542",
      "deliveryCode": "DEL-2025-0489",
      "quantity": 2.0
    }
  ],
  "creationDate": "2025-01-16T09:30:00Z"
}

Exemple de réponse en cas de succès:

{
  "status": "Success",
  "importedRowCount": 2,
  "errorList": [],
  "warnings": []
}

Exemple de réponse avec erreurs:

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [
    {
      "rowIndex": 2,
      "failReason": "Le produit MOUSE-LOGITECH n'a pas été livré dans la livraison DEL-2025-0489"
    }
  ],
  "warnings": []
}

Validations effectuées:

  • Validation que la date de retour est valide (non future)
  • Vérification de l'existence de la commande client
  • Vérification de l'existence de la livraison
  • Vérification de l'existence du produit
  • Validation que le produit faisait partie de la livraison
  • Validation que la quantité est strictement positive (> 0)
  • Validation que la quantité retournée ne dépasse pas la quantité livrée

Cas d'usage:

  • Gérer les retours produits des clients
  • Traiter les produits défectueux ou non conformes
  • Gérer les erreurs de livraison
  • Annuler partiellement des livraisons
  • Traçabilité complète des retours avec date précise

Notes :

  • Les retours sont traités individuellement, une erreur sur un retour n'empêche pas les autres de s'effectuer
  • Le stock de l'entrepôt d'origine est augmenté de la quantité retournée
  • Un mouvement de stock est enregistré pour traçabilité

11. Retour fournisseur

Endpoint: POST /api/v{version}/imports/supplier-reception-return

Versions d'API supportées : ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 4.0 de l'API.

Permet d'enregistrer le retour d'un ou plusieurs produits à un fournisseur suite à une réception. Important : Le retour fournisseur retire la quantité retournée du stock physique de l'entrepôt.

Cette méthode :

  • Vérifie que la commande fournisseur (PurchaseCode) et la réception (ReceptionCode) existent
  • Vérifie que le produit existe et a bien été reçu dans la réception référencée
  • Retire la quantité retournée du stock physique de l'entrepôt
  • Crée un mouvement de stock de type "Retour fournisseur"
  • Valide que la quantité retournée est positive
  • Protège contre les stocks négatifs (stock ramené à 0 avec création d'anomalie si nécessaire)
  • Enregistre la date du retour pour traçabilité

Modèle: AddSupplierReceptionReturnRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
SupplierReceptionReturns List Liste des retours à enregistrer Au moins 1 retour
CreationDate datetime Date du retour Format ISO 8601

Champs obligatoires pour chaque SupplierReceptionReturn:

Champ Type Obligatoire Description Contraintes
ProductCode string Code unique du produit retourné Max 100 caractères
PurchaseCode string Code de la commande fournisseur d'origine Doit exister
ReceptionCode string Code de la réception concernée Doit exister
Quantity decimal Quantité retournée > 0

Exemple de requête:

{
  "supplierReceptionReturns": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "purchaseCode": "PO-2025-0128",
      "receptionCode": "REC-2025-0095",
      "quantity": 2.0
    },
    {
      "productCode": "MOUSE-LOGITECH",
      "purchaseCode": "PO-2025-0128",
      "receptionCode": "REC-2025-0095",
      "quantity": 5.0
    }
  ],
  "creationDate": "2025-01-16T10:00:00Z"
}

Exemple de réponse en cas de succès:

{
  "status": "Success",
  "importedRowCount": 2,
  "errorList": [],
  "warnings": []
}

Exemple de réponse avec erreurs:

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [
    {
      "rowIndex": 2,
      "failReason": "Le produit MOUSE-LOGITECH n'a pas été reçu dans la réception REC-2025-0095"
    }
  ],
  "warnings": []
}

Validations effectuées:

  • Validation que la date de retour est valide (non future)
  • Vérification de l'existence de la commande fournisseur
  • Vérification de l'existence de la réception
  • Vérification de l'existence du produit
  • Validation que le produit faisait partie de la réception
  • Validation que la quantité est strictement positive (> 0)
  • Validation que la quantité retournée ne dépasse pas la quantité reçue

Gestion des anomalies :

  • Si le stock disponible est insuffisant, une anomalie de stock est automatiquement créée
  • Le stock est ramené à 0 et la différence est enregistrée comme anomalie
  • Cette protection évite les stocks négatifs tout en conservant la traçabilité

Cas d'usage:

  • Gérer les retours de produits défectueux ou non conformes aux fournisseurs
  • Traiter les erreurs de réception
  • Annuler partiellement des réceptions
  • Gérer les produits endommagés pendant le transport
  • Traçabilité complète des retours avec date précise

Notes :

  • Les retours sont traités individuellement, une erreur sur un retour n'empêche pas les autres de s'effectuer
  • Le stock de l'entrepôt est diminué de la quantité retournée
  • Un mouvement de stock est enregistré pour traçabilité

12. Ajout de stock libre

Endpoint: POST /api/v{version}/imports/add-free-product-stock

Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.

Permet d'ajouter manuellement du stock pour un produit dans un entrepôt spécifique, sans lien avec une réception ou un document source. Important : Cette méthode est idéale pour les ajustements de stock positifs, les inventaires, ou les entrées de stock exceptionnelles.

Cette méthode :

  • Vérifie que le produit existe dans le système
  • Vérifie que l'entrepôt existe dans le système
  • Ajoute la quantité spécifiée au stock physique de l'entrepôt
  • Crée un mouvement de stock de type "Entrée manuelle"
  • Enregistre le motif de l'ajustement pour traçabilité
  • Enregistre la date de l'ajustement pour historique

Modèle: AddFreeProductStockRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
ProductStock ProductStock Données du produit et ajustement Voir tableau ci-dessous
CreationDate datetime Date de l'ajustement Format ISO 8601

Champs obligatoires pour ProductStock:

Champ Type Obligatoire Description Contraintes
ProductCode string Code unique du produit Max 100 caractères
WarehouseName string Nom de l'entrepôt concerné Doit exister
Quantity decimal Quantité à ajouter > 0
Reason string Motif de l'ajustement Obligatoire pour traçabilité

Exemple de requête:

{
  "productStock": {
    "productCode": "LAPTOP-DELL-XPS15",
    "warehouseName": "MAGASIN TOULOUSE",
    "quantity": 10.0,
    "reason": "Inventaire annuel - Correction positive"
  },
  "creationDate": "2025-01-16T14:00:00Z"
}

Exemple de réponse en cas de succès:

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [],
  "warnings": []
}

Exemple de réponse avec erreurs:

{
  "status": "Failed",
  "importedRowCount": 0,
  "errorList": [
    {
      "rowIndex": 1,
      "failReason": "Le produit LAPTOP-DELL-XPS15 n'existe pas dans le système"
    }
  ],
  "warnings": []
}

Validations effectuées:

  • Validation que la date d'ajustement est valide (non future)
  • Vérification de l'existence du produit
  • Vérification de l'existence de l'entrepôt
  • Validation que la quantité est strictement positive (> 0)
  • Validation que le motif est renseigné et non vide

Cas d'usage:

  • Corrections d'inventaire positives
  • Entrées de stock exceptionnelles (dons, échantillons)
  • Régularisations suite à erreur de comptage
  • Ajustements manuels lors d'un inventaire physique
  • Traçabilité complète avec date et motif précis

13. Retrait de stock libre

Endpoint: POST /api/v{version}/imports/remove-free-product-stock

Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.

Permet de retirer manuellement du stock pour un produit dans un entrepôt spécifique, sans lien avec une livraison ou un document source. Important : Cette méthode est idéale pour les ajustements de stock négatifs, les pertes, les casses, ou les sorties de stock exceptionnelles.

Cette méthode :

  • Vérifie que le produit existe dans le système
  • Vérifie que l'entrepôt existe dans le système
  • Retire la quantité spécifiée du stock physique de l'entrepôt
  • Crée un mouvement de stock de type "Sortie manuelle"
  • Enregistre le motif de l'ajustement pour traçabilité
  • Protège contre les stocks négatifs (crée une anomalie de stock si la quantité est insuffisante)
  • Enregistre la date de l'ajustement pour historique

Modèle: RemoveFreeProductStockRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
ProductStock ProductStock Données du produit et ajustement Voir tableau ci-dessous
CreationDate datetime Date de l'ajustement Format ISO 8601

Champs obligatoires pour ProductStock:

Champ Type Obligatoire Description Contraintes
ProductCode string Code unique du produit Max 100 caractères
WarehouseName string Nom de l'entrepôt concerné Doit exister
Quantity decimal Quantité à retirer > 0
Reason string Motif de l'ajustement Obligatoire pour traçabilité

Exemple de requête:

{
  "productStock": {
    "productCode": "LAPTOP-DELL-XPS15",
    "warehouseName": "MAGASIN TOULOUSE",
    "quantity": 5.0,
    "reason": "Casse - Produit endommagé lors du transport"
  },
  "creationDate": "2025-01-16T14:30:00Z"
}

Exemple de réponse en cas de succès:

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [],
  "warnings": []
}

Exemple de réponse avec stock insuffisant (anomalie créée):

{
  "status": "Success",
  "importedRowCount": 1,
  "errorList": [],
  "warnings": [
    "Stock insuffisant pour LAPTOP-DELL-XPS15 dans MAGASIN TOULOUSE. Anomalie de stock créée."
  ]
}

Validations effectuées:

  • Validation que la date d'ajustement est valide (non future)
  • Vérification de l'existence du produit
  • Vérification de l'existence de l'entrepôt
  • Validation que la quantité est strictement positive (> 0)
  • Validation que le motif est renseigné et non vide

Gestion des anomalies:

  • Si le stock disponible est insuffisant, une anomalie de stock est automatiquement créée
  • Le stock est ramené à 0 et la différence est enregistrée comme anomalie
  • Cette protection évite les stocks négatifs tout en conservant la traçabilité
  • Un avertissement est retourné dans la réponse pour informer de la création d'anomalie

Cas d'usage:

  • Corrections d'inventaire négatives
  • Pertes et vols
  • Produits cassés ou périmés
  • Sorties exceptionnelles (échantillons, dons)
  • Régularisations suite à erreur de comptage
  • Traçabilité complète avec date et motif précis

14. Import de vente directe (membre)

Endpoint: POST /api/v{version}/imports/import-direct-sale

Versions d'API supportées : ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 6.0 de l'API.

Permet d'importer une vente directe (vente membre) qui impacte directement le stock sans passer par le processus classique commande/livraison. Important : Cette méthode est idéale pour les ventes au comptoir, les ventes en boutique physique, ou toute vente nécessitant une sortie immédiate du stock.

Cette méthode :

  • Crée automatiquement une commande client de type "Vente directe" (MemberOrder)
  • Retire immédiatement la quantité vendue du stock physique de l'entrepôt
  • Crée automatiquement les produits s'ils n'existent pas
  • Détermine automatiquement le type d'unité (entier/décimal) selon les quantités
  • Crée un mouvement de stock de type "Vente directe"

Synchronisation automatique :

  • Si une vente directe avec le même Code est envoyée à nouveau, le système synchronise automatiquement toutes les informations
  • Les lignes de vente sont mises à jour (ajout, modification, suppression)
  • Les mouvements de stock sont recalculés pour refléter les changements
  • Les informations produits et client sont actualisées si elles ont changé
  • Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des ventes existantes

Différence avec import-sale + import-delivery :

  • import-sale crée une commande client sans impacter le stock
  • import-delivery retire le stock lors de la livraison de la commande
  • import-direct-sale fait les deux en une seule opération : création de la vente ET retrait du stock immédiat
  • Idéal pour les flux de vente où il n'y a pas de séparation entre la commande et la livraison

Modèle: ImportDirectSaleRequest avec DirectSale contenant une collection de DirectSaleItem

Champs obligatoires pour DirectSale:

  • Code : Code unique de la vente directe (max 100 caractères)
  • SaleDate : Date de la vente (format ISO 8601)
  • CustomerCode : Code unique du client (max 100 caractères)
  • CustomerName : Nom du client (max 500 caractères)
  • WarehouseName : Nom de l'entrepôt où le stock sera retiré
  • Items : Liste des lignes de vente (au moins 1 ligne)

Champs obligatoires pour DirectSaleItem:

  • ProductCode : Code unique du produit (max 100 caractères)
  • ProductDesignation : Désignation du produit (max 500 caractères)
  • Quantity : Quantité vendue (décimale, > 0)
  • UnitPriceWithoutTax : Prix unitaire HT (>= 0)

Champs optionnels pour DirectSaleItem:

  • ProductCategoryBreadcrumb : Hiérarchie de catégories (ex: "Électronique > Ordinateurs > Portables")
  • DiscountRate : Taux de remise en pourcentage (0-100)

Exemple de requête:

{
  "directSale": {
    "code": "DS-2025-0001",
    "saleDate": "2025-01-15T14:30:00Z",
    "customerCode": "CUST001",
    "customerName": "Dupont Jean",
    "warehouseName": "MAGASIN TOULOUSE",
    "items": [
      {
        "productCode": "PROD001",
        "productDesignation": "Ordinateur portable Dell",
        "productCategoryBreadcrumb": "Électronique > Ordinateurs > Portables",
        "quantity": 1.0,
        "unitPriceWithoutTax": 750.00,
        "discountRate": 10.0
      },
      {
        "productCode": "PROD002",
        "productDesignation": "Souris sans fil",
        "productCategoryBreadcrumb": "Électronique > Accessoires",
        "quantity": 2.0,
        "unitPriceWithoutTax": 15.00,
        "discountRate": 0.0
      }
    ]
  }
}

Validations effectuées:

  • Vérification que le code de vente est unique (ou déjà existant pour synchronisation)
  • Validation que la date de vente est cohérente avec la date d'import définie
  • Vérification de l'existence de l'entrepôt (création automatique si nécessaire)
  • Validation que toutes les quantités sont strictement positives
  • Vérification du stock disponible dans l'entrepôt (création d'anomalie si stock insuffisant)
  • Validation de la cohérence des prix (>= 0)
  • Validation des taux de remise (0-100%)

Gestion des anomalies:

  • Si le stock disponible est insuffisant pour un produit, une anomalie de stock est automatiquement créée
  • Le stock est ramené à 0 et la différence est enregistrée comme anomalie
  • La vente est quand même créée pour maintenir la traçabilité des opérations

Cas d'usage: Idéal pour les ventes au comptoir, les ventes en boutique physique, les ventes événementielles (salons, marchés), les ventes directes aux membres d'une association, ou toute situation où la commande et la livraison sont simultanées.


15. Annulation d'un bon de livraison client

Endpoint: POST /api/v{version}/imports/cancel-delivery

Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 7.0 de l'API.

Permet d'annuler un bon de livraison client existant identifié par son code. Important : L'annulation restitue intégralement les quantités livrées en stock et recalcule le statut de la commande associée.

Cette méthode :

  • Vérifie que le bon de livraison identifié par DeliveryCode existe
  • Restitue les quantités livrées au stock physique de l'entrepôt d'origine
  • Supprime toutes les lignes du bon de livraison
  • Supprime le bon de livraison
  • Recalcule automatiquement le statut de la commande client associée (passage de Balanced/Closed à WaitingDelivery/Open)
  • Archive les entités supprimées pour traçabilité

Modèle: CancelDeliveryRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
DeliveryCode string Code unique du bon de livraison à annuler Doit exister
Reason string Motif de l'annulation Non vide
CancelDate datetime Date de l'annulation Format ISO 8601

Exemple de requête :

{
  "deliveryCode": "DEL-2025-0489",
  "reason": "Erreur de saisie - livraison annulée à la demande du client",
  "cancelDate": "2025-01-16T10:00:00Z"
}

Exemple de réponse en cas de succès :

{
  "status": "Success",
  "errors": {},
  "warnings": []
}

Exemple de réponse en cas d'échec (code inconnu) :

{
  "status": "Failed",
  "errors": {
    "DeliveryCode": "No delivery found with code DEL-2025-0489"
  },
  "warnings": []
}

Validations effectuées :

  • Vérification de l'existence du bon de livraison
  • Vérification que l'entrepôt de l'origine est accessible
  • Vérification du stock disponible pour la restitution (création d'anomalie si nécessaire)

Comportement selon l'état d'import :

  • Mode Processing : retourne 400 BadRequest (imports désactivés)
  • Mode Preparation : mis en file d'attente, retourne 202 Accepted avec l'identifiant de l'activité
  • Mode Allowed : traitement immédiat, retourne 200 OK

Cas d'usage :

  • Corriger une livraison envoyée par erreur
  • Annuler une livraison suite à un retour complet du client
  • Remettre une commande en attente de livraison après correction

16. Annulation d'une réception fournisseur

Endpoint: POST /api/v{version}/imports/cancel-reception

Versions d'API supportées : ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0

Note : Cette fonctionnalité est disponible à partir de la version 8.0 de l'API.

Permet d'annuler une réception fournisseur existante identifiée par son code. Important : L'annulation retire intégralement les quantités reçues du stock et recalcule le statut de la commande fournisseur associée.

Cette méthode :

  • Vérifie que la réception identifiée par ReceptionCode existe
  • Retire les quantités reçues du stock physique de l'entrepôt
  • Supprime toutes les lignes de la réception
  • Supprime la réception
  • Recalcule automatiquement le statut de la commande fournisseur associée (passage de Balanced à Submitted)
  • Archive les entités supprimées pour traçabilité

Cas particulier : Si la réception ne contient aucune ligne (réception vide), elle est simplement supprimée et un avertissement est retourné.

Modèle: CancelReceptionRequest

Paramètres de la requête :

Paramètre Type Obligatoire Description Contraintes
ReceptionCode string Code unique de la réception fournisseur à annuler Doit exister
Reason string Motif de l'annulation Non vide
CancelDate datetime Date de l'annulation Format ISO 8601

Exemple de requête :

{
  "receptionCode": "REC-2025-0095",
  "reason": "Réception importée par erreur - marchandise non reçue",
  "cancelDate": "2025-01-16T11:00:00Z"
}

Exemple de réponse en cas de succès :

{
  "status": "Success",
  "errors": {},
  "warnings": []
}

Exemple de réponse - réception vide supprimée :

{
  "status": "Success",
  "errors": {},
  "warnings": ["Reception had no items, it has been deleted"]
}

Exemple de réponse en cas d'échec (code inconnu) :

{
  "status": "Failed",
  "errors": {
    "ReceptionCode": "No reception found with code REC-2025-0095"
  },
  "warnings": []
}

Validations effectuées :

  • Vérification de l'existence de la réception
  • Vérification du stock disponible pour le retrait (protégé contre les stocks négatifs)
  • Rollback transactionnel en cas d'erreur sur l'un des articles

Comportement selon l'état d'import :

  • Mode Processing : retourne 400 BadRequest (imports désactivés)
  • Mode Preparation : mis en file d'attente, retourne 202 Accepted avec l'identifiant de l'activité
  • Mode Allowed : traitement immédiat, retourne 200 OK

Cas d'usage :

  • Corriger une réception saisie par erreur
  • Annuler une réception dont la marchandise a été refusée ou retournée intégralement
  • Remettre une commande fournisseur soldée en attente de réception

Modèles de données d'import

Cette section détaille tous les modèles de données utilisés dans l'API d'import AuditStock avec des exemples concrets et des explications sur chaque propriété.

ProductImport - Import de produit

Représente un produit à importer dans le système lors de l'import initial du catalogue.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique du produit Max 100 caractères
Designation string Nom ou description du produit Max 500 caractères
Quantity decimal Quantité initiale en stock >= 0
PurchasePriceWithoutTax decimal Prix d'achat HT >= 0, 2 décimales

Exemple JSON :

{
  "code": "LAPTOP-DELL-XPS15",
  "designation": "Ordinateur portable Dell XPS 15 - Intel i7 - 16Go RAM",
  "quantity": 10,
  "purchasePriceWithoutTax": 1299.99
}

Notes importantes :

  • Les produits existants avec le même code sont ignorés sans générer d'erreur
  • La quantité peut être 0 si le produit n'a pas encore de stock initial
  • Le prix d'achat est utilisé pour les calculs de valorisation du stock

Sale - Commande client

Représente une commande client avec ses lignes de commande.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique de la commande Max 100 caractères, unique
CustomerCode string Code du client Max 100 caractères
CustomerName string Nom du client (v8.0+) Max 500 caractères
CreationDate datetime Date de création de la commande Format ISO 8601
Items List Liste des lignes de commande Au moins 1 ligne

Exemple JSON complet :

{
  "code": "SO-2025-0542",
  "customerCode": "CUST-12345",
  "customerName": "Dupont Jean",
  "creationDate": "2025-01-15T10:30:00Z",
  "items": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "productDesignation": "Dell XPS 15 - Intel i7",
      "productUrl": "https://exemple.com/products/dell-xps15",
      "productImageUrl": "https://exemple.com/images/dell-xps15.jpg",
      "productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
      "barCode": "1234567890123",
      "quantity": 2,
      "unitSalePriceWithoutTax": 1599.00,
      "discountRate": 5.0
    },
    {
      "productCode": "MOUSE-LOGITECH-MX3",
      "productDesignation": "Souris Logitech MX Master 3",
      "productCategoryBreadcrumb": "Informatique/Périphériques/Souris",
      "quantity": 2,
      "unitSalePriceWithoutTax": 99.99,
      "discountRate": 0.0
    }
  ]
}

SaleItem - Ligne de commande client

Représente une ligne dans une commande client.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
ProductDesignation string Nom du produit Max 500 caractères
ProductUrl string URL de la fiche produit URL valide
ProductImageUrl string URL de l'image produit URL valide
ProductCategoryBreadcrumb string Hiérarchie de catégories Séparées par "/"
BarCode string Code-barres EAN/UPC Max 50 caractères
Quantity decimal Quantité commandée > 0
UnitSalePriceWithoutTax decimal Prix unitaire de vente HT >= 0
DiscountRate decimal Taux de remise (%) 0-100

Notes :

  • Si le produit n'existe pas, il est créé automatiquement
  • À partir de la v8.0, si CustomerName est renseigné lors de l'import d'une Sale, le client est ajouté à la volée s'il n'existe pas
  • Le ProductCategoryBreadcrumb permet de créer une hiérarchie de catégories (ex: "Électronique/Audio/Casques")
  • Le type d'unité (entier/décimal) est déterminé automatiquement selon les quantités

Delivery - Livraison client

Représente une livraison de commande client qui impacte le stock.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique de la livraison Max 100 caractères, unique
SaleCode string Code de la commande client Doit exister
CustomerCode string Code du client Optionnel (v9.0+)
WarehouseName string Nom de l'entrepôt Créé si inexistant
DeliveryDate datetime Date de livraison Format ISO 8601
Items List Liste des lignes livrées Au moins 1 ligne

Exemple JSON complet :

{
  "code": "DEL-2025-0489",
  "saleCode": "SO-2025-0542",
  "customerCode": "CUST-12345",
  "warehouseName": "ENTREPOT TOULOUSE",
  "deliveryDate": "2025-01-15T14:30:00Z",
  "items": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "quantity": 2
    },
    {
      "productCode": "MOUSE-LOGITECH-MX3",
      "quantity": 2
    }
  ]
}

Important :

  • La livraison retire la quantité du stock physique de l'entrepôt
  • Si la commande n'existe pas, la livraison n'est pas créée MAIS le stock est synchronisé pour les produits existants
  • Permet de corriger une livraison existante en renvoyant le même code avec des modifications

DeliveryItem - Ligne de livraison

Représente une ligne dans une livraison client.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
Quantity decimal Quantité livrée > 0

Purchase - Commande fournisseur

Représente une commande passée à un fournisseur.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique de la commande Max 100 caractères, unique
SupplierCode string Code du fournisseur Max 100 caractères
SupplierName string Nom du fournisseur Max 500 caractères
CreationDate datetime Date de création Format ISO 8601
Items List Liste des lignes Au moins 1 ligne

Exemple JSON complet :

{
  "code": "PO-2025-0128",
  "supplierCode": "SUP-DELL-FR",
  "supplierName": "Dell France",
  "creationDate": "2025-01-10T09:00:00Z",
  "items": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "productDesignation": "Dell XPS 15 - Intel i7",
      "productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
      "quantity": 20,
      "unitPurchasePriceWithoutTax": 1299.99
    }
  ]
}

Notes :

  • Le fournisseur est créé automatiquement s'il n'existe pas
  • Les produits sont créés automatiquement s'ils n'existent pas

PurchaseItem - Ligne de commande fournisseur

Représente une ligne dans une commande fournisseur.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
ProductDesignation string Nom du produit Max 500 caractères
ProductCategoryBreadcrumb string Hiérarchie de catégories Séparées par "/"
Quantity decimal Quantité commandée > 0
UnitPurchasePriceWithoutTax decimal Prix d'achat unitaire HT >= 0

Reception - Réception fournisseur

Représente une réception de marchandises d'un fournisseur qui augmente le stock.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique de la réception Max 100 caractères, unique
PurchaseCode string Code de la commande fournisseur Doit exister
WarehouseName string Nom de l'entrepôt Créé si inexistant
ReceptionDate datetime Date de réception Format ISO 8601
Items List Liste des lignes reçues Au moins 1 ligne

Exemple JSON complet :

{
  "code": "REC-2025-0095",
  "purchaseCode": "PO-2025-0128",
  "warehouseName": "ENTREPOT TOULOUSE",
  "receptionDate": "2025-01-15T11:20:00Z",
  "items": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "quantity": 20
    }
  ]
}

Important :

  • La réception ajoute la quantité au stock physique de l'entrepôt
  • Si la commande fournisseur n'existe pas, la réception n'est pas créée MAIS le stock est synchronisé pour les produits existants
  • Calcule automatiquement le délai d'approvisionnement (lead time)

ReceptionItem - Ligne de réception

Représente une ligne dans une réception fournisseur.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
Quantity decimal Quantité reçue > 0

StockTransfer - Transfert de stock

Représente un transfert de stock entre deux entrepôts.

Propriétés :

Propriété Type Obligatoire Description Contraintes
TransferDate datetime Date du transfert Format ISO 8601
ProductCode string Code du produit Max 100 caractères
SourceWarehouseName string Entrepôt source Doit exister
DestinationWarehouseName string Entrepôt destination Doit exister
Quantity decimal Quantité transférée > 0

Exemple JSON complet :

{
  "transferDate": "2025-01-15T16:00:00Z",
  "productCode": "LAPTOP-DELL-XPS15",
  "sourceWarehouseName": "ENTREPOT TOULOUSE",
  "destinationWarehouseName": "MAGASIN PARIS",
  "quantity": 5
}

Validations :

  • Le produit doit exister
  • Les deux entrepôts doivent exister
  • Le stock source doit être suffisant
  • Les entrepôts source et destination doivent être différents

DirectSale - Vente directe

Représente une vente directe (membre) qui crée la commande et retire le stock immédiatement.

Propriétés :

Propriété Type Obligatoire Description Contraintes
Code string Code unique de la vente Max 100 caractères, unique
SaleDate datetime Date de la vente Format ISO 8601
CustomerCode string Code du client Max 100 caractères
CustomerName string Nom du client Max 500 caractères
WarehouseName string Entrepôt de prélèvement Créé si inexistant
Items List Liste des lignes vendues Au moins 1 ligne

Exemple JSON complet :

{
  "code": "DS-2025-0001",
  "saleDate": "2025-01-15T14:30:00Z",
  "customerCode": "MEMBER-12345",
  "customerName": "Dupont Jean",
  "warehouseName": "MAGASIN TOULOUSE",
  "items": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "productDesignation": "Dell XPS 15 - Intel i7",
      "productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
      "quantity": 1,
      "unitPriceWithoutTax": 1599.00,
      "discountRate": 10.0
    }
  ]
}

Différence avec Sale + Delivery :

  • import-sale crée une commande sans impacter le stock
  • import-delivery retire le stock lors de la livraison
  • import-direct-sale fait les deux en une seule opération

DirectSaleItem - Ligne de vente directe

Représente une ligne dans une vente directe.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
ProductDesignation string Nom du produit Max 500 caractères
ProductCategoryBreadcrumb string Hiérarchie de catégories Séparées par "/"
Quantity decimal Quantité vendue > 0
UnitPriceWithoutTax decimal Prix unitaire HT >= 0
DiscountRate decimal Taux de remise (%) 0-100

CustomerDeliveryReturn - Retour client

Représente le retour d'un produit par un client.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit retourné Max 100 caractères
SaleCode string Code de la commande client Doit exister
DeliveryCode string Code de la livraison Doit exister
Quantity decimal Quantité retournée > 0

Exemple JSON :

{
  "customerDeliveryReturns": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "saleCode": "SO-2025-0542",
      "deliveryCode": "DEL-2025-0489",
      "quantity": 1
    }
  ]
}

Effet : Ajoute la quantité retournée au stock physique de l'entrepôt d'origine.


SupplierReceptionReturn - Retour fournisseur

Représente le retour d'un produit à un fournisseur.

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit retourné Max 100 caractères
PurchaseCode string Code de la commande fournisseur Doit exister
ReceptionCode string Code de la réception Doit exister
Quantity decimal Quantité retournée > 0

Exemple JSON :

{
  "supplierReceptionReturns": [
    {
      "productCode": "LAPTOP-DELL-XPS15",
      "purchaseCode": "PO-2025-0128",
      "receptionCode": "REC-2025-0095",
      "quantity": 2
    }
  ]
}

Effet : Retire la quantité retournée du stock physique de l'entrepôt (protégé contre les stocks négatifs).


ProductStock - Ajustement de stock libre

Représente un ajustement manuel de stock (ajout ou retrait).

Propriétés :

Propriété Type Obligatoire Description Contraintes
ProductCode string Code du produit Max 100 caractères
WarehouseName string Nom de l'entrepôt Doit exister
Quantity decimal Quantité à ajuster > 0
Reason string Motif de l'ajustement Obligatoire pour traçabilité

Exemple JSON (ajout) :

{
  "productStock": {
    "productCode": "LAPTOP-DELL-XPS15",
    "warehouseName": "MAGASIN TOULOUSE",
    "quantity": 10,
    "reason": "Inventaire annuel - Correction positive"
  }
}

Exemple JSON (retrait) :

{
  "productStock": {
    "productCode": "LAPTOP-DELL-XPS15",
    "warehouseName": "MAGASIN TOULOUSE",
    "quantity": 3,
    "reason": "Casse - Produit endommagé lors du transport"
  }
}

Cas d'usage :

  • Corrections d'inventaire
  • Pertes et casses
  • Vols
  • Dons et échantillons
  • Régularisations

ImportResult - Résultat d'import

Retour standard pour toutes les opérations d'import.

Propriétés :

Propriété Type Description
Status ImportStatus Statut de l'import (Success, Failed, Invalid, etc.)
ImportedRowCount int Nombre de lignes importées avec succès
ErrorList List Liste des erreurs rencontrées
Warnings List Avertissements (non bloquants)

Valeurs de ImportStatus :

  • Success : Import réussi
  • Created : Entité créée
  • Updated : Entité mise à jour
  • AlreadyProcessed : Déjà traité (aucune modification)
  • Enqueued : Mis en file d'attente (mode préparation)
  • Failed : Échec de l'import
  • Invalid : Données invalides

Exemple de réponse :

{
  "status": "Success",
  "importedRowCount": 5,
  "errorList": [],
  "warnings": [
    "Product PROD001 already exists, skipped"
  ]
}

ProductImportError - Erreur d'import

Détail d'une erreur lors de l'import.

Propriétés :

Propriété Type Description
RowIndex int Numéro de ligne en erreur
FailReason string Description de l'erreur

Exemple :

{
  "rowIndex": 3,
  "failReason": "Le code produit est obligatoire"
}

Récapitulatif des versions d'API

Mise à jour v10.0 : la version de référence est désormais v10.0. Sauf mention contraire, les endpoints disponibles en v9.0 restent disponibles en v10.0.

Endpoint v1.0 v2.0 v3.0 v4.0 v5.0 v6.0 v7.0 v8.0 v9.0 v10.0
ping ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
start-import-session ⚠️ ⚠️ ⚠️
process-import ⚠️ ⚠️ ⚠️
set-date ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
reset-date ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-product-list ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-product-list-from-file
initial-product-list-from-file-result
import-sale ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-delivery ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-purchase ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-reception ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-stock-transfer ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
customer-delivery-return ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
supplier-reception-return ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
add-free-product-stock ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
remove-free-product-stock ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
report ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
import-direct-sale ⚠️ ⚠️ ⚠️ ⚠️
cancel-delivery ⚠️ ⚠️ ⚠️
cancel-reception ⚠️ ⚠️

Légende : ✅ Disponible et supporté | ⚠️ Deprecated (obsolète) | ❌ Non disponible

Changements majeurs en v8.0 :

  • Nouvelle méthode : cancel-delivery — annulation d'un bon de livraison client avec restitution du stock (disponible depuis v7.0, recommandé en v8.0)
  • Nouvelle méthode : cancel-reception — annulation d'une réception fournisseur avec retrait du stock (introduite en v8.0, toujours disponible en v10.0)
  • ⚠️ v7.0 désormais obsolète : migrer vers v8.0 dès que possible

Changements majeurs en v9.0 :

  • Delivery enrichi : nouveau paramètre optionnel CustomerCode sur import-delivery

Changements majeurs en v10.0 :

  • Version de référence : la documentation et les nouveaux usages s'appuient désormais sur v10.0
  • Nouveau endpoint : import-product-list-from-file pour importer la liste initiale via un fichier multipart/form-data
  • Nouveau endpoint : initial-product-list-from-file-result/{longTaskId} pour consulter le résultat asynchrone
  • Continuité fonctionnelle : tous les endpoints d'import exposés en v9.0 restent disponibles en v10.0

Changements majeurs en v7.0 :

  • Nouvelle méthode : start-import-session remplace set-date (sans paramètres, utilise automatiquement la date du jour)
  • Nouvelle méthode : process-import remplace reset-date (finalise la session d'import)
  • Supprimées : set-date et reset-date ne sont plus disponibles en v7.0
  • 🎯 Simplification : Plus besoin de gérer manuellement les dates, le système utilise automatiquement la date du jour

Flux d'import recommandé en v10.0 :

  1. POST /api/v10.0/imports/start-import-session → Démarre la session (aucun paramètre)
  2. Importer vos données (produits, ventes, livraisons, commandes fournisseur, réceptions, etc.)
  3. Vérifier l'état avec GET /api/v10.0/imports/report
  4. POST /api/v10.0/imports/process-import → Finalise la session (aucun paramètre)
  5. En cas d'erreur après import : POST /api/v10.0/imports/cancel-delivery ou POST /api/v10.0/imports/cancel-reception

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.