AIEE.DEVSOQ TMS CRD
HomeExport PDFOverview

Contents

/
  • 1.1Overview
  • 1.2About AIEE.DEV
  • 1.3Parties & sign-off
  • 2.1Plan SOQ-25K
  • 2.2Max claim (EDG)
  • 2.3Rate card
  • 3.1Discovery pack
  • 3.2Brand & website appendix
  • 4.1Attachment A
  • 4.2PRD
  • 4.3Solution overview
  • 4.4Registration
  • 4.5Admin
  • 4.6CRM & sales
  • 4.7Student & trainer portals
  • 4.8SWDA & finance
  • 4.9Platform
  • 4.10Chat agents
  • 4.11Ops modules
  • 4.12Business benefits
  • 4.13DSMR research
  • 4.14Build vs buy
  • 4.15Market & competitors
  • 5.1Project control plan
  • 5.2Prototype & screens
  • 5.3Capability roadmap
  • 5.4UI/UX
  • 5.5Frontend
  • 5.6Backend
  • 5.7Architecture
  • 5.8Tech spec
  • 5.9Directory structure
  • 5.10Handover pack
AIEE.DEVSOQ TMS / Coding Requirement Documentation
4.2 / 4.2 PRD
Pei Han CCO / Eddy CPO / HK CSO / Andy Koh CTOaiee.dev4.2 / Confidential
4. Requirements4.2 PRD
Download .md
Section 4.2

Attachment B — Product Requirements Document (PRD v1.1)

Prepared by Eddy, Chief Product Officer (AIEE.DEV) — full PRD with FR/NFR IDs, MoSCoW priorities, 23 sections, architecture-aligned draft.

PRD-SOQ-TMS-1.1 · Formal Requirement Oracle

FieldNormative value
Doc-IDPRD-SOQ-TMS-1.1
BaselineATT-A-HK-2026-08
ConformanceRFC 2119
Identifier namespacesFR-{domain}-{nn} · NFR-{nn} · DQ-{nn}
StatusDRAFT_ARCH_ALIGNED

Reader profile: Staff engineers, QA automation, integration owners. Non-engineering interpretation discouraged — refer §23–§25 for commercial semantics.


0 · Identifier lattice

PrefixSemanticsTest binding
FR-*Functional SHALL/MUSTtests/acceptance/fr/{id}.test.ts
NFR-*Quality attributek6 · axe · chaos · DR drill
DQ-*Discovery delta (unresolved)Block release if M priority
SYS-*Attachment-A invariantTrace matrix §00

MoSCoW: M = release blocker · S = contract milestone · C = backlog · W = won't v1


1 · Problem invariant (compressed)

Legacy SOQ stack = {legacy_tms, privyr, xero} without unified student_id keyspace. Symptom classes:

Symptom-IDRoot causeTarget subsystem
S-RECON-01Dual SoR enrolment vs CRMEnrolment + Crm handoff event
S-FUND-02Retroactive SWDA evidence assemblySwdaHub outbox from AttendanceFact
S-FIN-03Manual Xero re-keyFinanceOrders → XeroAdapter mirror
S-EXM-04Hard-coded exemption windowpolicy-engine DSL

2 · Product boundary (normative)

``` APP = { public-web, admin-workspace, student-portal, trainer-portal } SVC = { swda-hub, xero-adapter, notification-dispatcher, policy-engine } |APP_user_facing| = 3 + 1 public ```

Course-type taxonomy: DIPLOMA | SHORT | WSQ — enum frozen in catalogue.course_funding_type.

SWDA nomenclature: canonical SWDA; adapter maintains legacy_alias ∈ {SSG, WSG} field map until vendor EOL.


3 · Success metrics (instrumentation IDs)

Metric-IDDefinitionCollectionMVP target
M-CONV-01enrolled / enquiriescrm.funnel+10% (S)
M-ADM-02median(handle_time) diploma_appOTel span−60% (M)
M-SWDA-03reject_rate(submissions)integration_txn_log<2% (M)
M-FIN-04manual_journal_countXero diff job−50% (S)

4 · Scope tensor

In-scope v1: FR domains §7–§15 · SwdaHub P2 · Xero mirror · RBAC §15 · Outbox async

Out-of-scope v1: GATCOMS agency portal · ai.HumanCapital · D-GENIO proctor parity · native mobile · multi-region funding


5 · Persona → RBAC role map

PersonaRole slugData scope
SysAdminplatform.admin*
Admissionsadmissions.officerprogramme_id ∈ assigned
Financefinance.officerorder.* read/write
Salessales.agentlead.* pre-enrolment
Trainertrainersession_id ∈ roster
Studentstudentself
Auditorauditor.roread-only append-log

6 · Container overview

See CRD §17. Event bus: Redis Streams or Horizon queue — domain events MUST NOT invoke HTTP synchronously to SWDA from request thread.


7 · FR — Student Portal (public layer)

IDPriorityRequirement
FR-STU-001MGET /v1/catalogue paginated; filter funding_type, category, run_date
FR-STU-010MApplicant auth: email_otp | singpass_oidc | overseas_credential
FR-STU-020MWSQ reg wizard: sequential gate identity → eligibility → fee_estimate → payment
FR-STU-030SCourse compare max 3 SKUs client-side
FR-STU-040CPigeonhole embed post-MVP

Illegal state transition → HTTP 409 + error_code=FSM_VIOLATION.


8 · FR — Admissions / registration / funding

IDPriorityRequirement
FR-ADM-001MDiploma FSM: DRAFT→SUBMITTED→SCREENING→OFFERED→ACCEPTED→ENROLLED
FR-ADM-010MSeat lock: SELECT FOR UPDATE on course_run.seats_available
FR-ADM-020MWSQ: subsidy_estimate computed pre-payment via policy-engine
FR-ADM-030MSFC hold/release integrated with payment intent
FR-ADM-040SWaitlist priority queue FIFO with promoted_at

9 · FR — Admin Workspace

IDPriorityRequirement
FR-ADM-100MProgramme version immutability post first enrolment on version
FR-ADM-110MScheduler conflict detection O(n²) slots acceptable MVP; optimize P2
FR-ADM-120MExemption: POL-EXM-* output binds order_line adjustment
FR-ADM-130MStudent360 materialized view refresh lag ≤ 60s
FR-ADM-140MAttendance QR nonce TTL 120s single-use

10 · FR — CRM / commission

IDPriorityRequirement
FR-CRM-001MLead dedupe key hash(normalize(email), normalize(mobile))
FR-CRM-010SPrivyr import idempotent on external_id
FR-CRM-020MApplicationCreated event freezes CRM opportunity writes
FR-CRM-030MCommission accrual on PaymentCleared; clawback on RefundPosted

11 · FR — Learning portal (enrolled)

IDPriorityRequirement
FR-LRN-001MTimetable ICS export optional
FR-LRN-010MCheck-in POST /v1/sessions/{id}/checkin {nonce}
FR-LRN-020SSCORM/LTI adapter interface stub only MVP

12 · FR — Trainer portal

IDPriorityRequirement
FR-TRN-001MRoster accept/decline within configurable TTL
FR-TRN-010MAttendance batch submit triggers AttendanceFactRecorded × N
FR-TRN-020SPayable export POST /v1/trainer/payables/export-xero

13 · FR — SwdaHub

IDPriorityRequirement
FR-SWDA-001MAll gov IO via hub; credential vault
FR-SWDA-010MOutbox + idempotency keys
FR-SWDA-020MOps dashboard: pending/rejected/DLQ
FR-SWDA-030SSandbox/prod env switch RBAC-gated

API inventory: DQ-SWDA-001 — confirm against SOQ subscription manifest.


14 · FR — Finance / Xero

IDPriorityRequirement
FR-FIN-001MOrder aggregate root owns pricing snapshot
FR-FIN-010MInvoiceMirror 1:1 order
FR-FIN-020MCert issuance blocked if financial_hold.active
FR-FIN-030SReconciliation diff report cron

15 · FR — Platform (RBAC, audit, notify, docs)

IDPriorityRequirement
FR-PLT-001MRBAC middleware on all /v1/* mutators
FR-PLT-010Maudit_log append-only; no UPDATE/DELETE
FR-PLT-020MPDPA consent record on applicant PII create
FR-PLT-030SNotification template versioning

16 · NFR catalogue

IDRequirement
NFR-0199.9% availability monthly
NFR-02API p95 < 300ms reads at 500 RPS burst registration
NFR-03SWDA submission exactly-once effect
NFR-04WCAG 2.2 AA public/student
NFR-05PDPA access logging
NFR-06RPO 24h / RTO 4h MVP
NFR-07PCI SAQ-A (gateway redirect)

17 · Journey sequences (reference)

WSQ happy path:

``` catalogue.select → singpass.auth → eligibility.check → order.create → payment.capture → enrolment.commit → swda.register (async) ```

Sequence diagrams: external docs/sequences/ (not in this oracle).


18 · Conceptual ERD (abbreviated)

``` organisation ||--o{ programme : owns programme ||--o{ course_run : schedules course_run ||--o{ session : contains student ||--o{ enrolment : has enrolment ||--o{ order : generates order ||--o{ order_line : contains session ||--o{ attendance_fact : records ```

Full DDL: services/api/database/migrations/ (implementation phase).


19 · Dependencies / constraints

Dep-IDSystemBlocking
DEP-01SWDA sandbox credentialsP2 start
DEP-02Singpass OIDC clientWSQ public reg
DEP-03Xero OAuth tenantP3
DEP-04Payment gateway MIDPaid reg

20 · Risk register (technical)

R-IDRiskMitigation
R-01SWDA API driftAdapter version pins + contract tests
R-02Rate limit 429 stormToken bucket worker pool
R-03Xero sync driftReconciliation cron + alert

21 · Release milestones

PhaseGateFR subset
P1Non-SWDA E2EFR-STU, FR-ADM-100–140 (subset)
P2SWDA parallel-runFR-SWDA-*
P3Finance reconcileFR-FIN-*
P4CRM conversionFR-CRM-*

22 · Open discovery (DQ-*)

IDQuestionOwner
DQ-SWDA-001Complete API manifestHK
DQ-XERO-001COA mappingFinance
DQ-PRIV-001Privyr import modeCPO

23 · Glossary (symbol table)

TermDefinition
SWDASkills and Workforce Development Agency — Singapore agency (from Jul 2026 merger of SSG + WSG) overseeing WSQ, subsidies, SkillsFuture Credit, and ATP compliance via systems such as TPGateway
WSQWorkforce Skills Qualifications — national skills certification framework
ATPApproved Training Provider
TPGatewayTraining Partners Gateway — SWDA platform for ATP course/trainee/claim submissions
SFCSkillsFuture Credit — individual learner funding wallet
SoRSystem of Record
NYCNot Yet Competent
OutboxTransactional event relay pattern

Author: Eddy (CPO) · AIEE.DEV · Cross-ref: CRD §02 · Implementation Doc v1

4.1 Attachment A4.3 Solution overview

aiee.dev / Confidential

AIEE.DEV