---
suivi: 1619
date: 2026-09-18
sujet: Acompte — débit 409100 à l’écran aligné Sage
chantier: comptabilite / depot-factures / sage
type: feature
statut: poussé
hash: 89c88ec2
fichiers:
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - app/Support/AcompteEcritureSageResolver.php
  - app/Services/AcompteIntacctApadvanceService.php
  - tests/Unit/AcompteEcritureSage1619SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1619_acompte_compte_409100.md
---

# SUIVI #1619 — acompte : débit 409100 écran = Sage

## PROMPT ENVOYÉ

Après #1616, l’écran de comptabilisation générait des écritures de
FACTURE pour un ACOMPTE (615500 / 401000). Sage recevait 409100.
Unifier : débit 409100 quelle que soit la destination, crédit
fournisseur, pas de TVA, FACTURE/AVOIR inchangés, CLASSID/LOCATIONID
frais généraux.

## FICHES LUES

- **#1616 LEÇON** — APADVANCEITEM ACCOUNTNO 409100 en dur dans le
  builder ; écran hors sujet. Impact : ne pas recoder 409100 à
  côté de l’écran ; lire les lignes affichées.
- **#1613 LEÇON** — ProgrammeChargeAccountResolver = PROGRAMMES
  uniquement. Impact : FG n’y passe pas ; l’écran FG regex
  informatique → 615500 (cas test NRJ Diags).
- **#1612 LEÇON** — HT=TTC, normalizer ne réécrit pas le compte de
  charge. Impact : le correctif est la génération d’écritures, pas
  le normalizer.
- **#1188** — `DepotFactureSaisieForm.vue` zone commune. Impact :
  un seul build, rebase `origin/main` avant Vite.

## SYNTHÈSE

### Diagnostic (avant modification)

« Générer les écritures » : `DepotFactureSaisieForm.vue`
`genererEcrituresDepuisInformations` → `buildPrefillLignesComptables`
→ `buildLignesComptablesDepuisStructure`. Compte de débit =
`numeroCompteChargeSelonDestination()` :

- PROGRAMMES : poste/marché GL (`resolvePosteChargeProgramme`,
  même idée que `ProgrammeChargeAccountResolver`) ou 471000 sans
  marché.
- FRAIS GÉNÉRAUX : regex `COMPTES_CHARGE_FG_PATTERNS` sur le
  libellé de catégorie (informatique → 615500) sinon 627000.

Le type ACOMPTE n’était consulté que pour sauter RG/CP/CIE/OPC :
le débit restait une charge. #1616 envoyait 409100 en dur dans
`ApadvanceCreateXmlBuilder` : deux écritures divergentes.

### Correctif

- Génération dédiée `buildLignesComptablesAcompte` : débit 409100,
  crédit 401000, TTC, pas de TVA. Court-circuit dans
  `buildPrefillLignesComptables` (FACTURE/AVOIR inchangés).
- Compte 409100 **verrouillé** (pas un avertissement) : l’écran ne
  peut plus diverger de Sage.
- Sage lit le débit 409100 **persisté** (`AcompteEcritureSageResolver`)
  et refuse charge / TVA / montant ≠ TTC. La constante builder
  reste le canon ; la ligne écran doit lui être identique.

### Frais généraux sans programme

- CLASSID = `analytics_id` de saisie (pas
  `resolveProgrammeClassIdForApbill`). Vide → 422 explicite
  « Analytics obligatoire pour un acompte en frais généraux ».
- LOCATIONID = établissement des lignes puis saisie
  (`LigneComptableEtablissementResolver`) — MTP00 si saisi.
- FINANCIALENTITY = banque saisie puis défaut d’entité (pas de
  banque programme). Vide → 422 explicite FG.

## DÉPLOIEMENT-TEST

OVH : `git pull origin main` ; `php artisan view:clear` ;
`php artisan journal:sync`. Pas de migrate. Rebuild Vite **interdit**
sur le serveur.

Tests : acompte FG et PROGRAMMES → 409100/401000 sans TVA ; FACTURE
et AVOIR inchangés ; envoi Sage ACCOUNTNO = ligne écran ; FG sans
classe/banque = refus clair.

## LEÇON

Un acompte n’est pas une facture à TVA 0 : le débit est un compte
de bilan 409100, pas une charge. L’écran et APADVANCEITEM doivent
lire **la même ligne persistée**. CLASSID FG = Analytics saisie,
jamais le programme. `Gate::before` = true pour GS_ADMIN_ERP :
ne pas s’en servir comme preuve de droit métier.
