Cambodia CMS — end-to-end functional flow

Full campus lifecycle for LUCT Cambodia (DB campus2_cambodia, shell title CAMPUS MANAGEMENT SYSTEM 0.9) broken down by desk / capability — including Assist (provider code Limkokwing), portal_*_cambodia hooks, and nightly dumps into secondary DB portalcambodia. Package CMS_Cambodia_Source_Codes_&_DB_Structure_07_10_2026 (Vara WhatsApp 7 Oct 2026). Not the Lesotho M4 acceptance SoR; use for M5 expansion / evidence.

DB campus2_cambodia 481 tables 296 views 46 SPs · 2 fn · 83 triggers portalcambodia export M5 — not M4 SoR
LUCT CMS subsection. Connected from the Cyberjaya analysis hub: LUCT CMS → Cambodia. Use the top nav LUCT CMS → Cambodia flyout for FSD, integrations, ERD, DFD, database, and comparison.
Scope. Structure and behaviour only. PHP tree, cambodiabatch SQL/logs, credentials (night script embeds DB auth — present, not republished), uploads, and live student data are not committed. Drive pack: Google Drive. Canonical notes: old-cms-cambodia.md · CATALOG.md.

1. End-to-end campus lifecycle

One shared MySQL SoR (campus2_cambodia). Staff desks own writes; lecturer + IH desks and api_student_* / portal_*_cambodia hooks sit beside them. Nightly cambodiabatch also projects slices into portalcambodia. Assist is campus-local (Limkokwing) — not Lesotho NMDS, Botswana DTEF, or Eswatini ssb.

Student journey across desks

Marketing → registry offer → faculty enrol → bursary → services / accommodation → reporting.

flowchart LR
  subgraph Recruit["1 · Recruit"]
    MKT[Marketing
app_*] CDU[CDU / AQA] end subgraph Admit["2 · Admit"] REG1[Registry
offer letters] APP[Online / staff
app_applicationform*] end subgraph Enrol["3 · Enrol"] REG2[Registry
r_student / programme] FAC1[Faculty
structure / modules] SET[Setup
terms / fees] end subgraph Study["4 · Study"] FAC2[Faculty
timetable / results] LEC[Lecturer
marks / attendance] IH[IH
attendance / marks] end subgraph Money["5 · Finance"] BUR[Bursary
invoice / pay / assist] end subgraph Life["6 · Student life"] SVC[Services
w_* visa / welfare] ACC[Accommodation
w_dorm / w_room] end subgraph Close["7 · Close / report"] REP[Reporting] BATCH[cambodiabatch
→ portalcambodia] end MKT --> APP CDU -.-> APP APP --> REG1 REG1 --> REG2 SET --> REG2 FAC1 --> REG2 REG2 --> FAC2 FAC2 --> LEC FAC2 --> IH REG2 --> BUR REG2 --> SVC REG2 --> ACC FAC2 --> REP BUR --> REP BATCH -.-> REP

2. Functional breakdown by desk

PHPMaker apps under cambodia/<desk>/ (pack layout). Shell cambodia/index.html still links desks as ./campus/… in markup — folders are not nested under a campus/ subfolder in this zip (contrast Botswana / Eswatini).

Functional structure

Domains map to folders; all share campus2_cambodia.

mindmap
  root((Cambodia CMS
CMS 0.9)) Academic registry faculty lecturer cdu ih modulemat Student_life services accommodation notice Commercial bursary marketing Assist_Limkokwing Platform setup reporting cambodiabatch portal_api_hooks zemail

Module catalogue

Desk Primary job Key tables / signals ~PHP
setup/ Institution, terms, fee catalogs, user levels, config f_term, s_staff, security / setup tables ~830
faculty/ Schools, programmes, modules, attendance, results f_program, f_module, f_modulemat*, release-result ~792
reporting/ Population, enrolment, payment, scholarship reports rep_*, rep_curtermpop_camb, rep_scholarship ~594
registry/ Student master, offers, forms, transcripts, certs r_student, r_stdprogram, r_stdofferletter, r_studentcert_cambodia ~454
bursary/ Invoices, payments, receipts, assist billing b_*, b_assistbilling*, r_assistscheme* ~394
lecturer/ Marks, attendance, module materials Lecturer portal screens; module confirm SPs ~360
services/ Welfare, counselling, visa / insurance ops w_application, w_insurance*, immigration views ~356
ih/ In-house / short-course attendance & marks ih_student, ih_stdattendance, ih_stdmark ~287
marketing/ Applications, agents, recruitment app_applicationform*, app_docfile, m_* ~280
cdu/ AQA / programme accreditation f_programaccreditation*, entry / AQA desks ~242
accommodation/ Dorms, occupants, room charges w_dorm, w_room*, w_occupant, w_charges ~197
notice/ Bulletin / noticeboard Notice desks ~122
zemail/ Outbound email helpers Shared email helpers (root also has message*.php) ~6
modulemat/, support/ Module materials / support (folders present) No .php under these tops in the zip count 0
lettertemplate/, uploads/, images/ RTF / media / uploads Ops artefacts — not committed —

~9.8k PHP under cambodia/. No separate api-service/ tree in this pack (contrast Eswatini). No thin dedicated student/ desk folder (portal hooks are DB-side).

3. Core process flows

3.1 Admissions & registry

Application → offer → student record

app_* (10 tables) including app_applicationformonline — Botswana/Cyberjaya style, not Sierra Leone ac_*.

flowchart TD
  A[Marketing / online app
app_applicationform*] --> B[Docs / education
app_docfile · app_applicationeducation] B --> C[Registry offer
r_stdofferletter · FetchOfferLetters] C --> D[Confirm / enrol SPs
AfterInsertApplicationForm · OnlineReg*] D --> E[r_student + r_stdprogram
+ r_stdsemester] E --> F[Faculty structure
f_program / f_module] E --> G[Bursary fee plan]

3.2 Academic term cycle

Modules → attendance → results

Faculty + lecturer + IH; SPs StudentConfirmModule, r_Update_Semester, examination.

flowchart LR
  T[Term / structure
f_term · f_program*] --> M[Module enrolment
r_stdmodule] M --> TT[Timetable / attendance
r_stdattendance*] M --> MARK[Lecturer / IH marks] MARK --> RR[Release results] RR --> TR[Transcripts / certs
r_studentcert_cambodia]

3.3 Finance & assist

Billing → payment → Assist (Limkokwing)

Bursary owns money. Assist via r_assistprovider / b_assistbilling* — no r_scholarshipapp TEF queue; rep_scholarship reporting exists.

flowchart TD
  FEE[Fee catalog / setup] --> INV[Invoices / instalments
b_*] INV --> PAY[Payments / receipts] PAY --> STMT[Statements / ageing views] INV --> ASSIST[Assist programmes
r_assistscheme* · b_assistbilling*] ASSIST --> PROV[AssistProviderCode
Limkokwing] PROV -.-> REP[[rep_scholarship]]

3.4 Student life & ops

AreaDeskWhat happens
Visa / welfare / insuranceservices/Thick w_* (~52) — insurance, med, applications; thicker than Eswatini
Hostelaccommodation/w_dorm / w_room* / w_occupant / charges (acco mostly on w_*, not a large acc_* forest)
IH / short coursesih/ih_student, attendance, marks, sessions
Noticesnotice/Campus bulletins
Batch / portalcambodiabatch/Nightly SQL → portalcambodia (*_cam / *_cambodia) — ops artefacts, not committed
Portal hooksDB routinesapi_student_*, api_faculty_*, portal_student_*_cambodia

4. Integrations

External / cross-DB touchpoints found in the Cambodia pack. Not Lesotho NMDS, not Botswana DTEF / TEF.gov.bw, not Eswatini ssb. No separate api-service/ tree (desks live at cambodia/<desk>/).

Assist · Limkokwing portal_*_cambodia api_student_* portalcambodia dumps QR · Verification No DTEF / NMDS / ssb

Certificate QR → Verification (Registry)

Standup 7–8 Oct 2026: Vara shared QR System + Verification source packs. CMS call site already in cambodia/registry/qrcode_gen*.php. Full Pages write-up: certificate-qr.html · Markdown: cambodia-qr-system.md.

sequenceDiagram
  participant REG as Registry qrcode_gen.php
  participant QR as qr.limkokwing.net
  participant VER as verification.limkokwing.net
  participant PUB as Certificate PNG

  REG->>REG: short_code KHM-PNH_StdProgramID
  REG->>REG: AES token from StdProgramID
  REG->>QR: POST /api/create_qrcode_api
  Note over REG,QR: name · LUCT · Certificate · short_code · verify URL
  QR-->>REG: JSON Qrcode base64 PNG
  REG->>PUB: StudentID_ProgramCode.png
  Note over VER: Public scan target
/cambodia/token

Create API: https://qr.limkokwing.net/api/create_qrcode_api (older scripts also use qrcode.limkokwing.net). Verify: https://verification.limkokwing.net/cambodia/…. Full pack inventory: certificate-qr.html (QR SaaS CI4 + qrcode.sql; Verification → GetStudentCertInfo).

Portal export night path

Evidence: cambodiabatch/portal.sql (+ registry / bursary / examination / transcript) and cambodiabatchnight.sh. Script embeds DB credentials — present in pack, do not republish.

sequenceDiagram
  participant Cron as cambodiabatchnight.sh
  participant SQL as batch SQL files
  participant SoR as campus2_cambodia
  participant Portal as portalcambodia

  Cron->>SQL: Run portal / registry / bursary / exam / transcript
  SQL->>SoR: Read operational slices
  SQL->>Portal: Dump / refresh *_cam / *_cambodia projections
  Note over Cron: Credentials in night script — not documented here
          

Integration catalogue

IntegrationDirectionEvidenceRaisd note
Assist / sponsorship Internal ledger r_assistprovider, r_assistscheme*, b_assistbilling*; SP literal provider code Limkokwing CAP-48 campus-local; do not reuse NMDS / TEF / ssb clients
Portal API SP hooks Read (SP) api_student_login_info, api_student_program_info, api_student_semester_info, api_student_module_info, api_faculty_list, api_faculty_program_list Campus-keyed ACL candidates for CAP-53 / M5
Portal sync tables SoR → projection portal_student_*_cambodia (5) + r_studentcert_cambodia Suffix _cambodia — same pattern as Lesotho / BW / SZ
Secondary portal DB Batch dump portalcambodia via cambodiabatch/ Ops path; Raisd Live should own durable export via Portal API, not shell credentials
Government scholarship POST — Not found (no r_scholarshipapp) Do not invent; Botswana owns TEF pattern
api-service tree — Absent in this pack Contrast Eswatini api-service/; use DB api_* + desks only
Certificate QR SaaS CMS → external registry/qrcode_gen*.php → qr.limkokwing.net/api/create_qrcode_api M5 campus integration; not Lesotho M4 Applicant DEMO letters. See cambodia-qr-system.md
Public Verification site Scan target verification.limkokwing.net/cambodia/{token} Token = AES of StdProgramID; Verification source zip shared 8 Oct (local extract pending)

5. Physical ERD (campus2_cambodia)

Logical view of real MySQL tables from the Cambodia structure dump. Not the Raisd canonical model — CAP-53 translates; it does not clone these tables.

Contrast Raisd ERD at ../erd.html. Cambodia uses LUCT app_* admissions (like Botswana), thick w_* life/acco (~52), and campus-suffixed portal tables — not Sierra Leone ac_* / thin sa_*.

5.1 Core student

r_student · programme · semester · module · portal

Same LUCT spine; portal projections use *_cambodia suffix.

erDiagram
  r_student {
    int SIdx PK
    int StudentID UK
    string StudentNo
  }
  r_stdpersonal {
    int StudentID PK
  }
  r_stdprogram {
    int StdProgramID PK
    int SIdx FK
    int ProgramID FK
  }
  r_stdsemester {
    int StdSemesterID PK
    int StdProgramID FK
    int TermID FK
  }
  r_stdmodule {
    int StdModuleID PK
    int StdSemesterID FK
    int ModuleID FK
  }
  f_program {
    int ProgramID PK
    string ProgramCode
  }
  portal_student_cambodia {
    int StudentID
  }
  r_studentcert_cambodia {
    int StudentID
  }
  r_student ||--|| r_stdpersonal : StudentID
  r_student ||--o{ r_stdprogram : SIdx
  r_stdprogram ||--o{ r_stdsemester : StdProgramID
  r_stdsemester ||--o{ r_stdmodule : StdSemesterID
  r_stdprogram }o--|| f_program : ProgramID
  r_student ||--o| portal_student_cambodia : projects
  r_student ||--o{ r_studentcert_cambodia : certs
          

5.2 Admissions & offer

app_* → offer → student

Ten app_* tables including online form; offer letters on registry.

erDiagram
  app_applicationform {
    int ApplicationID PK
  }
  app_applicationformonline {
    int ApplicationID PK
  }
  app_applicationeducation {
    int ApplicationID FK
  }
  app_docfile {
    int DocFileID PK
    int ApplicationID FK
  }
  r_stdofferletter {
    int StudentID FK
  }
  r_student {
    int SIdx PK
    int StudentID UK
  }
  app_applicationform ||--o| app_applicationformonline : online
  app_applicationform ||--o{ app_applicationeducation : education
  app_applicationform ||--o{ app_docfile : docs
  app_applicationform ||--o| r_student : enrols
  r_student ||--o{ r_stdofferletter : StudentID
          

5.3 Finance & assist

Assist schemes · billing · no TEF queue

b_assistbilling* + r_assistscheme*; no r_scholarshipapp.

erDiagram
  r_assistprovider {
    int AssistProviderID PK
    string AssistProviderCode
  }
  r_assistscheme {
    int AssistSchemeID PK
    int AssistProviderID FK
  }
  r_assistschemedetail {
    int AssistSchemeID FK
  }
  b_assistbilling {
    int AssistBillingID PK
  }
  b_assistbillingdetail {
    int AssistBillingID FK
  }
  rep_scholarship {
    string ScholarshipKey
  }
  r_assistprovider ||--o{ r_assistscheme : AssistProviderID
  r_assistscheme ||--o{ r_assistschemedetail : AssistSchemeID
  b_assistbilling ||--o{ b_assistbillingdetail : AssistBillingID
  r_assistprovider -.-> rep_scholarship : reported_via
          

5.4 Student life & accommodation

Thick w_* welfare / dorm / room

~52 w_* tables — thicker than Eswatini; acco primarily on w_dorm / w_room* / w_occupant.

erDiagram
  r_student {
    int SIdx PK
    int StudentID UK
  }
  w_application {
    int ApplicationID PK
    int StudentID FK
  }
  w_insurance {
    int StdInsuranceID PK
    int StudentID FK
  }
  w_insuranceclaim {
    int InsuranceClaimID PK
    int StdInsuranceID FK
  }
  w_dorm {
    int DormID PK
  }
  w_room {
    int RoomID PK
    int DormID FK
  }
  w_occupant {
    int OccupantID PK
    int RoomID FK
    int StudentID FK
  }
  w_charges {
    int ChargeID PK
    int OccupantID FK
  }
  r_student ||--o{ w_application : StudentID
  r_student ||--o{ w_insurance : StudentID
  w_insurance ||--o{ w_insuranceclaim : StdInsuranceID
  w_dorm ||--o{ w_room : DormID
  w_room ||--o{ w_occupant : RoomID
  r_student ||--o{ w_occupant : StudentID
  w_occupant ||--o{ w_charges : OccupantID
          

6. Data-flow diagrams (DFD)

How data moves between external actors, Cambodia desks, campus2_cambodia, nightly cambodiabatch, and secondary portalcambodia — without a government scholarship endpoint.

6.1 Context diagram (Level 0)

External entities ↔ Cambodia CMS

Staff desks + lecturer/IH share one SoR; portal export is a second MySQL schema.

flowchart TB
  APPLICANT([Applicant / agent])
  STUDENT([Student])
  LECTURER([Lecturer])
  STAFF([Registry · Faculty · Bursary · Services])
  PORTDB([portalcambodia])
  CMS[["Cambodia CMS
PHPMaker desks + campus2_cambodia"]] APPLICANT -->|application / docs| CMS STAFF -->|operational writes| CMS LECTURER -->|marks / attendance| CMS CMS -->|invoices / letters / portal data| STUDENT CMS -->|nightly batch dumps| PORTDB

6.2 Admissions → registry

Online / staff app → offer → enrol

SPs: AfterInsertApplicationForm, FetchOnlineApplication*, FetchOfferLetters, OnlineRegNotification.

flowchart LR
  EXT([Applicant]) --> MKT[Marketing desk]
  MKT --> APP[(app_applicationform*)]
  APP --> REG[Registry desk]
  REG --> OFF[(r_stdofferletter)]
  REG --> STU[(r_student / r_stdprogram)]
  STU --> FAC[Faculty structures]
  STU --> BUR[Bursary fee plan]
          

6.3 Academic term

Structure → modules → results

StudentConfirmModule, r_Update_Semester, examination; certs via r_studentcert_cambodia / GetStudentCertInfo.

flowchart LR
  SET[Setup / Faculty
term · f_program*] --> ENR[(r_stdmodule)] ENR --> TT[Timetable / attendance] ENR --> LEC[Lecturer / IH marks] LEC --> RES[(results / transcript)] RES --> CERT[(r_studentcert_cambodia)] RES --> REP[Reporting]

6.4 Finance & assist

Ledger + Assist only

No TEF admission queue — contrast Botswana DTEF. Assist provider code seen: Limkokwing.

flowchart TB
  STU[(r_student)] --> BUR[Bursary desk]
  BUR --> LED[(b_* / b_assistbilling*)]
  LED --> SCH[[rep_scholarship]]
  STU --> SCHEME[(r_assistscheme*)]
  SCHEME --> LED
  BATCH[[cambodiabatch bursary.sql]] -.-> LED
          

6.5 Batch dumps to portalcambodia

cambodiabatch + api_* / portal_*_cambodia

Ops scripts (not committed) refresh portal/registry/bursary/exam/transcript slices into portalcambodia; api_student_* SPs feed external clients from SoR.

flowchart LR
  BATCH[[cambodiabatch
portal · registry · bursary · exam · transcript]] --> DB[(campus2_cambodia)] BATCH --> PDB[(portalcambodia
*_cam / *_cambodia)] DB --> API[["api_student_* / api_faculty_*"]] DB --> PORT[(portal_student_*_cambodia)] API -.-> EXT([Future Portal API / M5]) PORT -.-> EXT PDB -.-> EXT

7. Database — tables, procedures, triggers & views

Derived from campus2_cambodia structure dumps CMS_Cambodia_Tables|Views|Procedures|Triggers_*.sql (7 Oct 2026). Legacy URL database.html redirects here. Secondary export schema: portalcambodia (batch only).

481 tables 296 views 46 SPs 2 functions 83 triggers

Stored procedures (46) — highlights

GroupExamples
Portal / APIapi_student_login_info, api_student_module_info, api_student_program_info, api_student_semester_info, api_faculty_list, api_faculty_program_list
Online applicationsAfterInsertApplicationForm, FetchOnlineApplication*, InsertOnlineAppPersonalInfo, UpdateOnlineApp*, OnlineAppEmailNotification, OnlineRegNotification
Finance / billingb_Update_Student, b_Update_Student_All, b_Update_Accommodation, b_Update_Student_Mark, sp_payment_verification_insert
Registry / academicFetchOfferLetters, r_Update_Semester, StudentConfirmModule, examination, GetStudentCertInfo, fetchCAFDetails
Student portal helperssp_student_os_info, sp_student_visaexp, sp_student_bank_info*, sp_onlinenrollment_*

Functions (2): Cap_First, ExtractNumberFromString. Catalogs: _proc-catalog.txt · _function-catalog.txt

Views (296)

Large reporting surface — population, finance, accommodation, local Cambodia scratch views.

Machine extract: _view-catalog.txt

Domain table signals

SignalApprox.Examples
r_* student~117r_student, r_stdmodule, r_stdofferletter, r_assist*
f_* academic~76f_program, f_module, f_modulemat*
temp_* scratch~66Temp / dated scratch tables
w_* welfare / acco~52w_dorm, w_room, w_occupant, w_insurance*
rep_* reports~47rep_curtermpop_camb, rep_scholarship
b_* finance~34b_assistbilling*, payment / receipt family
s_* security / setup~19s_staff, user levels
app_* admissions~10app_applicationform, app_applicationformonline
ih_* in-house~10ih_student, ih_stdattendance, ih_stdmark
portal_*5portal_student_*_cambodia

Full lists: _table-catalog.txt · _trigger-catalog.txt (83) · CATALOG.md

CAP-53 note

Cambodia confirms another live LUCT schema with campus-suffixed portal tables, api_* procedures, and a secondary portalcambodia export DB. Portal API campus configuration (CAP-53) must stay campus-keyed (CAMBODIA); do not assume Cyberjaya or Lesotho table names match 1:1.

8. Raisd mapping

Cambodia is an M5 expansion / evidence campus — not Lesotho M4 SoR. Portal API must stay campus-keyed (CAP-53 key CAMBODIA.

Desks → Raisd portals

Staff desks stay on CMS MySQL; Raisd portals never talk to campus MySQL directly.

flowchart TB
  subgraph KH["LUCT Cambodia CMS"]
    DESKS[Marketing · Registry · Faculty · Bursary
Lecturer · Services · Accommodation · Setup · Reporting] DB[("campus2_cambodia")] PDB[("portalcambodia")] DESKS --> DB BATCH[cambodiabatch] --> DB BATCH --> PDB end subgraph Raisd["Raisd — M5+"] API[Portal API / ACL] AP[Applicant] SP[Student] LP[Lecturer] ST[Staff] AP --> API SP --> API LP --> API ST --> API API -.->|"CAP-53 CAMBODIA"| DB end
CMS surfaceRaisd portalFlag
app_* admissionsApplicantReuse LUCT app_* mental model (not SL ac_*)
Registry / facultyStudent + StaffReuse r_* / f_*; certs via r_studentcert_cambodia
Bursary AssistStudent Finance / Staff BursaryLocal Assist (Limkokwing) — no NMDS / TEF / ssb flag
Services / accommodationStaff ServicesThick w_* — earlier life CAP surfaces than thin EMS campuses
portal_*_cambodia + batchPortal API CAP-53Campus key CAMBODIA; replace shell-credential batch for Live
ACC / MoEYS (KH-*)Compliance trackSeparate SDD-09 — not solved by CMS desks alone

9. Campus comparison

Six inventoried dumps. Lesotho is M4 acceptance SoR; Cyberjaya remains the historic LUCT depth reference; Cambodia is a mid-size LUCT sibling (~68% table-name overlap with Botswana) for M5 evidence.

Lesotho = M4 SoR Cambodia = M5 evidence Assist ≠ NMDS ≠ DTEF ≠ ssb

Product family

Shared LUCT/EMS DNA; campus-local funding and portal export shapes differ.

flowchart TB
  FAMILY["LUCT / ICA EMS family
PHPMaker · r_/f_/b_"] CYB["Cyberjaya · cmscbj"] LS["Lesotho · campus2_lesotho · M4"] BWA["Botswana · cmsbotswana · DTEF"] SZ["Eswatini · campus2_eswatini · ssb"] KH["Cambodia · campus2_cambodia · Assist"] SLE["Sierra Leone · ems_sierraleone · ac_*"] RAISD["Raisd portals · CAP-53"] FAMILY --> CYB FAMILY --> LS FAMILY --> BWA FAMILY --> SZ FAMILY --> KH FAMILY --> SLE LS ==>|M4 acceptance| RAISD CYB -.->|depth reference| RAISD BWA -.->|M5| RAISD SZ -.->|M5| RAISD KH -.->|M5| RAISD SLE -.->|M5| RAISD
Aspect Cyberjaya Lesotho Botswana Eswatini Cambodia Sierra Leone
Dump / pack 23 Sep 2026 5 Oct 2026 24 Sep 2026 5 Oct 2026 7 Oct 2026 23 Sep 2026
Database cmscbj campus2_lesotho cmsbotswana campus2_eswatini campus2_cambodia (+ portalcambodia) ems_sierraleone
Tables ~1,942 369 713 472 481 345
Views large (inventory) 407 330 296 9
SPs / fn / triggers ~318 / — / ~239 (inventory) / 0 trig file 46 / 15 / 157 53 / 3 / 70 46 / 2 / 83 6 / — / 91
Desk path cyberjaya/campus/ Lesotho pack botswana/campus/ eswatini/campus/ cambodia/<desk>/ (shell links ./campus/) sierraleone/<desk>/
Admissions app_* app_* app_* app_* app_* (10) ac_*
Funding / gov Assist NMDS DTEF → TEF ssb Assist Limkokwing Local assist
Portal hooks portal_*_cyberjaya portal_*_lesotho portal_*_botswana portal_*_eswatini portal_*_cambodia + batch DB Not in dump
api-service tree — — — Present Absent —
Name overlap vs KH ~67% ~65% ~68% ~62% — ~5%
Raisd role Depth reference M4 SoR M5 M5 (may follow LS) M5 evidence M5 EMS pattern
Pages hub old-cms/ old-cms-lesotho/ old-cms-botswana/ old-cms-eswatini/ this page old-cms-sierra-leone/