@php use App\Enums\Formation\NatureHeure; use App\Support\PdfText; $nombre = static fn ($v): string => number_format((float) $v, 2, ',', ' '); $natures = NatureHeure::cases(); @endphp {{-- R7 — rapport hebdomadaire de formation / incubation (v2.0 §6). Livrable CONTRACTUEL du marché 048-SMIT-2025. L'en-tête reprend la référence du marché, l'acheteur public, la période et le numéro de semaine ; le pied porte le cachet et la signature, par le même mécanisme que les factures et les devis. Format paysage : douze colonnes de chiffres pour une centaine de bénéficiaires ne tiennent pas en portrait, et un tableau qui déborde n'est pas un livrable. --}}
@php $logo = \App\Support\Identite::cheminLogo(); @endphp @if ($logo !== null) @endif
{{ $companyName }}
R7 — Rapport hebdomadaire de formation / incubation
Marché : {{ PdfText::clean($d['marche'] ?? '—') }}  ·  Acheteur public : {{ PdfText::clean($d['acheteur'] ?? '—') }}
Programme : {{ PdfText::clean(($d['programme']['code'] ?? '').' — '.($d['programme']['titre'] ?? '')) }}  ·  Objectif : {{ $nombre($d['programme']['objectif_heures'] ?? 0) }} h par bénéficiaire
S{{ str_pad((string) ($d['semaine'] ?? ''), 2, '0', STR_PAD_LEFT) }}
du {{ \Illuminate\Support\Carbon::parse($d['periode']['du'])->format('d/m/Y') }}
au {{ \Illuminate\Support\Carbon::parse($d['periode']['au'])->format('d/m/Y') }}
Version {{ $rapport->version }}
{{-- Les cinq chiffres que l'acheteur public regarde en premier. --}} @php $t = $d['totaux'] ?? []; @endphp
Bénéficiaires
{{ $t['beneficiaires'] ?? 0 }}
Actifs cette semaine
{{ $t['actifs_semaine'] ?? 0 }}
Heures de la semaine
{{ $nombre($t['heures_semaine'] ?? 0) }}
Cumul depuis le début
{{ $nombre($t['heures_cumul'] ?? 0) }}
Objectif atteint
{{ $t['objectif_atteint'] ?? 0 }}

Heures accomplies par bénéficiaire et par nature

@foreach ($natures as $nature) @endforeach @forelse ($d['lignes'] ?? [] as $ligne) @foreach ($natures as $nature) @endforeach @empty @endforelse @if (! empty($d['lignes'])) @foreach ($natures as $nature) @endforeach @endif
Bénéficiaire Village Parcours{{ $nature->label() }}Semaine Cumul Objectif Reste %
{{ PdfText::clean($ligne['nom']) }} {{ PdfText::clean($ligne['village'] ?? '') }} {{ PdfText::clean($ligne['parcours'] ?? '') }}{{ $nombre($ligne['par_nature'][$nature->value] ?? 0) }}{{ $nombre($ligne['heures_semaine']) }} {{ $nombre($ligne['heures_cumul']) }} {{ $nombre($ligne['objectif']) }} {{ $nombre($ligne['reste']) }} {{ $ligne['avancement'] }}{{ $ligne['objectif_atteint'] ? ' ✓' : '' }}
Aucun bénéficiaire inscrit à ce programme.
TOTAL{{ $nombre($t['par_nature'][$nature->value] ?? 0) }}{{ $nombre($t['heures_semaine'] ?? 0) }} {{ $nombre($t['heures_cumul'] ?? 0) }} {{ $nombre($t['objectif_global_heures'] ?? 0) }}

Liste de présence aux sessions collectives

@forelse ($d['sessions'] ?? [] as $session)
{{ \Illuminate\Support\Carbon::parse($session['date'])->format('d/m/Y') }} {{ PdfText::clean($session['titre']) }} {{ PdfText::clean($session['lieu'] ?? '') }} {{ PdfText::clean($session['formateur'] ?? '') }} {{ $nombre($session['duree_heures']) }} h Émargement : {{ $session['emargement'] ? 'signé' : 'ABSENT' }}
Présents ({{ count($session['presents']) }}) : {{ count($session['presents']) ? PdfText::clean(implode(' · ', $session['presents'])) : '—' }} @if (count($session['absents']))
Absents ({{ count($session['absents']) }}) : {{ PdfText::clean(implode(' · ', $session['absents'])) }} @endif
@empty

Aucune session collective sur la semaine.

@endforelse

Formation et accompagnement accomplis

@php $aucun = true; @endphp @foreach ($d['achevements'] ?? [] as $a) @php $aucun = false; @endphp @endforeach @foreach ($d['quiz_reussis'] ?? [] as $q) @php $aucun = false; @endphp @endforeach @foreach ($d['livrables'] ?? [] as $l) @php $aucun = false; @endphp @endforeach @if ($aucun) @endif
TypeBénéficiaireModuleIntituléRésultatDate
Séquence{{ PdfText::clean($a['beneficiaire'] ?? '') }} {{ PdfText::clean($a['module'] ?? '') }}{{ PdfText::clean($a['sequence'] ?? '') }} Terminée{{ $a['date'] ? \Illuminate\Support\Carbon::parse($a['date'])->format('d/m/Y') : '' }}
Quiz{{ PdfText::clean($q['beneficiaire'] ?? '') }} {{ PdfText::clean($q['quiz'] ?? '') }} {{ $q['score'] }} %{{ \Illuminate\Support\Carbon::parse($q['date'])->format('d/m/Y') }}
Livrable{{ PdfText::clean($l['beneficiaire'] ?? '') }} {{ PdfText::clean($l['livrable'] ?? '') }} {{ PdfText::clean($l['statut'] ?? '') }} {{ $l['date'] ? \Illuminate\Support\Carbon::parse($l['date'])->format('d/m/Y') : '' }}
Aucun achèvement enregistré sur la semaine.

Bénéficiaires sans aucune activité sur la semaine

@forelse ($d['sans_activite'] ?? [] as $l) @empty @endforelse
BénéficiaireTéléphoneVillageStatutDernière activité
{{ PdfText::clean($l['beneficiaire'] ?? '') }} {{ $l['telephone'] }} {{ PdfText::clean($l['village'] ?? '') }} {{ $l['statut'] }} {{ $l['derniere_activite'] ? \Illuminate\Support\Carbon::parse($l['derniere_activite'])->format('d/m/Y') : 'Jamais' }} @if ($l['jours_sans_activite'] !== null) ({{ $l['jours_sans_activite'] }} j) @endif
Tous les bénéficiaires ont eu une activité cette semaine.
@if (! empty($d['anomalies']))
Heures saisies sans justificatif ({{ count($d['anomalies']) }}) — signalées, non retirées du compteur. @foreach ($d['anomalies'] as $a) @endforeach
BénéficiaireNatureDateHeuresJustificatif attendu
{{ PdfText::clean($a['beneficiaire'] ?? '') }} {{ $a['nature'] }} {{ \Illuminate\Support\Carbon::parse($a['date'])->format('d/m/Y') }} {{ $nombre($a['heures']) }} {{ $a['attendu'] }}
@endif {{-- Cachet et signature : même mécanisme que les factures et les devis (v1.2 §6). --}}
Fait à Fès, le {{ $generatedAt->format('d/m/Y') }}
Pour {{ $companyName }}
@if ($signature) @endif @if ($stamp) @endif
@if ($rapport->transmis_at) Transmis à l'acheteur public le {{ $rapport->transmis_at->format('d/m/Y') }} @endif
{{ $companyName }} — R7 semaine {{ $d['semaine'] ?? '' }}/{{ $d['annee'] ?? '' }}, version {{ $rapport->version }}, généré le {{ $generatedAt->format('d/m/Y à H:i') }}