Lewati ke isi

Generate Invoice

Invoice adalah tagihan resmi yang dibuat tiap siklus billing (biasanya bulanan). TB Radius support generate invoice secara otomatis (cron) atau manual per pelanggan.

Tipe Billing Cycle

Tipe Cara Kerja Cocok untuk
Postpaid Bulanan Pelanggan pakai dulu, bayar di akhir bulan/anniversary date ISP rumahan reguler
Prepaid Bayar di awal, dapat masa aktif. Habis = isolir sampai top-up Hotspot voucher, paket terbatas
Annual / Tahunan Bayar 12 bulan sekaligus (biasanya diskon) Pelanggan loyal / B2B

Postpaid bulanan yang paling umum — fokus dokumentasi di mode ini.

Cara Generate Invoice

Cara 1: Auto (Cron Bulanan)

TB Radius punya cron generate-invoice yang jalan otomatis tiap awal bulan (default tanggal 1, jam 01:00 WIB).

Apa yang dilakukan cron:

  1. Loop semua pelanggan dengan status Active atau Overdue
  2. Buat invoice baru dengan:
  3. Nominal = harga paket pelanggan
  4. Periode = bulan ini (mis. "Mei 2026")
  5. Due date = sesuai siklus billing pelanggan
  6. Sync invoice ke RADIUS (untuk fitur isolir otomatis)
  7. Trigger reminder pertama via WhatsApp (kalau enabled)

Konfigurasi cron:

Setting Default Catatan
Tanggal generate 1 (awal bulan) Bisa ubah ke tanggal lain
Jam generate 01:00 WIB Off-peak hours
Include trial pelanggan OFF Trial tidak digenerate invoice
Include terminated OFF Pelanggan terminated skip
Pro-rate first month ON Pelanggan daftar tengah bulan → invoice pro-rated

Edit di Settings → Billing → Cron Schedule.

Cara 2: Manual (Per Pelanggan)

Untuk kasus khusus (pelanggan baru daftar, koreksi, dll):

  1. Buka pelanggan target
  2. Tab Invoice / Tagihan
  3. Klik "+ Generate Invoice"
  4. Isi:
  5. Periode (bulan yang ditagih)
  6. Due date
  7. Nominal (auto = harga paket; bisa override)
  8. Catatan (opsional)
  9. Save

Cara 3: Bulk Generate (untuk semua/sebagian pelanggan)

Mis. mau generate manual semua pelanggan area tertentu:

  1. Menu Invoice → Bulk Generate
  2. Filter: paket, area, status
  3. Set periode & due date
  4. Preview list yang akan di-generate
  5. Konfirmasi → invoice dibuat massal

Komponen Invoice

Field Penjelasan
Nomor Invoice Auto-generate (format: INV-YYYYMM-NNNNN)
Pelanggan Tied ke user/customer
Periode Bulan/tahun yang ditagih (mis. "Mei 2026")
Tanggal Generate Kapan invoice dibuat
Jatuh Tempo Deadline pembayaran
Paket Paket internet yang ditagih
Nominal Total tagihan
PPN (opsional) Pajak (kalau Anda PKP)
Diskon (opsional) Pengurangan (mis. loyalty discount)
Status Unpaid / Paid / Partial / Refunded
Metode Bayar Cash / Transfer / PG (terisi setelah bayar)
Catatan Note internal atau ke pelanggan

Pro-Rate (Tagihan Proporsional)

Pelanggan daftar di tengah bulan → invoice pertama tidak full sebulan, tapi pro-rated.

Contoh:

  • Paket: Rp 300.000/bulan (30 hari)
  • Pelanggan daftar tanggal 16
  • Sisa hari dalam bulan: 15 hari
  • Invoice pertama: 300.000 × 15/30 = Rp 150.000

Bulan berikutnya generate full Rp 300.000.

Setting pro-rate:

  • Settings → Billing → Pro-rate First Month: ON/OFF
  • Mode: daily (per hari) / weekly (per minggu) / round to nearest week

Anniversary Billing vs Calendar Month

Mode Cara Kerja Pro Con
Calendar Month Semua pelanggan bayar di tanggal 1 tiap bulan Simple, mudah audit cashflow Beban cashflow bertumpuk di awal bulan
Anniversary Tiap pelanggan punya tanggal bayar sendiri (tanggal mereka daftar) Cashflow lebih merata sepanjang bulan Lebih rumit tracking

Default TB Radius: Calendar Month (semua tanggal 1). Bisa ganti ke Anniversary di Settings → Billing → Cycle Mode.

Best Practices

Test cron di sandbox dulu

Sebelum aktifkan cron auto-generate di production, test di pelanggan dummy dulu:

  1. Bikin pelanggan dummy
  2. Run cron manual via Settings → Cron Log → Run "generate-invoice"
  3. Cek hasil: invoice tergenerate dengan nominal & periode benar?
  4. Kalau OK, baru aktifkan di production

Audit trail untuk setiap generate

Setiap invoice yang di-generate harus punya:

  • Created by: cron auto / admin manual (user-id)
  • Created at: timestamp
  • Source: bulk / single / cron

Audit trail penting kalau ada dispute "kenapa saya digital tagihan 2x bulan ini?"

Diskon & promo

Untuk apply diskon (mis. promo "diskon 10% bulan kedua"):

  • Set di paket: discount_first_month: 10%, atau
  • Edit invoice manual setelah generate → apply discount
  • Atau bulk discount via Invoice → Bulk Discount

Catat alasan diskon di catatan invoice (audit).

Hati-hati double generate

Cron biasanya cek "apakah invoice untuk periode ini sudah ada?". Tapi kalau Anda manual generate sebelum cron jalan, lalu cron generate juga → bisa double invoice.

Solusi: set unique constraint di DB (1 invoice per periode per pelanggan), atau verify dulu sebelum manual generate.

Hindari generate di pelanggan Terminated

Pelanggan Terminated tidak boleh generate invoice baru. Cron filter ini otomatis, tapi kalau manual generate, double-check status pelanggan.

Troubleshooting

Cron tidak generate invoice di tanggal seharusnya

Cek:

  1. Cron job aktif? Buka Settings → Cron Log — apakah cron generate-invoice jalan tepat waktu?
  2. Server timezone benar? TB Radius pakai WIB (Asia/Jakarta) untuk cron schedule
  3. Settings → Auto Generate ON?
  4. Cek log error kalau ada — kemungkinan ada exception di tengah loop
Invoice generated tapi nominal Rp 0

Penyebab:

  • Pelanggan punya paket "Trial" (gratis) — sengaja Rp 0
  • Paket pelanggan tidak ter-assign — set paket dulu
  • Diskon 100% applied (rare)
Sebagian pelanggan tidak ter-generate invoice

Cek pelanggan yang miss:

  • Status: harus Active atau Overdue (bukan Suspended/Terminated)
  • Paket: harus ter-assign
  • Tanggal mulai berlangganan: harus ≤ tanggal generate
  • Bukan duplicate (invoice periode itu sudah ada)
Manual generate tapi double dengan cron

Sistem normally cek duplicate, tapi race condition bisa terjadi. Mitigasi:

  • Hapus 1 invoice (yang manual atau yang cron) — keep yang valid
  • Atau merge: edit nominal di 1 invoice, hapus yang lain
Bulk generate timeout

Kalau > 500 pelanggan, generate batch bisa timeout. Solusi:

  • Split bulk ke filter lebih kecil (per paket atau per area)
  • Atau biarkan cron auto-generate jalan saja (lebih reliable)

FAQ

Q: Bisa generate invoice untuk periode yang sudah lewat (backdate)? A: Bisa via manual generate. Berguna untuk koreksi (mis. lupa generate Maret, sekarang sudah April). Tapi hati-hati audit trail — kasih catatan "backdated".

Q: Bisa generate invoice >1 bulan ke depan (advance billing)? A: Bisa. Mis. pelanggan request bayar 6 bulan sekaligus → generate 6 invoice atau 1 invoice big amount. Sebaiknya generate 6 invoice terpisah untuk reporting bulanan yang clean.

Q: Invoice number bisa custom format? A: Bisa. Settings → Invoice → Numbering Format. Default: INV-YYYYMM-NNNNN. Bisa custom: INV-{tenant_code}-{YYYY}-{seq}, dll.

Q: Apa beda Invoice dan Receipt? A:

  • Invoice = tagihan (sebelum bayar)
  • Receipt / Kwitansi = bukti pembayaran (setelah bayar)

TB Radius generate keduanya otomatis. Invoice saat generate, receipt saat status PAID.

Q: Bisa kirim invoice ke email pelanggan otomatis? A: Bisa. Aktifkan di Settings → Notifikasi → Email Invoice on Generate. Kalau pelanggan punya email, mereka terima PDF invoice + link bayar di email.