{
    "timestamp": "2026-10-25T05:12:27+00:00",
    "pass": 38,
    "fail": 0,
    "blocked": 0,
    "results": [
        {
            "id": "AUDIT-NZ-01",
            "phase": "Tahap 2",
            "title": "Laporan Laba Rugi Nonzero: Revenue & Expense akurat",
            "expected": "Rev >= 3jt, Exp >= 750rb, Net = Rev - Exp",
            "actual": "Rev: Rp 3.000.000, Exp: Rp 750.000, Net: Rp 2.250.000",
            "status": "PASS",
            "evidence": "Nonzero Profit & Loss Terverifikasi"
        },
        {
            "id": "AUDIT-NZ-02",
            "phase": "Tahap 2",
            "title": "Piutang\/Tagihan Belum Bayar TIDAK dihitung sebagai Pendapatan Kas",
            "expected": "Unpaid Rp1.5jt diabaikan dari Pendapatan Kas",
            "actual": "Tagihan Belum Bayar ID 223 tetap 'unpaid' dan tidak masuk buku kas",
            "status": "PASS",
            "evidence": "Prinsip Pengakuan Pendapatan Kas Kasri Terpenuhi"
        },
        {
            "id": "AUDIT-NZ-03",
            "phase": "Tahap 2",
            "title": "Filter Periode Tanggal Laba Rugi Berfungsi Presisi",
            "expected": "Periode lampau 2024 Rev = 0, Exp = 0",
            "actual": "Hasil 2024-01: Rev = 0, Exp = 0",
            "status": "PASS",
            "evidence": "Filter tanggal mengisolasi transaksi dengan tepat"
        },
        {
            "id": "AUDIT-NZ-04",
            "phase": "Tahap 2",
            "title": "Isolasi Pendapatan Antar Cabang pada Laporan Laba Rugi",
            "expected": "Pendapatan Cabang 1 tidak bocor ke Cabang 2",
            "actual": "Cabang 2 Revenue: Rp 0",
            "status": "PASS",
            "evidence": "Data transaksi terisolasi per branch_id"
        },
        {
            "id": "AUDIT-NZ-05",
            "phase": "Tahap 2",
            "title": "Laporan Konsolidasi 4 Cabang = Penjumlahan Masing-Masing Cabang",
            "expected": "Sum(Cabang 1..4) == Consolidated Total",
            "actual": "Sum Income: Rp 3.000.000 == Cons Income: Rp 3.000.000",
            "status": "PASS",
            "evidence": "Konsolidasi matematis 4 cabang 100% konsisten"
        },
        {
            "id": "AUDIT-BAL-01",
            "phase": "Tahap 3",
            "title": "Pembayaran via Bank Transfer menambah saldo rekening secara presisi",
            "expected": "BCA balance: Rp 8.500.000",
            "actual": "BCA balance: Rp 8.500.000 (Delta: +1.000.000), Cash Delta: 0",
            "status": "PASS",
            "evidence": "Saldo Bank BCA bertambah tepat Rp1.000.000"
        },
        {
            "id": "AUDIT-BAL-02",
            "phase": "Tahap 3",
            "title": "Pengeluaran via Bank mengurangi saldo rekening secara presisi",
            "expected": "BCA balance: Rp 8.150.000",
            "actual": "BCA balance: Rp 8.150.000 (Delta: -350.000)",
            "status": "PASS",
            "evidence": "Saldo Bank BCA berkurang tepat Rp350.000"
        },
        {
            "id": "AUDIT-BAL-03",
            "phase": "Tahap 3",
            "title": "Buku Mutasi Bank mencatat Kredit (+1jt) dan Debit (-350rb) lengkap",
            "expected": "Mutasi kredit dan debit ditemukan di buku bank BCA",
            "actual": "Kredit 1jt: Ada, Debit 350rb: Ada",
            "status": "PASS",
            "evidence": "Buku Mutasi Bank BCA 100% konsisten"
        },
        {
            "id": "AUDIT-BAL-04",
            "phase": "Tahap 3",
            "title": "Proteksi Pembayaran Ganda \/ Retry: Tagihan Lunas DITOLAK",
            "expected": "HTTP 400 Bad Request & pesan tagihan sudah lunas",
            "actual": "HTTP 400, Msg: Tagihan ini sudah berstatus lunas, tidak dapat dibayar ulang.",
            "status": "PASS",
            "evidence": "Double-payment dicegah di level database & API"
        },
        {
            "id": "AUDIT-BAL-05",
            "phase": "Tahap 3",
            "title": "Pembayaran Kas Tunai menambah Saldo Kas & TIDAK mengubah Saldo Bank",
            "expected": "Cash Delta: +500.000, BCA Delta: 0",
            "actual": "Cash Delta: +500.000, BCA Delta: 0",
            "status": "PASS",
            "evidence": "Isolasi Buku Kas Tunai dan Rekening Bank Terbukti Presisi"
        },
        {
            "id": "AUDIT-BAL-06",
            "phase": "Tahap 3",
            "title": "Simulasi Concurrency: Request kedua ditolak (Pessimistic Locking)",
            "expected": "Req 1: HTTP 200, Req 2: HTTP 400",
            "actual": "Req 1: HTTP 200, Req 2: HTTP 400",
            "status": "PASS",
            "evidence": "Integritas Transaksi Konkuren Terlindungi (Zero Double-Payment)"
        },
        {
            "id": "AUDIT-RBAC-01",
            "phase": "Tahap 4",
            "title": "Admin 2 hanya melihat cabang diizinkan (Cabang 3 & 4)",
            "expected": "HTTP 200",
            "actual": "HTTP 200",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-02",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang membaca pengeluaran Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak ke cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-03",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang mencatat pengeluaran Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki akses ke cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-04",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang membaca aset Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak ke cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-05",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang menambah aset di Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk mengelola cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-06",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang menambah rekening untuk Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk mengelola cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-07",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang melihat mutasi cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak ke cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-08",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang melihat Laba Rugi (can_view_reports=0)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Akun Administrator Anda tidak memiliki izin untuk mengakses laporan\/fitur ini. Hubungi Owner.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-09",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang melihat Ringkasan Finansial (can_view_reports=0)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Akun Administrator Anda tidak memiliki izin untuk mengakses laporan\/fitur ini. Hubungi Owner.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-10",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang melihat Komparasi Cabang (can_view_reports=0)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Akun Administrator Anda tidak memiliki izin untuk mengakses laporan\/fitur ini. Hubungi Owner.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-11",
            "phase": "Tahap 4",
            "title": "Admin dilarang membuka Kelola Admin (Owner Only)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Hanya Owner yang berhak mengatur hak akses Administrator.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-12",
            "phase": "Tahap 4",
            "title": "Admin dilarang membuat Admin baru (Owner Only)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk fitur ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-13",
            "phase": "Tahap 4",
            "title": "Admin dilarang menghapus Admin (Owner Only)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk fitur ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-14",
            "phase": "Tahap 4",
            "title": "Admin dilarang mengubah permission (Owner Only)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Hanya Owner yang berhak mengatur hak akses Administrator.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-15",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang membatalkan invoice Cabang 1 (mark_kabur)",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Sebagian tagihan berada di luar cabang yang Anda kelola.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-16",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang mengubah durasi invoice Cabang 1",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk mengelola cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-17",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang memodifikasi rekening bank global\/utama",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Hanya Owner yang dapat mengubah rekening bank global.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-RBAC-18",
            "phase": "Tahap 4",
            "title": "Admin 2 dilarang membajak aset Cabang 1 ke Cabang 3",
            "expected": "HTTP 403",
            "actual": "HTTP 403 (Akses ditolak: Anda tidak memiliki izin untuk mengelola cabang ini.)",
            "status": "PASS",
            "evidence": "Proteksi Otorisasi Ditegakkan"
        },
        {
            "id": "AUDIT-REC-01",
            "phase": "Tahap 5",
            "title": "Rekonsiliasi Bank Seimbang (Diff = 0) menghasilkan status balanced",
            "expected": "Status: balanced & Difference: 0",
            "actual": "Status: balanced, Diff: 0",
            "status": "PASS",
            "evidence": "Rekonsiliasi seimbang valid"
        },
        {
            "id": "AUDIT-REC-02",
            "phase": "Tahap 5",
            "title": "Rekonsiliasi Selisih Negatif (-Rp50rb) tercatat status unbalanced",
            "expected": "Status: unbalanced & Difference: -50000",
            "actual": "Status: unbalanced, Diff: -50000",
            "status": "PASS",
            "evidence": "Selisih rekonsiliasi tercatat akurat"
        },
        {
            "id": "AUDIT-REC-03",
            "phase": "Tahap 5",
            "title": "Rekonsiliasi Bank Tidak Mengubah Saldo Pokok (Murni Ledger Audit)",
            "expected": "Bank account initial_balance tidak termodifikasi proses rekonsiliasi",
            "actual": "Initial Balance BCA tetap Rp 5.000.000",
            "status": "PASS",
            "evidence": "Integritas saldo pokok bank terjaga"
        },
        {
            "id": "AUDIT-AST-01",
            "phase": "Tahap 5",
            "title": "Kalkulasi Depresiasi: (10jt - 2jt) \/ 40 bln = Rp200rb\/bln",
            "expected": "monthly_depreciation == 200000.00",
            "actual": "Hasil: Rp 200.000 \/ bulan",
            "status": "PASS",
            "evidence": "Formula penyusutan garis lurus presisi"
        },
        {
            "id": "AUDIT-AST-02",
            "phase": "Tahap 5",
            "title": "Menolak nilai residu lebih besar daripada harga perolehan",
            "expected": "HTTP 400 Bad Request",
            "actual": "HTTP 400: Nilai residu tidak boleh lebih besar daripada harga perolehan.",
            "status": "PASS",
            "evidence": "Validasi batas nilai residu ditegakkan"
        },
        {
            "id": "AUDIT-AST-03",
            "phase": "Tahap 5",
            "title": "Menolak umur manfaat aset nol atau negatif",
            "expected": "HTTP 400 Bad Request",
            "actual": "HTTP 400: Nama Aset, Cabang, Tanggal Perolehan, Harga Perolehan, dan Umur Manfaat wajib diisi.",
            "status": "PASS",
            "evidence": "Validasi umur manfaat ditegakkan"
        },
        {
            "id": "AUDIT-REC-04",
            "phase": "Tahap 5",
            "title": "Rekonsiliasi Selisih Positif (+Rp100rb) tercatat status unbalanced",
            "expected": "Status: unbalanced & Difference: +100000",
            "actual": "Status: unbalanced, Diff: +100000",
            "status": "PASS",
            "evidence": "Selisih positif rekonsiliasi tercatat akurat"
        },
        {
            "id": "AUDIT-REC-05",
            "phase": "Tahap 5",
            "title": "Admin 2 dilarang mengakses rekonsiliasi rekening Cabang 1",
            "expected": "HTTP 403 Forbidden",
            "actual": "HTTP 403: Akses ditolak: Anda tidak memiliki izin untuk mengelola cabang ini.",
            "status": "PASS",
            "evidence": "Isolasi hak akses rekonsiliasi bank per cabang ditegakkan"
        },
        {
            "id": "AUDIT-AST-04",
            "phase": "Tahap 5",
            "title": "Nilai buku aset melewati umur manfaat tidak pernah turun di bawah nilai residu",
            "expected": "Book value == salvage (Rp2.000.000), Status: fully_depreciated",
            "actual": "Book Value: Rp 2.000.000, Status: fully_depreciated",
            "status": "PASS",
            "evidence": "Batas bawah nilai residu dan status fully_depreciated terbukti"
        }
    ]
}