Documentation11 min de lecture

Réceptions fournisseurs : statuts, conteneurs, recettes de travaux et pénalités

Dix-huit modules OCA du dépôt `purchase-workflow` encadrent la réception dans Odoo 18 Community : `purchase_work_acceptance` intercale un document de **recette de travaux** entre la commande et la réception, et son extension `purchase_work_acceptance_late_fines` calcule la **pénalité de retard** à facturer au fournisseur et génère la pièce comptable. Les seize autres, du statut de réception par ligne au suivi des conteneurs d'import.

Grand plateau de bureaux avec de nombreux postes de travail

Entre la commande envoyée et la marchandise rangée, il se passe tout ce qui fait le quotidien d'un approvisionneur : un fournisseur qui livre en trois fois, un conteneur qui arrive avec deux semaines de retard, une prestation à faire valider avant d'être payée.

Dix-huit modules communautaires traitent ce segment — dont un dispositif complet de recette de travaux avec évaluation et pénalités.

Résumé

Trois modules installent un statut de réception : au niveau de la commande (rien reçu / partiellement / entièrement, avec forçage manuel possible), au niveau de la ligne, et un module de colle qui réconcilie cette logique avec le champ natif d'Odoo. purchase_reception_notify prévient les suiveurs de la commande dès que la marchandise est reçue.

Côté logistique : purchase_delivery_split_date génère un bon de réception par date planifiée, purchase_manual_delivery supprime la création automatique et laisse créer les réceptions ligne par ligne au fil des livraisons, purchase_all_shipments fait apparaître les transferts chaînés sur le bouton de réception, et purchase_order_supplier_return gère un retour fournisseur par une ligne de quantité négative.

Pour l'import : des champs de date de départ et d'arrivée estimées, un suivi complet des conteneurs (transitaire, dates réelles, type), un seuil de franco de port par fournisseur qui bloque la confirmation en dessous, un délai de transport distinct du délai fournisseur, et un calendrier d'ouverture du fournisseur pour que les délais se comptent en jours ouvrés.

L'essentiel

  • Un statut de réception par ligne, et pas seulement au niveau de la commande.
  • Une réception créée manuellement, ligne par ligne, au fil des livraisons réelles.
  • Un bon de réception par date planifiée quand les lignes ont des dates différentes.
  • La recette de travaux : un document de validation intercalé avant la réception ou la facturation.
  • Une évaluation du fournisseur sur des critères configurables — délai, qualité produit, qualité de service.
  • Des pénalités de retard calculées et comptabilisées automatiquement.
  • Le suivi des conteneurs : transitaire, dates estimées et réelles, type de conteneur.
  • Le franco de port par fournisseur, bloquant la confirmation sous le seuil.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Statut de réceptionpurchase_reception_status, purchase_reception_status_line, purchase_stock_reception_status, purchase_reception_notify4
Création des réceptionspurchase_manual_delivery, purchase_delivery_split_date, purchase_receipt_expectation, purchase_all_shipments, purchase_order_supplier_return5
Import et transportpurchase_container, purchase_order_etd_eta, purchase_fop_shipping, vendor_transport_lead_time, supplier_calendar5
Recette de travauxpurchase_work_acceptance, purchase_work_acceptance_evaluation, purchase_work_acceptance_invoice_plan, purchase_work_acceptance_late_fines4

Les menus ajoutés : Achats ▸ Commandes ▸ Work Acceptance, Achats ▸ Commandes ▸ Containers, Achats ▸ Configuration ▸ Container Types, ainsi que la configuration et le rapport d'évaluation des recettes.

Savoir ce qui est arrivé, ligne par ligne

ModuleNiveauApport
purchase_reception_statusCommandeRien reçu / partiellement / entièrement, avec forçage manuel
purchase_reception_status_lineLigneLe même statut, ligne par ligne
purchase_stock_reception_status—Colle avec le champ natif d'Odoo
purchase_reception_notify—Message aux suiveurs dès la réception effective

Le statut par ligne est ce qui transforme une relance en information utile : au lieu d'écrire « votre commande est partiellement livrée », on écrit « il manque les deux références suivantes » — et le fournisseur répond.

La notification automatique traite un autre irritant : le demandeur d'un achat n'a aucune raison de surveiller l'entrepôt. Un message dans le fil de discussion de la commande au moment de la réception effective suffit à fermer la boucle.

Le module de colle mérite une mention : Odoo possède son propre champ de statut de réception, et les deux logiques devaient être réconciliées. C'est un détail d'implémentation, mais il explique pourquoi trois modules sont nécessaires là où on en attendait un.

Décider quand et comment la réception est créée

La réception manuelle

purchase_manual_delivery supprime la création automatique des bons de réception à la confirmation et fournit un assistant pour les créer ligne par ligne, au fur et à mesure que le fournisseur annonce ses livraisons.

C'est le bon mode pour les achats à long délai, où une réception créée à la confirmation reste ouverte pendant des mois et pollue les écrans de l'entrepôt. C'est aussi le symétrique exact de ce que sale_manual_delivery fait côté vente.

Le découpage par date

purchase_delivery_split_date génère un bon de réception distinct par date planifiée présente sur les lignes. Un fournisseur qui annonce trois dates produit trois réceptions attendues, chacune à sa date — ce qui rend le planning de l'entrepôt réaliste.

Deux outils de visibilité

  • purchase_all_shipments fait afficher au bouton de réception tous les transferts chaînés — règles de poussée, réceptions groupées — et pas seulement le transfert généré directement par la commande. Sur un flux en plusieurs étapes, c'est ce qui évite de croire la marchandise perdue.
  • purchase_receipt_expectation est un module technique extensible : il ne change rien par lui-même, il fournit le mécanisme permettant à d'autres modules de piloter la façon dont les réceptions sont créées à l'approbation.

Le retour fournisseur

purchase_order_supplier_return permet de retourner des produits en créant une ligne de quantité négative sur la commande d'achat, et fait en sorte que la quantité reçue de cette ligne soit correctement mise à jour une fois le transfert effectué.

C'est la mécanique symétrique de la demande de retour client — avec une différence : côté achat, le retour vit dans la commande elle-même.

Importer : conteneurs, délais et franco

Cinq modules s'adressent aux entreprises qui achètent loin.

ModuleCe qu'il apporte
purchase_containerUn suivi des conteneurs : référence, transitaire, dates estimées et réelles de départ et d'arrivée, type de conteneur — rattaché aux commandes et aux réceptions
purchase_order_etd_etaDes champs ETD / ETA (départ et arrivée estimés) et une note de calendrier d'expédition
purchase_fop_shippingUn seuil de franco de port par fournisseur et par société, bloquant la confirmation en dessous
vendor_transport_lead_timeLe délai fournisseur séparé du délai de transport sur la fiche fournisseur du produit
supplier_calendarUn calendrier d'ouverture du fournisseur : les délais se comptent en jours ouvrés, pas en jours calendaires

Les deux derniers corrigent la même illusion : un délai de 30 jours annoncé par un fournisseur asiatique n'est ni 30 jours calendaires, ni un délai unique — c'est un délai de production plus un délai de transport, et le fournisseur ne travaille pas pendant ses congés.

Séparer les deux composantes permet de recalculer correctement une date d'arrivée quand le mode de transport change — passer de la mer à l'air modifie le délai de transport, pas celui de production.

Le franco de port, lui, est un blocage assumé : commander 400 € chez un fournisseur dont le franco est à 500 € coûte des frais de port qui annulent la marge. Le module le refuse par défaut, et c'est une bonne valeur par défaut.

La recette de travaux : valider avant de payer

C'est le dispositif le plus structurant de ce lot, et il s'adresse aux achats de prestations et de travaux.

  1. purchase_work_acceptance crée un document de recette intercalé entre la commande et sa réception en stock ou sa facturation : seuls les produits et services effectivement reçus et acceptés passent à l'étape suivante.
  2. purchase_work_acceptance_evaluation ajoute une évaluation qualitative sur des critères configurables — délai, qualité du produit, qualité de service — avec son rapport dédié.
  3. purchase_work_acceptance_invoice_plan relie la recette à l'échéancier de facturation : une échéance se déclenche quand la recette correspondante est acceptée.
  4. purchase_work_acceptance_late_fines calcule la pénalité de retard à facturer au fournisseur et génère la pièce comptable.

L'enchaînement complet — recette, évaluation, échéance de facturation, pénalité — est rare dans l'écosystème Odoo. Il correspond à la commande publique et aux marchés de travaux, où la réception contradictoire conditionne le paiement.

L'évaluation mérite une remarque : elle produit la notation fournisseur que beaucoup d'entreprises tiennent dans un tableur. Adossée aux recettes réelles plutôt qu'à une impression annuelle, elle devient opposable lors d'une renégociation.

La pénalité automatique est à manier avec soin : générer une pièce comptable de pénalité suppose que le contrat la prévoie et que la relation commerciale la supporte. Le module calcule ; la décision reste humaine. Voir aussi l'approbation des achats pour le contrôle en amont.

Limites connues

  • Trois modules pour un statut de réception : le module de colle avec le champ natif est indispensable, son oubli produit deux statuts divergents.
  • La réception manuelle déplace la charge : quelqu'un doit créer les réceptions, sinon rien n'arrive dans l'entrepôt.
  • Le franco de port bloque par défaut : prévoir qui peut passer outre, sinon les achats urgents sont paralysés.
  • Le calendrier fournisseur demande des données : les horaires de chaque fournisseur, ce qui n'a de sens que pour les principaux.
  • La recette de travaux ajoute une étape : elle se justifie pour les prestations et les travaux, rarement pour l'achat de fournitures.
  • Les pénalités de retard génèrent une pièce comptable : à n'activer que si le contrat les prévoit.

Identité technique

Les dix-huit modules viennent du dépôt OCA purchase-workflow, branche 18.0, en licence AGPL-3 sauf supplier_calendar (LGPL-3). La plupart dépendent de purchase_stock ; supplier_calendar s'appuie en plus sur le module de ressources d'Odoo pour les calendriers de travail.

Les familles voisines : l'approbation des achats, la facturation fournisseur et les demandes d'achat.

Questions fréquentes

Peut-on savoir quelle ligne d'une commande reste à recevoir ?

Oui : purchase_reception_status_line calcule un statut de réception par ligne — rien reçu, partiellement, entièrement. Au lieu de relancer un fournisseur sur « votre commande est partiellement livrée », on lui indique les références manquantes, ce à quoi il peut répondre.

Comment éviter des réceptions ouvertes pendant des mois ?

purchase_manual_delivery supprime la création automatique des bons de réception à la confirmation et permet de les créer ligne par ligne, au fil des livraisons annoncées. C'est le mode adapté aux achats à long délai, où une réception créée trop tôt pollue les écrans de l'entrepôt.

Qu'est-ce qu'une recette de travaux dans Odoo ?

Un document intercalé entre la commande d'achat et sa réception ou sa facturation, fourni par purchase_work_acceptance : seuls les produits et services effectivement reçus et acceptés passent à l'étape suivante. Trois extensions y ajoutent l'évaluation du fournisseur, le déclenchement d'échéances de facturation et le calcul de pénalités de retard.

Peut-on noter ses fournisseurs sur des critères objectifs ?

purchase_work_acceptance_evaluation permet d'évaluer chaque recette sur des critères configurables — délai, qualité du produit, qualité de service — avec un rapport dédié. Adossée aux réceptions réelles plutôt qu'à une impression annuelle, cette notation devient opposable en renégociation.

Comment gérer un délai fournisseur à l'import ?

En le décomposant : vendor_transport_lead_time sépare le délai fournisseur du délai de transport sur la fiche fournisseur du produit, et supplier_calendar fait compter les délais en jours ouvrés du fournisseur plutôt qu'en jours calendaires. Changer de mode de transport ne modifie alors que la composante concernée.

Se faire accompagner

La réception est l'endroit où un achat devient une dette : tant que la marchandise n'est pas reçue et acceptée, la facture ne devrait pas être payée. Beaucoup de PME paient sur la foi d'un bon de livraison signé par quelqu'un qui n'a rien contrôlé.

Nous construisons donc le circuit dans l'ordre inverse du paiement : qui accepte, sur quels critères, et ce qui se passe en cas de retard. La recette de travaux ne se justifie pas partout, mais le statut de réception par ligne, oui. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Le statut de réception descend à la ligne, la réception se crée quand le fournisseur livre vraiment, les conteneurs et les délais d'import se suivent, et les prestations passent par une recette qui conditionne le paiement — avec évaluation du fournisseur et pénalités calculées. Parlons de vos réceptions.

Documentation OCAAchatsLogistique

Partager

Fiches connexes

Équipe au travail sur des ordinateurs portables autour d'une table
Le module OCA `account_invoice_en16931` (dépôt `fr-einvoicing`, version 18.0.1.0.0, licence AGPL-3) est le socle qui fabrique le fichier de facture électronique conforme à la norme européenne **EN 16931** : Factur-X (PDF/A-3 avec XML CII embarqué), XML UBL, XML CII ou PDF accompagné d'un UBL — et il ajoute des **contrôles bloquants à la validation** d'une facture client. Les quatre modules qui s'y greffent pour la France, et ce que le socle ne fait pas.
Lire la suite
Documentation OCA, Facturation électronique
Réunion d'approbation autour d'un document de travail
Relevé sur une instance Odoo 18 Community, le module OCA `base_tier_validation` (dépôt `server-ux`, version 18.0.3.5.1, licence AGPL-3) ajoute 1 modèle, 101 champs et 3 menus, mais ne s'active sur aucun document métier par lui-même : il lui faut un module d'implémentation. C'est le point qui surprend le plus — voici ce qu'il fait réellement, et comment le mettre en service.
Lire la suite
Documentation OCA, Odoo