# Cara Mengatasi Masalah Saldo BKU

## Masalah
Saldo akhir bulan Juli belum tertulis menjadi saldo awal di bulan Agustus untuk tiap akunnya.

## Penyebab
Sistem tidak memiliki mekanisme otomatis untuk menyimpan saldo akhir bulan ke tabel `riwayat_saldo`. Akibatnya, ketika laporan BKU bulan Agustus dibuka, sistem tidak menemukan saldo awal karena tidak ada entry di `riwayat_saldo` untuk akhir bulan Juli.

## Solusi

### 1. Command Tutup Buku Bulanan
Telah dibuat command `buku:tutup-bulan` yang akan:
- Menghitung saldo akhir bulan untuk setiap akun kas di setiap unit
- Menyimpan saldo tersebut ke tabel `riwayat_saldo`
- Mencegah duplikasi (tidak akan membuat entry jika sudah ada)

### 2. Cara Menggunakan Command

#### A. Tutup Buku Bulan Sebelumnya (Default)
Jika dijalankan tanpa parameter, akan menutup buku bulan lalu:
```bash
php artisan buku:tutup-bulan
```

#### B. Tutup Buku Bulan Tertentu
Untuk menutup buku bulan Juli 2025:
```bash
php artisan buku:tutup-bulan 7 2025
```

#### C. Tutup Buku untuk Unit Tertentu
Untuk menutup buku hanya untuk unit tertentu (misal unit_id = 1):
```bash
php artisan buku:tutup-bulan 7 2025 --unit_id=1
```

### 3. Langkah-Langkah Perbaikan

#### Untuk Memperbaiki Masalah Saat Ini:

1. **Tutup buku bulan Juli 2025:**
   ```bash
   php artisan buku:tutup-bulan 7 2025
   ```

2. **Verifikasi di database:**
   Cek tabel `riwayat_saldo` untuk memastikan ada entry dengan:
   - `deskripsi` = "Saldo Akhir Bulan 7/2025 - Tutup Buku"
   - `created_at` = "2025-07-31 23:59:59"

3. **Buka laporan BKU bulan Agustus:**
   Sekarang saldo awal Agustus akan terisi dengan benar dari saldo akhir Juli

#### Untuk Mencegah Masalah di Masa Depan:

**✅ Otomatis dengan Middleware (Sudah Aktif!)**

Sistem sekarang menggunakan **Middleware** untuk otomatis tutup buku, bukan cron job.

**Cara Kerjanya:**
- Saat user login dan akses aplikasi di **tanggal 1-5** setiap bulan
- Sistem otomatis cek: apakah bulan lalu sudah ditutup?
- Jika belum, otomatis jalankan tutup buku untuk bulan lalu
- Proses ini hanya berjalan 1x per hari (menggunakan cache)

**Keuntungan:**
- ✅ Tidak perlu cron job (cocok untuk shared hosting)
- ✅ Otomatis berjalan saat ada user yang akses
- ✅ Tidak memberatkan server
- ✅ Toleransi sampai tanggal 5 (jika tanggal 1-2 tidak ada yang login)

**File yang Dibuat:**
- `app/Http/Middleware/AutoTutupBukuBulanan.php`
- Sudah didaftarkan di `app/Http/Kernel.php`

**Catatan:** Jika ingin tutup buku lebih cepat/manual, tetap bisa jalankan:
```bash
php artisan buku:tutup-bulan
```

### 4. Output Command

Command akan menampilkan:
- Unit yang diproses
- Akun kas yang ditutup beserta saldo akhirnya
- Total yang diproses dan dilewati (jika sudah ditutup sebelumnya)

Contoh output:
```
=== TUTUP BUKU BULANAN ===
Bulan: 7, Tahun: 2025
Tanggal Akhir: 2025-07-31 23:59:59

--- Processing Unit: Unit Yayasan (ID: 1) ---
  ✓ [111101] Kas - Rp 10.000.000,00
  ✓ [111201] Bank BCA - Rp 50.000.000,00

=== SELESAI ===
Total diproses: 2
Total dilewati: 0
```

### 5. Catatan Penting

- Command ini **aman dijalankan berulang kali** karena akan melewati akun yang sudah ditutup
- Saldo yang disimpan menggunakan tanggal akhir bulan (23:59:59)
- Entry dibuat dengan `created_by = 1` (System)
- `tipe_referensi` diset sebagai `'tutup_buku'`

### 6. Troubleshooting

**Q: Saldo akhir tidak sesuai dengan yang di laporan?**
A: Pastikan tidak ada transaksi yang ditambahkan setelah tutup buku. Jika ada, hapus entry di `riwayat_saldo` dan jalankan ulang command.

**Q: Command error "Tidak ada unit yang ditemukan"?**
A: Pastikan tabel `units` memiliki data dan `unit_id` yang digunakan valid.

**Q: Saldo awal bulan berikutnya masih 0?**
A: Periksa apakah entry di `riwayat_saldo` memiliki `created_at` yang benar (harus sebelum tanggal awal bulan berikutnya).
