Se rendre au contenu

Maîtriser les Achats & Approvisionnements dans Odoo 19 — Partie 3/4 : Valorisation de stock (Standard, FIFO, AVCO)

Saison 8 · Article 3/4 — Achats & Approvisionnements
26 avril 2026 par
Maîtriser les Achats & Approvisionnements dans Odoo 19 — Partie 3/4 : Valorisation de stock (Standard, FIFO, AVCO)
B.Mustapha

Saison 8 · Article 3/4 — Achats & Approvisionnements

Valorisation de stock dans Odoo 19 — Standard, FIFO, AVCO

Tes serveurs entrent en stock à 183 300 DZD l'unité après landed cost. Mais une semaine plus tard tu en réceptionnes 5 de plus à un autre prix. Question simple, réponse vitale : combien valent tes serveurs à cet instant T ? Dans cette Partie 3/4, on déroule les trois méthodes Odoo 19 CE (Standard / FIFO / AVCO), on simule une vraie vie du stock sur InfoSphere (187 200 DZD de nouvelle moyenne), et on lève le voile sur la refonte majeure v19 : stock.valuation.layer n'existe plus.

Ce que tu vas apprendre

3 méthodes CE

Standard / FIFO / AVCO — laquelle pour quelle catégorie de produits InfoSphere.

Real_time vs Periodic

Valorisation automatique vs saisie manuelle mensuelle — impact sur les écritures.

Fil rouge AVCO chiffré

T0 → T1 → T2 : comment l'AVCO passe de 183 300 à 187 200 DZD puis sort le COGS.

Changements v19

stock.valuation.layer supprimé, comptes input/output retirés : ce qu'Odoo a cassé.

1. Où on en est : 10 serveurs à 183 300 DZD l'unité

Dans la Partie 2/4, Inès a appliqué un landed cost de 333 000 DZD sur la première réception ImportEquip. Résultat : les 10 serveurs InfoRack Server R3 2U entrés à 150 000 DZD valent désormais 183 300 DZD l'unité. La valorisation du stock affichée au bilan est de 1 833 000 DZD.

Karim est content. Mais Inès lui pose la question qui tue : « Et quand on va en réceptionner 5 de plus la semaine prochaine, à 195 000 DZD cette fois — sans landed cost parce qu'on prend l'Incoterm DDP complet — comment Odoo va combiner les deux lots ? Est-ce qu'on vend d'abord les anciens à 183 300 puis les nouveaux à 195 000 ? Ou bien on fait une moyenne ? Ou bien on fige la valeur manuellement ? »

C'est exactement la question à laquelle répond la méthode de valorisation d'inventaire. Trois choix en CE, un seul par catégorie produit, et chacun a des conséquences comptables et fiscales différentes.

ℹ️ Tout se joue dans la catégorie produit — la méthode de valorisation n'est pas un paramètre produit, mais un paramètre catégorie. Tous les produits d'une même catégorie partagent la même méthode. C'est pour ça qu'il faut bien segmenter ses catégories avant de cocher la case.

2. Standard, FIFO, AVCO — décider en 5 minutes

Odoo 19 CE propose trois méthodes de valorisation. Chacune répond à une logique différente pour calculer le coût unitaire au moment où tu sors un produit du stock.

Méthode (FR v19) Code technique Logique Bon usage
Coût standard standard Coût unitaire fixé manuellement, ne bouge jamais sauf intervention humaine Produits à prix stable (fournitures bureau, consommables locaux)
Premier entré, premier sorti (FIFO) fifo On sort d'abord les plus anciennes couches au prix d'entrée de l'époque Denrées périssables, produits traçables par lot, comptabilité stricte
Coût moyen pondéré (AVCO) average Chaque entrée recalcule une moyenne pondérée, chaque sortie part à cette moyenne Matières importées à prix variables, volumes élevés, fiscalité simplifiée

Décision rapide pour InfoSphere :

  • Fournitures bureau locales (stylos, cartouches imprimante, câbles Ethernet) — Coût standard. Prix stable, volume modeste, inutile de complexifier.
  • Matériel informatique importé (serveurs R3, SSD, mémoires) — AVCO. Les prix fluctuent au gré du taux DZD/USD et des landed costs, la moyenne pondérée lisse naturellement.
  • Accessoires reconditionnés avec numéros de sérieFIFO. Traçabilité lot par lot exigée, chaque pièce conserve son coût d'origine.

Cette segmentation par catégorie suit la même logique que celle appliquée pour structurer l'inventaire de base — on ne configure pas une valorisation globale pour tous les produits, on applique une méthode par nature de marchandise.

Enterprise ajoute une quatrième méthode : le Coût moyen serial/lot (un AVCO calculé par lot ou série, pas par produit). En CE, le choix est limité aux trois ci-dessus — c'est déjà largement suffisant pour 95 % des cas.

3. Où ça se configure : la catégorie produit

Menu Inventaire → Configuration → Catégories de produits. Ouvre (ou crée) la catégorie concernée. Les trois champs qui comptent :

  • Méthode de coût (property_cost_method) — Standard / FIFO / AVCO
  • Valorisation de l'inventaire (property_valuation) — Manuelle / périodique (pas d'écritures automatiques, saisie comptable mensuelle) vs Automatisée (real_time — écritures générées à chaque mouvement de stock)
  • Compte de valorisation des stocks (property_stock_valuation_account_id) + Journal d'écritures (property_stock_journal) + Compte d'écart de prix (property_price_difference_account_id)
Catégorie Importation AVCO — méthode Coût moyen, valorisation Automatique
Catégorie Importation AVCO d'InfoSphere — AVCO + valorisation temps réel, compte 310000 Matières premières.
⚠️ Real_time sans compte d'écart de prix = écritures silencieusement absentes — c'est le piège n°1 rencontré en v19. Si property_price_difference_account_id est vide et que le journal de stock n'a pas de compte par défaut configuré, Odoo accepte la validation du mouvement de stock, met à jour le coût moyen, mais ne génère aucune écriture comptable. Silencieux. Au moment de la clôture, la compta et le stock divergent. Toujours renseigner les trois comptes avant la première réception.

Configure une fois, oublie pour toujours. Les écritures suivantes reprennent automatiquement les comptes de la catégorie — pas besoin de les préciser sur chaque produit ou chaque réception. Pour les entreprises algériennes, rattache ces comptes au plan comptable SCF : 310000 pour la valorisation du stock de matières premières, 600000 pour les contrepartie d'achats.

4. Fil rouge : la 2ᵉ réception fait basculer l'AVCO

Retour sur InfoSphere. Une semaine après le container initial, ImportEquip propose un réassort : 5 serveurs R3 supplémentaires à 195 000 DZD l'unité, cette fois en Incoterm DDP — frais d'import inclus, donc pas de landed cost à recalculer. Karim confirme la commande, Inès réceptionne le transfert ALG/IN/00007.

Voici ce qui se passe au moment précis de la validation de la réception, sans toucher à rien d'autre :

Moment Quantité en stock AVCO unitaire Valeur totale stock
T0 — après landed cost (Partie 2/4) 10 u 183 300,00 DZD 1 833 000,00 DZD
T1 — réception de 5 u à 195 000 DZD 15 u 187 200,00 DZD 2 808 000,00 DZD

Le calcul derrière le rideau :

Nouvelle AVCO = (Valeur stock T0 + Valeur nouvelle entrée) / (Qty T0 + Qty nouvelle entrée)

= (1 833 000 + 5 × 195 000) / (10 + 5)

= (1 833 000 + 975 000) / 15

= 2 808 000 / 15 = 187 200,00 DZD

Le standard_price de la fiche produit passe automatiquement de 183 300 à 187 200 DZD à la seconde où le transfert ALG/IN/00007 est validé. C'est visible à l'œil nu sur la fiche produit, rubrique Inventaire, champ Coût.

Fiche produit InfoRack R3 2U — coût 187 200 DZD, quantité 15 u après 2e réception
Fiche produit T1 — coût passé à 187 200 DZD, quantité à 15 u.

5. Sortie client : le COGS part à la moyenne du moment

Trois jours plus tard, premier client qui commande : Réseau Plus (intégrateur à Oran) prend 3 serveurs R3 à 230 000 DZD l'unité — vente catalogue standard, sans remise. Bon de commande client S00008 créé, confirmé, livraison ALG/OUT/00004 préparée et validée.

Moment Quantité AVCO unitaire Valeur stock Chiffre d'affaires HT COGS Marge
T1 avant vente 15 u 187 200 2 808 000
T2 après livraison 3 u 12 u 187 200 2 246 400 690 000 561 600 128 400 (18,6 %)

Points à retenir sur cette sortie :

  • Le COGS (Cost of Goods Sold, coût des marchandises vendues) sort à 3 × 187 200 = 561 600 DZDpas à 3 × 183 300 (les plus anciens) et pas à 3 × 195 000 (les plus récents). En AVCO, il n'y a pas de couche : tout le monde part à la moyenne du moment de la sortie.
  • L'AVCO unitaire ne bouge pas après la sortie (187 200 DZD inchangé). Une sortie ne recalcule l'AVCO que si elle modifie le ratio valeur/quantité — ce qui n'arrive que sur des corrections manuelles de valeur.
  • La marge brute sur cette vente est calculée automatiquement par les rapports de vente à partir du couple prix catalogue / coût AVCO. Karim voit 18,6 % directement dans son pipeline — sans rien calculer à la main.

Et si Karim bascule la catégorie en FIFO au lieu d'AVCO, que se passe-t-il ? Sur la même vente de 3 u, le COGS partirait à 3 × 183 300 = 549 900 DZD (les anciennes couches d'abord), soit 140 100 DZD de marge (20,3 %). Ce n'est pas mieux ni moins bien : c'est une logique comptable différente. En période d'inflation des prix d'achat, AVCO protège les marges récentes, FIFO consomme d'abord les stocks anciens moins chers.

6. Sous le capot : ce qu'Odoo 19 a cassé avec stock.valuation.layer

Si tu reviens d'une v17 ou v18, accroche-toi : Odoo a purement et simplement supprimé le modèle stock.valuation.layer en v19. Les SVL qui traçaient chaque couche de valorisation (incoming / outgoing / revalorisation manuelle) ont été remplacés par des champs directement portés par le stock.move. Deux conséquences concrètes :

  • Plus de modèle stock.valuation.layer → tes scripts RPC, personnalisations ou rapports qui interrogeaient ce modèle lèvent une erreur UserError: Object stock.valuation.layer doesn't exist.
  • Trois nouveaux champs sur stock.move : value (valeur de la couche), remaining_qty (quantité encore en stock issue de ce mouvement), remaining_value (valeur encore en stock issue de ce mouvement, réévaluée en continu si AVCO). Un value_manual vient s'ajouter pour les corrections manuelles.
  • Nouveau modèle léger product.value pour tracer les modifications manuelles de coût (mise à jour du standard_price à la main, réévaluations d'exercice, inventaire tournant).
  • Nouveau rapport officiel Stock Valuation Report (stock_valuation_report) pour l'audit comptable des stocks — voir la documentation officielle Odoo 19 sur la valorisation d'inventaire.
Flux de valorisation Odoo 19 — réception vers move valorisé puis écriture comptable selon méthode
Le parcours complet d'une unité de stock — de la réception à l'écriture comptable, selon la méthode de la catégorie.

Dans notre simulation, voici comment les trois stock.move du produit InfoRack R3 2U ont été rebalancés automatiquement après la sortie de 3 u :

Move Type Qty initiale Valeur initiale Remaining qty Remaining value
ALG/IN/00006 Entrée 10 u 1 833 000,00 7 u 1 310 400,00
ALG/IN/00007 Entrée 5 u 975 000,00 5 u 936 000,00
ALG/OUT/00004 Sortie 3 u 561 600,00 (COGS) 0 0

Observe la colonne Remaining value : 1 310 400 + 936 000 = 2 246 400 DZD, ce qui correspond exactement aux 12 u × 187 200. Odoo a ré-attribué la valeur restante au prorata du coût moyen, même sur les anciennes couches. C'est ça, le cœur d'AVCO en v19 : pas de couches figées à l'origine, mais une continuité de la moyenne pondérée.

⚠️ Champs input/output account supprimés aussi — les champs property_stock_account_input_categ_id et property_stock_account_output_categ_id qui existaient sur product.category en v18 ont été retirés en v19. Odoo dérive désormais les comptes de contre-partie depuis la configuration du picking_type ou du journal de stock. Les modules tiers qui surchargent ces champs vont casser à la migration — c'est le chantier numéro un de toute migration v18 → v19 qui touche à stock_account.

7. Changer de méthode en cours de route : le scénario qui fait peur

Un client te demande : « On est en Coût standard depuis 6 mois, on s'est rendu compte que nos prix d'achat fluctuent beaucoup, on voudrait passer en AVCO. » Que se passe-t-il si tu bascules la catégorie à chaud ?

Odoo 19 gère le cas proprement, mais il faut connaître les effets de bord :

  • Au moment du changement, Odoo génère automatiquement une ré-évaluation des stocks existants à la valeur du moment (l'ancien standard_price est conservé comme valeur de départ AVCO).
  • Si la catégorie passe en real_time alors qu'elle était en periodic, les écritures comptables commencent à se générer à partir du mouvement suivant — pas rétroactivement. Le stock en bilan au moment du changement est considéré comme « juste », Odoo ne refait pas l'historique.
  • Les mouvements antérieurs gardent leur ancienne valeur. Les rapports Stock Valuation Report (nouveau rapport officiel v19, stock_valuation_report) affichent l'historique mixte — c'est voulu.
⚠️ Ne bascule jamais en cours d'exercice comptable sans validation du commissaire — un passage Standard → AVCO ou FIFO → AVCO fait apparaître une ligne de réévaluation dans les comptes, qui est parfaitement légitime mais doit être documentée auprès du commissaire aux comptes. Le faire en début d'exercice (typiquement au 1er janvier) évite toute ambiguïté fiscale.

Pour InfoSphere, Karim a eu la bonne intuition dès le début : catégorie Importation AVCO dédiée pour les produits importés, Coût standard pour les consommables locaux. Pas de bascule à prévoir, pas de ligne de réévaluation à justifier en audit. C'est plus simple, c'est plus sain, et ça ne coûte rien à mettre en place au démarrage du projet.

À retenir

📐 3 méthodes en CE, une par catégorie

Standard pour les produits à prix stable, FIFO pour les produits traçables par lot, AVCO pour les matières importées à prix variables. Segmente tes catégories produit avant de cocher la case.

⚙️ Real_time = trois comptes à renseigner

Compte de valorisation + Journal de stock + Compte d'écart de prix, tous sur la product.category. Sinon : mouvement validé, coût mis à jour, mais aucune écriture comptable générée. Silencieux, dangereux.

🔢 AVCO en vrai — le calcul chiffré

10 u × 183 300 + 5 u × 195 000 = 2 808 000 / 15 = 187 200 DZD. Une sortie de 3 u valorise le COGS à 561 600 DZD. L'AVCO ne bouge pas après une sortie, seulement après une entrée.

💥 Refonte v19 — ce qui a changé

stock.valuation.layer supprimé, valeurs portées par stock.move (value, remaining_qty, remaining_value), nouveau modèle product.value pour les corrections manuelles. Les comptes input/output sur catégorie n'existent plus.

Prochaine étape : quand et combien recommander ?

Tu sais maintenant combien valent les produits en stock à chaque instant. Mais une autre question reste ouverte : quand faut-il en recommander, et en quelle quantité ? C'est là qu'entrent en jeu les points de commande, la route Make-to-Order et le scheduler quotidien d'Odoo.

Partie 4/4 — Planification d'approvisionnement

À publier prochainement — orderpoints, MTO vs MTS, replenishment dashboard, multi-fournisseurs.

🛒 Approfondir — Achats & Fournisseurs

Autres articles du même domaine :

Les achats

Acheter & Vendre

Contrats-cadres & Appels d'offre

Maîtriser les Achats

Frais d'import & Landed costs

Maîtriser les Achats

Articles complémentaires

Sur les mêmes thématiques : #intermediaire#cas-pratique

Recrutement RH

👥 Ressources humaines · Saison 4

Congés & Présence RH

👥 Ressources humaines · Saison 4

Site vitrine

🛍 Site web & eCommerce · Saison 5

Promotions multicanal dans Odoo 19 CE — Ventes B2B, eCommerce et Point de Vente
Saison 10 · Article 1/3 — Revenue Management