---
suivi: 1386
date: 2026-09-01
sujet: nv2_uniquement_envol
chantier: factures
type: fix
statut: poussé
hash: cce8b397
fichiers:
  - app/Support/FacturePasseParValidationNv2.php
  - app/Services/FactureWorkflowApresNv1Service.php
  - app/Services/FactureValidationService.php
  - app/Http/Controllers/DepotFactureController.php
  - app/Support/FactureFriseEtapePresenter.php
  - app/Services/FactureWorkflowRealignementService.php
  - app/Services/DepotFactureValiderDejaValideService.php
  - tests/Unit/FactureWorkflowApresNv1ServiceTest.php
  - tests/Unit/FacturePasseParValidationNv2SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1386_nv2_uniquement_envol.md
---

## PROMPT ENVOYÉ

SUIVI #1386 PHASE 2 — FIX NV2 uniquement ENVOL (suite #1385).

## FICHES LUES

- `SUIVI_1385_diag_nv2_enseigne_hectare.md` — cause : NV2 après NV1 si `programme_id` renseigné, sans regard à l'enseigne.

## SYNTHÈSE

### Décision Robin

- NV2 après NV1 **uniquement** si enseigne entité du programme = **ENVOL**.
- HECTARE (et toute autre enseigne) → `a_comptabiliser` comme FG.
- Source enseigne : `programme → entite → enseignes.code` (pas `programmes.enseigne_id`, pas préfixe code).
- Cas prudent : programme sans entité ou entité sans enseigne → **conserver NV2**.
- Pas de rattrapage auto (depot 1516 / FA0003275 validé à la main).
- ValidateurNv2Resolver, notifications, permissions NV2 : **non modifiés**.

### Implémentation

Helper central `FacturePasseParValidationNv2` (option A, condition en dur, hook commenté pour seuil futur).

Points d'appel mis à jour :
- `FactureWorkflowApresNv1Service` (3 branches post-NV1)
- `FactureValidationService::syncDepotAfterValidation`
- `DepotFactureController::valider()` (statut initial, historique, notification NV2)
- `FactureFriseEtapePresenter` (frise sans étape NV2)
- `FactureWorkflowRealignementService::factureAvecNv2`
- `DepotFactureValiderDejaValideService`

### Cohérence écrans

| Zone | Impact |
|------|--------|
| Résumé programme « À TRAITER · FACTURES » | Compteurs NV2 : seuls programmes ENVOL ; HECTARE passe en « À comptabiliser » pour les nouvelles factures |
| Liste comptabilisation | Onglets alimentés par statut facture — cohérent |
| Validation NV2 | HECTARE n'y apparaît plus après NV1 ; ENVOL inchangé |
| Notifications | NV2 notifiée seulement si `FacturePasseParValidationNv2::check` |
| Frise facture | Saut étape NV2 aligné sur helper |

### Tests

- `FactureWorkflowApresNv1ServiceTest` : FG, ENVOL (NV2), HECTARE (direct compta).
- `FacturePasseParValidationNv2SourceTest` : helper + fichiers NV2 intouchés.

## DÉPLOIEMENT-TEST

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

- Valider manuellement depot 1516 (FA0003275) en NV2 puis vérifier compteur NV2 programme 45 = 0.
- Test compta manuel : NV1 sur facture HECTARE → `a_comptabiliser`, pas de workflow nv2.
- Non-régression ENVOL : NV1 → `en_validation_nv2`.
- `grep "production.ERROR" storage/logs/laravel.log | tail -20` après usage.

## LEÇON

- Ne pas confondre `programmes.enseigne_id` et enseigne opérationnelle : Robin impose `entite.enseigne` pour le circuit (#1386).
- `entites.nom` peut diverger de l'enseigne (GEM-01 nommé « HECTARE ») — seule `enseignes.code` fait foi.
