---
suivi: 1117
date: 2026-07-31
sujet: Foncier — documents polymorphes promesse / acte / dossier
chantier: module-foncier
type: feature
statut: poussé
hash: 6e705fd3
fichiers:
  - app/Services/Foncier/FoncierEntityDocumentService.php
  - app/Services/Foncier/FoncierEntityDocumentAccess.php
  - app/Services/Foncier/OffreDocumentService.php
  - app/Support/Foncier/FoncierDocumentProfile.php
  - app/Http/Controllers/Foncier/Concerns/ManagesFoncierEntityDocuments.php
  - app/Http/Controllers/Foncier/OffreFonciereController.php
  - app/Http/Controllers/Foncier/PromesseFonciereController.php
  - app/Http/Controllers/Foncier/ActeFoncierController.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Models/PromesseFonciere.php
  - app/Models/ActeFoncier.php
  - app/Models/DossierFoncier.php
  - resources/js/Components/Foncier/EntityDocumentsPanel.vue
  - resources/js/Pages/Foncier/Offres/Show.vue
  - resources/js/Pages/Foncier/Promesses/Show.vue
  - resources/js/Pages/Foncier/ActesFonciers/Show.vue
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - routes/web.php
  - tests/Feature/Foncier/FoncierEntityDocumentsSourceTest.php
  - tests/Feature/Foncier/FoncierEntityDocumentsTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1117_foncier_documents_promesse_acte_dossier.md
  - public/build/
---

## PROMPT ENVOYÉ

SUIVI #1117 — Brancher documents provisoires (#1110/#1115) sur Promesse, Acte,
Dossier via `entity_documents` polymorphe. Caps différenciés. ACL héritée.
Promesse verrouillée : ajout OK, suppression interdite.

## SYNTHÈSE

Service unique `FoncierEntityDocumentService` + façade BC `OffreDocumentService`.
Profils : offre 10 / acte 15 / promesse 20 / dossier 50. Taille fichier 10 Mo,
requête 120 Mo (inchangé #1115). ACL : offre/promesse/dossier → dossier ;
acte avec dossier → dossier ; acte orphelin → `foncier.lecture` / `foncier.gestion`.
UI partagée `EntityDocumentsPanel` sur les 4 fiches (dossier = onglet Suivi).

## LEÇON

Un seul pipeline upload/ACL/stockage pour quatre morphs évite la divergence
offre vs autres entités ; les caps se documentent dans le profil, pas dans
quatre services copiés-collés.

## DÉPLOIEMENT / TEST

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

Pas de migration. Tests manuels : upload/download/delete sur dossier + promesse
ouverte ; sur promesse verrouillée ajout OK / delete 403 ; acte sans dossier
visible en lecture ; offre inchangée.
