---
suivi: 1445
date: 2026-09-04
sujet: Dossier foncier — classe Sage (intacct_class_analytics_id)
chantier: foncier
type: feature
statut: poussé
hash: d5ce3e2d
fichiers:
  - database/migrations/2026_09_04_144500_add_intacct_class_analytics_id_to_dossiers_fonciers.php
  - app/Models/DossierFoncier.php
  - app/Models/IntacctClass.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Services/Foncier/FieldAuditService.php
  - resources/js/Components/IntacctClassAnalyticsSelect.vue
  - resources/js/Components/ProgrammeSocieteBancairePanel.vue
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - tests/Unit/DossierFoncier1445SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1445_dossier_foncier_classe_sage.md
---

# SUIVI #1445 — Classe Sage sur dossier foncier

## PROMPT ENVOYÉ

Premier lot du chantier facturation des dossiers fonciers (#1443) : associer une
classe Sage à un dossier. Ne pas ouvrir PROJETS, ne pas toucher au dépôt ni à
la comptabilisation. Colonne calquée sur `programmes.intacct_class_analytics_id`.
Réutiliser le sélecteur filtrable du #1372.

## FICHES LUES

- `#1372` — sélecteur Classe Intacct dans `ProgrammeSocieteBancairePanel`
  (PrimeVue Select + `filter`, options `{id, classid, nom}`, ACTIVE only).
  Extraire le même composant plutôt qu’un second Select.
- `#1442` LEÇON — ne jamais réassigner `$groups` (payload liste) avec
  `m365GroupNames()`. `index()` inchangé : `$groupesM365` conservé.
- `#1434` — `GS_GEMME_PDG` dans `$isDg` / RecordAcl. Non régressé.
- `#1443` — diagnostic CLASSID (acquis, non remesuré ici).

## MESURES

### Colonne programmes
`foreignIdFor(IntacctClass::class, 'intacct_class_analytics_id')->nullable()->constrained('intacct_classes')->nullOnDelete()`
= BIGINT UNSIGNED NULL, FK `intacct_classes.id`, ON DELETE SET NULL.

### Enseigne ↔ parent_id
`enseignes` n’a ni `parent_id` ni CLASSID Sage. `intacct_classes.parent_id` est
un CLASSID texte (`E-04 HECTARE`). Le #1372 charge **toutes** les classes
ACTIVE, sans filtre enseigne. Correspondance **non fiable** → pas de filtre.

## SYNTHÈSE

Colonne `dossiers_fonciers.intacct_class_analytics_id`, relation
`intacctClassAnalytics`, whitelist `champsInlineAutorises`, audit
`AuditsFieldChanges` + libellé dans `FieldAuditService`. Sélecteur
`IntacctClassAnalyticsSelect` (extrait du #1372) sur la synthèse, recherche
filtrable, état vide « Aucune classe Sage renseignée ».

## DÉPLOIEMENT-TEST

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

Impersonation Sandrine PORTALES (GS_GEMME_PDG). Liste `/foncier/dossiers` :
4 libellés (#1442).

## LEÇON

Une FK Sage sur un dossier n’implique pas un filtre par enseigne : le parent
Intacct est un CLASSID texte, l’enseigne ERP n’a pas ce lien. Le sélecteur
programme (#1372) charge déjà toutes les ACTIVE — même source.
