{{-- v4.3.0 §B6 — LE RAPPORT MENSUEL D'UN ESPACE CLIENT. L'annexe chiffrée du comité de suivi : les trois familles d'indicateurs avec leur cible et leur état, puis ce qui a réellement été fait dans le mois. Aucune raison sociale en dur : l'identité du client vient du tableau de bord, celle de la maison des réglages `company.*`. --}} @php $pct = fn ($v) => $v === null ? '—' : number_format((float) $v, 1, ',', ' ').' %'; $dh = fn ($v) => number_format((float) $v, 2, ',', ' ').' DH'; $nb = fn ($v) => $v === null ? '—' : number_format((float) $v, 0, ',', ' '); $fenetre = $calcules['mois'] ?? []; $cumul = $calcules['cumul'] ?? []; /** L'état d'un indicateur face à sa cible : atteint, à surveiller, ou pas encore mesuré. */ $etat = function (?float $valeur, ?float $cible, bool $plusHautEstMieux = true): array { if ($valeur === null || $cible === null) { return ['—', '#6b7280']; } $atteint = $plusHautEstMieux ? $valeur >= $cible : $valeur <= $cible; return $atteint ? ['atteint', '#047857'] : ['à surveiller', '#b45309']; }; @endphp Rapport mensuel — {{ $dashboard->nom }} — {{ $mois }}

Rapport mensuel — {{ $mois }}

{{ $dashboard->nom }} · {{ $dashboard->client_nom }}@if ($dashboard->reference_marche) · marché {{ $dashboard->reference_marche }}@endif

{{-- ══ Les trois familles d'indicateurs ═══════════════════════════════════════════════════ --}}

Indicateurs contractuels

@php $dt = $fenetre['delais_tenus'] ?? []; $dtc = $cumul['delais_tenus'] ?? []; [$dtLib, $dtCol] = $etat($dtc['ratio'] ?? null, (float) ($cibles['delais_tenus_pct'] ?? 95)); $vp = $fenetre['valides_premier_passage'] ?? []; $vpc = $cumul['valides_premier_passage'] ?? []; [$vpLib, $vpCol] = $etat($vpc['ratio'] ?? null, (float) ($cibles['valides_premier_passage_pct'] ?? 80)); $dr = $fenetre['delai_retour'] ?? []; $drc = $cumul['delai_retour'] ?? []; [$drLib, $drCol] = $etat($drc['moyenne'] ?? null, (float) ($cibles['delai_retour_max_jours'] ?? 5), false); $pen = $fenetre['penalites_theoriques'] ?? []; $penc = $cumul['penalites_theoriques'] ?? []; @endphp
IndicateurDéfinitionCible Le moisCumulÉtat
Délais tenus Livrables remis à la date engagée ou avant / livrables remis ≥ {{ $nb($cibles['delais_tenus_pct'] ?? 95) }} % {{ $pct($dt['ratio'] ?? null) }} {{ $pct($dtc['ratio'] ?? null) }} {{ $dtLib }}
Validés au premier passage Validés sans demande de corrections / validés ≥ {{ $nb($cibles['valides_premier_passage_pct'] ?? 80) }} % {{ $pct($vp['ratio'] ?? null) }} {{ $pct($vpc['ratio'] ?? null) }} {{ $vpLib }}
Délai de retour du client Jours ouvrés entre la remise et la décision (moyenne · maximum) ≤ {{ $nb($cibles['delai_retour_max_jours'] ?? 5) }} j {{ $dr['moyenne'] ?? '—' }} · {{ $dr['max'] ?? '—' }} {{ $drc['moyenne'] ?? '—' }} · {{ $drc['max'] ?? '—' }} {{ $drLib }}
Pénalités théoriques Jours calendaires de retard × {{ rtrim(rtrim(number_format((float) $dashboard->penalite_taux_pour_mille, 3, ',', ' '), '0'), ',') }} ‰, plafond {{ rtrim(rtrim(number_format((float) $dashboard->penalite_plafond_pct, 2, ',', ' '), '0'), ',') }} % 0 DH {{ $dh($pen['montant'] ?? 0) }} {{ $dh($penc['montant'] ?? 0) }} {{ ((float) ($penc['montant'] ?? 0)) > 0 ? ($penc['jours'] ?? 0).' j de retard' : 'atteint' }}

Indicateurs opérationnels

@php $cv = $fenetre['couverture'] ?? []; $cvc = $cumul['couverture'] ?? []; $pr = $fenetre['promesse_tenue'] ?? []; $prc = $cumul['promesse_tenue'] ?? []; $pj = $fenetre['planning_j5'] ?? []; $pjc = $cumul['planning_j5'] ?? []; @endphp
IndicateurDéfinitionLe moisCumul
Couverture des événements Événements couverts / événements annoncés {{ $cv['evenements_couverts'] ?? 0 }} / {{ $cv['evenements_annonces'] ?? 0 }} {{ $cvc['evenements_couverts'] ?? 0 }} / {{ $cvc['evenements_annonces'] ?? 0 }}
Couverture géographique Zones distinctes couvertes / zones du marché {{ $cv['zones_couvertes'] ?? 0 }} / {{ $cv['zones_total'] ?? 0 }} {{ $cvc['zones_couvertes'] ?? 0 }} / {{ $cvc['zones_total'] ?? 0 }}
Promesse du jour même Événements dont toutes les étapes de promesse ont été tenues à l'heure {{ $pr['numerateur'] ?? 0 }} / {{ $pr['denominateur'] ?? 0 }} {{ $prc['numerateur'] ?? 0 }} / {{ $prc['denominateur'] ?? 0 }}
Planning éditorial à l'heure Plannings remis à l'échéance ou avant / plannings dus {{ $pj['numerateur'] ?? 0 }} / {{ $pj['denominateur'] ?? 0 }} {{ $pjc['numerateur'] ?? 0 }} / {{ $pjc['denominateur'] ?? 0 }}

Indicateurs digitaux · saisis depuis le rapport de performance

@forelse ($reseaux as $reseau) @php $s = $saisis['reseaux'][$reseau['cle']] ?? []; @endphp @empty @endforelse
RéseauAbonnésObjectif PublicationsPortéeEngagement Modération
{{ $reseau['libelle'] }} {{ $nb($s['abonnes'] ?? null) }} {{ $nb($reseau['objectif']) }} {{ $nb($s['publications'] ?? null) }} {{ $nb($s['portee'] ?? null) }} {{ $nb($s['engagement'] ?? null) }} {{ ($s['delai_moderation_h'] ?? null) === null ? '—' : $nb($s['delai_moderation_h']).' h' }}
Aucun réseau n'est configuré sur cet espace.
{{-- ══ Ce qui a été fait ══════════════════════════════════════════════════════════════════ --}}

Livrables du mois

@forelse ($livrablesRemis as $livrable) @empty @endforelse
RéférenceTitreRemisValidé
{{ $livrable->reference }} {{ $livrable->titre }} {{ $livrable->remis_le?->format('d/m/Y') ?? '—' }} {{ $livrable->valide_le?->format('d/m/Y') ?? '—' }}
Aucun livrable remis dans le mois.

Publications publiées

@forelse ($publications as $publication) @empty @endforelse
RéférenceTitreCanauxPubliée
{{ $publication->reference }} {{ $publication->titre }} {{ collect($publication->contenu()['canaux'])->map(fn ($c) => $dashboard->libelleDuReseau($c))->implode(', ') ?: '—' }} {{ $publication->publiee_le?->format('d/m/Y') ?? '—' }}
Aucune publication publiée dans le mois.

Événements couverts

@forelse ($evenements as $evenement) @empty @endforelse
DateÉvénementLieuDispositif
{{ $evenement->date->format('d/m/Y') }} {{ $evenement->titre }} {{ $evenement->lieu ?: '—' }}{{ $evenement->libelleDeLaZone() ? ' ('.$evenement->libelleDeLaZone().')' : '' }} {{ $evenement->dispositifPhrase() }}
Aucun événement couvert dans le mois.

Commandes signées

@if ($afficherMontants)@endif @forelse ($commandes as $lettre) @if ($afficherMontants)@endif @empty @endforelse
RéférenceObjetSignéeMontant HT
{{ $lettre->reference }} {{ $lettre->objet }} {{ $lettre->signee_le?->format('d/m/Y') ?? '—' }}{{ $dh($lettre->montantHt()) }}
Aucune commande signée dans le mois.

Réception en cours

@if ($reception) @if ($afficherMontants) @endif
{{ $reception->type->label() }} {{ $reception->reference }} {{ $reception->periodePhrase() }} · {{ $reception->statut->label() }}
Montant du décompte{{ $dh($reception->montant_ttc) }} TTC
@else

Aucune période de réception n'a encore été générée pour ce marché.

@endif @if (filled($saisis['commentaire'] ?? null))

Commentaire du mois

{{ $saisis['commentaire'] }}

@endif
{{ $dashboard->nom }} · rapport mensuel {{ $mois }} · établi le {{ $genereLe->format('d/m/Y') }} par {{ $nomDeLaMaison }}