Un contrat récurrent ne se résume pas à une facture qui revient chaque mois. Une ligne s'arrête, une autre se suspend, une troisième se renouvelle à un tarif révisé, et le client résilie au 15 alors qu'on a déjà facturé le trimestre.
Treize modules communautaires traitent ce cycle de vie — et la question que tout dirigeant pose : combien va-t-on facturer les six prochains mois ?
Résumé
Un module central gère le cycle de vie par ligne : arrêt, suspension, successeur planifié, annulation, réactivation, renouvellement automatique. Trois modules s'appuient dessus : la révision de prix en masse par assistant — nouvelles lignes au tarif ajusté, anciennes clôturées —, la résiliation avec motif, commentaire et date, et l'arrêt rétroactif générant un avoir pour la période déjà facturée en trop.
Deux modules traitent le prévisionnel : la génération et le suivi des prévisions de facturation par ligne de contrat, visibles en vue dédiée, et une colle recalculant ces prévisions quand une formule de quantité variable change.
Quatre modules traitent les quantités variables : une formule de quantité proratisée au nombre de jours réellement couverts, trois formules calculant la quantité depuis les feuilles de temps, des valeurs par défaut de quantité variable sur un produit de contrat, et l'affichage du montant total sur la durée du contrat sur la ligne de commande.
Trois modules enfin complètent : des dates de service sur les lignes, la correction manuelle des dates de facturation, et une application d'abonnements indépendante du module de contrats.
L'essentiel
- Un cycle de vie par ligne : arrêt, suspension, successeur, réactivation.
- Un prévisionnel de facturation par ligne de contrat.
- Une quantité proratisée au nombre de jours réellement couverts.
- Des quantités issues des feuilles de temps.
- Une révision de prix en masse par assistant.
- La résiliation avec motif, commentaire et date, bloquant les modifications.
- L'arrêt rétroactif avec avoir automatique sur le trop-facturé.
- Une application d'abonnements distincte du module de contrats.
Ce que ces modules ajoutent à l'instance
| Module | Version | Ce qu'il apporte |
|---|---|---|
contract_line_successor | 18.0.1.0.2 | Le cycle de vie complet d'une ligne de contrat — socle de six autres modules |
contract_price_revision | 18.0.1.0.0 | Révision de prix en masse : pourcentage ou prix fixe, par assistant |
contract_termination | 18.0.1.0.0 | Motif, commentaire et date de résiliation ; contrat verrouillé ensuite |
contract_refund_on_stop | 18.0.1.0.1 | Arrêt rétroactif avec avoir sur la période facturée en trop |
contract_forecast | 18.0.1.0.1 | Prévisions de facturation par ligne (Facturation ▸ Analyse ▸ Gestion ▸ Prévisionnel de Contrat) |
contract_forecast_variable_quantity | 18.0.1.0.0 | Recalcul des prévisions quand une formule de quantité change |
contract_variable_qty_prorated | 18.0.1.0.0 | Formule Prorated Quantity : prorata au nombre de jours couverts |
contract_variable_qty_timesheet | 18.0.1.0.0 | Trois formules calculant la quantité depuis les feuilles de temps |
product_contract_variable_quantity | 18.0.1.0.1 | Valeurs par défaut de quantité variable sur un produit de contrat |
product_contract_recurrence_in_price | 18.0.1.0.0 | Le montant total sur la durée affiché sur la ligne de commande |
contract_service_dates | 18.0.1.0.0 | Des dates de service sur les lignes de contrat |
contract_update_last_date_invoiced | 18.0.1.0.1 | Correction manuelle des dates de dernière et prochaine facturation |
subscription_oca | 18.0.1.0.0 | Une application Abonnements complète et indépendante du module de contrats |
Les menus : Facturation ▸ Analyse ▸ Gestion ▸ Prévisionnel de Contrat, Facturation ▸ Configuration ▸ Contrats ▸ Raison de la clôture du contrat, et un menu racine Abonnements avec ses sous-menus.
Le cycle de vie, ligne par ligne
Le standard traite un contrat comme un bloc : il court ou il s'arrête. La réalité est plus fine — un client garde la maintenance et abandonne l'hébergement, suspend une prestation pendant l'été, et renouvelle le reste à un tarif revu.
contract_line_successor apporte cette granularité : chaque ligne s'arrête, se suspend temporairement, planifie son successeur, s'annule, se réactive ou se renouvelle automatiquement — indépendamment des autres lignes du même contrat.
C'est le socle du dépôt : six autres modules en dépendent, dont le prévisionnel, la révision de prix, la résiliation et l'avoir rétroactif.
Réviser, résilier, rembourser
contract_price_revisionrévise les prix en masse : depuis la liste des contrats, un assistant génère de nouvelles lignes au tarif ajusté — par pourcentage ou prix fixe — et clôture les anciennes. C'est l'indexation annuelle, faite en une opération traçable au lieu de cent modifications.contract_terminationajoute un motif de résiliation, un commentaire et une date, et bloque la modification du contrat résilié. Le référentiel des motifs vit sous Facturation ▸ Configuration ▸ Contrats ▸ Raison de la clôture du contrat.contract_refund_on_stoppermet d'arrêter une ligne déjà facturée au-delà de la date d'arrêt, en générant automatiquement l'avoir correspondant à la période facturée en trop.
Le dernier répond à la situation la plus banale d'un abonnement : le client résilie le 15 mars, le trimestre a été facturé le 1er janvier. Sans module, quelqu'un calcule l'avoir à la main — et se trompe une fois sur trois.
contract_update_last_date_invoiced complète cet arsenal de rattrapage : il permet de corriger manuellement la dernière date facturée et la prochaine date de facturation quand des factures ont été supprimées et que ces dates ne reflètent plus la réalité.
Le prévisionnel de facturation
contract_forecast calcule à l'avance les montants et dates de facturation futures de chaque ligne de contrat, consultables sous Facturation ▸ Analyse ▸ Gestion ▸ Prévisionnel de Contrat. Il s'appuie sur le module de files de travaux pour le calcul.
Le chiffre d'affaires récurrent attendu est l'indicateur que tout dirigeant d'une activité d'abonnement demande en premier, et que presque aucun ERP ne fournit sans export. Le calculer depuis les lignes de contrat, avec leurs dates réelles d'arrêt et de renouvellement, est la seule façon d'obtenir un chiffre juste.
contract_forecast_variable_quantity est une colle indispensable dès que les quantités sont variables : elle garantit le recalcul des prévisions quand le type ou la formule de quantité d'une ligne change. Sans elle, le prévisionnel se périme en silence.
Les quantités variables
Le mécanisme de quantité variable permet de calculer par formule la quantité à facturer d'une ligne de contrat. Quatre modules l'outillent :
contract_variable_qty_proratedfournit la formule Prorated Quantity : la quantité est proratisée au nombre de jours réellement couverts par la période. C'est le calcul attendu pour un abonnement démarré en cours de mois.contract_variable_qty_timesheetajoute trois formules calculant la quantité depuis les feuilles de temps saisies sur les lignes analytiques liées. C'est la facturation au temps passé sous contrat-cadre, sans ressaisie.product_contract_variable_quantityfait le pont avec les produits de contrat : un produit qui génère un contrat à la vente porte ses valeurs par défaut de quantité variable.product_contract_recurrence_in_priceaffiche sur la ligne de commande le montant total de toutes les facturations prévues sur la durée du contrat, et non le montant d'une seule période.
Le dernier règle un malentendu commercial fréquent : un client voit « 150 € » sur son devis d'abonnement mensuel de douze mois, et croit payer 150 € en tout.
contract_service_dates ajoute enfin des dates de service sur les lignes de contrat — la période réellement couverte, distincte de la période de facturation. Son README est minimal, limité à cette phrase.
Une seconde approche : l'application Abonnements
subscription_oca est à part : c'est une application complète et indépendante du module de contrats. Elle crée un modèle d'abonnement qui génère périodiquement des factures et/ou des commandes de vente, selon un gabarit d'abonnement paramétrable.
Elle apporte son propre menu racine Abonnements, avec les abonnements, les produits concernés et les modèles d'abonnement en configuration.
Deux approches coexistent donc dans l'écosystème communautaire : le contrat récurrent, très outillé et orienté comptabilité, et l'abonnement, plus proche du cycle commercial. Le choix se fait au départ, parce que les deux ne partagent aucune donnée.
En pratique : le module de contrats convient quand la facturation récurrente est le sujet — maintenance, hébergement, prestations sous contrat-cadre. L'application d'abonnements convient quand le cycle commercial l'est — souscription, renouvellement, changement de formule.
Limites connues
contract_line_successorest un socle : l'installer tard, sur des contrats existants, demande de vérifier l'état de chaque ligne.- Le prévisionnel dépend du module de files de travaux (
queue_job), donc d'une infrastructure de travailleurs à surveiller. - Un prévisionnel non recalculé est pire qu'aucun prévisionnel : installer la colle de recalcul dès que les quantités variables sont utilisées.
- La révision de prix en masse génère des lignes : la vérifier sur une base de recette avant de l'appliquer à un portefeuille entier.
- L'avoir sur arrêt rétroactif dépend de la formule proratisée : vérifier que le calcul correspond à vos conditions contractuelles.
- La correction manuelle des dates de facturation est un outil de rattrapage, pas un geste courant : elle contourne la mécanique du module.
subscription_ocaet le module de contrats ne partagent rien : choisir l'un ou l'autre, et non les deux.contract_service_datesa un README minimal : une phrase, sans détail des champs.
Identité technique
Les treize modules viennent du dépôt OCA contract, branche 18.0 — 31 modules au total —, tous en licence AGPL-3. Les dépendances notables : contract et contract_line_successor en interne, queue_job pour le prévisionnel, hr_timesheet pour les formules de temps, product_contract pour les produits de contrat, account et sale_management pour l'application d'abonnements.
Voir aussi facturer un contrat pour les mandats, les modes de paiement et la transmission.
Questions fréquentes
Peut-on arrêter une seule ligne d'un contrat Odoo ?
Oui, avec contract_line_successor : chaque ligne s'arrête, se suspend, planifie un successeur, s'annule ou se renouvelle indépendamment des autres. Le standard traite le contrat comme un bloc, alors qu'un client garde souvent la maintenance et abandonne l'hébergement.
Comment connaître le chiffre d'affaires récurrent attendu ?
contract_forecast calcule les montants et dates de facturation futures par ligne de contrat, visibles sous Facturation ▸ Analyse ▸ Gestion ▸ Prévisionnel de Contrat. Avec des quantités variables, installez aussi contract_forecast_variable_quantity, sans quoi le prévisionnel se périme en silence.
Que faire si un client résilie après avoir été facturé pour le trimestre ?
contract_refund_on_stop permet d'arrêter la ligne malgré la facturation déjà émise, et génère automatiquement l'avoir pour la période facturée en trop. Sans module, quelqu'un calcule cet avoir à la main — et se trompe une fois sur trois.
Comment appliquer une indexation annuelle à tous les contrats ?
contract_price_revision propose un assistant depuis la liste des contrats : il génère de nouvelles lignes au tarif ajusté — pourcentage ou prix fixe — et clôture les anciennes. Une opération traçable au lieu de cent modifications. À tester sur une base de recette avant de l'appliquer au portefeuille.
Faut-il utiliser le module Contrats ou l'application Abonnements ?
L'un ou l'autre : ils ne partagent aucune donnée. Le module de contrats convient quand la facturation récurrente est le sujet — maintenance, hébergement, prestations sous contrat-cadre. subscription_oca convient quand le cycle commercial l'est — souscription, renouvellement, changement de formule.
Se faire accompagner
La facturation récurrente est l'un des rares domaines où un choix d'architecture engage durablement : contrats ou abonnements, les deux ne se parlent pas, et migrer d'un modèle à l'autre revient à ressaisir le portefeuille.
Nous instruisons donc ce choix d'abord — nature des engagements, besoin de prévisionnel, facturation au temps ou au forfait — puis nous posons le socle de cycle de vie avant le premier contrat. Un prévisionnel juste vaut mieux qu'un prévisionnel. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
En résumé
Un contrat récurrent n'est pas une facture qui revient : une ligne s'arrête, une autre se suspend, le client résilie après qu'on a facturé le trimestre. Treize modules traitent ce cycle de vie, le prévisionnel de chiffre d'affaires et les quantités calculées au temps passé. Parlons de vos contrats.