{{-- Header --}}

Audit Simpanan Wajib & Sukarela

Import CSV payroll, mapping nama, dan rekonsiliasi data simpanan (Wajib & Sukarela).

{{-- Flash Notifications --}} {{-- Stats Cards --}}

Total Records

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

Unmapped Names

{{ number_format($stats['unprocessed']) }} Orang

Mapped Members

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

{{-- Main Content --}}
{{-- Tabs --}}
{{-- Tab 1: Upload --}} @if($activeTab === 'upload')
{{-- Upload Area --}}
@if(count($csvFiles) > 0)

{{ count($csvFiles) }} file dipilih

@endif
{{-- Managed Periods List --}} @if(count($this->importedPeriods) > 0)

Data Payroll Ter-Import

@foreach($this->importedPeriods as $period) @endforeach
Periode Filename Total Rows Total Amount Imported At Action
{{ $period->period }} {{ $period->filename }} {{ number_format($period->total_rows) }} {{ number_format($period->total_amount) }} {{ \Carbon\Carbon::parse($period->imported_at)->diffForHumans() }}
@endif
@endif {{-- Tab 2: Mapping --}} @if($activeTab === 'mapping')
@if(session()->has('message'))
{{ session('message') }}
@endif @if($unmappedNames->count() > 0)
@foreach($unmappedNames as $index => $item) @endforeach
# Nama di CSV (Raw) Cari Member Asli Aksi
{{ ($unmappedNames->currentPage() - 1) * $unmappedNames->perPage() + $loop->iteration }}
{{ $item->raw_name }}
Pertama Muncul: {{ $item->earliest_period }}
{{-- Filter search results based on the earliest period --}} {{-- Button triggered by event --}}
{{ $unmappedNames->links() }}
@else

Semua Nama Sudah Terpetakan!

Semua data import sudah memiliki jodoh di database member.

@endif @endif {{-- Tab 3: Reconciliation --}} @if($activeTab === 'reconciliation')
{{-- NUCLEAR OPTION: One-Click Cleanup --}}
{{-- Controls --}}

Pengaturan Cleanup

{{-- Action Button --}}

๐Ÿงน Final Audit & History Rebuild

Proses ini akan MENGHAPUS (Reset) history simpanan lama dan membangun ulang berdasarkan data CSV Import yang sudah Anda upload. Saldo member akan otomatis disesuaikan.

{{-- Loading Indicator --}}
Processing cleanup... (Excluded: {{ count($excludedMemberIds) }} members)
{{-- Manual Controls --}}

Step 1: Preview Data

@if(count($auditResults) > 0)

Anggota Terdeteksi

{{ count($auditResults) }} Orang

@endif

Step 2: Execution

Gunakan tombol "Run Full Cleanup" di atas โ†‘

@if(count($auditResults) > 0)
@foreach($auditResults as $row) {{-- WAJIB --}} {{-- SUKARELA --}} @endforeach
Member CSV Source Names Join Date SIMPANAN WAJIB (MANDATORY) SIMPANAN SUKARELA (VOLUNTARY) Action
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') }} {{ number_format($row['proposed_wajib']) }}
CSV: +{{ number_format($row['actual_payroll']) }}
{{ number_format($row['current_wajib']) }} @if($row['gap'] == 0) @else {{ $row['gap'] > 0 ? '+' : '' }}{{ number_format($row['gap']) }} @endif {{ number_format($row['actual_sukarela']) }} {{ number_format($row['current_sukarela']) }}
Gap: {{ number_format($row['gap_sukarela']) }}
@else

Klik "Generate Report" untuk memulai analisis selisih data.

@endif
@endif
{{-- Detail Modal --}} @if($showDetailModal && $detailMember)
{{-- Backdrop --}}
{{-- Modal Content --}}

Detail Import CSV

{{ $detailMember->name }} ({{ $detailMember->nomorAnggota }})

@forelse($detailRows as $r) @empty @endforelse
No Period Uraian CSV Breakdown Total
{{ $loop->iteration }} {{ $r->period }}
{{ $r->raw_name }}
{{ $r->original_uraian }}
@if($r->simpok > 0) SIMPOK {{ number_format($r->simpok / 1000) }}k @endif @if($r->simwa > 0) SIMWA {{ number_format($r->simwa / 1000) }}k @endif @if($r->sukarela > 0) SUKARELA {{ number_format($r->sukarela / 1000) }}k @endif @if($r->ignored > 0) ANGSURAN {{ number_format($r->ignored / 1000) }}k @endif @if($r->simpok == 0 && $r->simwa == 0 && $r->sukarela == 0 && $r->ignored == 0) ? {{ number_format($r->total_amount / 1000) }}k @endif
{{ number_format($r->total_amount) }}
Tidak ada data import CSV yang terhubung ke member ini.
{{-- Summary Section --}} @if($detailRows && count($detailRows) > 0) @php $totalSimwa = 0; $totalSukarela = 0; $totalSimpok = 0; $totalIgnored = 0; $countRows = count($detailRows); foreach ($detailRows as $row) { $totalSimwa += $row->simwa; $totalSukarela += $row->sukarela; $totalSimpok += $row->simpok; $totalIgnored += $row->ignored; } $countSimwa = $totalSimwa > 0 ? intval($totalSimwa / 50000) : 0; @endphp
Ringkasan Transaksi
{{ $countRows }} baris CSV
{{-- SIMWA --}}
SIMWA
Rp {{ number_format($totalSimwa) }}
{{ $countSimwa }} bulan ร— Rp 50.000
{{-- SUKARELA --}}
SUKARELA
Rp {{ number_format($totalSukarela) }}
Total tabungan
{{-- SIMPOK --}}
SIMPOK
Rp {{ number_format($totalSimpok) }}
Simpanan pokok
{{-- IGNORED --}}
IGNORED
Rp {{ number_format($totalIgnored) }}
Angsuran (diabaikan)
@endif
@endif