---
suivi: 1959
date: 2026-10-16
sujet: La commande des auto-références ne plante plus
chantier: factures / doublons
type: fix
statut: poussé
hash: fac76c122
fichiers:
  - app/Services/DepotFactureDoublonService.php
  - tests/Feature/DepotFactureDoublon1959Test.php
  - docs/suivi/SUIVI_1959_argument_donnees_doublons_soi.md
---

## PROMPT ENVOYÉ

`php artisan factures:doublons-soi` plante : `donnees()` exige deux arguments et `estAutoReference` l’appelle avec le dépôt seul. Corriger cet appel, vérifier tous les appels des méthodes ajoutées par #1958, dire si `estAutoReference` est sur un chemin écran, et tester la commande en lecture seule et avec `--appliquer`.

## Fiches lues

- #1958 LEÇON : la fiche facture reprend les critères du dépôt. Sans exclure `facture_id`, le score 3/4 bloque toute facture déjà validée. Le test de la commande sortait avant `donnees()` (`doublon_de_id` égal à l’id de la facture).
- #1952 LEÇON : l’écriture des drapeaux passe par le query builder, jamais par `save()`. Ne pas élargir le contrôle « déjà un bill ». Ce lot ne touche ni le score ni le comparateur.

## SYNTHÈSE

`estAutoReference` est privée. Son seul appel est `listerAutoReferences` (`DepotFactureDoublonService.php:264`). Cette méthode n’est appelée que par la commande `factures:doublons-soi` (`FacturesDoublonsSoiCommand.php:16`) et par `effacerAutoReferences` (`:280`), elle-même seulement depuis la commande avec `--appliquer` (`FacturesDoublonsSoiCommand.php:25`). Enregistrement, demande NV1, comptabilisation et paiement passent par `synchroniser` / `blocageApresRecalcul`, qui appellent `donnees($depot, $overrides)` avec les deux arguments (`:46`). Ils n’appellent pas `estAutoReference`.

L’appel cassé est `DepotFactureDoublonService.php:335`, signature à `:342`. Il est atteint seulement si `doublon_de_id` est vide et que le score avec la facture liée atteint 3. Le correctif passe `[]`. Le paramètre reste obligatoire. Les autres appels de #1958 ont déjà le bon nombre d’arguments.

## DÉPLOIEMENT / TEST

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

Pas de `route:clear`. Pas de `journal:sync`. Ne pas lancer `npm`, `composer`, `optimize`, ni `config:cache` sur le serveur.

Puis, en lecture seule, et seulement ensuite la remise à zéro des drapeaux d’auto-référence :

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

## LEÇON

Le test #1958 ne traversait pas la ligne 335. Un dépôt avec `doublon_de_id` vide et un score ≥ 3 sur sa propre facture est le seul chemin qui appelle `donnees()` depuis la commande. Le test doit poser ce cas : si l’argument manque, `ArgumentCountError` fait échouer `factures:doublons-soi`. Ne pas rendre `$overrides` optionnel, sinon ce trou redevient invisible.
