﻿# Implementasi Hirarki Persediaan (Tampilan Saja)

## Tujuan
- Menyajikan hirarki persediaan sesuai `hirarki persediaan.docx` pada halaman:
  - `Ledger/viewBalances_periode/RekeningPembantuProduk/1010030030`
- Perubahan **hanya di layer tampilan** (read-only), tanpa mengubah data rekening/jurnal/COA.

## Batasan Scope
- Tidak ada `INSERT`, `UPDATE`, `DELETE` data rekening.
- Tidak mengubah struktur akun existing.
- Tetap kompatibel dengan PHP 5.6 dan CodeIgniter 3.

## Mode Tampilan
- `legacy`: tampilan lama (existing)
- `hirarki`: tampilan hirarki PSAK (baru)
- Stabilization note (2026-04-15):
  - default route sementara diarahkan ke `legacy` (mode `hirarki` diaktifkan eksplisit via `?view_mode=hirarki`) agar endpoint tetap available.

## Mapping Hirarki (Konservatif)
1. Persediaan Produk Dijual
   - 1010030030 (persediaan produk)
   - 1010030040 (persediaan produk riil)
2. Persediaan Produk Rakitan (WIP)
   - 1010030070 (persediaan produk rakitan)
3. Persediaan Supplies
   - 1010030050 (persediaan supplies proses/produksi)
4. Persediaan Bahan Baku
   - 1010030010 (persediaan supplies)
   - 1010030020 (persediaan supplies riil)
5. Persediaan Lainnya
   - stock in transit (state hold, qty)

## Checklist Implementasi
- [x] Buat mode `hirarki` pada `Ledger/viewBalances_periode`
- [x] Tambahkan pengambilan data multi-sumber rekening secara read-only
- [x] Bangun agregasi per grup hirarki
- [x] Tambahkan baris informasi `stock in transit`
- [x] Tambahkan toggle tampilan `legacy` <-> `hirarki`
- [x] Pastikan mode `legacy` tidak berubah perilaku
- [x] Verifikasi tidak ada query write ke rekening
- [ ] Uji route target dan format tabel (UAT di browser/login environment)

## Tahap 2 (Samakan Tampilan Everest)
- [x] Tambah panel hirarki persediaan ala `everest_2apr` pada `viewBalances_l1`
- [x] Tambah filter merek mode `chip/dropdown` pada panel persediaan
- [x] Tambah bar kontrol periode `full/tahunan/bulanan/harian` + tombol `Terapkan`
- [x] Sinkronkan ringkasan kartu hirarki dengan filter periode
- [x] Hotfix sinkronisasi angka kartu aktif vs total footer tabel (samakan sumber perhitungan ke dataset tabel + ikut `viewFilters` gudang)
- [x] Fallback aman periode `tahunan/bulanan/harian` ke data terakhir yang tersedia (`<=` pilihan user)
- [x] Optimasi fallback periode (lookup boundary 1 query) untuk mencegah timeout/HTTP 500
- [x] Tambah mode diagnostik fatal tanpa CI log (`?diag=1`) ke file `application/logs/diag_viewBalances_l1_YYYYMMDD.log`
- [x] Tambah progress marker diagnostik (`BEGIN/FETCH/HIERARCHY/END_OK`) + guard query DB agar error boundary tidak langsung meledak 500
- [x] Optimasi fetch periode: snapshot `MAX(id)` per `extern_id` (kurangi beban query tahunan/bulanan/harian)
- [x] Cleanup diagnostik sementara: hapus parameter `diag` dan logger runtime setelah sistem stabil
- [x] UAT mode `bulanan` dan `harian` di browser (PASS, 2026-04-15)
- [x] Validasi adopsi metode `everest_2apr` (bukan parity visual lintas aplikasi)

## Kriteria Selesai
- URL target bisa dibuka dalam mode `hirarki`.
- Mode `legacy` tetap berjalan seperti sebelum perubahan.
- Tidak ada perubahan data rekening.
