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.
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
| Area | Desk | What happens |
|---|---|---|
| Visa / welfare / insurance | services/ | Thick w_* (~52) — insurance, med, applications; thicker than Eswatini |
| Hostel | accommodation/ | w_dorm / w_room* / w_occupant / charges (acco mostly on w_*, not a large acc_* forest) |
| IH / short courses | ih/ | ih_student, attendance, marks, sessions |
| Notices | notice/ | Campus bulletins |
| Batch / portal | cambodiabatch/ | Nightly SQL → portalcambodia (*_cam / *_cambodia) — ops artefacts, not committed |
| Portal hooks | DB routines | api_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>/).
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
| Integration | Direction | Evidence | Raisd 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.
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).
Stored procedures (46) — highlights
| Group | Examples |
|---|---|
| Portal / API | api_student_login_info, api_student_module_info, api_student_program_info, api_student_semester_info, api_faculty_list, api_faculty_program_list |
| Online applications | AfterInsertApplicationForm, FetchOnlineApplication*, InsertOnlineAppPersonalInfo, UpdateOnlineApp*, OnlineAppEmailNotification, OnlineRegNotification |
| Finance / billing | b_Update_Student, b_Update_Student_All, b_Update_Accommodation, b_Update_Student_Mark, sp_payment_verification_insert |
| Registry / academic | FetchOfferLetters, r_Update_Semester, StudentConfirmModule, examination, GetStudentCertInfo, fetchCAFDetails |
| Student portal helpers | sp_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.
- Local scratch:
rep_curtermpop_camb,rep_nostudents_active_camb(+*_camsiblings) - Scholarship report:
rep_scholarship - Academic / registry:
r_std*views, attendance / immigration helpers - Accommodation:
w_room*,w_occupant*,w_checkout*views
Machine extract: _view-catalog.txt
Domain table signals
| Signal | Approx. | Examples |
|---|---|---|
r_* student | ~117 | r_student, r_stdmodule, r_stdofferletter, r_assist* |
f_* academic | ~76 | f_program, f_module, f_modulemat* |
temp_* scratch | ~66 | Temp / dated scratch tables |
w_* welfare / acco | ~52 | w_dorm, w_room, w_occupant, w_insurance* |
rep_* reports | ~47 | rep_curtermpop_camb, rep_scholarship |
b_* finance | ~34 | b_assistbilling*, payment / receipt family |
s_* security / setup | ~19 | s_staff, user levels |
app_* admissions | ~10 | app_applicationform, app_applicationformonline |
ih_* in-house | ~10 | ih_student, ih_stdattendance, ih_stdmark |
portal_* | 5 | portal_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 surface | Raisd portal | Flag |
|---|---|---|
app_* admissions | Applicant | Reuse LUCT app_* mental model (not SL ac_*) |
| Registry / faculty | Student + Staff | Reuse r_* / f_*; certs via r_studentcert_cambodia |
| Bursary Assist | Student Finance / Staff Bursary | Local Assist (Limkokwing) — no NMDS / TEF / ssb flag |
| Services / accommodation | Staff Services | Thick w_* — earlier life CAP surfaces than thin EMS campuses |
portal_*_cambodia + batch | Portal API CAP-53 | Campus key CAMBODIA; replace shell-credential batch for Live |
| ACC / MoEYS (KH-*) | Compliance track | Separate 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.
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/ |