Revue contradictoire

{{ $evaluation->user->full_name }}

Semaine du {{ \Carbon\Carbon::parse($evaluation->week_start_date)->format('d/m/Y') }} @if($evaluation->urgent_review_requested) Revue urgente demandée @endif

@php $topStatusClass = $evaluation->exempted ? 'np-status-exempt' : ($evaluation->status === 'evaluated' ? 'np-status-done' : 'np-status-submitted'); @endphp {{ $evaluation->exempted ? 'Exempté' : ucfirst(str_replace('_', ' ', $evaluation->status)) }}
@if($statusMessage)
{{ $statusMessage }}
@endif {{-- Note d'orientation §15 — "les versions précédentes doivent rester consultables" : historique tiré du journal d'audit, visible uniquement s'il y a effectivement eu réouverture/ re-validation (rien à montrer pour un premier passage). --}} @if($versionHistory->isNotEmpty())
Historique des modifications ({{ $versionHistory->count() }})
@foreach($versionHistory as $entry) @php $actionLabels = [ 'evaluation.validated' => 'Validation', 'evaluation.validated_express' => 'Validation express', 'evaluation.revalidated_after_reopen' => 'Re-validation après réouverture', 'evaluation.reopened' => 'Réouverture', 'evaluation.exempted' => 'Exemption', ]; @endphp
{{ $actionLabels[$entry->action] ?? $entry->action }} {{ $entry->created_at->format('d/m/Y à H:i') }}
par {{ $entry->user?->full_name ?? 'Système' }}
@if($entry->reason)
« {{ $entry->reason }} »
@endif @if(!empty($entry->old_values['previous_manager_notes']))
@foreach($entry->old_values['previous_manager_notes'] as $criterionId => $previous) @if($previous['manager_note'] !== null) @php $criterionName = $evaluation->criterionScores->firstWhere('criterion_id', $criterionId)?->criterion?->name ?? "Critère #{$criterionId}"; @endphp {{ $criterionName }} : ancienne note {{ $previous['manager_note'] }}/5 @endif @endforeach
@endif
@endforeach
@endif @if($evaluation->status === 'evaluated' || $evaluation->status === 'closed' || $evaluation->exempted)

Cette évaluation est terminée.

← Retour au dashboard @if(!$evaluation->exempted && $evaluation->status !== 'closed')
@if(!$showReopenForm) @else
@error('reopenReason') {{ $message }} @enderror
@endif
@endif
@else {{-- Note d'orientation §9 : le manager doit comprendre l'état du dossier "en quelques secondes" — score auto, tendance historique, écarts et irritants en un seul bandeau, avant de descendre dans le détail par critère. --}}
Tendance ({{ count($operatorHistory) }} dernier(s) bilan(s) clos)
@if(count($operatorHistory))
@foreach($operatorHistory as $point) @php $barHeight = max(4, round(($point['score'] / 5) * 32)); @endphp
@endforeach
Dernier : {{ number_format(end($operatorHistory)['score'], 1) }}/5
@else

Historique insuffisant pour une tendance.

@endif
À vérifier
Écarts récurrents {{ count($historicalDeviationAlerts) }}
Irritants non résolus {{ $unresolvedIrritantsCount }}
Revue express {{ $isExpressEligible ? 'Éligible' : 'Non éligible' }}

Vérification manuelle

Aucune donnée n'est échangée automatiquement : ces liens ouvrent une recherche pré-remplie, à vérifier vous-même.

@if($deepLinks['glpi']) @if($evaluation->user->glpi_user_id) Voir GLPI @else {{-- Le gabarit GLPI filtre par ID technicien (vérifié sur l'instance réelle) : sans cet ID renseigné pour l'opérateur, le lien s'ouvrirait sur une recherche vide plutôt que filtrée — mieux vaut le signaler que de laisser un lien qui a l'air de marcher. --}} ID GLPI non renseigné pour {{ $evaluation->user->full_name }} — à ajouter dans les comptes. @endif @endif @if($deepLinks['call']) Voir 3CX @endif
Manquements signalés par l'opérateur : {{ $evaluation->blockers_text ?: '—' }}
@if($isExpressEligible)

Revue express disponible

Écart historique faible sur les dernières semaines. Valider l'auto-évaluation telle quelle, en un clic.

@endif
@foreach($evaluation->criterionScores as $score) @php $operatorRef = $score->factualReferences->firstWhere('side', 'operator'); $criterionId = $score->criterion_id; @endphp
{{ $score->criterion->name }} @if(isset($historicalDeviationAlerts[$criterionId]) && $historicalDeviationAlerts[$criterionId]) Écart récurrent @endif
@if(isset($historicalDeviationAlerts[$criterionId]))
{{ $historicalDeviationAlerts[$criterionId] }}
@endif
@if($operatorRef)
{{ \App\Models\FactualReference::SOURCE_LABELS[$operatorRef->source_type] ?? $operatorRef->source_type }}
@if($operatorRef->identifier)
{{ $operatorRef->identifier }}
@endif
{{ $operatorRef->explanation_text }}
@endif {{-- Note d'orientation §13 : distinct de la justification, affiché à part pour que le manager sache que c'est un facteur externe signalé par l'opérateur, pas un argument de performance. --}} @if($score->context_text)
Contexte signalé : {{ $score->context_text }}
@endif @if($score->managerAnnotations->count())
@foreach($score->managerAnnotations as $annotation)
{{ $annotation->note_text }}
@endforeach
@endif
Note officielle
@if(!empty($managerNotes[$criterionId]) && $managerNotes[$criterionId] != $score->auto_note) Écart : {{ $managerNotes[$criterionId] - $score->auto_note }} @endif
    @foreach ($score->criterion->scaleDescriptionsWithFallback() as $level => $text)
  • {{ $level }} — {{ $text }}
  • @endforeach
@if(!empty($managerNotes[$criterionId]) && abs($managerNotes[$criterionId] - $score->auto_note) > 1) @endif
@endforeach
@if($showExemptForm)
@error('exemptReason') {{ $message }} @enderror
@endif
@unless($showExemptForm) @endunless
← Retour
@endif