Product Requirements Document

Sistem Keuangan Santri Latee
Nama SistemSistem Keuangan Santri Latee (Pondok Pesantren Annuqayah)
Versi Dokumen1.1
Tanggal20 Juli 2026
StatusDokumentasi Pasca-Implementasi (Retroaktif) - Baseline Sistem Berjalan
CakupanAplikasi Web (Laravel 13 + Livewire) & Aplikasi Mobile Wali (Flutter)
Disusun olehTim Pengembang Sistem

Daftar Isi

Riwayat Perubahan Dokumen
v1.014 Jul 2026Baseline awal (retroaktif) - seluruh modul inti web & mobile hingga saat itu.
v1.120 Jul 2026Koreksi Bab 4.2 (modul kantin ternyata sudah berjalan lewat scan QR mobile, bukan "belum dibangun"); menambahkan dokumentasi fitur yang sebelumnya belum tercatat - Unit Usaha/Kantin, PIN transaksi, Transfer antar santri, Notifikasi push (FCM), dan Banner beranda; memperbarui deskripsi keamanan sesi mobile (penguncian sesi kini langsung saat aplikasi diminimalkan, bukan menunggu 5 menit) dan menghapus catatan `url_launcher` tidak terpakai (kini dipakai fitur tautan Banner); melengkapi Lampiran A & B dengan rute/endpoint yang sebelumnya terlewat.
v1.220 Jul 2026Menambahkan Kwitansi Resmi bernomor (menggantikan struk informal untuk pembayaran tagihan & kantin) dan Kebijakan Belanja Kantin (batas harian per santri, mirip kebijakan penarikan tunai).
1Ringkasan Eksekutif
2Latar Belakang & Rumusan Masalah
3Tujuan & Sasaran
4Ruang Lingkup
5Pengguna & Peran
6Arsitektur Sistem
7Kebutuhan Fungsional
8Aplikasi Mobile Wali
9Kebutuhan Non-Fungsional
10Model Data
11Alur Pengguna Utama
12Integrasi Eksternal - Midtrans
13Keamanan
14Keterbatasan & Utang Teknis Diketahui
15Metrik Keberhasilan
16Rencana Pengembangan Lanjutan
17Glosarium
ALampiran A - Peta Rute Aplikasi Web
BLampiran B - Daftar Endpoint API Mobile

1. Ringkasan Eksekutif

Sistem Keuangan Santri Latee adalah sistem informasi manajemen keuangan santri untuk Pondok Pesantren Annuqayah, dibangun sebagai aplikasi web (Laravel 13 + Livewire 4) dengan aplikasi pendamping mobile (Flutter) khusus untuk wali santri. Sistem ini menggantikan proses pencatatan tagihan, pembayaran, top up saldo, dan penarikan tunai yang sebelumnya dilakukan secara manual/tunai penuh, dengan model dompet digital (saldo) per santri yang tercatat dalam buku besar (ledger) yang tidak dapat diubah, terintegrasi dengan payment gateway Midtrans untuk pembayaran non-tunai, serta kios swalayan (self-service) berbasis kartu RFID dan sidik jari untuk penarikan tunai tanpa perlu antre ke petugas.

Dokumen ini disusun secara retroaktif - sistem yang dideskripsikan di sini sudah dibangun dan berjalan, bukan rencana ke depan. Tujuannya adalah menyediakan dokumentasi kebutuhan produk yang lengkap dan terstruktur sebagai baseline resmi sebelum pengembangan/penyempurnaan lanjutan dilakukan, sehingga setiap perubahan berikutnya punya rujukan yang jelas tentang apa yang sudah ada, mengapa dibangun demikian, dan batasan yang berlaku.

Sistem melayani 6 peran pengguna (admin, bendahara, pengasuh, wali, santri, dan developer/dev-only) melalui portal web yang berbeda sesuai peran, ditambah aplikasi mobile khusus wali. Fitur inti mencakup manajemen data santri & keluarga, kartu santri digital (RFID), tagihan otomatis dengan dukungan cicilan dan diskon, top up saldo & pembayaran tagihan via Midtrans, penarikan tunai (baik lewat admin maupun swalayan di kios), manajemen perangkat kios, serta laporan keuangan.

2. Latar Belakang & Rumusan Masalah

Sebelum sistem ini dibangun, pengelolaan keuangan santri di pesantren pada umumnya menghadapi beberapa masalah klasik yang menjadi latar belakang pembangunan sistem ini:

Rumusan masalah yang dijawab oleh sistem ini: bagaimana pesantren dapat mengelola dana santri secara digital, aman, transparan bagi wali, dan efisien secara operasional bagi petugas - tanpa menghilangkan kontrol dan jejak audit yang dibutuhkan sebuah institusi keuangan?

3. Tujuan & Sasaran

3.1 Tujuan Utama

3.2 Sasaran Terukur

4. Ruang Lingkup

4.1 Dalam Lingkup (Sudah Dibangun)

4.2 Di Luar Lingkup (Belum Dibangun / Sengaja Ditunda)

5. Pengguna & Peran

Sistem menerapkan kontrol akses berbasis peran (role-based access control) menggunakan paket spatie/laravel-permission, dengan 6 peran berikut:

PeranDeskripsi & Tanggung JawabAkses Utama
AdminPengelola penuh sistem - satu-satunya peran dengan akses ke data kesantrian (santri/keluarga/kartu), manajemen pengguna, lembaga, perangkat kios, pengaturan aplikasi/Midtrans, dan backup/restore.Seluruh modul
BendaharaPetugas keuangan - dibatasi hanya ke modul keuangan murni (tagihan, transaksi, top up, penarikan, laporan keuangan). Tidak memiliki akses ke data kesantrian maupun pengaturan sistem, sesuai prinsip pemisahan tugas (segregation of duties).Grup "Keuangan" saja
PengasuhPengawasan/oversight - dashboard ringkasan dan laporan santri (saldo, tunggakan) bersifat baca-saja, tanpa aksi pengelolaan.Dashboard & laporan (read-only)
WaliOrang tua/wali santri - dapat memantau saldo, membayar tagihan (dari saldo atau Midtrans), top up saldo, dan melihat riwayat transaksi anaknya. Satu akun wali dapat terhubung ke lebih dari satu santri (fitur ganti-santri aktif).Portal web wali + aplikasi mobile
SantriSantri itu sendiri - akses terbatas untuk melihat saldo & tagihan sendiri, serta mengajukan penarikan tunai lewat jalur formal (unggah surat keterangan + review admin) jika di luar kebijakan penarikan mandiri di kios.Portal web santri (read-mostly)
DevDokumentasi internal untuk pengembang - panduan instalasi, skema database, dan dokumentasi API (bukan peran operasional harian).Halaman dokumentasi internal

Catatan: kios (/kios/{kode_device}) tidak memerlukan login sama sekali - identitas santri diverifikasi lewat kartu RFID + sidik jari secara langsung di lokasi, bukan lewat akun pengguna.

6. Arsitektur Sistem

6.1 Komponen Utama

KomponenTeknologiPeran
Aplikasi WebLaravel 13, Livewire 4, Tailwind CSS, MySQLPortal utama untuk seluruh peran (admin s.d. santri), sumber kebenaran (source of truth) data & logika bisnis
Aplikasi Mobile WaliFlutter (Dart), target Android & iOSPendamping portal web khusus wali, mengonsumsi REST API yang sama dengan yang melayani web
API WaliLaravel (Sanctum token auth), /api/wali/*Jembatan REST antara aplikasi mobile dan backend - dipakai eksklusif oleh aplikasi mobile
API KiosLaravel (Sanctum token auth), /api/kiosk/*Disiapkan untuk integrasi perangkat kios native/tertanam di masa depan; jalur kios yang aktif saat ini berbasis web (/kios/{device}), bukan lewat jalur API ini
Payment GatewayMidtrans (Snap & Core API)Pemrosesan pembayaran non-tunai (top up saldo & pembayaran tagihan langsung)
Kios FisikBrowser mode kios + RFID reader (HID) + terminal sidik jari (Wiegand)Titik layanan swalayan tanpa login untuk cek saldo & penarikan tunai mandiri

6.2 Prinsip Arsitektur Kunci

7. Kebutuhan Fungsional (Aplikasi Web)

7.1 Manajemen Data Santri & Keluarga Selesai

7.2 Tagihan & Pembayaran Selesai

7.3 Saldo & Dompet Digital Selesai

7.4 Top Up & Integrasi Midtrans Selesai

7.5 Penarikan Tunai Selesai

7.6 Manajemen Perangkat Kios Selesai

7.7 Laporan Keuangan Selesai

7.8 Manajemen Pengguna & Pengaturan Sistem Selesai

7.9 Unit Usaha (Kantin/Koperasi) Selesai

7.9.1 Kebijakan Belanja Kantin (Batas Harian) Selesai

Sama seperti Kebijakan Penarikan (7.5) melindungi berapa banyak uang tunai yang bisa ditarik santri per hari, Kebijakan Belanja Kantin melindungi berapa banyak yang bisa dibelanjakan santri di kantin per hari - keduanya menjawab kekhawatiran wali yang sama: "uang jajan" semestinya punya batas harian, terlepas dari berapa total saldo yang tersedia (yang sebagian mungkin dititipkan untuk SPP, bukan untuk jajan).

7.10 Banner Beranda Selesai

7.11 Kwitansi Resmi Selesai

Menggantikan struk informal (`InvoiceService`, nomor referensi diturunkan ulang dari id record setiap kali dicetak, tidak pernah disimpan) untuk dua jenis transaksi yang paling sering butuh bukti formal: pembayaran tagihan dan pembayaran kantin.

8. Aplikasi Mobile Wali

Aplikasi Flutter (nama paket wali_santri, target Android & iOS) yang menjadi pendamping portal web khusus wali, mengonsumsi API yang sama (`/api/wali/*`). Berikut kebutuhan fungsional yang sudah diimplementasikan:

8.1 Fitur Inti

8.2 Keamanan Sesi

8.3 Pembaruan Antarmuka (Redesign)

Tampilan aplikasi mobile disegarkan mengikuti karakteristik brand yang sudah ada (teal `#0F766E`, latar abu muda `#F7F8FA`), mengadopsi pola tata letak dari referensi aplikasi fintech modern tanpa mengambil alih palet warnanya:

8.4 Keterbatasan yang Diketahui pada Mobile

9. Kebutuhan Non-Fungsional

KategoriKebutuhan
KeamananKontrol akses berbasis peran; buku besar transaksi tidak dapat diubah/dihapus; verifikasi signature webhook Midtrans; pembatasan laju (rate limiting) pada kios publik; validasi kepemilikan santri pada setiap panggilan API mobile (`authorizedSantri`); autentikasi berbasis token (Sanctum) untuk API.
KetersediaanSinkronisasi status Midtrans manual sebagai jalur cadangan bila webhook gagal/terlambat; backup basis data dapat dijadwalkan/dibuat manual dari aplikasi.
AuditabilitySetiap transaksi tercatat dengan saldo sebelum/sesudah; setiap penarikan mandiri di kios tercatat dengan lokasi/perangkat asal; petugas jaga dan status perangkat tercatat untuk keperluan investigasi bila ada gangguan.
UsabilityAntarmuka berbahasa Indonesia penuh; alur pembayaran wali dirancang minim langkah; kios menggunakan bahasa visual besar & sederhana untuk santri dari berbagai usia.
LocalizationSeluruh nominal ditampilkan dalam format Rupiah (Rp) dengan pemisah ribuan; tanggal/waktu dalam format Indonesia (WIB).
Portabilitas MobileAplikasi mobile ditargetkan untuk Android & iOS dari satu basis kode Flutter yang sama.

10. Model Data

Entitas utama dalam sistem (nama model Laravel):

EntitasDeskripsi
SantriData induk santri
KeluargaData keluarga/orang tua santri
WaliSantriTabel penghubung akun wali ↔ santri (banyak-ke-banyak)
UserAkun pengguna lintas seluruh peran
KartuSantriKartu RFID santri (UID, status aktif/nonaktif/hilang/diblokir)
SaldoSantriSaldo dompet digital per santri
TransaksiBaris buku besar (ledger) - tidak dapat diubah/dihapus setelah dibuat
JenisTagihanMaster jenis tagihan (termasuk flag boleh dicicil)
PeriodeMaster periode tagihan
TagihanTagihan per santri per periode
TagihanPembayaranBaris pembayaran terhadap satu tagihan (mendukung banyak baris untuk cicilan), ditandai sumber pembayarannya
KategoriDiskonKategori diskon santri
TopupWaliTransaksi Midtrans (top up saldo maupun pembayaran tagihan langsung)
PenarikanRequestPengajuan penarikan tunai (formal maupun mandiri)
KebijakanPenarikanKebijakan jam operasional & limit harian penarikan
DeviceRegistri perangkat kios fisik (termasuk petugas jaga)
LembagaData induk unit/lembaga pondok
SettingPengaturan sistem berbasis key-value
UnitUsahaData induk unit usaha (kantin/koperasi), termasuk saldo & rekening pencairan
UnitUsahaTransaksiBaris buku besar (ledger) unit usaha - tidak dapat diubah/dihapus setelah dibuat
UnitUsahaPenarikanPengajuan pencairan saldo unit usaha oleh pengelola
UnitUsahaRekeningPerubahanPengajuan ganti rekening bank tujuan pencairan unit usaha
WaliDeviceTokenToken perangkat (FCM) wali untuk notifikasi push, satu wali bisa punya banyak perangkat terdaftar
BannerBanner pengumuman/promosi carousel di beranda aplikasi mobile
KebijakanKantinBatas belanja kantin harian per santri (opsional per lembaga)
KwitansiKwitansi resmi bernomor permanen untuk pembayaran tagihan & kantin

11. Alur Pengguna Utama

11.1 Wali Membayar Tagihan (Cicilan, dari Saldo)

  1. Wali membuka daftar tagihan anaknya (web/mobile), memilih tagihan yang berstatus belum lunas/sebagian.
  2. Jika jenis tagihan mengizinkan cicilan, wali dapat memasukkan nominal kurang dari sisa tagihan (divalidasi antara Rp 1 s.d. sisa tagihan).
  3. Sistem menampilkan rincian: nominal yang akan dibayar, sisa tagihan setelahnya, saldo santri setelah dibayar - wali mengonfirmasi secara eksplisit.
  4. Sistem memvalidasi saldo mencukupi dan tidak akan membuat saldo turun di bawah batas minimum; jika lolos, saldo didebit dan tagihan diperbarui (`sebagian` atau `lunas` tergantung apakah sudah menutup penuh).
  5. Transaksi tercatat di buku besar, dan riwayat transaksi menampilkan progres terbayar/sisa selama tagihan masih berstatus sebagian.

11.2 Santri Melakukan Penarikan Tunai Mandiri di Kios

  1. Santri menempelkan kartu RFID ke mesin kios (harus bertipe kios penarikan & berstatus aktif).
  2. Sistem menampilkan saldo & sisa limit penarikan harian.
  3. Santri memasukkan nominal - jika sesuai kebijakan (saldo cukup, dalam jam operasional, dalam limit harian), sistem lanjut ke verifikasi sidik jari.
  4. Santri menempelkan jari ke sensor - jika cocok dengan data yang terdaftar pada kartu tersebut, saldo didebit dan uang tunai keluar, tanpa perlu persetujuan petugas.
  5. Jika nominal di luar kebijakan, atau verifikasi sidik jari gagal 3 kali berturut-turut, santri diarahkan untuk login dan mengajukan lewat jalur formal (unggah surat keterangan, review admin).

11.3 Wali Top Up Saldo via Midtrans (Mobile)

  1. Wali membuka menu Top Up, memasukkan nominal, memilih metode (VA Bank atau QRIS).
  2. Aplikasi menampilkan nomor Virtual Account atau kode QR langsung di layar.
  3. Wali menyelesaikan pembayaran lewat aplikasi bank/e-wallet miliknya.
  4. Sistem menerima notifikasi (webhook) dari Midtrans dan otomatis mengkredit 100% nominal ke saldo santri; wali juga dapat menekan "Cek Status Sekarang" untuk mempercepat sinkronisasi jika webhook belum sampai.

12. Integrasi Eksternal - Midtrans

Midtrans digunakan sebagai satu-satunya payment gateway, dengan dua mode integrasi:

Setiap transaksi Midtrans diberi prefix Order ID untuk membedakan tujuannya di dashboard Midtrans: TOPUP-... untuk top up saldo biasa, TAGIHAN-... untuk pembayaran tagihan langsung. Notifikasi (webhook) diverifikasi keasliannya lewat signature SHA-512 sebelum diproses, dan penanganannya bersifat idempoten (notifikasi duplikat untuk transaksi yang statusnya sudah final akan diabaikan).

13. Keamanan

14. Keterbatasan & Utang Teknis Diketahui

Bagian ini didokumentasikan secara jujur agar tim yang melanjutkan pengembangan tidak perlu menemukan ulang batasan yang sudah diketahui:

15. Metrik Keberhasilan

Karena dokumen ini disusun retroaktif, metrik berikut diusulkan sebagai baseline untuk mengukur efektivitas sistem ke depan, bukan hasil yang sudah diukur:

16. Rencana Pengembangan Lanjutan

17. Glosarium

IstilahArti
SantriSiswa/murid yang tinggal & belajar di pondok pesantren
WaliOrang tua/wali sah santri, pengguna utama aplikasi mobile
PengasuhPengasuh/pimpinan pondok dengan akses pengawasan (oversight)
BendaharaPetugas keuangan pondok
TagihanKewajiban pembayaran santri (SPP, uang pangkal, dsb.)
CicilanPembayaran tagihan secara bertahap/sebagian, bukan sekaligus lunas
SaldoDompet digital santri tempat dana top up wali tersimpan
Top UpPengisian saldo santri oleh wali
Ledger / Buku BesarCatatan seluruh pergerakan saldo yang tidak dapat diubah/dihapus
KiosMesin swalayan berbasis kartu RFID + sidik jari untuk cek saldo/penarikan mandiri
Kartu SantriKartu identitas fisik berbasis RFID milik santri
MidtransPenyedia jasa payment gateway pihak ketiga yang diintegrasikan
SnapMetode integrasi Midtrans berbasis halaman pembayaran hosted (redirect)
Core APIMetode integrasi Midtrans berbasis panggilan langsung (VA/QRIS ditampilkan in-app)
Kebijakan PenarikanAturan jam operasional & limit harian penarikan tunai
Petugas JagaStaf yang menandai dirinya bertanggung jawab atas satu mesin kios

Lampiran A - Peta Rute Aplikasi Web (Ringkas)

AreaContoh RutePeran
Publik/login, /kios/{device}, /midtrans/webhook, /kwitansi/{kwitansi}/pdf (perlu tanda tangan URL)Tanpa login
Admin + Bendahara/admin, /admin/tagihan, /admin/tagihan/generate, /admin/transaksi, /admin/topup, /admin/penarikan, /admin/laporan-keuangan, /admin/leger-kas-pondokadmin, bendahara
Admin - Data Kesantrian/admin/santri, /admin/keluarga, /admin/wali, /admin/kartuadmin
Admin - Kantin/admin/kantin, /admin/kantin/penarikan, /admin/kantin/rekening, /admin/kantin/ledger, /admin/kantin/kebijakanadmin
Admin - Sistem/admin/users, /admin/lembaga, /admin/perangkat, /admin/banner, /admin/pengaturan/aplikasi, /admin/pengaturan/midtrans, /admin/backupadmin
Admin + Bendahara - Kwitansi/admin/kwitansi/{kwitansi}/cetakadmin, bendahara
Pengasuh/pengasuh, /pengasuh/laporan-santripengasuh
Wali/wali, /wali/saldo, /wali/tagihan, /wali/topupwali
Santri/santri, /santri/saldo, /santri/tagihan, /santri/penarikansantri
Dev/dev/tentang, /dev/instalasi, /dev/skema-database, /dev/api/wali, /dev/api/kioskdev

Lampiran B - Daftar Endpoint API Mobile (/api/wali/*)

EndpointFungsi
GET /wali/app-infoBranding aplikasi (nama, logo) - publik, tanpa token
GET /wali/bannersBanner carousel Home yang aktif - publik, tanpa token
POST /wali/loginLogin & penerbitan token akses
POST /wali/logoutLogout & pencabutan token
GET /wali/meInfo akun wali yang sedang login
PUT /wali/profilePerbarui profil (nama/email/telepon)
POST /wali/passwordGanti kata sandi
GET /wali/pin/statusCek apakah wali sudah punya PIN transaksi
POST /wali/pin/confirm-passwordVerifikasi kata sandi (langkah 1 pengaturan PIN)
POST /wali/pinAtur/ganti PIN transaksi (langkah 2)
GET /wali/anakDaftar santri yang terhubung ke wali
GET /wali/anak/{santri}Detail satu santri
GET /wali/anak/{santri}/saldoSaldo santri
GET /wali/anak/{santri}/transaksiRiwayat transaksi santri
GET /wali/anak/{santri}/tagihanDaftar tagihan santri
POST /wali/anak/{santri}/tagihan/{tagihan}/bayarBayar tagihan dari saldo (mendukung cicilan, butuh PIN)
POST /wali/anak/{santri}/tagihan/{tagihan}/topup/coreBayar tagihan langsung via Midtrans Core API
POST /wali/anak/{santri}/topupTop up saldo via Midtrans Snap
POST /wali/anak/{santri}/topup/coreTop up saldo via Midtrans Core API
GET /wali/topup/pengaturanAmbil batas saldo minimum
GET /wali/topup/{topup}Status transaksi top up/pembayaran
POST /wali/topup/{topup}/syncSinkronisasi status manual dari Midtrans
GET /wali/unit-usaha/{kode}Detail unit usaha dari hasil scan QR
GET /wali/kwitansi/{kwitansi}Tautan PDF bertanda tangan (15 menit) untuk kwitansi resmi
POST /wali/anak/{santri}/bayar-kantinBayar kantin/unit usaha dari saldo (butuh PIN)
GET /wali/anak/{santri}/saudaraDaftar saudara (satu Kartu Keluarga) untuk tujuan transfer
POST /wali/anak/{santri}/transferTransfer saldo ke santri lain, satu Kartu Keluarga (butuh PIN)
POST /wali/device-tokenDaftarkan token perangkat (FCM) untuk notifikasi push
DELETE /wali/device-tokenHapus token perangkat (mis. saat logout)