Cyberjaya CMS — end-to-end functional flow
Full campus lifecycle for LUCT Cyberjaya (MYS-CYB, DB
cmscbj) — the ADR-1 launch system of record.
Package CMS_Cyberjaya_Source_Codes_&_DB_Structure_23_09_2026.
Campus UI brand [MYS-CYB]. Raisd portals sit in front via Portal API →
CAP-53 ACL; staff desks stay on CMS MySQL.
Longer-term unified CMS sits under M5+ —
not Admissions launch rewrite. PHPMaker core plus Laravel payment/ and
icupdpa/.
campus2_cyberjaya, portalcyberjaya.
cyberjaya/campus/<desk>/, plus Laravel sub-apps
payment/ and icupdpa/. Live classes use Adobe Connect tables and
classroom.limkokwing.net streaming. Batch ops live in cyberbatch/
and CYBERJAYA-SCRIPT/. No TEF / DTEF government scholarship API
(that pattern is Botswana-only).
1. End-to-end campus lifecycle
One shared MySQL SoR. Staff desks own writes; thin student/lecturer PHPMaker UIs,
api_student_* / portal_r_*_cyberjaya hooks, Laravel payment/ICU,
and cyberbatch sit beside them. No government TEF sync.
Student journey across desks
Marketing → Registry/admit → Enrol → Faculty/Lecturer study → Bursary → Services/EMGS → Accommodation → Reporting/cyberbatch.
flowchart LR
subgraph Recruit["1 · Recruit"]
MKT[Marketing
app_* / agents]
CDU[CDU / AQA
entry rules]
end
subgraph Admit["2 · Admit"]
REG1[Registry
offer letters]
APP[Online / staff
application]
end
subgraph Enrol["3 · Enrol"]
REG2[Registry
r_student / programme]
FAC1[Faculty
structure / modules]
end
subgraph Study["4 · Study"]
FAC2[Faculty
timetable / results]
LEC[Lecturer
marks / attendance]
ADOBE[Adobe Connect
classroom.limkokwing.net]
end
subgraph Money["5 · Finance"]
BUR[Bursary
invoice / pay]
PAY[Laravel payment]
end
subgraph Life["6 · Student life"]
SVC[Services
EMGS / KDN / visa]
ACC[Accommodation]
LIB[Library]
end
subgraph Close["7 · Close / report"]
REP[Reporting]
BATCH[cyberbatch]
end
MKT --> APP
CDU -.-> APP
APP --> REG1
REG1 --> REG2
FAC1 --> REG2
REG2 --> FAC2
FAC2 --> LEC
FAC2 --> ADOBE
REG2 --> BUR
BUR --> PAY
REG2 --> SVC
REG2 --> ACC
REG2 --> LIB
FAC2 --> REP
BUR --> REP
BATCH -.-> REP
2. Functional breakdown by desk
PHPMaker apps under cyberjaya/campus/<desk>/ plus Laravel add-ons — ADR-1 SoR.
Functional structure
Domains map to folders; all share cmscbj.
mindmap root((Cyberjaya CMS
MYS-CYB · ADR-1)) Academic registry faculty lecturer lec cdu Student life services accommodation stdfile studentfile siu library Commercial bursary marketing payment Compliance icu icupdpa cmsadminsetup cms_inquiry Cross-cutting reporting training studentrecords cyberbatch
Module catalogue
| Desk | Title | Primary job | Key tables / signals |
|---|---|---|---|
registry/ |
Registry Management System 1.0 | Applications, student register, terms, forms, letters, graduation, transcripts, KDN/eIPTS | app_*, r_student, r_stdprogram, r_stdofferletter* |
faculty/ |
Faculty Management System 1.0 | Schools, modules, lecturers, classrooms, classes, exam timetable, inventory, senate | f_program, f_module, f_class, f_lecturer, f_term |
bursary/ |
Bursary Management System 1.0 | Fee catalog, invoices/receipts, payment verification, visa fees, incentives, outstanding | b_statement*, b_invoice*, b_payment*, b_receipt*, b_Update_* |
lecturer/ |
Lecturer Portal 1.0 | Notices, profile, supervised students, module view, forms, streaming link | f_modulemat, Adobe Connect link |
marketing/ |
Marketing Management System 1.0 | Applications, pre-admission, agents, incentives, recruitment / online agent reports | app_applicationform*, m_agent, Agent* SPs |
services/ |
Student Services Management System 1.0 | Visa/VAL/EMGS, medical, insurance, international status, SSD letters | w_visa, r_stdimmigration, EMGS/SSD/KDN tables |
accommodation/ |
Accommodation System 1.0 | Dorms, rooms, pricing, tenants, breakfast card | acc_dorm, acc_room, acc_occupant |
cdu/ |
AQA Management System 1.0 | Entry requirements, English/foreign quals, MQA/KPT, programme compliance | Entry / accreditation desks, ier_* |
icu/ |
Internal Compliance Unit | Staff list, PDPA documents / compliance | ICU menus + Laravel PDPA |
siu/ |
Student Info Update System | Controlled student-info update, letters, transcripts | SIU update paths |
library/ |
Library 1.0 | Population view, eLibraries | r_elibrary |
reporting/ |
Campus Reporting System | Cross-desk reports (finance, attendance, enrolment, scholarships, portal status) | Report views / extracts |
studentrecords/ |
Students Records | Student list views | r_student list surfaces |
stdfile/ · studentfile/ |
Student File System | Document / file dossiers (KDN, MyQuest, SETARA variants) | Document dossier trees |
lec/ |
Limkokwing English Center 2.0 | LEC students, marks, batch enrolment, summer camp | LEC enrolment / marks |
training/ |
Training 1.0 | Staff training enrolment / requests | t_enrollment, t_enrollrequest |
cmsadminsetup/ |
Admin setup | User levels / system setup (PHPMaker admin) | Security / user-level tables |
cms_inquiry/ |
Inquiry | CMS inquiry desk | Inquiry forms |
payment/ |
Payment (Laravel) | Online / counter payment receipts, parking-related objects | Laravel receipt / collection |
icupdpa/ |
ICU PDPA (Laravel) | PDPA compliance workflows | PDPA document workflows |
3. Core process flows
3.1 Admissions & registry
Agent / online application → enrol
Marketing/Registry desks + Agent* stored procedures.
flowchart LR
Agent[Agent / Online app] --> Form[app_applicationform]
Form --> Docs[app_document / app_docfile]
Docs --> Review[Registry / Marketing review]
Review --> Pre[app_preoffer]
Pre --> Offer[r_stdofferletter]
Offer --> Enrol[Enrol r_student]
Enrol --> Prog[r_stdprogram]
3.2 Academic term cycle
ProgramsAllowedToRegister → modules → fees / marks
Atomic with triggers; finish with bursary student refresh.
flowchart TD
Gate[ProgramsAllowedToRegister] --> Sem[Insert/update r_stdsemester]
Sem --> Mod[Insert/update r_stdmodule]
Mod --> Trig[Fees / registration triggers]
Trig --> Upd[b_Update_Student]
Upd --> Out[AccOutstanding / CGPA consistency]
Mod --> Att[r_stdattendance / Adobe]
Mod --> Mark[b_Update_Student_Mark]
Do not bypass b_Update_Student (and related mark/billing variants) when mutating
registration or balances — overnight batch and desk UIs assume these procedures keep
outstanding and academic aggregates consistent.
3.3 Finance & payment
Proof → b_paymentverification → receipts
Proof ≠ payment. Bursary verifies; Laravel payment app may issue receipts.
flowchart LR
Stu[Student uploads proof] --> PV[b_paymentverification]
PV --> Staff[Bursary review]
Staff -->|approve| Rec[b_receipt / b_receiptdetail]
Staff -->|reject| Back[Student notified]
Rec --> Stmt[b_statement / AccOutstanding]
PayApp[Laravel payment/] -.-> Rec
3.4 Student life — visa / accommodation
Services EMGS/KDN + housing
Services desk owns immigration ops; accommodation owns dorms/occupancy.
flowchart TB
STU[(r_student)] --> SSD[Services desk]
SSD --> VISA[(w_visa / r_stdimmigration)]
SSD --> EMGS[EMGS STAR / VAL / KDN reports]
STU --> ACC[Accommodation desk]
ACC --> ROOM[(acc_dorm / acc_room / acc_occupant)]
BATCH[cyberbatch VisaReport / Accommodation] -.-> VISA
BATCH -.-> ROOM
4. Integrations
External and cross-system touchpoints in the Cyberjaya package. No TEF / DTEF government scholarship admission API (Botswana-only pattern).
| Integration | Evidence | Role / CAP note |
|---|---|---|
api_student_* / api_faculty_* |
6 named SPs in dump | Legacy hooks — discovery seed for CAP-53, not Raisd OpenAPI |
portal_r_*_cyberjaya |
Student / programme / semester snapshot tables | Nightly portal sync dumps; login gating via portal.sql |
classroom.limkokwing.net |
Adobe Connect tables + lecturer streaming link | Live class attendance / recordings |
| cmssupport email | Outbound Limkokwing CMS-support patterns | Do not hard-wire support hosts into Raisd |
| EMGS / KDN | Services desk + VisaReport batch; ~205 immigration-related table names | Malaysia international-student ops — campus-local |
Laravel payment/ |
cyberjaya/campus/payment/ |
Receipts / collection beside b_* ledger |
Laravel icupdpa/ |
cyberjaya/campus/icupdpa/ |
PDPA compliance workflows |
cyberbatch nightly |
cyberjayabatchnight*.sh |
Stop httpd → domain SQL → portal dump → start |
| S3 / backup scripts | CYBERJAYA-SCRIPT/ |
Ops backups — not feature surface |
| TEF / DTEF | Absent | Do not invent; Botswana owns tef.gov.bw pattern |
5. Physical ERD
Logical view of real MySQL tables from the Cyberjaya structure dump. Physical keys only — not the Raisd canonical model. Contrast Raisd ERD. Legacy URL erd.html redirects here.
5.1 Core student
r_student · personal · programme · semester · module
r_student is wide (100+ columns), including AccOutstanding and LoginActive.
erDiagram
r_student {
int StudentID PK
string LoginActive
decimal AccOutstanding
string StdPortalActive
}
r_stdpersonal {
int StudentID PK, FK
}
r_stdprogram {
int StdProgramID PK
int StudentID 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
}
r_student ||--|| r_stdpersonal : "StudentID"
r_student ||--o{ r_stdprogram : "StudentID"
r_stdprogram ||--o{ r_stdsemester : "StdProgramID"
r_stdsemester ||--o{ r_stdmodule : "StdSemesterID"
5.2 Admissions
Application → documents → offer → enrol
Also: app_applicationformonline, app_preoffer.
erDiagram
app_applicationform {
int ApplicationID PK
}
app_document {
int ApplicationID FK
}
app_preoffer {
int ApplicationID FK
}
r_stdofferletter {
int StudentID FK
int ApplicationID FK
}
r_student {
int StudentID PK
}
app_applicationform ||--o{ app_document : "ApplicationID"
app_applicationform ||--o| app_preoffer : "ApplicationID"
app_applicationform ||--o| r_stdofferletter : "ApplicationID"
r_student ||--o{ r_stdofferletter : "StudentID"
5.3 Academic (faculty structures)
Programme · module · class · term · lecturer · materials
Student registrations reference these via ProgrammeID / ModuleID / TermID.
erDiagram
f_program {
int ProgramID PK
}
f_module {
int ModuleID PK
}
f_class {
int ClassID PK
int ModuleID FK
int TermID FK
}
f_term {
int TermID PK
}
f_lecturer {
int LecturerID PK
}
f_modulemat {
int ModuleID FK
}
f_program ||--o{ f_module : "curriculum"
f_module ||--o{ f_class : "ModuleID"
f_term ||--o{ f_class : "TermID"
f_lecturer ||--o{ f_class : "teaches"
f_module ||--o{ f_modulemat : "ModuleID"
5.4 Finance (bursary)
Statement · invoice · payment · receipt · verification
Laravel payment/ sits beside these ledger objects.
erDiagram
r_student {
int StudentID PK
decimal AccOutstanding
}
b_statement {
int StudentID FK
}
b_invoicedetail {
int StudentID FK
}
b_payment {
int StudentID FK
}
b_receipt {
int StudentID FK
}
b_paymentverification {
int StudentID FK
}
r_student ||--o{ b_statement : "StudentID"
r_student ||--o{ b_invoicedetail : "StudentID"
r_student ||--o{ b_payment : "StudentID"
r_student ||--o{ b_receipt : "StudentID"
r_student ||--o{ b_paymentverification : "StudentID"
5.5 Attendance
r_stdattendance · f_attend*
Also Adobe Connect attendance tables for streaming classes.
erDiagram
r_student {
int StudentID PK
}
r_stdmodule {
int StdModuleID PK
int StudentID FK
}
r_stdattendance {
int StudentID FK
int StdModuleID FK
}
f_attenddatemod {
int ModuleID FK
}
r_student ||--o{ r_stdattendance : "StudentID"
r_stdmodule ||--o{ r_stdattendance : "StdModuleID"
f_attenddatemod ||--o{ r_stdattendance : "session"
5.6 Immigration
w_visa · r_stdimmigration
Services desk also owns EMGS/KDN/SSD reporting tables (~205 immigration-related names in dump).
erDiagram
r_student {
int StudentID PK
}
w_visa {
int StudentID FK
}
r_stdimmigration {
int StudentID FK
}
r_student ||--o{ w_visa : "StudentID"
r_student ||--o| r_stdimmigration : "StudentID"
5.7 Accommodation
acc_dorm · acc_room · acc_occupant
Full housing ops including checkout, extend occupancy, breakfast card.
erDiagram
acc_dorm {
int DormID PK
}
acc_room {
int RoomID PK
int DormID FK
}
acc_occupant {
int OccupantID PK
int RoomID FK
int StudentID FK
}
r_student {
int StudentID PK
}
acc_dorm ||--o{ acc_room : "DormID"
acc_room ||--o{ acc_occupant : "RoomID"
r_student ||--o{ acc_occupant : "StudentID"
5.8 Portal sync & login gating
portal_r_student_cyberjaya + LoginActive
Also programme/semester snapshot tables; r_studentportaldoc, r_studentblockportal.
erDiagram
r_student {
int StudentID PK
string LoginActive
string StdPortalActive
decimal AccOutstanding
}
portal_r_student_cyberjaya {
int StudentID PK
}
portal_r_studentprogram_cyberjaya {
int StdProgramID PK
int StudentID FK
}
portal_r_studentprogramsemester_cyberjaya {
int StdSemesterID PK
int StdProgramID FK
}
r_student ||--o| portal_r_student_cyberjaya : "sync"
r_student ||--o{ portal_r_studentprogram_cyberjaya : "sync"
portal_r_studentprogram_cyberjaya ||--o{ portal_r_studentprogramsemester_cyberjaya : "sync"
Database names also seen: campus2_cyberjaya, portalcyberjaya.
Legacy portal sync is not the Raisd OpenAPI contract — use as discovery for
CAP-53 only.
6. Data-flow diagrams (DFD)
How data moves between external actors, Cyberjaya desks, cmscbj,
portal sync, EMGS/KDN, and nightly batch — without a government scholarship endpoint.
Legacy URL flows.html redirects here.
6.1 Context diagram (Level 0)
External entities ↔ Cyberjaya CMS
Staff desks share one SoR; portals and batch refresh beside them.
flowchart TB APPLICANT([Applicant / agent]) STUDENT([Student]) STAFF([Registry · Faculty · Bursary · Services · …]) EMGS([EMGS / KDN]) CLASS([classroom.limkokwing.net]) SUPPORT([cmssupport email]) CMS[["Cyberjaya CMS
PHPMaker + Laravel + cmscbj"]] APPLICANT -->|application / docs| CMS STUDENT -->|portal / proof| CMS STAFF -->|operational writes| CMS CMS -->|letters / statements| APPLICANT CMS -->|LoginActive / sync| STUDENT CMS -->|visa / status| EMGS CMS -->|streaming attendance| CLASS CMS -->|email / push| SUPPORT
6.2 Admissions → registry
Agent / online app → offer → enrol
Triggers on app_applicationform / r_stdofferletter.
flowchart LR
EXT([Applicant / Agent]) --> APP[Marketing / Registry]
APP --> FORM[(app_applicationform*)]
FORM --> DOC[(app_document)]
DOC --> OFF[(r_stdofferletter)]
OFF --> STU[(r_student / r_stdprogram)]
STU --> ACAD[Faculty structures]
STU --> FIN[Bursary fee plan]
6.3 Academic term
Structure → modules → attendance → results
ProgramsAllowedToRegister, b_Update_Student_Mark*, Adobe attendance.
flowchart LR FAC[Faculty / Lecturer
term · structure] --> ENR[(r_stdmodule)] ENR --> TT[Timetable / attendance] ENR --> ASS[Assessment marks] ASS --> RES[(results / CGPA)] RES --> REP[Reports / BOE] TT -.-> ADOBE[Adobe Connect]
6.4 Finance & payment
Ledger path + Laravel payment
No TEF admission queue — contrast Botswana DTEF.
flowchart TB
STU[(r_student)] --> BUR[Bursary desk]
BUR --> LED[(b_invoice / b_payment / b_receipt)]
LED --> PV[b_paymentverification]
PAY[Laravel payment/] -.-> LED
BUR --> SP[["b_Update_Student*"]]
SP --> STU
6.5 Nightly batch (cyberbatch)
cyberjayabatchnight*.sh
Order matters — bursary and portal gating depend on earlier refreshes.
flowchart TD
A[Stop httpd] --> B[Registry jobs]
B --> C[Attendance]
C --> D[Examination]
D --> E[Accommodation]
E --> F[Bursary]
F --> G[SSD]
G --> H[VisaReport]
H --> I[portal]
I --> J[portalcontact]
J --> K[report]
K --> L[cleanup]
L --> M[Start httpd]
M --> N[mysqldump portal sync exports]
7. Database — tables, procedures, triggers & views
Derived from cmscbj structure dump plus SP / Triggers / Views SQL
(CMS_Cyberjaya_SP_23092026.sql, CMS_Cyberjaya_Triggers_23092026.sql).
Legacy URL database.html redirects here.
Domain table signals
| Signal | Approx. | Examples |
|---|---|---|
| Temp / scratch | ~625 | temp_* (~395), tmp_* (~230) |
Student r_* | ~233 | r_student, r_stdpersonal, r_stdsemester, r_stdmodule |
Misc / legacy tbl_* | ~165 | historical / utility tables |
Academic f_* | ~135 | f_program, f_module, f_class, f_lecturer |
Reports rep_* | ~69 | population / enrolment extracts |
Finance b_* | ~66 | b_invoice*, b_payment*, b_receipt* |
Visa / welfare w_* | ~49 | w_visa, insurance, medical |
| KDN / eIPTS | ~87 | kdn_* (~47), eipts* (~40) |
Survey / notices s_* | ~39 | s_notice, s_questionnaire, s_letter |
Admissions app_* | ~38 | app_applicationform, app_preoffer, app_document |
Accommodation acc_* | ~22 | acc_dorm, acc_room, acc_occupant |
| Adobe Connect / portal sync | few | attendance · portal_r_student_cyberjaya |
Stored procedure categories (318)
| Category | Approx. | Role |
|---|---|---|
| Agent / online application | ~56 | Agent portal search/submit/payment/accommodation |
sp_* helpers | ~118 | Dashboards, timetables, transcripts, online enrolment |
| Intake / population reports | ~50 | fresh/returning/projected intake |
b_Update_* | ~29 | Bursary student / mark / billing refresh |
| Visa / immigration | ~12 | EMGS compare, KDN generate, visa expiry |
api_student_* / api_faculty_* | 6 | Legacy API-named helpers for CAP-53 discovery |
| Attendance / marks / enrol | ~10 | LEC, transfer, ProgramsAllowedToRegister, … |
| Other | ~38 | CGPA helpers, MPWA, temp/scratch |
Highlights — api_*, Agent*, b_Update_*
| Family | Examples | Note |
|---|---|---|
api_* (6) |
api_student_login_info, api_student_module_info, api_student_program_info, api_student_semester_info, api_faculty_list, api_faculty_program_list |
Not Raisd Portal API — discovery only |
| Agent* (~56) | AgentSubmitApplication, AgentInsertPayment, AgentFetchAccommodation, … |
Online agent application surface |
b_Update_* (~29) |
b_Update_Student, b_Update_Student_Mark, b_Update_billing, b_Update_Accommodation |
Do not bypass on registration / balance writes |
Triggers (~239 on ~107 tables)
Timing mix: BEFORE INSERT ~68, AFTER UPDATE ~61, AFTER INSERT ~56, BEFORE UPDATE ~52.
Hot tables with 4 triggers each include r_student, r_stdprogram,
r_stdsemester, r_stdpersonal, app_applicationform,
w_visa, r_stdofferletter.
r_student AFTER INSERT.
Seeds related rows (e.g. r_starter, contacts / personal structures).
Any CAP-53 enrol path that inserts into
r_student must tolerate these side-effects.
Machine catalogs
- Tables:
_table-catalog.txt(1942) - Procedures:
_proc-catalog.txt(318) - Functions:
_func-catalog.txt(38) - Triggers:
_trigger-summary.txt - Views:
_view-catalog.txt(655)
8. Raisd mapping — CAP-53 / ADR-1
Cyberjaya is the ADR-1 launch SoR. Raisd portals never talk to MySQL directly; Live writes succeed only after CMS acknowledgment via CAP-53.
Desks → Raisd portals
Staff desks stay on CMS; portals collapse UX onto Portal API.
flowchart TB
subgraph Old["Existing Cyberjaya CMS"]
direction TB
R[Registry]
F[Faculty]
B[Bursary]
L[Lecturer Portal 1.0]
M[Marketing]
S[Services / SSD]
A[Accommodation]
X[CDU · ICU · Library · …]
PAY[Laravel payment]
ICU[Laravel icupdpa]
DB[(cmscbj MySQL)]
R --> DB
F --> DB
B --> DB
L --> DB
M --> DB
S --> DB
A --> DB
X --> DB
PAY --> DB
ICU --> DB
end
subgraph New["Control plane"]
AP[Applicant portal]
SP[Student portal]
LP[Lecturer portal]
ST[Staff portal]
API[Portal API]
ACL[CMS ACL CAP-53]
AP --> API
SP --> API
LP --> API
ST --> API
API --> ACL
end
ACL -->|Live writes / reads| DB
| CMS surface | Raisd portal | Flag |
|---|---|---|
app_* / Marketing / Registry | Applicant + Staff | ADR-1 SoR — applicant UX new, ops on CMS |
| Registry / Faculty / Lecturer | Student + Lecturer + Staff | Reuse r_* / f_*; honour LoginActive |
| Bursary + Laravel payment | Student Finance / Staff Bursary | CAP-45–48; do not bypass b_Update_* |
| Services EMGS/KDN | Staff Services + student view | CAP-50 — campus-local immigration |
| Accommodation | Staff + student request | CAP-52 |
api_student_* / portal sync | Portal API ACL | Discovery only — not OpenAPI contract |
| TEF / DTEF | — | Not applicable to Cyberjaya |
9. Campus comparison — all aspects
LUCT CMS family dumps side by side. Cyberjaya remains the deep E2E reference; Lesotho is M4 pilot; Botswana, Eswatini, Cambodia, and Sierra Leone are M5 expansion references.
Product family
Shared EMS DNA; different depth and campus-local integrations.
flowchart TB FAMILY["LUCT CMS family
PHPMaker · r_/f_/b_/app_*"] CYB["Cyberjaya
cmscbj · E2E SoR ref"] LES["Lesotho
campus2_lesotho · M4 pilot"] BWA["Botswana
cmsbotswana · DTEF"] ESW["Eswatini
campus2_eswatini · ssb"] KH["Cambodia
campus2_cambodia · Limkokwing"] SLE["Sierra Leone
ems_sierraleone · CMS-ICA"] RAISD["Raisd portals
Portal API · CAP-53"] FAMILY --> CYB FAMILY --> LES FAMILY --> BWA FAMILY --> ESW FAMILY --> KH FAMILY --> SLE LES -->|M4 acceptance| RAISD CYB -.->|M5 expansion| RAISD BWA -.->|M5 expansion| RAISD ESW -.->|M5 expansion| RAISD KH -.->|M5 expansion| RAISD SLE -.->|M5 expansion| RAISD
| Aspect | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Dump date | 23 Sep 2026 | 24 Sep 2026 | 23 Sep 2026 |
| Database | cmscbj | cmsbotswana | ems_sierraleone |
| UI brand | [MYS-CYB] LUCT CMS | CMS 0.9a / BWA-GBE | CMS-ICA V 1.0 |
| Tables | ~1,942 | 713 | 345 (~137 non-temp) |
| Stored procedures | 318 (+38 fn) | 46 (+15 fn) | 6 |
| Triggers | ~239 | 157 | 91 |
| Views | 655 | 407 | 9 |
| Desks | ~20 campus apps + Laravel | 14 under botswana/campus/ | 7 under sierraleone/ |
| Admissions prefix | app_* | app_* | ac_* |
| Gov scholarship API | — | DTEF → tef.gov.bw | — |
| Portal API hooks | api_student_* + portal_*_cyberjaya | api_* + portal_*_botswana | Not in dump |
| Laravel add-ons | payment + icupdpa | Not in dump | Not in dump |
| Batch folder | cyberbatch/ | botsbatch/ | sleonebatch/ empty |
| Accommodation / library | Yes | Yes | No desks in package |
| ADR-1 launch SoR | Yes | No — M5 | No — M5 |
| Pages hub | this page | old-cms-botswana/ | old-cms-sierra-leone/ |
Lesotho — pilot feature analysis
M4 acceptance campus (Working Group, 3 Oct 2026). Newer Admin/Student CMS reverse-engineered from screenshots (NMDS, LGCSE, graduation clearance, student portal). Old CMS dump pending — family tree closer to Botswana / Cyberjaya (Vara).
Eswatini — LUCT CMS subsection
Sister LUCT CMS dump campus2_eswatini (legacy batch name swaziland).
Mid-size PHPMaker sibling for
M5 expansion —
portal_*_eswatini + assist codes ssb / limkokwing.
Not the Lesotho M4 acceptance SoR.
Also under LUCT CMS in the top nav → Eswatini group.
Cambodia — LUCT CMS subsection
Sister LUCT CMS dump campus2_cambodia (+ nightly export DB portalcambodia).
Mid-size PHPMaker sibling for
M5 expansion —
portal_*_cambodia + assist provider Limkokwing.
Not the Lesotho M4 acceptance SoR.
Also under LUCT CMS in the top nav → Cambodia group.
Botswana — LUCT CMS subsection
Sister campus dump cmsbotswana (BWA-GBE). Closest LUCT family match to Cyberjaya
for M5 expansion — plus campus-local
DTEF → tef.gov.bw scholarship sync. Also the family-tree hint for Lesotho’s
old CMS (Vara). Pilot acceptance campus is Lesotho, not Cyberjaya.
DTEF notes: botswana-dtef-scholarship-sync.md. Also under LUCT CMS in the top nav → Botswana group.
Sierra Leone — LUCT CMS subsection
Sister EMS dump ems_sierraleone (UI brand CMS-ICA V 1.0).
Thinner LUCT-family sibling for
M5 expansion —
admissions on ac_*, six calculator SPs, no TEF government sync in this package.
Not the launch SoR (ADR-1 remains Cyberjaya).
Also under LUCT CMS in the top nav → Sierra Leone group.