Réponse directe
La confirmation COD n’est pas une sortie de stock. L’envoi au transporteur non plus. ERP-STOK déduit le stock lorsque le statut de ramassage (pickup / ramassé) est constaté, crée une vente liée au tracking, et peut restaurer le stock après validation de retour — avec contrôle d’idempotence sur le numéro de suivi.
Pourquoi ne pas déduire à la confirmation ?
Une commande confirmée peut encore être annulée, reportée ou jamais envoyée. Déduire trop tôt fausse le stock disponible et crée des ruptures artificielles.
ERP-STOK garde donc la confirmation comme étape commerciale / call center, distincte de la sortie magasin.
Pourquoi l’envoi transporteur n’est pas l’événement de déduction ?
À l’envoi, le colis est créé chez le prestataire et reçoit un tracking, mais le stock physique peut encore être en entrepôt tant que le transporteur n’a pas ramassé.
La déduction est branchée sur les statuts de type ramassé / pickup gérés par DeliverySaleService, pas sur le clic « envoyer » seul.
Point de déduction ERP-STOK : ramassage + tracking
Lorsqu’un ordre en livraison atteint un statut de ramassage reconnu, le service vérifie le tracking_number, crée une ligne de vente quotidienne si elle n’existe pas encore, et déduit les quantités.
L’opération est idempotente : un même tracking ne doit pas produire deux SaleOrder. Sans tracking fiable, la déduction ne peut pas s’appuyer correctement sur cette logique.
| Événement | Effet stock dans ERP-STOK |
|---|---|
| Confirmation call center | Aucun (statut commande seulement) |
| Envoi au transporteur | Tracking / statut livraison — pas la déduction stock |
| Ramassé / pickup | Création vente + déduction stock |
| Retour validé entrepôt | Restauration possible selon le workflow retours |
Conséquences opérationnelles du timing
Déduire trop tôt : ruptures fictives, ventes bloquées, écart inventaire.
Déduire trop tard (après sortie physique non tracée) : survente et colis incomplets. Le ramassage aligné transporteur réduit cet écart lorsque le polling de statut fonctionne.
- Confirmer la commande sans toucher au stock.
- Envoyer au transporteur et obtenir un tracking.
- Attendre le signal de ramassage (polling / sync statut).
- Laisser DeliverySaleService créer la vente et déduire.
- Sur retour : scanner / valider pour restaurer selon le flux retours.
Exemple opérationnel
Produit A, stock 10. Commande confirmée le lundi (stock reste 10). Envoyée mardi avec tracking T-123 (stock reste 10). Mercredi le transporteur passe en ramassé : vente créée pour T-123, stock passe à 9. Jeudi retour client validé en entrepôt : restauration selon le flux retour — sans recréer une seconde vente pour le même tracking.
Limites et points d’attention
- Le timing exact dépend des libellés de statut renvoyés par chaque transporteur et du polling.
- Sans tracking_number, la logique de vente/idempotence ne peut pas s’appliquer correctement.
- Ce guide décrit le comportement produit ; il ne modifie pas le code stock.