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
82 lines
4.8 KiB
Markdown
82 lines
4.8 KiB
Markdown
# RUJUKAN ARSITEKTUR & FITUR SISTEM BILLING RTRW-NET
|
|
|
|
Dokumen ini disimpan sebagai **rujukan utama** arsitektur, fitur backend, frontend, dan skema database sebelum dilakukan penambahan fitur RADIUS Server.
|
|
|
|
---
|
|
|
|
## 1. DOKUMENTASI MODUL & KOMPONEN EKSISTING
|
|
|
|
### A. Core Engine & Entry Point
|
|
- **`app-customer.js`**: Main entry point Express.js v4.
|
|
- Memuat middleware security: CORS, Referer/Origin CSRF Protection, Express Session, Body Parser limit 1MB.
|
|
- Pengatur i18n multi-bahasa (`locales/`).
|
|
- Menjalankan background service: Auto-backup (`scheduleAutoBackup`), Cron Billing (`cronService.js`), WhatsApp Bot, Telegram Bot.
|
|
- Mengunci DNS ke IPv4 (`dns.setDefaultResultOrder('ipv4first')`) untuk mencegah timeout IPv6 di server produksi.
|
|
|
|
### B. Database & Stored Layer (`config/database.js`)
|
|
- **Engine**: SQLite 3 menggunakan driver `better-sqlite3` (Native C++ extension, high performance).
|
|
- **Mode**: `WAL` (Write-Ahead Logging) dengan `foreign_keys = ON`.
|
|
- **Fungsi Kustom SQLite**: `NOW_LOCAL()` (memformat tanggal-waktu berdasarkan timezone lokal `Asia/Jakarta`).
|
|
- **Tabel Utama**:
|
|
1. `settings` (Dynamic Key-Value Store)
|
|
2. `packages` (Paket Internet: harga, speed up/down, promo, jam kalong, FUP)
|
|
3. `customers` (Data Pelanggan: no_pelanggan, nama, phone, pppoe_user, pppoe_secret, status, isolir_date, router_id, odp_id, genieacs_tag)
|
|
4. `invoices` & `payments` (Tagihan & Pembayaran)
|
|
5. `routers` (Daftar Router MikroTik: host, port 8728, username, password, status)
|
|
6. `pppoe_users` & `pppoe_traffic_samples` & `pppoe_sessions`
|
|
7. `hotspot_users` & `hotspot_profiles` & `hotspot_sessions`
|
|
8. `voucher_batches` & `vouchers` & `public_voucher_orders`
|
|
9. `olts`, `odps`, `onu_mapping`, `acsdevices` (Modul FTTH & TR-069 ACS)
|
|
10. `technicians`, `cashiers`, `collectors`, `agents` (Akses multi-role)
|
|
11. `audit_trail` (Log aktivitas pengguna)
|
|
|
|
### C. Services Layer (`services/`)
|
|
1. **`mikrotikService.js`**:
|
|
- Menghubungkan aplikasi ke RouterOS via API port 8728/8729 menggunakan `routeros-client`.
|
|
- Mengelola PPPoE Secret (Add, Update, Delete, Toggle Enable/Disable).
|
|
- Mengelola Hotspot User & Active Sessions.
|
|
- Mengambil trafik interface & active connections secara realtime.
|
|
- Mengatur isolir pelanggan via MikroTik API (mengubah profile / IP pool).
|
|
2. **`customerService.js`**:
|
|
- CRUD Pelanggan, komparasi data lokal vs router.
|
|
- Penanganan siklus isolir & pemulihan status otomatis.
|
|
3. **`billingService.js`**:
|
|
- Penjadwalan & pembuatan invoice bulanan.
|
|
- Pembayaran invoice (Cash, Transfer, QRIS, Gateway Midtrans/Tripay/Xendit).
|
|
- Eksekusi auto-isolir saat jatuh tempo.
|
|
4. **`cronService.js`**:
|
|
- Menjalankan penagihan otomatis jam 00:05.
|
|
- Cek auto-isolir harian jam 01:00.
|
|
- Sampling statistik trafik jam 10 menit sekali.
|
|
- Notifikasi reminder tagihan via WA / Telegram.
|
|
5. **`oltService.js` & `onuProvisionService.js` & `acsServerService.js`**:
|
|
- Integrasi OLT ZTE/Huawei/FiberHome via SNMP & Telnet.
|
|
- TR-069 Auto-Provisioning CPE via GenieACS.
|
|
|
|
### D. Route & Portal Layer (`routes/`)
|
|
1. **`/admin` (`adminPortal.js`)**: Portal Utama Admin (Dashboard, Pelanggan, Paket, Router, Transaksi, Laporan, OLT/ACS, Settings).
|
|
2. **`/customer` (`customerPortal.js`)**: Portal Pelanggan Self-Service (Cek Tagihan, Bayar QRIS, Tiket Komplain).
|
|
3. **`/agent` (`agentPortal.js`)**: Portal Agen (Jual Voucher, Topup Pulsa Digiflazz).
|
|
4. **`/collector` (`collectorPortal.js`)**: Portal Kolektor Penagih Lapangan.
|
|
5. **`/tech` (`techPortal.js`)**: Portal Teknisi (Tiket Gangguan, Pasang Baru, Mapping ODP).
|
|
6. **`/finance` (`financePortal.js`)**: Portal Keuangan (Pemasukan & Pengeluaran Kas).
|
|
|
|
### E. Frontend & Views (`views/`)
|
|
- Menggunakan **EJS (Embedded JavaScript)** dengan template responsive.
|
|
- Menggunakan CSS Vanilla & Custom Theme (Dark/Light Mode), Bootstrap Icons / FontAwesome.
|
|
- AJAX Fetch API untuk interaksi data tanpa reload halaman.
|
|
|
|
---
|
|
|
|
## 2. ATURAN INTEGRASI FITUR RADIUS (NON-BREAKING GUARANTEE)
|
|
|
|
1. **Prinsip Utama**: Seluruh modul MikroTik API eksisting **TIDAK BOLEH DIUBAH ATAU DIHAPUS**.
|
|
2. **Fleksibilitas**: Sistem akan mendukung 2 mode otentikasi router:
|
|
- **Mode 1 (Default Eksisting)**: MikroTik API (`routeros-client`).
|
|
- **Mode 2 (Fitur Baru)**: RADIUS Server (UDP Port 1812/1813).
|
|
- **Mode 3 (Hybrid)**: MikroTik API + RADIUS Server berjalan bersamaan.
|
|
3. **Database Integration**: RADIUS Server akan langsung membaca & menulis ke `database/billing.db` eksisting:
|
|
- Mengotentikasi kredensial pengguna dari tabel `customers` / `pppoe_users` / `hotspot_users`.
|
|
- Mengirimkan atribut RADIUS standar (`Framed-IP-Address`, `Mikrotik-Rate-Limit`, `Session-Timeout`).
|
|
- Menerima paket RADIUS Accounting (Start/Interim/Stop) dan mencatat penggunaan kuota/bandwidth ke tabel `pppoe_traffic_samples` & `radius_accounting_logs`.
|