---
suivi: 1559
date: 2026-09-15
sujet: Enregistrer sans contrainte quelle que soit la destination
chantier: factures / depot / enregistrement
type: bugfix
statut: poussé
hash: c7954466
fichiers:
  - app/Http/Controllers/DepotFactureController.php
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - tests/Unit/DepotEnregistrerSansContrainte1559SourceTest.php
  - tests/Unit/DepotProjetAnalyticsEnregistrer1515SourceTest.php
  - tests/Unit/DepotProjetAnalyticsEnregistrer1515Test.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1559_enregistrer_sans_contrainte.md
---

# SUIVI #1559 — Enregistrer n’exige aucun champ

## PROMPT ENVOYÉ

Étendre #1515 (Enregistrer permissif, dest PROJET) à PROGRAMMES et
FRAIS GÉNÉRAUX. Incident prod dépôt 1821, bascule PROJET → PROGRAMMES :
« The analytics id field is required ». Enregistrer ne doit exiger aucun
champ ; Valider, Comptabiliser et Payer restent stricts. Recenser les
champs exigés avant / après par destination. Pas de migration. Rebase
avant build Vite. Push HECTAREG main.

## FICHES LUES

- **#1515 LEÇON** — exception nominale PROJET dans
  `depotSaisiePatchValidationRules` ; #347 conservé pour PROGRAMMES / FG.
  Impact : c’est exactement le reste à traiter. Références L1412 / L1426
  du #1515 → aujourd’hui L1538 / L1556. Chemin PATCH
  `/factures/comptabilisation/{uuid}` toujours vrai
  (`ComptabilisationController` délègue, `depotUpdateUrl` si workflow
  engagé ou mode compta).
- **#1450 LEÇON** — assouplir l’enregistrement sans durcir l’envoi.
  Impact : PATCH Enregistrer rejoint `depotDraftSaisieValidationRules` ;
  `depotFactureValiderValidationRules` et gardes Intacct inchangées.
- **#347** (`3ddd0bfb`, pas de fiche) — durcissement analytics_id sur
  Enregistrer dès `estEligibleComptabilisation()`. Conservé dans
  `depotDraftSaisieComptabilisationValidationRules` (plus appelé par le
  PATCH). Comptabiliser / Payer ont leurs propres gardes.
- **#1505 / #1492** — classe Sage optionnelle à l’affichage Projet ;
  `required_if` dossier / poste PROJET. Non retouchés.

## SYNTHÈSE

`depotSaisiePatchValidationRules` renvoie toujours le brouillon permissif,
quelle que soit la destination. Front : `validateComptabilisationChampsObligatoires`
n’est plus appelé depuis Enregistrer (saveDraft, header, modification) ;
il reste sur Comptabiliser, Comptabiliser et payer, et Enregistrer et
marquer comme payé.

PROJET : comportement #1515 inchangé (analytics nullable ; dossier / type
de poste toujours `required_if:destination,PROJET`).

## DÉPLOIEMENT-TEST

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

Pas de migrate. Pas de route:clear.

Cas : dépôt 1821 dest PROGRAMMES sans classe Sage → Enregistrer OK ;
Valider sans rattachement → refus ; FRAIS GÉNÉRAUX saisie partielle →
Enregistrer OK ; PROJET inchangé ; Comptabiliser incomplet → refus ;
facture complète → circuit normal.

## LEÇON

Une exception nominale « seulement PROJET » sur un durcissement calé
PROGRAMMES/FG (#347 / #1515) laisse le même trou dès qu’on change de
destination. Enregistrer = brouillon, pour toutes les destinations.
Les champs compta se jugent à Comptabiliser / Payer, pas au PATCH.
Le message Laravel anglais « The analytics id field is required » vient
du serveur (workflow engagé → PATCH comptabilisation) ; le toast français
« Analytics est obligatoire » est le garde front du mode compta, à
retirer du même geste sur Enregistrer seulement.
