@php use App\Support\Money; // v3.8.6 — CET ONGLET NE PORTE PLUS QUE LE DÉTAIL. Ce qui répond aux quatre questions de tête // — que vaut le marché, d'où vient son coût, qu'est-ce qui est bloqué — a rejoint les sections // du haut de la fiche. Restent ici : la courbe du cumul, les décomptes, les primes, les // dernières écritures et les retenues à la source. $data = $getState(); $fiscal = $data['fiscal'] ?? null; $series = $data['series']; $bonuses = $data['bonuses'] ?? []; $milestones = $data['milestones'] ?? []; $recent = $data['recent_transactions'] ?? []; $driveLink = $data['drive_link'] ?? null; // --- Cumulative cash chart (SVG polylines) --- $maxCum = 1.0; foreach ($series as $point) { $maxCum = max($maxCum, $point['cum_expenses'], $point['cum_collections']); } $count = count($series); $pointsFor = function (string $key) use ($series, $count, $maxCum) { if ($count === 0) { return ''; } $coords = []; foreach ($series as $i => $point) { $x = $count > 1 ? round($i / ($count - 1) * 100, 2) : 0; $y = round(58 - ($point[$key] / $maxCum) * 54, 2); $coords[] = "{$x},{$y}"; } return implode(' ', $coords); }; @endphp
{{-- Cumulative expenses vs collections --}}

Cumul dépenses vs encaissements

@if ($count > 0)
Dépenses : {{ Money::format(end($series)['cum_expenses']) }} Encaissements : {{ Money::format(end($series)['cum_collections']) }}
@else

Aucune opération.

@endif
{{-- v3.8.6 — LE CAMEMBERT DES COÛTS N'EST PLUS ICI. Il a sa propre section, « Répartition des coûts », en haut de la fiche : il répond à la question qui suit immédiatement la marge, et son total répétait la tuile « Coût complet » de la position financière. --}} {{-- Décomptes / jalons --}}

Décomptes

@forelse ($milestones as $m)
{{ $m->label }} {{ Money::format($m->amount_ht) }} HT @if ($m->collected_at) Encaissé @elseif ($m->invoiced_at) Facturé @else À facturer @endif
@empty

Aucun décompte enregistré.

@endforelse
{{-- v3.8.6 — LES TROIS REGISTRES NE SONT PLUS ICI. Ils étaient affichés deux fois sur la même fiche : en phrase dans la section « Position financière », et en trois chiffres ici. Un même nombre à deux endroits finit toujours par diverger dans la tête du lecteur. Ils restent en haut, contre les quatre lignes, là où on les compare. --}} {{-- Retenues à la source du marché (CDC §4.4). Le bandeau comptait CINQ colonnes de montants sur écran large — illisible — dont deux qui répétaient des chiffres affichés ailleurs : « Encaissements CA (trésorerie) » = le registre « encaissements » de la position financière, et « Reste à facturer (HT) » = le « reste à facturer » du bandeau de position, mais en HT contre TTC : deux nombres différents pour la même idée, sans que rien ne le dise. Il ne reste que ce qui est propre au fiscal, sur trois colonnes qui tiennent. --}} @if ($fiscal)

Retenues à la source

RAS TVA
{{ Money::format($fiscal['ras_tva']) }}
retenue par le maître d'ouvrage
RAS IS
{{ Money::format($fiscal['ras_is']) }}
crédit imputable sur l'IS
CA TTC du marché
{{ Money::format($fiscal['ca_ttc']) }}
encaissé + retenues à la source

Les retenues à la source ne sont pas des dépenses : elles sont prélevées sur ce que le client vous doit, et l'IS retenu s'impute sur votre impôt. Elles comptent donc dans le chiffre d'affaires, jamais dans le coût du marché.

@endif
{{-- v3.8.6 — LES CAUTIONS NE SONT PLUS ICI : elles ont leur section « Cautions & retenues de garantie » en haut de la fiche, avec le montant immobilisé qui traînait ailleurs. Trois écrans portaient des morceaux de la même réponse. --}} {{-- Primes liées --}}

Primes (dues / versées)

{{-- v4.31.0 §E — le bénéficiaire NOMMÉ (un collaborateur n'a pas de `name`, il a un nom complet : `beneficiaryName()` sait lire les deux), la date et le chemin vers la prime. --}} @forelse ($bonuses as $b)
{{ $b->beneficiaryName() }} · {{ ($b->transaction?->date ?? $b->due_date)?->format('d/m/Y') ?? '—' }} {{ Money::format($b->amount) }} {{ $b->status?->label() ?? $b->status }}
@empty

Aucune prime liée.

@endforelse
{{-- Dernières écritures --}}

Dernières écritures

Tout le journal du marché →
@forelse ($recent as $t)
{{ $t->date?->format('d/m/y') }} — {{ $t->label }} {{ ($t->direction?->value === 'in' ? '+' : '−') . Money::format($t->amount_ttc) }}
@empty

Aucune écriture.

@endforelse
@if ($driveLink)
Ouvrir le dossier Drive du marché
@endif