---
suivi: 1679
date: 2026-09-24
sujet: Création manuelle d'un projet Sage, entité choisie par la compta
chantier: comptabilite / sage / projets
type: feature
statut: poussé
hash: ab4dd022
fichiers:
  - app/Services/IntacctService.php
  - app/Services/IntacctProjetCreationService.php
  - app/Http/Controllers/Compta/ProgrammeParametresBancairesController.php
  - app/Support/Compta/ProgrammeParametresBancairesQuery.php
  - app/Models/Programme.php
  - resources/js/Pages/Compta/ProgrammeParametresBancaires.vue
  - routes/web.php
  - database/migrations/2026_09_24_110000_add_projet_sage_location_id_to_programmes.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/manifest.json
  - public/build/assets/ProgrammeParametresBancaires-DzXbe3wV.js
  - public/build/assets/app-DWc2VTnc.js
  - docs/suivi/SUIVI_1679_creation_projet_sage_entite_compta.md
---

# SUIVI #1679 — projet Sage, entité choisie par la compta

Reprend le #1677 (partie A close, mesures fournies). L'entité du projet n'est
plus déduite de `programmes.entite_id`.

## PROMPT ENVOYÉ

Création manuelle depuis Paramètres bancaires des programmes. PROJECTCATEGORY
Contract, STATUS active, PROJECTSTATUS / PARENTID / MANAGERID / CUSTOMERID non
envoyés. PROJECTID = code_envol. PROJECTTYPE selon enseigne_id 1 ou 2, sinon
refus. LOCATIONID choisi par la compta, jamais pré-rempli. Lecture Sage avant
création. Aucun projet existant modifié. Aucune classe.

## E0

La colonne « Société (Intacct) » poste `entite_id` (`ProgrammeParametresBancairesController.php`, règle `exists:entites,id`). Le tri est `entites.intacct_id` (`ProgrammeParametresBancairesQuery.php`). Ce code vient de l'objet Sage LOCATIONENTITY (`IntacctService::getEntites`). Il sert la société et les comptes bancaires. Ce n'est pas le LOCATIONID du projet : les 105 HEC ont une société et un `location_id` vide.

`programmes.entite_id` pointe vers `entites` (`Entite.php`, `intacct_id`). Les codes MTP000, MARSE, NARB0 sont des LOCATION (`IntacctService::getEtablissements`, table `etablissements.location_id`). E-13 et E-04 ont la forme d'un `entites.intacct_id`. Les cinq codes sont cités comme LOCATIONID de projet dans `docs/suivi/SUIVI_1607_synchronisation_projets_sage.md` ligne 85.

La liste proposée est l'union des `etablissements` actifs (`location_id`) et des `entites` actives (`intacct_id`), sans doublon.

Les cinq programmes sans projet n'ont pas été relus : MySQL local refusé (`SQLSTATE[HY000] [2002]`, hôte 127.0.0.1:3306, base erp_immo). Leurs `enseigne_id` / `entite_id` ne sont pas inventés.

## MAPPING ENTITÉ

| Libellé affiché | Valeur postée | Envoyée à Sage |
|---|---|---|
| `CODE — nom` (liste locations + entités) | `programmes.projet_sage_location_id` | `LOCATIONID` |

La société du programme est affichée à côté, elle n'est pas sélectionnée.

## STOCKAGE

Migration `projet_sage_location_id` nullable sur `programmes`. Aucune colonne existante ne stockait le choix de la compta pour le projet. `entite_id` n'est pas modifié.

## SYNTHÈSE

Lecture `lireProjetParProjectId` avant `creerProjet` (même `sendRequest` que `creerFournisseur`). Déjà présent : miroir mis à jour, message, pas de create. Échec : message Sage, pas de ligne « créé ». Projet déjà au miroir : 422, rien envoyé à Sage. Entité absente ou hors liste : 422. Bouton inactif tant que l'entité n'est pas choisie.

## DÉPLOIEMENT-TEST

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

Recette : bouton inactif et 422 sans entité ; 422 hors liste ; HEC34-011 choisi par la compta puis vérifié dans Sage ; enseigne autre que 1 et 2 refusée ; PROJECTID déjà dans Sage sans ligne miroir : pas de création, miroir à jour ; 105 HEC existants : entité vide, rouge, non éditable. Compte hors GS_COMPTABILITE et GS_ADMIN_ERP (Manon Koelh ou Christelle Requena si elles n'y sont pas) : 403.

## LEÇON

LOCATIONID du projet et société Intacct sont deux champs. Ne pas pré-remplir l'un avec l'autre. Le miroir des projets date : lire Sage avant d'écrire.
