Lewati ke isi

UAT: Domain Keuangan & SPP

Status: 🟢 Production Ready
Domain: Keuangan, SPP, Payment Gateway, BOS, Budget/RKAS
UAT Version: 2026.03.26
Related: SSOT Domain Keuangan


1. Executive Summary

Domain keuangan Scola telah mencapai 100% production-ready dengan semua fitur inti untuk manajemen sekolah Indonesia yang telah diverifikasi melalui audit komprehensif.

Production-Ready Checklist

Komponen Status Verifikasi
Payment Gateway (Midtrans/Xendit) ✅ Production Callback signature verified, auto-reconcile tested
BOS Fund Tracking ✅ Production API tested, workflow validated
Budget/RKAS Workflow ✅ Production Multi-level approval tested
Multi-Year Comparison ✅ Production Report accuracy verified
WhatsApp Notification ✅ Production WA Business API integrated
Security & ACL ✅ Production Role-based access verified

2. UAT Scenarios by Role

2.1 Parent/Orang Tua (SPP & Payment Gateway)

UC-001: Melihat Tagihan SPP

Preconditions: - Parent login dengan akun aktif - Student memiliki fee schedule aktif

Steps: 1. Login sebagai Parent 2. Navigate ke menu "Tagihan" atau "SPP" 3. Lihat daftar tagihan dengan status: - Belum Lunas (overdue/upcoming) - Lunas (paid)

Expected Result: - Tagihan muncul dengan: No. Invoice, Jumlah, Jatuh Tempo, Status - Filter per semester/tahun ajaran berfungsi - Detail tagihan menampilkan breakdown komponen

UC-002: Pembayaran via Payment Gateway (VA BCA)

Preconditions: - Tagihan SPP tersedia dan belum dibayar - Payment gateway terkonfigurasi (Midtrans/Xendit)

Steps: 1. Klik "Bayar" pada tagihan 2. Pilih metode pembayaran "Virtual Account BCA" 3. Klik "Buat Pembayaran" 4. Catat nomor VA yang muncul 5. Lakukan transfer ke nomor VA via m-banking/ATM 6. Tunggu callback (atau klik "Cek Status")

Expected Result: - VA number ter-generate (contoh: 7777xxxxxxxx) - Status berubah: Draft → Pending - Setelah transfer, status otomatis berubah: Pending → Paid - Invoice ter-marked sebagai Paid - Payment record tercipta di backend - WhatsApp notification terkirim (jika dikonfigurasi)

Edge Cases: | Skenario | Expected | |----------|----------| | VA expired (24 jam) | Status Expired, dapat regenerate VA baru | | Pembayaran kurang | Tetap pending, sisa dapat dibayar lagi | | Double payment | Sisa masuk ke deposit/credit |

UC-003: Pembayaran via QRIS

Steps: 1. Pilih metode "QRIS" 2. Scan QR code dengan aplikasi e-wallet 3. Konfirmasi pembayaran di e-wallet 4. Tunggu konfirmasi

Expected Result: - QRIS string/URL ter-generate - Setelah scan & bayar, status otomatis Paid - QRIS expired setelah 30 menit


2.2 Bendahara/Treasurer

UC-004: Input Alokasi BOS

Preconditions: - User role: Treasurer/Admin - Data komponen BOS sudah di-setup

Steps: 1. Navigate ke /accounting/bos-fund 2. Klik "Tambah Alokasi" 3. Isi form: - Tahun Ajaran: 2025/2026 - Periode: Semester 1 - Jumlah Siswa: 500 - BOS per Siswa: 1.500.000 4. Alokasikan ke komponen: - Komponen A (Buku): Rp 300.000.000 - Komponen B (ATK): Rp 150.000.000 - ... 5. Klik "Simpan"

Expected Result: - Total BOS otomatis terhitung: Rp 750.000.000 - Status alokasi: Draft - Summary card ter-update - Detail per komponen tersimpan

UC-005: Workflow Approval BOS

Steps: 1. Buka alokasi dengan status "Draft" 2. Klik "Konfirmasi" - Status berubah: Draft → Confirmed 3. Klik "Setujui" - Status berubah: Confirmed → Approved 4. (Opsional) Klik "Selesai" ketika realisasi selesai

Expected Result: - Status tracking berfungsi - Tidak bisa edit setelah status Approved/Done - History perubahan tercatat di chatter

UC-006: Melihat Realisasi BOS

Steps: 1. Buka detail alokasi BOS 2. Lihat tabel "Alokasi per Komponen" 3. Periksa kolom: - Anggaran (allocated_amount) - Realisasi (realized_amount - auto dari journal entries) - Selisih (variance)

Expected Result: - Realisasi otomatis ter-update dari account.move.line - Persentase realisasi terhitung - Variance highlighting (merah jika over budget)


2.3 Admin/Finance Manager

UC-007: Pengaturan Payment Gateway

Steps: 1. Navigate ke Payment Config 2. Pilih provider: Midtrans/Xendit 3. Isi credentials: - Server Key (Midtrans) - Client Key (Midtrans) - API Key (Xendit) - Callback Token (Xendit) 4. Pilih environment: Sandbox/Production 5. Enable payment methods yang diinginkan 6. Set expiry VA (default 24 jam) dan QRIS (30 menit)

Expected Result: - Callback URL auto-generate: {base_url}/payment/callback/{provider} - Config dapat di-activate/deactivate - Validasi credentials lengkap

UC-008: Setup Budget RKAS

Steps: 1. Navigate ke /accounting/budget 2. Klik "New Budget" 3. Isi: - Budget Name: RKAS 2025/2026 - Fiscal Year: 2025/2026 - Period: 01/07/2025 - 30/06/2026 - Department: TU/Academic/etc - Approvers: [Kepala Sekolah, Bendahara] 4. Tambah budget lines: - Account: Beban ATK, Planned: Rp 50.000.000 - Account: Beban Listrik, Planned: Rp 30.000.000 5. Submit for approval

Expected Result: - Budget state: Draft → Submitted - Approval requests ter-create untuk approvers - Email notifikasi terkirim ke approvers

UC-009: Budget Approval Workflow

Steps: 1. Approver login 2. Lihat notifikasi "Budget Pending Approval" 3. Buka budget, review lines 4. Klik "Approve" atau "Reject" 5. Jika reject, isi alasan

Expected Result: - Sequential approval berfungsi - Budget state: Submitted → Approved (setelah semua approver approve) - Reject akan set status Rejected dengan alasan - Email notifikasi status ke creator

UC-010: Monitoring Budget vs Actual

Steps: 1. Buka approved/active budget 2. Lihat computed fields: - Total Planned - Total Actual (dari journal entries) - Total Committed (PO drafts) - Total Available - Total Variance 3. Review variance percentage

Expected Result: - Actual auto-compute dari account.move.line posted - Available = Planned - Actual - Committed - Variance highlighting per line - Alert threshold dapat di-set (contoh: alert at 80%)


2.4 Kepala Sekolah / Principal

UC-011: Multi-Year Financial Comparison

Steps: 1. Navigate ke /accounting/reports/multi-year 2. Pilih jenis laporan: Pendapatan/Pengeluaran/Neraca 3. Input tahun: 2024/2025, 2025/2026 4. Klik "Bandingkan"

Expected Result: - Summary card per tahun dengan total - Year-over-Year difference & percentage - Detail table per akun dengan: - Akun (kode + nama) - Amount Tahun 1 - Amount Tahun 2 - Selisih (highlighted) - Export ke Excel tersedia

UC-012: Dashboard Finance Overview

Steps: 1. Login sebagai Principal 2. Navigate ke Finance Dashboard 3. Review widgets: - SPP collection summary - Outstanding receivables - BOS fund status - Budget realization

Expected Result: - Real-time data - Filter per tahun ajaran - Drill-down ke detail reports


2.5 Yayasan/Foundation

UC-013: Foundation Financial Reports

Steps: 1. Navigate ke Yayasan Dashboard 2. View consolidated reports: - Profit & Loss (multiple schools) - Balance Sheet - Cash Flow - Budget Realization

Expected Result: - Multi-school consolidation (jika setup) - Compare per school - Export PDF/Excel


3. Security & Access Control UAT

3.1 Role-Based Access Matrix

Feature Parent Student Teacher Treasurer Admin Principal Foundation
View own invoices
Pay via gateway
View all invoices ✅ (homeroom)
Manage BOS
Approve budget
View financial reports
Multi-year comparison
Payment gateway config

3.2 Security Test Cases

SEC-001: Access Denied - Parent view other invoice

Steps: 1. Login sebagai Parent A 2. Coba access invoice ID milik Student lain

Expected Result: - Error: "Access denied" atau "Invoice not found" - 403 Forbidden response

SEC-002: Access Denied - Non-finance role access BOS API

Steps: 1. Login sebagai Teacher/Student 2. Coba access /api/v1/bos/allocations

Expected Result: - Response: {"success": false, "error": "Access denied"} - HTTP 403

SEC-003: Callback Security - Invalid Midtrans Signature

Steps: 1. Send POST ke /payment/callback/midtrans dengan: - Valid order_id - Invalid signature_key

Expected Result: - Response: {"status": "error", "message": "Invalid signature"} - Transaction state tidak berubah - Error logged

SEC-004: Callback Security - Missing Xendit Token

Steps: 1. Send POST ke /payment/callback/xendit tanpa header x-callback-token

Expected Result: - Response: {"status": "error", "message": "Missing callback token"} - HTTP 400


4. Performance & Load Testing

4.1 Load Scenarios

Scenario Load Expected Response Time
Payment gateway callback 100 req/min < 500ms
BOS allocation list 50 concurrent < 1s
Multi-year report 10 concurrent < 3s
Invoice list (parent) 100 concurrent < 500ms

4.2 Concurrency Tests

PERF-001: Simultaneous Payment Creation

Steps: 1. 10 parent create payment untuk invoice yang sama secara bersamaan

Expected Result: - Hanya 1 VA yang aktif per invoice - 9 request lain dapat error atau VA berbeda - Tidak ada data corruption

PERF-002: Concurrent Budget Update

Steps: 1. User A dan User B membuka budget yang sama 2. User A update budget line 3. User B update budget line yang sama

Expected Result: - Odoo concurrency handling berfungsi - Stale data warning atau optimistic locking


5. Integration Testing

5.1 Payment Gateway End-to-End

[Parent FE] --create--> [Backend API] --API call--> [Midtrans/Xendit]
                                              |
[Callback Handler] <--callback---------------+
       |
       v
[Auto Reconcile] --> [account.payment] --> [Invoice: Paid]
       |
       v
[WhatsApp Notification] --> [Parent Phone]

Integration Points: 1. Midtrans/Xendit API connectivity 2. Callback endpoint reachable dari internet 3. Signature verification berfungsi 4. Auto-reconcile journal entries 5. WhatsApp service integration (if enabled)

5.2 BOS Realization Integration

[BOS Allocation Line] <--linked-- [account.move.line]
       |
       v
[Auto Compute Realized] (computed field)
       |
       v
[Variance Calculation]

6. Regression Testing

6.1 Critical Path Tests

Module Test Case Frequency
Payment Create VA → Pay → Callback → Reconcile Per release
BOS Create → Confirm → Approve → Realisasi Per release
Budget Create → Submit → Approve → Monitor Per release
Reports Multi-year comparison accuracy Per release

6.2 Known Limitations & Workarounds

Limitation Workaround
WhatsApp requires external service Setup wa-web.js service atau gunakan provider WA Business API
Payment gateway sandbox beda behavior Testing menggunakan amount spesifik (contoh: 10,000 untuk simulate success di Midtrans)
BOS realization dari journal entries Pastikan semua transaksi BOS menggunakan account yang tepat dengan tag BOS

7. Sign-off Checklist

7.1 User Acceptance Sign-off

Role Name Date Signature
Parent Representative
Bendahara
Kepala Sekolah
Ketua Yayasan
IT Admin

7.2 Technical Sign-off

Component Tester Status Date
Payment Gateway ☐ Pass ☐ Fail
BOS Fund ☐ Pass ☐ Fail
Budget RKAS ☐ Pass ☐ Fail
Multi-Year Comparison ☐ Pass ☐ Fail
WhatsApp Notification ☐ Pass ☐ Fail
Security & ACL ☐ Pass ☐ Fail
Performance ☐ Pass ☐ Fail

8. Appendices

Appendix A: API Endpoints Reference

Endpoint Method Auth Description
/api/v1/payment/create POST User Create payment transaction
/api/v1/payment/status/<id> GET User Get transaction status
/api/v1/payment/methods GET User List available methods
/payment/callback/midtrans POST Public Midtrans callback
/payment/callback/xendit POST Public Xendit callback
/api/v1/bos/components GET User List BOS components
/api/v1/bos/allocations GET/POST User List/Create allocations
/api/v1/bos/allocations/<id> GET User Allocation detail
/api/v1/bos/allocations/<id>/confirm POST User Confirm allocation
/api/v1/bos/allocations/<id>/approve POST User Approve allocation
/api/v1/finance/comparison GET User Multi-year comparison

Appendix B: Test Data Requirements

# Sample BOS Components
bos_components = [
    {'code': '1', 'name': 'Pengembangan Kompetensi Peserta Didik'},
    {'code': '2', 'name': 'Tambahan Penghasilan Guru/PTT'},
    {'code': '3', 'name': 'Buku yang Direkomendasikan Kemdikbud'},
    # ... 13 komponen sesuai Juknis
]

# Sample Payment Gateway Config (Sandbox)
midtrans_config = {
    'server_key': 'SB-Mid-server-xxxxx',
    'client_key': 'SB-Mid-client-xxxxx',
    'environment': 'sandbox'
}

Appendix C: Troubleshooting Guide

Issue Possible Cause Solution
VA tidak ter-create Server key invalid Check Midtrans dashboard, regenerate key
Callback tidak terima URL not reachable Verify callback URL accessible via internet
Status stuck Pending Callback failed Manual cek status atau reconcile manual
WA notifikasi tidak kirim Service down Cek wa-web.js service atau WA API status
BOS realisasi 0 No journal entries Pastikan expense entries menggunakan akun BOS yang tepat

End of UAT Document