---
suivi: 1616
date: 2026-09-18
sujet: Acompte — création APADVANCE Sage à la comptabilisation
chantier: comptabilite / sage / acompte
type: feature
statut: poussé
hash: 5c21152a
fichiers:
  - app/Services/ApadvanceCreateXmlBuilder.php
  - app/Services/AcompteIntacctApadvanceService.php
  - app/Http/Controllers/ComptabilisationController.php
  - app/Http/Controllers/Admin/IntacctController.php
  - app/Support/FactureEstAcompte.php
  - app/Services/PaiementLignesPayablesService.php
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - tests/Unit/AcompteIntacctApadvance1616SourceTest.php
  - tests/Unit/DepotFactureAcompte1612SourceTest.php
  - tests/Unit/IntacctProbeApadvance1614SourceTest.php
  - tests/Feature/IntacctProbeApadvance1614Test.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1616_acompte_creation_sage.md
---

# SUIVI #1616 — création APADVANCE à la comptabilisation

## PROMPT ENVOYÉ

Sonde #1614 : APADVANCE créable en XML. Décision Robin : tout passe
par l’ERP, écrans existants. Phase 1 = établir COMMENT Sage paie un
APADVANCE (étendre la sonde, ne pas deviner). Phase 2 = lever le
refus #1612 et créer l’APADVANCE à la comptabilisation (service
dédié, pas APBILL). Phase 3 = mise en paiement seulement si la
phase 1 est prouvée. Stockage RECORDNO hors intacct_bill_id.

## FICHES LUES

- **#1614 LEÇON** — GS_DSI brut ; sendRequest parsé ; create vide =
  oracle de créabilité. Impact : sonde étendue sur la même route,
  pas de seconde URL ; create vide conservé.
- **#1613 LEÇON** — ne pas réutiliser intacct_bill_id ; m365GroupNames.
  Impact : JSON `ocr_raw.compta_acompte` ; conclusion « REST only »
  caduque (create XML #1614) mais la leçon colonnes APBILL reste.
- **#1612 LEÇON** — garde-fou serveur avant APBILL. Impact : le refus
  est retiré de `reponseSiComptaNonPretPourAction` et remplacé par
  le branchement APADVANCE ; l’endpoint avoir refuse encore l’acompte.
- **#1610** — objet APADVANCE / APADVANCEITEM. Impact : mapping
  lookup réel, jamais de champ inventé.

## SYNTHÈSE

### Étape 1 — VERDICT PAIEMENT (non établi)

APPYMT.RECORDKEY paie une facture (APBILL). APPYMTDETAIL.ADVANCEKEY
applique un acompte **déjà payé** en crédit sur une facture — ce
n’est pas le paiement de l’acompte. Témoin 686056 : « In process »,
TOTALPAID 0. ACH Hectare : In process → Advance paid = fichier
bancaire Cash Management (generate + confirm), hors écran mise en
paiement ERP. Aucune fonction XML « payer un APADVANCE » n’est
prouvée. **Étape 3 non livrée.**

La sonde `/admin/intacct/probe-apadvance` (GS_DSI brut) lit maintenant
LOOKUP APPYMTDETAIL / APPYMT, ADVANCEKEY et RECORDKEY sur le témoin,
et un APADVANCE `STATE = 'Advance paid'`. STATE VALIDVALUES connues
reportées. Compte de test refus : GS_ADMIN_ERP sans GS_DSI.

### Étape 2 — création à la comptabilisation

Service `AcompteIntacctApadvanceService` + `ApadvanceCreateXmlBuilder`.
Écran comptabilisation existant. JSON `ocr_raw.compta_acompte`
(RECORDNO + état + DOCNUMBER). Jamais intacct_bill_id /
intacct_record_no. Pièce → STATUT_COMPTABILISEE + paiement_effectif
ouvert, **exclue** de la file APPYMT. PROJECTID non envoyé.

### Étape 3

Non livrée.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear` + `route:clear`
3. `php artisan journal:sync`
4. Compte **GS_COMPTABILITE** (pas seulement GS_ADMIN_ERP) pour
   comptabiliser un acompte. Refus attendu si compte hors groupes
   compta (ex. GS_HECTARE seul).
5. Sonde : compte **GS_DSI** (GS_ADMIN_ERP seul → 403).

## LEÇON

Créable XML ≠ payable par APPYMT. ADVANCEKEY = application d’un
acompte payé sur une facture. Ne jamais écrire un RECORDNO
d’APADVANCE dans intacct_bill_id (sync 4 h + file à payer). PAYMENTMETHOD
API = ACH, pas le libellé UI « Fichier bancaire SEPA ». ADVANCEDATE
est obligatoire malgré required=false au lookup. PROJECTID existe
sur la ligne : ne pas l’alimenter tant que projet ⇄ programme n’est
pas livré.
