Files
open-isp/docs/RUJUKAN_SISTEM.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

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`.