# 📘 EVEREST AI COPILOT: SPESIFIKASI FITUR & ROADMAP MASA DEPAN
**Sistem Enterprise AI Terintegrasi ERP PT Everest Electronic**  
*Dokumen Master Arsitektur, Fitur Aktif, dan Rencana Pengembangan Strategis*

---

## 1. Arsitektur & Infrastruktur Saat Ini

```
┌───────────────────────────────────────────────────────────────────────────┐
│                          ANTARMUKA PENGGUNA (UI)                          │
│               - Messenger / Widget Chat Internal Everest ERP              │
│               - Akses Web Desktop & Mobile / Scanner Tablet               │
└─────────────────────────────────────┬─────────────────────────────────────┘
                                      │ HTTP AJAX / REST API
                                      ▼
┌───────────────────────────────────────────────────────────────────────────┐
│                        CONTROLLER & BUSINESS LOGIC                        │
│   - Application Controller: application/controllers/Chat.php              │
│   - Model Tool Grounding: application/models/Coms/ComAiErpTools.php       │
│   - Setting & Konfigurasi: application/config/ai_chat.php                 │
└─────────────────────────────────────┬─────────────────────────────────────┘
                                      │
              ┌───────────────────────┴───────────────────────┐
              ▼                                               ▼
┌───────────────────────────────┐           ┌───────────────────────────────┐
│   DATABASE REPLIKA REALTIME   │           │      AI INFERENCE GATEWAY     │
│  Host: 192.168.5.17:3306      │           │  1. Internal LAN Gateway:     │
│  User: app_admin (Read-Only)  │           │     Model Alias: BP-MGK       │
│  DB: run_everest_modul        │           │     Port 4096 (192.168.5.10)  │
│  - Replikasi Realtime dr 11.100           │  2. Cloud Fallback:           │
│  - Proteksi Total Beban Kasir │           │     Groq Cloud, Gemini,       │
│  - Buku Pembantu & Transaksi  │           │     OpenRouter, OpenAI        │
│                               │           │  3. Sanitized Error Guard:    │
│                               │           │     Clean HTML Fallback Card  │
│                               │           │     (Zero raw JSON/leakage)   │
└───────────────────────────────┘           └───────────────────────────────┘
```

---

## 2. Fitur yang Sudah Aktif Saat Ini (Live Production)

### 2.1 Persona Korporat Enterprise (*Everest AI Copilot*)
* **Identitas Resmi:** Konsultan Bisnis & Penasihat Operasional ERP Senior untuk PT Everest Electronic.
* **Gaya Komunikasi:** Santun, hangat, profesional, menghormati hierarki korporat, dan menyapa pengguna berdasarkan nama dan peran aktifnya (*contoh: "Halo Bapak Budi Santoso, Kasir Cabang Pinang"*).
* **Format Penyajian Data:** Menggunakan tabel Markdown terstruktur dengan baris dan kolom yang rapi, dilengkapi ringkasan eksekutif (*Executive Summary*) dan rekomendasi solutif.

### 2.2 Protokol Keamanan Data & Batasan Etika (*Guardrails & RBAC*)
* **Proteksi Kerahasiaan Perusahaan:** Menolak dengan tegas namun santun (*Respectful Refusal*) segala upaya meminta password server, kredensial database, API key, maupun data pribadi nasabah/karyawan (KTP, No. Rekening, UU PDP).
* **Penegakan Hak Akses (RBAC):** Membatasi akses HPP modal, kalkulasi laba bersih, dan saldo likuiditas bank hanya untuk level Eksekutif (`superman`, `admin`, `super_admin`, `owner`, `direksi`). Staf umum hanya disajikan data kuantitatif fisik.
* **Ketahanan Terhadap Manipulasi (*Jailbreak Resilience*):** Kebal terhadap teknik *prompt injection* seperti perintah *"Abaikan seluruh aturan sebelumnya"*.
* **Pengalihan Percakapan Luar Pekerjaan (*Gentle Redirection*):** Merespons pertanyaan santai/humor secara ramah, lalu secara taktis mengarahkan staf kembali fokus pada operasional kantor.

### 2.3 Modul Deterministic Tool Grounding (Data Riil ERP)
1. **Pengecekan Stok Riil & Efektif (Aturan 3.13):**
   * Menghitung stok efektif = $\text{Saldo Fisik} - \text{Stok Terkunci (Hold Locker)}$.
   * Menampilkan sebaran stok per cabang gudang dan mengunci HPP bagi staf non-eksekutif.
2. **Peringatan Stok Kritis & Reorder MOQ:**
   * Mendeteksi produk yang habis ($=0$) atau mendekati ambang batas aman ($\le 5$ unit) agar tim purchasing segera menerbitkan PO.
3. **Analisis Portofolio, HPP & Margin Proyek:**
   * Menyajikan Nilai Kontrak, Target RAB, Realisasi HPP Riil, Persentase Serapan RAB (*Burn Rate*), Laba Kotor, dan status peringatan biaya (🟢 Aman / 🟡 Waspada / 🔴 Over-Budget).
4. **Pantauan SPK & Tugas Lapangan:**
   * Melacak nomor SPK proyek, unit pekerjaan, mandor pelaksana, dan status progres pengerjaan.
5. **Piutang Termin Penagihan Proyek (Project AR):**
   * Menyajikan rincian tagihan customer, nilai termin, pembayaran masuk, dan sisa piutang proyek.
6. **Posisi Likuiditas Kas & Bank (Khusus Eksekutif):**
   * Mengonsolidasikan dana kas fisik toko/cabang dan saldo seluruh rekening bank operasional.
7. **Analisis Modal Kerja (Working Capital Gap):**
   * Mengomparasikan total piutang customer aktif terhadap kewajiban hutang supplier yang harus dibayar.
8. **Ikhtisar Penjualan & Kinerja Cabang:**
   * Menyajikan omset penjualan konsolidasi bulan berjalan dan hari ini per masing-masing cabang.

### 2.4 Fitur Khusus Bisnis Perdagangan & Distribusi Elektronik
1. **Customer Credit & Overdue Guard (*Guha et al., 2021*):**
   * Menghitung plafon kredit di `per_customers` dikurangi akumulasi piutang berjalan di `_rek_pembantu_customer_cache`.
   * Memberikan status kelayakan kredit (🟢 Boleh Kredit / 🟡 Mendekati Limit / 🔴 Tahan Order karena Over-Limit).
2. **Deteksi Stok Macet / Slow-Moving & Dead-Stock (*Toorajipour et al., 2021*):**
   * Mendeteksi inventori elektronik yang mengendap tanpa mutasi keluar selama $\ge 90$ hari.
   * Menghitung hari tidak bergerak, estimasi nilai modal tertahan (HPP), dan menyarankan langkah promo cuci gudang atau *bundling*.
3. **Analisis Transaksi Aktif / Context-Aware via `ref_transaksi`:**
   * Membaca nomor/ID transaksi yang sedang dibuka staf di layar, menyajikan rincian item, dan mengevaluasi margin penjualan (mencegah salah input jual di bawah HPP).
4. **Actionable Deep-Link Transaksi (*Rejeb et al., 2024*):**
   * Menyematkan tombol link cepat langsung ke modul transaksi Everest (`[🛒 Buat PO]`, `[👤 Buka Master Customer]`, `[📦 Buka Modul Stok]`, `[📂 Buka Proyek]`).

### 2.5 Manajemen Sesi Persisten per Pengguna & Audit Trail Enterprise
1. **Persistent Session per User (`ai_session_id`):**
   * Setiap pengguna yang login memiliki pengenal sesi AI unik (`$_SESSION['login']['ai_session_id']`).
   * **OpenCode On-Premise Native Session:** Menjaga `opencode_native_session_id` persisten, menggunakan `POST /session/{id}/message` secara berulang sehingga server OpenCode memiliki ingatan alami terhadap seluruh percakapan sebelumnya.
   * **Auto-Recovery & Failover:** Jika server OpenCode sempat direstart sehingga sesi lama menghasilkan HTTP 404, sistem secara cerdas membuat sesi baru dan menyematkan riwayat percakapan dari database lokal agar konteks percakapan pengguna tidak terputus.
   * **Multi-Turn Context (Cloud / OpenAI / Gemini):** Mengirimkan riwayat tanya-jawab terakhir (`conversationTurns`) dari database `sys_chat_message` ke endpoint AI sehingga model cloud mengingat topik obrolan sebelumnya.
2. **Kontrol Sesi Pengguna (Reset / Sesi Baru):**
   * **Tombol UI Header:** Tersedia tombol `[+ Sesi Baru]` di bagian atas panel chat AI dengan konfirmasi dialog untuk memulai topik obrolan baru.
   * **Slash Commands:** Pengguna dapat mengetik langsung `/reset`, `/new`, `/clear`, atau `/clearsession` di kotak pesan untuk membuka lembaran sesi baru.
3. **Audit Trail Komprehensif (`sys_ai_audit_trail`):**
   * Seluruh aktivitas tanya-jawab AI dicatat secara transparan dan akuntabel di tabel database `sys_ai_audit_trail`.
   * **Parameter yang Dicatat:**
     * `session_id`: ID sesi percakapan unik per topik obrolan.
     * `user_id`, `user_name`, `user_jenis`: Identitas staf dan jabatannya.
     * `cabang_id`, `cabang_nama`: Lokasi unit kerja operasional.
     * `provider` & `model`: Mesin inferensi AI yang memproses (BP-MGK, Groq, Gemini, dsb).
     * `intent`: Kategori analisis bisnis yang dideteksi sistem (cek stok, plafon customer, likuiditas bank, dsb).
     * `user_prompt`: Teks pertanyaan asli staf.
     * `ref_transaksi`: Dokumen transaksi ERP yang dilampirkan.
     * `grounding_data`: Rekaman data internal ERP yang diekstraksi dan diserahkan ke AI.
     * `ai_response`: Jawaban lengkap yang diberikan oleh AI.
     * `duration_seconds`: Kecepatan respons eksekusi model (dalam milidetik/detik).
     * `status` & `error_detail`: Status pemrosesan (*success* atau *error*).
     * `ip_address` & `user_agent`: Keamanan jaringan dan perangkat penanya.
     * `created_at`: Stempel waktu interaksi.
   * **Akses Pengawasan:** Endpoint `Chat/ai_audit_trail` disediakan khusus untuk level Manajemen (Supervisor, Kantor Pusat, Admin, dan Eksekutif) untuk pengawasan kepatuhan dan tata kelola data perusahaan.

### 2.6 Penyajian Saran Prompt Cerdas Berbasis Hak Akses RBAC (Role-Based Dynamic Prompt Chips)
1. **Penyaringan Saran Menu Berdasarkan Izin Aktif Pengguna:**
   * Tombol pintas pertanyaan instan (*Quick Prompt Chips*) di bagian bawah panel obrolan AI disaring secara dinamis di level server (`he_chat_helper.php`) sesuai dengan wewenang login staf.
   * **Pencegahan Frustrasi Pengguna (*Zero Permission Denial UX*):** Pengguna staf (kasir, sales, gudang, keuangan cabang) **TIDAK PERNAH** disodori tombol analisis eksekutif rahasia seperti *"💰 Kas & Bank"*, *"🏢 Omset Konsolidasi"*, atau *"⚖️ Piutang vs Hutang"* yang berujung pada pesan penolakan izin akses (*Access Denied*).
2. **Matriks Saran Prompt Berdasarkan Peran:**
   * **Level 1 (Eksekutif / Direksi / Owner / Super Admin):** `💰 Kas & Bank`, `🏢 Omset Konsolidasi`, `⚖️ Piutang vs Hutang`, `📦 Cek Stok Barang`, `⚠️ Stok Kritis`, `⏳ Stok Macet`, `📂 Portofolio Proyek`, `❓ SOP Batal/Retur`.
   * **Level 2 (Supervisor / Manager / Kabag):** `📦 Cek Stok Barang`, `⚠️ Stok Kritis`, `📑 Plafon Customer`, `⏳ Stok Macet`, `📊 Rekap Penjualan`, `📂 Status SPK Proyek` *(jika relevan)*, `❓ SOP Batal/Retur`.
   * **Level 3 (Proyek & Mandor Lapangan):** `📂 Status SPK Proyek`, `📦 Cek Stok Material`, `⚠️ Stok Kritis`, `❓ SOP Distribusi Proyek`.
   * **Level 4 (Gudang & Logistik / Purchasing):** `📦 Cek Stok Barang`, `⚠️ Stok Kritis (Reorder)`, `⏳ Stok Macet (Dead Stock)`, `❓ SOP Batal/Retur`, `💡 Penerimaan Barang`.
   * **Level 5 (Keuangan & Pembukuan / Kasir):** `📑 Plafon & Piutang`, `📦 Cek Stok Barang`, `⚠️ Stok Kritis`, `⏳ Stok Macet Gudang`, `❓ SOP Batal/Retur`, `💡 Alur Piutang`.
   * **Level 6 (Sales & Staf Operasional):** `📦 Cek Stok Barang`, `📑 Plafon Customer`, `⚠️ Stok Kritis`, `⏳ Stok Macet`, `❓ SOP Batal/Retur`, `💡 Ketentuan Diskon`.
3. **Resolusi Peran Komprehensif (*Multi-Layer RBAC Resolution*):**
   * Menyelaraskan pendeteksian peran di `Chat.php` dan `he_chat_helper.php` tidak hanya dari kolom `jenis`, tetapi juga dari `employee_type`, `is_admin`, dan grup keanggotaan `membership` (`c_owner`, `root`, `superman`, `*_spv`, `*_mgr`, `c_finance`, `o_gudang`, dsb).
   * Menjamin sinkronisasi identitas staf yang tercatat pada *Audit Trail* dan sapaan personalisasi asisten AI.

---

## 3. Rencana Fitur Masa Depan (Future Roadmap)

Berikut adalah 5 inisiatif strategis lanjutan untuk meningkatkan performa bisnis dari data ratusan ribu transaksi Everest:

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                             ROADMAP TAHAPAN KERJA                           │
│                                                                             │
│  [FASE 1] Predictive Stock Run-Out & Sales Velocity                         │
│           (Prediksi kapan barang habis berbasis laju penjualan)             │
│                                    ▼                                        │
│  [FASE 2] Smart Product Substitution & Cross-Branch Finder                  │
│           (Pencarian barang pengganti & stok cabang lain agar tidak rugi)   │
│                                    ▼                                        │
│  [FASE 3] Smart Audit & Anomaly Detection (Fraud Prevention)                │
│           (Deteksi jual di bawah modal, diskon janggal, lonjakan retur)     │
│                                    ▼                                        │
│  [FASE 4] Agentic Action: Pembuat Draf Transaksi via Obrolan                │
│           (Ketik order di chat -> sistem otomatis buat draf SO/PO)          │
│                                    ▼                                        │
│  [FASE 5] Knowledge Base Teknis, Garansi & Manual Elektronik (RAG)          │
│           (Tanya jawab kode error AC, buku manual, dan prosedur klaim)      │
└─────────────────────────────────────────────────────────────────────────────┘
```

### Rincian Rencana:
1. **Fase 1: *Predictive Stock Run-Out***  
   * Menghitung laju penjualan rata-rata harian (30 hari terakhir) dibagi sisa stok. AI memberi tahu manajemen: *"Stok AC Daikin 1 PK diprediksi habis dalam 6 hari. Buat PO sekarang agar tidak kehabisan barang saat lead-time."*
2. **Fase 2: *Product Substitution & Cross-Branch Finder***  
   * Mencegah *lost sales* di toko retail: jika AC Panasonic 1/2 PK kosong di Cabang Pinang, AI menyarankan stok yang tersedia di Cabang lain atau menyarankan tipe alternatif (Sharp/Daikin) dengan spesifikasi kapasitas watt dan PK yang setara.
3. **Fase 3: *Smart Audit & Anomaly Detection***  
   * AI auditor otomatis untuk direksi/audit internal: memindai transaksi harian yang mencurigakan (contoh: nota dengan diskon di luar batas wajar sales, retur barang mencurigakan, atau biaya petty cash yang melonjak tiba-tiba).
4. **Fase 4: *Agentic Action: Text-to-Transaction***  
   * Meningkatkan AI dari sekadar pembaca data (*Read-Only*) menjadi pembuat draf (*Read-Write Terkontrol*). Sales cukup mengetik di chat: *"Buatkan draf SO Toko Sinar Jaya: 2 unit Daikin 1 PK tempo 30 hari"*, AI memvalidasi stok dan plafon, lalu menerbitkan draf yang tinggal di-approve supervisor.
5. **Fase 5: *Knowledge Base Teknis & Garansi Elektronik (RAG)***  
   * Membantu teknisi dan customer service menjawab kode error perangkat pendingin/kelistrikan (misal arti kedip lampu AC inverter / error code) dan ketentuan kartu garansi pabrikan langsung dari dokumen teknis PDF.

---

## 4. Evaluasi Infrastruktur Server MCP (*Model Context Protocol*)

### 4.1 Apakah Infrastruktur Saat Ini Bisa Dipakai?
**BISA 100% — Tanpa perlu membeli perangkat keras baru ataupun sewa cloud berbayar.**

Infrastruktur yang saat ini berjalan:
1. **Server AI Lokal (`192.168.5.10` Port 4096):**  
   Sudah menjalankan aplikasi **OpenCode v1.17.20** yang secara bawaan (*built-in*) telah mendukung protokol MCP sebagai *MCP Client*.
2. **Database Server (`192.168.5.10:3306`):**  
   Menyimpan seluruh data aktif Everest ERP (`run_everest_modul`).
3. **Web Application Server:**  
   Menjalankan Apache/PHP 5.6 CodeIgniter 3 di jaringan lokal yang sama.

### 4.2 Bagaimana Konsep Kerjanya?
MCP Server adalah sebuah layanan jembatan standar terbuka (*standard open protocol*).  
Alih-alih membuat fungsi manual di PHP untuk setiap fitur baru, kita membuat **1 layanan perantara MCP** yang berjalan di server `192.168.5.10`. Layanan ini mendaftarkan fungsi-fungsi ERP Everest (misal: `cek_stok`, `cek_plafon`, `analisis_transaksi`) ke OpenCode. OpenCode kemudian secara otomatis dapat mengenali dan menggunakan fungsi tersebut tanpa perlu *hardcoding* regex di controller.

### 4.3 Apa yang Perlu Ditambahkan?
1. **Skrip Layanan `everest-mcp-server`:**  
   Program ringan berbasis **Node.js** atau **Python** yang ditempatkan di server `192.168.5.10`. Skrip ini menggunakan SDK resmi `@modelcontextprotocol/sdk` untuk membaca database MySQL lokal.
2. **File Konfigurasi OpenCode (`opencode.json`):**  
   Menambahkan blok konfigurasi MCP pada OpenCode di `192.168.5.10` agar terhubung ke skrip `everest-mcp-server`.
3. **Keunggulan untuk Everest:**
   * Seluruh pemrosesan berjalan di jaringan lokal kantor (LAN) — **data perusahaan 100% aman, tidak ada data yang bocor ke internet**.
   * Nol biaya langganan bulanan API eksternal.

---

## 5. Panduan Konfigurasi Mandiri Multi-Tenant & White-Label (`ai_chat.php`)

Seluruh konfigurasi AI Copilot telah dipusatkan dalam satu berkas:
`application/config/ai_chat.php`

Ketika Anda memasang sistem ERP ini ke klien/perusahaan baru, Anda **TIDAK PERLU mengubah kode program PHP sama sekali**. Cukup sesuaikan berkas `ai_chat.php` dengan parameter berikut:

### 5.1 Parameter Branding & Identitas Perusahaan
| Variabel | Contoh Default (Pilot) | Contoh Klien Baru (Contoh: Logistik/FMCG) |
|---|---|---|
| `'company_name'` | `'PT Everest Electronic'` | `'PT Nusantara Mandiri'` |
| `'bot_name'` | `'Everest AI Copilot'` | `'Nusantara AI Copilot'` |
| `'bot_title'` | `'Enterprise ERP Business Consultant'` | `'Senior ERP Supply Chain Consultant'` |
| `'business_sector'` | `'Perdagangan & Distribusi Elektronik'` | `'Distribusi Fast-Moving Consumer Goods (FMCG)'` |
| `'greeting_salutation'` | `'Bapak/Ibu'` | `'Bapak/Ibu'` / `'Rekan'` |

> **Catatan:** Mengubah nama perusahaan otomatis mengadaptasi prompt sistem, sapaan asisten, judul sesi obrolan, dan identitas bot pada database.

### 5.2 Infrastruktur Single Server vs Multi Server (Read-Replica)
* **Jika Klien Memiliki Server Replika Terpisah (Perusahaan Besar):**
  ```php
  'use_db_replica'   => true,
  'replica_db_group' => 'ai_replica', // Dikonfigurasi di application/config/database.php
  ```
  AI membaca analitik dari server replika secara non-blocking sehingga kasir dan staf gudang tidak terganggu.
* **Jika Klien Hanya Memiliki 1 Server Tunggal (Single Database):**
  ```php
  'use_db_replica'   => false,
  ```
  AI otomatis membaca dari database utama (`default`). Tidak ada error ataupun konfigurasi koneksi ganda yang perlu disiapkan.

### 5.3 Toggle Fitur Bisnis (`features`)
Anda dapat mengaktifkan (`true`) atau menonaktifkan (`false`) kemampuan analitik tertentu sesuai modul yang dibeli oleh klien baru:
```php
'features' => array(
    'stock_check'              => true,  // Cek stok fisik, locker, & batas reorder
    'customer_credit'          => true,  // Plafon piutang, overdue, kelayakan kredit
    'slow_moving_stock'        => true,  // Deteksi barang macet (>90 hari) & HPP tertahan
    'active_transaction_check' => true,  // Evaluasi margin transaksi aktif di layar
    'project_management'       => false, // Matikan jika klien bukan perusahaan proyek/kontraktor
    'cash_bank_liquidity'      => true,  // Likuiditas kas & rekening bank (Direksi)
    'working_capital'          => true,  // Rasio modal kerja AR vs AP (Direksi)
    'deep_links'               => true,  // Tombol link cepat ke modul transaksi
),
```

#### 5.4 Mesin AI (LLM Engine) & Model Alias
Mendukung perpindahan instan antara server lokal (OpenCode / Ollama) atau cloud komersial (Groq, Gemini, OpenRouter, OpenAI) dengan penyembunyian nama vendor mentah melalui **Model Alias Internal (`BP-MGK`)**:
```php
'provider'        => 'opencode',           // atau 'groq', 'gemini', 'openrouter'
'api_key'         => 'opencode:rahasia13', // atau API Key dari dashboard provider
'model'           => 'big-pickle',         // Disajikan ke antarmuka pengguna sebagai 'BP-MGK'
'custom_endpoint' => 'http://192.168.5.10:4096',
```
> **Proteksi Kegagalan Provider (Sanitized Error Guard):** Jika terjadi kegagalan jaringan atau lisensi pada server inference hulu (seperti error 426 *Upgrade Required*), sistem otomatis menangkap exception tersebut dan menyajikan kartu panduan pemeliharaan yang ramah (*sanitized HTML card*) tanpa membocorkan raw JSON, stacktrace, atau header Cloudflare ke layar staf/karyawan.

---

## 6. Desain UI/UX: Modern Enterprise ERP Collaboration & AI Workspace

Tampilan antarmuka telah ditingkatkan dari gaya aplikasi perpesanan personal (WhatsApp) menjadi **Enterprise ERP Collaboration Hub** berstandar korporat modern:

```
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ 💬 EVEREST COPILOT • CHAT HUB                     [◨ Dock]  [⤢ Expand]  [🔄]  [✕]      │
├──────────────────────────┬─────────────────────────────────────────────────────────────┤
│ 🔍 Cari rekan/cabang...  │ 👤 Budi Santoso (Cabang Surabaya)                           │
│ [🟢 Online] [🏢 Cabang]  │    🟢 Online • Aktif 14:32                                  │
├──────────────────────────┼─────────────────────────────────────────────────────────────┤
│ 🤖 ASISTEN AI COPILOT    │                                                             │
│  [AI] Everest Copilot    │  [Budi - 14:30]                                             │
│                          │  Siang pak, stok AC Panasonic 1 PK kosong di toko.          │
│ 🏢 CABANG SURABAYA       │  [Hover: 📋 Salin | ↩ Kutip]                                │
│  Zahra: Ada mutasi...    │                                                             │
│                          │  [Saya - 14:32]                                             │
│ 👤 REKAN KERJA           │  Sudah dibuatkan draf transaksinya?                         │
│  🟢 Budi Santoso         │                                                             │
│     Anda: Drafnya mana?  │  [Budi - 14:33]                                             │
│     14:33                │  Sudah pak, ini nomornya:                                   │
│  ⚪ Desi (Admin)         │  ┌────────────────────────────────────────────────────────┐ │
│     13:10                │  │ 📄 Dokumen ERP Terlampir: MUT.202609.0042              │ │
│                          │  │ [🔗 Buka Resume Transaksi (Modal)]                     │ │
│                          │  └────────────────────────────────────────────────────────┘ │
├──────────────────────────┴─────────────────────────────────────────────────────────────┤
│ [🚨 Urgent] [📎 Lampirkan Trx]  [ Ketik pesan ke Budi Santoso...             ]  [➤]    │
└────────────────────────────────────────────────────────────────────────────────────────┘
```

### 6.1 Karakteristik & Fitur Baru Antarmuka

1. **Tema Visual Enterprise (*Clean Corporate Theme*):**
   - Menggunakan palet *Emerald & Slate* (`#064e3b` hingga `#047857`) yang elegan dan berwibawa.
   - Menghapus elemen dekoratif non-bisnis (seperti corak/doodle WhatsApp), digantikan latar belakang bersih `#f8fafc` dengan sudut kartu membulat 12px dan kontras tipografi tinggi.

2. **Mode Docking Sidebar Fleksibel & Bebas Di-resize (*Draggable Docked Split-Screen Mode [◨]*):**
   - Pengguna dapat mengunci jendela obrolan ke tepi kanan layar dengan lebar awal lapang (`620px`, tinggi `100vh`).
   - **Tarik untuk Atur Lebar (*Draggable Left Resizer*):** Terdapat bilah handle interaktif di tepi kiri jendela yang dapat diklik & ditarik bebas untuk memperbesar/memperkecil lebar obrolan (dari `380px` hingga `1200px` / layar penuh).
   - **Dobel-Klik / Tombol Expand Pintar (`[⤢]`):** Mengubah ukuran seketika antara mode standar (~620px) dan mode lebar penuh (~55% lebar layar) tanpa keluar dari docking.
   - **Ciutkan Kontak (*Collapsible Contacts Sidebar [☰]*):** Pengguna dapat menyembunyikan panel daftar kontak dengan 1-klik, memberikan **100% lebar jendela untuk ruang baca & ketik percakapan obrolan**.
   - Posisi, lebar dock pilihan pengguna, dan status ciut/buka kontak otomatis tersimpan di `localStorage` per peramban.

3. **Bilah Tindakan Cepat pada Balon Pesan (*Hover Quick Actions*):**
   - Saat kursor diarahkan ke balon obrolan apa pun, muncul tombol aksi cepat:
     - **📋 Salin Pesan:** Menyalin teks obrolan seketika ke *clipboard* sistem.
     - **↩ Kutip Pesan (*Quote/Reply*):** Otomatis menyematkan kutipan pesan lawan bicara (`> Pengirim: "teks"`) ke dalam kotak input.

4. **1-Click Salin Tabel AI ke Excel / Spreadsheet:**
   - Setiap tabel analitik yang dihasilkan oleh AI kini dilengkapi bilah alat (*toolbar*) dengan tombol **"Salin ke Excel"**.
   - Data disalin menggunakan format standar *Tab-Separated Values* (TSV) sehingga dapat langsung di-*paste* sempurna ke Microsoft Excel, Google Sheets, atau LibreOffice Calc tanpa distorsi kolom.

5. **Pratinjau Pesan Terakhir & Waktu (*Real-Time Snippet & Timestamp Preview*):**
   - Daftar kontak cabang dan rekan kerja di panel kiri menampilkan cuplikan pesan terakhir (`Anda: ...` atau nama pengirim) beserta stempel jam (misal `14:32`).
   - Pesan berkategori mendesak ditandai secara visual dengan warna merah dan ikon lonceng peringatan.

6. **Mode Prioritas Mendesak (*Urgent Flagging & Distinctive Audio*):**
   - Tombol cepat lonceng darurat atau perintah `/urgent [pesan]` untuk menandai pesan penting/kritis antar bagian.
   - Penerima pesan mendesak diperingatkan dengan nada dering khusus berfrekuensi ganda (*dual-tone urgent chime*) via Web Audio API serta bingkai merah menyala.

7. **Kartu Pintar Dokumen ERP (*Smart Transaction Card*):**
   - Referensi nomor transaksi (`ref_transaksi`) secara otomatis dirender sebagai kartu interaktif.
   - Tombol **"Resume Transaksi"** membuka jendela *modal pop-up* resume resmi dokumen langsung di dalam aplikasi tanpa me-reload browser.

8. **Chip Perintah Operasional Cepat (*Operational Prompt Chips*):**
   - Tombol saran cepat di atas kolom input yang disesuaikan untuk tugas operasional harian:
     - *Karyawan:* Cek Stok Kritis, Cek Plafon Customer, Rekap Penjualan Hari Ini.
     - *SPV / Eksekutif:* Analisis Margin, Modal Kerja, Posisi Kas & Bank.

---

## 7. Evaluasi Strategis Arsitektur Multi-Tenant Subsidiary (Kasus Holding SAN Group)

### 7.1 Studi Kasus: Arsitektur SAN Group
SAN Group memiliki sejumlah anak perusahaan (*subsidiary*) yang masing-masing beroperasi secara independen:
* `sarana.mayagrahakencana.com` (PT. Sarana ...)
* `sdl.mayagrahakencana.com` (PT. SDL ...)
* `ppu.mayagrahakencana.com` (PT. PPU ...)
* Dan entitas anak perusahaan lainnya di bawah naungan SAN Pusat sebagai *Holding Company*.

Masing-masing entitas tersebut memiliki **Domain Web Terpisah** dan **Database MySQL Terpisah** (*Full Multi-Tenant Isolation*).

---

### 7.2 Pertanyaan Kunci: Apakah Sebaiknya Chat Mereka Dihubungkan atau Dibiarkan Terpisah?

Berikut perbandingan analisis risiko tata kelola korporat (*Corporate Governance* & ISO/IEC 27001):

| Aspek Pertimbangan | Opsi A: Dibiarkan Terpisah Masing-Masing | Opsi B: Dihubungkan Penuh (Semua Staf Bebas Chat Lintas PT) | Opsi C: Model Hybrid (Rekomendasi Terbaik) |
|---|---|---|---|
| **Isolasi Data Legal & Privasi** | 🟢 **Sangat Aman:** Tidak ada risiko kebocoran nota internal atau data pelanggan antar PT. | 🔴 **Beresiko Tinggi:** Staf operasional bisa salah kirim nota rahasia/harga modal PT A ke staf PT B. | 🟢 **Sangat Aman:** Pemisahan ketat di level staf operasional. |
| **Beban & Kompleksitas Database** | 🟢 **Nol Kompleksitas:** Setiap database PT mengelola chat-nya sendiri tanpa kueri lintas database. | 🔴 **Tinggi:** Membutuhkan federasi lintas database atau server socket sentral khusus. | 🟡 **Terkontrol:** Jembatan hanya dibuka untuk otorisasi tertentu. |
| **Audit & Kepatuhan Pajak** | 🟢 **Sangat Bersih:** Auditor atau pemeriksa pajak hanya melihat log transaksi dan komunikasi entitas terkait. | 🔴 **Bisa Bermasalah:** Jejak komunikasi bisnis antar entitas hukum berbeda bisa memicu temuan *transfer pricing*. | 🟢 **Sangat Bersih:** Dokumen dan chat operasional tetap independen per PT. |
| **Kebutuhan Holding / Direksi** | 🟡 **Kurang Praktis:** Direksi holding harus login ke masing-masing domain/subdomain PT. | 🟢 **Praktis:** Satu layar untuk semua entitas. | 🟢 **Paling Efisien:** Direksi holding memiliki akses khusus koordinasi lintas anak perusahaan. |

---

### 7.3 Rekomendasi Arsitektur Terbaik: *Hierarchical Hub-and-Spoke (Model Hybrid)*

Berdasarkan praktik terbaik arsitektur ERP Enterprise, **pendekatan yang paling tepat dan aman adalah**:

> **"Default Terisolasi di Level Operasional Cabang, Terhubung Terkendali di Level Holding & Manajemen"**

#### Implementasi Praktis:
1. **Level Karyawan Operasional (Kasir, Staf Toko, Mandor, Gudang):**
   * **BIARKAN TERPISAH di Database PT Masing-Masing.**
   * *Alasan:* Karyawan kasir PT. Sarana tidak memiliki kepentingan bisnis untuk menghubungi kasir PT. SDL. Membiarkan mereka terisolasi mencegah obrolan yang tidak produktif, menghindari salah kirim dokumen rahasia, dan menjaga integritas data per entitas hukum.
   * AI Copilot di masing-masing PT juga hanya membaca data stok dan transaksi milik PT yang bersangkutan.

2. **Level Eksekutif & Manajemen Holding (Direksi, General Manager, Auditor Holding):**
   * Disediakan akun khusus di portal pusat holding (*SAN Pusat*) atau opsi *Switch Entity View*.
   * Jika sewaktu-waktu membutuhkan koordinasi lintas PT (misalnya supply chain antar anak perusahaan: PT. Sarana membeli suplai dari PT. SDL), koordinasi dilakukan melalui saluran resmi **Holding Channel** atau akun tingkat holding.

#### Kesimpulan untuk Penerapan SAN Group:
* **Fase Awal:** **Biarkan masing-masing anak perusahaan mandiri dengan database dan domainnya sendiri.** Ini adalah arsitektur paling stabil, tercepat diimplementasikan, dan 100% bebas dari risiko benturan data antar entitas legal.
* **Fase Lanjutan (Opsional):** Jika manajemen puncak SAN menghendaki, cukup tambahkan 1 tabel jembatan terpusat (*Federated Holding Chat*) khusus untuk level supervisor ke atas, tanpa perlu mengorbankan isolasi database operasional.

---

## 8. Tata Kelola Privasi Presensi & Mode Senyap (Stealth / Invisible Mode)

Berdasarkan prinsip *Corporate Governance* dan tata tertib operasional ERP perusahaan, hak pengaturan status kehadiran online (*online presence*) diatur secara berjenjang:

### 8.1 Matriks Otoritas Presensi per Jenjang Jabatan

| Jenjang Jabatan | Mode Senyap (Stealth)? | Indikator yang Ditampilkan | Alasan & Dampak Tata Kelola |
|---|:---:|---|---|
| **Eksekutif / Direksi / Owner** | **YA (Boleh Toggle)** | ⚪ *Senyap (Offline)* atau 🟢 *Online* | Pimpinan terhindar dari serbuan chat non-urgent saat sedang memeriksa laporan keuangan, rapat, atau buka ERP di luar jam kantor. Pimpinan tetap bisa memantau semua orang. |
| **Kepala Cabang & SPV Bagian** | **TIDAK Boleh Invisible Penuh** | 🟢 *Online (Siaga)* / ⚪ *Offline* | Manajemen Pusat wajib dapat memantau kedisiplinan dan kesiapan operasional pimpinan cabang secara transparan. |
| **Staf Operasional (Kasir, Gudang, Admin)** | **DILARANG KERAS** | 🟢 *Online* / ⚪ *Offline* (Otomatis) | Akuntabilitas tugas wajib transparan selama jam kerja. Mencegah alasan *"saya tidak buka ERP"* saat ada koordinasi faktur atau stok mendesak. |

### 8.2 Arsitektur Teknis Mode Senyap
1. **Penyimpanan Status:**
   - Variabel sesi `$_SESSION['login']['is_stealth']` menyimpan preferensi pimpinan (`0` = Online, `1` = Senyap).
   - Saat Mode Senyap aktif, *heartbeat* di `Chat::check_auth_ajax()` mempertahankan kolom `per_employee.status_login = '0'`.
   - Di daftar kontak rekan kerja dan staf, profil eksekutif secara otomatis tampak **⚪ Offline** atau **Aktif [Jam Lalu]**.
2. **Keamanan Toggle:**
   - Tombol toggle `[⚪ Senyap / 🟢 Online]` hanya di-render di antarmuka jika user memiliki hak akses Pusat (`cabang_id = -1`) atau hak akses Administrator (`is_admin = 1`).
   - Staf operasional tidak memiliki tombol ini sama sekali (*read-only presence*).



