Les états financiers standard d'Odoo répondent aux obligations ; ils ne répondent pas à « montre-moi ma marge brute par trimestre comparée à l'an dernier ». mis_builder est le module qui permet de construire ces états-là, soi-même, sans développement.
Le principe est celui d'un tableur piloté par la comptabilité : des indicateurs en lignes, des périodes en colonnes, et des expressions qui interrogent les comptes. C'est le module cœur de son dépôt, marqué comme application, et les autres modules du lot — budget, démonstration — l'étendent.
L'essentiel
- Deux niveaux d'objets : le modèle de rapport (
mis.report, indépendant du temps) et l'instance (mis.report.instance, qui porte les périodes et les filtres). - Les KPI sont des expressions :
balp[70%]donne la variation de balance des comptes commençant par 70. - Sorties : aperçu interactif, PDF, Excel, et ajout à un tableau de bord Odoo.
- Annotations de cellules depuis la version 18.0.1.5.0, reprises en notes de bas de page dans les exports.
- Limite majeure : les fonctions analytiques ont été retirées en version 16 — incompatibilité avec le mécanisme
analytic_distributiond'Odoo. - Quatre dépendances OCA et Odoo, plus une bibliothèque Python externe.
Ce que le module ajoute à l'instance
| Élément | Nombre |
|---|---|
| Modèles créés | 11 |
| Modèles étendus | 5 |
| Champs ajoutés | 253 |
| Menus | 6 |
| Vues | 12 |
| Actions de fenêtre | 5 |
| Groupes de droits | 2 |
253 champs : c'est le module le plus lourd de cette première série, et cela traduit sa nature — un constructeur, pas une fonctionnalité. Les objets qui comptent au quotidien sont au nombre de six.
| Objet | Ce qu'il est |
|---|---|
mis.report | Le modèle de rapport : les KPI, les requêtes, les sous-KPI. Indépendant du temps |
mis.report.kpi | Un indicateur, avec son expression et son type de valeur |
mis.report.instance | Une instance : le modèle appliqué à des périodes, des filtres, une mise en page |
mis.report.style | Un style : couleurs, polices, arrondis, préfixes, facteurs d'échelle |
mis.report.query | Une requête vers un modèle Odoo arbitraire, au-delà des écritures |
mis.report.instance.annotation | Une note attachée à une cellule du rapport |
La distinction entre modèle et instance est celle qu'il faut saisir avant tout le reste : on écrit ses indicateurs une fois dans un modèle, puis on crée autant d'instances que de façons de les regarder — mensuel, trimestriel, comparé à N-1, par société.
Deux autres modèles méritent d'être signalés : mis.report.subreport, qui permet de composer un rapport à partir d'autres rapports, et mis.report.query, qui ouvre les rapports à des données hors comptabilité.
Où le trouver dans Odoo
| Menu | Ce qu'on y fait |
|---|---|
| Facturation ▸ Analyse ▸ MIS Reporting ▸ MIS Reports | Les instances : créer, prévisualiser, imprimer, exporter |
| … ▸ Derniers rapports générés | Les rapports produits récemment |
| Facturation ▸ Configuration ▸ MIS Reporting ▸ Modèles MIS Report | Les modèles de rapport et leurs KPI |
| … ▸ Styles MIS Report | Les styles de mise en forme |
La séparation des menus suit la séparation des objets : la configuration porte les modèles et les styles, l'analyse porte les instances et leurs résultats. Un utilisateur qui consulte n'a besoin que du second.

Cas d'usage
Créer un modèle de rapport et ses indicateurs
- Comptabilité ▸ Configuration ▸ MIS Reporting ▸ MIS Report Templates, puis Nouveau.
- Renseigner Name et Description, choisir éventuellement un Style, et vérifier le Move Lines Source (par défaut
account.move.line). - Onglet KPI's : ajouter une ligne, renseigner Description, Name et Value type.
- Dans la fiche du KPI, saisir l'Expression — par exemple
balp[70%]pour la variation de balance des comptes commençant par 70. - Régler Comparison Method et Accumulation Method selon la nature de l'indicateur.
- Enregistrer le modèle.
L'étape 5 est celle qui distingue un rapport juste d'un rapport faux. Un compte de résultat s'accumule sur la période ; un poste de bilan ne s'accumule pas, il se lit à une date. Se tromper d'Accumulation Method produit des chiffres plausibles et inexacts — le pire des deux mondes.
Créer une instance et la prévisualiser
- Comptabilité ▸ Rapports ▸ MIS Reporting ▸ MIS Reports, puis Nouveau.
- Renseigner Name et sélectionner le Template créé précédemment.
- Pour une période unique : laisser Comparison Mode décoché et renseigner From et To. Pour plusieurs colonnes : cocher Comparison Mode et définir les colonnes dans l'onglet Columns.
- Onglet Columns : ajouter une colonne avec Label, Source = « Actuals », Mode = « Relative to report base date », Period type, Offset et Duration.
- Onglet Filters : ajuster Target Moves et les sociétés. Onglet Layout : la mise en page.
- Preview pour l'affichage à l'écran, ou Print / Export pour le PDF et l'Excel.

Le mode Relative to report base date avec un Offset est le réglage qui rend un rapport réutilisable : la colonne « mois précédent » reste le mois précédent, quelle que soit la date à laquelle on ouvre le rapport. Des dates fixes obligent à recréer l'instance chaque mois.

Ajouter un rapport à un tableau de bord
- Depuis la fiche de l'instance — non temporaire — cliquer sur Add to dashboard.
- Vérifier ou modifier le Name proposé, choisir le Dashboard cible.
- Cliquer sur Add to dashboard.
C'est ce qui transforme un rapport qu'il faut aller chercher en un chiffre qu'on voit le lundi matin — et la différence entre un indicateur lu et un indicateur abandonné tient souvent à cela.
Annoter une cellule
Disponible depuis la version 18.0.1.5.0, et beaucoup plus utile qu'il n'y paraît : la note explique l'écart, et elle survit à l'export.
- Depuis l'aperçu du rapport, ouvrir le menu déroulant de la cellule concernée.
- Cliquer sur Annotate, saisir le texte, puis Confirm.
- La note apparaît en renvoi numéroté sur la cellule, et en note de bas de page dans les exports PDF et Excel.
Attention : les deux groupes de droits dédiés aux annotations ne sont attribués par défaut qu'aux comptes techniques. Sans attribution explicite, vos utilisateurs ne verront ni ne pourront créer d'annotations.
Configuration et droits
Les dépendances sont plus nombreuses que pour la plupart des modules, et deux d'entre elles viennent d'autres dépôts OCA.
| Dépendance | Origine | Pourquoi |
|---|---|---|
account | Odoo standard | La source des écritures |
board | Odoo standard | Les tableaux de bord |
report_xlsx | OCA reporting-engine | L'export Excel |
date_range | OCA server-ux | Les plages de dates réutilisables |
openupgradelib | Bibliothèque Python | Doit être disponible sur le serveur |
La dernière ligne est un point d'exploitation à vérifier avant l'installation : c'est une dépendance Python externe, pas un module Odoo. Sur un hébergement que vous ne maîtrisez pas, elle peut manquer.
Les droits sont restrictifs, et cohérents avec un outil qui donne accès aux chiffres de l'entreprise :
| Action | Groupe requis |
|---|---|
| Lire les modèles, KPI, instances, styles | Tout utilisateur interne (base.group_user) |
| Créer, modifier, supprimer | Comptabilité : Conseiller (account.group_account_manager) |
| Voir le menu MIS Reporting côté Rapports | account.group_account_manager |
| Voir les annotations | « MIS Report: view annotations » |
| Créer des annotations | « MIS Report: add annotations » |
Et une évidence qui fait perdre du temps : il faut un modèle de rapport avant de pouvoir créer une instance. Le menu des instances est accessible dès l'installation, et il ne sert à rien tant que la configuration est vide.
Limites connues
Le dépôt renvoie sa feuille de route et ses défauts ouverts à GitHub plutôt que de les lister dans le module. Trois points ressortent de son historique et méritent d'être connus avant de bâtir ses rapports dessus.
- Les fonctions analytiques ont été retirées en version 16. Le motif est explicite : le mécanisme
analytic_distributiond'Odoo n'était pas compatible. Un support pourrait revenir dans un module séparé, selon les cas d'usage. En attendant, un filtre analytique passe par une clé de contextemis_analytic_domain, combinée aux filtres du rapport — ce n'est pas une interface utilisateur. - Les taux de conversion de devises ont fait l'objet d'un correctif en version 18.0.1.7.2. Si vous bâtissez des rapports multidevises, vérifiez que votre instance est au moins à cette version.
- Les sociétés de type « branche » ne sont prises en charge que depuis la version 17.0.1.0.2. Un point à vérifier sur une structure multi-sociétés complexe.
La première limite est la plus structurante : si votre besoin est un compte de résultat par axe analytique — par chantier, par mission, par site — mis_builder n'est pas l'outil, du moins pas par son interface. C'est une information qui vaut d'être donnée avant trois jours de paramétrage, pas après.
Pour ce besoin-là, les vues pivot et les rapports analytiques d'Odoo répondent souvent mieux. Voir les trois indicateurs qui comptent, par métier.
Identité technique
| Nom technique | mis_builder |
| Dépôt OCA | mis-builder, branche 18.0 |
| Version du module | 18.0.1.10.0 |
| Licence | AGPL-3 |
| Dépendances Odoo et OCA | account, board, date_range, report_xlsx |
| Dépendance Python | openupgradelib |
| Version Odoo | 18.0 Community |
Un conseil de mise en service : commencez par trois indicateurs et une seule instance mensuelle. Un modèle de rapport à quarante KPI construit le premier jour n'est jamais relu, et ses erreurs d'Accumulation Method passent inaperçues. Voir les sept erreurs d'un projet ERP.
Questions fréquentes
mis_builder remplace-t-il les états financiers standard d'Odoo ?
Non, il les complète. Les états standard répondent aux obligations — balance, grand livre, journaux. mis_builder sert à construire les états de pilotage que l'entreprise se définit elle-même : marge par trimestre, comparaison avec l'exercice précédent, soldes intermédiaires de gestion présentés à sa façon.
Que signifie une expression comme balp[70%] ?
C'est la syntaxe d'interrogation des comptes propre au module : balp désigne la variation de balance sur la période, et [70%] sélectionne les comptes dont le numéro commence par 70. Chaque KPI est défini par une expression de ce type, éventuellement combinée à un domaine d'écritures.
Peut-on faire un compte de résultat par axe analytique ?
Pas par l'interface : les fonctions analytiques ont été retirées en version 16, le mécanisme analytic_distribution d'Odoo n'étant pas compatible. Un filtre reste possible par une clé de contexte technique, mais ce n'est pas une fonctionnalité utilisateur. Pour ce besoin, les vues pivot d'Odoo répondent souvent mieux.
Peut-on exporter les rapports en Excel ?
Oui, à condition que le module OCA report_xlsx (dépôt reporting-engine) soit installé — c'est une dépendance déclarée. Les annotations de cellules sont reprises en notes de bas de page dans les exports PDF comme Excel.
Pourquoi mes utilisateurs ne voient-ils pas les annotations ?
Parce que les deux groupes dédiés — « MIS Report: view annotations » et « MIS Report: add annotations » — ne sont attribués par défaut qu'aux comptes techniques. Il faut les attribuer explicitement aux personnes concernées, ce qui est facile à oublier après avoir créé la première annotation en administrateur.
Pour aller plus loin
- account_reconcile_oca : le lettrage bancaire d'Odoo Community
- Les trois indicateurs qui comptent, par métier
- Ce qui s'automatise vraiment en comptabilité avec Odoo
En résumé
mis_builder est un constructeur d'états financiers : KPI en lignes, périodes en colonnes, export PDF et Excel, annotations de cellules. Deux choses à savoir avant de s'y mettre : l'Accumulation Method décide de la justesse de vos chiffres, et les fonctions analytiques ont été retirées en version 16. Parlons de vos états de pilotage.