{{-- Back --}} Kembali ke daftar {{-- Hero --}}
Pembayaran

Bayar Angsuran

Pilih pinjaman aktif lalu masukkan nominal yang benar-benar diterima. Angsuran dibayar berurutan (FIFO).

{{-- KIRI --}}

Pinjaman & Angsuran

@include('livewire.savings.partials.member-picker', ['label' => 'Anggota']) {{-- Pilih pinjaman aktif --}} @if (filled($member_id))
@if (empty($loanOptions))
Anggota ini tidak punya pinjaman aktif (status Cair).
@else @endif @error('loan_id')

{{ $message }}

@enderror
@endif {{-- Jadwal terpilih --}} @if (filled($loan_id)) @if ($schedule)
Angsuran #{{ $schedule->installment_seq }}
@if ($isFinal) Pelunasan @endif

Jatuh Tempo

{{ $schedule->due_date?->translatedFormat('d M Y') }}

Pokok

Rp {{ number_format((float) $schedule->loan->monthly_principal, 0, ',', '.') }}

Jasa

Rp {{ number_format((float) $schedule->loan->monthly_interest, 0, ',', '.') }}

Tab. Berjangka

Rp {{ number_format((float) $schedule->loan->monthly_time_deposit, 0, ',', '.') }}

@php($titipan = $this->creditBalance()) @if (bccomp($titipan, '0', 2) > 0) {{-- Titipan Pokok (ADR 2026-08-28). Tagihan yang berubah-ubah bukan konsep yang bisa diturunkan petugas dari pengetahuan mereka — itu akibat keputusan desain, jadi sistem yang menjelaskannya. --}}
Tagihan kontrak Rp {{ number_format((float) $schedule->total_due, 0, ',', '.') }}
Titipan Pokok dipakai − Rp {{ number_format((float) bcsub((string) $schedule->total_due, $this->effectiveBill($schedule), 2), 0, ',', '.') }}
Tagihan Bulan Ini Rp {{ number_format((float) $this->effectiveBill($schedule), 0, ',', '.') }}

Sisa Titipan Pokok anggota Rp {{ number_format((float) $titipan, 0, ',', '.') }}. Titipan hanya memotong pokok; jasa dan Tab. Berjangka tetap tertagih.

@else
Total Tagihan Rp {{ number_format((float) $schedule->total_due, 0, ',', '.') }}
@endif
@error('schedule_id')

{{ $message }}

@enderror @else
Semua angsuran pinjaman ini sudah terbayar.
@endif @endif
{{-- Pelunasan Dipercepat (ADR 2026-07-22) --}} @if ($canSettleEarly) $settle_early])> @if ($settle_early && $settlementPreview)

Rincian Pelunasan

Sisa pokokRp {{ number_format((float) $settlementPreview['settled_principal'], 0, ',', '.') }}
Jasa (1×)Rp {{ number_format((float) $settlementPreview['interest'], 0, ',', '.') }}
Jumlah PelunasanRp {{ number_format((float) $settlementPreview['payoff'], 0, ',', '.') }}

Dikembalikan ke anggota (draft):

SWPRp {{ number_format((float) $settlementPreview['refund_swp'], 0, ',', '.') }}
Tab. BerjangkaRp {{ number_format((float) $settlementPreview['refund_tab'], 0, ',', '.') }}
Total RefundRp {{ number_format((float) $settlementPreview['refund_total'], 0, ',', '.') }}

Isi nominal ≥ jumlah pelunasan. Kelebihan di atasnya masuk Simpanan Sukarela.

@endif
@endif {{-- Nominal pembayaran --}} @if ($schedule)

Nominal Diterima

@if ($fromSavings)

Dibayar dengan mendebit Simpanan Sukarela anggota. Nominal dikunci tepat sebesar tagihan — tidak boleh lebih.

@else

Total uang yang benar-benar diterima. Sudah diisi sesuai tagihan; boleh dinaikkan, tidak boleh kurang dari tagihan. Kelebihan disimpan sebagai Titipan Pokok dan memotong pokok angsuran berikutnya.

@endif
! $errors->has('amount_paid'), 'border-danger focus-within:ring-danger' => $errors->has('amount_paid'), ])> Rp $fromSavings, ])>
@error('amount_paid')

{{ $message }}

@elseif ($schedule)

Tagihan bulan ini: Rp {{ number_format((float) $schedule->total_due, 0, ',', '.') }}.

@enderror
@error('payment_method')

{{ $message }}

@enderror @if ($fromSavings)

Saldo Sukarela: Rp {{ number_format((float) ($availableSukarela ?? 0), 0, ',', '.') }} · nominal dikunci = tagihan, bukti persetujuan wajib.

@endif
! $errors->has('payment_date'), 'border-danger focus-visible:ring-danger' => $errors->has('payment_date'), ])> @error('payment_date')

{{ $message }}

@enderror
@if ($isFinal)

Ini angsuran pelunasan — SWP + Tab. Berjangka otomatis dikembalikan (draft) memakai metode pencairan yang ditetapkan saat akad pinjaman.

@endif {{-- Bukti --}}
@error('bukti')

{{ $message }}

@enderror
@endif
{{-- KANAN: ringkasan --}}

Total Dibayar

Rp 0

{{ $settle_early ? 'Pelunasan' : 'Tagihan' }} Rp · lebih Rp

@if (filled($member_id) && $selectedMemberLabel)
{{ $selectedMemberLabel }}
@endif @if ($schedule)
Angsuran ke #{{ $schedule->installment_seq }}
Jatuh tempo {{ $schedule->due_date?->translatedFormat('d M Y') }}
Pinjaman {{ $schedule->loan->loan_number }}
@if ($isFinal)
Angsuran terakhir — menyelesaikan pinjaman ini akan mengembalikan SWP & Tabungan Berjangka.
@endif @else
Pilih anggota & pinjaman aktif untuk mulai mencatat angsuran.
@endif Batal

Nominal aktual dipakai untuk saldo & laporan. Koreksi hanya lewat reversal.

{{-- Dialog alokasi kelebihan bayar (ADR 2026-08-28 item 2a). Akibat WAJIB ditampilkan dalam angka, bukan hanya nama pilihan. Dialog dua-tombol tanpa angka memang lebih murah dibuat — tapi mencabutnya berarti mencabut satu-satunya penjelasan yang petugas punya di depan anggota, sekaligus melemahkan pengaman yang jadi dasar penerimaan R14. --}} @if ($showAllocationDialog) @php($preview = $this->allocationPreview()) @if ($preview)
{{-- Kepala berpembatas: memisahkan pertanyaan dari pilihan, dan memberi dialog tepi yang terlihat di atas latar gelap. --}}

Uang diterima Rp {{ number_format((float) $amount_paid, 0, ',', '.') }} — melebihi tagihan bulan ini (Rp {{ number_format((float) $this->effectiveBill(), 0, ',', '.') }}).

Pilih bagaimana kelebihannya diperlakukan.

@foreach ([\App\Services\LoanPaymentService::MODE_TITIPAN, \App\Services\LoanPaymentService::MODE_TUTUP_SEKALIAN] as $option) @php($p = $preview[$option]) {{-- Memilih = langsung menyimpan, tanpa klik kedua. Karena itu tombolnya HARUS menunjukkan bahwa ia sedang bekerja: tanpa penanda, jeda simpan terbaca sebagai klik yang tak masuk dan petugas menekannya lagi. --}} @endforeach {{-- Batal diberi warna: sebagai teks abu-abu ia terbaca sebagai keterangan, bukan tombol, dan petugas yang ingin mundur tak menemukan jalan keluarnya. --}}
@endif @endif {{-- Dialog pilihan: melunasi atau tetap mencicil. Dulu keadaan ini ditolak mentah ("Gunakan Pelunasan Dipercepat"). Penolakan itu melarang keadaan yang sah — anggota yang membawa uang lebih dan memang ingin pinjamannya berjalan terus — dan menyisakan petugas tanpa jalan selain menyuruhnya pulang. Sekarang ditawarkan, dengan akibat kedua pilihan tersaji dalam rupiah. --}} @if ($showSettlementChoice) @php($offer = $this->settlementOffer()) @if ($offer)

Uang diterima Rp {{ number_format((float) $offer['amount'], 0, ',', '.') }} — cukup untuk melunasi seluruh sisa pinjaman.

Pilih yang diminta anggota. Keduanya sah.

@if ($this->canSettleEarly()) @endif
@endif @endif