---
suivi: 1919
date: 2026-10-15
sujet: Colonnes de Toutes les factures et compte de paiement
chantier: module-factures
type: evolution
statut: poussé
hash: 07f9cb87e
fichiers:
  - app/Support/FactureGlobaleColonnes.php
  - app/Support/FactureComptePaiement.php
  - app/Services/FactureGlobaleExportService.php
  - app/Console/Commands/RattrapageComptePaiementFactures.php
  - app/Http/Controllers/FactureGlobaleController.php
  - app/Services/FactureGlobaleListeQuery.php
  - app/Support/FactureGlobaleRechercheFilter.php
  - app/Services/FacturePaiementStatutSyncService.php
  - app/Services/IntacctPaiementStatusService.php
  - app/Services/IntacctService.php
  - app/Models/Facture.php
  - database/migrations/2026_10_15_163500_add_compte_paiement_to_factures_table.php
  - resources/js/Pages/Factures/Global.vue
  - resources/js/visites/index.js
  - routes/web.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/FactureColonnesComptePaiement1919Test.php
  - tests/Unit/VisiteGuidee1902Test.php
  - tests/Unit/VisiteGuidee1903Test.php
  - tests/Unit/VisiteGuidee1907Test.php
  - tests/Unit/ApadvanceStatut1738Test.php
  - public/build/manifest.json
  - docs/suivi/SUIVI_1919_colonnes_factures_compte_paiement.md
---

# SUIVI #1919 — colonnes de Toutes les factures et compte de paiement

## PROMPT ENVOYÉ

Bouton Colonnes sur Toutes les factures, échéance masquée par défaut, compte de paiement des factures payées, export Excel des colonnes visibles et des filtres en cours. Si le compte n'est pas lisible dans Sage, ne coder que les colonnes, l'échéance, l'export et les droits.

## Fiches lues

- #1902 : la visite `factures.liste` était en version 3. « Tous » n'est pas un filtre hors dépôt. La cible `colonnes` est déjà « Trier et filtrer ».
- #1508 : la liste passe par `FactureVisibility::applyScope` avant les filtres. Une recherche ne contourne pas ce scope.
- #1631 : l'onglet factures d'un programme réutilise `Global.vue` et la même requête, restreinte par `programme_contexte_id`.
- #1829 : une préférence de colonnes déjà enregistrée est reprise telle quelle. Seule l'absence de préférence applique le nouveau masque.

## ÉTAT DES LIEUX

Le compte est lisible. Pas d'arrêt au point 3.

| Fichier | Lignes | Constat |
|---|---|---|
| `app/Services/IntacctService.php` | 3193 `PROBE212_APPYMT_FIELDS` | `FINANCIALENTITY` est déjà demandé à la lecture APPYMT. |
| `app/Services/IntacctService.php` | 4679 `filtrerHeaderAppymtPourSync` | Le filtre jetait ce champ. Il le conserve désormais. |
| `app/Services/IntacctPaiementStatusService.php` | 425-463 `lireStatutBill` | La lecture renvoie `appymt_financial_entity`. Rien n'était stocké sur `factures`. |
| `app/Jobs/SyncFinancialEntitiesDepuisIntacct.php` | comptes bancaires | `intacct_id` = identifiant banque, `gl_account_no` = compte général, `name` = nom de banque. |
| `app/Services/IntacctService.php` | `APADVANCE_CHAMPS_LECTURE` | Le champ est aussi demandé sur l'avance, déjà écrit à la création. Pas sur la demande de paiement : cette liste de champs est prouvée, un champ inconnu ferait échouer la relecture et pourrait changer un statut. |

`FINANCIALENTITY` est l'identifiant du compte banque (ou de la carte), pas le numéro 512. Le libellé vient du référentiel local `intacct_financial_entities`.

## SYNTHÈSE

Préférence `factures_liste_colonnes`. Absente : échéance et compte de paiement masqués. Enregistrée : reprise telle quelle. « Rétablir » efface la clé.

La synchro des paiements, après l'application du statut, n'écrit que `compte_paiement_sage_id` et `compte_paiement_libelle`. Une facture non payée voit ces deux colonnes vidées. Une facture payée dont la lecture ne ramène pas de compte garde la valeur déjà connue. Le statut et la date de paiement ne sont pas touchés.

### Mapping colonnes

| Affichée | Clé de préférence | Champ source | En-tête d'export |
|---|---|---|---|
| Programme | programme | programme | Programme |
| Société | societe | societe_label | Société |
| Référence | reference | reference | Référence |
| Fournisseur | fournisseur | fournisseur | Fournisseur |
| Marché | marche | marche_label | Marché |
| Montant HT | montant_ht | montant_ht | Montant HT |
| Montant TTC | montant_ttc | montant_ttc | Montant TTC |
| Date | date_facture | date_facture | Date |
| Échéance | date_echeance | date_echeance | Échéance |
| Paiement prévisionnel | date_paiement_previsionnel | date_paiement_previsionnel | Paiement prévisionnel |
| Compte de paiement | compte_paiement | compte_paiement_libelle | Compte de paiement |
| Statut | statut | statut_badge_liste | Statut |
| Référent | referent | referent.name | Référent |

Case de sélection et icônes : hors menu, non masquables.

### Compte de paiement

| Valeur Sage | Valeur stockée | Libellé affiché | Filtre |
|---|---|---|---|
| APPYMT.FINANCIALENTITY, ou APADVANCE.FINANCIALENTITY | `factures.compte_paiement_sage_id` (identifiants joints par « · ») | `gl_account_no — name`, jamais l'identifiant brut. `factures.compte_paiement_libelle` | `f_compte_paiement` = ce libellé |

L'export Excel utilise la même requête et les colonnes visibles. Le ZIP des PDF est inchangé. La visite passe en version 4, étape « Colonnes », cible `choix-colonnes`.

## DÉPLOIEMENT-TEST

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

La commande de rattrapage appelle Sage. Le HTTPS sortant de la ligne de commande OVH est ouvert, sauf *.powerplatform.com (#1913). Le rattrapage se lance sur le serveur. L'aperçu n'écrit rien. --appliquer n'écrit que les deux colonnes du compte.

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

La synchro web « Synchroniser les paiements Sage » remplit aussi le compte, au fil de l'eau, sans cette commande.

Tests unitaires source : échéance masquée par défaut, préférence conservée, libellé, export sur la requête de liste, aperçu sans écriture Sage. Pas de clic navigateur, pas de lecture Sage réelle.

Bundle `Global-BIaIKncK.js`. Visite `VisiteGuidee-Cvz2VK_R.js`. `cie_effacement_confirme` dans `DepotFactureSaisieForm-DuZLpakU.js` : 1.

## LEÇON

`FINANCIALENTITY` était déjà dans la lecture APPYMT et jeté par le filtre de synchro. Le stocker ne demande pas une nouvelle sonde. Ne pas l'ajouter à une liste de champs prouvée (demande de paiement) : un champ refusé par Sage fait échouer toute la lecture et peut faire bouger un statut. Le libellé se résout dans le référentiel local, pas par un second appel Sage.
