<!--
  Parsec Sdn. Bhd. · AMIR
  Generated by the Parsec Sdn. Bhd. AI Development Framework v2
  © 2026 Parsec Sdn. Bhd. All rights reserved.
  Phase 3 flat flow list v4.0 — single-app, three-role structure.
-->

# AMIR — Phase 3 Flat Flow List

**Phase:** 3 (Business Flows) — pre-diagram
**Version:** 4.0 (single-app, role-aware navigation)
**Date:** 23 April 2026
**Supersedes:** v3.0 (2026-04-22)

This is the flat list of every flow AMIR needs before diagramming begins. Per Framework §3.1: flow lists precede diagrams; gaps in the list become gaps in the system.

**Changes from v3.0:** Collapsed the "three apps" framing (Tenant App / SKM Platform App / Parsec Admin App) into a **single app** per Decisions B22 and B23 — mirroring TEHA's role-aware navigation pattern per A4. Replaced persona-based navigation labels with canonical **role labels** (Platform Operator / Tenant Admin / Tenant User). The 19-module × 217-flow structure is unchanged. Personas retained as illustrative context; roles are the authoritative permission structure.

**How to read this document:**
- If you're thinking **architecturally** (core vs pack, what to build next, schema boundaries), read by **module letter** A-S
- If you're thinking about **what users see**, read the **Roles & Navigation** section (§3) — single app, three roles, role-gated menus

---

## 1. Module Index (by planning module letter)

**Core modules (A–H):**
- [A. Authentication & Session](#a-authentication--session)
- [B. Onboarding & Tenant Setup](#b-onboarding--tenant-setup)
- [C. Parties — Debtors, Creditors, Bank Accounts, Auditors](#c-parties--debtors-creditors-bank-accounts-auditors)
- [D. Chart of Accounts & Ledger Core](#d-chart-of-accounts--ledger-core)
- [E. Transaction Entry](#e-transaction-entry)
- [F. Bank & Reconciliation](#f-bank--reconciliation)
- [G. Fixed Assets & Depreciation](#g-fixed-assets--depreciation)
- [H. Inventory](#h-inventory)

**Koperasi Pack modules (I, J):**
- [I. Member Management](#i-member-management-koperasi-pack)
- [J. Ar-Rahnu](#j-ar-rahnu-koperasi-pack)

**Core cross-cutting module (K):**
- [K. e-Invoice](#k-e-invoice-core)

**Koperasi Pack modules (L, M):**
- [L. Financial Statements & Reporting](#l-financial-statements--reporting)
- [M. Surplus Distribution](#m-surplus-distribution-koperasi-pack)

**Core cross-cutting module (N):**
- [N. Signals & Notifications](#n-signals--notifications)

**Koperasi Pack module (O):**
- [O. Platform Operator: Koperasi Oversight](#o-platform-operator-koperasi-oversight-koperasi-pack)

**Platform & cross-cutting modules (P–S):**
- [P. Platform Operator: AMIR Operations](#p-platform-operator-amir-operations)
- [Q. Integration Framework](#q-integration-framework)
- [R. Data Migration & Export](#r-data-migration--export)
- [S. PDPA Operational](#s-pdpa-operational)

**Core cross-cutting module (T) — added per tender briefing 25 April 2026:**
- [T. Tax & Zakat Draft Computation](#t-tax--zakat-draft-computation)

---

## 2. Three Roles (Decision B22) & One App (Decision B23)

AMIR runs as a **single Laravel app** with role-aware navigation (mirroring TEHA per A4). Three canonical roles:

| Canonical role | Capability scope | AMIR persona | Easy Coop 2.0 persona (post-fork) |
|---|---|---|---|
| **Platform Operator** | Multi-tenant oversight, platform ops, tenant provisioning, support, integration monitoring, PDPA ops, (AMIR only: billing) | Parsec Operator | SKM Officer / Pegawai Audit |
| **Tenant Admin** | Single-tenant oversight, approvals, period close, config, user invitation, report generation, pack management | Company Owner (SME); Setiausaha / Bendahari (Koperasi) | — |
| **Tenant User** | Day-to-day transaction entry, routine operational work | Company Accountant (SME); Kak Yati the kerani akaun (Koperasi) | — |

**Key distinctions per B22:**
- Roles are **Core-only** — packs extend features/menus, not roles
- Role **labels are deployment-configurable** — canonical names used in code and docs; UI labels overridable per deployment (AMIR → "Parsec Operator" / "Company Owner"; Easy Coop 2.0 post-fork → "SKM Officer" / "Setiausaha")
- Role **capabilities are pack-aware** — enabling Koperasi Pack adds menu items visible to specific roles; enabling billing module (AMIR only) adds billing menu to Platform Operator

**One logged-in user sees one sidebar** based on their role. Spatie middleware gates routes; sidebar component renders conditional menu items.

**Personas are illustrative, not authoritative** — Kak Yati, Setiausaha, Puan Suraya, Parsec operator remain useful storytelling devices for design and content decisions, but the permission model is the three roles above.

---

## 3. Unified Sitemap (single app, role-gated menus)

The full menu tree below uses role-visibility markers: **[PO]** = Platform Operator, **[TA]** = Tenant Admin, **[TU]** = Tenant User. Menu items with multiple markers are shared across roles. Items without any marker render for all logged-in users (e.g. Profil Saya).

Menu labels follow Bahasa Malaysia conventions for tenant-facing items per Decision B18 (BM primary). Platform-ops items use English internally; labels are deployment-configurable.

```
AMIR App Sidebar
│
├── Dashboard                                    [PO] [TA] [TU]   role-specific tiles
│
├─── PLATFORM OPERATOR SECTION ───────────────────────────────────
│
├── Tenant Management                            [PO]
│   ├── All Tenants (list, filter)
│   ├── Provision New Tenant
│   ├── Tenant Profile (drill-down)
│   ├── Suspend / Archive
│   └── Tenant Quota Monitoring
│
├── Koperasi Oversight                           [PO] (Koperasi Pack)
│   ├── HQ / State / Zone Dashboard
│   ├── Koperasi Needing Attention
│   ├── Koperasi Search
│   ├── My Follow-ups (Tugasan Saya)
│   ├── Sector Reports
│   └── Audit Evidence Export
│
├── Support Queue                                [PO]
│   ├── Open Tickets
│   ├── Assigned to Me
│   └── Resolved
│
├── Signal & Notification Management             [PO]
│   ├── Signal Rule Catalogue
│   └── Notification Templates
│
├── Integration Health                           [PO]
│   ├── All Tenants — Integration Status
│   ├── Sync Logs
│   └── Retry Queue
│
├── Billing & Subscriptions                      [PO] (AMIR only — scrubbed from Easy Coop 2.0)
│   ├── Active Subscriptions
│   ├── Past Due
│   └── Cancellations
│
├── Pack Management                              [PO]
│   ├── Pack Versions
│   └── Tenant-to-Pack Assignments
│
├── System Operations                            [PO]
│   ├── Backup Status
│   ├── Excel Recovery Files
│   ├── Performance Metrics
│   └── Error Monitoring
│
├── PDPA Operations (DPO role)                   [PO]
│   ├── Data Subject Requests
│   ├── Breach Incidents
│   └── Retention Expiry Log
│
├── Bulk Data Operations                         [PO]
│   └── Tenant Data Export
│
├─── TENANT SECTION (Tenant Admin + Tenant User) ─────────────────
│
├── Buku Tunai                                   [TA] [TU]   PRIMARY ENTRY SCREEN
│   ├── Terimaan (receipts)
│   └── Bayaran (payments)
│
├── Penghutang & Pemiutang                       [TA] [TU]
│   ├── Senarai Penghutang (debtors)
│   ├── Senarai Pemiutang (creditors)
│   ├── Akaun Bank (bank accounts)               [TA]
│   ├── Invois & Nota
│   └── Penyesuaian Bank
│
├── Lejar Am                                     [TA] [TU]
│   ├── Carta Akaun                              view [TU], edit [TA]
│   ├── Jurnal Pelarasan                         create [TU], approve [TA]
│   ├── Imbangan Duga
│   └── Buku Lejar
│
├── Aset Tetap                                   [TA] [TU]
│   ├── Daftar Aset
│   ├── Kategori Aset                            [TA]
│   └── Pelupusan & Penambahan
│
├── Inventori                                    [TA] [TU]
│   ├── Barang Inventori
│   ├── Pergerakan Stok
│   ├── Stock Take
│   └── Penilaian Inventori
│
├── Keanggotaan                                  [TA] [TU]   (Koperasi Pack)
│   ├── Daftar Anggota
│   ├── Saham & Yuran
│   └── Sejarah Anggota                          [TA]
│
├── Ar-Rahnu                                     [TA] [TU]   (Koperasi Pack)
│   ├── Tiket Gadaian
│   ├── Cagaran
│   ├── Lelongan                                 [TA]
│   └── Tetapan Ar-Rahnu                         [TA]
│
├── e-Invois                                     [TA] [TU]
│   ├── Invois Keluar
│   ├── Invois Masuk
│   └── Invois Konsolidasi
│
├── Laporan                                      [TA] [TU]
│   ├── Imbangan Duga
│   ├── Akaun Untung Rugi
│   ├── Kunci Kira-Kira
│   ├── Akaun Pembahagian Keuntungan             [TA]
│   ├── Penyata Aliran Tunai
│   ├── Penyata Terimaan & Bayaran
│   ├── Nota-Nota kepada Akaun
│   ├── Senarai Penghutang/Pemiutang
│   ├── Daftar Aset
│   ├── Daftar Anggota                           (Koperasi Pack)
│   ├── Ar-Rahnu                                 (Koperasi Pack)
│   ├── Penyata Kewangan Tahunan (GP23)          [TA]
│   └── Eksport
│
├── Pembahagian Lebihan                          [TA]   (Koperasi Pack)
│   ├── Akruan SRF
│   ├── Tabung Pendidikan & Pembangunan
│   ├── Dividen & Saham Bonus
│   └── Kelulusan Mesyuarat Agung
│
├── Signals & Notifications                      [TA] [TU]
│   ├── Alerts Inbox
│   └── Sejarah Signal                           [TA]
│
├── Penyelenggaraan                              [TA]
│   ├── Maklumat Koperasi (profile, fiscal year, state, zone)
│   ├── Carta Akaun — edit/hierarchy
│   ├── Pengguna & Peranan (users, Spatie roles)
│   ├── Pack Aktif
│   ├── Tempoh Perakaunan (period close/lock)
│   ├── Tetapan Notifikasi
│   ├── Templat Laporan
│   ├── Serah Alih Pentadbir (admin succession)
│   └── Import / Eksport Data
│
├─── SHARED FOOTER (all roles) ───────────────────────────────────
│
├── Profil Saya                                  [PO] [TA] [TU]
│   ├── Kata Laluan
│   ├── MFA
│   ├── Pilihan Persetujuan (PDPA consent)
│   └── Permintaan Data (data subject requests)
│
└── Pusat Bantuan                                [PO] [TA] [TU]
    ├── Manual Pengguna
    ├── Lawatan Ringkas (product tour)           [TA] [TU]
    └── Hubungi Sokongan
```

### 3.1 Notes on this navigation

- **Platform Operator (PO) and Tenant Admin (TA) + Tenant User (TU) sections are mutually exclusive in practice** — a single user session is one role, and the sidebar renders only that role's section. The above tree is a conceptual union.
- **Koperasi Pack adds menu items conditionally** — when the Koperasi Pack is enabled on a tenant, Keanggotaan, Ar-Rahnu, Pembahagian Lebihan, Daftar Anggota report, Ar-Rahnu report, and the Koperasi Oversight section (for PO) render. When disabled, they don't appear.
- **AMIR vs Easy Coop 2.0 differences are deployment config** per B10-R1 and B23 — e.g. Billing & Subscriptions in AMIR but scrubbed at fork time for Easy Coop 2.0.
- **Role-gated sub-items within a menu** use the [TA]-only notation (e.g. "Lelongan [TA]") to show that the sub-item renders only for that role even though the parent is shared.
- **Buku Tunai is the flagship screen** per Decision B16 — second menu item after Dashboard in the tenant section, largest real estate, designed for Kak Yati's workflow.

---

## 4. Flow Tables (by planning module, with role column)

Each flow table now has a **Roles** column indicating which of the three canonical roles can perform or receive the flow. Format: `PO` / `TA` / `TU` / `System`. A flow available to multiple roles shows them comma-separated (e.g. `TA, TU`).

The **Nav path** column shows the sidebar location in the unified app. Format: `Section → Sub-section → (action)`. System-initiated flows show `(system — no UI)`.

### A. Authentication & Session

*Scope: login, MFA, session management, password reset, tenant context switching.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| A1 | User login (email + password) | PO, TA, TU | User-initiated | (Pre-auth — login page) |
| A2 | User login with MFA challenge | PO | User-initiated | (Pre-auth — MFA page) |
| A3 | Password reset via email link | PO, TA, TU | User-initiated | (Pre-auth — forgot password) |
| A4 | Session timeout & re-authentication | PO, TA, TU | System | (system — no UI) |
| A5 | User logout | PO, TA, TU | User-initiated | User menu → Logout |
| A6 | First-time user accepts invitation & sets password | PO, TA, TU | Onboarding | (Pre-auth — invitation link) |
| A7 | Tenant context switch (multi-tenant users) | PO | User-initiated | Top bar → Tenant switcher |
| A8 | Failed login attempt tracking & account lockout | PO, TA, TU | Error/exception | (system — no UI) |

**State machine:** User account (`invited` → `active` → `suspended` / `locked` / `deactivated`)

---

### B. Onboarding & Tenant Setup

*Scope: tenant creation, first-time configuration, opening balance import, user invitation, succession, product tour, mid-year pack activation.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| B1 | Platform Operator creates a new tenant | PO | Admin | Tenant Management → Provision New Tenant |
| B2 | Tenant Admin receives invitation and activates tenant | TA | Onboarding | (Pre-auth — invitation link) |
| B3 | Tenant Admin completes tenant configuration wizard | TA | Onboarding | First-login wizard (auto) |
| B4 | Tenant Admin invites additional users | TA | User-initiated | Penyelenggaraan → Pengguna & Peranan → Jemput |
| B5 | Tenant Admin enables/disables packs for the tenant | TA | User-initiated | Penyelenggaraan → Pack Aktif |
| B6 | Tenant Admin imports opening balances from Excel | TA | User-initiated | Penyelenggaraan → Import / Eksport Data |
| B7 | Tenant Admin imports opening balances from SKM SAK (Easy Coop 2.0 only) | TA | User-initiated | Penyelenggaraan → Import / Eksport Data → SAK |
| B8 | Tenant onboarding completion check & first-use celebration | System | System | (system — triggers Dashboard state) |
| B9 | Tenant User runs first-time product tour | TU | Onboarding | Pusat Bantuan → Lawatan Ringkas |
| B10 | Tenant Admin activates a new pack mid-year | TA | User-initiated | Penyelenggaraan → Pack Aktif |
| B11 | Tenant Admin transfers admin rights after AGM | TA | Admin | Penyelenggaraan → Serah Alih Pentadbir |
| B12 | Tenant Admin configures custom roles and permissions (Spatie) | TA | User-initiated | Penyelenggaraan → Pengguna & Peranan → Peranan |

**State machine:** Tenant (`provisioning` → `pending_setup` → `active` → `suspended` / `archived`)

---

### C. Parties — Debtors, Creditors, Bank Accounts, Auditors

*Scope: master data for external entities the tenant transacts with. Per Decision A7, Party is a core primitive; Debtor/Creditor/Bank/Auditor are core specialisations; Member (Module I) is a Koperasi pack specialisation.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| C1 | Create a new debtor (customer) | TA | User-initiated | Penghutang & Pemiutang → Senarai Penghutang → Tambah |
| C2 | Edit a debtor's details | TA, TU | User-initiated | Penghutang & Pemiutang → Senarai Penghutang → (row) Edit |
| C3 | Deactivate a debtor | TA | User-initiated | Penghutang & Pemiutang → Senarai Penghutang → (row) Nonaktif |
| C4 | Write off a debtor (bad debt) | TA | Admin | Penghutang & Pemiutang → Senarai Penghutang → (row) Hapus Kira |
| C5 | Create a new creditor (supplier) | TA | User-initiated | Penghutang & Pemiutang → Senarai Pemiutang → Tambah |
| C6 | Edit a creditor's details | TA, TU | User-initiated | Penghutang & Pemiutang → Senarai Pemiutang → (row) Edit |
| C7 | Deactivate a creditor | TA | User-initiated | Penghutang & Pemiutang → Senarai Pemiutang → (row) Nonaktif |
| C8 | Create a new bank account (linked to GL account per spec R78) | TA | User-initiated | Penghutang & Pemiutang → Akaun Bank → Tambah |
| C9 | Edit a bank account | TA | User-initiated | Penghutang & Pemiutang → Akaun Bank → (row) Edit |
| C10 | Close a bank account (with balance transfer) | TA | Admin | Penghutang & Pemiutang → Akaun Bank → (row) Tutup |
| C11 | Register a cooperative auditor (from SKM registered list) | TA | User-initiated | Penyelenggaraan → Maklumat Koperasi → Juruaudit |
| C12 | View a party's transaction history | TA, TU | User-initiated | Penghutang & Pemiutang → (list) → (row) Sejarah |
| C13 | Generate a debtor aging report | TA, TU | User-initiated | Laporan → Senarai Penghutang/Pemiutang → Aging |
| C14 | Generate a creditor aging report | TA, TU | User-initiated | Laporan → Senarai Penghutang/Pemiutang → Aging |

**State machine:** Debtor / Creditor (`active` → `inactive` / `written_off`)
**State machine:** Bank account (`active` → `closed`)

---

### D. Chart of Accounts & Ledger Core

*Scope: CoA management, journal entry, general ledger, period close/lock, year-end carry-forward, cost centres.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| D1 | View chart of accounts | TA, TU | User-initiated | Lejar Am → Carta Akaun |
| D2 | Add a new account to CoA | TA | User-initiated | Lejar Am → Carta Akaun → Tambah |
| D3 | Edit an existing account | TA | User-initiated | Lejar Am → Carta Akaun → (row) Edit |
| D4 | Delete an unused account | TA | User-initiated | Lejar Am → Carta Akaun → (row) Padam |
| D5 | Reorganise CoA hierarchy | TA | User-initiated | Penyelenggaraan → Carta Akaun |
| D6 | Create and manage cost centres / departments | TA | User-initiated | Penyelenggaraan → Maklumat Koperasi → Pusat Kos |
| D7 | Record a manual journal entry (adjustment journal) | TU | User-initiated | Lejar Am → Jurnal Pelarasan → Baru |
| D8 | Review pending journals and approve/reject | TA | Admin | Lejar Am → Jurnal Pelarasan → Menunggu Kelulusan |
| D9 | View general ledger for an account | TA, TU | User-initiated | Lejar Am → Buku Lejar |
| D10 | View trial balance | TA, TU | User-initiated | Lejar Am → Imbangan Duga |
| D11 | Perform monthly close | TA | User-initiated | Penyelenggaraan → Tempoh Perakaunan → Tutup Bulanan |
| D12 | Perform year-end close & carry-forward (triggers M1 SRF accrual) | TA | User-initiated | Penyelenggaraan → Tempoh Perakaunan → Tutup Tahunan |
| D13 | Reopen a closed period (with audit trail) | TA | Admin | Penyelenggaraan → Tempoh Perakaunan → Buka Semula |
| D14 | Maintain master GP23 catalogue (PO with `manage_master_coa` permission per B26) | PO | Admin | Platform Admin → Carta Akaun Induk (GP23) |
| D15 | System propagates master GP23 catalogue updates to active tenants | System | System | (system — nightly job 04:00) |

**State machine:** Accounting period (`future` → `open` → `closing` → `closed` → `locked` → `reopened`)
**State machine:** Journal entry (`draft` → `pending_approval` → `approved` / `rejected` → `posted` → `reversed`)

---

### E. Transaction Entry

*Scope: cash book, debtor/creditor transactions, adjustment journals, offline entry & sync. The most-used area of the product.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| E1 | Record a cash receipt (Terimaan) online | TU | User-initiated | Buku Tunai → Terimaan |
| E2 | Record a cash payment (Bayaran) online | TU | User-initiated | Buku Tunai → Bayaran |
| E3 | Generate a receipt PDF | TU | User-initiated | Buku Tunai → Terimaan → (row) Cetak Resit |
| E4 | Generate a payment voucher PDF | TU | User-initiated | Buku Tunai → Bayaran → (row) Cetak Baucar |
| E5 | Edit a recorded transaction | TU | User-initiated | Buku Tunai → (row) Edit |
| E6 | Delete a recorded transaction | TU | User-initiated | Buku Tunai → (row) Padam |
| E7 | Record a debtor invoice (select debtor from C1-registered list) | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Invois Penghutang |
| E8 | Record a debtor payment | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Bayaran Diterima |
| E9 | Issue a credit note against a debtor invoice | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Nota Kredit |
| E10 | Record a creditor invoice (select creditor from C5-registered list) | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Invois Pemiutang |
| E11 | Record a creditor payment | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Bayaran Dibayar |
| E12 | Issue a debit note against a creditor invoice | TU | User-initiated | Penghutang & Pemiutang → Invois & Nota → Nota Debit |
| E13 | Attach a receipt photo or document | TU | User-initiated | Buku Tunai → (row) Lampiran |
| E14 | Enter a transaction while offline (PWA) | TU | User-initiated | Buku Tunai (offline indicator active) |
| E15 | System syncs offline transactions on reconnect | System | System | (system — background sync) |
| E16 | System handles sync conflict | System | Error/exception | Buku Tunai → Conflict dialog |
| E17 | User works past autosave trigger | TU | System | (system — silent autosave) |
| E18 | System handles offline cache overflow (>7 days) | System | Error/exception | Dashboard → Banner warning |
| E19 | System handles concurrent edit by two users | System | Error/exception | (any edit screen) → Conflict dialog |

**State machine:** Transaction (`draft` → `pending_sync` → `posted` → `edited` / `reversed` / `locked_by_period_close`)
**State machine:** Invoice / credit note / debit note (`draft` → `issued` → `adjusted` / `cancelled`)

---

### F. Bank & Reconciliation

*Scope: bank statement import, reconciliation workflow, Penyata Penyesuaian Bank generation.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| F1 | Upload a bank statement (CSV/TXT) | TU | User-initiated | Penghutang & Pemiutang → Penyesuaian Bank → Muat Naik |
| F2 | System auto-matches statement entries to ledger | System | System | (system — runs on upload) |
| F3 | Manually match unmatched entries | TU | User-initiated | Penghutang & Pemiutang → Penyesuaian Bank → Padan |
| F4 | Add a missing ledger entry from statement (bank fee, interest) | TU | User-initiated | Penghutang & Pemiutang → Penyesuaian Bank → Tambah Transaksi |
| F5 | Flag a ledger entry as outstanding | TU | User-initiated | Penghutang & Pemiutang → Penyesuaian Bank → (row) Tandakan Tertangguh |
| F6 | Complete reconciliation and generate Penyata Penyesuaian Bank | TU | User-initiated | Penghutang & Pemiutang → Penyesuaian Bank → Selesaikan |
| F7 | System handles bank statement file rejection | System | Error/exception | Penghutang & Pemiutang → Penyesuaian Bank → Upload error dialog |
| F8 | Reopen a closed reconciliation | TA | Admin | Penghutang & Pemiutang → Penyesuaian Bank → Sejarah → Buka Semula |

**State machine:** Bank reconciliation (`in_progress` → `balanced` → `submitted` → `reopened`)

---

### G. Fixed Assets & Depreciation

*Scope: asset register, asset categories, depreciation runs, disposals, grant-funded asset treatment (GP8).*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| G1 | Create and manage asset categories (with depreciation method and rate) | TA | User-initiated | Aset Tetap → Kategori Aset |
| G2 | Add a new fixed asset | TU | User-initiated | Aset Tetap → Daftar Aset → Tambah |
| G3 | Configure depreciation method per asset category | TA | User-initiated | Aset Tetap → Kategori Aset → (row) Kaedah Susut Nilai |
| G4 | System runs monthly depreciation calculation | System | System | (system — monthly scheduled) |
| G5 | Record an asset disposal | TU | User-initiated | Aset Tetap → Pelupusan & Penambahan → Pelupusan |
| G6 | Record an asset improvement or revaluation | TU | User-initiated | Aset Tetap → Pelupusan & Penambahan → Penambahan |
| G7 | Generate asset register report | TU | User-initiated | Laporan → Daftar Aset |
| G8 | System handles grant-funded asset depreciation (GP8) | System | System | (system — classifies ASET GERAN) |
| G9 | Transfer an asset between cost centres or categories | TU | User-initiated | Aset Tetap → Daftar Aset → (row) Pindah |

**State machine:** Fixed asset (`active` → `under_disposal` → `disposed` / `written_off`)

---

### H. Inventory

*Scope: item master, stock movements, valuation (FIFO/LIFO/WA), inventory reports. Simple v1 scope per A16-R1.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| H1 | Configure inventory valuation method (FIFO/LIFO/WA) | TA | User-initiated | Penyelenggaraan → Maklumat Koperasi → Kaedah Inventori |
| H2 | Add a new inventory item | TU | User-initiated | Inventori → Barang Inventori → Tambah |
| H3 | Record a stock-in movement | TU | User-initiated | Inventori → Pergerakan Stok → Masuk |
| H4 | Record a stock-out movement | TU | User-initiated | Inventori → Pergerakan Stok → Keluar |
| H5 | System calculates inventory valuation | System | System | (system — scheduled + on-demand) |
| H6 | Generate inventory valuation report | TU | User-initiated | Inventori → Penilaian Inventori |
| H7 | Perform physical stocktake | TU | User-initiated | Inventori → Stock Take |
| H8 | System handles negative stock detection | System | Error/exception | Inventori → Pergerakan Stok → Error dialog |

**State machine:** Inventory item (`active` → `discontinued`)

---

### I. Member Management (Koperasi Pack)

*Scope: member register, share capital, bonus shares, redemption. Koperasi-specific extension of Party primitive (Decision A7).*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| I1 | Register a new member | TA | User-initiated | Keanggotaan → Daftar Anggota → Tambah |
| I2 | Record member share contribution (Syer Biasa, Syer Wajib) | TA | User-initiated | Keanggotaan → Saham & Yuran → Sumbangan Saham |
| I3 | Record member subscription payment (Yuran) | TA | User-initiated | Keanggotaan → Saham & Yuran → Yuran |
| I4 | Record share redemption (member withdrawal) | TA | User-initiated | Keanggotaan → Saham & Yuran → Penebusan |
| I5 | Issue bonus shares to all active members (linked to M9) | TA | User-initiated | Pembahagian Lebihan → Dividen & Saham Bonus → Saham Bonus |
| I6 | Update member details | TA | User-initiated | Keanggotaan → Daftar Anggota → (row) Edit |
| I7 | Deactivate a member | TA | User-initiated | Keanggotaan → Daftar Anggota → (row) Nonaktif |
| I8 | Generate member register report per SKM template | TA | User-initiated | Laporan → Daftar Anggota |
| I9 | View a member's financial history | TA | User-initiated | Keanggotaan → Sejarah Anggota |
| I10 | System handles member death reconciliation | System, TA | Error/exception | Keanggotaan → Daftar Anggota → Status: Meninggal workflow |
| I11 | System handles member loan default triggering status flag (cross-module to N6) | System | Error/exception | (system — triggers N6 signal) |

**State machine:** Member (`pending_approval` → `active` → `inactive` / `resigned` / `deceased` / `expelled`)
**State machine:** Share subscription (`pledged` → `paid` → `redeemed` / `forfeited`)

---

### J. Ar-Rahnu (Koperasi Pack)

*Scope: pawn ticket lifecycle, collateral, interest accrual, auction. Full v1 per B20, demo shows shell + seeded data.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| J1 | Configure Ar-Rahnu Shariah rates and terms | TA | User-initiated | Ar-Rahnu → Tetapan Ar-Rahnu |
| J2 | Create a new pawn ticket (gadaian) | TU | User-initiated | Ar-Rahnu → Tiket Gadaian → Tambah |
| J3 | Record collateral appraisal | TU | User-initiated | Ar-Rahnu → Tiket Gadaian → (row) Nilaian Cagaran |
| J4 | Disburse Ar-Rahnu loan | TU | User-initiated | Ar-Rahnu → Tiket Gadaian → (row) Bayar Pinjaman |
| J5 | System calculates Ar-Rahnu interest accrual and posts to GL | System | System | (system — scheduled) |
| J6 | Record pawner redemption | TU | User-initiated | Ar-Rahnu → Tiket Gadaian → (row) Tebus |
| J7 | Record pawn ticket extension | TU | User-initiated | Ar-Rahnu → Tiket Gadaian → (row) Lanjut |
| J8 | System handles pawn ticket overdue detection | System | System | (system — daily sweep) |
| J9 | Initiate auction workflow | TA | Admin | Ar-Rahnu → Lelongan → Mula |
| J10 | Record auction outcome | TA | User-initiated | Ar-Rahnu → Lelongan → (row) Keputusan |
| J11 | Generate Ar-Rahnu subsidiary ledger report | TA | User-initiated | Laporan → Ar-Rahnu → Lejar Subsidiari |
| J12 | Generate collateral register report | TA | User-initiated | Laporan → Ar-Rahnu → Daftar Cagaran |

**State machine:** Pawn ticket (`draft` → `active` → `overdue` → `extended` / `redeemed` / `up_for_auction` → `auctioned` / `written_off`)
**State machine:** Collateral (`held` → `returned` / `auctioned` / `claimed_by_owner`)

---

### K. e-Invoice (Core)

*Scope: MyInvois submission, UIN handling, credit/debit note, cancellation. UI-complete for demo with mocked backend; real MyInvois sandbox post-demo per B11-R1.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| K1 | Prepare an invoice for MyInvois submission | TU | User-initiated | e-Invois → Invois Keluar → Baru |
| K2 | System validates invoice against LHDN mandatory fields | System | System | (system — runs on submit) |
| K3 | System submits invoice to MyInvois and receives UIN | System | System | (system — runs on submit) |
| K4 | View invoice with UIN and QR code | TU | User-initiated | e-Invois → Invois Keluar → (row) Lihat UIN |
| K5 | Cancel a submitted invoice (within 72h — triggers D7 journal reversal) | TU | User-initiated | e-Invois → Invois Keluar → (row) Batalkan |
| K6 | Issue a credit note with MyInvois submission | TU | User-initiated | e-Invois → Invois Keluar → (row) Nota Kredit |
| K7 | Issue a debit note with MyInvois submission | TU | User-initiated | e-Invois → Invois Keluar → (row) Nota Debit |
| K8 | System handles MyInvois validation failure | System | Error/exception | e-Invois → error dialog |
| K9 | System handles MyInvois service downtime | System | Error/exception | (system — queue with user banner) |
| K10 | System receives inbound e-invoice from supplier | System | System | (system — webhook) |
| K11 | Review and accept an inbound e-invoice | TU | User-initiated | e-Invois → Invois Masuk → (row) Semak & Terima |
| K12 | Generate consolidated e-invoice (<RM10k) | TU | User-initiated | e-Invois → Invois Konsolidasi |

**State machine:** e-Invoice (`draft` → `validating` → `submitted` → `validated` → `cancelled` / `rejected` / `adjusted_by_credit_note`)

---

### L. Financial Statements & Reporting

*Scope: GP23 report generation, note schedules, general ledger reports, export.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| L1 | Generate trial balance | TA, TU | User-initiated | Laporan → Imbangan Duga |
| L2 | Generate Akaun Untung Rugi | TA, TU | User-initiated | Laporan → Akaun Untung Rugi |
| L3 | Generate Kunci Kira-Kira | TA, TU | User-initiated | Laporan → Kunci Kira-Kira |
| L4 | Generate Akaun Pembahagian Keuntungan | TA | User-initiated | Laporan → Akaun Pembahagian Keuntungan |
| L5 | Generate Penyata Aliran Tunai | TA, TU | User-initiated | Laporan → Penyata Aliran Tunai |
| L6 | Generate Nota-Nota Kepada Akaun | TA | User-initiated | Laporan → Nota-Nota kepada Akaun |
| L7 | Generate Penyata Terimaan dan Bayaran | TA, TU | User-initiated | Laporan → Penyata Terimaan & Bayaran |
| L8 | Generate a custom GL report | TA, TU | User-initiated | Lejar Am → Buku Lejar → Export |
| L9 | Generate the full year-end Penyata Kewangan (GP23 PDF) | TA | User-initiated | Laporan → Penyata Kewangan Tahunan |
| L10 | Generate debtors / creditors listing | TA, TU | User-initiated | Laporan → Senarai Penghutang/Pemiutang |
| L11 | Export any report to Excel / CSV / PDF | TA, TU | User-initiated | Laporan → (any) → Eksport |
| L12 | System runs year-end pre-check before report generation | System | System | (system — on L9 trigger) |
| L13 | Customise accounting policy text and note templates | TA | User-initiated | Penyelenggaraan → Templat Laporan |
| L14 | System handles report generation over large dataset | System | Error/exception | (system — streaming with progress bar) |
| L15 | System processes report generation queue | System | System | (system — background queue) |

**No state machine** — reports are artefacts, not lifecycle entities.

---

### M. Surplus Distribution (Koperasi Pack)

*Scope: SRF accrual, fund contributions, dividend declaration, bonus share issue. Akta Koperasi §57.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| M1 | System calculates SRF accrual at year-end (triggered by D12) | System | System | (system — triggered by D12 year-end close) |
| M2 | Adjust SRF rate above 25% default | TA | User-initiated | Pembahagian Lebihan → Akruan SRF → Tetapan Kadar |
| M3 | Record Education Trust Fund contribution | TA | User-initiated | Pembahagian Lebihan → Tabung Pendidikan & Pembangunan → Tabung Pendidikan |
| M4 | Record Development Trust Fund contribution | TA | User-initiated | Pembahagian Lebihan → Tabung Pendidikan & Pembangunan → Tabung Pembangunan |
| M5 | Propose dividend rate for AGM | TA | User-initiated | Pembahagian Lebihan → Dividen & Saham Bonus → Cadangan |
| M6 | Record AGM approval of distribution plan | TA | Admin | Pembahagian Lebihan → Kelulusan Mesyuarat Agung |
| M7 | System calculates per-member dividend | System | System | (system — on AGM approval) |
| M8 | System issues dividend (credits shares or pays cash) | System | System | (system — per distribution plan) |
| M9 | System issues bonus shares per approved rate (cross-module to I5) | System | System | (system — cross-module trigger) |
| M10 | System handles insufficient surplus scenario | System | Error/exception | Pembahagian Lebihan → Error dialog |

**State machine:** Surplus distribution plan (`draft` → `proposed` → `agm_approved` → `executing` → `completed` / `cancelled`)

---

### N. Signals & Notifications

*Scope: Signal engine (6 categories per A17), notification dispatch, alert acknowledgment, template and rule management. Demo depth per B19.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| N1 | System generates anomaly signal on any ledger change | System | System | (system — event-driven) |
| N2 | System generates financial health score update | System | System | (system — scheduled + on-demand) |
| N3 | System generates cash flow forecast signal | System | System | (system — scheduled) |
| N4 | System generates compliance nudge | System | System | (system — scheduled) |
| N5 | System generates pattern insight | System | System | (system — scheduled) |
| N6 | System generates member-level signal | System | System | (system — event + scheduled) |
| N7 | System dispatches notification to users | System | System | (system — on signal fire) |
| N8 | Acknowledge a signal alert | TA, TU | User-initiated | Signals & Notifications → Alerts Inbox → (row) Akui |
| N9 | Dismiss a false-positive signal | TA | User-initiated | Signals & Notifications → Alerts Inbox → (row) Palsu |
| N10 | View signal history and resolution timeline | TA | User-initiated | Signals & Notifications → Sejarah Signal |
| N11 | System handles LLM service downtime / malformed response | System | Error/exception | (system — graceful degradation) |
| N12 | System rate-limits LLM calls | System | System | (system — per-tenant quota) |
| N13 | Manage signal rule catalogue | PO | Admin | Signal & Notification Management → Signal Rule Catalogue |
| N14 | Manage notification templates | PO | Admin | Signal & Notification Management → Notification Templates |

**State machine:** Signal alert (`generated` → `notified` → `acknowledged` / `dismissed` → `resolved` / `stale`)
**State machine:** Notification (`pending` → `sent` → `delivered` / `failed` / `opened`)

---

### O. Platform Operator: Koperasi Oversight (Koperasi Pack)

*Scope: hierarchical dashboard, koperasi drill-down, compliance review, flag for follow-up. Koperasi-Pack-specific extensions to the Platform Operator role. In AMIR this is Parsec Operator; in Easy Coop 2.0 post-fork this is SKM Officer / Pegawai Audit.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| O1 | View HQ-level aggregated dashboard | PO | User-initiated | Koperasi Oversight → HQ / State / Zone Dashboard |
| O2 | Filter dashboard by state (Negeri) | PO | User-initiated | Koperasi Oversight → HQ / State / Zone Dashboard → Ikut Negeri |
| O3 | Filter dashboard by zone (Wilayah) | PO | User-initiated | Koperasi Oversight → HQ / State / Zone Dashboard → Ikut Wilayah |
| O4 | View Koperasi Needing Attention queue | PO | User-initiated | Koperasi Oversight → Koperasi Needing Attention |
| O5 | Drill into a specific koperasi's ledger and financials | PO | User-initiated | Koperasi Oversight → Koperasi Search → (koperasi) |
| O6 | Search by name, registration number, status | PO | User-initiated | Koperasi Oversight → Koperasi Search |
| O7 | Flag an item for internal follow-up | PO | Admin | Koperasi Oversight → (drill-down) → Tandakan |
| O8 | Assign a follow-up to another Platform Operator (cross-module to N7) | PO | Admin | Koperasi Oversight → My Follow-ups → (row) Tugaskan Kepada |
| O9 | Export evidence package | PO | User-initiated | Koperasi Oversight → Audit Evidence Export |
| O10 | Generate zone/state compliance summary | PO | User-initiated | Koperasi Oversight → Sector Reports |
| O11 | View integration status for SKM internal systems (Easy Coop 2.0 only) | PO | User-initiated | Integration Health → SKM Adapters |
| O12 | System handles drill-down to offline-syncing tenant | System | Error/exception | Koperasi Oversight → (drill-down) → Stale data banner |

**State machine:** Follow-up flag (`open` → `assigned` → `in_progress` → `resolved` / `escalated`)

---

### P. Platform Operator: AMIR Operations

*Scope: tenant CRUD, support queue, integration health, billing, quotas, backups. Platform Operator role across all deployments; some items (billing) scrubbed from Easy Coop 2.0 fork per B10-R1.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| P1 | Provision a new tenant (after paid signup or referral) | PO | Admin | Tenant Management → Provision New Tenant |
| P2 | Suspend a tenant (non-payment, policy violation) | PO | Admin | Tenant Management → Tenant Profile → Suspend |
| P3 | Archive a tenant (cancellation, closure) | PO | Admin | Tenant Management → Tenant Profile → Archive |
| P4 | View multi-tenant oversight dashboard | PO | User-initiated | Dashboard |
| P5 | Triage a support ticket | PO | Admin | Support Queue → (ticket) |
| P6 | Monitor integration health across all tenants | PO | User-initiated | Integration Health |
| P7 | View system performance metrics | PO | User-initiated | System Operations → Performance Metrics |
| P8 | Manage subscription/billing (AMIR only) | PO | Admin | Billing & Subscriptions |
| P9 | Manage pack availability | PO | Admin | Pack Management |
| P10 | Respond to a PDPA data subject request (cross-module to S4/S7) | PO | Admin | PDPA Operations → Data Subject Requests |
| P11 | System executes daily full backup | System | System | (system — scheduled daily) |
| P12 | System auto-converts daily data to Excel for recovery | System | System | (system — scheduled daily) |
| P13 | System handles tenant quota exceeded | System | Error/exception | Tenant Management → Tenant Quota Monitoring → Alert |

**State machine:** Support ticket (`open` → `assigned` → `in_progress` → `waiting_on_tenant` / `resolved` / `escalated` → `closed`)
**State machine:** Subscription (`trialing` → `active` → `past_due` → `suspended` / `cancelled`)

---

### Q. Integration Framework

*Scope: external system registration, adapter invocation, sync scheduling, integration log. Core framework per B14; SKM-specific adapters are added to the Easy Coop 2.0 fork after scrubbing per B10-R1.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| Q1 | Register a new external integration | PO | Admin | Integration Health → New Integration |
| Q2 | Configure credentials and schedule | PO | Admin | Integration Health → (integration) → Configure |
| Q3 | System runs scheduled inbound sync | System | System | (system — scheduled) |
| Q4 | System runs scheduled outbound sync | System | System | (system — scheduled) |
| Q5 | System handles a pre-requisite check | System | System | (system — blocks tenant action with dialog) |
| Q6 | Trigger a manual sync | PO | Admin | Integration Health → (integration) → Sync Now |
| Q7 | View integration audit log | PO | User-initiated | Integration Health → Sync Logs |
| Q8 | System handles integration failure | System | Error/exception | Integration Health → (alert) |
| Q9 | System handles integration retry with backoff | System | System | (system — Retry Queue) |
| Q10 | Disable or remove an integration | PO | Admin | Integration Health → (integration) → Disable |

**State machine:** Integration (`configured` → `active` → `error` → `disabled` / `archived`)
**State machine:** Integration sync job (`queued` → `running` → `succeeded` / `failed` / `timed_out` → `retrying`)

---

### R. Data Migration & Export

*Scope: Easy Coop Excel import, bulk export, tenant data portability per PDPA.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| R1 | Import an existing Easy Coop Excel workbook | TA | User-initiated | Penyelenggaraan → Import / Eksport Data → Easy Coop |
| R2 | System validates Easy Coop import | System | System | (system — runs on upload) |
| R3 | System handles Easy Coop import errors | System | Error/exception | Penyelenggaraan → Import / Eksport Data → Error report |
| R4 | Export complete tenant data | TA | User-initiated | Penyelenggaraan → Import / Eksport Data → Eksport Penuh |
| R5 | Export a single module's data | TU | User-initiated | (any module) → Eksport |
| R6 | Bulk tenant data export (legal/audit request) | PO | Admin | Bulk Data Operations → Tenant Data Export |
| R7 | Download PDPA-compliant tenant data package (cross-module to S5) | TA | User-initiated | Profil Saya → Permintaan Data → Muat Turun |

**State machine:** Import job (`queued` → `validating` → `importing` → `succeeded` / `failed` / `partial`)

---

### S. PDPA Operational

*Scope: consent capture, data subject requests, deletion, breach notification. Compliance-mandated per Decision B3.*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| S1 | Accept privacy notice at first login | PO, TA, TU | Onboarding | (Pre-auth — consent dialog) |
| S2 | Update consent preferences | PO, TA, TU | User-initiated | Profil Saya → Pilihan Persetujuan |
| S3 | Submit a data subject access request | PO, TA, TU | User-initiated | Profil Saya → Permintaan Data → Akses |
| S4 | DPO (Platform Operator) processes access request | PO | Admin | PDPA Operations → Data Subject Requests → (ticket) |
| S5 | Submit a data portability request (cross-module to R7) | PO, TA, TU | User-initiated | Profil Saya → Permintaan Data → Portabiliti |
| S6 | Submit a data deletion request | PO, TA, TU | User-initiated | Profil Saya → Permintaan Data → Hapus |
| S7 | DPO (Platform Operator) processes deletion request | PO | Admin | PDPA Operations → Data Subject Requests → (deletion ticket) |
| S8 | System detects and logs a potential personal data breach | System | System | (system — detection + log) |
| S9 | DPO (Platform Operator) executes 72-hour breach notification | PO | Admin | PDPA Operations → Breach Incidents → (incident) |
| S10 | System handles data retention expiry | System | System | (system — Retention Expiry Log) |

**State machine:** Data subject request (`received` → `validated` → `processing` → `completed` / `rejected` → `audit_logged`)
**State machine:** Breach incident (`detected` → `investigating` → `confirmed` → `notified_commissioner` → `notified_subjects` → `resolved`)

---

### T. Tax & Zakat Draft Computation

*Scope: prepare draft cooperative tax (Borang C1 per Income Tax Act §65A) and zakat (where koperasi declares zakat from surplus). DRAFT only — no LHDN filing. Added per tender briefing 25 April 2026 (slide 30 M4-Transaksi requirement).*

| ID | Flow | Roles | Type | Nav path |
|---|---|---|---|---|
| T1 | Tenant Admin configures tax and zakat settings | TA | Configuration | Penyelenggaraan → Tetapan Cukai dan Zakat |
| T2 | Tenant Admin generates tax draft computation | TA | User-initiated | Pembahagian Lebihan → Draf Cukai |
| T3 | Tenant Admin generates zakat draft computation | TA | User-initiated | Pembahagian Lebihan → Draf Zakat |
| T4 | View tax and zakat draft history | TA | User-initiated | Laporan → Sejarah Cukai dan Zakat |
| T5 | System invalidates draft on prior-year reopen | System | System | (system — triggered by D13 reopen) |

**State machine:** Tax/Zakat draft (`generated` → `reviewed` / `stale` → `regenerated` → `reviewed`)

---

## 5. Totals

**Flow count by module (updated 2026-04-25 per tender briefing):**

| Module | Flows | State machines |
|---|---|---|
| A. Authentication & Session | 8 | 1 |
| B. Onboarding & Tenant Setup | 12 | 1 |
| C. Parties | 14 | 2 |
| D. Chart of Accounts & Ledger Core | 15 | 2 |
| E. Transaction Entry | 19 | 2 |
| F. Bank & Reconciliation | 8 | 1 |
| G. Fixed Assets & Depreciation | 9 | 1 |
| H. Inventory | 8 | 1 |
| I. Member Management | 11 | 2 |
| J. Ar-Rahnu | 12 | 2 |
| K. e-Invoice | 12 | 1 |
| L. Financial Statements & Reporting | 15 | 0 |
| M. Surplus Distribution | 10 | 1 |
| N. Signals & Notifications | 14 | 2 |
| O. Platform Operator: Koperasi Oversight | 12 | 1 |
| P. Platform Operator: AMIR Operations | 13 | 2 |
| Q. Integration Framework | 10 | 2 |
| R. Data Migration & Export | 7 | 1 |
| S. PDPA Operational | 10 | 2 |
| **T. Tax & Zakat Draft Computation** | **5** | **1** |
| **Total** | **224** | **28** |

**Module D additions in v4.1:**
- D14: Platform Operator (with `manage_master_coa` permission) maintains master GP23 catalogue
- D15: System propagates master GP23 catalogue updates to active tenants

**Module T (new in v4.1) flows:**
- T1: Tenant Admin configures tax and zakat settings
- T2: Tenant Admin generates tax draft computation
- T3: Tenant Admin generates zakat draft computation
- T4: View tax and zakat draft history
- T5: System invalidates draft on prior-year reopen

**Flow count by role (new in v4.0):**

| Role | Flows (authoritative actor) | Notes |
|---|---|---|
| Platform Operator (PO) | ~40 | Multi-tenant ops, Koperasi oversight, integrations, PDPA, billing (AMIR only) |
| Tenant Admin (TA) | ~75 | Single-tenant oversight, approvals, config, reports, pack-specific admin |
| Tenant User (TU) | ~55 | Day-to-day transaction entry, data entry, routine work |
| System | ~47 | Scheduled jobs, signal generation, background sync, backups |

Some flows are shared across roles (e.g. viewing the chart of accounts: TA + TU). Counts are approximate first-pass attributions.

---

## 6. Cross-module references (where bugs hide per Framework §3.1)

| From | To | What flows across |
|---|---|---|
| D12 (year-end close) | M1 (SRF accrual) | Year-end event triggers SRF calculation |
| E15 (offline sync) | N1 (anomaly signal) | Newly synced transaction feeds signal engine |
| K5 (e-invoice cancellation) | D7 (journal reversal) | Cancelling e-invoice reverses its journal entry |
| M9 (bonus share issuance) | I5 (member share updates) | Surplus distribution creates member share entries |
| I11 (member loan default) | N6 (member signal) | Default event triggers signal generation |
| O7 (follow-up flag) | O8 (assignment) → N7 (notification) | Flag workflow triggers notifications |
| S6 (deletion request) | (all tenant data) | Deletion cascades across modules |
| Q5 (pre-requisite check) | (any tenant action) | Upstream data missing blocks downstream flows |
| R7 (PDPA export) | S5 (data portability request) | Portability UI reuses export infrastructure |
| C1/C5/C8 (party creation) | E7-E12 (party use in transactions) | Master data populates transaction dropdowns |
| G1 (asset category) | G2 (asset creation) | Category selection in asset creation |

---

## 7. Ready for diagramming

Framework §3.9 Phase 3 completion checklist items that apply pre-diagram:

- [x] Flat flow list matches actual flows — 217 in document
- [x] All flows in strict numerical sequence within each module (verified v2.0)
- [x] Zero duplicate flow IDs (verified v2.0)
- [x] Section order matches the established module sequence
- [x] No duplicate section headers
- [x] State machines defined for all lifecycle entities (27 identified)
- [x] Role structure locked per B22
- [x] Single-app architecture locked per B23

Still to do (during diagramming):
- [ ] Zero Mermaid syntax errors (run syntax check script per §3.3)
- [ ] Zero open TODO/TBD/decision-required markers (per §3.5)
- [ ] All decisions from flow discussions logged in DECISIONS_LOG.md
- [ ] HTML generator group_labels dictionary includes all 19 modules
- [ ] HTML sidebar navigation verified to show all modules
- [ ] Cross-reference table populated with flow IDs

**Estimated sessions to complete diagramming: 5-7 sessions, 3-4 modules per session, state machines inline with owning module.**

---

## CHANGE LOG

| Date | Version | Change |
|---|---|---|
| 2026-04-21 | 0.1 | Initial flat list — 186 flows, 18 modules. |
| 2026-04-21 | 2.0 | Full audit pass: new Module C Parties; +31 flows; shifted C-R → D-S; renamed 3 flows; added 5 state machines. 217 flows, 19 modules, 27 state machines. |
| 2026-04-22 | 3.0 | Added per-persona sitemap (§3) showing Tenant / SKM / Parsec app menu trees. Added Nav path column to every flow table. Structure of modules unchanged. |
| 2026-04-23 | 4.0 | Collapsed three-app framing into single app per B23. Replaced persona-based navigation with role-based navigation (PO / TA / TU) per B22. Renamed Module O from "SKM Platform Admin" to "Platform Operator: Koperasi Oversight" reflecting role-based architecture. Flow and state-machine counts unchanged (217 / 27). |
| 2026-04-25 | 4.1 | Added Module T (Tax & Zakat Draft Computation) per tender briefing 25 April 2026 — 5 flows, 1 state machine. Added D14 and D15 to Module D for SKM Admin master GP23 catalogue maintenance per Decision B26. Updated totals: 224 flows, 28 state machines, 20 modules. |
