Documentation9 min de lecture

base_tier_validation : des circuits de validation sur n'importe quel document

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.

Réunion d'approbation autour d'un document de travail

« Qui approuve un achat au-delà de 5 000 € ? » est une question d'organisation, pas de logiciel — jusqu'au jour où il faut l'inscrire dans l'outil. base_tier_validation est le moteur générique qui le permet dans Odoo, sur n'importe quel modèle.

Il faut le dire tout de suite, parce que c'est la source de déception la plus fréquente : ce module ne valide rien tout seul. C'est un socle. Il faut y adjoindre un module d'implémentation, par exemple purchase_tier_validation pour les bons de commande, qui greffe le mécanisme sur le modèle métier.

L'essentiel

  • Socle générique : il fournit le moteur, les écrans de configuration et les éléments d'interface. Pas de validation sur un document sans module d'implémentation.
  • Trois façons de désigner un réviseur : un utilisateur précis, n'importe quel membre d'un groupe, ou la valeur d'un champ du document.
  • Validation séquentielle possible : le palier 10 doit être approuvé avant que le palier 20 ne devienne actionnable.
  • Le document est bloqué en écriture pendant la validation — sauf champs explicitement exemptés.
  • Compteur de revues en attente dans la barre d'icônes d'Odoo, et rappel automatique programmable en jours.
  • Licence AGPL-3, dépôt OCA server-ux, branche 18.0, dépend de mail.

Ce que le module ajoute à l'instance

ÉlémentNombre
Modèles créés1
Modèles étendus6
Champs ajoutés101
Menus3
Vues12
Actions de fenêtre2
Groupes de droits0

Le seul modèle créé est tier.validation.exception. Les six modèles étendus sont comment.wizard, res.config.settings, res.users, tier.definition, tier.review et le modèle abstrait tier.validation — c'est ce dernier qu'un module d'implémentation vient hériter sur son propre modèle métier.

Le mécanisme repose sur trois objets qu'il faut distinguer :

ObjetCe qu'il est
tier.definitionLa règle : qui approuve, à quelles conditions, dans quel ordre
tier.reviewLa revue : une instance de la règle, créée sur un document donné
tier.validation.exceptionL'exception : les champs qui restent modifiables malgré le blocage

Chaque revue passe par les statuts Waiting → Pending → Approved / Rejected / Cancel. Un document ne franchit son état cible — brouillon vers confirmé, par exemple — que lorsque toutes les revues requises sont approuvées.

Où le trouver dans Odoo

MenuCe qu'on y fait
Paramètres ▸ Technique ▸ Validations par niveauLe menu racine du module
… ▸ Définition de niveauCréer et gérer les règles de validation
… ▸ Tier Validation ExceptionDéclarer les champs exemptés du blocage en écriture

Sur les documents qui utilisent le mécanisme, le module injecte trois éléments d'interface : un bouton Request Validation dans l'en-tête, un bandeau jaune avec les boutons Validate et Reject pour le réviseur concerné, et un tableau de revues qui montre l'état de chaque palier.

Un réglage global facultatif existe dans Paramètres généraux, bloc « Tier Validation » : l'option Tier Formula, qui installe un module complémentaire permettant de déterminer les réviseurs par formule Python.

Formulaire d'une définition de niveau : le modèle concerné, le mode de désignation du réviseur, et l'onglet Apply On qui restreint la règle par domaine
Formulaire d'une définition de niveau : le modèle concerné, le mode de désignation du réviseur, et l'onglet Apply On qui restreint la règle par domaine

Cas d'usage

Une règle simple, un réviseur unique

  1. Paramètres ▸ Technique ▸ Validations par niveau ▸ Définition de niveau, puis Nouveau.
  2. Description : nommer la règle explicitement, par exemple « Validation manager pour bons de commande > 5 000 € ».
  3. Referenced Model : choisir le modèle du document — il doit déjà hériter tier.validation.
  4. Laisser Validated by sur « Specific user » et choisir le Reviewer.
  5. Onglet Apply On : définir le domaine qui restreint les documents concernés, par exemple un filtre sur le montant total.
  6. Enregistrer : la règle s'applique immédiatement à tout nouveau document correspondant au domaine.

Le domaine de l'onglet Apply On est le cœur du paramétrage. Sans lui, la règle s'applique à tous les documents du modèle — y compris les commandes de 40 €, ce qui transforme une mesure de contrôle en irritant quotidien.

Validation par groupe, en séquence

Le cas d'une double approbation : un responsable, puis la direction.

  1. Créer une première définition avec Validated by = « Any user in a specific group », choisir le Reviewer group, cocher Approve by sequence, Sequence = 10.
  2. Créer une seconde définition sur le même modèle, autre groupe ou réviseur, Approve by sequence cochée, Sequence = 20.
  3. Sur le document, cliquer sur Request Validation pour générer les revues.
  4. Le réviseur du palier 10 approuve ; la revue du palier 20 passe alors de Waiting à Pending et devient actionnable.

Exempter des champs du blocage en écriture

Indispensable en pratique : pendant une validation, le document est verrouillé, et il reste souvent un champ qu'il faut pouvoir corriger — une référence interne, une date de livraison souhaitée.

  1. Paramètres ▸ Technique ▸ Validations par niveau ▸ Tier Validation Exception, puis Nouveau.
  2. Choisir le Model, puis ajouter les champs à exempter dans Fields.
  3. Dans Groups, restreindre éventuellement l'exception à certains groupes (vide = tous).
  4. Cocher Write under Validation et/ou Write after Validation — au moins une des deux est obligatoire.

Formulaire d'une exception de validation : le modèle, la liste des champs qui restent modifiables, les groupes concernés et les deux cases Write under / after Validation
Formulaire d'une exception de validation : le modèle, la liste des champs qui restent modifiables, les groupes concernés et les deux cases Write under / after Validation

Relancer automatiquement les revues en attente

  1. Ouvrir la définition de niveau concernée.
  2. Onglet More Options, champ Send reminder message on pending reviews : saisir un nombre de jours, par exemple 3.
  3. Enregistrer : la tâche planifiée « Send Tier Review Reminder », exécutée quotidiennement, prend le relais.

C'est le réglage qui fait la différence entre un circuit de validation et un circuit de blocage. Une revue en attente que personne ne relance arrête le document — et l'utilisateur en conclut que l'outil ne marche pas.

Configuration et droits

  1. Installer base_tier_validation, puis au moins un module d'implémentation pour le modèle à contrôler (par exemple purchase_tier_validation).
  2. Créer les règles dans Définition de niveau, avec un domaine restrictif.
  3. Déclarer les exceptions d'écriture nécessaires.
  4. Activer les rappels sur les définitions où l'attente coûte quelque chose.

Les droits sont volontairement serrés, et c'est cohérent avec l'objet du module :

ActionGroupe requis
Créer, modifier, supprimer une définition de niveaubase.group_erp_manager
Créer, modifier, supprimer une exceptionbase.group_system
Lire ces deux modèles, gérer les revuesTout utilisateur interne (base.group_user)

En multi-sociétés, les définitions et les revues sont filtrées par société (company_id in company_ids + [False]). Une règle sans société s'applique donc à toutes : c'est commode, et c'est un piège si les entités n'ont pas les mêmes seuils d'approbation.

Limites connues

Le dépôt répertorie un défaut qui mérite d'être connu avant de choisir la validation séquentielle.

  • Compteur du systray et approve_sequence : le champ can_review de tier.review, qui filtre les notifications de la barre d'icônes, est mis à jour en base par la méthode review_user_count. Sur une base avec beaucoup d'utilisateurs et des mises à jour fréquentes, cela peut rendre le compteur incohérent.
  • Migration : à partir de la 15.0, le paramètre _tier_validation_manual_config passe à False ; en 14.0 sa valeur par défaut était True. Le changement s'applique après migration, et il faut modifier la valeur sur le modèle concerné pour obtenir le nouveau comportement.

Deux limites d'usage, observées et non répertoriées :

  • Un domaine trop large transforme le contrôle en frein. Commencez par un seuil élevé, puis descendez-le si nécessaire — l'inverse se vit mal.
  • Un palier sans suppléant bloque tout pendant les congés du réviseur. Le mode « Any user in a specific group » est presque toujours préférable à « Specific user ».

Identité technique

Nom techniquebase_tier_validation
Dépôt OCAserver-ux, branche 18.0
Version du module18.0.3.5.1
LicenceAGPL-3
Dépendancesmail
Modules d'implémentationpurchase_tier_validation, et d'autres selon le modèle à contrôler
Version Odoo18.0 Community

Un conseil de mise en service, tiré de l'expérience : un seul niveau d'approbation au démarrage. Trois niveaux conçus le premier jour sont contournés dès la première urgence. Voir les sept erreurs d'un projet ERP.

Questions fréquentes

Pourquoi rien ne se passe après l'installation du module ?

C'est le comportement normal, et la déception la plus fréquente : base_tier_validation est un socle qui ne s'active sur aucun document métier par lui-même. Il faut installer un module d'implémentation — purchase_tier_validation pour les bons de commande, par exemple — qui hérite le mixin tier.validation sur le modèle concerné.

Peut-on exiger deux approbations dans un ordre précis ?

Oui : créez deux définitions de niveau sur le même modèle, cochez Approve by sequence sur les deux et donnez-leur des séquences différentes (10, puis 20). La revue de séquence 20 reste en Waiting jusqu'à l'approbation de celle de séquence 10.

Le document est-il modifiable pendant la validation ?

Non, il est bloqué en écriture — c'est le principe. Les champs qui doivent rester modifiables se déclarent dans une Tier Validation Exception, avec le choix d'appliquer l'exception pendant la validation, après, ou les deux.

Comment éviter qu'une absence bloque tout le circuit ?

En choisissant Validated by = « Any user in a specific group » plutôt qu'un utilisateur précis : n'importe quel membre du groupe peut alors approuver. C'est la configuration que nous recommandons par défaut, pour cette seule raison.

Les réviseurs sont-ils notifiés ?

Oui, par e-mail et dans le chatter à chaque étape — création, mise en attente, acceptation, rejet, redémarrage — et un compteur de revues en attente apparaît dans la barre d'icônes d'Odoo. Un rappel automatique se règle en jours sur chaque définition de niveau.

Pour aller plus loin

En résumé

base_tier_validation est un moteur d'approbation générique, pas une fonctionnalité prête à l'emploi : il lui faut un module d'implémentation. Une fois en place, trois réglages décident de son succès — un domaine restrictif, un groupe plutôt qu'un utilisateur, et un rappel automatique. Parlons de vos circuits d'approbation.

Documentation OCAOdooGouvernance

Partager

Fiches connexes

Relevés bancaires et pièces comptables sur un bureau
Relevé sur une instance Odoo 18 Community, le module OCA `account_reconcile_oca` (dépôt `account-reconcile`, version 18.0.1.1.14, licence AGPL-3) ajoute 2 modèles, 87 champs et 17 vues : il remplace le lettrage limité de la Community par deux écrans dédiés, bancaire et par compte. Ce qu'il ajoute à l'instance, où le trouver, ses quatre cas d'usage et ses limites connues.
Lire la suite
Documentation OCA, Comptabilité
Poste de travail affichant un journal d'activité détaillé
Relevé sur une instance Odoo 18 Community, le module OCA `auditlog` (dépôt `server-tools`, version 18.0.2.0.9, licence AGPL-3) crée 7 modèles, 105 champs et 6 menus : il journalise créations, lectures, modifications, suppressions et exports sur n'importe quel modèle Odoo, avec les valeurs avant et après. Comment le paramétrer sans faire exploser la base, et la case à ne pas cocher à la légère.
Lire la suite
Documentation OCA, Odoo