# azharrivaldi/catatan-keuangan architecture

> Architecture diagram of the GitHub repository azharrivaldi/catatan-keuangan, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azharrivaldi/catatan-keuangan
- Repository: https://github.com/azharrivaldi/catatan-keuangan

## Overview

Catatan-Keuangan is an Android personal-finance ledger for tracking income (pemasukan) and expenses (pengeluaran). Users open separate tabbed lists, review formatted totals, add or edit dated entries, and delete individual or all entries. The documented source and tree show the UI, entry forms, view-model layer, and Room persistence components. The view-model and adapter implementations were not sampled, so their internal database wiring and tab-to-fragment dispatch are not drawn.

Main entry points: [`app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranFragment.java`](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranFragment.java) (Expense list), [`app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanFragment.java`](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanFragment.java) (Income list), [`app/src/main/java/com/azhar/hitungpengeluaran/view/MainActivity.java`](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/MainActivity.java) (Main screen), [`app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranActivity.java`](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranActivity.java) (Expense form)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_navigation["Navigation"]
  node_main["Main screen<br/>[MainActivity.java]"]
  node_pager["Tab pager"]
end

subgraph group_expenses["Expense tracking"]
  node_expense_list["Expense list"]
  node_expense_adapter["Expense rows"]
  node_expense_vm["Expense state"]
  node_expense_form["Expense form"]
  node_expense_form_vm["Expense form state"]
end

subgraph group_income["Income tracking"]
  node_income_list["Income list"]
  node_income_adapter["Income rows"]
  node_income_vm["Income state"]
  node_income_form["Income form"]
  node_income_form_vm["Income form state"]
end

subgraph group_storage["Persistence"]
  node_helper["Rupiah formatting"]
  node_client["Database client"]
  node_database[("Room database<br/>[AppDatabase.java]")]
  node_dao["Ledger queries<br/>[DatabaseDao.java]"]
  node_record["Ledger record<br/>[ModelDatabase.java]"]
end

node_user(("User"))

node_user -->|"opens"| node_main
node_main -->|"sets up"| node_pager
node_user -->|"views"| node_expense_list
node_user -->|"views"| node_income_list
node_expense_list -->|"observes"| node_expense_vm
node_expense_list -->|"updates rows"| node_expense_adapter
node_expense_list -->|"opens form"| node_expense_form
node_expense_form -->|"submits changes"| node_expense_form_vm
node_expense_list -->|"formats total"| node_helper
node_income_list -->|"observes"| node_income_vm
node_income_list -->|"updates rows"| node_income_adapter
node_income_list -->|"opens form"| node_income_form
node_income_form -->|"submits changes"| node_income_form_vm
node_income_list -->|"formats total"| node_helper
node_client -->|"builds"| node_database
node_database -->|"exposes"| node_dao
node_dao -->|"queries records"| node_record

click node_main "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/MainActivity.java"
click node_pager "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/ViewPagerAdapter.java"
click node_expense_list "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranFragment.java"
click node_expense_adapter "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranAdapter.java"
click node_expense_vm "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranViewModel.java"
click node_expense_form "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranActivity.java"
click node_expense_form_vm "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranViewModel.java"
click node_income_list "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanFragment.java"
click node_income_adapter "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanAdapter.java"
click node_income_vm "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanViewModel.java"
click node_income_form "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanActivity.java"
click node_income_form_vm "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanViewModel.java"
click node_helper "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/utils/FunctionHelper.java"
click node_client "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/DatabaseClient.java"
click node_database "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/AppDatabase.java"
click node_dao "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/dao/DatabaseDao.java"
click node_record "https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/model/ModelDatabase.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_pager,node_user toneBlue
class node_expense_list,node_expense_adapter,node_expense_vm,node_expense_form,node_expense_form_vm toneAmber
class node_income_list,node_income_adapter,node_income_vm,node_income_form,node_income_form_vm toneMint
class node_helper,node_client,node_database,node_dao,node_record toneRose
```

## Components

### Navigation

- [Main screen](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/MainActivity.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/MainActivity.java`
- [Tab pager](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/ViewPagerAdapter.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/ViewPagerAdapter.java`

### Expense tracking

- [Expense list](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranFragment.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranFragment.java`
- [Expense rows](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranAdapter.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranAdapter.java`
- [Expense state](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranViewModel.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/PengeluaranViewModel.java`
- [Expense form](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranActivity.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranActivity.java`
- [Expense form state](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranViewModel.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pengeluaran/add/AddPengeluaranViewModel.java`

### Income tracking

- [Income list](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanFragment.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanFragment.java`
- [Income rows](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanAdapter.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanAdapter.java`
- [Income state](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanViewModel.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/PemasukanViewModel.java`
- [Income form](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanActivity.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanActivity.java`
- [Income form state](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanViewModel.java): `app/src/main/java/com/azhar/hitungpengeluaran/view/fragment/pemasukan/add/AddPemasukanViewModel.java`

### Persistence

- [Rupiah formatting](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/utils/FunctionHelper.java): `app/src/main/java/com/azhar/hitungpengeluaran/utils/FunctionHelper.java`
- [Database client](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/DatabaseClient.java): `app/src/main/java/com/azhar/hitungpengeluaran/database/DatabaseClient.java`
- [Room database](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/AppDatabase.java): `app/src/main/java/com/azhar/hitungpengeluaran/database/AppDatabase.java`
- [Ledger queries](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/database/dao/DatabaseDao.java): `app/src/main/java/com/azhar/hitungpengeluaran/database/dao/DatabaseDao.java`
- [Ledger record](https://github.com/azharrivaldi/catatan-keuangan/blob/main/app/src/main/java/com/azhar/hitungpengeluaran/model/ModelDatabase.java): `app/src/main/java/com/azhar/hitungpengeluaran/model/ModelDatabase.java`

### Other components

- **User**

## Connections

- User → Main screen: opens
- Main screen → Tab pager: sets up
- User → Expense list: views
- User → Income list: views
- Expense list → Expense state: observes
- Expense list → Expense rows: updates rows
- Expense list → Expense form: opens form
- Expense form → Expense form state: submits changes
- Expense list → Rupiah formatting: formats total
- Income list → Income state: observes
- Income list → Income rows: updates rows
- Income list → Income form: opens form
- Income form → Income form state: submits changes
- Income list → Rupiah formatting: formats total
- Database client → Room database: builds
- Room database → Ledger queries: exposes
- Ledger queries → Ledger record: queries records
