ooligo
n8n-flow

Détection d'anomalies dans les factures de conseil externe avec n8n

Difficulty
intermédiaire
Setup time
90min
For
legal-ops
Legal Ops

Stack

Un flow n8n qui extrait les factures des conseils externes de votre système de facturation électronique, analyse les lignes LEDES 1998B, applique vos directives de facturation comme règles déterministes, demande à Claude une seconde passe sur les anomalies résistant aux règles (intervenants redondants, dépassement de périmètre, travaux hors lettre de mission), puis route chaque facture vers l’un des quatre buckets — approbation automatique, déduction automatique avec notification, file de revue Slack, ou escalade vers le directeur — avec chaque décision écrite dans un journal d’audit idempotent. Récupère les 5-15 % des dépenses de conseil externe que la revue manuelle ligne par ligne rate, au coût d’environ 0,04 $ d’inférence Claude par facture.

Le workflow complet est livré dans apps/web/public/artifacts/legal-spend-anomaly-n8n/legal-spend-anomaly-n8n.json (15 nœuds, déclencheur unique). Les notes de setup et les instructions de credentials se trouvent dans le _README.md associé.

Quand l’utiliser

Vous avez un volume régulier de factures de conseils externes — au moins 50 par mois sur plus de trois cabinets — transitant par un système de facturation électronique qui expose LEDES via API (Brightflag, Onit, BusyLamp, SimpleLegal, ou un équivalent auto-hébergé). Vous avez des directives de facturation écrites et un barème tarifaire par cabinet, et quelqu’un dans l’équipe effectue déjà une revue ligne par ligne suffisamment bien pour valider les signalements du flow par rapport à ses propres détections. Le bénéfice est de faire passer ce relecteur de “scanner chaque ligne” à “décider sur les éléments signalés”, ce qui atteint généralement trois à cinq fois le débit par heure de revue.

Quand NE PAS l’utiliser

Évitez si votre volume de factures est inférieur à vingt par mois — le coût de calibration dépasse les dépenses récupérables. Évitez si vous n’avez pas de barème tarifaire et de liste d’intervenants approuvés par affaire ; le flow s’appuie sur ces tables pour les checks basés sur des règles, et sans elles la passe IA fait tout le travail et hallucine des violations. Évitez si vos cabinets envoient des factures uniquement en PDF ; ce flow suppose du LEDES, et la variante extraction PDF est un workflow différent avec un rappel bien plus faible. Évitez si votre fonction legal-ops est une seule personne qui revoit tout personnellement et fait davantage confiance à sa propre reconnaissance de patterns qu’à un modèle calibré — dans ce cas le flow ajoute de la latence sans ajouter de jugement.

Setup

Le flow suppose quatre tables Postgres de support (matters, matter_approved_timekeepers, firm_billing_guidelines, invoice_audit_log) — le README détaille les colonnes et les index qui rendent les upserts et le watermark peu coûteux. Constituez-les d’abord, alimentez-les depuis votre système de gestion d’affaires existant ou vos feuilles de calcul de barèmes, puis importez legal-spend-anomaly-n8n.json dans n8n. Câblez les quatre credentials placeholder (Brightflag/votre système de facturation, Postgres, Anthropic, Slack) conformément au README. Exécutez la séquence de vérification en six étapes du README avant d’activer le déclencheur cron ; ne sautez pas le check d’idempotence, car une ligne dupliquée dans le journal d’audit faussera le prochain watermark.

La calibration est la partie que la plupart des équipes sous-estiment. Extrayez une centaine de factures historiques que votre équipe a déjà revues manuellement, passez-les dans le flow avec le cron désactivé, et comparez la decision du flow à la disposition réelle de votre équipe. Attendez-vous à recalibrer le system prompt de l’IA dans Claude — Anomaly Detection et les seuils dans Score + Route au moins deux fois avant que la distribution du routing ressemble à celle de votre équipe. Les seuils du bundle sont des points de départ (sévérité IA ≥ 0,8 escalade, part de valeur des règles ≥ 15 % escalade, nombre de flags IA > 0 route vers la file de revue) — ils évolueront une fois que vous verrez votre distribution.

Ce que fait le flow

Daily Cron — 7am Mon-Fri déclenche le run. Lookup Watermark lit le checked_at le plus récent dans invoice_audit_log et utilise sept jours comme fallback si la table est vide, afin que les ré-exécutions après une panne ne double-traitent pas. Brightflag — List New Invoices interroge le système de facturation pour les factures soumises depuis le watermark ; Split Invoices crée une exécution par facture. Fetch LEDES File télécharge le blob LEDES 1998B et Parse LEDES (un nœud Code) le décompose en lignes structurées — id intervenant, classification, taux, unités, code de tâche, code d’activité, narrative, total de ligne. Load Matter + Rate Card récupère l’affaire, la liste des intervenants approuvés avec plafonds tarifaires, et les directives de facturation du cabinet en un seul aller-retour.

Rule-Based Checks est une passe déterministe : elle signale les intervenants non approuvés, les taux supérieurs au barème, la facturation bloc (unités supérieures au seuil du cabinet avec une courte narrative), les descriptions vagues correspondant à la liste de mots-clés du cabinet, et le temps de déplacement classifié associé quand la règle d’absence de déplacement du cabinet s’applique. Chaque flag porte une sévérité (0-1) et un impact dollar estimé, cumulé dans rule_value_cents. Claude — Anomaly Detection effectue ensuite un seul appel API Anthropic vers claude-sonnet-4-6 avec les lignes, le périmètre de l’affaire et les directives du cabinet comme contexte, retournant un tableau JSON de constatations que les règles ne peuvent pas facilement exprimer — intervenants redondants sur la même tâche le même jour, temps disproportionné au périmètre, narrative de dépassement, travaux hors lettre de mission. Le system prompt interdit explicitement d’inventer des index de lignes ou de revendiquer des violations non liées à une ligne spécifique, qui est le mode d’échec le plus courant de la revue de factures basée sur LLM.

Score + Route combine les deux passes en une décision unique. Les quatre buckets — auto_approve, auto_deduct, reviewer_queue, escalate_director — sont routés via deux nœuds if. Les escalades arrivent dans #legal-ops-escalations avec un payload Slack Block Kit montrant les cinq principaux signalements de règles et IA ; les décisions de file de revue et de déduction automatique arrivent dans #legal-ops-invoice-review ; l’approbation automatique écrit uniquement le journal d’audit. Chaque branche se termine à Audit Log Insert, qui fait un upsert sur invoice_id afin que les ré-exécutions soient sûres.

Réalité des coûts

Par facture : un appel Claude Sonnet 4.6 à environ 4-6k tokens d’input (lignes + affaire + directives) et 500-1 000 tokens d’output, soit environ 0,04 $ chacun au pricing actuel. À 500 factures par mois, cela représente environ 20 $ d’inférence. Les requêtes Postgres sont peu coûteuses (lectures en une seule ligne sur colonnes indexées plus un upsert). L’API de facturation et le fetch LEDES sont du côté gratuit de votre contrat fournisseur existant. n8n auto-hébergé est le coût fixe linéaire ; n8n Cloud Starter à 24 $/mois couvre ce volume avec de la marge.

Le calcul de main-d’œuvre est ce qui rend ce flux rentable. Un relecteur faisant du ligne par ligne prend 10-15 minutes par facture ; le flow réduit cela à 2-4 minutes sur les éléments en file (lire le résumé Slack, cliquer dans le journal d’audit, décider), et zéro sur les chemins d’approbation et de déduction automatiques. À 500 factures par mois avec une répartition 60/30/10 entre approbation automatique, file de revue et escalade, le flow économise environ 50 heures de temps de relecteur par mois pour un coût d’inférence de 20 $ plus une ou deux heures de temps opérateur pour affiner les seuils. Les dépenses récupérées elles-mêmes sont la ligne la plus importante : 5-15 % des dépenses mensuelles de conseil externe est la plage rapportée dans les études de cas fournisseurs (Brightflag, Onit) et nos propres back-tests, et cela dépasse les coûts d’exploitation de deux ordres de grandeur sur tout portefeuille supérieur à 200k $/mois.

Soyez honnête sur le temps de retour sur investissement. Le premier mois est de la calibration, pas de la récupération. Les mois deux et trois sont quand la distribution du routing se stabilise et que les dépenses récupérées commencent à apparaître dans votre variance AP.

Métrique de succès

Suivez les dépenses récupérées par mois — la valeur en dollars de auto_deduct plus la valeur en dollars des déductions confirmées par le relecteur depuis la file, divisée par les dépenses totales de conseil externe ce mois-là. Le chiffre à battre est celui de votre base de référence manuelle. Si le flow ne tire pas au moins 3 % au mois trois, vous avez un problème de calibration, pas un problème de flow ; extrayez le journal d’audit, échantillonnez 30 factures, et comparez avec les notes manuelles de votre équipe.

Métrique secondaire : temps de relecteur par facture signalée. S’il augmente au lieu de diminuer, les messages Slack ne donnent pas assez de contexte au relecteur pour décider rapidement — ajustez le payload Block Kit dans Slack — Reviewer Queue pour inclure les numéros de lignes spécifiques et les deltas en dollars, pas seulement les catégories de flags.

Comparaison avec les alternatives

Par rapport au moteur de conformité intégré du fournisseur de facturation (l‘“AI review” de Brightflag, le moteur de règles d’Onit) : les règles du fournisseur sont compétentes mais leur passe IA est opaque, vous ne pouvez pas affiner le prompt, et vous ne pouvez pas ajouter des checks personnalisés sans payer un engagement de services professionnels. Ce flow vous donne le prompt, les seuils, et le journal d’audit — tous modifiables. Par rapport à un script Python DIY : même logique, charge opérationnelle bien plus élevée (vous êtes propriétaire du cron, des retries, de la rotation des credentials, de l’observabilité) et pas de débogueur visuel quand un fichier LEDES d’un nouveau cabinet est mal analysé. Par rapport au statu quo d’un assistant juridique lisant chaque facture : l’assistant est plus précis sur les nouveaux patterns le premier mois, après quoi le rappel du flow sur les règles codifiées est plus élevé et le temps de l’assistant est libéré pour les éléments relevant vraiment du jugement.

L’argument en faveur de la version n8n spécifiquement par rapport à une build Lambda ou Make.com est le graphe visuel plus la sémantique de retry par nœud — quand l’API Anthropic vous rate-limite un matin chargé, le retry automatique avec backoff de n8n sur le nœud httpRequest gère ça sans code, et vous pouvez voir le retry se produire.

Points de vigilance

Les déductions automatiques mal communiquées détériorent les relations avec les cabinets. Garde-fou : le payload Slack — Reviewer Queue inclut toujours la chaîne de raisonnement de la passe de règles et de la passe IA, et le journal d’audit conserve le rule_flags_json et ai_flags_json complets. Avant qu’une déduction automatique soit communiquée au cabinet, générez la note destinée au cabinet depuis la ligne du journal d’audit, pas depuis un message modèle “nous avons déduit X” — les cabinets acceptent les réductions quand ils voient la ligne spécifique, la directive spécifique, et l’impact dollar spécifique.

Le calibrage des seuils est sensible au type d’affaire. Les factures de contentieux ont des patterns différents (les lots de discovery volumineux ressemblent à de la facturation bloc mais n’en sont pas) des affaires transactionnelles (toute facturation bloc est suspecte). Garde-fou : la requête Load Matter + Rate Card retourne matter_type, et le nœud Code Rule-Based Checks est l’endroit où brancher dessus. Livrez le flow v1 avec des seuils globaux, puis spécialisez dans les quatre semaines.

Les nouveaux cabinets produisent des faux positifs jusqu’à ce que vous ayez une base de référence. Garde-fou : ajoutez un check WHERE invoices_seen_count < 5 en amont et forcez decision = reviewer_queue pour tout cabinet sous ce seuil, quels que soient les résultats des règles et de l’IA. Le bundle n’inclut pas ce check par défaut ; ajoutez-le avant de démarrer si vous intégrez de nouveaux cabinets plus d’une fois par trimestre.

L’analyse LEDES échoue silencieusement quand un cabinet envoie un fichier malformé. Garde-fou : le nœud Code Parse LEDES retourne parse_error: 'empty_or_malformed_ledes' plutôt que de lever une exception, et les nœuds en aval écriront une ligne dans le journal d’audit avec decision: auto_approve (la valeur par défaut) — ce qui est incorrect. Ajoutez un nœud if après Parse LEDES qui route les erreurs d’analyse vers #legal-ops-escalations avec le nom du cabinet et l’id de facture afin qu’un humain puisse contacter le cabinet pour un fichier propre.

Claude peut halluciner des violations sur une facture volumineuse. Garde-fou : le system prompt interdit d’inventer des index de lignes ; le nœud Score + Route traite les constatations IA comme consultatives sauf si sévérité ≥ 0,8 (escalade) ou nombre de flags IA > 0 accompagné de constatations de règles (file de revue). Ne laissez jamais un flag IA seul conduire à un auto_deduct.

Stack

n8n (cloud ou auto-hébergé) est l’orchestrateur. Claude Sonnet 4.6 via l’API Anthropic Messages effectue la passe d’anomalies. Postgres contient la base de données des affaires, les barèmes tarifaires, les directives de facturation, et le journal d’audit. Slack reçoit la file de revue et les escalades de direction. Votre système de facturation électronique (Brightflag dans les valeurs par défaut du bundle ; remplacez l’hôte et le chemin pour Onit, BusyLamp, SimpleLegal, ou un endpoint auto-hébergé) est la source de vérité pour les nouvelles factures et la cible de réécriture éventuelle si vous étendez le flow pour repousser les déductions plutôt que de les envoyer par email.

Ce flow est la couche opérationnelle de la gestion des dépenses juridiques ; la couche politique est vos directives écrites pour les conseils externes, que les checks basés sur des règles encodent. Les deux ne fonctionnent qu’ensemble — les directives sans le flow sont aspirationnelles ; le flow sans les directives est un modèle qui essaie d’inventer votre politique.

Files in this artifact

Download all (.zip)