---
name: project_drillcellpanel_dashboard
description: DrillCellPanel permanent sur Dashboard + navigation croisée Dashboard↔Remboursements
metadata: 
  node_type: memory
  type: project
  originSessionId: 8667511a-3e20-485e-b8ed-c038934d7ec3
---

## DrillCellPanel permanent sur Dashboard

- Remplace le tableau "Échéances prévues du mois en cours" (supprimé)
- Toujours visible en bas du Dashboard (`alwaysOpen=true`), initialisé sur le mois courant, toutes plateformes
- Cliquer une cellule du TIP (TableauInteretsPlateforme) met à jour le DrillCellPanel via `setDrillCell`
- Props passées : `cell`, `alwaysOpen`, `pfuRates`, `activeView`, `activeId`, `plateformes`, `investissements=[]`, `onBulkDone`, `onEditRecu`, `onEditProjet`

**Why:** Remplace un tableau statique par un panneau drill-down interactif, cohérent avec la page Remboursements.

## Navigation Dashboard → Remboursements → retour

### Dashboard (`onEditRecu` / `onEditProjet`)
- Reçu cliqué : `navigate('/remboursements?edit-remb=ID&from=dashboard&drill-annee=X&drill-mois=Y[&drill-plat=Z]')`
- Projeté cliqué : `navigate('/remboursements?open-simul=INV_ID&simul-date=DATE&simul-capital=C&simul-interets=I&from=dashboard&drill-annee=X&drill-mois=Y[&drill-plat=Z]')`
- Restauration drillCell au retour : `useSearchParams` lit `drill-annee`, `drill-mois`, `drill-plat` dans `_initDrillCell()`
- Les params URL sont nettoyés au premier rendu (`setSearchParams({}, { replace: true })`)

### Remboursements (auto-ouverture)
- `autoOpenRef = useRef(false)` — ouverture une seule fois
- `backToDashboardRef = useRef(null)` — mémorise l'URL de retour `/?drill-annee=X&drill-mois=Y[&drill-plat=Z]`
- `useEffect([allRows.length, investissements.length, plateformes.length])` — attend que les données soient chargées
  - `edit-remb` → cherche dans `allRows`, appelle `openEdit(remb)`
  - `open-simul` → reconstruit l'objet simul depuis les params, appelle `openFromSimul({...})`
  - Nettoie l'URL avec `navigate('/remboursements', { replace: true })`
- `close()` modifié : si `backToDashboardRef.current`, navigate vers cette URL puis réinitialise la ref

**How to apply:** Tout nouveau lien "ouvrir modal depuis une autre page" doit suivre ce pattern URL params + autoOpenRef + backRef.
