{{-- Header Banner --}}
Audit System & Rekonsiliasi Payroll

Audit Simpanan Anggota

Manajemen import payroll CSV bulanan, mapping otomatis identitas anggota, dan sinkronisasi saldo Simpanan Wajib & Sukarela secara akurat.

{{-- Stats Executive Cards --}}
{{-- Card 1: Total Imports --}}
Total Data CSV

{{ number_format($stats['total_imports']) }} baris

{{ $stats['periods_count'] }} Periode Payroll

{{-- Card 2: Mapping Status --}}
Status Mapping Nama

{{ number_format($stats['processed']) }} Mapped

{{ number_format($stats['unprocessed']) }} Unmapped {{ $stats['mapped_percent'] }}%
{{-- Card 3: Total Nominal Payroll --}}
Nominal Payroll Extracted

Rp {{ number_format($stats['total_amount'] / 1000000, 1) }}M

Rp {{ number_format($stats['total_amount'], 0, ',', '.') }}

{{-- Card 4: Audit Status --}}
Hasil Rekonsiliasi

{{ $stats['total_audit'] }} Member

{{ $stats['match_count'] }} Match @if($stats['mismatch_count'] > 0) {{ $stats['mismatch_count'] }} Selisih @endif
{{-- Main Container Card --}}
{{-- Navigation Tabs --}}
{{-- TAB 1: UPLOAD CSV --}} @if($activeTab === 'upload')
{{-- Upload Drag & Drop Area --}}
@if(count($csvFiles) > 0)
{{ count($csvFiles) }} file terpilih
@endif
{{-- Managed Periods List --}} @if(count($this->importedPeriods) > 0)

Data Payroll Ter-Import Periode Bulanan

Total {{ count($this->importedPeriods) }} periode tersimpan
@foreach($this->importedPeriods as $period) @endforeach
Periode Nama File Origin Total Transaksi Nominal Ter-Extract Waktu Import Aksi
{{ $period->period }} {{ $period->filename }} {{ number_format($period->total_rows) }} baris Rp {{ number_format($period->total_amount, 0, ',', '.') }} {{ \Carbon\Carbon::parse($period->imported_at)->diffForHumans() }}
@endif
@endif {{-- TAB 2: NAME MAPPING --}} @if($activeTab === 'mapping')
@if($unmappedNames->count() > 0)

Perhatian: Terdeteksi Nama CSV Belum Terhubung

Pilih identitas anggota resmi di database agar transaksi payroll dapat di-sinkronisasikan.

{{ $unmappedNames->total() }} Nama
@foreach($unmappedNames as $index => $item) @endforeach
# Nama di CSV (Raw) Pencarian / Pilih Member Resmi Status
{{ ($unmappedNames->currentPage() - 1) * $unmappedNames->perPage() + $loop->iteration }}
{{ $item->raw_name }}
Awal Muncul: {{ $item->earliest_period }}
Pilih Member
{{ $unmappedNames->links() }}
@else

Semua Nama CSV Sudah Terpetakan!

Seluruh data import payroll telah memiliki hubungan dengan anggota resmi di database. Anda siap melakukan rekonsiliasi.

@endif
@endif {{-- TAB 3: RECONCILIATION & SYNC --}} @if($activeTab === 'reconciliation')
{{-- Control Panel Banner --}}
{{-- Rebuild Settings Controls --}}

Pengaturan Rebuild History

{{-- Action Execute Card --}}
Eksekusi Otomatisasi

Final Audit & Rebuild History Saldo

Proses ini akan menyesuaikan mutasi history simpanan dan membangun ulang saldo Simpanan Wajib & Simpanan Sukarela berdasarkan data CSV Payroll yang ter-import. ⚠️ Catatan: Data Angsuran Pinjaman TIDAK diubah/dihapus.

Member Diproses: {{ count($auditResults) - count($excludedMemberIds) }} dari {{ count($auditResults) }} Total
{{-- Search & Status Filter Toolbar --}}
{{-- Search Member Input --}}
{{-- Filter Status Tabs --}}
{{-- High-Density Reconciliation Results Table --}} @if(count($this->filteredAuditResults) > 0)
@foreach($this->filteredAuditResults as $row) {{-- WAJIB --}} {{-- SUKARELA --}} @endforeach
Member CSV Mapped Names Tgl Gabung Simpanan Wajib (Payroll) Simpanan Sukarela Aksi
Proposed System Gap CSV Total System

{{ $row['name'] }}

ID: {{ $row['member_id'] }} @if($row['is_coop']) COOP @else RETAIL @endif
@if(!empty($row['mapped_names']))
@foreach($row['mapped_names'] as $csvName) {{ $csvName }} @endforeach
@else - @endif
{{ \Carbon\Carbon::parse($row['join_date'])->format('d M Y') }} Rp {{ number_format($row['proposed_wajib'], 0, ',', '.') }}
CSV: +{{ number_format($row['actual_payroll']) }}
Rp {{ number_format($row['current_wajib'], 0, ',', '.') }} @if($row['gap'] == 0) ✓ Match @else {{ $row['gap'] > 0 ? '+' : '' }}{{ number_format($row['gap']) }} @endif Rp {{ number_format($row['actual_sukarela'], 0, ',', '.') }} Rp {{ number_format($row['current_sukarela'], 0, ',', '.') }}
Gap: {{ number_format($row['gap_sukarela']) }}
@else

Klik "Generate / Refresh Report" untuk memulai analisis rekonsiliasi data.

@endif
@endif {{-- TAB 4: TREND & ARUS KAS BULANAN --}} @if($activeTab === 'trends')
{{-- Toolbar Year Selector & KPI Bar --}}
Laporan Arus Kas Simpanan Koperasi

Trend Setoran Simpanan Tahun {{ $selectedYear }}

Breakdown setoran Simpanan Wajib, Sukarela, dan Pokok dari anggota per bulan.

{{-- Top KPI Breakdown Cards --}}
{{-- Total Grand --}}
Total Setoran {{ $selectedYear }}

Rp {{ number_format($savingsCashFlowData['totals']['grand_total'], 0, ',', '.') }}

Akumulasi Inflow Koperasi
{{-- Simwa Share --}}
Simpanan Wajib (Simwa) {{ $savingsCashFlowData['totals']['simwa_percent'] }}% Share

Rp {{ number_format($savingsCashFlowData['totals']['simwa'], 0, ',', '.') }}

{{-- Sukarela Share --}}
Simpanan Sukarela {{ $savingsCashFlowData['totals']['sukarela_percent'] }}% Share

Rp {{ number_format($savingsCashFlowData['totals']['sukarela'], 0, ',', '.') }}

{{-- Simpok Share --}}
Simpanan Pokok {{ $savingsCashFlowData['totals']['simpok_percent'] }}% Share

Rp {{ number_format($savingsCashFlowData['totals']['simpok'], 0, ',', '.') }}

{{-- ApexChart Visualisation --}}

Grafik Komposisi Setoran Simpanan Per Bulan (Tahun {{ $selectedYear }})

{{-- Detailed Monthly Cash Flow Table --}}

Tabel Breakdown Setoran Simpanan Bulanan (Januari - Desember {{ $selectedYear }})

Klik pada salah satu baris bulan di bawah ini untuk membuka daftar rincian setoran per anggota.

Arus Kas Inflow
@foreach($savingsCashFlowData['monthly'] as $m) {{-- Expanded Monthly Member Detail Table --}} @if($selectedTrendsMonth === $m['month_num']) @endif @endforeach
Bulan Simpanan Pokok Simpanan Wajib (Simwa) Simpanan Sukarela Total Setoran Bulan Ini Akumulasi Saldo (Running Total) Rincian Member
{{ $m['month_num'] }} {{ $m['month_name'] }} {{ $selectedYear }} Rp {{ number_format($m['simpok'], 0, ',', '.') }} Rp {{ number_format($m['simwa'], 0, ',', '.') }} Rp {{ number_format($m['sukarela'], 0, ',', '.') }} Rp {{ number_format($m['total'], 0, ',', '.') }} Rp {{ number_format($m['cumulative'], 0, ',', '.') }}
{{ $m['month_num'] }}
Rincian Transaksi Simpanan Member Bulan {{ $m['month_name'] }} {{ $selectedYear }}

Total {{ count($monthlyDetailRows) }} Anggota Terdaftar | Periode {{ $m['period'] }}

@if(count($monthlyDetailRows) > 0)
@foreach($monthlyDetailRows as $idx => $d) @endforeach
# Nama Anggota (DB / CSV) No. Anggota Simpanan Pokok Simpanan Wajib Simpanan Sukarela Total Setoran Status Mapping
{{ $idx + 1 }}
{{ $d['member_name'] }}
@if($d['raw_name'] !== $d['member_name'])
CSV: {{ $d['raw_name'] }}
@endif
{{ $d['nomor_anggota'] }} {{ $d['simpok'] > 0 ? 'Rp ' . number_format($d['simpok'], 0, ',', '.') : '-' }} {{ $d['simwa'] > 0 ? 'Rp ' . number_format($d['simwa'], 0, ',', '.') : '-' }} {{ $d['sukarela'] > 0 ? 'Rp ' . number_format($d['sukarela'], 0, ',', '.') : '-' }} Rp {{ number_format($d['total'], 0, ',', '.') }} @if($d['is_matched']) ✓ Mapped @else Unmapped @endif
@else
Tidak ada transaksi simpanan tercatat pada bulan ini.
@endif
TOTAL TAHUN {{ $selectedYear }} Rp {{ number_format($savingsCashFlowData['totals']['simpok'], 0, ',', '.') }} Rp {{ number_format($savingsCashFlowData['totals']['simwa'], 0, ',', '.') }} Rp {{ number_format($savingsCashFlowData['totals']['sukarela'], 0, ',', '.') }} Rp {{ number_format($savingsCashFlowData['totals']['grand_total'], 0, ',', '.') }} - 100% Complete
@endif
{{-- Detail Modal --}} @if($showDetailModal && $detailMember)
{{-- Modal Header --}}

Detail Rincian Import CSV Payroll

{{ $detailMember->name }} (ID: {{ $detailMember->id }} | No. Anggota: {{ $detailMember->nomorAnggota }})

{{-- Modal Body Table --}}
@forelse($detailRows as $r) @empty @endforelse
No Periode Nama & Uraian Original CSV Split Category Total Amount
{{ $loop->iteration }} {{ $r->period }}
{{ $r->raw_name }}
{{ $r->original_uraian }}
@if($r->simpok > 0) SIMPOK Rp {{ number_format($r->simpok) }} @endif @if($r->simwa > 0) SIMWA Rp {{ number_format($r->simwa) }} @endif @if($r->sukarela > 0) SUKARELA Rp {{ number_format($r->sukarela) }} @endif @if($r->ignored > 0) ANGSURAN Rp {{ number_format($r->ignored) }} @endif
Rp {{ number_format($r->total_amount, 0, ',', '.') }}
Tidak ada data import CSV yang terhubung ke member ini.
{{-- Modal Footer --}}
Total {{ count($detailRows) }} baris data CSV
@endif