Lewati ke isi

T6C — SPMB Fees / Rombel / MPLS Approved Product Contract

Decision date: 2026-08-29
Approver: requesting user (explicit plan approval A.1 + T6C)
Status: IMMUTABLE T6C IMPLEMENTATION CONTRACT
Scope: Uang formulir, uang pangkal/gedung (cash/transfer), assign rombel siswa diterima, rombel sementara MPLS
Does not: payment gateway (T6B.3), CBT (T6D), waitlist/ranking, full enrolled reversal, SC-FIN journals, demo/prod promotion

Amends residual T6B2-R002 (pre-enrollment applicant billing). Does not rewrite the T6B.2 post-enrollment handoff contract — that path remains CLOSED for accepted→enrolled → W10 pending enrollments.

Canonical flow

Applicant submit
→ if register.formulir_fee > 0: create W10 bill kind=spmb_formulir (admission-scoped)
→ payer cash/transfer + proof → treasurer verify (or waive + reason)
→ committee may verify admission only when formulir settled/waived/not-required
→ accepted → enrolled (W03 terminal) + T6B.2 handoff unchanged
→ pangkal via W10 template on register → pending→billed→pay→verify (or waive)
→ assign rombel (regular | mpls_temporary) only if pangkal settled/waived/not-required
→ after MPLS: promote mpls_temporary → regular batch; archive MPLS batch

Decisions

# Contract
1 Channel V1 = cash / bank_transfer only. Gateway deferred T6B.3.
2 Ledger owner = SC-FEES (scola.w10.bill / payment / receipt). No account.move.
3 Formulir bill is admission-scoped: bill_kind=spmb_formulir, admission_id required, student_id/enrollment_id optional.
4 Formulir source_ref / business key: spmb-formulir:<company_id>:<admission_id>. Idempotent create.
5 If formulir_fee > 0, transition to verified requires formulir payment verified or approved waive.
6 Waive requires distinct capability, reason, and audit; does not delete the bill/obligation.
7 Legacy /api/SPMB/payment/*, formulir invoice Odoo paths remain fail-closed (accounting_excluded). New path = /api/v1/fees/w10/* + admission projection.
8 Pangkal/gedung = W10 bill_kind=spmb_pangkal (or template tagged on register) after enroll via existing T6B.2 handoff.
9 Assign rombel allowed only for w03_state=enrolled, same company, and pangkal settled/waived/not-required.
10 Rombel SSOT = op.batch. Add batch_kind: regular | mpls_temporary (default regular).
11 MPLS temporary batches may link to academic calendar entry type orientation.
12 Promote MPLS→regular moves student enrollment, audits actor/reason, archives MPLS batch (no hard-delete).
13 T6B.2 XINT-H (deny legacy SPMB invoice) remains PASS.
14 W03 enrolled remains terminal; no post-enrollment reversal.

Authority

Action Actor
Pay formulir / pangkal (submit proof) Applicant payer or linked parent with finance.billing.self.pay
Verify payment Treasurer (finance.billing.verify) — not self
Waive Named admin capability (configure/manage) + reason
Enroll Enrollment officer (existing W03)
Assign / promote rombel Academic/admissions staff with academic.schedule or admissions enroll capability

Non-claims

Payment gateway, CBT, scholarship amount override, pre-enrollment accounting journals, demo/production promotion.