---
suivi: 1372
date: 2026-08-31
sujet: programme_coordonnees_intacct_droits_compta
chantier: programmes
type: feature
statut: poussé
hash: ee442439
fichiers:
  - app/Http/Controllers/Concerns/AuthorizesProgrammeVefaAccess.php
  - app/Http/Controllers/ProgrammeController.php
  - resources/js/Components/ProgrammeSocieteBancairePanel.vue
  - resources/js/Pages/Programmes/Edit.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
---

## PROMPT ENVOYÉ

SUIVI #1372 — Déplacer « Paramètres Intacct » de INFOS vers Coordonnées société & bancaires ;
ouvrir l’onglet entier à GS_COMPTABILITE (UI + serveur, m365GroupNames brut). Autres onglets
inchangés. Avertissement Sage proposé (pas de blocage). Pas d’audit construit.

## FICHES LUES

- **#1366 / #1367** — leçon UI≠serveur et piège `hasAnyM365Group` / Admin ERP : droit Coordonnées
  défini via `m365GroupNames()` brut (même définition pour `can_edit_societe_bancaire` et 403).
- **#1311** — dates clés / update partiel : INFOS ne poste plus les champs Intacct ; Coordonnées
  utilise `fill` whitelist sur son endpoint dédié.
- Aucune fiche antérieure dédiée à l’onglet société-bancaire (création hors SUIVI numéroté).

## SYNTHÈSE

### Changement 1 — emplacement Intacct
Bloc identique (Société / Compte bancaire paiement / Classe + aides + filtre location_id) déplacé
dans `ProgrammeSocieteBancairePanel`, onglet Coordonnées. INFOS conserve Infos générales, Logo,
Responsables, SharePoint.

### Changement 2 — droits
`userCanEditSocieteBancaire` : GS_ADMIN_ERP | GS_DIRECTION_GENERALE | **GS_COMPTABILITE** via
`m365GroupNames()` brut. Prop Inertia `can_edit_societe_bancaire` + `abortUnless` 403 alignés.

### Endpoint / validation (justification)
L’onglet Coordonnées enregistrait déjà via `PUT programmes/{id}/societe-bancaire` (update partiel
sûr). Les champs Intacct y sont ajoutés avec **les mêmes règles** qu’avant dans `update()`.
`update()` INFOS **ne touche plus** `entite_id` / `financial_entity_id` /
`intacct_class_analytics_id` → enregistrement croisé sans perte.

### Impact Sage (champs) — pour arbitrage Robin
| Colonne | Impact |
|---------|--------|
| `code_societe` | Appels de fonds / génération documents société |
| `entite_id` | Entité / LOCATION Intacct du programme |
| `financial_entity_id` | BANKACCOUNTID APPYMT (mise en paiement) |
| `intacct_class_analytics_id` | CLASSID analytics APBILL |
| `compte_bancaire_intacct_id` | Compte 512 legacy — **non exposé** dans ce bloc UI |
| `intacct_class_id` | CLASSID legacy — **non exposé** ici |

Avertissement soft affiché si `canEdit` (pas de blocage).

### Audit
Aucune trace métier (audit / historique champ) sur ces colonnes programme — **signalé, non construit**.

## DÉPLOIEMENT-TEST

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

Pas de migration. Pas de nouvelle route (`route:clear` non requis).

## LEÇON

Droit d’édition d’un onglet Inertia = **une** fonction PHP (`m365GroupNames` brut) partagée UI
(prop) + serveur (403). Ne jamais réintroduire Intacct dans le POST INFOS sous peine d’écrasement
stale. Tester avec compte GS_COMPTABILITE, pas Admin ERP.
