---
suivi: 1948
date: 2026-10-16
sujet: Correctif FE Comptabilisation — VENDORID ligne, établissement, net
chantier: factures-electroniques / comptabilisation
type: fix
statut: poussé
hash: 4ed8c2306
fichiers:
  - app/Intacct/Functions/AccountsPayable/ExtBillUpdate.php
  - app/Services/FactureElectronique/FactureElectroniqueComptabilisation.php
  - app/Services/FactureElectronique/FactureElectroniqueSage.php
  - app/Services/FactureElectronique/FactureElectroniqueSource.php
  - app/Http/Controllers/ComptabilisationController.php
  - app/Http/Controllers/DepotFactureController.php
  - app/Support/LigneComptableEtablissementResolver.php
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - tests/Unit/FactureElectroniqueComptabilisation1948Test.php
  - tests/Feature/FactureElectronique/FactureElectroniqueImport1845Test.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/manifest.json
  - public/build/assets/DepotFactureSaisieForm-lltWkcp0.js
---

# SUIVI #1948 — correctif FE ExtBillUpdate + Comptabilisation programme

## Fiches lues

- #1947 LEÇON : VENDORID manquant par ligne ; MESSAGE_REJOUABLE ; doc Sage LINE_NO.
- #1945 LEÇON : établissement = HECTARE pas programme ; jointure comptes_comptables silencieuse ; net affichage ≠ prépayé.
- #1853 : ExtBillUpdate, jamais second bill / paiement.

## PROMPT ENVOYÉ

PHASE 2 suite #1945+#1947 : VENDORID ligne ; lecture lignes brouillon (replace vs add) ; établissement facultatif si programme ; compte prérempli + message référentiel ; net à payer modifiable / TTC verrouillé ; tests ; CIE=1.

## Mapping

| Libellé | Valeur postée | Colonne / clé | Back |
| --- | --- | --- | --- |
| Établissement | etablissement_id | saisie | Facultatif si programme_id |
| Compte bancaire | compte_bancaire_id | saisie | Obligatoire, prérempli programme |
| Net à payer fournisseur | montant_net_paiement | saisie + mise_en_paiement.lignes.{uuid}-mono.montant_net | Relu volet Paiement |
| TTC facture FE | — | depot.montant_ttc | Verrouillé (contrôle TOTALENTERED) |

## SYNTHÈSE

### A+B — ExtBillUpdate
- `VENDORID` sur chaque APBILLITEM (aligné ExtBillCreate / `setVendorId`).
- **Preuve Sage** (developer.intacct.com APBILL update) : sans `LINE_NO` = **ajout** ; avec `LINE_NO` = modification ; omettre une ligne = suppression. Lecture obligatoire des APBILLITEM avant update (`FactureElectroniqueSage::lignesBrouillon`) ; `alignerLignesAvecBrouillon` pose les LINE_NO des lignes non-taxe (hors PARENTENTRY). Si lignes existantes sans LINE_NO → **blocage** (pas de doublement).

### C — Établissement
Facultatif si `programme_id` (front `etablissementRequisComptabilisation`, back `reponseSiComptaNonPretPourAction`, resolver, FE preparer). LOCATIONID non vide : repli `entite.intacct_id` (ex. E-04) quand programme sans établissement.

### D — Compte bancaire
Reste obligatoire. Message si `financial_entity_intacct_id` du programme absent des options. Synchro : Admin Intacct « Synchroniser les comptes » (`POST /admin/intacct/sync-comptes`) puis `php artisan erp:sync-comptes-banques-comptables` (jointure BANKACCOUNTID → comptes_comptables) ; aussi `sync-financial-entities`.

### E — Net à payer
Champ `montant_net_paiement` (prérempli TTC), modifiable. Persisté en `saisie` et miroir `ocr_raw.mise_en_paiement.lignes.{uuid}-mono.montant_net` (lu par `PaiementMiseEnPaiementSaisie` / volet Paiement). TTC FE inchangé.

### F — Paiement FE
Inchangé : court-circuit `completerBrouillonElectronique`, test source sans create/APPYMT.

## DÉPLOIEMENT-TEST

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

Pas de migrate. Pas de npm sur OVH.

Tests manuels (ordre) :
1. Dépôt 2541 — Aperçu Sage : XML avec VENDORID + LINE_NO par ligne.
2. Comptabiliser → Sage Submitted, lignes non doublées, aucun APPYMT.
3. Classique programme HECTARE sans établissement → OK.
4. HECTARE hors programme sans établissement → refus.
5. Compte programme hors référentiel → message sync.
6. Net à payer modifiable ; TTC FE non modifiable.

## LEÇON

Doc Sage APBILL update : LINE_NO absent = ajout. Un ExtBillUpdate sans lecture préalable des lignes du brouillon e-invoice double les écritures. Toujours lire APBILLITEM avant Submit.
