---
name: project-formulaires-ux
description: Améliorations UX des formulaires Nouvel investissement et Nouveau remboursement (session 2026-05-30)
metadata: 
  node_type: memory
  type: project
  originSessionId: c75c80b6-ddc2-47f8-8f5d-1b772f53c3b5
---

## Formulaire "Nouveau remboursement" (Remboursements.jsx)

- **Investissement select** : les bonus (🎁 Bonus Parrainage, 🏆 Bonus Plateforme) apparaissent en tête de liste, avant le séparateur et les investissements
- **Investissement select** : les investissements sont préfixés du nom de plateforme (`Indemo — LV0000109486 (64,69 €)`) et triés alphabétiquement par plateforme puis nom projet
- **Ouverture** : aucun investissement présélectionné (valeur `''` → tiret)
- **Bonus — champ "Investisseur bénéficiaire" supprimé** : `bonus_investisseur_id` est auto-déduit de `plateforme.investisseur_id` lors de la sélection de la plateforme dans le select bonus
- **Bonus — layout** : ligne 1 = Investissement (span 1) + Plateforme (span 2) ; ligne 2 = Date (span 1) + Montant (span 2)

**Why:** UX — éviter la saisie redondante du détenteur déjà porté par la plateforme ; meilleure lisibilité de la liste d'investissements.

**How to apply:** Si un futur formulaire bonus est ajouté, appliquer le même pattern : pas de champ détenteur visible, dériver depuis la plateforme sélectionnée.

---

## Formulaire "Nouvel investissement" (Investissements.jsx)

- **Plateforme** : aucune plateforme présélectionnée à l'ouverture (tiret par défaut) — corrigé dans `openNew()`, et les deux `useEffect` (`?new=1` et `pendingNew`)
- **Champ "Détenteur" supprimé** : remplacé par `<input type="hidden">` ; `investisseur_id` est auto-alimenté via `investisseurForPlat(platId)` dès qu'une plateforme est choisie
- **Champs obligatoires ajoutés** : Taux annuel (`required`), Durée en mois (`required`), Date 1ère échéance (`required`) — validation navigateur uniquement, pas de contrainte DB

**Why:** Simplifier la saisie et éviter des investissements sans données financières essentielles.

**How to apply:** Ne pas recréer le select Détenteur dans ce formulaire ; la logique `investisseurForPlat` dans le onChange de la plateforme suffit.
