---
suivi: 1931
date: 2026-10-15
sujet: Compte de paiement dès que le paiement Sage est engagé
chantier: module-factures
type: correctif
statut: poussé
hash: ac4ba6de8
fichiers:
  - app/Support/FactureComptePaiement.php
  - app/Services/FacturePaiementStatutSyncService.php
  - app/Services/FactureExtourneSageConstatService.php
  - app/Console/Commands/RattrapageComptePaiementFactures.php
  - app/Models/Facture.php
  - database/migrations/2026_10_15_174500_add_compte_paiement_tentative_to_factures.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/FactureComptePaiementEtapes1931Test.php
  - docs/suivi/SUIVI_1931_compte_paiement_des_le_virement.md
---

# SUIVI #1931 — compte de paiement dès le virement à exécuter

## PROMPT ENVOYÉ

Le compte de paiement de Toutes les factures ne se mémorisait que pour une facture payée, et les deux colonnes étaient vidées sinon. Il doit apparaître dès « Virement à exécuter », quand le paiement est lancé dans Sage. Le rattrapage reprend ces étapes, et note les tentatives sans pièce ou sans compte.

## Fiches lues

- #1919 : le compte vient de FINANCIALENTITY, le libellé du référentiel local. Ne pas ajouter ce champ à la liste prouvée de la demande de paiement.
- #1924 : l'identifiant d'une avance est celui de l'avance. Les factures déjà payées ne reviennent pas dans le balayage de masse. Cinq résultats, aperçu sans écriture.
- #1913 : une tentative sans résultat utile est notée. Le lot suivant ne la reprend pas, sauf `--reessayer`.

## ÉTAPES ET SOURCE DU COMPTE

| Étape affichée | `etat_paiement_sage` | Source de FINANCIALENTITY |
|---|---|---|
| Déposé sur Suite (frise passée) et Virement à exécuter (étape courante) | `paiement_disponible` (ancienne valeur `en_attente`) | Facture : APPYMT. Acompte : APADVANCE |
| Chèque émis | `cheque_emis` | APPYMT |
| Virement exécuté | `virement_execute` | Facture : APPYMT. Acompte : APADVANCE |
| Payé / Paiement confirmé | `paye`, ou statut payée | Facture : APPYMT. Acompte : APADVANCE |

APPAYMENTREQUEST porte l'état d'un acompte (même traduction que le paiement), pas le compte. Sa liste de champs prouvée ne contient pas FINANCIALENTITY. Le lire là raterait le compte, ou en prendrait un autre (#1924).

Hors de ce tableau : analyse, à comptabiliser, paiement à préparer (`preparation`). Rien n'est écrit. La colonne reste vide.

Le compte n'est plus vidé parce que la facture n'est pas payée. Il est vidé seulement quand l'annulation confirmée ou l'extourne constatée s'applique, ou quand la facture passe rejetée. Le statut, l'étape et la date de paiement ne bougent pas par cette écriture. Une facture payée confirmée n'est pas relue par le balayage de masse.

## SYNTHÈSE

La synchro des paiements et le bouton d'actualisation, quand ils relisent déjà une facture en cours, enregistrent le compte au passage. Les factures déjà payées restent hors de ce balayage. Leur compte passe par le rattrapage.

`factures:compte-paiement-rattrapage` prend les factures de ces étapes sans libellé, de l'id le plus grand au plus petit. Mêmes cinq résultats, même bilan, même lecture seule. `--appliquer` n'écrit que le compte, ou, pour « sans pièce Sage » et « sans compte », la tentative (`compte_paiement_resultat`, `compte_paiement_tente_at`). Le lot suivant les laisse de côté. `--reessayer` les reprend. L'erreur et le libellé manquant restent repris : le référentiel peut se compléter.

Aucune écriture Sage. Pas de reconstruction du bundle : l'écran affichait déjà le libellé stocké.

## DÉPLOIEMENT-TEST

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

Puis, sur le serveur :

```
php artisan factures:compte-paiement-rattrapage --limite=10
php artisan factures:compte-paiement-rattrapage --facture=ID
php artisan factures:compte-paiement-rattrapage --limite=10 --appliquer
```

L'aperçu n'écrit rien. `--appliquer` écrit le compte, ou la tentative sans pièce / sans compte. `--facture` n'écrit rien. Pour reprendre les tentatives déjà notées : `--reessayer`.

Pas de bundle à reconstruire. `DepotFactureSaisieForm` n'est pas touché.

## LEÇON

Le paiement existe dans Sage dès « Virement à exécuter », pas seulement au payé. Vider le compte à chaque lecture d'une facture non payée effaçait un compte déjà juste. La demande de paiement d'un acompte dit où en est le paiement ; le compte reste sur l'avance.
