---
suivi: 1612
date: 2026-09-18
sujet: Acompte — saisie, affichage, workflow (sans Sage)
chantier: comptabilite / depot-factures
type: feature
statut: poussé
hash: 3cd1295e
fichiers:
  - app/Models/TypeFacture.php
  - app/Support/FactureEstAcompte.php
  - app/Support/DepotFactureAcompteNormalizer.php
  - database/migrations/2026_09_18_161200_ensure_type_facture_acompte.php
  - app/Http/Controllers/DepotFactureController.php
  - app/Http/Controllers/ComptabilisationController.php
  - app/Http/Controllers/FactureController.php
  - app/Http/Controllers/FactureGlobaleController.php
  - app/Http/Controllers/ValidationController.php
  - app/Http/Middleware/HandleInertiaRequests.php
  - app/Services/DepotFactureEngagerWorkflowService.php
  - app/Services/DepotFactureValiderDejaValideService.php
  - app/Services/FactureGlobaleListeQuery.php
  - app/Services/ApplicationAvoirDepotService.php
  - app/Services/Compta/ComptaTableauBordService.php
  - app/Support/FactureEstAvoir.php
  - app/Support/FactureFriseEtapePresenter.php
  - app/Support/StatutAvoir.php
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - resources/js/Pages/DepotFactures/Index.vue
  - resources/js/Pages/Factures/Show.vue
  - resources/js/Pages/Factures/Global.vue
  - resources/js/Pages/Factures/Comptabilisation/Index.vue
  - resources/js/Pages/Validations/Index.vue
  - resources/js/Components/DepotFactures/DepotFactureSaisieActionBar.vue
  - tests/Unit/DepotFactureAcompte1612SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1612_acompte_lot_a_saisie.md
---

# SUIVI #1612 — acompte lot A (saisie / affichage / workflow, sans Sage)

## PROMPT ENVOYÉ

Hectare paie parfois un fournisseur sur devis, sans facture. L’ERP ne
connaissait que FACTURE et AVOIR. Ce lot ajoute le type ACOMPTE : dépôt,
saisie, NV1, NV2, arrêt propre avant comptabilisation. Aucun appel Sage,
aucune APADVANCE, aucun APBILL. Critère = la pièce reçue. HT = TTC, pas
de TVA, pas de retenues. Marché autorisé, agrégats inchangés (règle du
net à régler). Compte 409100 catalogué, non câblé.

## FICHES LUES

- **#1610 LEÇON** — 34 points (22 binaires AVOIR vs le reste + 12
  whitelist). Type dans `ocr_raw.saisie.type_facture`, pas une colonne
  dépôt. `DEVIS` déjà au catalogue, exclu du toggle : ne pas le
  réutiliser. Impact : inventaire suivi point par point ; ACOMPTE nouveau
  libellé ; `validateur_nv1_role = conducteur_travaux` comme FACTURE.
- **#1573 LEÇON** — recopie fantôme après réaffichage. Impact : bascule
  de type zéro TVA / échéance / retenues, pas de valeurs cachées postées.
- **#1599 LEÇON** — destination PROJET abandonnée. Impact : non rouverte.
- **#1604 / #1607** — hors périmètre (saisie historique, sync projets).

Aucune fiche n’a changé le plan : lot A = saisie + garde-fou serveur.

## SYNTHÈSE

Type ACOMPTE au référentiel (`types_factures.libelle`, catalogue
conducteur_travaux / 409100). Toggle 3 segments. HT = TTC, TVA masquée
(justification : éviter un taux fantôme posté, #1573). Champ « N° de
devis » = libellé seul (`depot_factures.numero_facture` inchangé).
Échéance masquée. Prefill retenues et lignes 401700/401800 neutralisés
pour ACOMPTE seulement. Badge « Acompte ». Fiche plus binaire
Avoir/Facture. Comptabilisation : refus serveur
« L'envoi Sage des acomptes n'est pas encore disponible. ».

## MAPPING TOGGLE

| Libellé affiché | Valeur postée | Valeur stockée dépôt | Libellé back |
|---|---|---|---|
| FACTURE | FACTURE | `ocr_raw.saisie.type_facture` = FACTURE | types_factures.libelle FACTURE |
| AVOIR | AVOIR | `ocr_raw.saisie.type_facture` = AVOIR | types_factures.libelle AVOIR |
| ACOMPTE | ACOMPTE | `ocr_raw.saisie.type_facture` = ACOMPTE | types_factures.libelle ACOMPTE |

Facture : `factures.type_facture_id` → `types_factures.id` du libellé.

TVA masquée (pas verrouillée) : un champ caché à 20 % serait posté.

## 34 POINTS

Voir la synthèse livrable.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear`
3. `php artisan migrate --force` (type ACOMPTE)
4. `php artisan journal:sync`
5. Tests 1–10 du prompt.

## LEÇON

Une 3e valeur ne se limite pas à la whitelist `LIBELLES_SAISIE` : chaque
branche « AVOIR sinon FACTURE » avale silencieusement l’acompte. Le
garde-fou Sage doit être serveur (`reponseSiComptaNonPretPourAction`)
avant tout APBILL. `DEVIS` n’est pas un acompte.
