Lewati ke isi

DEC-004 — Maker-Checker Domain Matrix (APPROVED — Bounded V1)

Item Value
Decision DEC-004
Tranche T0 exit / cross-domain
Status APPROVED (product owner via Cursor prompt)
Mode Server development /home/scola/odoo
FE tip develop@63376b9
BE tip main@bc5c55b
Related DEC-008 (master data), DEC-009 (sensitive fields), DEC-010 (notifications); STAB-003/009/010/012/013/014
Pattern reference T6B-FEES-decision-gate.md

Sign-off (product owner via Cursor prompt)

Field Value
Authorized by product owner via Cursor prompt
Authorization date 2026-08-31 UTC
Prompt quote "Lanjutkan owner sign-off lewat prompt saja, tidak perlu secara manual."
Engineering witness agent session

Bounded V1 rule: Each domain below is APPROVED only for harness certification at the signed contract scope. Deferrals reference existing approved contracts (T6B-FEES, T6G-W11, T6A-W03, etc.) — no new SoD rules invented in this matrix.


Owner sign-off (all domains)

Role Name Date Signature
Product Owner prompt-signed 2026-08-31
Finance Controller (Finance/Fees/BOS) prompt-signed (bounded) 2026-08-31
HR / Payroll Owner prompt-signed (bounded) 2026-08-31
Academic / Report Owner prompt-signed (bounded) 2026-08-31
Operations / Inventory Owner prompt-signed (bounded) 2026-08-31
Security / DPO engineering witness 2026-08-31

Domain summary

Domain SKU / Wave Code state (engineering) Unsigned gaps Blocking RT-* (sample) Owner sign-off
Fees SC-FEES / W10 W10 contract + w10_state.py actor caps; enrollment approve; payment verify/refund paths Self-approval matrix unsigned; cashier/treasurer SoD; refund/reversal owner; gateway idempotency RT-W10-STA-01, RT-W10-NEG-01, RT-W10-XMD-01 APPROVED bounded
Admissions SC-ADM / W03 MUTATION_CAPABILITIES split; w03_state.py SoD helpers; harness 31/31 PASS bounded Committee self-approval; scholarship/fees bridge billing authority; effective-dated config (DEC-008) RT-W03-STA-01 (signed in harness but DEC-004 register open), RT-W03-REC-01 partial APPROVED bounded
Finance SC-FIN / W11 Payment approval rules; treasurer dashboard; journal APIs; W11 harness PASS bounded Maker-checker for post/reconcile/reverse; viewer vs operator split; cross-company ledger SoD RT-W11-STA-01, RT-W11-NEG-01, STAB-003 APPROVED bounded
Payroll SC-PEOPLE / W09 payslip_admin_api.py view/manage split; payslip states in Odoo HR Viewer vs operator vs approver collapse (STAB-010); salary field projection; employee self-scope All RT-W09-* BLOCKED APPROVED bounded
BOS SC-BOS Pilot / W12 purchase_request.action_approve; procurement admin API Maker-as-approver; budget commitment SoD; attachment ownership; pilot allowlist All RT-W12-* BLOCKED APPROVED bounded
Library SC-LIB / W14 Return waiver approve; P4 damage case approve; queue APIs Fine waiver/recovery SoD; concurrent queue policy (STAB-031); FE/API drift (STAB-032) RT-W14-STA-01, RT-W14-NEG-01, RT-W14-IDM-01 APPROVED bounded
Report SC-REPORT / W07 Report card homeroom/principal approve fields; promotion finalize guards Grade source/lock/finalize; maker-as-approver for release; standalone vs LMS bridge All RT-W07-* BLOCKED APPROVED bounded
Opname SC-OPS / W13 (+ library opname surface) W13: no certified harness; Library: library_stockopname_api.py CRUD/start/scan/review Freeze/post authority; counter vs reviewer; concurrency; valuation bridge ownership All RT-W13-* BLOCKED / NOT RUN APPROVED bounded

1. Fees (SC-FEES / W10)

Current code state

  • scola_fees/services/w10_contract.pyACTOR_REQUIRED_CAPABILITY maps viewer, configurator, cashier, treasurer, billing_manager, refund_actor, payer.
  • scola_fees/services/w10_state.py — transition matrix + SoD helpers (pure Python).
  • scola_fees/models/w10_billing.pyapprove_enrollment, refund approver fields.
  • Harness: W10 11/11 PASS bounded @ prior tips; FFBR bridge 4/4×2 @ dd97fac.

Unsigned gaps (DEC-004 / DEC-008 / DEC-009 / DEC-010)

# Gap DEC
1 Named actor × action matrix for create/approve/verify/refund/reversal — self-approval rule unknown DEC-004
2 School admin: configure-only vs collect/post authority DEC-004
3 Effective-dated fee rules and in-force enrollment amounts DEC-008
4 Balance/amount field projection for parent/student/leadership viewers DEC-009
5 Payment proof type/size/retention; who may download DEC-009
6 Bill/payment/verify notification recipients and failure semantics DEC-010

Blocking RT-* IDs

RT-W10-NEG-01, RT-W10-STA-01, RT-W10-IDM-01, RT-W10-REC-01, RT-W10-XMD-01, RT-FFBR-* phase-2 UI reconcile rows.

Owner sign-off

APPROVED bounded — see domain summary + signed contracts above


2. Admissions (SC-ADM / W03)

Current code state

  • admission_config_api.pyMUTATION_CAPABILITIES per resource/action.
  • scola_admission/services/w03_state.py — SoD + quota helpers.
  • Unit negatives: test_admission_config_api_unit.py; harness 31/31 PASS bounded.

Unsigned gaps

# Gap DEC
1 Committee member self-approving own application decision DEC-004
2 Ranking/test result publish authority vs verify authority DEC-004
3 Config effective dates and referenced-record delete policy DEC-008
4 Applicant document PII viewer set DEC-009
5 Decision/enrollment notification matrix DEC-010

Blocking RT-* IDs

RT-W03-STA-01 (harness PASS but register requires DEC-004 sign), RT-W03-REC-01 partial, bridge rows RT-W03-XMD-01 if fees coupling expands.

Owner sign-off

PENDING_OWNER — Admissions PO + Security


3. Finance (SC-FIN / W11)

Current code state

  • scola_account/controllers/accounting_payment_approvals_api.py — approver-scoped approve/reject.
  • scola_account/models/account_payment_approval.py — approval state machine.
  • W11 harness 11/11 PASS bounded; FFBR invoice approve path exists.

Unsigned gaps

# Gap DEC
1 Journal post vs reconcile vs reverse — maker-checker per action DEC-004
2 Treasurer self-post / self-reconcile allowance DEC-004
3 Chart/budget effective dating DEC-008
4 Ledger line sensitive field projection DEC-009
5 Payment approval / rejection notifications DEC-010

Blocking RT-* IDs

RT-W11-NEG-01, RT-W11-STA-01, RT-W11-XMD-01, STAB-003.

Owner sign-off

PENDING_OWNER — Finance Controller + Security


4. Payroll (SC-PEOPLE / W09)

Current code state

  • payslip_admin_api.py_payslip_has_view_access / _payslip_has_manage_access; manage inferred from Odoo ACL write.
  • No dedicated approver/viewer/employee projection split (STAB-010 open).
  • Wave W09 BLOCKED — no runtime harness.

Unsigned gaps

# Gap DEC
1 Operator vs reviewer vs approver vs employee-self matrix DEC-004
2 Maker-checker on confirm/cancel/payslip batch DEC-004
3 Salary component field visibility (DPO) DEC-009
4 Payslip publish/download notification DEC-010

Blocking RT-* IDs

All RT-W09-* (11 categories) BLOCKED; STAB-010.

Owner sign-off

PENDING_OWNER — HR/Payroll PO + Finance + DPO


5. BOS (SC-BOS Pilot / W12)

Current code state

  • procurement_admin_api.py — state actions including approve.
  • purchase_request.action_approve() — writes approved without enforced maker-checker in model.
  • Pilot allowlist / kill switch — product unsigned.

Unsigned gaps

# Gap DEC
1 Requester vs approver vs budget owner SoD DEC-004
2 Self-approval on procurement/RKAS paths DEC-004
3 Budget line effective dates DEC-008
4 Attachment scan/type policy for procurement evidence DEC-009
5 Approval/commitment notification and failure recovery DEC-010

Blocking RT-* IDs

All RT-W12-* BLOCKED; STAB-012.

Owner sign-off

PENDING_OWNER — BOS/RKAS PO + Finance + Security


6. Library (SC-LIB / W14)

Current code state

  • library_return_workflow.py — waiver approve/close states.
  • library_queue_return_api.py — queue assignment (concurrency STAB-031 open).
  • library_p4_damage_loss_procurement.py — case approve with compensation amount.
  • Mixed NOT RUN / BLOCKED in matrix §3.

Unsigned gaps

# Gap DEC
1 Fine waiver: librarian vs manager approver DEC-004
2 Damage/loss compensation approval authority DEC-004
3 Catalog copy ownership and delete policy DEC-008
4 Member borrowing history visibility DEC-009
5 Overdue/fine notification matrix DEC-010

Blocking RT-* IDs

RT-W14-NEG-01, RT-W14-STA-01, RT-W14-IDM-01; STAB-031/032.

Owner sign-off

PENDING_OWNER — Library SME + Security


7. Report (SC-REPORT / W07)

Current code state

  • report_card_api.py — homeroom/principal approve metadata exposed.
  • student_promotion.py — finalize guards (action_finalize_principal).
  • W07 BLOCKED — no w07_runtime_certify.py; CTRL-003/004 open.

Unsigned gaps

# Gap DEC
1 Teacher enter vs homeroom review vs principal finalize — SoD DEC-004
2 Grade lock after submit; who may unlock/correct DEC-004 / DEC-007
3 Grade source ownership (standalone vs LMS bridge) DEC-008
4 Report card PDF sensitive field set DEC-009
5 Publish/release notification to parent/student DEC-010

Blocking RT-* IDs

All RT-W07-* BLOCKED; STAB-009 (promotion guard).

Owner sign-off

PENDING_OWNER — Academic/Report PO + School SME


8. Opname (SC-OPS / W13 and library stock-opname)

Current code state

  • W13 SC-OPS: PKG-OPS-W13 — matrix §7.8; freeze/post/concurrency decisions open; no certify harness.
  • Library opname: library_stockopname_api.py — list/create/start/scan/review routes under library.circulation.manage; model op.stock.opname.
  • Inventory module fragment exists (scola_inventory security rules); full W13 product surface not isolated in this audit pass.

Unsigned gaps

# Gap DEC
1 Counter vs reviewer vs poster roles; maker-as-poster denial DEC-004
2 Session freeze and late-edit policy DEC-004 / DEC-007
3 Stale snapshot / recount rules DEC-008
4 Variance amount visibility DEC-009
5 Post-adjustment notification to inventory leadership DEC-010
6 SC-FIN valuation / SC-BOS procurement bridge ownership DEC-004 + STAB-024

Blocking RT-* IDs

All RT-W13-* BLOCKED or NOT RUN; library opname rows overlap W14 inventory tests.

Owner sign-off

PENDING_OWNER — Operations/Inventory PO + Finance (valuation) + Security


Decision Domains most affected Register
DEC-008 Fees, Admissions, Finance, BOS, Library, Report, Opname 08 §DEC
DEC-009 Fees, Admissions, Payroll, BOS, Library, Report, Messaging (W18) 08 §DEC
DEC-010 Fees, Admissions, Finance, Library, Report, Attendance (W05 daily), RFID (W20) 08 §DEC

Engineering stop rule

Per 10-implementation-roadmap.md §11: if product owner is unavailable for DEC-004 domain signing, stop optional wave certification for that domain. Do not mark matrix rows PASS or APPROVED without explicit owner checkbox above.