@inject('renderer', 'App\Domains\Encyclopedia\Services\ContentRenderer') @php // Maillage interne automatique : lie les autres termes cités vers leur fiche. $renderer->linkGlossaryTerms(true, $term->slug); $e = $term->enrichment ?? []; $levels = [ 'debutant' => ['Débutant', 'Comprendre vite, sans jargon.', $term->definition_beginner], 'standard' => ['Standard', "L'essentiel pour agir correctement.", $term->definition_standard], 'expert' => ['Expert', "Précision pour l'homme de droit.", $term->definition_expert], ]; $currentDef = $levels[$level][2] ?? $term->definition_standard; $hasIdentity = !empty($e['identity']) && collect(['procedure','stade','qui'])->contains(fn($k) => !empty($e['identity'][$k])); $hasRefs = $term->legislation_note || $term->regulation_note; $hasWho = !empty($e['who_concerned']) || !empty($e['who_decides']); $hasProsCons = !empty($e['advantages']) || !empty($e['limits']) || !empty($e['risks']); $hasTerminology = !empty($e['synonyms']) || !empty($e['abbreviations']) || !empty($e['former_names']) || !empty($e['translation_en']); $ep = $e['expert_plus'] ?? []; $hasExpertPlus = !empty($ep) && collect(['strategy','doctrine','checklist','common_errors','international','reform_outlook'])->contains(fn($k) => !empty($ep[$k])); $media = $e['media'] ?? []; $hasMedia = !empty($media['video_url']) || !empty($media['podcast_url']); $importance = [ 'essentiel' => ['Notion essentielle', 'border-rep-blue text-rep-blue'], 'avance' => ['Notion avancée', 'border-title-2 text-title-2'], 'pointu' => ['Notion pointue', 'border-alert-urgence text-alert-urgence'], ][$e['importance'] ?? ''] ?? null; // Progressivité des niveaux : le débutant lit une fiche succincte // (définition, utilité, exemple, vigilance, à retenir), le standard le // déroulé complet, l'expert seul voit jurisprudence, historique, // réformes et analyse expert +. $rangNiveau = ['debutant' => 0, 'standard' => 1, 'expert' => 2][$level] ?? 1; $minNiveau = [ 'quand' => 1, 'qui' => 1, 'comment' => 1, 'chronologie' => 1, 'ordonnances' => 1, 'types' => 1, 'conditions' => 1, 'effets' => 1, 'avantages-limites' => 1, 'delais' => 1, 'statistiques' => 1, 'cas-pratiques' => 1, 'idees-recues' => 1, 'vrai-faux' => 1, 'quiz' => 1, 'documents' => 1, 'jurisprudence' => 2, 'historique' => 2, 'reformes' => 2, 'expert-plus' => 2, ]; $montre = fn (string $id): bool => $rangNiveau >= ($minNiveau[$id] ?? 0); // Sommaire « Sur cette page » : sections réellement présentes, dans l'ordre d'affichage. $toc = [['definition', 'Définition']]; if (!empty($e['utility'])) $toc[] = ['a-quoi', 'À quoi ça sert']; if (!empty($e['when'])) $toc[] = ['quand', "Quand & où ça s'applique"]; if ($hasWho) $toc[] = ['qui', 'Qui est concerné']; if (!empty($e['how'])) $toc[] = ['comment', 'Comment ça se passe']; if (!empty($e['chronology'])) $toc[] = ['chronologie', 'Déroulé dans le temps']; if (!empty($e['ordonnances'])) $toc[] = ['ordonnances', 'Décisions et recours']; if (!empty($e['types'])) $toc[] = ['types', 'Les différents types']; if (!empty($e['conditions'])) $toc[] = ['conditions', "Conditions d'application"]; if (!empty($e['effects'])) $toc[] = ['effets', 'Effets juridiques']; if ($hasProsCons) $toc[] = ['avantages-limites', 'Avantages, limites, risques']; if (!empty($e['deadlines'])) $toc[] = ['delais', 'Délais-clés']; if (!empty($e['stats'])) $toc[] = ['statistiques', 'Statistiques']; if (!empty($e['example'])) $toc[] = ['exemple', 'Exemple concret']; if (!empty($e['practical_cases']))$toc[] = ['cas-pratiques', 'Cas pratiques']; if (!empty($e['vigilance'])) $toc[] = ['vigilance', 'Points de vigilance']; if (!empty($e['misconceptions'])) $toc[] = ['idees-recues', 'Idées reçues']; if (!empty($e['truefalse'])) $toc[] = ['vrai-faux', 'Vrai / Faux']; if (!empty($e['quiz'])) $toc[] = ['quiz', 'Quiz']; if (!empty($e['next'])) $toc[] = ['que-faire', 'Que faire maintenant']; if (!empty($e['faq'])) $toc[] = ['faq', 'Questions fréquentes']; if (!empty($e['jurisprudence'])) $toc[] = ['jurisprudence', 'Jurisprudence']; if (!empty($e['history'])) $toc[] = ['historique', 'Historique']; if (!empty($e['reforms'])) $toc[] = ['reformes', 'Réformes en cours']; if ($hasExpertPlus) $toc[] = ['expert-plus', 'Analyse expert +']; if ($hasRefs) $toc[] = ['references', 'Références des lois']; if ($term->context_note) $toc[] = ['contexte', 'Contexte']; if (!empty($e['documents'])) $toc[] = ['documents', 'Documents associés']; if (!empty($e['related'])) $toc[] = ['notions-liees', 'Notions liées']; // Index inverse : les fiches dont le texte emploie ce terme. Déduit du // contenu publié, jamais saisi à la main. $citations = \App\Domains\Reference\Services\CitationsCroisees::pour($term); if ($citations->isNotEmpty()) $toc[] = ['cite-par', 'Cité par']; // Voisines de la famille principale : le seul maillage qui atteigne les // fiches que personne ne cite. Voisinage alphabétique autour du terme, // stable d'une visite à l'autre. $famillePrincipale = $term->famillePrincipale; $voisines = collect(); if ($famillePrincipale) { $memeFamille = \App\Domains\Reference\Models\GlossaryTerm::published() ->whereKeyNot($term->getKey()) ->whereHas('familles', fn ($f) => $f->where('famille', $famillePrincipale->famille)->where('principale', true)) ->orderBy('term') ->get(['id', 'term', 'slug']); $rang = $memeFamille->search(fn ($t) => $t->term > $term->term); $rang = $rang === false ? $memeFamille->count() : $rang; $voisines = $memeFamille->slice(max(0, $rang - 4), 8)->values(); } if ($voisines->isNotEmpty()) $toc[] = ['meme-famille', 'Dans la même famille']; if (!empty($e['retenir'])) $toc[] = ['a-retenir', 'À retenir']; $toc = array_values(array_filter($toc, fn ($entree) => $montre($entree[0]))); // Temps de lecture indicatif par niveau (déf. + déroulé partagé), ~180 mots/min. $sharedWords = str_word_count(strip_tags((string) ($e['utility'] ?? '').' '.($e['when'] ?? '').' '.($e['how'] ?? '').' '.($e['example'] ?? '').' '.implode(' ', $e['vigilance'] ?? []).' '.$term->context_note)); $readMin = []; foreach ($levels as $k => $lv) { $w = str_word_count(strip_tags((string) $lv[2])) + $sharedWords; $readMin[$k] = max(1, (int) ceil($w / 180)); } // Profils → niveau de lecture ; mémorisés en cookie et appliqués partout. $profiles = \App\Support\ReadingProfile::PROFILES; $currentProfile = $profile ?? null; @endphp @php $graph = []; $graph[] = array_filter([ '@type' => 'DefinedTerm', 'name' => $term->term, 'description' => $term->definition_beginner, 'alternateName' => array_values(array_filter(array_merge($e['synonyms'] ?? [], $e['abbreviations'] ?? []))) ?: null, 'inLanguage' => 'fr-FR', 'url' => route('glossaire.show', $term), 'inDefinedTermSet' => route('glossaire.index'), ]); $graph[] = [ '@type' => 'Article', 'headline' => $term->term.' : définition et explications', 'description' => $term->definition_beginner, 'inLanguage' => 'fr-FR', 'mainEntityOfPage' => route('glossaire.show', $term), 'datePublished' => optional($term->created_at)->toIso8601String(), 'dateModified' => optional($term->updated_at)->toIso8601String(), 'author' => [ '@type' => 'Person', 'name' => 'Alexandre Baumberger', 'description' => 'Ancien juge au tribunal de commerce de Bordeaux (2018-2026) : juge du contentieux, juge des procédures collectives et juge-commissaire.', 'url' => route('page.apropos'), ], 'publisher' => [ '@type' => 'Organization', 'name' => 'SauverMonEntreprise.fr', 'url' => route('home'), 'logo' => ['@type' => 'ImageObject', 'url' => asset('img/og-default.png')], ], ]; $graph[] = [ '@type' => 'BreadcrumbList', 'itemListElement' => [ ['@type' => 'ListItem', 'position' => 1, 'name' => 'Accueil', 'item' => route('home')], ['@type' => 'ListItem', 'position' => 2, 'name' => 'Glossaire', 'item' => route('glossaire.index')], ['@type' => 'ListItem', 'position' => 3, 'name' => $term->term, 'item' => route('glossaire.show', $term)], ], ]; if (!empty($e['faq'])) { $graph[] = [ '@type' => 'FAQPage', 'mainEntity' => collect($e['faq'])->map(fn ($qa) => [ '@type' => 'Question', 'name' => $qa['q'] ?? '', 'acceptedAnswer' => ['@type' => 'Answer', 'text' => strip_tags((string) preg_replace('/\[\[[^\]]+\]\]/', '', $qa['a'] ?? ''))], ])->values()->all(), ]; } $jsonld = ['@context' => 'https://schema.org', '@graph' => $graph]; @endphp
{{-- Frise du parcours : bandeau en haut, pour situer où l'on est --}} @if (!empty($e['timeline']))
    @foreach ($e['timeline'] as $step) @php $isCurrent = !empty($step['current']); @endphp
  1. {{ $step['step'] ?? '' }} @unless ($loop->last)@endunless
  2. @endforeach
@endif
{{-- ══ Colonne coach : le déroulé du mot ══ --}} {{-- ══ Colonne gauche : le sommaire, seul, navigation pure ══ --}}

{{ $term->term }}

@if ($importance) {{ $importance[0] }} @endif
{{-- Familles thématiques : la principale d'abord, en chemin vers l'index filtré. C'est l'entrée « je ne connais pas le mot ». --}} @php $famillesDuTerme = $term->familles->sortByDesc('principale')->values(); @endphp @if ($famillesDuTerme->isNotEmpty())
@foreach ($famillesDuTerme as $affectation) {{ $affectation->nom() }} @endforeach
@endif @if ($term->definition_beginner)

{{ $renderer->html($term->definition_beginner) }}

@endif {{-- Sélecteur de niveau (mobile ; la sidebar le porte sur desktop) --}}
@foreach ($levels as $key => [$label, $desc, $def]) {{ $label }} @endforeach
{{-- Espacement généreux et croissant : le déroulé « respire » de plus en plus. --}}
Rédigé sous la direction d'Alexandre Baumberger, ancien juge au tribunal de commerce de Bordeaux (2018-2026), juge du contentieux, juge des procédures collectives et juge-commissaire · mis à jour le {{ $term->updated_at?->translatedFormat('j F Y') }}. Survolez les références (ex. Art. L631-1) pour lire le texte exact, son état et sa source. Contenu vérifié par l'équipe éditoriale ; signalez toute erreur ci-dessous.
{{-- ══ Sidebar constant : niveau de lecture + sommaire ══ --}}
{{-- Scroll-spy : surligne en rouge la rubrique courante dans le sommaire --}}