# Blueprint: BI 10-Mode Sales Analytics Architecture

Blueprint ini menjelaskan arsitektur teknis dari visualisasi grafik dan data tabel 10-mode untuk modul BI (Business Intelligence) pada modul 
ugilaba.

---

## 1. Arsitektur Komponen

`
[DB] rugilaba -> [DB View] vw_bi_sales_monthly -> [Model] MdlRugilaba -> [Controller] Bi.php -> [View] bi_graph_sales.php
`

---

## 2. Struktur Database View: w_bi_sales_monthly

View ini berfungsi sebagai fondasi pivot data bulanan. View mendukung pemetaan data historis lama (berbasis nama rekening teks) dan data baru (berbasis kode akun numeric).

`sql
CREATE OR REPLACE VIEW vw_bi_sales_monthly AS
SELECT
    thn                                                                                         AS year,
    bln                                                                                         AS month,
    CONCAT(thn, '-', LPAD(bln, 2, '0'))                                                         AS periode,

    -- ========== PENGHASILAN / PENJUALAN ==========
    SUM(CASE WHEN rekening IN ('penjualan', 'penjualan projek', '4010') 
             THEN kredit - debet ELSE 0 END)                                                    AS penjualan,
    SUM(CASE WHEN rekening = 'return penjualan'        
             THEN kredit - debet ELSE 0 END)                                                    AS return_penjualan,
    SUM(CASE WHEN rekening = 'jasa kirim'              
             THEN kredit - debet ELSE 0 END)                                                    AS jasa_kirim,
    SUM(CASE WHEN rekening = 'laba lain lain'          
             THEN kredit - debet ELSE 0 END)                                                    AS laba_lain_lain,
    SUM(CASE WHEN rekening = 'keutungan kurs'          
             THEN kredit - debet ELSE 0 END)                                                    AS keuntungan_kurs,

    -- ========== HPP ==========
    SUM(CASE WHEN rekening IN ('hpp', 'hpp projek', '5010') 
             THEN kredit - debet ELSE 0 END)                                                    AS hpp,

    -- ========== BIAYA OPERASIONAL ==========
    SUM(CASE WHEN (kategori = 'biaya' AND rekening NOT IN ('hpp', 'hpp projek', '5010', 'return penjualan'))
             THEN kredit - debet ELSE 0 END)                                                    AS total_biaya,

    -- ========== DERIVED: Penjualan Netto ==========
    SUM(CASE WHEN rekening IN ('penjualan', 'penjualan projek', '4010', 'return penjualan', 'jasa kirim') 
             THEN kredit - debet ELSE 0 END)                                                    AS penjualan_net,

    -- ========== DERIVED: Total HPP ==========
    SUM(CASE WHEN rekening IN ('hpp', 'hpp projek', '5010') 
             THEN kredit - debet ELSE 0 END)                                                    AS total_hpp

FROM rugilaba
WHERE periode  = 'bulanan'
  AND status   = 1
  AND trash    = 0
  AND thn      > 0
  AND bln      > 0
GROUP BY thn, bln
ORDER BY thn ASC, bln ASC;
`

---

## 3. Logika Penghitungan 10 Mode (di Controller)

Pemrosesan data mentah dari database view dikalkulasi menggunakan fungsi bantu PHP di Bi.php untuk efisiensi performa:

1.  **Monthly P&L**: Menghitung Laba Kotor = Penjualan Netto + HPP dan Laba Bersih = Laba Kotor + Total Biaya.
2.  **Yearly P&L**: Mengagregasikan data bulanan menjadi total tahunan.
3.  **Year-to-Date (YTD)**: Akumulasi kumulatif dari Januari sampai bulan berjalan pada tahun terpilih.
4.  **Quarter-to-Date (QTD)**: Akumulasi kumulatif per kuartal (Q1, Q2, Q3, Q4) sampai bulan berjalan.
5.  **Rolling 12 Months (R12)**: Menampilkan data 12 bulan terakhir secara dinamis tanpa terikat batas tahun kalender.
6.  **Month-over-Month Growth (MoM)**: Membandingkan performa penjualan dan laba bersih bulan berjalan terhadap bulan sebelumnya.
7.  **Year-over-Year Growth (YoY)**: Membandingkan performa bulan berjalan terhadap bulan yang sama di tahun sebelumnya.
8.  **Gross & Net Margin**: Menghitung margin rasio Gross Margin % dan Net Margin % terhadap Penjualan Netto.
9.  **Budget vs Actual**: Target penjualan bulanan (direncanakan setelah tabel budget diintegrasi).
10. **Running Cumulative Total**: Menampilkan grafik tren pertumbuhan total dari bulan ke bulan.

---

## 4. Antarmuka Pengguna (UI)

*   **Filter Form**: Dropdown dinamis untuk Tahun dan Bulan berjalan sesuai dengan mode yang dipilih.
*   **Highcharts**: Visualisasi grafik kombinasi batang (column) dan garis (spline) dengan tooltip terformat dalam Rupiah (K/M/B).
*   **DataTable**: Menampilkan data angka detail terformat ribuan dengan tombol ekspor Excel dan cetak PDF.
