@php use App\Services\Projects\PositionDuMarcheService; use App\Support\Money; $p = $getState(); // v3.7 §B1 — Les quatre lignes ne se mélangent jamais, et l'ordre raconte l'histoire du // marché : ce qu'il vaut, ce qu'on a facturé, ce qu'on a touché, ce qu'on attend encore. $lignes = [ [ 'titre' => 'Contractuel', 'valeur' => $p['contractuel_ttc'], 'note' => Money::format($p['contractuel_ht']) . ' HT', 'ton' => 'text-gray-900 dark:text-white', ], [ 'titre' => 'Facturé', 'valeur' => $p['facture_ttc'], 'note' => $p['nombre_factures'] . ' facture(s) émise(s)', 'ton' => 'text-gray-900 dark:text-white', ], [ 'titre' => 'Encaissé', 'valeur' => $p['encaisse_ttc'], 'note' => $p['nombre_factures_encaissees'] . ' facture(s) réglée(s)', 'ton' => 'text-emerald-700 dark:text-emerald-400', ], [ 'titre' => 'Reste à encaisser', 'valeur' => $p['reste_a_encaisser_ttc'], 'note' => $p['reste_a_encaisser_ttc'] > 0 ? 'le client vous le doit' : 'rien en attente', 'ton' => $p['reste_a_encaisser_ttc'] > 0 ? 'text-amber-700 dark:text-amber-400' : 'text-gray-500 dark:text-gray-400', ], ]; $tonEtat = match ($p['etat']) { PositionDuMarcheService::ETAT_SANS_CADRE => 'border-amber-300 bg-amber-50 text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-200', PositionDuMarcheService::ETAT_NON_FACTURE => 'border-sky-300 bg-sky-50 text-sky-900 dark:border-sky-500/40 dark:bg-sky-500/10 dark:text-sky-200', default => 'border-gray-200 bg-gray-50 text-gray-700 dark:border-white/10 dark:bg-white/5 dark:text-gray-300', }; @endphp
{{-- Les quatre lignes --}}
@foreach ($lignes as $ligne)

{{ $ligne['titre'] }}

{{ Money::format($ligne['valeur']) }}

{{ $ligne['note'] }}

@endforeach
{{-- La phrase qui empêche la lecture fautive --}}
{{ ucfirst($p['etat_libelle']) }} — {{ $p['phrase'] }}
{{-- Coûts, caution, et les DEUX marges --}}

Dépenses directes

{{ Money::format($p['depenses_directes_ht']) }}

écritures du marché, HT

Coût complet

{{ Money::format($p['cout_complet']) }}

dépenses + RH + structure allouée

Marge dégagée

@if ($p['marge_lisible'])

{{ Money::format($p['marge_degagee']) }}@if ($p['facture_ht'] > 0) · {{ number_format($p['marge_degagee_pct'], 1, ',', ' ') }} %@endif

sur le facturé — ce que le marché a produit

@else

—

{{ $p['etat_libelle'] }}

@endif

Marge réalisée

@if ($p['marge_lisible']) {{-- Pas de pourcentage sans base : « 0,0 % » sur un marché non encaissé se lirait comme une marge nulle, alors que c'est une division qui n'existe pas. --}}

{{ Money::format($p['marge_realisee']) }}@if ($p['encaisse_ht'] > 0) · {{ number_format($p['marge_realisee_pct'], 1, ',', ' ') }} %@endif

sur l'encaissé — ce que la trésorerie en a vu

@else

—

{{ $p['etat_libelle'] }}

@endif
{{-- Ce qui existe mais n'appartient à aucune des quatre lignes --}} @if ($p['caution_immobilisee'] != 0 || $p['hors_tresorerie_ttc'] > 0 || $p['reste_a_facturer_ttc'] > 0)
@if ($p['reste_a_facturer_ttc'] > 0) Reste à facturer contre le contrat : {{ Money::format($p['reste_a_facturer_ttc']) }} @endif @if ($p['caution_immobilisee'] != 0) Caution immobilisée : {{ Money::format($p['caution_immobilisee']) }} @if ($p['caution_immobilisee'] > 0) (sortie du compte, ni charge ni coût) @else {{-- Un immobilisé négatif n'existe pas : il dit qu'une restitution est rattachée au marché sans son dépôt. C'est une pièce qui manque. --}} (négatif : une restitution est rattachée sans son dépôt — cherchez l'écriture manquante) @endif @endif @if ($p['hors_tresorerie_ttc'] > 0) Facturé pour compte de tiers : {{ Money::format($p['hors_tresorerie_ttc']) }} ({{ $p['nombre_hors_tresorerie'] }} pièce(s), hors trésorerie de la société) @endif
@endif