rubis/apps/web/src/lib/glossary.tsx
ordinarthur 6eb9ca4120 feat(ui): GlossaryTerm — tooltip de définition sur DSO / LME / Mise en demeure
Quand un terme métier apparaît (DSO moyen, LME, mise en demeure…), un
petit astérisque rubis à côté indique qu'il est hoverable. Au hover/focus
clavier, une popover s'affiche avec la définition courte (qui ce fait,
pourquoi ça compte, repère LME 30j).

Implémentation :
- components/ui/GlossaryTerm.tsx : wrap n'importe quel ReactNode + définition,
  utilise @radix-ui/react-tooltip (déjà dans la stack pour Dialog), Asterisk
  Lucide en marker, underline pointillée subtile pour signaler "interactif"
- lib/glossary.tsx : définitions centralisées (DSO, LME, mise en demeure,
  encaissé, rubis) — single source of truth, ton produit cohérent
- KpiCard.label / SummaryCard.label passent à React.ReactNode pour
  accepter le wrapping
- Wiring : "DSO moyen" sur dashboard (KpiCard + titre du chart) et /insights
  (récap + titre du chart). LME aussi taggée dans le sous-titre du DSO chart.

Aucun nouveau dep.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 10:15:44 +02:00

47 lines
1.5 KiB
TypeScript

/**
* Glossaire métier — définitions partagées par les tooltips.
* Centraliser ici pour pas réécrire la même chose à 3 endroits + garder
* le ton produit cohérent.
*/
export const GLOSSARY = {
dso: (
<>
<strong>DSO</strong> (Days Sales Outstanding) = délai moyen entre
l'émission d'une facture et son paiement. Plus le chiffre est bas,
plus vous êtes payé vite. La norme française B2B (LME) est{" "}
<strong>30 jours</strong>.
</>
),
lme: (
<>
<strong>LME</strong> = loi de modernisation de l'économie (2008).
Elle plafonne les délais de paiement entre entreprises à{" "}
<strong>60 jours</strong> (ou 45 j fin de mois). Au-delà, sanctions
DGCCRF jusqu'à 2 M.
</>
),
miseEnDemeure: (
<>
<strong>Mise en demeure</strong> = relance formelle écrite avec un
délai impératif (8 jours en général). Étape obligatoire avant toute
procédure judiciaire de recouvrement. Sous Rubis, elle est toujours
validée manuellement avant envoi.
</>
),
encaisse: (
<>
<strong>Encaissé</strong> = montant total des factures effectivement
payées sur la période, hors TVA si non collectée. C'est l'argent
qui est arrivé sur votre compte, pas juste facturé.
</>
),
rubis: (
<>
<strong>1 rubis</strong> = 10 minutes de votre temps libérées par
Rubis. À chaque relance envoyée automatiquement et chaque facture
réglée, vous gagnez un rubis.
</>
),
} as const;