@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; // 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']; // 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 $definedTerm = 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'), ]); $jsonld = \App\Support\StructuredData::graph( $definedTerm, \App\Support\StructuredData::article( $term->term.' : définition et explications', $term->definition_beginner, route('glossaire.show', $term), $term->created_at, $term->updated_at, ), \App\Support\StructuredData::breadcrumb([ 'Glossaire' => route('glossaire.index'), $term->term => route('glossaire.show', $term), ]), \App\Support\StructuredData::faq($e['faq'] ?? []), ); @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 ══ --}}

{{ $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) et juge-commissaire en procédures collectives · 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 --}}