Le projet en un coup d’œil
Disponible FBA, unités en réception, réservées ou invendables ne pouvaient pas être traitées comme une seule promesse commerciale.
Ciama identifie chaque ligne par entrepôt et FNSKU, la rapproche du catalogue et conserve les composantes détaillées remontées par Amazon.
Les équipes recherchent les références à risque, ouvrent les ventes des 90 derniers jours et distinguent la valeur issue des réceptions de sa part estimée.
Pour un vendeur Amazon, « 120 unités en stock » peut recouvrir plusieurs réalités. Une partie est immédiatement disponible dans FBA, une autre arrive vers le centre logistique, certaines unités sont réservées à des commandes et d’autres sont classées invendables. Additionner ces nombres produirait une disponibilité trompeuse.
Dawap a transformé cette réponse d’inventaire en une brique logistique structurée dans Ciama. Chaque ligne conserve son entrepôt, son FNSKU, son SKU vendeur, sa date de mesure et dix-sept états quantitatifs. Elle est ensuite rapprochée du catalogue, valorisée à partir des réceptions fournisseurs, reliée aux ventes des 90 derniers jours et replacée dans la vue de son entrepôt.
La version fonctionnelle cohérente a été livrée le 17 mars 2026, après la collecte par connexion fournisseur, l’exécution asynchrone, les historiques et les vues de contrôle. Elle constitue une fondation du réapprovisionnement marketplace : avant de proposer une quantité à commander ou à diffuser, il faut savoir quelle parcelle porte le stock, comment elle se décompose et sur quelles données sa couverture repose.
1. Ciama, un cockpit vendeur confronté à plusieurs lieux de stock
Faire du couple produit-entrepôt une donnée métier à part entière
Ciama centralise les ventes, offres, produits, fournisseurs et opérations marketplace d’un compte. Dès que le vendeur utilise Amazon FBA en plus de son entrepôt de référence, le stock ne peut plus être porté seulement par la fiche produit. La même référence possède plusieurs réalités logistiques.
Le modèle a donc séparé l’entrepôt et la ligne de stock. L’entrepôt appartient au compte, possède un type, un identifiant, un état actif et peut être relié à une connexion fournisseur. La ligne appartient elle aussi au compte, puis relie cet entrepôt à un produit lorsque le rapprochement est possible.
Cette séparation évite de perdre l’origine d’une quantité lors d’une somme produit. Elle permet également de conserver les identifiants externes Amazon, notamment FNSKU et seller SKU, qui ne jouent pas le même rôle qu’un GTIN ou qu’un identifiant interne de catalogue.
Le projet ne devait pas inventer un « stock vendable » universel. Il devait exposer le fulfillable FBA comme disponibilité source, conserver les autres composantes à côté et fournir les signaux nécessaires à une décision explicite.
2. Collecter, rapprocher, enrichir puis historiser
Une chaîne où chaque calcul attend que la ligne de stock soit identifiable
Le chantier s’est concentré entre le 15 et le 17 mars 2026. La première étape a relié une connexion de type warehouse à un entrepôt Amazon FBA Europe actif. La seconde a diffusé chaque ligne collectée vers un traitement d’ajout ou de mise à jour selon le couple entrepôt-FNSKU.
Une fois la quantité enregistrée, Ciama cherche le produit grâce au SKU vendeur ou à un alias produit. Le lien catalogue débloque alors les enrichissements : somme positive des stocks du produit, stock de l’entrepôt par défaut, ventes livrées par cet entrepôt sur 90 jours, date de rupture estimée et valeur fondée sur les achats reçus.
La finalisation rafraîchit les agrégats de l’entrepôt et enregistre les instantanés de la ligne et de l’entrepôt. Les interfaces de recherche et de détail donnent ensuite accès à la quantité courante, aux composantes FBA, au calcul de valeur et aux signaux de couverture.
La qualité a été cadrée par des frontières strictes : compte, connexion active, identifiants valides, fournisseur disponible, type warehouse, fournisseur Amazon FBA Europe et entrepôt lié de type FBA Europe. Une configuration ambiguë s’arrête avant de mélanger les données.
3. Avant le projet : le total masquait la qualité de la disponibilité
Le même produit pouvait être disponible, entrant, réservé et invendable à la fois
Une quantité produit agrégée répond à une question comptable, mais pas toujours à la question du vendeur. Elle ne dit pas si les unités sont déjà dans le réseau FBA, encore en transit, occupées par une commande client ou écartées pour dommage.
Les identifiants ajoutaient une seconde difficulté. Amazon pilote FBA avec un FNSKU et transmet un SKU vendeur ; le catalogue Ciama possède son propre produit et peut connaître des alias. Sans règle de rapprochement, une quantité réelle restait isolée de la fiche utilisée par les offres et les ventes.
La valeur du stock était tout aussi fragile. Multiplier chaque unité par un prix moyen arbitraire aurait effacé les réceptions fournisseurs réellement disponibles et leur coût. À l’inverse, refuser tout calcul dès qu’une quantité n’était pas couverte par un achat rendait le signal inutilisable.
Enfin, une rupture ne se lit pas dans la quantité seule. Dix unités peuvent couvrir plusieurs mois pour une référence lente ou quelques jours pour une référence dynamique. Il fallait relier stock et consommation observée sans transformer cette projection en prévision certaine.
4. Créer une parcelle de stock par entrepôt et identifiant logistique
Conserver l’origine avant de produire une somme produit
Chaque ligne de stock appartient à un compte et à un entrepôt. Son identité externe repose sur le FNSKU dans cet entrepôt ; son SKU vendeur sert ensuite au rapprochement catalogue. Deux entrepôts peuvent donc porter la même référence sans fusionner leurs mesures.
L’entrepôt possède son propre état actif et peut être marqué comme entrepôt par défaut. Il peut aussi être rattaché à une connexion fournisseur unique. Ce lien donne au collecteur le lieu dans lequel enregistrer les données reçues.
Lorsqu’un produit est reconnu, Ciama peut additionner ses disponibilités positives pour mettre à jour le stock agrégé du catalogue. Cette somme ne supprime pas les parcelles : les lignes d’origine restent consultables et conservent leur entrepôt.
Le champ stockWarehouseDefault apporte un autre repère à chaque parcelle : la disponibilité trouvée pour le même produit dans l’entrepôt déclaré par défaut. Il s’agit d’un contexte de comparaison, pas d’une quantité automatiquement ajoutée au FBA.
5. Relier la connexion fournisseur au bon entrepôt FBA
Une activation explicite avant tout appel d’inventaire
L’activation d’un fournisseur warehouse peut créer ou retrouver l’entrepôt suggéré pour la connexion. Pour Amazon FBA Europe, Ciama utilise un identifiant et un type FBA dédiés, active l’entrepôt puis le rattache à la connexion du compte.
La collecte vérifie ensuite plusieurs conditions : connexion présente, active et dotée d’informations d’accès valides ; fournisseur présent, actif et disponible ; type warehouse ; identifiant amazon-fba-europe ; entrepôt lié, actif et de type FBA Europe.
Ces contrôles empêchent une collecte FBA d’écrire dans un entrepôt de référence ou dans le compte d’un autre client. Ils évitent également de lancer une tâche récurrente sur une connexion suspendue ou devenue invalide.
Dans la version contrôlée, cette chaîne spécialisée constitue le seul support automatisé de stock d’entrepôt. Le modèle reste extensible à d’autres fournisseurs, mais aucun connecteur non livré n’est présenté comme opérationnel.
6. Parcourir l’inventaire Amazon FBA Europe sans doubler une référence
Canaux actifs, pagination et déduplication par FNSKU
Le collecteur connaît seize places de marché Amazon européennes et proches couvertes par l’endpoint européen. Il ne les appelle que si le compte possède le canal correspondant et que ce canal est actif.
Pour chaque place retenue, Ciama interroge les résumés d’inventaire FBA avec le détail des quantités. Une date de début est ajoutée dans le cycle incrémental ; la reprise complète n’en fournit pas. Les pages suivantes utilisent le nextToken transmis par Amazon.
Un même stock FBA peut remonter depuis plusieurs places de marché. Ciama conserve donc en mémoire les FNSKU déjà rencontrés pendant le passage et n’émet qu’une ligne par FNSKU. Cette déduplication intervient avant les traitements d’écriture.
Les appels prennent en charge les quotas Amazon : une réponse 429 déclenche des reprises espacées, avec un nombre maximal de tentatives. Un jeton de pagination invalide ou expiré arrête proprement cette branche au lieu de rejouer indéfiniment la page.
7. Conserver la décomposition FBA plutôt qu’un nombre unique
Disponible, entrant, réservé et invendable restent séparés
La quantité disponible de la ligne correspond au fulfillableQuantity fourni par Amazon. Le totalQuantity est conservé à côté. Ciama ne présente pas leur différence comme un stock mystérieux : il enregistre les composantes permettant de la comprendre.
Le flux entrant additionne les quantités working, shipped et receiving, tout en conservant chacun de ces trois états. Une équipe peut ainsi distinguer les unités encore en préparation de celles expédiées vers Amazon ou déjà en réception.
Le réservé contient un total puis trois causes : commande client en attente, transbordement en attente et traitement par le centre logistique. L’invendable possède lui aussi son total et ses origines : dommage client, entrepôt, distributeur ou transporteur, défaut et expiration.
La ligne devient active lorsque la quantité disponible additionnée à l’entrant est positive. Ce choix n’affirme pas que l’entrant est déjà vendable ; il garde visible une parcelle qui possède encore un mouvement logistique utile au pilotage.
8. Raccrocher le stock au bon produit sans deviner
SKU vendeur direct, puis alias catalogue comme second chemin
Après l’écriture, Ciama recherche d’abord un alias correspondant au SKU vendeur dans le compte. Si cet alias existe, il fournit l’identifiant du produit cible. Sinon, le système cherche directement un produit dont l’identifiant correspond au SKU.
Le lien est créé seulement lorsqu’un produit est réellement trouvé et que la ligne n’en possède pas encore. Une référence non reconnue reste visible avec son FNSKU, son seller SKU et son nom source ; elle n’est pas rattachée à une fiche approchante.
Ce rapprochement débloque plusieurs contrôles. La table affiche le produit et son GTIN lorsqu’il existe ; la quantité vendue sur 90 jours peut être recherchée pour ce produit et cet entrepôt de livraison ; les compteurs en stock de sa marque, catégorie et de ses tags sont rafraîchis.
La frontière du compte s’applique à chaque recherche. Un alias identique chez un autre vendeur ne peut pas fournir une correspondance. Cette règle est essentielle lorsque plusieurs catalogues utilisent des conventions de SKU proches.
9. Valoriser la quantité à partir des réceptions fournisseurs
Séparer le coût réel couvert de la part encore estimée
Pour un produit lié, Ciama recherche les lignes d’achats fournisseurs reçues avant la date de mesure. Il parcourt leurs quantités livrées et leurs prix unitaires hors taxes convertis afin de couvrir la quantité totale de la parcelle.
Chaque ligne valide contribue au maximum de la quantité encore à valoriser. Le détail conserve l’achat, la date, la quantité de ligne, la quantité consommée par le calcul, le prix unitaire et le montant retenu. La fenêtre de valeur peut ensuite enrichir ces lignes avec la commande fournisseur et le fournisseur.
Si les réceptions ne couvrent pas tout le stock, la quantité restante reçoit le prix unitaire moyen pondéré des lignes réelles déjà consommées. Cette part est enregistrée séparément comme estimée, avec la raison missing_received_qty. Si aucune ligne exploitable n’existe, ce prix de repli reste nul.
Le total additionne valeur réelle et valeur estimée, en euros. L’interface montre la quantité cible, les lignes réelles, l’éventuelle ligne de repli et leur somme. Elle ne transforme pas une estimation en coût d’achat certifié.
10. Relier le stock aux ventes des 90 derniers jours
Un indicateur de consommation limité à l’entrepôt de livraison
Ciama calcule la quantité vendue sur les 90 derniers jours pour le SKU et l’entrepôt concernés. Dans la fenêtre de détail, les lignes de commande qui composent ce chiffre sont consultables lorsque la parcelle est liée à un produit.
La date de rupture estimée part de la quantité disponible additionnée à la quantité entrante. Si ce total est nul ou négatif, la date devient immédiate. Sans vente positive sur 90 jours, aucune échéance future n’est inventée.
Lorsque la consommation existe, la moyenne quotidienne correspond aux ventes des 90 jours divisées par 90. Le nombre de jours restants est la quantité disponible et entrante divisée par cette moyenne, arrondie au jour supérieur.
Ce calcul est une projection linéaire, pas une prévision saisonnière. Il ne connaît ni prochaine promotion ni variation de demande. Sa valeur est opérationnelle : rendre comparables les références sous le même horizon et faire ressortir celles dont la couverture se rapproche de zéro.
11. Installer une recherche de stocks conçue pour le run
Entrepôt, activité, disponibilité et risque dans une même table
La recherche est toujours limitée au compte connecté et affiche cinquante lignes par défaut. Le texte libre couvre FNSKU, SKU vendeur, nom source, identifiant produit, GTIN et nom catalogue. Un filtre permet d’isoler un entrepôt.
Les filtres visibles distinguent lignes actives ou désactivées et parcelles avec ou sans quantité disponible. Le moteur accepte aussi des critères utilisés par les vues spécialisées : date de rupture présente ou avant un nombre de jours, ventes positives sur 90 jours, entrant positif et stock de l’entrepôt par défaut positif.
La table expose l’entrepôt, les identifiants, le produit lié, l’activité, total, entrant, réservé, invendable, disponible, ventes sur 90 jours, date de rupture, valeur et date de mise à jour. Les colonnes quantitatives et temporelles principales sont triables.
Les ventes sur 90 jours et la valeur ne restent pas des nombres opaques. Chacune ouvre une fenêtre de justification : lignes de commande pour la consommation, réceptions fournisseurs et estimation pour la valeur.
12. Donner à chaque entrepôt sa propre vue de santé
Historique agrégé et références à risque dans les quinze jours
Après chaque ligne finalisée, Ciama recalcule les métriques de l’entrepôt : nombre total de parcelles, nombre actives, nombre actives avec quantité, quantité totale et valeur. Ces chiffres alimentent les instantanés de l’entrepôt.
Sa page de synthèse retrace trois séries : références actives en stock, quantité et valeur. Les données historiques sont limitées aux 240 points retenus par la vue, ce qui offre une profondeur de contrôle sans charger une chronologie illimitée.
Une table met en avant jusqu’à mille lignes encore en stock dont la date de rupture estimée tombe entre aujourd’hui et les quinze prochains jours. Elles sont triées par échéance croissante afin que le risque le plus proche apparaisse d’abord.
La liste générale des entrepôts reste plus simple : recherche par nom ou identifiant, statut, type et accès au détail. Ses colonnes de stock, quantité et valeur ne sont pas encore renseignées dans l’écran de recherche ; la fiche ne les présente donc pas comme un résumé opérationnel complet.
13. Combiner une reprise courte et une reprise complète quotidienne
Actualiser souvent sans abandonner la couverture exhaustive
En production, la collecte incrémentale est lancée toutes les vingt minutes. Elle demande les mises à jour depuis trente minutes avant l’instant du passage. Ce chevauchement volontaire permet de relire une fenêtre récente sans créer un doublon de parcelle.
Une collecte complète est déclenchée chaque jour à six heures sans borne de début ni de fin. Elle reprend l’ensemble retourné par FBA afin de corriger une éventuelle absence dans les cycles courts ou une interruption antérieure.
Seules les fonctionnalités warehouse_stocks_sync actives dont la connexion et le fournisseur passent les contrôles sont exécutées. Un passage vide, un succès ou un échec reçoit son propre état de suivi et le nombre de lignes diffusées.
Le collecteur utilise les canaux Amazon actifs du compte pour accéder aux places de marché. Un compte sans canal Amazon actif produit un avertissement explicite et aucune ligne, plutôt qu’un inventaire présenté comme vide sans explication.
14. Écrire chaque parcelle sans bloquer la collecte globale
Ajouter ou mettre à jour selon une identité stable
Après déduplication, chaque résumé d’inventaire devient un message. Si aucun stock ne correspond au couple entrepôt-FNSKU, Ciama programme un ajout ; sinon il programme une mise à jour. Les deux chemins sont consommés par des traitements distincts.
Cette séparation évite qu’une valorisation, un rapprochement produit ou une mise à jour de compteur ralentisse l’appel de toutes les pages Amazon. Elle laisse aussi le suivi identifier une parcelle qui échoue sans annuler celles déjà envoyées.
L’ajout et la mise à jour appliquent les mêmes enrichissements. Une nouvelle ligne ne reste pas une version appauvrie : produit, valeur, quantité agrégée, stock par défaut, ventes récentes, rupture et instantanés sont calculés lorsque leurs préconditions existent.
À partir d’avril 2026, une mise à jour peut également recalculer la cible des offres explicitement liées à cette parcelle et déléguer l’éventuel envoi automatique au module dédié. La présente fiche s’arrête avant cette décision de diffusion.
15. Les arbitrages qui empêchent une fausse disponibilité globale
Décrire le stock avant de décider ce qui peut être diffusé
Le premier arbitrage est de conserver available, inbound, reserved et unfulfillable dans des champs distincts. Seul le fulfillable Amazon devient la quantité disponible de la parcelle. Le total reste un repère de composition, pas une quantité à envoyer telle quelle.
Le deuxième est de garder une parcelle sans produit lorsqu’aucune correspondance exacte n’existe. Une ligne orpheline demande une correction de référentiel ; l’associer au mauvais produit contaminerait la somme catalogue, les ventes et la valorisation.
Le troisième est de séparer valeur réelle et estimée. Le calcul fournit un total utilisable, tout en indiquant exactement quelle quantité repose sur des réceptions connues et quelle quantité utilise un prix de repli.
Le quatrième est de laisser l’allocation à un autre module. Le Stock Dispatcher marketplace choisit les parcelles autorisées pour une offre et calcule une cible. La fondation entrepôt ne choisit pas seule le canal prioritaire.
16. Rendre visibles les limites de la version livrée
Amazon FBA automatisé, projection linéaire et valeur dépendante des achats reçus
Le modèle accepte plusieurs entrepôts, mais le support automatique observé est Amazon FBA Europe. Le chemin historique vers l’entrepôt Odoo par défaut lève explicitement une erreur de synchronisation désactivée. Il n’est donc pas présenté comme un flux actif.
Les seize places de marché sont des configurations possibles du collecteur, pas seize appels systématiques. Seuls les canaux existants et actifs du compte participent au passage. Un FNSKU vu sur plusieurs places n’est enregistré qu’une fois.
La date de rupture suppose que la consommation moyenne des 90 derniers jours se poursuive. Elle inclut l’entrant dans la quantité de départ mais ne modélise pas son délai de réception. Elle sert à prioriser un contrôle, pas à promettre un jour de rupture exact.
La valeur dépend des réceptions fournisseurs reliées au produit. Une part non couverte reste identifiée comme estimation ; sans prix réel exploitable, son montant peut être nul. L’interface expose ce manque plutôt que de fabriquer une valorisation.
17. Ce qui change après la livraison
Une ligne de stock devient explicable, comparable et actionnable
L’équipe logistique ne confond plus quantité totale et disponibilité FBA. Elle voit immédiatement combien d’unités sont disponibles, entrantes, réservées ou invendables et peut ouvrir la parcelle qui demande une vérification.
Le catalogue reçoit une somme de disponibilités positives tout en conservant l’origine par entrepôt. Le vendeur peut donc partir de la fiche produit pour décider, puis revenir à chaque parcelle pour comprendre la composition du stock.
Les achats et la logistique partagent une valeur justifiée. Les réceptions qui couvrent la quantité apparaissent ligne par ligne ; la part estimée reste isolée. Une différence de valorisation devient un sujet vérifiable plutôt qu’un chiffre opaque.
Le réapprovisionnement dispose d’un premier radar : ventes des 90 jours, quantité et entrant, date de rupture linéaire et table des risques à quinze jours. Cette base alimente ensuite le Replenishment Planner, qui porte la décision de quantité à demander.
Enfin, le run gagne une cadence et un suivi. Les cycles courts reprennent les changements récents, le passage quotidien sécurise la couverture et les écritures asynchrones isolent les erreurs sans arrêter tout l’inventaire.
18. Le scénario de contrôle qui résume le projet
Comprendre pourquoi une référence FBA approche de la rupture
La page d’un entrepôt FBA fait remonter une référence dans les risques des quinze prochains jours. La ligne affiche encore du stock disponible, mais ses ventes sur 90 jours indiquent une consommation soutenue et sa date projetée se rapproche.
L’opérateur ouvre les lignes de commande qui composent les ventes récentes. Il vérifie que le produit est correctement relié et que les commandes ont bien été livrées depuis cet entrepôt. Il évite ainsi de prendre une décision sur une consommation agrégée d’un autre lieu.
Il compare ensuite disponible, entrant, réservé et invendable. L’entrant existe, mais la fiche rappelle qu’il ne constitue pas encore du fulfillable. La projection l’inclut dans la couverture ; l’équipe conserve donc un jugement métier sur son délai réel de réception.
La fenêtre de valeur montre quelles réceptions fournisseurs couvrent la quantité et quelle part reste estimée. Si un achat manque, l’anomalie est identifiable avant d’utiliser le total dans une décision financière.
Le signal peut enfin être transmis au plan de réapprovisionnement. Ciama n’a ni promis une quantité à Amazon ni déclenché une commande fournisseur depuis cette vue : il a rendu la parcelle assez claire pour que le module et l’équipe suivants prennent une décision fondée.
19. Relier la fondation entrepôt aux modules spécialisés
Historique, réassort et diffusion interviennent à des moments différents
L’analyse du stock Amazon FBA approfondit la chronologie d’une parcelle, la valeur dans le temps et la projection de rupture. Le présent projet raconte d’abord la donnée structurée qui rend cette analyse possible.
Le Replenishment Planner marketplace transforme stock FBA, stock de référence, ventes et échéance en proposition de réassort. Cette étape intervient après le diagnostic de disponibilité.
Le Stock Dispatcher traite une autre décision : sélectionner les parcelles liées à une offre, calculer sa quantité cible et encadrer l’envoi au canal. Il ne remplace pas la collecte d’inventaire.
La synchronisation des stocks ERP et marketplaces replace enfin cette fondation dans la chaîne complète. Elle montre pourquoi la qualité d’une source et l’identité produit doivent être établies avant toute diffusion.
20. Conclusion
Le bon stock est d’abord un stock dont l’origine et les limites sont visibles
Ce projet a fait du stock une entité logistique complète dans Ciama. L’entrepôt, le FNSKU, le SKU vendeur, le produit, la date de mesure et toutes les composantes FBA restent associés à la même parcelle.
Les enrichissements transforment ensuite cette donnée source en outil de décision : rapprochement catalogue exact, somme par produit, valeur réelle et estimée, ventes sur 90 jours, date de rupture, historique et vue des risques. Chacun conserve sa méthode et ses limites.
Cette discipline est au cœur du réapprovisionnement marketplace : ne pas confondre total, disponible et quantité à diffuser, puis donner aux équipes la preuve nécessaire avant de commander, d’allouer ou d’envoyer un stock.