@php /** * Note d'analyse PDF d'un appel d'offres (Prompt 29 §3). Données pré-normalisées et nettoyées * (PdfText) par App\Support\TenderAnalysisReport — la vue ne fait que mettre en page. * Charte de l'installation : teintes neutres, la couleur primaire venant des réglages. */ $logo = \App\Support\Identite::cheminLogo(); $d = $report['decision']; @endphp {{-- Pied de page charté (répété en bas de chaque page). Le numéro « Page X / Y » est dessiné par le script text/php ci-dessous (TOTAL réel des pages, Prompt 30 §4). --}} {{-- Pagination fiable « Page X / Y » : DomPDF substitue {PAGE_NUM}/{PAGE_COUNT} au rendu final (isPhpEnabled activé côté contrôleur). Remplace counter(pages) qui affichait « / 0 ». --}} {{-- (A) En-tête : logo + société à gauche, titre à droite --}}
@if ($logo !== null) @endif
{{ $company['name'] }}
@if ($company['phone']){{ $company['phone'] }}@endif@if ($company['email']) · {{ $company['email'] }}@endif
Note d'analyse
Appel d'offres@if ($report['reference']) {{ $report['reference'] }}@endif
Analyse du : {{ $generatedAt->format('d/m/Y') }}
 
@if ($report['object'])
{{ $report['object'] }}
@endif {{-- Bandeau « délai dépassé » (Prompt 14 §C) : la date limite est antérieure à la date d'analyse --}} @if ($report['deposit_overdue'])
Délai dépassé — cette analyse est postérieure à l'échéance de remise des plis.
@endif {{-- Encadré GO / NO-GO (couleur selon faisabilité) — verdict tranché + recommandation --}}
Faisabilité : {{ $d['label'] }}
@if ($d['recommendation'])
{{ $d['recommendation'] }}
@endif @if (count($d['reasons'])) @endif @if ($d['condition'])
Condition décisive : {{ $d['condition'] }}
@endif
@if (count($d['eligibility']))
Éligibilité (critères éliminatoires — à vérifier en priorité)
@endif
{{-- Éligibilité & pièces qualifiantes (Prompt 30 §3) — section DÉCISIVE, juste après le GO/NO-GO --}}
Éligibilité & pièces qualifiantes (décisif pour le GO / NO-GO)
@forelse ($report['eligibility_conditions'] as $i => $c) @empty @endforelse
ConditionCe qui est exigéDétail (nombre / ancienneté / seuils)Élim.Adéquation
{{ $c['category'] }} {{ $c['requirement'] }} {{ $c['details'] }} @if ($c['eliminatory'])Oui@else Non @endif {{ $c['status'] }}
Conditions d'éligibilité non détaillées dans le dossier — à vérifier (attestations de référence, agréments, CNSS / fiscal / RC, capacités juridiques-techniques-financières art. 43).
{{-- Identité --}}
Identité de l'appel d'offres
@foreach (array_chunk($report['identity'], 2) as $pair) @foreach ($pair as $cell) @endforeach @if (count($pair) === 1)@endif @endforeach
{{ $cell['label'] }}{{ $cell['value'] }}
{{-- Analyse prix & règle d'attribution (Prompt 14 §B) — indicatif, à valider --}} @php($pricing = $report['pricing'])
Analyse prix & attribution (indicatif, à valider)
@if ($pricing['has_data'])
Prix de référence (HT){{ $pricing['reference_ht'] ?? '—' }}@if ($pricing['tax_assumed']) (TVA 20 % présumée)@endif Prix de référence (TTC){{ $pricing['reference_ttc'] ?? '—' }}
Coût unitaire{{ $pricing['unit'] ?? '—' }} Fourchette conseillée (HT){{ $pricing['advised_range'] ?? '—' }}
Prix proposé{{ $pricing['proposed_price'] ?? 'à compléter' }} Marge estimée{{ $pricing['margin'] ?? '—' }}@if ($pricing['margin'] && $pricing['direct_costs']) (coûts directs {{ $pricing['direct_costs'] }})@endif
Règle d'attribution. {{ $pricing['award_rule'] }}
{{ $pricing['abnormally_low_note'] }}
@else
Estimation du marché non chiffrée dans le dossier — prix de référence et marge à établir manuellement.
@endif
{{-- Missions --}}
Missions / prestations
@forelse ($report['missions'] as $i => $m) @empty @endforelse
IntituléContenuDurée (j)
{{ $m['label'] }}{{ $m['description'] }}{{ $m['duration_days'] }}
Aucune mission détaillée dans le dossier.
{{-- Équipe --}}
Équipe demandée
@forelse ($report['team'] as $i => $t) @empty @endforelse
ProfilNombreExpérienceDiplôme
{{ $t['profile'] }}{{ $t['count'] }}{{ $t['experience'] }}{{ $t['diploma'] }}
Aucune équipe imposée par le dossier.
{{-- Pièces par ENVELOPPE (Prompt 30 §4) : dossier administratif et technique, offre technique, offre financière --}} @foreach ($report['pieces'] as $envelope)
{{ $envelope['envelope'] }}
@foreach ($envelope['subgroups'] as $group)
{{ $group['dossier'] }}
@forelse ($group['rows'] as $i => $p) @empty @endforelse
PièceDescriptionNotéeÉliminatoire
{{ $p['name'] }}{{ $p['description'] }}{{ $p['scored'] }}{{ $p['eliminatory'] }}
{{ $group['note'] ?? 'Aucune pièce détaillée par le dossier pour cette partie.' }}
@endforeach
@endforeach {{-- Grille d'évaluation --}}
Grille d'évaluation
@forelse ($report['criteria']['rows'] as $i => $c) @empty @endforelse @if ($report['criteria']['display_total']) @endif
CritèreSous-critèrePointsDocument
{{ $c['criterion'] }}{{ $c['subcriterion'] }}{{ $c['points'] }}{{ $c['document'] }}
Grille non détaillée dans le dossier.
Barème total{{ $report['criteria']['display_total'] }}@if ($report['criteria']['partial'])Barème annoncé retenu — somme extraite : {{ $report['criteria']['sum'] }}@elseif ($report['criteria']['total'])Barème annoncé@endif
@if ($report['criteria']['partial'])
Barème annoncé ({{ $report['criteria']['total'] }}) retenu : il diffère de la somme des critères extraite ({{ $report['criteria']['sum'] }}). À vérifier sur le dossier — options de notation exclusives non additionnées, ou critère récapitulatif compté en double avec ses sous-critères.
@endif
{{-- Décomptes prévus --}}
Décomptes prévus (selon les modalités de règlement)
@forelse ($report['decomptes'] as $i => $s) @empty @endforelse
DécompteDurée (j)Date de fin estiméeMontant
{{ $s['label'] }}{{ $s['duration_days'] }}{{ $s['end_date'] }}{{ $s['amount'] }}
Échéancier non déterminé (missions ou montant manquants).
{{-- Exigences par dossier (adéquation colorée) --}}
Exigences par dossier — adéquation
@forelse ($d['requirements'] as $i => $r) @empty @endforelse
DossierExigenceAdéquation
{{ $r['dossier'] }}{{ $r['item'] }}{{ $r['status'] }}
Aucune exigence particulière relevée.
{{-- Points de vigilance (niveau coloré) --}}
Points de vigilance
@forelse ($d['vigilance'] as $i => $v) @empty @endforelse
PointNiveau
{{ $v['label'] }}{{ $v['severity'] }}
Aucun point de vigilance particulier.
{{-- Listes complémentaires --}} @if (count($report['references']) || count($report['agrement']) || count($report['other']))
Compléments
@if (count($report['references']))
Références exigées
@endif @if (count($report['agrement']))
Agréments / qualifications
@endif @if (count($report['other']))
Autres informations
@endif
@endif @if (count($report['documents']))
Pièces analysées : {{ implode(', ', $report['documents']) }}.
@endif
Document d'aide à la décision — à valider par un responsable.