Repérer les factures saisies deux fois

Détecte les doublons de factures en identifiant les payables d'un même fournisseur avec des montants identiques ou très proches sur une courte période.

ControllerAP Manager📆 MensuelIntermédiaireLecture seule

Demandez-le comme ça

Y a-t-il des doublons de factures sur les 3 derniers mois ?

Quand l'utiliser

Avant une campagne de paiement, pour éviter de payer deux fois la même facture.

Ce que ça produit

Liste des paires de factures suspectes avec fournisseur, montants, dates et niveau de confiance du doublon.

Comment ça se déroule

  1. 1Liste les factures fournisseurs de la période
  2. 2Repère celles qui portent le même numéro chez un même fournisseur
  3. 3Repère celles de même montant à quelques jours d'écart
  4. 4Vérifie si l'une des deux a déjà été payée
  5. 5Présente les paires à vérifier, les plus urgentes d'abord

Ce qui vous protège

  • Ce skill ne fait que lire : il ne modifie rien dans Spendesk
  • Il agit avec vos permissions et votre rôle, jamais au-delà
  • L'assistant ne peut ni approuver ni payer
▸Détail technique65/100 · 2 outils
RéconciliationFournisseursget_invoicesget_invoice_by_id

# Détection de doublons de factures

## But

Repérer les factures fournisseurs susceptibles d'avoir été saisies deux fois, **avant** qu'elles ne soient payées deux fois. Deux signaux : même numéro de facture chez le même fournisseur, ou même montant chez le même fournisseur à quelques jours d'écart.

Il n'existe pas de détection de doublons dans le MCP : c'est un rapprochement fait par l'assistant sur la liste des factures. Le résultat est une liste de paires **à vérifier**, pas une liste de doublons avérés. Le skill ne supprime et ne bloque rien.

## Étape 1 — Lister les factures de la période

Annoncer la période (par défaut les 3 derniers mois).

```json
{
  "tool": "get_invoices",
  "params": { "issuedAfter": "YYYY-MM-DD", "issuedBefore": "YYYY-MM-DD", "sortBy": "issueDate", "pageSize": 100 }
}
```

Chaque facture porte déjà ce qu'il faut : `invoiceNumber`, `supplier.id` et `supplier.name`, `grossAmount`, `currency`, `issueDate`, `approvalStatus`, `paymentStatus`.

- Sans filtre d'approbation, la liste contient les factures en attente, approuvées **et rejetées** : garder les rejetées, un doublon a souvent déjà été rejeté une fois.
- Sans filtre `type`, les avoirs ne sont pas listés : c'est voulu, un avoir n'est pas un doublon.
- Paginer avec `cursor` tant que `hasNextPage` est `true` ; ne rien conclure sur une liste partielle.
- `grossAmount` peut être `null` sur une facture en attente : l'écarter du rapprochement par montant.

## Étape 2 — Même numéro de facture

Regrouper par (`supplier.id`, `invoiceNumber`), en comparant les numéros sans tenir compte de la casse ni des espaces. Tout groupe de deux factures ou plus est un **doublon probable**.

Pour vérifier un numéro précis sur tout l'historique, le filtre `invoiceNumber` fait une recherche exacte.

## Étape 3 — Même montant, dates proches

Regrouper par (`supplier.id`, `grossAmount`, `currency`). Dans chaque groupe, signaler les factures dont les `issueDate` sont à 5 jours ou moins l'une de l'autre : **doublon possible**.

Ne pas signaler un fournisseur qui facture le même montant chaque mois (loyer, abonnement) : l'écart d'un mois écarte déjà ces cas, le préciser si l'utilisateur élargit la fenêtre.

## Étape 4 — Qualifier chaque paire

Pour les paires retenues :

```json
{ "tool": "get_invoice_by_id", "params": { "id": "<id de la facture>" } }
```

Lire `payments` (une des deux a-t-elle déjà été payée ?), `attachments` (les deux pièces sont-elles le même document ?) et `purchaseOrders`. Le statut de paiement de cet outil fait foi pour une facture donnée.

Ordre de priorité :

1. les deux factures approuvées et non payées — le double paiement est encore évitable ;
2. une payée, l'autre approuvée ;
3. les deux payées — à signaler pour récupération.

## Rapport

```
Doublons possibles — factures émises du <date> au <date> (N factures contrôlées)

Doublons probables (même numéro) : N paires
| Fournisseur | N° | Montant | Date 1 | Date 2 | Paiement 1 | Paiement 2 |

Doublons possibles (même montant, 5 jours ou moins) : N paires
| Fournisseur | Montant | Date 1 | Date 2 | Écart | Paiement 1 | Paiement 2 |
```

## Limites à dire

- Une même somme chez un même fournisseur à quelques jours d'écart peut être légitime (livraisons partielles).
- Deux fiches fournisseur différentes pour un même fournisseur échappent au rapprochement : il se fait par identifiant de fournisseur.
- L'assistant ne peut ni rejeter ni supprimer une facture : la décision se prend dans Spendesk.

## Ce qui a été vérifié

Les champs utilisés ont été vérifiés en direct sur le compte démo le 5 octobre 2026. Le rapprochement lui-même n'a pas été rejoué sur l'ensemble des factures du compte.

## Exemples de prompts
- "Y a-t-il des doublons de factures sur les 3 derniers mois ?"
- "Vérifie les doublons potentiels avant mon prochain run de paiement"
- "La facture INV-2026-7734 a-t-elle été saisie deux fois ?"

Comment installer ce skill

/
  1. 1
    Télécharger le fichier s47-duplicate-invoice-detection.md via le bouton ci-dessus.
  2. 2
    Placer le fichier dans le répertoire .claude/ de votre projet (ou ~/.claude/ pour une installation globale).
    cp s47-duplicate-invoice-detection.md .claude/s47-duplicate-invoice-detection.md
  3. 3
    Utiliser dans Claude Code — le skill est automatiquement découvert. Décrivez votre besoin en langage naturel et Claude appliquera les instructions du skill.
💡 Assurez-vous que le MCP Spendesk est configuré dans votre .claude/settings.json avec les outils get_invoices, get_invoice_by_id.

Skills similaires

★ Top
95/100·🔍 Ponctuel·Expert

Auditer la couverture du MCP

Sonde tous les outils MCP disponibles, re-évalue la couverture des 50 cas d'usages persona, détecte les nouveaux champs ou outils, et régénère le rapport d'analyse des gaps.

CFOControllerAP Manager
90/100·📅 Hebdo·Débutant

Demandes de carte via get_requests

Explique comment utiliser get_requests pour les demandes de carte et pourquoi les remboursements de frais n'y apparaissent pas. Évite une source de confusion fréquente entre deux workflows distincts.

ControllerFinance Analyst
90/100·🔍 Ponctuel·Intermédiaire

Cost centers actifs vs archivés

Distingue les centres de coût actifs des archivés via le bon usage de get_cost_centers. Évite le piège de la convention de nommage isArchived vs isActive qui est contre-intuitive.

ControllerFinance Analyst

Interested in AI Agent services or Custom Integrations?