Skip to content

Manajemen Keuangan & Penagihan

Modul Manajemen Keuangan & Penagihan mengelola seluruh aspek finansial sistem TrueDignity, termasuk pencatatan transaksi keuangan, pengelolaan pengeluaran (tetap atau berulang), tracking pengeluaran per permohonan, dan pembuatan laporan keuangan untuk analisis bisnis.

Spesifikasi Perilaku & Alur


Skenario 6.1: Lihat Tabel Transaksi

Skenario ini menampilkan daftar lengkap semua transaksi keuangan kantor.

AktorOfficer & Sistem
RincianGiven officer memiliki izin akses KEUANGAN, When officer membuka menu keuangan di /keuangan, Then sistem menampilkan tabel transaksi keuangan dengan kolom: tanggal, deskripsi, jumlah, jenis (pemasukan/pengeluaran), dan keterangan.

Fitur Tabel Transaksi:

  • Kolom yang ditampilkan: tanggal, deskripsi/nama transaksi, jumlah, jenis (pemasukan/pengeluaran), keterangan, action (Edit/Hapus)
  • Sorting: bisa diurutkan by tanggal (newest first), jumlah, atau jenis
  • Search: pencarian by deskripsi atau keterangan
  • Pagination: support untuk data besar (page size: 10, 25, 50)
  • Filtering: filter by jenis (Pemasukan/Pengeluaran), periode tanggal
  • Export: quick export ke CSV untuk setiap view

Skenario 6.2: Lihat Pengeluaran dari Permohonan

Skenario ini menampilkan detail pengeluaran yang terkait dengan permohonan spesifik.

AktorOfficer & Sistem
RincianGiven officer berada di menu keuangan, When officer memilih salah satu permohonan dari dropdown daftar permohonan, Then sistem menampilkan detail pengeluaran yang terkait dengan permohonan tersebut, termasuk: biaya layanan default, biaya tugas, biaya tambahan, dan total keseluruhan.

Detail Pengeluaran per Permohonan:

  • Dropdown Permohonan: list semua permohonan dengan nomor dan nama pemohon
  • Breakdown Pengeluaran:
    • Biaya Layanan Default (dari layanan yang dipilih)
    • Biaya per Tugas (breakdown by task)
    • Biaya Tambahan (optional, jika ada)
    • Total Pengeluaran
  • Status Pembayaran: indicator pembayaran (lunas/belum lunas/sebagian)
  • Tanggal Jatuh Tempo: menampilkan deadline pembayaran

Skenario 6.3: Lihat Daftar Pengeluaran Berulang dan Terjadwal

Skenario ini menampilkan pengeluaran yang berulang secara otomatis dengan jadwal tertentu.

AktorOfficer & Sistem
RincianGiven officer berada di menu keuangan, When officer membuka tab "Pengeluaran Berulang", Then sistem menampilkan daftar pengeluaran yang berulang dan terjadwal, termasuk informasi: deskripsi, jumlah, frekuensi (harian/mingguan/bulanan/tahunan), tanggal jatuh tempo berikutnya, dan status (aktif/tidak aktif).

Fitur Pengeluaran Berulang:

  • Kolom: deskripsi, jumlah, frekuensi, tanggal mulai, tanggal jatuh tempo berikutnya, status (aktif/paused)
  • Frekuensi: harian, mingguan, bulanan, tahunan
  • Estimasi: menampilkan perkiraan pengeluaran dalam satu periode (bulan/tahun)
  • Status: indicator apakah pengeluaran berulang aktif atau paused
  • Action: Tambah, Edit, Hapus, Pause/Resume

Skenario 6.4: Hapus Pengeluaran dari Tabel Transaksi

Skenario ini menunjukkan proses penghapusan transaksi dari tabel.

AktorOfficer & Sistem
RincianGiven officer sedang melihat tabel transaksi, When officer menekan tombol hapus pada salah satu transaksi dan mengonfirmasi penghapusan melalui modal, Then sistem menghapus transaksi tersebut dari tabel transaksi dan update totals otomatis.

Workflow Penghapusan:

  1. Officer klik tombol "Hapus" pada salah satu row transaksi
  2. Modal konfirmasi ditampilkan: "Hapus transaksi [Deskripsi] - Rp [Jumlah]?"
  3. Officer klik "Hapus" untuk konfirmasi
  4. Sistem delete via API DELETE /office/finance/transactions/{id}
  5. Tabel refresh otomatis
  6. Totals (Total Pemasukan, Total Pengeluaran, Saldo) di-update otomatis
  7. Toast notification menampilkan "Transaksi berhasil dihapus"

Skenario 6.5: Hapus Pengeluaran dari Permohonan

Skenario ini menunjukkan penghapusan pengeluaran yang terkait dengan permohonan.

AktorOfficer & Sistem
RincianGiven officer sedang melihat detail pengeluaran permohonan, When officer menekan tombol hapus pada salah satu item pengeluaran dan mengonfirmasi penghapusan, Then sistem menghapus pengeluaran tersebut dari permohonan, total biaya permohonan di-update, dan tagihan otomatis di-revisi.

Workflow Penghapusan Pengeluaran Permohonan:

  1. Officer buka tab "Pengeluaran per Permohonan"
  2. Pilih permohonan dari dropdown
  3. Lihat breakdown pengeluaran (biaya layanan, biaya tugas, biaya tambahan)
  4. Klik tombol "Hapus" pada salah satu item pengeluaran
  5. Modal konfirmasi: "Hapus pengeluaran [Item]?"
  6. Setelah konfirmasi, sistem delete dan update invoice terkait
  7. Total pengeluaran dan tagihan otomatis di-recalculate

Skenario 6.6: Tambah Pengeluaran pada Tabel Transaksi

Skenario ini menunjukkan cara menambahkan transaksi baru ke tabel.

AktorOfficer & Sistem
RincianGiven officer berada di menu keuangan, When officer menekan tombol "Tambah Pengeluaran" dan mengisi form dengan data transaksi (tanggal, deskripsi, jumlah, jenis, keterangan, permohonan terkait optional), Then sistem menambahkan pengeluaran baru ke tabel transaksi dan update totals.

Form Tambah Pengeluaran:

  • Tanggal: date picker, default hari ini
  • Deskripsi: text input, nama/deskripsi transaksi (required)
  • Jumlah: number input, Rp format (required)
  • Jenis: dropdown (Pemasukan/Pengeluaran) (required)
  • Keterangan: textarea, catatan tambahan (optional)
  • Permohonan Terkait: dropdown select permohonan (optional, untuk tracking biaya per order)
  • Tombol: Simpan, Batal

Skenario 6.7: Ubah Data Pengeluaran

Skenario ini menunjukkan proses edit transaksi yang sudah ada.

AktorOfficer & Sistem
RincianGiven officer sedang melihat detail pengeluaran, When officer menekan tombol "Edit" dan mengubah data pengeluaran (tanggal, deskripsi, jumlah, jenis, keterangan), Then sistem memperbarui data pengeluaran dan menampilkan data yang telah diubah, serta update totals otomatis.

Workflow Edit Pengeluaran:

  1. Officer klik tombol "Edit" pada salah satu transaksi
  2. Form modal ditampilkan dengan data lama pre-filled
  3. Officer ubah data yang diperlukan
  4. Klik "Simpan"
  5. Sistem validate dan send PATCH request ke API
  6. Totals di-update otomatis
  7. Toast notification: "Transaksi berhasil diperbarui"

Skenario 6.8: Tambah Pengeluaran Berulang dan Terjadwal

Skenario ini menunjukkan cara membuat pengeluaran berulang otomatis.

AktorOfficer & Sistem
RincianGiven officer berada di tab "Pengeluaran Berulang", When officer menekan tombol "Tambah Pengeluaran Berulang" dan mengisi form dengan: deskripsi, jumlah, frekuensi (harian/mingguan/bulanan/tahunan), tanggal mulai, dan konfirmasi, Then sistem menambahkan pengeluaran berulang baru ke daftar dan mendaftarkan scheduler untuk otomasi.

Form Tambah Pengeluaran Berulang:

  • Deskripsi: text input (required)
  • Jumlah: number input Rp format (required)
  • Frekuensi: dropdown (Harian, Mingguan, Bulanan, Tahunan) (required)
  • Tanggal Mulai: date picker (required)
  • Tanggal Akhir: date picker (optional, untuk pengeluaran yang dibatasi)
  • Permohonan Terkait: dropdown (optional)
  • Catatan: textarea (optional)
  • Tombol: Buat, Batal

Proses Scheduler:

  1. Setelah form submit, sistem register recurring task ke scheduler
  2. Scheduler akan otomatis create transaction pada tanggal yang ditentukan
  3. Pengguna bisa melihat "Tanggal Jatuh Tempo Berikutnya" di daftar
  4. Status otomatis "Aktif" setelah dibuat

Skenario 6.9: Filter Transaksi Berdasarkan Periode

Skenario ini menunjukkan filtering transaksi by date range.

AktorOfficer & Sistem
RincianGiven officer berada di menu keuangan, When officer memilih periode waktu tertentu menggunakan filter tanggal (date range picker), dan optional memilih jenis transaksi, Then sistem menampilkan transaksi yang terjadi dalam periode yang dipilih, dan menampilkan totals untuk periode tersebut.

Fitur Filter:

  • Date Range: dari tanggal - sampai tanggal
  • Quick Filter: "Minggu Ini", "Bulan Ini", "Kuartal Ini", "Tahun Ini"
  • Jenis: filter additional by Pemasukan/Pengeluaran
  • Apply: tombol Apply untuk trigger filter
  • Reset: tombol Reset untuk clear semua filter
  • Summary: menampilkan summary untuk periode (Total Pemasukan, Total Pengeluaran, Net)

Skenario 6.10: Ekspor Laporan Keuangan

Skenario ini menunjukkan cara export data keuangan ke format file.

AktorOfficer & Sistem
RincianGiven officer telah memfilter data transaksi dengan periode tertentu, When officer menekan tombol "Ekspor Laporan" dan memilih format (Excel/PDF), Then sistem menghasilkan file laporan keuangan yang dapat diunduh dengan konten: ringkasan totals, detail transaksi, breakdown per permohonan, dan chart grafik.

Format Export:

Excel Format (.xlsx):

  • Sheet 1: Ringkasan - Total Pemasukan, Total Pengeluaran, Saldo Bersih, Periode
  • Sheet 2: Detail Transaksi - Tabel lengkap dengan semua kolom (tanggal, deskripsi, jumlah, jenis, keterangan)
  • Sheet 3: Pengeluaran per Permohonan - Breakdown biaya by order
  • Sheet 4: Pengeluaran Berulang - Daftar recurring expenses dengan next due date
  • Formatting dengan header bold, number format Rp, auto-width columns

PDF Format (.pdf):

  • Halaman 1: Cover & Summary - Header kantor, periode, totals dengan grafik pie/bar chart
  • Halaman 2+: Detail Transaksi - Tabel detail transaksi
  • Halaman N: Pengeluaran per Permohonan - Summary by order
  • Format profesional dengan watermark kantor

Detail Teknis & Perancangan

Abstraksi & Objek Inti

Modul ini berinteraksi dengan objek-objek inti berikut:

ObjekAnggotaTipe Data/Keterangan
Transaction (Transaksi)Properti:
idstring (ID unik transaksi)
tanggaldate (Tanggal transaksi)
deskripsistring (Deskripsi/nama transaksi)
jumlahfloat (Jumlah Rp)
jenisenum (PEMASUKAN, PENGELUARAN)
keteranganstring? (Catatan tambahan)
permohonanIdstring? (ID permohonan terkait, optional)
createdBystring (ID user pembuat)
createdAtdate (Timestamp pembuatan)
Metode:
create(data: TransactionData)Membuat transaksi baru. Kembali: Transaction.
update(data: TransactionData)Mengubah data transaksi. Kembali: boolean.
delete()Menghapus transaksi. Kembali: boolean.
getRelatedOrder()Mendapatkan permohonan terkait. Kembali: Order?.
Expense (Pengeluaran Permohonan)Properti:
idstring (ID unik pengeluaran)
orderIdstring (ID permohonan)
kategorienum (BIAYA_LAYANAN, BIAYA_TUGAS, BIAYA_TAMBAHAN)
jumlahfloat (Jumlah Rp)
deskripsistring (Deskripsi pengeluaran)
statusPembayaranenum (BELUM_BAYAR, SEBAGIAN, LUNAS)
tanggalJatuhTempodate (Deadline pembayaran)
Metode:
calculateTotal(expenses: Expense[])Menghitung total pengeluaran. Kembali: float.
updatePaymentStatus()Update status pembayaran. Kembali: boolean.
generateInvoice()Generate invoice untuk pengeluaran. Kembali: Invoice.
RecurringExpense (Pengeluaran Berulang)Properti:
idstring (ID unik)
deskripsistring (Deskripsi pengeluaran)
jumlahfloat (Jumlah Rp)
frekuensienum (HARIAN, MINGGUAN, BULANAN, TAHUNAN)
tanggalMulaidate (Tanggal mulai recurring)
tanggalAkhirdate? (Tanggal akhir, optional)
tanggalJatuhTempoBerikutnyadate (Calculated next due date)
statusenum (AKTIF, PAUSED, EXPIRED)
Metode:
create()Membuat pengeluaran berulang & register scheduler. Kembali: RecurringExpense.
pause()Menangguhkan pengeluaran berulang. Kembali: boolean.
resume()Melanjutkan pengeluaran berulang. Kembali: boolean.
calculateNextDueDate()Menghitung tanggal jatuh tempo berikutnya. Kembali: date.
generateForPeriod(startDate: date, endDate: date)Generate transactions untuk periode tertentu. Kembali: Transaction[].
FinancialReport (Laporan Keuangan)Properti:
idstring (ID unik laporan)
periodStartdate (Tanggal mulai periode)
periodEnddate (Tanggal akhir periode)
totalPemasukanfloat (Calculated total income)
totalPengeluaranfloat (Calculated total expense)
saldoBersihfloat (Net balance = income - expense)
generatedAtdate (Timestamp pembuatan laporan)
Metode:
generate(startDate: date, endDate: date)Generate laporan untuk periode. Kembali: FinancialReport.
exportToExcel()Export ke format Excel. Kembali: File.
exportToPDF()Export ke format PDF. Kembali: File.
getSummary()Mendapatkan ringkasan laporan. Kembali: object.
getBreakdownByOrder()Breakdown pengeluaran per permohonan. Kembali: ExpenseBreakdown[].

Diagram Kelas (Class Diagram)

Diagram ini menunjukkan struktur kelas inti dan relasinya dalam modul keuangan.

ERD (Entity-Relationship Diagram)

Diagram ini merepresentasikan struktur database untuk modul ini dan hubungannya dengan entitas lain.

Endpoint API

Modul ini menggunakan endpoint API berikut:

MethodEndpointDeskripsi
GET/office/finance/transactionsMendapatkan daftar transaksi dengan pagination, filter, dan search
GET/office/finance/transactions/{id}Mendapatkan detail transaksi spesifik
POST/office/finance/transactionsMembuat transaksi baru
PATCH/office/finance/transactions/{id}Memperbarui data transaksi
DELETE/office/finance/transactions/{id}Menghapus transaksi
GET/office/finance/expenses?orderId={id}Mendapatkan pengeluaran untuk permohonan tertentu
GET/office/finance/recurring-expensesMendapatkan daftar pengeluaran berulang
POST/office/finance/recurring-expensesMembuat pengeluaran berulang baru
PATCH/office/finance/recurring-expenses/{id}Memperbarui pengeluaran berulang (pause/resume/edit)
DELETE/office/finance/recurring-expenses/{id}Menghapus pengeluaran berulang
GET/office/finance/report?startDate={date}&endDate={date}Generate financial report untuk periode
POST/office/finance/report/export?format={format}Export laporan ke Excel/PDF
GET/office/finance/summaryMendapatkan ringkasan keuangan (totals, saldo)

Query Parameters untuk /office/finance/transactions:

  • page (number): Nomor halaman
  • size (number): Jumlah item per halaman
  • sort (string): Field untuk sorting (tanggal, jumlah)
  • direction (string): Arah sorting (asc, desc)
  • search (string): Term pencarian
  • jenis (string): Filter by jenis (PEMASUKAN, PENGELUARAN)
  • startDate (date): Filter by periode mulai
  • endDate (date): Filter by periode akhir

Rencana Pengujian (Test Cases)

NamaDeskripsiLangkah-langkahHasil yang Diharapkan
Verifikasi Akses KeuanganMemastikan hanya user dengan izin KEUANGAN yang dapat mengakses menu keuangan.1. Login sebagai user dengan izin KEUANGAN=false.
2. Coba akses /keuangan.
3. Verifikasi sidebar & access.
1. User diarahkan ke unauthorized page.
2. Sidebar tidak menampilkan menu keuangan.
3. Error message ditampilkan.
Lihat Tabel TransaksiMemastikan tabel transaksi menampilkan data dengan benar.1. Login sebagai user dengan izin KEUANGAN.
2. Akses menu keuangan /keuangan.
3. Verifikasi tampilan tabel.
1. Tabel transaksi ditampilkan dengan semua kolom.
2. Data tersorted by tanggal (newest first).
3. Pagination berfungsi.
Tambah Transaksi BaruMemastikan user dapat menambahkan transaksi baru ke tabel.1. Akses /keuangan.
2. Klik "Tambah Pengeluaran".
3. Isi form (tanggal, deskripsi, jumlah, jenis).
4. Submit form.
1. Form modal ditampilkan.
2. Data baru muncul di tabel.
3. Totals otomatis di-update.
4. Toast notification: "Berhasil ditambahkan".
Edit TransaksiMemastikan user dapat mengubah data transaksi.1. Buka tabel transaksi.
2. Klik "Edit" pada salah satu transaksi.
3. Ubah data (deskripsi, jumlah).
4. Submit perubahan.
1. Form modal ditampilkan dengan data lama.
2. Data di-update di tabel.
3. Totals otomatis di-recalculate.
4. Toast notification: "Berhasil diperbarui".
Hapus TransaksiMemastikan user dapat menghapus transaksi dengan konfirmasi.1. Buka tabel transaksi.
2. Klik "Hapus" pada salah satu transaksi.
3. Konfirmasi penghapusan di modal.
1. Modal konfirmasi ditampilkan.
2. Transaksi terhapus dari tabel.
3. Totals otomatis di-update.
4. Toast notification: "Berhasil dihapus".
Filter Transaksi by PeriodeMemastikan filter tanggal berfungsi dengan benar.1. Akses menu keuangan.
2. Pilih periode: "Bulan Ini".
3. Klik Apply.
1. Tabel menampilkan hanya transaksi bulan ini.
2. Totals di-update untuk periode.
3. Jumlah row berkurang sesuai filter.
Lihat Pengeluaran PermohonanMemastikan detail pengeluaran per permohonan ditampilkan.1. Akses tab "Pengeluaran per Permohonan".
2. Pilih permohonan dari dropdown.
3. Verifikasi breakdown pengeluaran.
1. Dropdown berisi semua permohonan.
2. Breakdown ditampilkan (Biaya Layanan, Biaya Tugas, dll).
3. Total pengeluaran dihitung dengan benar.
Tambah Pengeluaran BerulangMemastikan pengeluaran berulang dapat dibuat dan scheduler terdaftar.1. Akses tab "Pengeluaran Berulang".
2. Klik "Tambah Pengeluaran Berulang".
3. Isi form (deskripsi, jumlah, frekuensi=Bulanan, tanggal mulai=01/01/2025).
4. Submit.
1. Pengeluaran berulang muncul di daftar.
2. Status = "Aktif".
3. Tanggal jatuh tempo berikutnya ditampilkan.
4. Scheduler registered (verifikasi via logs).
Pause/Resume Pengeluaran BerulangMemastikan pengeluaran berulang dapat di-pause dan di-resume.1. Buka tab "Pengeluaran Berulang".
2. Klik "Pause" pada salah satu pengeluaran.
3. Verifikasi status.
4. Klik "Resume".
1. Status berubah ke "PAUSED".
2. Scheduler suspend.
3. Setelah resume, status kembali "AKTIF".
4. Scheduler resume.
Ekspor Laporan ExcelMemastikan export ke Excel berfungsi dengan benar.1. Filter transaksi bulan tertentu.
2. Klik "Ekspor Laporan".
3. Pilih format "Excel".
4. Download file.
1. File Excel di-generate dengan nama [periode]_laporan_keuangan.xlsx.
2. File berisi 4 sheet (Ringkasan, Detail, Per Permohonan, Recurring).
3. Data lengkap dan format benar.
4. File dapat di-open di Excel.
Ekspor Laporan PDFMemastikan export ke PDF berfungsi dengan benar.1. Filter transaksi periode tertentu.
2. Klik "Ekspor Laporan".
3. Pilih format "PDF".
4. Download file.
1. File PDF di-generate dengan nama [periode]_laporan_keuangan.pdf.
2. Halaman 1 = cover + summary dengan grafik.
3. Halaman 2+ = detail transaksi tabel.
4. File dapat di-open di PDF reader.
Calculate Financial SummaryMemastikan totals (pemasukan, pengeluaran, saldo) dihitung dengan akurat.1. Buat 3 transaksi: 2 Pemasukan (1M, 2M) & 1 Pengeluaran (500K).
2. Verifikasi totals di dashboard.
1. Total Pemasukan = 3M.
2. Total Pengeluaran = 500K.
3. Saldo Bersih = 2.5M.
4. Semua dihitung otomatis.
Transaksi Terkait PermohonanMemastikan transaksi dapat di-link ke permohonan dan tracking bekerja.1. Buat permohonan baru (Order ID = ABC).
2. Tambah transaksi dengan permohonanId = ABC.
3. Buka "Pengeluaran per Permohonan".
4. Pilih Order ABC.
1. Transaksi muncul di detail pengeluaran Order ABC.
2. Total pengeluaran Order ABC otomatis di-update.
3. Link bidirectional bekerja.
Recurring Expense Auto-GenerationMemastikan recurring expenses otomatis di-generate sesuai jadwal.1. Buat recurring expense (Bulanan, mulai 01/01/2025).
2. Tunggu sistem scheduler trigger (mock/simulate).
3. Verifikasi transaction terbaru di tabel.
1. Transaction baru otomatis di-create pada tanggal jatuh tempo.
2. Deskripsi = "[Recurring] [Original Description]".
3. Jumlah sama dengan recurring amount.
4. Status perubahan menjadi SELESAI (auto-confirmed).
Delete dengan CascadeMemastikan penghapusan transaksi tidak menyebabkan data inconsistency.1. Buat transaksi terkait permohonan ABC.
2. Delete transaksi tersebut.
3. Buka detail permohonan ABC.
1. Transaksi terhapus dari tabel global.
2. Total pengeluaran Order ABC otomatis di-update.
3. Tidak ada broken reference.

Status Dokumentasi:100% LENGKAP

Seluruh skenario 6.1 hingga 6.10 telah didokumentasikan dengan format BDD lengkap, diagram visual, abstraksi teknis, ERD, API endpoints, dan comprehensive test cases.