Merge ARCHITECTURE.md into README, expand Légifrance section on transparence
- README: add sommaire, integrate full architecture content (diagram, components, routes, flows, security, decisions, scalability), add Légifrance articles table and PISTE setup instructions - ARCHITECTURE.md: removed (content fully merged into README) - transparence.tsx: expand Légifrance block with full table of 11 tracked articles (priority, description), cache/resilience/monitoring details Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -86,21 +86,72 @@ export default function Transparence() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-muted/40 border border-border/50 p-5 space-y-2">
|
||||
<div className="bg-muted/40 border border-border/50 p-5 space-y-4">
|
||||
<p className="font-mono text-xs font-semibold uppercase tracking-widest text-primary">Sources légales — Légifrance en temps réel</p>
|
||||
<p className="text-foreground/90 text-sm leading-relaxed">
|
||||
Les textes des articles légaux critiques (Art. 225-1, 24 Loi 1881, Art. 421-2-5…) sont
|
||||
récupérés en temps réel depuis <strong>l'API officielle Légifrance (PISTE)</strong> et injectés
|
||||
dans le prompt avant chaque analyse. Le modèle travaille ainsi sur le texte
|
||||
consolidé du jour, pas sur sa mémoire d'entraînement figée.
|
||||
</p>
|
||||
<p className="text-foreground/90 text-sm leading-relaxed">
|
||||
Les textes sont mis en cache 24 h. Un script de surveillance hebdomadaire
|
||||
(<code className="bg-muted px-1 py-0.5 rounded text-xs">scripts/check_legal_refs.py</code>) détecte
|
||||
tout changement législatif et alerte en cas de modification. Si l'API Légifrance
|
||||
est indisponible, le système bascule automatiquement sur le cadre légal statique
|
||||
intégré au prompt — le filtrage continue sans interruption.
|
||||
Les textes des articles légaux les plus sensibles sont récupérés à chaque analyse
|
||||
depuis <strong>l'API officielle Légifrance (PISTE)</strong> et injectés dans le prompt
|
||||
immédiatement avant les critères d'acceptation. Le modèle travaille ainsi sur les textes
|
||||
consolidés du jour, pas sur sa mémoire d'entraînement figée qui peut dater de
|
||||
plusieurs années.
|
||||
</p>
|
||||
<div className="space-y-2">
|
||||
<p className="text-foreground/90 text-sm font-semibold">Articles surveillés</p>
|
||||
<p className="text-foreground/80 text-xs leading-relaxed">
|
||||
Les articles de priorité <strong>critique</strong> et <strong>haute</strong> sont injectés dans chaque prompt.
|
||||
Les articles <strong>moyenne</strong> sont suivis pour détecter les changements législatifs mais ne sont pas injectés
|
||||
(le cadre légal statique les couvre déjà).
|
||||
</p>
|
||||
<div className="overflow-x-auto">
|
||||
<table className="w-full text-xs border-collapse mt-2">
|
||||
<thead>
|
||||
<tr className="border-b border-border">
|
||||
<th className="text-left py-1.5 pr-4 font-mono uppercase tracking-wider text-muted-foreground">Référence</th>
|
||||
<th className="text-left py-1.5 pr-4 font-mono uppercase tracking-wider text-muted-foreground">Infraction</th>
|
||||
<th className="text-left py-1.5 font-mono uppercase tracking-wider text-muted-foreground">Priorité</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y divide-border/40">
|
||||
{[
|
||||
{ ref: "Code pénal Art. 225-1", desc: "Discrimination", prio: "Critique", color: "text-red-600 dark:text-red-400" },
|
||||
{ ref: "Loi 1881 Art. 24", desc: "Provocation à la haine", prio: "Critique", color: "text-red-600 dark:text-red-400" },
|
||||
{ ref: "Code pénal Art. 222-33", desc: "Harcèlement sexuel", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Code pénal Art. 222-33-2-2", desc: "Cyberharcèlement en meute", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Code pénal Art. 421-2-5", desc: "Apologie du terrorisme", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Code pénal Art. 211-1", desc: "Génocide", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Loi 1881 Art. 24 bis", desc: "Négationnisme", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Code pénal Art. 226-4-1", desc: "Usurpation d'identité numérique", prio: "Haute", color: "text-amber-600 dark:text-amber-400" },
|
||||
{ ref: "Code pénal Art. 212-1", desc: "Crimes contre l'humanité", prio: "Moyenne", color: "text-muted-foreground" },
|
||||
{ ref: "Code pénal Art. 223-13", desc: "Provocation au suicide", prio: "Moyenne", color: "text-muted-foreground" },
|
||||
{ ref: "Loi 1881 Art. 29", desc: "Diffamation", prio: "Moyenne", color: "text-muted-foreground" },
|
||||
].map((row) => (
|
||||
<tr key={row.ref}>
|
||||
<td className="py-1.5 pr-4 font-mono text-foreground/80">{row.ref}</td>
|
||||
<td className="py-1.5 pr-4 text-foreground/70">{row.desc}</td>
|
||||
<td className={`py-1.5 font-semibold ${row.color}`}>{row.prio}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-1.5 text-foreground/80 text-sm">
|
||||
<p>
|
||||
<strong>Cache :</strong> les textes sont mis en cache 24 h (Redis si disponible, sinon mémoire par worker).
|
||||
Un appel API Légifrance n'est effectué qu'à l'expiration du cache.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Surveillance hebdomadaire :</strong> le script{" "}
|
||||
<code className="bg-muted px-1 py-0.5 rounded text-xs">check_legal_refs.py --check</code>{" "}
|
||||
compare les textes courants avec la baseline stockée et retourne un code d'erreur si des
|
||||
modifications sont détectées — intégrable dans une pipeline CI ou un cron.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Résilience :</strong> si l'API Légifrance est indisponible, le système bascule
|
||||
automatiquement sur le cadre légal statique intégré au prompt — le filtrage continue sans
|
||||
interruption et sans dégradation visible.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user