---
suivi: 1958
date: 2026-10-16
sujet: Un dépôt n’est plus doublon de sa propre facture
chantier: factures / doublons
type: fix
statut: poussé
hash: 1c081a1a3
fichiers:
  - app/Services/DepotFactureDuplicateDetector.php
  - app/Services/DepotFactureDoublonService.php
  - app/Console/Commands/FacturesDoublonsSoiCommand.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Feature/DepotFactureDoublon1958Test.php
  - docs/suivi/SUIVI_1958_doublon_facture_liee.md
---

## PROMPT ENVOYÉ

Le dépôt 2541 est bloqué en comptabilisation comme doublon de la facture 2020, alors que 2541.facture_id = 2020. Exclure, dans les deux sens, le dépôt lui-même, sa facture liée, et le dépôt qui porte cette facture. Tous les points de contrôle. Commande lecture seule pour compter ces drapeaux, et commande idempotente pour les remettre à 0. Aucune autre règle. Payé ne recule pas.

## Fiches lues

- #1952 LEÇON : le rapprochement passe par le détecteur ; l’écriture des drapeaux passe par le query builder, jamais par `save()`, pour qu’un dépôt payé ne recule pas. Ne pas élargir le contrôle « déjà un bill ».
- #1949 : `doublon_detecte` alimente le bandeau. Le moteur 3/4 relit les dépôts et les factures.

## SYNTHÈSE

`findAllMatches` écarte la facture dont l’id est `depot_factures.facture_id`, et tout autre dépôt qui porte cette même facture. Le dépôt courant était déjà écarté. Enregistrement, demande NV1, comptabilisation, paiement, import électronique et Outlook passent par ce détecteur. La commande `factures:doublons-recalcul` ne rapproche pas deux dépôts qui portent la même facture.

`factures:doublons-soi` sans option compte ces auto-références et n’écrit rien. Avec `--appliquer`, elle remet `doublon_detecte` à 0 et vide `doublon_de_id`, rien d’autre. Un second passage n’écrit plus.

La paire de deux dépôts distincts au même numéro reste un doublon. Le dépôt 2541 reconstitué n’est plus bloqué.

## DÉPLOIEMENT / TEST

```
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
```

Pas de `route:clear`. Ne pas lancer `npm` ni `composer` sur le serveur.

Lecture seule, puis remise à zéro des seuls drapeaux d’auto-référence :

```
php artisan factures:doublons-soi
php artisan factures:doublons-soi --appliquer
```

## LEÇON

La fiche facture créée à la validation reprend le numéro, la date, le montant et le fournisseur du dépôt. Sans exclure `facture_id`, le score 3/4 bloque la comptabilisation de toute facture déjà validée.
