@inject('renderer', 'App\Domains\Encyclopedia\Services\ContentRenderer') @inject('surligneur', 'App\Domains\LegalCorpus\Services\LegalTextHighlighter') @php // Maillage interne : le COMMENTAIRE est lié au glossaire, jamais le texte de // loi. Le texte officiel passe par $surligneur ; la seule citation rendue // par $renderer (l'alinéa annoté) désactive explicitement la liaison. $renderer->linkGlossaryTerms(true); $v = $article->currentVersion; $onglet = in_array(request()->query('onglet'), ['texte','historique','fiches'], true) ? request()->query('onglet') : 'texte'; $tabs = ['texte' => 'Texte en vigueur', 'historique' => 'Historique', 'fiches' => 'Fiches liées']; $codeName = $article->division?->code?->name ?? 'Code de commerce'; // Renvois cliquables : tout article cité et présent au corpus devient un lien. $renvois = \App\Domains\LegalCorpus\Models\LegalArticle::pluck('slug', 'number') ->map(fn ($slug) => route('livre6.show', $slug))->all(); $isCommerce = $codeName === 'Code de commerce'; @endphp @if ($v) {{-- Deux entités distinctes, et c'est volontaire : la Legislation décrit le texte officiel (non signé, daté par son entrée en vigueur), l'Article décrit le commentaire éditorial qui l'entoure (signé et daté par nous). Les confondre reviendrait à s'attribuer la paternité du texte de loi. --}} @endif

Article {{ $article->number }} du {{ $codeName }}

{{-- Bandeau d'état --}} @if ($v)
{{ $v->statusLabel() }} Depuis le {{ $v->effective_from?->format('d/m/Y') }} @if ($v->source) · Source : @if($v->source->url){{ $v->source->name }}@else{{ $v->source->name }}@endif @endif
@unless ($v->isValidated()) {{-- Deux situations très différentes, qu'il serait trompeur de confondre : un texte officiel déjà importé de Légifrance (identifiant LEGIARTI), qui n'attend qu'une relecture, et un contenu de démonstration, qui n'a aucune valeur. --}} @php $texteOfficiel = str_starts_with((string) $v->official_id, 'LEGIARTI'); @endphp
@if ($texteOfficiel) Texte officiel, relecture en cours. Le texte ci-dessous est celui publié par Légifrance (identifiant {{ $v->official_id }}), repris intégralement et sans modification. Il n'a pas encore été relu par notre relecteur juridique : vérifiez sa version en vigueur à la source avant tout usage engageant. @else Contenu en attente de validation juridique. Le texte affiché est une paraphrase de démonstration ; le texte officiel intégral sera importé depuis la source puis validé avant publication. @endif
@endunless @endif {{-- Onglets (rendu serveur) --}}
@foreach ($tabs as $key => $label) {{ $label }} @endforeach
@if ($onglet === 'texte') @php $c = $article->commentary; @endphp {{-- L'essentiel, lisible en quelques secondes --}} @if ($c && $c->gist)
L'essentiel en quelques secondes
    @foreach ($c->gist as $point)
  • {{ $renderer->html($point) }}
  • @endforeach
@endif {{-- Lecture annotée : chaque alinéa avec ses idées en gras, et en regard les textes réglementaires qui s'y rapportent. --}} @if ($c && $c->annotated)
Partie législative
@foreach ($c->annotated as $alinea)
{{-- Citation du texte de loi : aucune liaison insérée dans l'officiel. --}}

{{ $renderer->linkGlossaryTerms(false)->html($alinea['text']) }}

{{-- Réactivé hors du @if : une note absente ne doit pas éteindre le maillage pour le reste de la boucle. --}} @php $renderer->linkGlossaryTerms(true); @endphp @if (! empty($alinea['note']))

{{ $renderer->html($alinea['note']) }}

@endif
@forelse ($alinea['regulations'] ?? [] as $reg) @php $slug = $crossLinksInCorpus[$reg['article']] ?? null; @endphp
@if ($slug) Art. {{ $reg['article'] }} @else Art. {{ $reg['article'] }} @endif

{{ $renderer->html($reg['gist']) }}

@empty

Pas de texte réglementaire propre à cet alinéa.

@endforelse
@endforeach
@endif {{-- Texte brut : replié quand la lecture annotée existe (pas de doublon), déplié sinon. La fidélité au texte officiel reste accessible d'un clic. --}} @if ($c && $c->annotated)
Lire le texte officiel brut, sans annotation @if (($crossLinks ?? collect())->isNotEmpty())
Tous les textes répertoriés en regard
    @foreach ($crossLinks as $link) @php $number = $crossLinksAreRegulations ? $link->regulation_number : $link->law_number; $target = $crossLinksInCorpus[$number] ?? null; @endphp
  • @if ($target) Art. {{ $number }} @else Art. {{ $number }} @endif
  • @endforeach
@endif
@else {{-- Deux colonnes, dans un ordre invariable : la loi à gauche, son application réglementaire à droite. Quand l'article consulté est un R, c'est donc lui qui passe à droite et ses textes de base législatifs qui occupent la gauche. --}} @php // $crossLinksAreRegulations vaut vrai quand l'article consulté est // législatif : les renvois sont alors des textes réglementaires. $articleEstLegislatif = $crossLinksAreRegulations ?? true; @endphp
@include('pages.livre6.partials.panneau', [ 'nature' => 'legislatif', 'role' => $articleEstLegislatif ? 'principal' : 'renvois', ]) @include('pages.livre6.partials.panneau', [ 'nature' => 'reglementaire', 'role' => $articleEstLegislatif ? 'renvois' : 'principal', ])
@endif {{-- Explication de texte et stratégie --}} @if ($c) {{-- « Ce que dit ce texte » n'est affiché que si la lecture annotée n'existe pas : sinon les alinéas commentés font déjà ce travail. --}}
@unless ($c->annotated)
Ce que dit ce texte

{{ $renderer->html($c->synthesis) }}

@endunless @if ($c->strategy)
Comment gérer cet article

{{ $renderer->html($c->strategy) }}

@endif
@if ($c->strengths || $c->weaknesses)
@if ($c->strengths)
Forces pour le dirigeant
    @foreach ($c->strengths as $item)
  • {{ $renderer->html($item) }}
  • @endforeach
@endif @if ($c->weaknesses)
Faiblesses et pièges
    @foreach ($c->weaknesses as $item)
  • {{ $renderer->html($item) }}
  • @endforeach
@endif
@endif

Analyse rédigée par la rédaction du site : elle éclaire le texte officiel sans s'y substituer et ne constitue pas un conseil juridique personnalisé.

@endif @elseif ($onglet === 'historique') @php $versions = $article->versions->sortByDesc('effective_from'); @endphp
Comment lire cet historique

Un article de code n'est pas figé : il est réécrit par les lois et ordonnances successives. Chaque ligne ci-dessous est une version, avec la période pendant laquelle elle s'est appliquée. La version en vigueur est celle qui s'applique aujourd'hui ; les versions antérieures restent utiles, car une procédure ouverte sous l'empire d'un texte ancien lui demeure souvent soumise.

    @foreach ($versions as $version) @php $enVigueur = $version->isInForce() && ! $version->effective_to; $duree = $version->effective_from ? $version->effective_from->locale('fr')->translatedFormat('j F Y') : null; @endphp
  1. @if ($enVigueur) En vigueur @else {{ $version->statusLabel() }} @endif Depuis le {{ $duree }} @if ($version->effective_to) jusqu'au {{ $version->effective_to->locale('fr')->translatedFormat('j F Y') }} @endif
    Identifiant officiel : {{ $version->official_id ?? '-' }}
    Source : @if ($version->source?->url) {{ $version->source->name }} @else {{ $version->source->name ?? '-' }} @endif
    @if ($version->official_id) @endif
    {{ $enVigueur ? 'Pourquoi cette version s\'applique' : 'Pourquoi cette version ne s\'applique plus' }}

    @if ($enVigueur) C'est la dernière rédaction publiée, entrée en vigueur le {{ $duree }} et non abrogée à ce jour. Elle s'applique aux situations en cours, sous réserve des dispositions transitoires propres au texte qui l'a modifiée. @else Cette rédaction a été remplacée @if ($version->effective_to) le {{ $version->effective_to->locale('fr')->translatedFormat('j F Y') }} @endif par une version postérieure. Elle reste pertinente pour les procédures ouvertes pendant sa période d'application. @endif

    Texte de cette version

    {{ $surligneur->html($version->content, $renvois) }}

  2. @endforeach
@if ($versions->count() === 1)

Une seule version est présente au corpus. Les rédactions antérieures restent consultables sur Légifrance via le lien ci-dessus.

@endif @else @php $termesLies = \App\Domains\Reference\Models\GlossaryTerm::where('status', 'publie') ->where(fn ($q) => $q->where('legislation_note', 'like', '%[['.$article->number.']]%') ->orWhere('regulation_note', 'like', '%[['.$article->number.']]%') ->orWhere('definition_expert', 'like', '%[['.$article->number.']]%')) ->orderBy('term')->limit(12)->get(['term', 'slug', 'definition_beginner']); @endphp @if ($article->encyclopediaEntries->isNotEmpty() || $termesLies->isNotEmpty())

Cet article est cité et expliqué dans les contenus suivants. Les fiches donnent le contexte pratique ; l'article donne le texte exact.

@if ($article->encyclopediaEntries->isNotEmpty())

Fiches de l'encyclopédie

    @foreach ($article->encyclopediaEntries as $entry)
  • {{ $entry->title }}

    {{ $entry->summary }}

  • @endforeach
@endif @if ($termesLies->isNotEmpty())

Notions du glossaire

    @foreach ($termesLies as $terme)
  • {{ $terme->term }}

    {{ \Illuminate\Support\Str::limit(strip_tags((string) preg_replace('/\*\*/', '', $terme->definition_beginner)), 130) }}

  • @endforeach
@endif
@else

Aucun contenu ne cite encore cet article.

@endif @endif
{{-- La signature porte sur le commentaire éditorial, pas sur le texte de loi : la date affichée est celle de notre dernière révision de la fiche. --}}