Le délai de paiement des clients est un indicateur central pour piloter la trésorerie et évaluer le comportement de règlement. Pourtant, en Odoo v19 SaaS, ce délai n’est pas directement disponible sous une forme exploitable et fiable, notamment lorsqu’il y a des paiements partiels ou multiples.
Cet article explique comment calculer un délai réel de paiement, basé sur la date effective de règlement complet, en utilisant uniquement Odoo Studio, sans développement spécifique ni accès au code serveur.
Pourquoi le délai de paiement est trompeur en standard
En standard, Odoo :
sait si une facture est payée ou non,
affiche une date comptable sur la facture,
mais n’expose pas la date réelle du règlement complet comme champ exploitable.
Or, cette date est fondamentale. Une facture peut être :
réglée en plusieurs fois,
soldée par plusieurs écritures (banque, caisse, OD),
ou rapprochée à des dates différentes.
La seule définition fiable est donc :
Délai de paiement = nombre de jours entre la date de facture et la date de règlement complet
Cette date correspond à la dernière écriture de paiement rapprochée avec la facture.
Principe de la solution
D’un point de vue comptable :
une facture client génère une ligne sur un compte client (receivable),
les paiements viennent se rapprocher de cette ligne,
la facture est totalement payée lorsque ces rapprochements sont complets,
la date du règlement complet est la date la plus récente des écritures rapprochées, le statut de la facture passant à "payée".
C’est cette logique que nous allons exploiter via un champ calculé.
Étape 1 – Créer un champ calculé avec Odoo Studio
Accès
Comptabilité → Factures
Ouvrir Studio
Modèle : Facture (account.move)
Champ à créer
Type : Entier
Libellé : Délai de paiement (jours)
Nom technique : x_studio_delai_de_paiement
Champ calculé : oui
Champ stocké : oui (important pour les analyses ultérieures)
Dépendances
move_type, payment_state, invoice_date, line_ids.account_id, line_ids.matched_credit_ids, line_ids.matched_debit_ids
Étape 2 – Code de calcul du délai de paiement
Le code ci-dessous :
ne traite que les factures clients payées,
récupère les écritures réellement rapprochées,
gère les paiements multiples,
calcule un délai basé sur la réalité comptable.
for record in self:
record['x_studio_delai_de_paiement'] = False
# Factures clients payées uniquement
if record.move_type != 'out_invoice' or record.payment_state != 'paid':
continue
if not record.invoice_date:
continue
# Lignes clients (receivable)
receivable_lines = record.line_ids.filtered(
lambda l: l.account_id and l.account_id.account_type == 'asset_receivable'
)
payment_dates = []
# Récupération des dates des écritures rapprochées
for line in receivable_lines:
for pr in line.matched_credit_ids:
mv = pr.credit_move_id.move_id
if mv and mv.date:
payment_dates.append(mv.date)
for pr in line.matched_debit_ids:
mv = pr.debit_move_id.move_id
if mv and mv.date:
payment_dates.append(mv.date)
if payment_dates:
paid_date = max(payment_dates) # règlement complet
record['x_studio_delai_de_paiement'] = (paid_date - record.invoice_date).days
Ce que permet ce champ
Une fois calculé et stocké, ce champ peut être utilisé pour :
analyser le comportement de paiement client,
comparer les délais réels aux conditions contractuelles,
filtrer ou trier les factures par rapidité de règlement,
alimenter des tableaux de bord ou exports personnalisés.

Il reflète la réalité du cash, et non une approximation basée sur des dates comptables génériques.
⚠️ Important – Tests et validation avant mise en production
Les personnalisations décrites dans cet article doivent impérativement être testées dans une base de test avant tout déploiement en production.
Même réalisées avec Odoo Studio, elles :
exploitent des mécanismes comptables sensibles (lettrages),
influencent des indicateurs financiers,
doivent être validées sur des cas concrets : paiements partiels, multi-paiements, avoirs, écritures de régularisation.
Avant mise en production, il est recommandé de :
vérifier les résultats sur un échantillon de factures,
comparer avec la réalité comptable,
valider les calculs avec les équipes finance ou comptabilité.
Cette démarche est valable pour toute personnalisation dans Odoo, y compris en environnement SaaS.
Conclusion
Avec une configuration maîtrisée dans Odoo Studio, il est possible d’obtenir un délai réel de paiement client, fidèle à la réalité comptable, sans développement spécifique et sans sortir du cadre SaaS.
C’est un bon exemple de la manière dont Odoo v19 permet d’aller au-delà des indicateurs standards pour construire des outils de pilotage réellement utiles, à condition de comprendre où se trouvent les bonnes données.
Et comme d'habitude, si vous avez besoin d'aide avec ce tuto, contactez nous. Nous pouvons aussi vous accompagner pour créer les tableaux de bords correspondants.
Variante
Merci à Francis, un de nos clients, qui a essayé la méthode et l'a adaptée en calculant le retard par rapport à la date d'échéance (valide en cas de date d'échéance unique) plutôt que par rapport à la date de facture. Ce qui nous donne un délai moyen de retard de paiement qui peut compléter ou remplacer le délai moyen de paiement :
record['x_studio_delai_de_retard_de_paiement'] = (paid_date - record.invoice_date_due).days