Balaka Referensi Fitur

Rekonsiliasi Bank

Referensi layar fitur rekonsiliasi bank: konfigurasi parser, import mutasi, pencocokan transaksi, dan laporan rekonsiliasi.


Konfigurasi Parser

Halaman Daftar Parser

Navigasi: Sidebar > Rekonsiliasi Bank > Konfigurasi Parser

URL: /bank-recon/configs

Halaman menampilkan tabel parser yang tersedia. Setiap baris menampilkan nama bank, tipe, dan format tanggal.

Parser bawaan:

BankTipeFormat TanggalKolom
BCABCAdd/MM/yyyyTanggal, Keterangan, Cabang, Debit, Credit, Saldo
MandiriMANDIRIdd/MM/yyyyTanggal, Keterangan, Debit, Kredit, Saldo
BNIBNIdd-MMM-yyyyTanggal, Keterangan, Cabang, Debit, Kredit, Saldo
BSIBSIdd/MM/yyyyTanggal, Keterangan, Debit, Kredit, Saldo
CIMBCIMBdd/MM/yyyyTanggal, Keterangan, Debit, Kredit, Saldo

Tombol:

  • Parser Baru -- Membuka formulir pembuatan parser kustom

Formulir Parser Kustom

Navigasi: Konfigurasi Parser > Parser Baru

URL: /bank-recon/configs/new

Field:

FieldWajibTipe InputKeterangan
Tipe BankYaDropdownPilih CUSTOM untuk parser kustom
Nama ConfigYaTextNama deskriptif, contoh: "Bank Jatim CSV"
Kolom TanggalYaNumberIndex kolom tanggal dalam CSV (dimulai dari 0)
Kolom KeteranganYaNumberIndex kolom deskripsi transaksi
Format TanggalYaTextPattern Java DateTimeFormatter, contoh: dd/MM/yyyy

Tombol:

  • Simpan -- Menyimpan konfigurasi parser baru

Import Mutasi Bank

Halaman Import

Navigasi: Sidebar > Rekonsiliasi Bank > Import Mutasi

URL: /bank-recon/import

Field:

FieldWajibTipe InputKeterangan
Rekening BankYaDropdownPilih rekening bank yang terdaftar (contoh: BCA - 1234567890)
Parser ConfigYaDropdownPilih parser sesuai bank
Periode MulaiYaDateTanggal awal mutasi, format dd/MM/yyyy
Periode AkhirYaDateTanggal akhir mutasi, format dd/MM/yyyy
File CSVYaFile uploadFile CSV yang didownload dari internet banking

Tombol:

  • Import -- Memproses file CSV dan membuat record mutasi bank

Persyaratan file CSV:

  • Format CSV dengan header
  • Encoding UTF-8
  • Kolom sesuai parser yang dipilih
  • Pastikan format tanggal sesuai konfigurasi parser

Daftar Mutasi

Navigasi: Sidebar > Rekonsiliasi Bank > Daftar Mutasi

URL: /bank-recon/statements

Tabel menampilkan semua mutasi yang sudah di-import. Setiap baris menampilkan:

  • Bank
  • Periode (tanggal mulai -- akhir)
  • Jumlah item transaksi
  • Tanggal import

Klik baris untuk melihat detail.

Detail Mutasi

URL: /bank-recon/statements/{id}

Menampilkan:

  • Bank: Nama bank
  • Periode: Tanggal mulai -- akhir
  • Total Item: Jumlah transaksi dalam mutasi

Tabel item mutasi:

KolomKeterangan
TanggalTanggal transaksi
KeteranganDeskripsi transaksi dari bank
DebitNominal keluar
KreditNominal masuk
SaldoSaldo setelah transaksi

Proses Rekonsiliasi

Membuat Rekonsiliasi Baru

Navigasi: Sidebar > Rekonsiliasi Bank > Rekonsiliasi Baru

URL: /bank-recon/reconciliations/new

Field:

FieldWajibTipe InputKeterangan
Mutasi BankYaDropdownPilih mutasi yang akan direkonsiliasi

Tombol:

  • Buat Rekonsiliasi -- Membuat rekonsiliasi baru dengan status IN_PROGRESS

Halaman Detail Rekonsiliasi

URL: /bank-recon/reconciliations/{id}

Ringkasan:

InformasiKeterangan
StatusIN_PROGRESS atau COMPLETED
Saldo BankSaldo akhir menurut rekening koran bank
Saldo BukuSaldo akhir menurut pembukuan (general ledger)
Item CocokJumlah transaksi yang sudah berhasil dicocokkan
SelisihPerbedaan antara saldo bank dan saldo buku

Tombol:

  • Auto-Match -- Menjalankan pencocokan otomatis 3 tahap
  • Laporan -- Membuka halaman laporan rekonsiliasi
  • Complete -- Menandai rekonsiliasi selesai (hanya jika semua item sudah diproses)

Auto-Match (Pencocokan Otomatis)

Klik tombol Auto-Match di halaman detail rekonsiliasi. Sistem menjalankan pencocokan 3 tahap:

TahapMetodeKriteria Pencocokan
1Exact MatchTanggal identik DAN nominal identik
2Fuzzy DateNominal identik, selisih tanggal maksimal 3 hari
3Keyword MatchKata kunci keterangan bank cocok dengan keterangan buku

Setelah auto-match, setiap item bank menampilkan status:

  • Matched -- Sudah dicocokkan dengan transaksi buku
  • Bank Only -- Hanya ada di bank, tidak ada di buku
  • Unmatched -- Belum diproses

Manual Match

Untuk item yang tidak ter-match otomatis:

  1. Klik item bank yang belum cocok
  2. Sistem menampilkan daftar transaksi buku yang tersedia
  3. Pilih transaksi buku yang sesuai
  4. Klik Konfirmasi untuk mencocokkan

Mark Bank-Only / Book-Only

Untuk item yang memang hanya ada di satu sisi:

  • Bank Only: Klik tombol Bank Only pada item bank yang tidak ada padanannya di buku. Contoh: biaya administrasi bank, bunga deposito.
  • Book Only: Item buku yang tidak ada padanannya di bank. Contoh: cek beredar yang belum dicairkan.

Item yang ditandai Bank Only biasanya perlu jurnal penyesuaian di buku besar.


Laporan Rekonsiliasi

Navigasi: Halaman detail rekonsiliasi > tombol Laporan

URL: /bank-recon/reconciliations/{id}/report

Isi laporan:

BagianKeterangan
HeaderPeriode, rekening bank, tanggal rekonsiliasi
Ringkasan SaldoSaldo bank vs saldo buku
Item CocokDaftar transaksi yang berhasil dicocokkan (bank + buku)
Item Bank OnlyTransaksi bank tanpa pasangan di buku
Item Book OnlyTransaksi buku tanpa pasangan di bank
SelisihTotal selisih yang perlu ditindaklanjuti

Tombol:

  • Print -- Membuka versi cetak laporan

Hak Akses

PermissionKeterangan
BANK_RECON_VIEWMelihat daftar mutasi dan rekonsiliasi
BANK_RECON_IMPORTImport file CSV mutasi bank
BANK_RECON_MATCHMelakukan pencocokan (auto-match dan manual match)
BANK_RECON_COMPLETEMenandai rekonsiliasi selesai
BANK_RECON_CONFIGMengelola konfigurasi parser

Selanjutnya: Faktur & Tagihan (Invoicing)

Faktur (Invoice)

Referensi layar fitur faktur: pembuatan faktur, alur kerja status, pencatatan pembayaran, laporan umur piutang, dan laporan klien.


Alur Kerja Faktur

DRAFT --> SENT --> PARTIAL --> PAID
                     ^           ^
                 (sebagian)   (lunas)
StatusKeterangan
DRAFTBaru dibuat, bisa diedit
SENTSudah dikirim ke klien, menunggu pembayaran
PARTIALSebagian dibayar
PAIDLunas
OVERDUEMelewati tanggal jatuh tempo (status otomatis)

Daftar Faktur

Navigasi: Sidebar > Proyek > Faktur

URL: /invoices

Tabel menampilkan semua faktur. Setiap baris menampilkan:

  • Nomor faktur
  • Klien
  • Tanggal faktur
  • Tanggal jatuh tempo
  • Total
  • Status (badge berwarna)

Membuat Faktur

Navigasi: Faktur > Faktur Baru

URL: /invoices/new

Field Faktur

FieldWajibTipe InputKeterangan
KlienYaDropdownPilih dari daftar klien yang terdaftar
Tanggal FakturYaDateTanggal penerbitan faktur
Tanggal Jatuh TempoYaDateBatas waktu pembayaran
ProyekTidakDropdownKaitkan ke proyek tertentu (opsional)

Line Item

Tambahkan satu atau lebih line item:

FieldWajibTipe InputKeterangan
DeskripsiYaTextKeterangan jasa atau barang
QuantityYaNumberJumlah unit
Harga SatuanYaNumber (Rp)Harga per unit
Total--OtomatisDihitung: quantity x harga satuan

Tombol:

  • Tambah Item -- Menambah baris line item baru
  • Hapus -- Menghapus baris line item (ikon X di samping baris)
  • Simpan -- Menyimpan faktur dengan status DRAFT

Detail Faktur

URL: /invoices/{id}

Menampilkan informasi faktur lengkap:

  • Nomor faktur, klien, tanggal, jatuh tempo
  • Status (badge berwarna)
  • Tabel line item (deskripsi, qty, harga satuan, total)
  • Total faktur
  • Sisa tagihan (balance due) -- jika ada pembayaran sebagian

Tombol Aksi (tergantung status)

TombolTersedia di StatusHasil
EditDRAFTMembuka formulir edit
KirimDRAFTMengubah status ke SENT
Catat PembayaranSENT, PARTIAL, OVERDUEMembuka formulir pembayaran

Faktur yang sudah berstatus SENT tidak bisa diedit.


Mencatat Pembayaran

Navigasi: Detail faktur > tombol Catat Pembayaran

Field Pembayaran

FieldWajibTipe InputKeterangan
Tanggal PembayaranYaDateTanggal dana diterima
JumlahYaNumber (Rp)Nominal pembayaran (bisa kurang dari sisa tagihan)
Metode PembayaranYaDropdownTransfer, Cash, Cek, Kartu Kredit, E-Wallet, Lainnya
Nomor ReferensiYaTextNomor bukti transfer atau kuitansi
CatatanTidakTextKeterangan tambahan

Tombol:

  • Simpan Pembayaran -- Mencatat pembayaran

Perilaku Status

  • Jika jumlah pembayaran < sisa tagihan: status berubah ke PARTIAL
  • Jika total semua pembayaran = total faktur: status berubah ke PAID

Validasi

  • Jumlah pembayaran tidak boleh melebihi sisa tagihan
  • Total pembayaran + pembayaran baru <= total faktur
  • Pembayaran hanya bisa dicatat pada faktur berstatus SENT, PARTIAL, atau OVERDUE

Riwayat Pembayaran

Ditampilkan di halaman detail faktur sebagai tabel:

KolomKeterangan
TanggalTanggal pembayaran
JumlahNominal pembayaran
MetodeMetode pembayaran
ReferensiNomor bukti transfer/kuitansi

Laporan Umur Piutang (Aging Receivables)

Navigasi: Sidebar > Laporan > Umur Piutang

URL: /reports/aging-receivables

Filter

FieldKeterangan
Tanggal Acuan (As-of Date)Tanggal referensi untuk menghitung umur piutang

Bucket Aging

BucketKeterangan
Belum Jatuh TempoFaktur yang belum melewati due date
1-30 hariTerlambat 1-30 hari
31-60 hariTerlambat 31-60 hari
61-90 hariTerlambat 61-90 hari
> 90 hariTerlambat lebih dari 90 hari

Isi Laporan

  • Ringkasan per bucket: Total piutang di setiap kategori umur
  • Tabel per klien: Rincian saldo per klien di setiap bucket
  • Setelah pembayaran sebagian, saldo berkurang sesuai jumlah yang sudah dibayar
  • Setelah faktur lunas, klien hilang dari laporan aging

Laporan Klien (Client Statement)

Navigasi: Detail klien > Lihat Laporan, atau Sidebar > Laporan > Laporan Klien

URL: /reports/client-statement

Filter

FieldKeterangan
KlienPilih klien
Tanggal MulaiAwal periode
Tanggal AkhirAkhir periode

Isi Laporan

KolomKeterangan
TanggalTanggal transaksi
TipeInvoice atau Pembayaran
No. ReferensiNomor faktur atau nomor pembayaran
KeteranganDeskripsi
InvoiceJumlah faktur
PembayaranJumlah pembayaran
Saldo BerjalanRunning balance piutang

Informasi tambahan:

  • Saldo Awal: Total piutang sebelum periode yang dipilih
  • Saldo Akhir: Posisi piutang di akhir periode

Tombol:

  • Cetak -- Membuka versi cetak (format A4 landscape)

Selanjutnya: Tagihan Vendor (Bills)

Tagihan Vendor

Referensi layar fitur tagihan vendor: pembuatan tagihan, alur kerja status, pencatatan pembayaran, laporan umur hutang, dan laporan vendor.


Alur Kerja Tagihan

DRAFT --> APPROVED --> PARTIAL --> PAID
                        ^           ^
                    (sebagian)   (lunas)
StatusKeterangan
DRAFTBaru dibuat, menunggu approval
APPROVEDDisetujui, menunggu pembayaran
PARTIALSebagian dibayar
PAIDLunas
OVERDUEMelewati tanggal jatuh tempo (status otomatis)

Daftar Tagihan

Navigasi: Sidebar > Pembelian > Tagihan

URL: /bills

Tabel menampilkan semua tagihan vendor. Setiap baris menampilkan:

  • Nomor tagihan
  • Vendor
  • Tanggal tagihan
  • Tanggal jatuh tempo
  • Total
  • Status (badge berwarna)

Membuat Tagihan

Navigasi: Tagihan > Tagihan Baru

URL: /bills/new

Field Tagihan

FieldWajibTipe InputKeterangan
VendorYaDropdownPilih dari daftar vendor yang terdaftar
Tanggal TagihanYaDateTanggal penerbitan oleh vendor
Tanggal Jatuh TempoYaDateBatas waktu pembayaran
Nomor Referensi VendorTidakTextNomor tagihan dari sisi vendor

Line Item

Tambahkan satu atau lebih line item:

FieldWajibTipe InputKeterangan
DeskripsiYaTextKeterangan barang atau jasa
QuantityYaNumberJumlah unit
Harga SatuanYaNumber (Rp)Harga per unit
Total--OtomatisDihitung: quantity x harga satuan

Tombol:

  • Tambah Item -- Menambah baris line item baru
  • Hapus -- Menghapus baris line item
  • Simpan -- Menyimpan tagihan dengan status DRAFT

Detail Tagihan

URL: /bills/{id}

Menampilkan informasi tagihan lengkap:

  • Nomor tagihan, vendor, tanggal, jatuh tempo, referensi vendor
  • Status (badge berwarna)
  • Tabel line item
  • Total tagihan
  • Sisa hutang (balance due)

Tombol Aksi (tergantung status)

TombolTersedia di StatusHasil
EditDRAFTMembuka formulir edit
SetujuiDRAFTMengubah status ke APPROVED
Catat PembayaranAPPROVED, PARTIAL, OVERDUEMembuka formulir pembayaran

Tagihan yang sudah berstatus APPROVED tidak bisa diedit.


Mencatat Pembayaran

Navigasi: Detail tagihan > tombol Catat Pembayaran

Field Pembayaran

FieldWajibTipe InputKeterangan
Tanggal PembayaranYaDateTanggal pembayaran dilakukan
JumlahYaNumber (Rp)Nominal pembayaran (bisa kurang dari sisa hutang)
Metode PembayaranYaDropdownTransfer, Cash, Cek, Kartu Kredit, E-Wallet, Lainnya
Nomor ReferensiYaTextNomor bukti transfer atau kuitansi
CatatanTidakTextKeterangan tambahan

Tombol:

  • Simpan Pembayaran -- Mencatat pembayaran

Perilaku Status

  • Jika jumlah pembayaran < sisa hutang: status berubah ke PARTIAL
  • Jika total semua pembayaran = total tagihan: status berubah ke PAID

Validasi

  • Jumlah pembayaran tidak boleh melebihi sisa hutang
  • Total pembayaran + pembayaran baru <= total tagihan
  • Pembayaran hanya bisa dicatat pada tagihan berstatus APPROVED, PARTIAL, atau OVERDUE

Riwayat Pembayaran

Ditampilkan di halaman detail tagihan sebagai tabel:

KolomKeterangan
TanggalTanggal pembayaran
JumlahNominal pembayaran
MetodeMetode pembayaran
ReferensiNomor bukti transfer/kuitansi

Laporan Umur Hutang (Aging Payables)

Navigasi: Sidebar > Laporan > Umur Hutang

URL: /reports/aging-payables

Filter

FieldKeterangan
Tanggal Acuan (As-of Date)Tanggal referensi untuk menghitung umur hutang

Bucket Aging

BucketKeterangan
Belum Jatuh TempoTagihan yang belum melewati due date
1-30 hariTerlambat 1-30 hari
31-60 hariTerlambat 31-60 hari
61-90 hariTerlambat 61-90 hari
> 90 hariTerlambat lebih dari 90 hari

Isi Laporan

  • Ringkasan per bucket: Total hutang di setiap kategori umur
  • Tabel per vendor: Rincian saldo per vendor di setiap bucket
  • Setelah pembayaran sebagian, saldo berkurang
  • Setelah tagihan lunas, vendor hilang dari laporan aging

Laporan Vendor (Vendor Statement)

Navigasi: Detail vendor > Lihat Laporan

URL: /reports/vendor-statement

Filter

FieldKeterangan
VendorPilih vendor
Tanggal MulaiAwal periode
Tanggal AkhirAkhir periode

Isi Laporan

KolomKeterangan
TanggalTanggal transaksi
TipeBill atau Pembayaran
No. ReferensiNomor tagihan atau nomor pembayaran
KeteranganDeskripsi
TagihanJumlah tagihan
PembayaranJumlah pembayaran
Saldo BerjalanRunning balance hutang

Informasi tambahan:

  • Saldo Awal: Total hutang sebelum periode yang dipilih
  • Saldo Akhir: Posisi hutang di akhir periode

Tombol:

  • Cetak -- Membuka versi cetak (format A4 landscape)

API Tagihan Vendor

Tagihan vendor juga bisa dikelola via API (untuk integrasi AI):

EndpointScopeKeterangan
GET /api/billsbills:readDaftar tagihan
GET /api/bills/{id}bills:readDetail tagihan
POST /api/billsbills:createBuat tagihan baru
POST /api/bills/{id}/approvebills:approveApprove tagihan
POST /api/bills/{id}/paymentsbills:approveCatat pembayaran

Selanjutnya: Transaksi Berulang

Transaksi Berulang

Referensi layar fitur transaksi berulang: pembuatan jadwal, frekuensi, eksekusi otomatis, dan pengelolaan jadwal.


Daftar Transaksi Berulang

Navigasi: Sidebar > Akuntansi > Transaksi Berulang

URL: /recurring

Kartu Ringkasan

Tiga kartu di bagian atas halaman:

  • Aktif -- Jumlah transaksi berulang yang aktif (badge hijau)
  • Dijeda -- Jumlah yang dihentikan sementara (badge kuning)
  • Selesai -- Jumlah yang sudah selesai (badge abu-abu)

Filter

FieldKeterangan
StatusFilter berdasarkan status: Semua, Aktif, Dijeda, Selesai

Tabel

KolomKeterangan
NamaNama deskriptif transaksi berulang
TemplateTemplate jurnal yang digunakan
FrekuensiHarian, Mingguan, Bulanan, Triwulanan, Tahunan
JumlahNominal transaksi (Rp)
Jadwal BerikutTanggal eksekusi berikutnya
Total EksekusiBerapa kali sudah dieksekusi
StatusBadge berwarna (Aktif/Dijeda/Selesai)

Tombol:

  • + Transaksi Berulang Baru -- Membuka formulir pembuatan

Membuat Transaksi Berulang

Navigasi: Daftar Transaksi Berulang > + Transaksi Berulang Baru

URL: /recurring/new

Field Formulir

FieldWajibTipe InputKeterangan
NamaYaTextNama deskriptif, contoh: "Sewa Kantor Bulanan"
Template JurnalYaDropdownTemplate yang digunakan untuk membuat transaksi
Jumlah (Rp)YaNumberNominal transaksi
DeskripsiYaTextDeskripsi yang akan muncul di transaksi yang dibuat
FrekuensiYaDropdownHarian, Mingguan, Bulanan, Triwulanan, Tahunan
TanggalKondisionalNumber (1-28)Tanggal eksekusi -- tampil jika frekuensi Bulanan, Triwulanan, atau Tahunan
HariKondisionalDropdownHari eksekusi (Senin-Minggu) -- tampil jika frekuensi Mingguan
Tanggal MulaiYaDateTanggal pertama eksekusi
Tanggal SelesaiTidakDateTanggal terakhir eksekusi. Kosongkan jika tanpa batas waktu
Maks. EksekusiTidakNumberJumlah maksimum eksekusi. Kosongkan jika tanpa batas

Opsi Tambahan

OpsiTipeKeterangan
Lewati Akhir PekanCheckboxJika jadwal jatuh pada Sabtu/Minggu, eksekusi dipindah ke Senin berikutnya
Posting OtomatisCheckboxJika dicentang, transaksi langsung POSTED. Jika tidak, disimpan sebagai DRAFT

Tombol:

  • Simpan -- Membuat transaksi berulang dengan status ACTIVE

Detail Transaksi Berulang

URL: /recurring/{id}

Informasi

FieldKeterangan
NamaNama transaksi berulang
TemplateTemplate jurnal yang digunakan
JumlahNominal (Rp)
FrekuensiJadwal eksekusi
DeskripsiDeskripsi transaksi
Tanggal MulaiTanggal pertama
Tanggal SelesaiTanggal terakhir (jika ada)
Jadwal BerikutTanggal eksekusi berikutnya
Total EksekusiBerapa kali sudah dieksekusi
StatusACTIVE, PAUSED, atau COMPLETED

Jadwal 5 Eksekusi Berikutnya

Tabel preview menampilkan 5 tanggal eksekusi mendatang berdasarkan frekuensi dan konfigurasi saat ini.

Riwayat Eksekusi

Tabel log eksekusi menampilkan:

KolomKeterangan
TanggalTanggal eksekusi
StatusBerhasil (hijau), Gagal (merah), Dilewati (kuning)
TransaksiLink ke transaksi yang dibuat (jika berhasil)
PesanPesan error (jika gagal) atau alasan dilewati

Tombol Aksi

TombolTersedia di StatusHasil
EditACTIVE, PAUSEDMembuka formulir edit
JedaACTIVEMenghentikan sementara eksekusi, status berubah ke PAUSED
LanjutkanPAUSEDMelanjutkan eksekusi, jadwal dihitung ulang dari hari ini
SelesaikanACTIVE, PAUSEDMenghentikan permanen, status berubah ke COMPLETED
HapusSemuaSoft delete -- transaksi yang sudah dibuat tidak terpengaruh

Scheduler Otomatis

Scheduler berjalan otomatis setiap hari pukul 05:00. Proses:

  1. Query semua transaksi berulang ACTIVE dengan nextRunDate <= hari ini
  2. Untuk setiap item:
    • Cek opsi "Lewati Akhir Pekan" -- jika tanggal jatuh pada Sabtu/Minggu, pindah ke Senin
    • Buat transaksi baru dari template + jumlah + deskripsi
    • Jika "Posting Otomatis" aktif: posting transaksi
    • Catat log eksekusi (SUCCESS)
    • Update nextRunDate, lastRunDate, totalRuns
  3. Jika maxOccurrences tercapai atau nextRunDate melewati endDate: status berubah ke COMPLETED
  4. Jika terjadi error: catat log (FAILED), lanjut ke item berikutnya

Status Log Eksekusi

StatusKeterangan
SUCCESSTransaksi berhasil dibuat
FAILEDTerjadi error saat pembuatan
SKIPPEDDilewati karena jatuh pada akhir pekan

Frekuensi yang Didukung

FrekuensiKeterangan
DAILY (Harian)Setiap hari
WEEKLY (Mingguan)Hari tertentu dalam minggu (Senin-Minggu)
MONTHLY (Bulanan)Tanggal tertentu dalam bulan (1-28)
QUARTERLY (Triwulanan)Setiap 3 bulan pada tanggal tertentu
YEARLY (Tahunan)Setiap tahun pada tanggal tertentu

Tanggal dibatasi maksimal 28 untuk menghindari masalah bulan pendek (Februari).


Hak Akses

PermissionAdminOwnerAccountantStaffAuditor
RECURRING_VIEWYaYaYaYaYa
RECURRING_CREATEYaYaYa----
RECURRING_EDITYaYaYa----
RECURRING_DELETEYaYaYa----

Selanjutnya: Peringatan (Smart Alerts)

Peringatan (Smart Alerts)

Referensi layar fitur peringatan otomatis: konfigurasi aturan, peringatan aktif, widget dashboard, dan riwayat peringatan.


Jenis Peringatan

Sistem menyediakan 7 jenis peringatan bawaan:

TipeNamaDeskripsiSatuan Ambang Batas
CASH_LOWKas RendahSaldo kas + bank di bawah ambang batasRp
RECEIVABLE_OVERDUEPiutang Jatuh TempoAda piutang yang sudah jatuh tempo0 = selalu aktif
EXPENSE_SPIKELonjakan BiayaBiaya bulan ini naik melebihi X% dari rata-rata 3 bulan sebelumnya%
PROJECT_COST_OVERRUNProyek Melebihi AnggaranAda proyek yang biayanya melebihi anggaran0 = selalu aktif
PROJECT_MARGIN_DROPMargin Proyek TurunMargin proyek turun di bawah X%%
COLLECTION_SLOWDOWNPenagihan MelambatRata-rata hari penagihan melebihi X harihari
CLIENT_CONCENTRATIONKonsentrasi KlienSatu klien menyumbang lebih dari X% pendapatan%

Tingkat Keparahan (Severity)

SeverityNamaWarna BadgeKeterangan
INFOInformasiBiruKondisi yang perlu diketahui, tidak mendesak
WARNINGPeringatanKuningKondisi yang perlu segera diperhatikan
CRITICALKritisMerahKondisi darurat yang harus ditindaklanjuti segera

Konfigurasi Peringatan

Navigasi: Sidebar > Laporan > Peringatan > tab Konfigurasi

URL: /alerts/config

Permission: ALERT_CONFIG

Daftar Aturan

Halaman menampilkan 7 aturan peringatan bawaan. Setiap aturan menampilkan:

KolomKeterangan
Nama TipeNama Indonesia dari jenis peringatan
DeskripsiPenjelasan kondisi yang dievaluasi
Ambang Batas (Threshold)Nilai numerik batas pemicu
Status AktifCheckbox aktif/nonaktif

Mengubah Ambang Batas

  1. Isi nilai baru pada field Ambang Batas sesuai jenis aturan:
    • Kas Rendah: Nominal dalam Rupiah (contoh: 10000000 = Rp 10 juta)
    • Lonjakan Biaya: Persentase (contoh: 30 = 30%)
    • Margin Proyek Turun: Persentase (contoh: 10 = 10%)
    • Penagihan Melambat: Jumlah hari (contoh: 30 = 30 hari)
    • Konsentrasi Klien: Persentase (contoh: 50 = 50%)
    • Piutang Jatuh Tempo / Proyek Melebihi Anggaran: Nilai 0 berarti selalu aktif jika ada kasus
  2. Klik Simpan pada aturan yang diubah

Menonaktifkan Aturan

Hapus centang pada checkbox Aktif, lalu klik Simpan. Aturan nonaktif tidak dievaluasi oleh scheduler harian.


Peringatan Aktif

Navigasi: Sidebar > Laporan > Peringatan

URL: /alerts

Permission: ALERT_VIEW

Daftar Peringatan Aktif

Halaman menampilkan peringatan yang belum dikonfirmasi (unacknowledged). Setiap peringatan menampilkan:

ElemenKeterangan
Badge severityBiru (INFO), kuning (WARNING), merah (CRITICAL)
Tipe peringatanNama Indonesia dari jenis peringatan
PesanDetail kondisi yang memicu peringatan
WaktuTimestamp kapan peringatan dipicu
Tombol KonfirmasiUntuk menandai sudah ditindaklanjuti

Mengonfirmasi Peringatan

Klik tombol Konfirmasi pada peringatan yang sudah ditindaklanjuti.

Perilaku:

  • Peringatan berpindah ke halaman riwayat
  • Tidak lagi muncul di daftar aktif
  • Nama pengonfirmasi dan waktu konfirmasi dicatat

Permission: ALERT_ACKNOWLEDGE


Widget Dashboard

Navigasi: Sidebar > Dashboard

URL: /dashboard

Widget peringatan dimuat secara dinamis via HTMX di halaman dashboard.

Isi Widget

ElemenKeterangan
Jumlah per severityBerapa peringatan aktif bertipe INFO, WARNING, CRITICAL
5 peringatan terbaruDaftar singkat dengan badge severity dan pesan
Link "Lihat semua"Menuju halaman peringatan aktif (/alerts)

Riwayat Peringatan

Navigasi: Halaman peringatan > tab Riwayat

URL: /alerts/history

Permission: ALERT_VIEW

Tabel Riwayat

Tabel paginated menampilkan seluruh peringatan (aktif dan yang sudah dikonfirmasi):

KolomKeterangan
TipeJenis peringatan
SeverityTingkat keparahan (badge berwarna)
PesanDetail peringatan
Waktu TriggerKapan peringatan dipicu
StatusDikonfirmasi (nama + waktu) atau belum

Evaluasi Harian

Scheduler berjalan otomatis setiap hari pukul 08:00 (dikonfigurasi via app.alerts.schedule).

Mekanisme:

  1. Setiap aturan yang enabled = true dievaluasi
  2. Jika kondisi ambang batas terpenuhi, event peringatan dibuat
  3. Deduplikasi 24 jam: Jika sudah ada event yang belum dikonfirmasi untuk aturan yang sama dalam 24 jam terakhir, event baru tidak dibuat

Hak Akses

PermissionKeterangan
ALERT_VIEWMelihat peringatan aktif dan riwayat
ALERT_CONFIGMengubah ambang batas dan status aktif aturan
ALERT_ACKNOWLEDGEMengonfirmasi (acknowledge) peringatan

Selanjutnya: Label Transaksi (Tags)

Tag Transaksi

Referensi layar fitur label transaksi: tipe label, label, penandaan transaksi, filter, dan laporan ringkasan per label.


Konsep

Label (tag) digunakan untuk menandai transaksi dengan kategori tambahan di luar chart of accounts. Setiap label memiliki tipe label (tag type) sebagai pengelompokan. Contoh:

  • Tipe label: "Departemen" -- Label: Marketing, Engineering, Finance
  • Tipe label: "Proyek" -- Label: Website Redesign, Mobile App
  • Tipe label: "Sumber Dana" -- Label: Dana Hibah, Dana Operasional

Satu transaksi bisa memiliki banyak label dari berbagai tipe.


Tipe Label

Daftar Tipe Label

Navigasi: Sidebar > Master Data > Label Transaksi

URL: /tags/types

Tabel menampilkan semua tipe label. Setiap baris:

KolomKeterangan
KodeKode unik tipe label (maks 20 karakter)
NamaNama deskriptif
DeskripsiKeterangan tambahan
StatusAktif / Nonaktif

Tombol:

  • Tipe Label Baru -- Membuka formulir pembuatan
  • Pencarian -- Field pencarian dengan live search (HTMX, delay 300ms)

Klik nama tipe label untuk melihat daftar label di dalam tipe tersebut.

Formulir Tipe Label

URL: /tags/types/new (baru) atau /tags/types/{id}/edit (edit)

Permission: TAG_CREATE (baru) atau TAG_EDIT (edit)

FieldWajibTipe InputKeterangan
KodeYaTextKode unik, maks 20 karakter. Contoh: DEPT
NamaYaTextNama tipe label, maks 100 karakter. Contoh: "Departemen"
DeskripsiTidakTextKeterangan, maks 255 karakter
Aktif--CheckboxDefault: aktif

Tombol:

  • Simpan -- Menyimpan tipe label

Validasi:

  • Kode harus unik -- jika sudah ada, form menampilkan pesan error "Kode sudah digunakan"

Menghapus Tipe Label

Klik tombol Hapus pada tipe label. Soft delete -- tipe label dan label di dalamnya tidak lagi ditampilkan tapi data tetap tersimpan.

Permission: TAG_DELETE

Jika tipe label masih memiliki label yang digunakan di transaksi, penghapusan ditolak dengan pesan error.


Label

Daftar Label

Navigasi: Klik nama tipe label dari daftar tipe label

URL: /tags/types/{tagTypeId}/tags

Breadcrumb: Label Transaksi > [Nama Tipe]

Tabel menampilkan label di dalam tipe yang dipilih:

KolomKeterangan
KodeKode unik label dalam tipe (maks 20 karakter)
NamaNama label
DeskripsiKeterangan tambahan
StatusAktif / Nonaktif

Tombol:

  • Label Baru -- Membuka formulir pembuatan
  • Pencarian -- Field pencarian dengan live search (HTMX, delay 300ms)

Formulir Label

URL: /tags/types/{tagTypeId}/tags/new (baru) atau /tags/types/{tagTypeId}/tags/{id}/edit (edit)

Permission: TAG_CREATE (baru) atau TAG_EDIT (edit)

FieldWajibTipe InputKeterangan
KodeYaTextKode unik dalam tipe, maks 20 karakter. Contoh: MKT
NamaYaTextNama label, maks 100 karakter. Contoh: "Marketing"
DeskripsiTidakTextKeterangan, maks 255 karakter
Aktif--CheckboxDefault: aktif

Validasi:

  • Kode harus unik dalam satu tipe label (kombinasi id_tag_type + code unik)

Menghapus Label

Klik tombol Hapus. Soft delete.

Permission: TAG_DELETE

Jika label masih digunakan di transaksi, penghapusan ditolak.


Menandai Transaksi dengan Label

Saat Membuat/Mengedit Transaksi

Di formulir transaksi (/transactions/new atau /transactions/{id}/edit), bagian bawah menampilkan panel Label yang dikelompokkan per tipe label.

Setiap tipe label ditampilkan sebagai heading, dengan checkbox untuk setiap label di dalamnya. Centang label yang relevan.

Label yang dipilih disimpan bersama transaksi saat klik Simpan.

Filter Transaksi per Label

Di halaman daftar transaksi (/transactions), tersedia dropdown filter Label di samping filter status dan kategori.

Pilih label dari dropdown untuk menampilkan hanya transaksi yang memiliki label tersebut. Filter berlaku bersama filter lain (status, kategori, tanggal, proyek).


Laporan Ringkasan per Label

Navigasi: Sidebar > Laporan > Ringkasan per Label

URL: /reports/tag-summary

Permission: REPORT_VIEW dan TAG_VIEW

Filter

FieldKeterangan
Tanggal MulaiAwal periode (default: tanggal 1 bulan ini)
Tanggal AkhirAkhir periode (default: hari ini)

Isi Laporan

Laporan dikelompokkan per tipe label. Untuk setiap tipe label:

Header: Nama tipe label

Tabel:

KolomKeterangan
LabelNama label
TransaksiJumlah transaksi yang memiliki label ini
PendapatanTotal nominal transaksi pendapatan (hijau)
PengeluaranTotal nominal transaksi pengeluaran (merah)
NettoSelisih pendapatan - pengeluaran (hijau jika positif, merah jika negatif)

Footer: Baris subtotal per tipe label.

Jika tidak ada transaksi dengan label pada periode yang dipilih, halaman menampilkan pesan "Tidak ada data transaksi dengan label pada periode ini".


Hak Akses

PermissionKeterangan
TAG_VIEWMelihat tipe label dan label
TAG_CREATEMembuat tipe label dan label baru
TAG_EDITMengubah tipe label dan label
TAG_DELETEMenghapus tipe label dan label
REPORT_VIEW + TAG_VIEWMelihat laporan ringkasan per label

Selanjutnya: Integrasi AI

Integrasi AI & Telegram

Referensi layar fitur integrasi AI: otorisasi perangkat, pencatatan transaksi via API, laporan analisis AI, dan pengelolaan dokumen transaksi.


Otorisasi Perangkat (Device Flow)

AI assistant mengakses aplikasi melalui OAuth 2.0 Device Authorization Flow (RFC 8628). Proses ini melibatkan 3 langkah antara AI dan pengguna.

Langkah 1: AI Meminta Kode

AI mengirim request ke POST /api/device/code dengan clientId (contoh: claude-code). Sistem mengembalikan:

  • deviceCode -- Kode untuk polling token
  • userCode -- Kode yang harus dimasukkan pengguna (contoh: MBJN-KRFJ)
  • verificationUri -- URL halaman otorisasi
  • expiresIn -- Masa berlaku kode (900 detik = 15 menit)

Langkah 2: Pengguna Otorisasi di Browser

URL: /device atau URL yang diberikan AI

Buka URL otorisasi di browser. Halaman menampilkan:

  1. Form login -- Login dengan username dan password
  2. Field kode perangkat -- Masukkan kode yang ditampilkan AI (contoh: MBJN-KRFJ)
  3. Field nama perangkat (opsional) -- Beri nama deskriptif, contoh: "Claude Code di MacBook"
  4. Tombol Otorisasi Perangkat -- Klik untuk menyetujui akses

Kode perangkat hanya berlaku 15 menit dan hanya bisa digunakan sekali.

Langkah 3: AI Mendapat Token

Setelah pengguna otorisasi, AI mendapat access token yang berlaku 30 hari. Token ini digunakan sebagai Authorization: Bearer {token} di setiap request API selanjutnya.

Scope yang Tersedia

ScopeHak Akses
drafts:createMembuat dan mengedit draft transaksi
drafts:approveApprove/reject draft
drafts:readMembaca draft
analysis:readMembaca laporan keuangan
analysis:writeMempublikasikan laporan analisis
transactions:postPosting, koreksi, dan hapus transaksi DRAFT
data:importImport data dari file ZIP
bills:readMembaca vendor bills
bills:createMembuat vendor bills
bills:approveApprove dan mark-paid vendor bills
bank-recon:readMembaca data rekonsiliasi bank
bank-recon:writeImport statement, matching, complete reconciliation
tax-export:readExport data pajak dan membaca data karyawan/payroll

OpenAPI Spec (API Discovery)

AI assistant membaca OpenAPI spec sebelum berinteraksi dengan API.

URL: GET /v3/api-docs (tanpa autentikasi)

Swagger UI: /swagger-ui.html

OpenAPI spec berisi:

  • paths -- Seluruh endpoint API
  • components.schemas -- Request/response schema
  • x-authentication -- Alur Device Flow lengkap, daftar scope
  • x-workflows -- 13 alur kerja end-to-end
  • x-csv-files -- 16 spesifikasi CSV untuk data import
  • x-industries -- Kode industri yang didukung
  • x-error-codes -- Kode error dan HTTP status

Pencatatan Transaksi via API

AI mencatat transaksi menggunakan template jurnal yang memiliki metadata semantik (keywords, merchant patterns, semantic description).

Alur Posting Langsung

  1. AI membaca daftar template: GET /api/templates
  2. AI mencocokkan input pengguna dengan template berdasarkan keyword, merchant, amount range
  3. AI mengirim transaksi: POST /api/transactions dengan templateId, amount, description, accountSlots
  4. Transaksi langsung berstatus POSTED

Alur Draft (Review Dulu)

  1. AI membuat draft: POST /api/drafts
  2. AI preview jurnal: GET /api/transactions/{id}/journal-preview
  3. Pengguna review dan approve: POST /api/transactions/{id}/post

Koreksi dan Pembatalan

  • Koreksi draft: PUT /api/transactions/{id} (hanya status DRAFT)
  • Void transaksi posted: POST /api/transactions/{id}/void (membuat reversing entries otomatis)
  • Purge transaksi void: DELETE /api/transactions/purge-voided

Dokumen Pendukung Transaksi

AI dapat mengupload dan mengelola dokumen pendukung (struk, invoice, bukti potong) per transaksi.

EndpointKeterangan
POST /api/transactions/{id}/documentsUpload dokumen (multipart/form-data)
GET /api/transactions/{id}/documentsDaftar dokumen
GET /api/transactions/{id}/documents/{docId}Download dokumen
DELETE /api/transactions/{id}/documents/{docId}Hapus dokumen

Dokumen dienkripsi at rest dengan unique key per dokumen.


Laporan Analisis AI

Daftar Laporan

Navigasi: Sidebar > Laporan > Analisis AI

URL: /analysis/reports

Permission: ANALYSIS_REPORT_VIEW

Tabel menampilkan laporan yang sudah dipublikasikan oleh AI. Setiap baris:

KolomKeterangan
JudulJudul laporan
TipeTipe laporan (sesuai industri)
PeriodePeriode yang dianalisis
Tanggal PublikasiKapan laporan dipublikasikan

Detail Laporan

URL: /analysis/reports/{id}

Halaman menampilkan 5 bagian terstruktur:

BagianKeterangan
Ringkasan EksekutifParagraf singkat kondisi keuangan
Indikator UtamaMetrik KPI dengan status warna (hijau/kuning/merah) dan perubahan vs periode sebelumnya
TemuanHal-hal yang perlu diperhatikan, dengan severity badge
RekomendasiLangkah yang disarankan, dengan prioritas
Penilaian RisikoRisiko yang teridentifikasi beserta mitigasi

Industri yang Didukung

Kode IndustriContoh Tipe Laporan
it-serviceutilization-review, project-profitability, receivables-aging
online-sellermarketplace-profitability, inventory-health, cash-conversion-cycle
coffee-shopfood-cost-review, labor-efficiency, menu-engineering
campustuition-collection, budget-realization, scholarship-impact

Industri perusahaan dikonfigurasi di Pengaturan > Perusahaan (field industry).


Data Import via API

AI dapat menginisialisasi data perusahaan via POST /api/data-import (scope: data:import).

Format: File ZIP berisi file CSV bernomor urut:

FileIsi
01_company_config.csvKonfigurasi perusahaan
02_chart_of_accounts.csvChart of Accounts
04_journal_templates.csvTemplate jurnal
05_journal_template_lines.csvBaris template jurnal

Import mengganti (truncate) data pada tabel yang memiliki CSV di dalam ZIP. Tabel tanpa CSV tidak terpengaruh.

Contoh seed data per industri tersedia di industry-seed/{it-service,online-seller,coffee-shop,campus}/seed-data/.


Selanjutnya: Pengelolaan Data

Manajemen Data

Referensi layar fitur pengelolaan data: ekspor data, impor data, data subjects (GDPR/UU PDP), dan audit log.


Ekspor Data

Halaman Ekspor

Navigasi: Sidebar > Pengaturan > Ekspor Data

URL: /settings/export

Halaman menampilkan statistik data yang akan diekspor:

  • Jumlah record per tabel (akun, template, transaksi, karyawan, dll)
  • Total keseluruhan record

Tombol:

  • Download Ekspor -- Mengunduh seluruh data perusahaan dalam format ZIP

Format Ekspor

File ZIP berisi file-file CSV dengan nama bernomor urut (dependency order):

FileIsi
01_company_config.csvKonfigurasi perusahaan
02_chart_of_accounts.csvChart of Accounts
04_journal_templates.csvTemplate jurnal
05_journal_template_lines.csvBaris template jurnal
18_transactions.csvTransaksi
...(file CSV lainnya sesuai data yang ada)

Nama file ZIP: export-YYYYMMDD.zip (berdasarkan tanggal download).

Data sensitif (NPWP, nomor rekening) tetap ditampilkan dalam bentuk asli untuk pengguna yang berwenang.


Impor Data

Halaman Impor

Navigasi: Sidebar > Pengaturan > Import Data

URL: /settings/import

Permission: DATA_IMPORT

Field

FieldWajibTipe InputKeterangan
FileYaFile uploadFile ZIP hasil ekspor

Validasi

  • File tidak boleh kosong
  • Format harus .zip
  • File harus berisi CSV dengan nama yang dikenali

Perilaku

  • Import mengganti (truncate) data pada tabel yang memiliki CSV di dalam ZIP
  • Tabel yang tidak memiliki CSV di dalam ZIP tidak terpengaruh
  • File CSV yang hanya berisi header (tanpa data) dilewati

Hasil

Setelah berhasil, halaman menampilkan pesan:

Import berhasil: X record data, Y dokumen dalam Z ms

Jika terjadi error, pesan error ditampilkan.


Audit Log

Halaman Audit Log

Navigasi: Sidebar > Pengaturan > Audit Log

URL: /settings/audit-log

Permission: Hanya ADMIN

Filter

FieldKeterangan
Tanggal (dari-sampai)Rentang waktu log
UserFilter berdasarkan pengguna
Tipe AktivitasFilter berdasarkan jenis event
EntityFilter berdasarkan entitas yang diakses

Tabel Log

KolomKeterangan
WaktuTimestamp event
UserUsername yang melakukan aksi
TipeJenis aktivitas (LOGIN, DATA_ACCESS, DATA_MODIFICATION, EXPORT, SECURITY_EVENT, API_CALL, SETTINGS_CHANGE)
DetailInformasi detail event

Aktivitas yang Dicatat

AktivitasContoh
LoginLogin/logout, failed attempts
Data AccessView data sensitif
Data ModificationCreate, Update, Delete
ExportDownload report, export data
Security EventsPassword change, role change
API CallRequest dari AI assistant (source, merchant, amount)
Settings ChangePerubahan konfigurasi, device token revoked

Retention

  • Audit log disimpan minimal 2 tahun
  • Log tidak bisa dihapus oleh pengguna biasa

Data Subjects (GDPR / UU PDP)

Halaman Data Subjects

Navigasi: Sidebar > Pengaturan > Data Subjects

URL: /settings/data-subjects

Halaman untuk mengelola data subject sesuai regulasi perlindungan data pribadi.

Fitur:

  • Register data subject (karyawan, klien)
  • Track consent
  • Manage data processing activities

Ekspor Data Subject (DSAR)

Data Subject Access Request -- Hak subjek data untuk mendapatkan salinan data pribadinya.

Langkah:

  1. Buka Pengaturan > Data Subjects
  2. Cari data subject
  3. Klik Export Data
  4. Sistem generate file (format JSON/PDF)
  5. Download dan deliver ke subject

Batas waktu pemenuhan:

  • GDPR: 30 hari
  • UU PDP: 3x24 jam

Halaman Privacy

Navigasi: Sidebar > Pengaturan > Privacy

URL: /settings/privacy

Konfigurasi:

  • Data retention period
  • Consent requirements
  • Data masking rules

Enkripsi Data

Field-Level Encryption

Data sensitif (PII) dienkripsi menggunakan AES-256-GCM:

  • NPWP karyawan
  • Nomor rekening bank
  • Alamat
  • Nomor BPJS
  • Nomor telepon

Document Encryption

Dokumen yang diupload (struk, invoice, bukti potong) dienkripsi:

  • Encryption at rest
  • Unique key per document
  • Backward compatible dengan dokumen lama

Data terenkripsi tidak bisa di-query langsung di database. Export data tetap menampilkan data asli untuk pengguna yang berwenang.


Dokumen Transaksi

Setiap transaksi dapat memiliki dokumen pendukung (struk, invoice, bukti potong).

Upload Dokumen

Di halaman detail transaksi, bagian Dokumen menampilkan daftar dokumen yang sudah diupload.

Tombol:

  • Upload -- Membuka dialog file picker (mendukung PDF dan gambar)

Daftar Dokumen

KolomKeterangan
Nama FileNama file asli
UkuranUkuran file
Tanggal UploadKapan file diupload

Aksi per dokumen:

  • Download -- Mengunduh file
  • Hapus -- Menghapus dokumen

Selanjutnya: Otorisasi Perangkat API

Otorisasi Perangkat API

Referensi layar fitur otorisasi perangkat: alur Device Flow, pengelolaan token, dan pencabutan akses.


Alur Device Authorization Flow

OAuth 2.0 Device Authorization Flow (RFC 8628) memungkinkan AI assistant atau perangkat lain mengakses API tanpa memasukkan password secara langsung.

AI Assistant                    Aplikasi                     Pengguna
     |                              |                            |
     |-- POST /api/device/code ---->|                            |
     |<-- deviceCode + userCode ----|                            |
     |                              |                            |
     |   "Buka URL ini,             |                            |
     |    masukkan kode: MBJN-KRFJ" |                            |
     |                              |<-- Buka /device -----------|
     |                              |<-- Login + masukkan kode --|
     |                              |<-- Klik Otorisasi ---------|
     |                              |                            |
     |-- POST /api/device/token --->|                            |
     |<-- accessToken --------------|                            |
     |                              |                            |
     |-- GET /api/... (Bearer) ---->|                            |

Halaman Otorisasi (Pengguna)

URL: /device

Halaman ini dibuka oleh pengguna di browser untuk mengotorisasi perangkat.

Field

FieldWajibTipe InputKeterangan
UsernameYaTextUsername login
PasswordYaPasswordPassword login
Kode PerangkatYaTextKode yang ditampilkan AI (contoh: MBJN-KRFJ)
Nama PerangkatTidakTextNama deskriptif, contoh: "Claude Code di MacBook"

Tombol:

  • Otorisasi Perangkat -- Menyetujui akses dan menerbitkan token

Perilaku

  • Kode perangkat berlaku 15 menit sejak diterbitkan
  • Kode hanya bisa digunakan sekali
  • Token yang diterbitkan berlaku 30 hari
  • Token memiliki seluruh scope yang tersedia

Pengelolaan Perangkat (Token Management)

Halaman Perangkat API

Navigasi: Sidebar > Master Data > Perangkat API

URL: /settings/devices

Halaman menampilkan daftar device token yang aktif milik pengguna yang sedang login.

Tabel Token

KolomKeterangan
PerangkatNama device (yang diisi saat otorisasi). Kosong jika tidak diisi
Client IDIdentifier aplikasi, contoh: claude-code
ScopeHak akses token, contoh: drafts:create,analysis:read,...
StatusAktif (badge hijau) atau Kedaluwarsa (badge abu-abu)
DibuatWaktu token diterbitkan
Terakhir DigunakanWaktu terakhir token dipakai untuk request API
IP TerakhirIP address terakhir yang menggunakan token

Tombol Aksi

TombolKeterangan
CabutMencabut satu token tertentu. Token yang dicabut tidak bisa digunakan lagi
Cabut SemuaMencabut seluruh token aktif milik pengguna sekaligus

Setelah token dicabut:

  • AI assistant yang menggunakan token tersebut mendapat HTTP 401 Unauthorized
  • Pengguna perlu melakukan Device Flow ulang untuk mendapatkan token baru
  • Event pencabutan dicatat di audit log

Admin View

Administrator dapat melihat dan mencabut token dari halaman detail pengguna:

Navigasi: Sidebar > Pengaturan > Pengguna > klik user > bagian Sesi Perangkat Aktif


API Endpoints

Device Code (Tanpa Autentikasi)

POST /api/device/code

Request:

{
  "clientId": "claude-code"
}

Response:

{
  "deviceCode": "a79d766e4972e61d...",
  "userCode": "MBJN-KRFJ",
  "verificationUri": "https://balaka.example.com/device",
  "verificationUriComplete": "https://balaka.example.com/device?code=MBJN-KRFJ",
  "expiresIn": 900,
  "interval": 5
}
FieldKeterangan
deviceCodeKode internal untuk polling token
userCodeKode yang harus dimasukkan pengguna
verificationUriURL halaman otorisasi
verificationUriCompleteURL dengan kode sudah terisi
expiresInMasa berlaku kode dalam detik (900 = 15 menit)
intervalInterval polling dalam detik

Token Polling (Tanpa Autentikasi)

POST /api/device/token

Request:

{
  "deviceCode": "a79d766e4972e61d..."
}

Response (berhasil):

{
  "accessToken": "15d07ef9030cba7b...",
  "tokenType": "Bearer",
  "expiresIn": 2592000,
  "scope": "drafts:create,drafts:approve,..."
}
FieldKeterangan
accessTokenToken untuk autentikasi API
tokenTypeSelalu Bearer
expiresInMasa berlaku token dalam detik (2592000 = 30 hari)
scopeDaftar scope yang diberikan

Response (belum diotorisasi):

{
  "error": "authorization_pending",
  "errorDescription": "The authorization request is still pending"
}

Response (kode kedaluwarsa):

{
  "error": "expired_token",
  "errorDescription": "Device code has expired"
}

Scope Reference

ScopeKeterangan
drafts:createMembuat dan mengedit draft transaksi
drafts:approveApprove/reject draft
drafts:readMembaca draft
analysis:readMembaca laporan keuangan (snapshot, trial balance, neraca, dll)
analysis:writeMempublikasikan laporan analisis AI
transactions:postPosting, koreksi, void, purge transaksi
data:importImport data dari file ZIP
bills:readMembaca tagihan vendor
bills:createMembuat tagihan vendor baru
bills:approveApprove dan mark-paid tagihan vendor
bank-recon:readMembaca data rekonsiliasi bank
bank-recon:writeImport statement, matching, complete reconciliation
tax-export:readExport data pajak, membaca data karyawan/payroll

Request tanpa scope yang sesuai mendapat HTTP 403 Forbidden.


Kembali ke: Rekonsiliasi Bank