@php $grouped = collect($data)->groupBy(function ($item) { return $item['mahasiswa']->tahunAkademik->nama ?? 'Tanpa Tahun Ajaran'; }); $allRows = collect($data); $grandSpb = (float) $allRows->sum(fn($r) => (float) ($r['nominal_spb'] ?? 0)); $grandSpp = (float) $allRows->sum(fn($r) => (float) ($r['nominal_spp'] ?? 0)); $grandUkt = (float) $allRows->sum(fn($r) => (float) ($r['nominal_ukt'] ?? 0)); $fixedColsGlobal = collect($fixedComponentKeysGlobal ?? []) ->filter(fn($k) => $k !== null && trim((string) $k) !== '') ->values(); if ($fixedColsGlobal->isEmpty()) { $fixedColsGlobal = $allRows ->flatMap(fn($r) => array_keys((array) ($r['nominal_tetap_map'] ?? []))) ->filter(fn($k) => $k !== null && trim((string) $k) !== '') ->unique() ->sort() ->values(); } $grandTetapByComponent = $fixedColsGlobal->mapWithKeys(function ($component) use ($allRows) { $sum = (float) $allRows->sum(fn($r) => (float) ((((array) ($r['nominal_tetap_map'] ?? []))[$component]) ?? 0)); return [$component => $sum]; }); $grandTetapTotal = (float) $grandTetapByComponent->sum(); $grandTotal = (float) $allRows->sum(fn($r) => (float) ($r['nominal_total'] ?? 0)); $grandHer = $grandSpp + $grandSpb + $grandUkt; $showGlobalSpb = $allRows->contains(fn($r) => (float) ($r['nominal_spb'] ?? 0) > 0); $showGlobalSpp = $allRows->contains(fn($r) => (float) ($r['nominal_spp'] ?? 0) > 0); $showGlobalUkt = $allRows->contains(fn($r) => (float) ($r['nominal_ukt'] ?? 0) > 0); $showGlobalFixed = $fixedColsGlobal->isNotEmpty(); $grandColumnCount = ($showGlobalSpp ? 1 : 0) + ($showGlobalSpb ? 1 : 0) + ($showGlobalUkt ? 1 : 0) + $fixedColsGlobal->count() + 1; @endphp

LAPORAN ALOKASI HERREGISTRASI

Batch: {{ $batch }} @if(!empty($tanggal_setor)) | Tanggal setor: {{ $tanggal_setor }} @endif | Dicetak: {{ $tanggal_cetak }} | Oleh: {{ $nama_pencetak ?? '-' }}

DETAIL HERREGISTRASI (HER S1-1 + BIAYA TETAP)
@foreach($grouped as $tahunAjaran => $rows) @php $showSpb = collect($rows)->contains(fn($r) => (int) ($r['nominal_spb'] ?? 0) > 0); $showSpp = collect($rows)->contains(fn($r) => (int) ($r['nominal_spp'] ?? 0) > 0); $showUkt = collect($rows)->contains(fn($r) => (int) ($r['nominal_ukt'] ?? 0) > 0); $fixedColsTa = collect($rows) ->flatMap(fn($r) => array_keys((array) ($r['nominal_tetap_map'] ?? []))) ->filter(fn($k) => $k !== null && trim((string) $k) !== '') ->unique() ->sort() ->values(); $subtotalSpbTa = (float) collect($rows)->sum(fn($r) => (float) ($r['nominal_spb'] ?? 0)); $subtotalSppTa = (float) collect($rows)->sum(fn($r) => (float) ($r['nominal_spp'] ?? 0)); $subtotalUktTa = (float) collect($rows)->sum(fn($r) => (float) ($r['nominal_ukt'] ?? 0)); $subtotalTetapTaByComponent = $fixedColsTa->mapWithKeys(function ($component) use ($rows) { $sum = (float) collect($rows)->sum(fn($r) => (float) ((((array) ($r['nominal_tetap_map'] ?? []))[$component]) ?? 0)); return [$component => $sum]; }); $subtotalTotalTa = (float) collect($rows)->sum(fn($r) => (float) ($r['nominal_total'] ?? 0)); $dynamicCols = ($showSpb ? 1 : 0) + ($showSpp ? 1 : 0) + ($showUkt ? 1 : 0) + $fixedColsTa->count(); $colspan = 3 + $dynamicCols; // no, mahasiswa, dynamic, total @endphp @if($showSpb)@endif @if($showSpp)@endif @if($showUkt)@endif @foreach($fixedColsTa as $component) @endforeach @foreach($rows as $idx => $item) @if($showSpb)@endif @if($showSpp)@endif @if($showUkt)@endif @foreach($fixedColsTa as $component) @endforeach @endforeach @if($showSpb)@endif @if($showSpp)@endif @if($showUkt)@endif @foreach($fixedColsTa as $component) @endforeach
Tahun Ajaran: {{ $tahunAjaran }}
No Mahasiswa / ProdiSPBSPPUKT{{ strtoupper($component) }}Total
{{ $idx + 1 }} {{ $item['mahasiswa']->nama }} {{ $item['mahasiswa']->nim ?? '-' }} | {{ $item['mahasiswa']->prodi->nama ?? '-' }} | {{ $item['mahasiswa']->sumberInformasi->nama ?? 'Umum' }} | {{ $item['mahasiswa']->status ?? '-' }} @if(!empty($item['has_salah_transfer']) && !empty($item['salah_transfer_komponen'])) Salah transfer (masuk rekening kampus) — komponen: {{ implode(', ', $item['salah_transfer_komponen']) }} @endif {{ number_format($item['nominal_spb'], 0, ',', '.') }}{{ number_format($item['nominal_spp'], 0, ',', '.') }}{{ number_format($item['nominal_ukt'], 0, ',', '.') }}{{ number_format((float) ((((array) ($item['nominal_tetap_map'] ?? []))[$component]) ?? 0), 0, ',', '.') }}{{ number_format($item['nominal_total'], 0, ',', '.') }}
Subtotal {{ $tahunAjaran }}{{ number_format($subtotalSpbTa, 0, ',', '.') }}{{ number_format($subtotalSppTa, 0, ',', '.') }}{{ number_format($subtotalUktTa, 0, ',', '.') }}{{ number_format((float) ($subtotalTetapTaByComponent[$component] ?? 0), 0, ',', '.') }}{{ number_format($subtotalTotalTa, 0, ',', '.') }}
@endforeach
TOTAL SELURUH TAHUN AJARAN
@if($showGlobalSpp)@endif @if($showGlobalSpb)@endif @if($showGlobalUkt)@endif @foreach($fixedColsGlobal as $component) @endforeach @if($showGlobalSpp)@endif @if($showGlobalSpb)@endif @if($showGlobalUkt)@endif @foreach($fixedColsGlobal as $component) @endforeach
Total SPPTotal SPBTotal UKTTotal {{ strtoupper($component) }}Total Keseluruhan
{{ number_format($grandSpp, 0, ',', '.') }}{{ number_format($grandSpb, 0, ',', '.') }}{{ number_format($grandUkt, 0, ',', '.') }}{{ number_format((float) ($grandTetapByComponent[$component] ?? 0), 0, ',', '.') }}{{ number_format($grandTotal, 0, ',', '.') }}
@if(isset($summaryPerSumber) && count($summaryPerSumber) > 0)
RINGKASAN BAGI HASIL PER SUMBER INFORMASI
@foreach($summaryPerSumber as $sumber) @endforeach
Sumber Informasi % Kampus % Mitra Total Nominal Hak Kampus Hak Mitra Jml Mhs
{{ $sumber['nama_sumber'] }}
{{ $sumber['jenis_sumber_informasi'] }}
{{ number_format((float) $sumber['persen_kampus'], 1) }}% {{ number_format((float) $sumber['persen_mitra'], 1) }}% {{ number_format($sumber['total_nominal'], 0, ',', '.') }} {{ number_format($sumber['total_hak_kampus'], 0, ',', '.') }} {{ number_format($sumber['total_hak_mitra'], 0, ',', '.') }} {{ $sumber['jumlah_mhs'] }}
@endif
RINGKASAN BATCH
Jumlah Mahasiswa {{ number_format($summary['total_mhs'], 0, ',', '.') }}
@if($showGlobalSpp)
Total SPP {{ number_format($grandSpp, 0, ',', '.') }}
@endif @if($showGlobalSpb)
Total SPB {{ number_format($grandSpb, 0, ',', '.') }}
@endif @if($showGlobalUkt)
Total UKT {{ number_format($grandUkt, 0, ',', '.') }}
@endif
Total Herregistrasi (SPP+SPB+UKT) {{ number_format($grandHer, 0, ',', '.') }}
@foreach($fixedColsGlobal as $component)
Total {{ $component }} {{ number_format((float) ($grandTetapByComponent[$component] ?? 0), 0, ',', '.') }}
@endforeach
PPH 23 {{ number_format($summary['pph23'], 0, ',', '.') }}
Total Keseluruhan (Her + Biaya Tetap) {{ number_format($summary['total_keseluruhan'], 0, ',', '.') }}
Total Hak Mitra {{ number_format($summary['total_mitra'], 0, ',', '.') }}
@php $stHer = (float) ($summary['total_nominal_salah_transfer'] ?? 0); $hkDasarHer = (float) ($summary['total_kampus'] ?? 0); $hkBersihHer = (float) ($summary['total_kampus_bersih'] ?? max(0, $hkDasarHer - $stHer)); @endphp @if($stHer > 0)
Total Salah Transfer (sudah masuk rekening kampus) {{ number_format($stHer, 0, ',', '.') }}
Hak Kampus (dasar alokasi bagi hasil) {{ number_format($hkDasarHer, 0, ',', '.') }}
Perhitungan hak kampus bersih {{ number_format($hkDasarHer, 0, ',', '.') }} - {{ number_format($stHer, 0, ',', '.') }} = {{ number_format($hkBersihHer, 0, ',', '.') }}
@endif
{{ $stHer > 0 ? 'TOTAL HAK KAMPUS BERSIH' : 'TOTAL HAK KAMPUS' }} {{ number_format($stHer > 0 ? $hkBersihHer : $hkDasarHer, 0, ',', '.') }}
Mengetahui,
Bagian Keuangan
(........................................)