Setelah membangun sistem perpustakaan, kita beralih ke aplikasi yang relevan untuk pengguna pribadi: Aplikasi Keuangan Pribadi. Proyek ini mencatat pemasukan dan pengeluaran, mengelola anggaran bulanan per kategori, dan menghasilkan laporan ringkasan serta analisis persentase. Keterampilan yang dilatih meliputi pengelompokan data, agregasi, dan validasi input numerik dan tanggal. Aplikasi ini mengasah kemampuan mengelola data yang saling berhubungan: transaksi terkait kategori dan bulan, anggaran membandingkan target dengan realisasi. Setiap Bagian menghasilkan program yang dapat dijalankan dan diuji, sehingga kita dapat memverifikasi setiap kemampuan baru sebelum menambah fitur berikutnya.

Tujuan Proyek #

Aplikasi keuangan pribadi yang akan kita bangun mendukung operasi berikut:

  • Mencatat transaksi pemasukan dan pengeluaran beserta tanggal, jumlah, dan kategori.
  • Menetapkan anggaran bulanan per kategori dan membandingkannya dengan realisasi.
  • Menghasilkan laporan ringkasan bulanan: total pemasukan, pengeluaran, dan saldo.
  • Menganalisis pengeluaran per kategori beserta persentasenya.
  • Menyimpan dan memuat data ke file JSON dengan validasi input.

Setiap operasi memvalidasi format dan batas nilai: tanggal harus ISO, jumlah harus positif dan di bawah batas wajar, kategori hanya huruf kecil. Pesan galat yang spesifik membantu pengguna memperbaiki input tanpa menebak penyebabnya.

Perilaku yang Diharapkan #

Contoh sesi pemakaian menampilkan laporan bulanan setelah beberapa transaksi dimasukkan:

bash
java -jar keuangan.jar tambah --pemasukan 5000000 2026-01-05 gaji
java -jar keuangan.jar tambah --pengeluaran 750000 2026-01-08 makan
java -jar keuangan.jar laporan --bulan 2026-01

Output yang Dihasilkan:

text
Pemasukan  : Rp5.000.000
Pengeluaran: Rp750.000
Saldo      : Rp4.250.000

Aplikasi memformat angka Rupiah dengan pemisah ribuan berupa titik, sehingga mudah dibaca manusia. Format ini menjadi kontrak antara aplikasi dan pengguna di seluruh laporan.

Teknologi dan Stack #

Proyek ini menggunakan peranti berikut:

KomponenVersiTujuan
BahasaKotlin 2.0.21enum, data class, koleksi dengan groupBy
Pengelolaan waktujava.time.LocalDateValidasi format ISO dan perhitungan periode bulan
Build toolGradle 8.x dengan Kotlin DSLStruktur modular, test runner
Pengujiankotlin.testStandar resmi, ringkas
PenyimpananFile JSON lokalSederhana, dapat diperiksa manual
Tipe nominalLongPresisi penuh untuk nilai uang, tanpa pembulatan Double

Proyek ini tidak membutuhkan database eksternal; penyimpanan JSON cukup untuk skala pengguna pribadi. Untuk skala multi-pengguna, database SQLite atau PostgreSQL akan diperkenalkan di proyek REST API Manajemen Tugas.

Prasyarat #

Pembaca diharapkan telah menyelesaikan chapter berikut:

  • Section Object-Oriented Programming: enum class dan data class,
  • Section Error Handling: Result<T> dan require(),
  • Section Collections: filter, map, groupBy, dan sumOf,
  • Section Strings: format string dan String.format() untuk pemisah ribuan,
  • Proyek Sistem Manajemen Perpustakaan: pemodelan domain multi-entitas dan persistensi JSON.

Tanpa prasyarat tersebut, sebaiknya pelajari dahulu section atau proyek terkait sebelum melanjutkan.

Arsitektur #

Inti proyek ini adalah dua entitas berhubungan yang diatur oleh satu layanan agregat. Transaksi menyimpan referensi ke kategori sebagai string, bukan objek. Anggaran adalah pasangan (bulan, kategori) dengan batas. Relasi kedua entitas ini dikelola oleh class BukuKeuangan yang menjadi facade untuk semua operasi pencatatan, anggaran, dan laporan.

Layanan BukuKeuangan menjaga invariant: nominal selalu positif Long, kategori selalu huruf kecil, dan tanggal memakai format ISO yyyy-MM-dd. Lapisan agregasi memakai operator koleksi groupBy dan sumOf untuk menghasilkan laporan tanpa menambah state baru, sehingga pemrosesan tetap fungsional dan mudah diuji.

Struktur Bagian #

Proyek ini dikerjakan dalam empat bagian berurutan:

BagianYang DikerjakanHasil yang Diharapkan
1. Pencatatan TransaksiModel Transaksi, validasi nominal, perintah tambahTransaksi tersimpan di memori dan dapat ditampilkan
2. Kategori dan AnggaranEnum JenisTransaksi, model Anggaran, perbandingan realisasiAnggaran membandingkan target dengan realisasi per kategori
3. Laporan dan AnalisisgroupBy bulan, sumOf, persentase per kategoriLaporan bulanan menampilkan saldo, total, dan persentase
4. Penyimpanan dan ValidasiSerialisasi JSON, validasi input lengkapData tersimpan antar sesi; semua input divalidasi sebelum disimpan

Mulailah dari Bagian 1 dan ikuti urutannya karena setiap Bagian dibangun di atas Bagian sebelumnya. Setelah Bagian 4 selesai, kita siap melangkah ke proyek REST API Manajemen Tugas yang membawa kita ke arsitektur client-server dengan Ktor. Disiplin menjaga tipe nominal sebagai Long dan validasi tanggal sejak awal akan terbawa sebagai kebiasaan baik ke proyek berikutnya yang berinteraksi dengan database dan layanan eksternal.

Referensi Lanjutan #

  • Kotlin documentation home — halaman utama dokumentasi Kotlin sebagai rujukan fitur yang dipakai di proyek keuangan pribadi
  • Get started with Kotlin — panduan memulai proyek Kotlin untuk menerapkan fondasi yang dipakai di seluruh bagian proyek