@php use App\Support\PdfText; $nombre = static fn ($v): string => number_format((float) $v, 1, ',', ' '); @endphp {{-- Fiche bénéficiaire — une page, imprimable (v2.0 §11). Tout ce qu'un agent de la SMIT peut demander sur une personne tient ici : sa progression, ses heures détaillées par nature, ses quiz, ses livrables, ses présences. Densité assumée, corps de texte réduit : la contrainte de la page unique prime sur le confort de lecture, parce qu'une fiche de trois pages ne se glisse pas dans un dossier. --}}
@php $logo = \App\Support\Identite::cheminLogo(); @endphp @if ($logo !== null) @endif
{{ $companyName }}
Fiche de suivi d'incubation
{{ PdfText::clean($apprenant->programme?->titre_fr ?? '') }}
Marché {{ PdfText::clean($apprenant->programme?->referenceMarche() ?? '—') }}
{{ PdfText::clean($apprenant->programme?->nomAcheteur() ?? '') }}
{{ PdfText::clean($apprenant->nomComplet) }}
@if (filled($apprenant->projet_intitule)) Projet : {{ PdfText::clean($apprenant->projet_intitule) }}
@endif {{ PdfText::clean(collect([$apprenant->village, $apprenant->douar])->filter()->implode(' · ')) ?: '—' }} @if ($apprenant->annee_naissance) · née/né en {{ $apprenant->annee_naissance }} @endif @if ($apprenant->telephone) · {{ $apprenant->telephone }} @endif
Parcours : {{ PdfText::clean($apprenant->parcours?->titre_fr ?? 'non affecté') }} · Statut : {{ $apprenant->statut?->label() }} · Dernière activité : {{ $apprenant->derniere_activite_at?->format('d/m/Y') ?? 'jamais' }}

Volume horaire d'incubation

{{ $nombre($heures) }} h objectif contractuel
{{ $nombre($objectif) }} h · {{ $pourcentage }} %
{{-- La jauge quadricolore : une couleur par nature, comme côté bénéficiaire. --}}
@foreach ($natures as $ligne) @if ($ligne['part'] > 0) @endif @endforeach @php $reste = max(0, 100 - collect($natures)->sum('part')); @endphp @if ($reste > 0) @endif
@if ($atteint) Objectif horaire atteint. @elseif ($projection) Au rythme actuel, l'objectif sera atteint le {{ $projection->format('d/m/Y') }}. @else Rythme insuffisant pour projeter une date d'atteinte. @endif @if ($eligibilite['eligible']) attestation possible @endif

Heures par nature

@foreach ($natures as $ligne) @endforeach
{{ $ligne['nature']->label() }} {{ $nombre($ligne['heures']) }} h

Parcours pédagogique

@forelse ($etapes as $etape) @empty @endforelse
{{ PdfText::clean($etape['module']->titre_fr) }} {{ $etape['sequences_terminees'] }}/{{ $etape['sequences_total'] }} {{ ['termine' => 'terminé', 'en_cours' => 'en cours', 'a_venir' => 'à venir', 'verrouille' => 'verrouillé'][$etape['etat']] }}
Aucun module rattaché au parcours.

Quiz réussis

@forelse ($quiz as $tentative) @empty @endforelse
{{ PdfText::clean($tentative->quiz?->titre_fr ?? '') }} {{ $tentative->score }} % {{ $tentative->terminee_at?->format('d/m/Y') }}
Aucun quiz réussi à ce jour.

Livrables

@forelse ($rendus as $rendu) @empty @endforelse
{{ PdfText::clean($rendu->livrable?->titre_fr ?? '') }} {{ $rendu->mode?->label() }} {{ $rendu->statut?->label() }}
Aucun livrable rendu à ce jour.

Présences aux sessions collectives

@forelse ($presences as $presence) @empty @endforelse
{{ PdfText::clean($presence->session?->titre ?? '') }} {{ PdfText::clean($presence->session?->lieu ?? '') }} {{ $presence->session?->date?->format('d/m/Y') }}
Aucune présence enregistrée.
@unless ($eligibilite['eligible'])

Conditions restant à remplir pour l'attestation de bonne fin

{{ implode(' ', $eligibilite['motifs']) }}
@endunless
{{ $companyName }} — fiche établie le {{ $generatedAt->format('d/m/Y à H:i') }}. Document interne contenant des données personnelles : diffusion restreinte.