Files
open-isp/docs/FITUR_APLIKASI_LENGKAP.md
T
oxpoe eaf05f2811 OPEN-ISP v0.5 (pickle-lime) — rilis open-source perdana
Aplikasi billing & manajemen ISP (fiber optic) — PWA pelanggan, portal teknisi & kolektor,
admin panel lengkap, multi-vendor OLT, RADIUS, WhatsApp/Telegram, pembayaran QRIS.

Kredit & lisensi (ISC):
- Base kode & repo: alijayanet/billing-rtrw oleh Alijaya Net — terima kasih banyak
  atas base kode dan repo yang bermanfaat.
- Add-on: GoWA, LibreSpeed/OpenSpeedTest, Uptime Kuma, notification-forwarder.
- Dikembangkan menjadi OPEN-ISP oleh oxpoe — https://github.com/oxpoe/open-isp
2026-10-09 05:51:21 +07:00

2270 lines
47 KiB
Markdown

# DOKUMENTASI FITUR APLIKASI - RTRWNET BILLING & MANAGEMENT SYSTEM
**Status:** ✅ COMPREHENSIVE FEATURE DOCUMENTATION
**Tanggal:** 14 Agustus 2026
**Tujuan:** Complete reference for all built-in features & functionality
---
## 📑 DAFTAR ISI
1. [Overview Sistem](#overview-sistem)
2. [Portal & Akses](#portal--akses)
3. [Fitur Billing & Invoicing](#fitur-billing--invoicing)
4. [Fitur Manajemen Pelanggan](#fitur-manajemen-pelanggan)
5. [Fitur MikroTik Integration](#fitur-mikrotik-integration)
6. [Fitur GenieACS & TR-069](#fitur-genieacs--tr-069)
7. [Fitur OLT & ONU Management](#fitur-olt--onu-management)
8. [Fitur Payment Gateway](#fitur-payment-gateway)
9. [Fitur GIS & Mapping](#fitur-gis--mapping)
10. [Fitur WhatsApp & Telegram](#fitur-whatsapp--telegram)
11. [Fitur Inventory & Logistics](#fitur-inventory--logistics)
12. [Fitur Ticketing & Support](#fitur-ticketing--support)
13. [Fitur Agent & Sales](#fitur-agent--sales)
14. [Fitur Monitoring & Health](#fitur-monitoring--health)
15. [Fitur Automation & Cron](#fitur-automation--cron)
16. [Fitur Internal User Management](#fitur-internal-user-management)
---
## 📊 OVERVIEW SISTEM
### Informasi Dasar
- **Nama:** RTRWNET Management & Billing System
- **Versi:** 1.0.0
- **Runtime:** Node.js ≥20.0.0
- **Database:** SQLite (better-sqlite3)
- **Main File:** `app-customer.js`
- **Port Default:** 3001 (dapat diubah di settings.json)
- **License:** Terbuka (lihat LICENSE file)
### Target User
1. **Admin/Manajemen ISP** - Pengelola bisnis & konfigurasi sistem
2. **Teknisi Lapangan** - Support & maintenance perangkat pelanggan
3. **Operator Billing** - Penagihan & administrasi keuangan
4. **Agent/Mitra Penjualan** - Penjualan paket & pembayaran
5. **Pelanggan** - Portal self-service
6. **Kolektor** - Approval pembayaran tertangguh
### Tech Stack Utama
```javascript
- Express.js 4.18.2 // Web framework
- SQLite (better-sqlite3) // Database ringan & reliable
- EJS 3.1.10 // Template engine
- Bootstrap 5 // CSS framework
- Leaflet // Map/GIS
- Baileys 6.7.21 // WhatsApp unofficial
- node-routeros-client // MikroTik API
- net-snmp // OLT SNMP
- Axios // HTTP client
- node-cron // Task scheduling
```
---
## 🚪 PORTAL & AKSES
### 1. Portal Pelanggan (Public/Private)
**URL:** `http://localhost:3001/customer`
**Sub-Fitur:**
- ✅ Login/Registrasi (dengan opsi OTP)
- ✅ Dashboard - ringkasan tagihan & status
- ✅ Cek tagihan (tanpa login via `/customer/check-billing`)
- ✅ Riwayat invoice & pembayaran
- ✅ Grafik traffic PPPoE real-time
- ✅ Ubah SSID/Password Wi-Fi
- ✅ Reboot CPE/ONU
- ✅ Beli voucher hotspot
- ✅ Buat tiket support
- ✅ Profil & setting pribadi
**Authentication:** Session-based + OTP optional
**Views:**
```
views/customer/
├── dashboard.ejs // Halaman utama
├── billing.ejs // Riwayat tagihan
├── topup.ejs // Pembayaran online
├── register.ejs // Registrasi
├── device.ejs // Manajemen Wi-Fi
├── ppob.ejs // Pembelian voucher
├── tickets.ejs // Support tickets
```
---
### 2. Portal Admin
**URL:** `http://localhost:3001/admin`
**Sub-Fitur:**
- ✅ Dashboard - statistik & ringkasan
- ✅ Manajemen pelanggan (CRUD)
- ✅ Manajemen paket & harga
- ✅ Billing & invoice generation
- ✅ MikroTik configuration & monitoring
- ✅ GenieACS device management
- ✅ OLT/ONU management
- ✅ Peta jaringan (GIS) dengan Leaflet
- ✅ Whatsapp administration
- ✅ Manajemen agent/agen
- ✅ Laporan keuangan
- ✅ Inventory management
- ✅ Settings & configuration
- ✅ Audit trail & logs
- ✅ Backup & restore
- ✅ Multi-language support
**Authentication:** Session admin-only
**Main Routes:**
```
/admin/login → Admin login
/admin → Dashboard
/admin/customers → Manajemen pelanggan
/admin/packages → Paket layanan
/admin/invoices → Tagihan
/admin/mikrotik → MikroTik tools
/admin/genieacs → Device management
/admin/olts → OLT management
/admin/map → Peta jaringan
/admin/whatsapp → WhatsApp config
/admin/agents → Manajemen agen
/admin/reports → Laporan
/admin/inventory → Gudang
/admin/settings → Pengaturan
```
---
### 3. Portal Teknisi (Field Support)
**URL:** `http://localhost:3001/tech`
**Sub-Fitur:**
- ✅ Dashboard teknis
- ✅ Pool tiket (ticket queue)
- ✅ Peta lokasi pelanggan & ODP
- ✅ Chat WhatsApp integration
- ✅ GPS tracking teknisi
- ✅ Input pelanggan baru (lapangan)
- ✅ Device monitoring (GenieACS)
- ✅ Performance monitoring (CPU, RAM, disk)
- ✅ Riwayat tiket & penanganan
**Authentication:** Session tech-only
**Features:**
```
/tech/ → Dashboard
/tech/tickets → Daftar tiket
/tech/tickets/:id → Detail tiket
/tech/map → Peta jaringan
/tech/devices/:id → Detail device
/tech/monitoring → System monitoring
```
---
### 4. Portal Agen (Agent/Sales)
**URL:** `http://localhost:3001/agent`
**Sub-Fitur:**
- ✅ Login & dashboard
- ✅ Pembayaran tagihan pelanggan (dari saldo agen)
- ✅ Pembelian voucher hotspot
- ✅ Penjualan pulsa & data (Digiflazz)
- ✅ Cetak struk transaksi
- ✅ Riwayat & laporan transaksi
- ✅ Manajemen saldo
**Authentication:** Session agent-only
**Payment Methods:**
- Direct payment dari saldo agen
- E-voucher purchase
- Digital product (pulsa, data, dll via Digiflazz)
---
### 5. Portal Kolektor (Payment Collector)
**URL:** `http://localhost:3001/collector`
**Sub-Fitur:**
- ✅ Login & dashboard
- ✅ Cek tagihan pelanggan per area
- ✅ Buat pengajuan pembayaran
- ✅ Riwayat pengajuan
- ✅ Approval workflow
**Authentication:** Session collector-only
**Workflow:**
```
1. Kolektor cek tagihan pelanggan
2. Kolektor buat pengajuan pembayaran
3. Admin/Kasir approve pengajuan
4. Sistem catat pembayaran
5. Pelanggan dapat notifikasi via WhatsApp
```
---
### 6. Portal Finance (Keuangan)
**URL:** `http://localhost:3001/finance`
**Sub-Fitur:**
- ✅ Laporan pendapatan
- ✅ Kategori pengeluaran
- ✅ Entry pengeluaran operasional
- ✅ Cash in/out tracking
- ✅ Financial dashboard
- ✅ Export laporan
**Authentication:** Admin-only access
---
### 7. Portal Public (Publik)
**Tanpa Login:**
- ✅ Cek tagihan tanpa login: `/customer/check-billing`
- ✅ Halaman status isolated: `/isolated`
- ✅ QRIS static payment: `/qris/static.ejs`
- ✅ Public voucher info: `/public/voucher`
- ✅ TOS/Privacy/About/Contact pages
---
## 💰 FITUR BILLING & INVOICING
### 1. Invoice Generation
**Jenis Billing:**
- ✅ Bulanan otomatis (automatic monthly billing)
- ✅ Per pelanggan (single customer)
- ✅ Massal (bulk billing)
- ✅ Prorata (untuk bulan pertama)
**Komponen Invoice:**
```javascript
{
id: number,
customer_id: number,
period_month: number, // 1-12
period_year: number, // 2026
amount: number, // Total tagihan
status: 'unpaid'|'paid'|'cancelled',
qris_amount_unique: number, // QRIS nominal unik
notes: string, // Promo & prorata info
created_at: datetime,
due_date: datetime,
paid_at: datetime,
payment_method: string // 'admin', 'agent', 'tripay', dll
}
```
**Fitur Promo & Prorata:**
```
Promo:
- Paket bisa set harga promo untuk N siklus pertama
- Setiap pelanggan track promo_cycles_used
- Promo berakhir → kembali ke harga normal
Prorata:
- Jika tanggal pasang (install_date) = bulan tagihan
- Invoice pertama dihitung per hari (proporsi bulan)
- Otomatis di-apply berdasarkan paket setting
```
**Contoh Workflow:**
```
1. Admin generate invoice untuk periode 08/2026
2. Sistem hitung nominal per pelanggan:
- Status promo? → gunakan promo_price
- Paket punya FUP? → cek kuota bulanan
- Bulan pertama & prorata aktif? → hitung prorata
3. Invoice di-create dengan status 'unpaid'
4. Notifikasi WhatsApp ke pelanggan
5. Pelanggan bayar (online atau manual)
6. Sistem update status menjadi 'paid'
7. Notifikasi paid ke pelanggan
8. Isolir otomatis jika lewat due date
```
---
### 2. Payment Gateway Integration
**Gateway Terintegasi:**
```javascript
1. Midtrans (Snap API)
- Status: Aktif/Nonaktif di settings
- Fitur: Multiple payment methods (CC, transfer, GCash, etc)
2. Tripay
- Status: Aktif/Nonaktif
- Fitur: Bank transfer, E-wallet, QRIS
3. Xendit
- Status: Aktif/Nonaktif
- Fitur: Invoice, VA, QR codes
4. Duitku
- Status: Aktif/Nonaktif
- Fitur: Aggregator pembayaran
5. QRIS Static (Built-in)
- QR code fixed untuk donasi/pembayaran unik
- Nominal unik auto-assign per invoice
- Mudah match payment dari notifikasi bank
```
**Payment Flow:**
```
Customer → Choose Payment Method
→ Redirect to Gateway
→ Process Payment
→ Gateway Webhook/Callback
→ Mark Invoice as PAID
→ Send WhatsApp confirmation
```
**Webhook Payment Generic:**
```
Endpoint: POST /api/webhook/v1/payment-notif
Fitur:
- Generic webhook untuk bank/e-wallet notification
- Auto-match nominal dengan invoice
- Auto-mark paid jika cocok
- Log semua webhook untuk audit
- Manual cleanup jika perlu
```
---
### 3. Pembayaran Manual & Offline
**Tipe Pembayaran Manual:**
```javascript
1. Admin bayar (dari panel)
- Pilih invoice
- Catat nominal pembayaran
- Catat metode pembayaran
- Mark as paid
- Otomatis kirim notifikasi WhatsApp
2. Agent bayar (dari saldo agen)
- Agent login
- Pilih pelanggan
- Cek tagihan
- Bayar dari saldo agen
- Struk otomatis print/download
3. Kolektor ajukan (pending approval)
- Kolektor input pembayaran
- Pending approval (admin/kasir)
- Approval → mark as paid
- Rejection → return ke pending
4. Kasir bayar (kasir portal)
- Kasir login
- Input pembayaran
- Mark paid
- Print bukti
```
---
### 4. Invoice Management
**Fitur:**
```
- ✅ Lihat daftar invoice (admin/customer)
- ✅ Cetak invoice (PDF via pdfKit)
- ✅ Export invoice list (CSV/Excel)
- ✅ Batalkan pembayaran (unpay) - jika ada kesalahan
- ✅ Reschedule due date
- ✅ Bulk action (multiple invoices)
- ✅ Invoice status tracking
- ✅ Payment reminder via WhatsApp
```
**Invoice Status Flow:**
```
unpaid → (payment received) → paid
↓
cancelled (oleh admin)
Isolir status linked ke unpaid invoices
Auto-isolir trigger jika lewat due date
```
---
## 👥 FITUR MANAJEMEN PELANGGAN
### 1. CRUD Pelanggan
**Data Pelanggan:**
```javascript
{
id: number,
name: string, // Nama pelanggan
phone: string, // Nomor HP
email: string, // Email
address: string, // Alamat fisik
latitude: float, // Koordinat GPS
longitude: float,
// Network
package_id: number, // Paket yang digunakan
router_id: number, // MikroTik router
pppoe_username: string, // Username PPPoE
pppoe_secret: string, // Password PPPoE
hotspot_username: string, // Username hotspot
static_ip: string, // IP statis (jika ada)
// Device
olt_id: number, // OLT yang digunakan
onu_port: number, // Port ONU
genieacs_tag: string, // Tag di GenieACS
// Location
odp_id: number, // ODP terdekat
area: string, // Area/kabupaten
// Status & Billing
status: 'active'|'suspended'|'inactive',
install_date: date, // Tanggal pasang
isolate_day: number, // Tanggal isolir otomatis (1-31)
auto_isolate: boolean, // Enable isolir otomatis
// Promo
promo_cycles_used: number, // Berapa siklus promo sudah dipakai
// Other
nik: string, // No ID pelanggan
notes: string, // Catatan
created_at: datetime,
updated_at: datetime
}
```
**Operasi:**
```
- ✅ Tambah pelanggan baru
- ✅ Edit data pelanggan
- ✅ Hapus pelanggan (soft delete)
- ✅ Import pelanggan dari Excel
- ✅ Export pelanggan list
- ✅ Bulk action (status change, package change, dll)
- ✅ Search & filter (by name, phone, area, status)
```
---
### 2. Isolir / Suspend Customer
**Isolir Manual:**
```
Admin klik "Isolir" di halaman pelanggan
↓
Sistem suspend ke MikroTik:
- PPPoE: hapus user atau disable
- Hotspot: suspend user
- Static IP: redirect ke "Isolated" page
↓
Status pelanggan: 'suspended'
↓
Pelanggan kembali online setelah bayar + admin buka isolir
```
**Isolir Otomatis (Cron):**
```
Cron job berjalan setiap hari jam 2 pagi
↓
Cek semua pelanggan:
- Status = 'active'
- auto_isolate = true
- Tanggal hari ini >= isolate_day
- Ada unpaid invoices
↓
Trigger isolir otomatis
↓
Notifikasi WhatsApp ke pelanggan
```
**Buka Isolir (Unisolir):**
```
Admin klik "Buka Isolir" setelah pembayaran
↓
Sistem restore di MikroTik:
- PPPoE: tambah kembali user atau enable
- Hotspot: reactivate user
↓
Status pelanggan: 'active'
↓
Pelanggan bisa online lagi
↓
Notifikasi WhatsApp konfirmasi
```
---
### 3. Manajemen Paket Layanan
**Data Paket:**
```javascript
{
id: number,
name: string, // Nama paket (Starter, Pro, Premium)
description: string,
price: number, // Harga reguler per bulan
promo_price: number, // Harga promo (opsional)
promo_cycles: number, // N siklus pertama dapat promo
// Speed
speed_down: number, // Download Mbps
speed_up: number, // Upload Mbps
// FUP (Fair Usage Policy)
use_fup: boolean, // Enable FUP?
fup_limit_gb: number, // Limit data per bulan (GB)
fup_profile_name: string, // Profile MikroTik saat FUP
// Night Mode (Jam Kalong)
use_night_mode: boolean, // Enable night mode?
night_profile_name: string, // Profile MikroTik malam (23:00-06:00)
// Tax
use_ppn: boolean, // Charge PPN?
ppn_percentage: number, // % PPN (default 11%)
// Prorata
prorate_first_invoice: boolean, // Prorata invoice pertama?
is_active: boolean,
created_at: datetime
}
```
**Operasi:**
```
- ✅ Tambah paket
- ✅ Edit paket
- ✅ Hapus paket
- ✅ Set promo per paket
- ✅ Set night mode profile
- ✅ Set FUP limit & profile
```
---
## 🌐 FITUR MIKROTIK INTEGRATION
### 1. Koneksi & Konfigurasi
**Setup MikroTik:**
```
1. Admin setting:
- Host: 192.168.8.1
- Username: billing
- Password: password123
- Port: 8711
2. Di MikroTik router:
- Enable API service
- Create user 'billing' dengan permission
- Whitelist IP aplikasi
3. Tes koneksi dari panel admin
```
**Multi-Router Support:**
```
- Aplikasi bisa kelola banyak MikroTik router
- Per pelanggan assign ke router mana
- Cron job sinkron ke router tersesuai
- Fallback ke default router jika tidak specify
```
---
### 2. PPPoE Management
**PPPoE User:**
```javascript
{
username: string, // PPPoE username
secret: string, // PPPoE password
password_hashed: string, // Disimpan via PPPoE protocol
profile: string, // Bandwidth profile
disabled: boolean,
created_at: datetime
}
```
**Operasi:**
```
- ✅ Create PPPoE user
- ✅ Change secret/password
- ✅ Disable/enable user
- ✅ View active sessions
- ✅ Monitor traffic (bytes in/out)
- ✅ Set speed profile
- ✅ Delete user
```
**Traffic Monitoring:**
```
Real-time:
- ✅ Monitor sesi PPPoE aktif
- ✅ Grafik traffic per session
- ✅ Bytes sent/received
- ✅ Session duration
- ✅ IP address
Historical:
- ✅ Store pemakaian per hari/bulan
- ✅ Aggregate data per customer
- ✅ Usage history dashboard
```
---
### 3. Hotspot Management
**Hotspot User:**
```javascript
{
name: string, // Hotspot username
password: string,
profile: string, // Speed profile
limit_uptime: number, // Session time limit
limit_bytes_total: number, // Data limit
limit_bytes_down: number, // Download limit
limit_bytes_up: number, // Upload limit
disabled: boolean
}
```
**Fitur:**
```
- ✅ Create/edit hotspot user
- ✅ Active session monitoring
- ✅ View real-time data usage
- ✅ Disconnect session
- ✅ Set speed & data limits
```
---
### 4. Voucher Hotspot
**Voucher System:**
```
Workflow:
1. Admin create voucher batch
2. Sistem generate N kode voucher
3. Kode disimpan di database & MikroTik
4. Customer bisa gunakan di hotspot portal
5. Agent bisa jual voucher ke customer
6. Pelanggan bayar → dapat voucher code
```
**Voucher Batch:**
```javascript
{
id: number,
name: string, // Nama batch
quantity: number, // Jumlah voucher
profile_name: string, // Speed profile
validity: number, // Hari berlaku
price: number, // Harga jual per voucher
status: 'pending'|'created'|'synced',
qty_created: number, // Berapa sudah dibuat
qty_failed: number, // Berapa gagal
created_at: datetime
}
```
**Fitur:**
```
- ✅ Generate batch voucher
- ✅ Sync ke MikroTik
- ✅ Print voucher code
- ✅ Export CSV
- ✅ Track status (created/active/used/expired)
- ✅ Delete batch
- ✅ Sell via agent portal
- ✅ Sell via customer portal
```
---
### 5. Firewall & Rate Limiting
**Built-in Firewall Setup:**
```
Admin bisa setup firewall rules:
- Rate limiting per user
- Block ports tertentu
- Whitelist IP
- Queue management
- Priority traffic (VoIP, dst)
```
---
### 6. Bandwidth Profile (Jam Kalong)
**Night Mode Automation:**
```
Setup:
- Paket A: default 10Mbps, night 20Mbps (more speed at night)
- Paket B: default 5Mbps, night 2Mbps (throttle at night)
Cron:
- 00:00 (midnight): Switch ke night profile
- 06:00 (pagi): Switch ke day profile
Fitur:
- ✅ Set profile per paket
- ✅ Custom time (tidak harus fixed 00:00-06:00)
- ✅ Override manual per user
- ✅ Log profile changes
```
---
### 7. Backup MikroTik
**Fitur:**
```
- ✅ Backup konfigurasi MikroTik dari panel
- ✅ Schedule backup otomatis
- ✅ Download backup file
- ✅ Restore dari backup
- ✅ Version history
```
---
## 🎛️ FITUR GENIEACS & TR-069
### 1. Built-in ACS (Auto Configuration Server)
Aplikasi memiliki ACS internal ringan untuk TR-069 tanpa perlu GenieACS eksternal.
**Keuntungan:**
```
✅ Lightweight - langsung di Node.js
✅ Tidak perlu MongoDB/Redis
✅ Hemat resource VPS
✅ Support banyak brand ONU (ZTE, Huawei, FiberHome, dll)
✅ Auto-detect device properties
✅ Provision WAN & VLAN otomatis
```
**Setting:**
```json
{
"use_builtin_acs": true|false,
"acs_port": 7547 // TR-069 port
}
```
---
### 2. ONU/CPE Management
**Device List:**
```javascript
{
id: number,
device_id: string, // Identifier unik (MAC/Serial)
manufacturer: string, // Brand (ZTE, Huawei, dll)
model: string,
serial_number: string,
firmware_version: string,
// Customer Link
customer_id: number,
customer_name: string,
customer_phone: string,
// Status
status: 'online'|'offline'|'error',
last_contact: datetime,
// Wi-Fi
ssid: string, // Wi-Fi name
password: string, // Wi-Fi password
// VLAN
vlan_id: number,
management_ip: string,
created_at: datetime
}
```
---
### 3. Device Operations
**Fitur:**
```
- ✅ View device list (dengan search & filter)
- ✅ Device detail (parameter, status, logs)
- ✅ Change SSID / Password Wi-Fi
- ✅ Bulk SSID change (multiple devices sekaligus)
- ✅ Reboot device
- ✅ View device logs & history
- ✅ Parameter configuration
- ✅ Provision WAN (VLAN, bridge, etc)
```
**SSID Change Workflow:**
```
1. Admin/Tech buka device detail
2. Edit SSID & Password baru
3. Click "Update SSID"
4. Sistem send perintah via TR-069
5. Device update Wi-Fi config
6. Notifikasi customer via WhatsApp
7. Log activity di audit trail
```
---
### 4. GenieACS Integration (Optional)
Jika gunakan GenieACS eksternal:
**Konfigurasi:**
```json
{
"genieacs_url": "http://192.168.8.189:7557",
"genieacs_username": "admin",
"genieacs_password": "admin",
"genieacs_timeout": 30000,
"genieacs_monitoring_enabled": true,
"genieacs_monitoring_interval": 6, // Jam
"genieacs_rxpower_threshold": -27 // dBm
}
```
**Fitur:**
```
- ✅ Sync device dari GenieACS ke aplikasi
- ✅ View GenieACS parameters
- ✅ Kirim command (SSID, reboot, dll)
- ✅ Monitor RX power (signal strength)
- ✅ Alert jika signal lemah
- ✅ Bulk operation
```
---
## 🔌 FITUR OLT & ONU MANAGEMENT
### 1. OLT Configuration
**OLT Data:**
```javascript
{
id: number,
name: string, // Nama OLT (OLT-1, OLT-Jakarta, dll)
host: string, // IP address
snmp_community: string, // SNMP community string
snmp_port: number, // SNMP port (161)
brand: string, // Brand (HIOSO, ZTE, Huawei, dll)
model: string,
// Telnet (untuk konfigurasi WAN)
telnet_host: string,
telnet_port: number,
telnet_username: string,
telnet_password: string,
telnet_enable_password: string,
// Web interface
web_url: string,
web_username: string,
web_password: string,
// API (untuk ZTE C320)
api_base_url: string,
is_active: boolean,
created_at: datetime
}
```
---
### 2. ONU Status & Monitoring
**ONU Info:**
```javascript
{
olt_id: number,
port: number, // Port OLT (1-128 tergantung OLT)
onu_index: number,
// Hardware
sn: string, // Serial number
model: string,
firmware_version: string,
mac_address: string,
// Status
status: 'online'|'offline'|'dying_gasp'|'error',
admin_state: 'enable'|'disable',
optical_signal: number, // dBm
// Customer link
customer_id: number,
customer_name: string,
// Distance
distance: number, // KM to OLT
// Last contact
last_contact: datetime
}
```
---
### 3. ONU Operations
**Fitur:**
```
- ✅ View ONU list per port
- ✅ View ONU statistics (signal strength, status)
- ✅ Reboot ONU
- ✅ Rename ONU (friendly name)
- ✅ Authorize ONU (EPON)
- ✅ Configure WAN (VLAN, bridge, PPPoE)
- ✅ View ONU logs
- ✅ Bulk operation
```
**Configure WAN Methods:**
```
1. Telnet (OMCI commands)
- For ZTE, Huawei, FiberHome
- Direksi jalankan commands Telnet
2. TR-069 (GenieACS)
- If GenieACS configured
- Use parameter modification
3. REST API (go-api-c320)
- For ZTE C320 specifically
- Direct API call to OLT
4. Web Interface
- Manual via OLT web UI
- Backup method jika automation gagal
```
---
### 4. OLT Port Management
**Port Info:**
```javascript
{
olt_id: number,
port_number: number, // 1-N
port_type: 'EPON'|'GPON'|'hybrid',
// Capacity
total_onus: number, // Max ONU di port ini
active_onus: number, // ONU yang online
// Status
status: 'up'|'down'|'error',
admin_state: 'enable'|'disable',
// Statistics
bytes_rx: number,
bytes_tx: number,
packets_rx: number,
packets_tx: number,
errors: number,
// Monitoring
optical_power: number,
temperature: number
}
```
---
## 💳 FITUR PAYMENT GATEWAY
### 1. Multi-Gateway Architecture
**Supported Gateways:**
```
1. Midtrans (Snap API)
Status: Enable/Disable di settings
Methods: CC, Transfer, GCash, Gopay, OVO, Dana
2. Tripay
Status: Enable/Disable
Methods: Bank Transfer, Ewallet, QRIS
3. Xendit
Status: Enable/Disable
Methods: Virtual Account, QR, Invoice
4. Duitku
Status: Enable/Disable
Methods: Aggregator pembayaran
5. QRIS Static (Built-in)
Status: Always available
Methods: QR Code fixed
```
---
### 2. Payment Integration Flow
**Customer Bayar Invoice:**
```
1. Customer lihat invoice di portal
2. Click "Bayar"
3. Pilih payment method dari gateway aktif
4. Redirect ke payment gateway
5. Customer input data pembayaran
6. Gateway proses pembayaran
7. Success/Failure notification
8. Aplikasi terima webhook dari gateway
9. Verify payment amount & signature
10. Mark invoice as PAID (jika success)
11. Send WhatsApp confirmation
12. Customer notif pembayaran berhasil
```
---
### 3. Payment Verification
**Verification Process:**
```javascript
function verifyPayment(invoice, payment) {
// 1. Check nominal cocok
if (payment.amount !== invoice.amount) {
return false;
}
// 2. Check signature (tergantung gateway)
const signature = crypto.createHmac('sha256', secretKey)
.update(payment.order_id + payment.amount)
.digest('hex');
if (signature !== payment.signature) {
return false;
}
// 3. Check status (sudah dibayar di gateway)
if (payment.status !== 'success' && payment.status !== 'paid') {
return false;
}
// 4. Check duplikasi (jangan bayar 2x)
const existing = findPaymentByExternalId(payment.gateway_id);
if (existing) {
return false;
}
return true;
}
```
---
### 4. Webhook Handling
**Generic Webhook:**
```
Endpoint: POST /api/webhook/v1/payment-notif
Header: Authorization: Bearer MY_WEBHOOK_SECRET
Fitur:
- ✅ Accept webhook dari bank/e-wallet apapun
- ✅ Parse notifikasi pembayaran
- ✅ Match nominal dengan invoice/voucher
- ✅ Auto-mark paid jika cocok
- ✅ Log semua webhook (audit trail)
- ✅ Manual review & cleanup di admin
```
**Webhook Log:**
```javascript
{
id: number,
service: string, // "bank_abc", "ewallet_xyz"
content: string, // Raw webhook content
parsed_amount: number, // Parsed dari notifikasi
parsed_ok: boolean, // Berhasil di-parse?
matched_invoice: number, // Invoice ID yang matched
matched_voucher: number, // Voucher ID yang matched
ip: string, // Source IP
user_agent: string,
created_at: datetime,
status: 'pending'|'processed'|'error'
}
```
---
### 5. Payment Report
**Fitur:**
```
- ✅ Daily transaction report
- ✅ Gateway settlement report
- ✅ Payment method breakdown
- ✅ Failed payment report
- ✅ Refund tracking
- ✅ Revenue trending
```
---
## 🗺️ FITUR GIS & MAPPING
### 1. Peta Admin (`/admin/map`)
**Fitur Dasar:**
```
- ✅ Leaflet map dengan OpenStreetMap
- ✅ Hybrid view (satellite + road)
- ✅ Zoom in/out
- ✅ Locate kantor (center point dari office_lat/office_lng)
```
**Marker & Layer:**
```
1. Customer Marker
- Merah: offline/suspended
- Hijau: online
- Biru: pending
- Click → popup detail customer
2. ODP Marker
- Orange icon
- Click → ODP info & available ports
3. Cable Path (Polyline)
- Garis dari customer ke ODP
- Bisa edit/draw manually
- Simpan rute untuk setiap customer
```
**Popup Info:**
```
Customer Popup:
- Name, phone, email
- Paket, status, speed
- IP address (PPPoE/hotspot)
- Unpaid invoices count
- Traffic graph (PPPoE real-time)
- Action buttons: isolir, edit, view detail
ODP Popup:
- ODP name
- Available ports
- Customers connected
- Port status summary
```
**Interactive Fitur:**
```
- ✅ Draw cable path (customer to ODP)
- ✅ Save cable route
- ✅ Edit customer location (via location picker)
- ✅ Bulk action dari peta (select multiple customers)
- ✅ Real-time PPPoE traffic graph
```
---
### 2. Peta Teknisi (`/tech/map`)
**Fitur:**
```
- ✅ Sama seperti admin map (read-only untuk tech)
- ✅ View customer & ODP locations
- ✅ Click customer → show WhatsApp chat button
- ✅ Open route di Google Maps
- ✅ GPS tracking teknisi (optional)
- ✅ Nearby customers (dalam radius tertentu)
```
**Tech GPS Tracking:**
```
Setting:
- Aktifkan attendance_geofencing di settings
- Radius perimeter kantor (attendance_radius meter)
Fitur:
- Tech login di mobile portal
- Sistem track GPS lokasi tech
- Visualisasi di peta
- Geofence alert (keluar/masuk area)
```
---
### 3. Location Picker (Form Customer)
**Fitur:**
```
- ✅ Modal dengan peta satellite view
- ✅ Click di peta → set customer location
- ✅ Drag marker untuk adjust posisi
- ✅ Coordinate display (lat/lng)
- ✅ Address lookup (reverse geocoding jika ada)
- ✅ Done → save ke form
```
---
### 4. Cable Path Management
**Data:**
```javascript
{
customer_id: number,
olt_id: number,
odp_id: number,
// Polyline coordinates
path: [ // Array of [lat, lng]
[-6.2521, 107.9205],
[-6.2522, 107.9206],
[-6.2523, 107.9207]
],
length_km: number, // Calculated distance
description: string, // Cable detail (aerial/underground, etc)
created_at: datetime,
updated_at: datetime
}
```
**Operasi:**
```
- ✅ Draw path (click-click di peta)
- ✅ Edit existing path
- ✅ Delete path
- ✅ Calculate distance automatically
- ✅ Save to database
```
---
## 💬 FITUR WHATSAPP & TELEGRAM
### 1. WhatsApp Integration (Baileys)
**Setup:**
```
Setting di settings.json:
{
"whatsapp_enabled": true,
"whatsapp_auth_folder": "auth_info_baileys",
"whatsapp_admin_numbers": ["081947215703", "087820851413"],
"company_phone": "6287820851413"
}
```
**Authentication:**
```
1. Admin login ke /admin/whatsapp
2. Sistem tampilkan QR code
3. Scan QR code dengan WhatsApp app
4. Verifikasi di WhatsApp
5. Bot siap mengirim pesan
```
---
### 2. WhatsApp Features
**Incoming Message Handler:**
```
Admin/authorized nomor bisa kirim command:
1. BILLING
- List unpaid invoices
- Customer status
- Payment info
2. MIKROTIK
- Active users
- Session info
- Bandwidth status
3. PULSA (Digiflazz)
- Check balance
- Buy pulsa
- Transaction status
4. TOPUP AGENT
- Top-up saldo agent
- Check agent balance
```
**Incoming Command Examples:**
```
From admin:
"billing" → Kirim laporan billing hari ini
"pppoe" → List active PPPoE sessions
"balance" → Cek saldo Digiflazz
"topup 1000000" → Top-up agen Rp 1jt
"saldo" → Cek saldo agent
```
---
### 3. WhatsApp Automated Messages
**Invoice Notification:**
```
When:
- Invoice created (otomatis kirim ke customer)
- Invoice paid (kirim konfirmasi)
- Invoice due (reminder H-1 isolir)
Content:
"Tagihan Internet RTRWnet
Periode: Agustus 2026
Nominal: Rp 350.000
Due: 10 Agustus 2026
Bayar di: [link portal]
Isolir jika belum bayar: 10 Agustus 2026"
```
**Payment Confirmation:**
```
When: Invoice marked as paid
Content:
"✅ Pembayaran Anda diterima!
Tagihan: Rp 350.000
Tanggal: 05 Agustus 2026
Status: LUNAS
Terima kasih atas pembayaran Anda.
Layanan Anda tetap aktif.
- RTRWnet Admin"
```
**Isolir Notice:**
```
When: Isolir automatic atau manual
Content:
"⚠️ PEMBERITAHUAN ISOLIR
Layanan internet Anda telah diputus
Alasan: Tagihan belum dibayar
Tagihan: Rp 350.000
Due date: 10 Agustus 2026
Hubungi: [support number]
Buka isolir setelah pembayaran"
```
---
### 4. WhatsApp Broadcast
**Fitur:**
```
- ✅ Select customer list
- ✅ Create message (dengan template variable)
- ✅ Schedule send time
- ✅ Set delay antar message (untuk hindari spam)
- ✅ View delivery status
- ✅ Pause/resume/stop broadcast
- ✅ Retry failed messages
```
**Broadcast Example:**
```
Template:
"Halo {{customer_name}},
Tagihan internet bulan ini sudah siap.
Nominal: {{amount_idr}}
Bayar di: {{payment_link}}"
Broadcast:
1. Select customers: Area Bekasi (200 customer)
2. Template: "Tagihan Bulanan"
3. Schedule: 09:00 (9 pagi)
4. Delay: 3 detik antar pesan
5. Total: 200 pesan dalam 10 menit
6. Status: Sent 198, Failed 2, Pending 0
```
---
### 5. WhatsApp Live Chat
**Fitur (Upcoming):**
```
- ✅ Inbox untuk semua chat masuk/keluar
- ✅ Reply message dari admin panel
- ✅ Chat history per customer
- ✅ Quick reply template
- ✅ Attachment support
```
---
### 6. Telegram Integration (Optional)
**Setup:**
```json
{
"telegram_enabled": true|false,
"telegram_bot_token": "xxx:yyy",
"telegram_admin_id": "123456789"
}
```
**Fitur:**
```
- ✅ Bot untuk admin (same as WhatsApp commands)
- ✅ Alert notifications
- ✅ Daily report
- ✅ System monitoring
```
---
## 📦 FITUR INVENTORY & LOGISTICS
### 1. Inventory System
**Kategori Inventory:**
```
- Perangkat ONU/CPE (stock)
- Kabel & Connector
- Power Supply
- Accessories (splitter, dll)
- Tools & Equipment
```
**Item Data:**
```javascript
{
id: number,
category_id: number,
name: string, // Product name
sku: string, // SKU code
description: string,
unit: string, // 'pcs', 'meter', 'kg', dll
quantity: number, // Current stock
minimum_qty: number, // Alert jika stock < ini
unit_cost: number, // Cost per unit
supplier: string,
location: string, // Lokasi di gudang
created_at: datetime
}
```
---
### 2. Inventory Operation
**Fitur:**
```
- ✅ Add item ke inventory
- ✅ Adjust stock (add/remove)
- ✅ Stock transfer
- ✅ Low stock alert
- ✅ Item history
- ✅ Search & filter
- ✅ Export inventory list
```
**Stock Alert:**
```
When stock < minimum_qty:
- Dashboard alert
- Email notification (jika ada)
- Request PO (Purchase Order)
```
---
### 3. Asset Tracking
**Asset Assignment:**
```
Teknisi bisa assign asset ke task:
- Ticket → use ONU
- Installation → use cable x10m
- Repair → use power supply 1pc
```
**Asset History:**
```
Track item dari stock → assignment → return
- What item used
- When used
- Who used
- For what task
- Status (used/returned/lost)
```
---
## 🎫 FITUR TICKETING & SUPPORT
### 1. Ticket System
**Ticket Data:**
```javascript
{
id: number,
// Customer & Technician
customer_id: number,
customer_name: string,
customer_phone: string,
customer_email: string,
technician_id: number,
technician_name: string,
// Content
subject: string, // Judul keluhan
message: string, // Deskripsi masalah
// Status
status: 'open'|'in_progress'|'resolved'|'closed',
// Details
priority: 'low'|'medium'|'high'|'urgent',
category: string, // 'billing', 'technical', 'general'
// Attachments
customer_photos: string, // JSON array of file paths
customer_photo_metadata: string, // Photo GPS/timestamp
technician_photos: string,
technician_notes: string,
// Timeline
created_at: datetime,
updated_at: datetime,
resolved_at: datetime
}
```
---
### 2. Ticket Workflow
**Open (Customer):**
```
1. Customer buka portal
2. Click "Buat Tiket"
3. Input subject, deskripsi, foto (optional)
4. Submit
5. Ticket created dengan status 'open'
6. Notifikasi ke admin & teknisi via WhatsApp
```
**Assign (Admin):**
```
1. Admin lihat daftar open tickets
2. Assign ke teknisi
3. Ticket status: 'open' → tidak berubah (tunggu teknisi accept)
```
**In Progress (Technician):**
```
1. Tech buka portal
2. Lihat pool tickets (assigned to tech)
3. Click "Ambil Tiket" (take ticket)
4. Ticket status: 'open' → 'in_progress'
5. Tech bisa input notes & foto
6. Status update ke customer via WhatsApp
```
**Resolve (Technician):**
```
1. Tech selesaikan pekerjaan
2. Input resolution notes
3. Upload foto (before/after)
4. Click "Selesai"
5. Ticket status: 'in_progress' → 'resolved'
6. Notifikasi ke customer
```
**Close (Customer/Admin):**
```
1. Customer lihat resolved ticket
2. Click "Tutup Tiket" (jika puas)
3. Ticket status: 'resolved' → 'closed'
4. Customer optional bisa rate 1-5
5. Feedback saved untuk quality control
```
---
### 3. Ticket Features
**Admin Panel:**
```
- ✅ Dashboard tickets (open, in_progress, resolved, closed)
- ✅ Assign tickets ke technician
- ✅ Reassign jika perlu
- ✅ View ticket history
- ✅ Add internal notes
- ✅ Override status
- ✅ Filter by status/category/tech
- ✅ Ticket aging report
- ✅ SLA tracking
```
**Tech Portal:**
```
- ✅ Pool tiket (tickets assigned to me)
- ✅ View ticket detail
- ✅ Take ticket
- ✅ Upload photos
- ✅ Add resolution notes
- ✅ Mark resolved
- ✅ View ticket history
```
**Customer Portal:**
```
- ✅ Create ticket
- ✅ View my tickets
- ✅ View ticket status
- ✅ Add comment/photo
- ✅ Mark resolved (jika tech bilang done)
- ✅ Rate satisfaction
- ✅ View ticket history
```
---
## 👔 FITUR AGENT & SALES
### 1. Agent Management
**Agent Data:**
```javascript
{
id: number,
username: string, // Login username
password_hash: string, // Hashed password
name: string, // Agent name
phone: string,
email: string,
area: string, // Area operasi
status: 'active'|'inactive',
// Financial
balance: number, // Saldo agent (Rp)
commission_percent: number, // Komisi %
// Reference
id_number: string, // KTP/ID number
bank_account: string,
bank_name: string,
created_at: datetime
}
```
---
### 2. Agent Portal
**Fitur:**
```
Dashboard:
- ✅ Total balance
- ✅ Today's transaction
- ✅ Commission earned
- ✅ Top customers
Pembayaran:
- ✅ Cari customer by name/phone
- ✅ Lihat unpaid invoices
- ✅ Pilih invoice → bayar dari saldo agent
- ✅ Print struk pembayaran
- ✅ Kirim struk ke customer (WhatsApp/Email)
Voucher:
- ✅ Lihat inventory voucher
- ✅ Pilih voucher untuk dijual
- ✅ Customer bayar → agent terima stok
- ✅ Print voucher code
- ✅ Track voucher sale
Digiflazz:
- ✅ Browse produk (pulsa, data, dll)
- ✅ Category → Brand → Nominal flow
- ✅ Buy produk (debit saldo agent)
- ✅ Manual input customer nomor
- ✅ Delivery otomatis
- ✅ Webhook status update
```
---
### 3. Admin Agent Management
**Fitur:**
```
- ✅ Add agent (create account)
- ✅ Edit agent (name, area, commission)
- ✅ Deactivate agent
- ✅ Top-up agent balance (from admin)
- ✅ View agent transaction history
- ✅ Set special price per agent
- ✅ View agent commission report
- ✅ Agent performance dashboard
```
**Top-up Agent:**
```
Admin:
1. Open agent list
2. Click "Top-up" pada agent
3. Input amount (Rp 1.000.000)
4. Mark as "top-up" in cash_in table
5. Agent balance += amount
6. Notifikasi ke agent via WhatsApp
```
---
### 4. Special Price Management
**Fitur:**
```
Admin bisa set special price per agent:
Paket A: Normal price Rp 350.000
- Agent A commission: Rp 30.000 (jadi agent harus charge min 350k)
- Agent B commission: Rp 50.000 (better agent)
atau
Special pricing:
- Agent A harga khusus: Rp 320.000/bulan
- Agent A komisi: Rp 20.000
- Total untuk agent: Rp 340.000
```
---
### 5. Digiflazz Integration
**Setup:**
```json
{
"digiflazz_username": "your_account",
"digiflazz_api_key": "api_key_xxx",
"digiflazz_webhook_secret": "webhook_secret",
"digiflazz_markup": 0 // Markup % (0-100)
}
```
**Flow:**
```
1. Agent login → menu "Beli Produk"
2. Pilih kategori (Pulsa, Data, dll)
3. Pilih brand (Telkomsel, Indosat, dll)
4. Pilih nominal (Rp 5rb, 10rb, dll)
5. Input customer nomor
6. Confirm & bayar
7. Sistem kirim ke Digiflazz API
8. Produk dikirim otomatis
9. Webhook notif status
10. Status di-update di aplikasi
11. Agent terima notif
```
**Product Display:**
```
[Telkomsel] [Indosat] [XL] [3] [Smartfren]
↓
[Rp 5rb] [Rp 10rb] [Rp 20rb] [Rp 50rb] [Rp 100rb]
↓
Input nomor → Konfirm → Proses
```
---
## 📊 FITUR MONITORING & HEALTH
### 1. System Monitoring
**Metrics:**
```
Real-time:
- CPU Usage (%)
- Memory Usage (%)
- Disk Usage (%)
- Process uptime
- Load average
Database:
- Connection status
- Table count
- Database size
- WAL status
Services:
- MikroTik connectivity
- GenieACS connectivity
- Payment gateway status
- WhatsApp connection status
- OLT SNMP status
```
---
### 2. Monitoring Dashboard
**Views:**
```
Admin Portal (/admin/monitoring):
- System metrics card
- Graph history (CPU, RAM, Disk)
- Service status indicators
- Alert log
Tech Portal (/tech/monitoring):
- Same as admin (read-only)
```
---
### 3. Health Check Endpoint
**Endpoint:**
```
GET /health
Response:
{
"status": "healthy",
"timestamp": "2026-08-14T10:30:00Z",
"services": {
"database": "ok",
"mikrotik": "ok",
"payment_gateway": "ok",
"whatsapp": "connected"
}
}
```
---
### 4. Alert System
**Alert Types:**
```
- ✅ High CPU (> 80%)
- ✅ Low disk space (< 10%)
- ✅ Memory warning (> 85%)
- ✅ Service disconnected
- ✅ Failed backup
- ✅ Unpaid invoices threshold
```
**Alert Delivery:**
```
- Dashboard alert badge
- Email notification
- WhatsApp notification (admin)
- Telegram notification (jika aktif)
```
---
## ⚙️ FITUR AUTOMATION & CRON
### 1. Cron Jobs Schedule
**1. Auto Invoice Generation**
```
Schedule: 1 Jan, Feb, Mar, ... Dec @ 00:01
Action: Generate monthly invoices untuk semua customer
Config: Automatic di app startup
Detail:
- Hitung promo price / regular price
- Hitung prorata jika bulan pertama
- Hitung tax/PPN jika applicable
- Create invoice record
- Notify customer via WhatsApp
```
**2. Auto Isolir**
```
Schedule: Every day @ 02:00
Action: Isolir customers yang lewat due date
Config: Otomatis
Detail:
- Cek semua customer dengan status 'active'
- Cek auto_isolate flag = true
- Cek tanggal hari ini >= isolate_day
- Cek ada unpaid invoices
- Suspend ke MikroTik (PPPoE/hotspot)
- Notif customer via WhatsApp
```
**3. WhatsApp Reminder**
```
Schedule: Every day @ 09:00
Action: Send billing reminder (H-1 isolir)
Config: Enable whatsapp_auto_billing_enabled = true
Detail:
- Cek customers yg isolir besok
- Send reminder message
- Template: tagihan amount, due date, payment link
- Delay 3-5 detik antar pesan (hindari spam)
```
**4. Night Mode Switch (Jam Kalong)**
```
Schedule: 00:00 (midnight) & 06:00 (pagi)
Action: Ganti PPPoE profile malam/siang
Config: Per paket, if use_night_mode = true
Detail:
- 00:00: Switch ke night_profile (contoh: 20Mbps)
- 06:00: Switch ke day_profile (contoh: 10Mbps)
- Custom time possible
```
**5. FUP Check (Fair Usage Policy)**
```
Schedule: Every hour @ 00 (00:00, 01:00, 02:00, ...)
Action: Check monthly data usage vs FUP limit
Config: Per paket, if use_fup = true
Detail:
- Cek total data used bulan ini
- Jika > fup_limit_gb: switch ke fup_profile
- Profile FUP usually slower (contoh: 1Mbps)
- Revert ke normal profile next month (1 Jan)
```
**6. Usage Sync**
```
Schedule: Every 10 minutes
Action: Sync PPPoE traffic dari MikroTik
Config: Enable usage_tracking_enabled = true
Detail:
- Query sesi PPPoE aktif dari MikroTik
- Aggregate bytes_in/out
- Store di customer_usage table
- Accumulate untuk FUP checking
```
**7. Backup Database**
```
Schedule: Daily @ 02:00 (configurable)
Action: Backup database billing.db
Config: Enable auto_backup_enabled = true
Detail:
- Copy database/billing.db → backups/
- Timestamp: billing-YYYYMMDD-HHMMSS.db
- Keep latest N backups (retention_days)
- Delete old backup automatically
```
---
### 2. Manual Trigger
**Admin bisa manual trigger:**
```
/admin/billing/generate-invoices → Generate now
/admin/isolate-customers → Run isolir check
/admin/whatsapp/send-reminder → Send broadcast
/admin/backup/create → Backup now
```
---
## 👨‍💼 FITUR INTERNAL USER MANAGEMENT
### 1. User Roles
**Role Hierarchy:**
```
1. Super Admin (Tertinggi)
- Full access semua fitur
- User management
- Settings & configuration
- Audit trail access
2. Admin
- Customer management
- Billing & payment
- MikroTik & device management
- WhatsApp administration
- Limited setting access
3. Kasir (Cashier)
- Payment recording only
- Invoice marking (paid/unpaid)
- Report viewing (finance)
4. Teknisi (Technician)
- Ticket management
- Device configuration
- Customer support
- Map & location
- No payment/billing access
5. Kolektor (Collector)
- View customer billing
- Create payment requests
- No payment mark (approval flow)
6. Agent/Agen (Sales)
- Pembayaran dari saldo agent
- Voucher sales
- Pulsa/data sales
- No admin/config access
```
---
### 2. User Data
**User Record:**
```javascript
{
id: number,
username: string,
password_hash: string,
role: 'superadmin'|'admin'|'kasir'|'tech'|'collector'|'agent',
name: string,
email: string,
phone: string,
area: string, // For tech/collector scope
is_active: boolean,
created_at: datetime,
last_login: datetime
}
```
---
### 3. Access Control
**Portal Restrictions:**
```
Superadmin:
- /admin (all features)
- /finance (all features)
- /settings (system settings)
- /audit-trail
Admin:
- /admin (except system settings)
- /finance (reports only)
- /settings (limited)
Kasir:
- /admin/invoices
- /admin/payments
- /finance (read-only)
Teknisi:
- /tech (all features)
- /admin/tickets (read-write)
Kolektor:
- /collector (all features)
Agent:
- /agent (all features)
Pelanggan:
- /customer (self-service)
```
---
### 4. Audit Trail
**Logged Actions:**
```
Sensitive actions logged:
- User login/logout
- Invoice mark as paid
- Customer isolir/unisolir
- Payment manual input
- SSID/password change
- Settings modification
- Backup creation
- User creation/modification
- Bulk operations
```
**Audit Record:**
```javascript
{
id: number,
user_id: number,
user_role: string,
action: string, // 'invoice_paid', 'customer_isolir', dll
resource_type: string, // 'invoice', 'customer', 'device'
resource_id: number,
changes: object, // Before/after data
timestamp: datetime,
ip_address: string,
status: 'success'|'fail'
}
```
---
## 📱 FITUR MULTI-LANGUAGE (i18n)
**Supported Languages:**
```
- English (en)
- Indonesian (id)
```
**Implementation:**
```
config/i18n.js:
- Load translation files from locales/
- locales/en.json
- locales/id.json
Usage:
- Query parameter: ?lang=id
- Route: /lang/id (set session)
- Session key: req.session.lang
- Template helper: res.locals.t('key', 'fallback')
```
**EJS Usage:**
```ejs
<!-- In template -->
<h1><%= t('welcome_message') %></h1>
<button><%= t('pay_invoice') %></button>
<!-- Result dengan lang=id -->
<h1>Selamat Datang</h1>
<button>Bayar Tagihan</button>
```
---
## 🔧 TECHNOLOGY STACK DETAIL
### Backend
```
- Express.js 4.18.2
- Node.js runtime
- Better-sqlite3 (database)
- node-cron (scheduling)
```
### Frontend
```
- EJS template engine
- Bootstrap 5.x
- Bootstrap Icons
- Leaflet (mapping)
- Chart.js / D3 (charts)
- jQuery (minimal)
```
### Integration
```
- routeros-client (MikroTik API)
- net-snmp (OLT management)
- axios (HTTP requests)
- Baileys (WhatsApp unofficial)
- node-telegram-bot-api (Telegram)
- Various payment gateway SDKs
```
### Security
```
- Session management (express-session)
- Password hashing (crypto)
- CSRF protection (basic via Referer)
- Rate limiting (express-rate-limit)
```
### Utilities
```
- pino (logging)
- winston (application logging)
- jimp (image processing)
- qrcode (QR generation)
- xlsx (spreadsheet import)
- pdfkit (PDF generation)
```
---
## 📋 SUMMARY
Aplikasi RTRWNET Billing & Management System adalah sistem ISP yang **comprehensive** dengan fitur-fitur lengkap untuk:
✅ Billing & Invoice management
✅ Customer lifecycle management
✅ Network equipment management (MikroTik, OLT, GenieACS)
✅ Payment processing (multiple gateways)
✅ Field support & ticketing
✅ Sales & agent management
✅ Mapping & GIS visualization
✅ Automation & scheduled tasks
✅ Monitoring & health checks
✅ Multi-user portal & access control
Sistem ini **sudah production-ready** untuk ISP/RTRW yang ingin manage billing, network, dan customer dalam satu platform terpadu.
---
**Dokumentasi ini comprehensive & siap untuk:**
- On-boarding tim baru
- Training & knowledge transfer
- Development reference
- Feature planning
- Troubleshooting guide
Untuk detail lebih lanjut per fitur, lihat file-file:
- AUDIT_LENGKAP.md (technical deep dive)
- DATABASE_SCHEMA.md (data structure)
- QUICK_REFERENCE.md (quick commands)