# Blueprint: Arsitektur Dual-Mode COA & Pivot Analytics (PSAK 118 Compliant)

**Klien:** PT. INDOSAN  
**Modul:** `bi_reports` (Business Intelligence & Pivot Analytics)  
**Tanggal:** 10 Juli 2026  
**Topik:** Pembaruan Struktur COA, Laporan Rugi Laba (P&L), dan Dashboard BI untuk Kepatuhan PSAK 118 (IFRS 18).

---

## 1. Latar Belakang Masalah
1.  **Format Data Kurang Ideal:** Penggunaan teks mentah (seperti `"biaya usaha"`, `"biaya bpjs"`) pada tabel `rugilaba` tahun 2022 menyebabkan anomali agregasi dan rawan *typo*.
2.  **Pelanggaran PSAK 118:** Sistem Laba Rugi lama menganggap semua kategori `biaya` sebagai "Biaya Operasional". Padahal, menurut PSAK 118, *Beban Bunga* wajib dipisah ke dalam kategori *Pendanaan (Financing)*, dan pendapatan di luar bisnis utama wajib masuk ke kategori *Investasi (Investing)*.
3.  **Kebutuhan Transisi Halus (Dual-Mode):** Manajemen internal masih membutuhkan *layout* laporan klasik, sementara untuk tujuan audit dan *best-practice*, sistem dituntut menyajikan laporan yang sesuai dengan kerangka PSAK 118 (Laba Operasi, Investasi, Pendanaan).

---

## 2. Arsitektur Solusi (The Blueprint)

Pendekatan yang disepakati adalah **Dual-Classification Master COA** dipadukan dengan **Bridge Mapping (Penerjemah Teks Lawas)** di level CodeIgniter Model (tanpa membuat View fisik di database server).

### A. Perubahan Skema Database (`master_coa` / `coa`)
Tabel COA diperkuat identitasnya dengan penambahan dimensi paralel:
*   `kategori_klasik`: (ENUM) `Pendapatan`, `HPP`, `Biaya Operasional`, `Lain-lain`. *(Untuk backward-compatibility)*
*   `psak_category`: (ENUM) `Operating`, `Investing`, `Financing`, `Tax`, `Unassigned`. *(Untuk PSAK 118)*
*   `tipe_akun`: (ENUM) `Asset`, `Liability`, `Equity`, `Revenue`, `COGS`, `Expense`.
*   `parent_id`: Untuk membentuk pohon hierarki P&L.

### B. Tabel Penerjemah Khusus (Bridge Mapping)
Dibuat tabel baru `coa_legacy_mapping` yang memetakan nama mentah (historical data) ke kode COA resmi.
*   *Contoh:* `"biaya usaha"` -> Kode `6010`.

### C. Logic Penggabungan di CodeIgniter (Model Layer)
Di dalam `MdlRugilaba.php` (fungsi `getPivotData`), data dibentuk secara dinamis dengan metode `JOIN`:
1.  `rugilaba` di-LEFT JOIN dengan `coa_legacy_mapping` untuk menangkap nama teks lawas.
2.  Hasilnya di-LEFT JOIN dengan `coa` untuk menempelkan stempel identitas klasifikasi ganda (Klasik & PSAK).
3.  Data yang di-return berbentuk array *Flat / Tabular JSON* siap pakai.

---

## 3. Keuntungan Desain (Klaim Arsitektur)

1.  **Zero Data Loss & Safe Transition:** Tidak perlu melakukan `UPDATE` atau memodifikasi jutaan baris di tabel `rugilaba` historis, yang sangat rawan menyebabkan selisih audit.
2.  **Pivoting Fleksibel (Drag & Drop):** *Engine* PivotTable.js di frontend hanya menerima data Flat. User bebas menentukan dimensi laporan dengan menyeret:
    *   `Kategori Klasik` ke *Rows* -> Membentuk laporan tradisional.
    *   `PSAK Category` ke *Rows* -> Membentuk Laba Rugi berstandar IFRS 18 (memisahkan Operating Profit & Financing Cost secara tegas).
3.  **No DB View Clutter:** Beban komputasi JOIN dipindahkan ke *Application Layer* (PHP CI Query Builder) ketimbang menumpuk *Database View* di MySQL.

---

## 4. Konfigurasi Hierarki PSAK 118 (Panduan Mapping)

Setiap pembuatan COA baru wajib mengikuti pakem:
*   **Operating (Operasi):** Aktivitas utama pencetak uang perusahaan (Penjualan Utama, HPP, Biaya Gaji, Sewa Gedung Toko, Marketing).
*   **Investing (Investasi):** Hasil aset yang diparkir di luar bisnis inti (Pendapatan Sewa Properti nganggur, Dividen Saham, Laba Jual Aset Tetap, Bunga Deposito).
*   **Financing (Pendanaan):** Beban yang lahir karena mendanai bisnis dengan utang (Beban Bunga Bank, Bunga Leasing, Selisih Kurs dari Utang USD).

*(File ini dikelola oleh Agen AI. Segala bentuk update pada modul `bi_reports` terkait laporan keuangan harus diselaraskan dengan blueprint ini).*
