Eswatini CMS — end-to-end functional flow
Full campus lifecycle for LUCT Eswatini (DB campus2_eswatini) broken down by desk /
capability — including campus-local assist codes ssb / limkokwing,
portal_*_eswatini hooks, and eswatinibatch night scripts.
Package CMS_Eswatini_Source_Codes_&_DB_Structure_23_09_2026.zip (Vara, 5 Oct 2026).
Not the Lesotho M4 acceptance SoR — use for
M5 expansion (WG: Eswatini may follow Lesotho).
eswatinibatch SQL/logs, credentials, and live student data are
not committed. Canonical notes:
old-cms-eswatini.md.
1. End-to-end campus lifecycle
One shared MySQL SoR. Staff desks own writes; portal projection tables
(portal_*_eswatini (+ legacy portal_student_swaziland) and
api_student_* SPs sit beside them. Assist is campus-local
(ssb / limkokwing — not Lesotho NMDS, not Botswana TEF POST.
Student journey across desks
Marketing → registry → faculty → 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
application]
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]
end
subgraph Money["5 · Finance"]
BUR[Bursary
invoice / pay / assist]
ASSIST[ssb · limkokwing
b_assistbilling*]
end
subgraph Life["6 · Student life"]
SVC[Services
visa / welfare]
ACC[Accommodation
w_occupant / w_room]
end
subgraph Close["7 · Close / report"]
REP[Reporting]
BATCH[eswatinibatch]
end
MKT --> APP
CDU -.-> APP
APP --> REG1
REG1 --> REG2
SET --> REG2
FAC1 --> REG2
REG2 --> FAC2
FAC2 --> LEC
REG2 --> BUR
BUR --> ASSIST
REG2 --> SVC
REG2 --> ACC
FAC2 --> REP
BUR --> REP
BATCH -.-> REP
2. Functional breakdown by desk
PHPMaker apps under eswatini/campus/<desk>/ — same LUCT family as Botswana / Lesotho / Cyberjaya.
Functional structure
Domains map to folders; all share campus2_eswatini.
mindmap root((Eswatini CMS
campus2_eswatini)) Academic registry faculty lecturer cdu modulemat Student_life services accommodation notice Commercial bursary marketing assist_ssb_limkokwing Platform setup reporting eswatinibatch api_service AdBeConnect portal_api_hooks
Module catalogue
| Desk | Primary job | Key tables / signals | ~PHP |
|---|---|---|---|
registry/ |
Student master, offers, forms, population | r_student, r_stdprogram, r_stdofferletter |
421 |
bursary/ |
Invoices, payments, assist billing (ssb / limkokwing) | b_assistbilling*, r_assistprovider, r_assistscheme* |
353 |
services/ |
Visa, insurance, welfare ops | w_visa, w_insurance* |
341 |
faculty/ |
Schools, programmes, modules, attendance, results | f_*, r_stdmodule, gb_* |
332 |
setup/ |
Institution, terms, fee catalogs, user levels | f_term, fee / security setup |
303 |
reporting/ |
Population, enrolment, payment, scholarship reports | rep_* |
258 |
marketing/ |
Applications, recruitment | app_applicationform, app_applicationform_online |
242 |
accommodation/ |
Rooms, occupants, accommodation charges | w_occupant, w_room, w_receiptacco |
198 |
cdu/ |
AQA / programme accreditation | Entry / accreditation desks | 168 |
lecturer/ |
Marks, attendance, module materials | Lecturer screens · ih_* |
167 |
notice/ |
Bulletin / noticeboard | Notice desks | 86 |
zemail/ |
Outbound email helpers | Thin email folder | 4 |
Also present (not in PHP count table): AdBeConnect/, IH/, modulemat/,
support/, api-service/. Legacy batch name still says swaziland.
3. Core process flows
3.1 Admissions & registry
Application → offer → student record
app_* forms (11 tables), eligibility, offer letters, r_student creation — Botswana-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
OnlineRegNotification] D --> E[r_student + r_stdprogram
+ r_stdsemester] E --> F[Faculty structure
f_program / gb_*] E --> G[Bursary fee plan]
3.2 Academic term cycle
Modules → attendance → results
Faculty + lecturer desks; SPs StudentConfirmModule, r_Update_Semester, examination.
flowchart LR T[Term / structure
setup · faculty] --> M[Module enrolment
r_stdmodule] M --> TT[Timetable / IH] TT --> ATT[Attendance
r_stdattendance · ih_*] M --> MARK[Lecturer marks] MARK --> RR[Results / transcripts] RR --> TR[Reporting / BOE]
3.3 Finance & assist
Billing → payment → scholarship assist
Bursary owns money; assist provider codes include ssb and limkokwing. No r_scholarshipapp TEF queue.
flowchart TD FEE[Fee catalog / setup] --> INV[Invoices / billing
b_*] INV --> PAY[Payments / receipts] PAY --> STMT[Statement views] INV --> ASSIST[Assist programmes
r_assistscheme* · b_assistbilling*] ASSIST --> CODE[Provider codes
ssb · limkokwing] FEE -.-> UPD[b_Update_billing / b_Update_Student]
3.4 Student life & ops
| Area | Desk | What happens |
|---|---|---|
| Visa / insurance | services/ | w_visa, w_insurance*, sp_student_visaexp |
| Hostel | accommodation/ | w_occupant, w_room, w_receiptacco; b_Update_Accommodation |
| Notices | notice/ | Campus bulletins |
| Batch / portal | eswatinibatch/ | portal.sql · registry.sql · bursary.sql · examination.sql · billing.sql + swazilandbatchnight.sh + logs |
| Portal hooks | DB routines | api_student_*, api_faculty_*, portal_*_eswatini, legacy portal_student_swaziland |
| Streaming / class | AdBeConnect/ | Adobe Connect–style desk folder (inventory only) |
4. Integrations — assist · portal · batch
External and ops touchpoints found in the Eswatini pack. Not a DTEF/TEF government
admission API (that pattern is Botswana-only). Assist ≠ Lesotho NMDS (nmds).
Assist vs portal vs batch
Three parallel paths — do not conflate with Lesotho NMDS or Botswana TEF POST.
flowchart LR
subgraph Assist["Assist / CAP-48 adjacent"]
PROV[r_assistprovider]
SCH[r_assistscheme*]
BILL[b_assistbilling*]
PROV --> SCH --> BILL
CODE[["codes: ssb · limkokwing"]]
PROV -.-> CODE
end
subgraph Portal["Portal projection"]
API[["api_student_* · api_faculty_*"]]
PT[(portal_*_eswatini)]
LEG[(portal_student_swaziland)]
end
subgraph Batch["Night batch"]
SH[swazilandbatchnight.sh]
SQL[portal · registry · bursary
examination · billing SQL]
SH --> SQL
end
DB[(campus2_eswatini)]
BILL --> DB
API --> DB
PT --> DB
LEG --> DB
SQL --> DB
Integration catalogue
| Integration | Direction | Evidence | Raisd note |
|---|---|---|---|
| Assist provider codes | Internal ledger | SP / scheme literals ssb, limkokwing; r_assistprovider, b_assistbilling* |
Campus-keyed CAP-48 — do not reuse Lesotho NMDS or Botswana TEF clients |
| Portal student projection | Read / sync | portal_student_eswatini (+ program / semester / module / attendance) + legacy portal_student_swaziland |
CAP-53 campus key ESWATINI / suffix _eswatini |
| Portal / faculty SPs | Read | api_student_login_info, api_student_program_info, api_student_semester_info, api_student_module_info, api_faculty_list, api_faculty_program_list |
Same pattern as Lesotho / Botswana; ACL must stay campus-keyed |
| Night batch | Ops refresh | eswatinibatch/ + swazilandbatchnight.sh + SQL slices + logs/ |
Ops artefacts — never commit; expect nightly portal projection refresh |
| API-service tree | Campus local | eswatini/api-service/ |
Inventory only — do not republish secrets or endpoints |
| AdBeConnect | Desk folder | AdBeConnect/ under campus tree |
Streaming / class desk present; no government API invented here |
| Government scholarship POST | — | Not found (no r_scholarshipapp TEF queue) |
Botswana owns TEF; Lesotho owns NMDS assist path — neither applies here |
5. Physical ERD (campus2_eswatini)
Logical view of real MySQL tables from the Eswatini structure dump. Not the Raisd canonical model — CAP-53 translates; it does not clone these tables.
app_* admissions
(like Botswana), portal_*_eswatini (+ legacy _swaziland), and assist codes
ssb / limkokwing — not Lesotho NMDS, not Botswana r_scholarshipapp.
5.1 Core student
r_student · programme · semester · module
Same LUCT spine as Botswana / Lesotho / Cyberjaya.
erDiagram
r_student {
int StudentID PK
string StudentNo
}
r_stdpersonal {
int StudentID PK
}
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 & offer
app_* → offer → student
11 app_* tables including app_applicationform, app_applicationform_online.
erDiagram
app_applicationform {
int ApplicationID PK
}
app_applicationform_online {
int ApplicationID PK
}
app_docfile {
int ApplicationID FK
}
app_applicationeducation {
int ApplicationID FK
}
r_stdofferletter {
int StudentID FK
int ApplicationID FK
}
r_student {
int StudentID PK
}
app_applicationform ||--o{ app_docfile : ApplicationID
app_applicationform ||--o{ app_applicationeducation : ApplicationID
app_applicationform ||--o| r_stdofferletter : ApplicationID
app_applicationform_online ||--o| app_applicationform : may_promote
r_student ||--o{ r_stdofferletter : StudentID
5.3 Finance & assist
Assist provider · scheme · billing
No TEF queue table — assist stays on r_assist* / b_assistbilling*.
erDiagram
r_student {
int StudentID PK
}
r_stdprogram {
int StdProgramID PK
int StudentID FK
}
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
int StudentID FK
}
b_assistbillingdetail {
int AssistBillingID FK
}
r_student ||--o{ r_stdprogram : StudentID
r_assistprovider ||--o{ r_assistscheme : AssistProviderID
r_assistscheme ||--o{ r_assistschemedetail : AssistSchemeID
r_student ||--o{ b_assistbilling : StudentID
b_assistbilling ||--o{ b_assistbillingdetail : AssistBillingID
5.4 Student life & portal
w_* · portal_*_eswatini · legacy swaziland
Accommodation / visa on w_*; campus-suffixed portal sync (+ legacy name).
erDiagram
r_student {
int StudentID PK
}
w_occupant {
int OccupantID PK
int StudentID FK
}
w_room {
int RoomID PK
}
w_visa {
int StudentID FK
}
w_insurance {
int StudentID FK
}
portal_student_eswatini {
int StudentID FK
}
portal_student_program_eswatini {
int StudentID FK
}
portal_student_swaziland {
int StudentID FK
}
r_student ||--o{ w_occupant : StudentID
w_room ||--o{ w_occupant : houses
r_student ||--o{ w_visa : StudentID
r_student ||--o{ w_insurance : StudentID
r_student ||--o| portal_student_eswatini : sync
portal_student_eswatini ||--o{ portal_student_program_eswatini : programme
r_student ||--o| portal_student_swaziland : legacy
6. Data-flow diagrams (DFD)
How data moves between external actors, Eswatini desks, campus2_eswatini,
nightly eswatinibatch, and portal / assist surfaces — without a government scholarship endpoint.
6.1 Context diagram (Level 0)
External entities ↔ Eswatini CMS
Staff desks + lecturer UI share one SoR; assist/portal stay campus-local.
flowchart TB APPLICANT([Applicant / agent]) STUDENT([Student]) LECTURER([Lecturer]) STAFF([Registry · Faculty · Bursary · Services]) CMS[["Eswatini CMS
PHPMaker desks + campus2_eswatini"]] APPLICANT -->|application / docs| CMS STAFF -->|operational writes| CMS STUDENT -->|portal reads via api_*| CMS LECTURER -->|marks / attendance| CMS CMS -->|invoices / letters / portal data| STUDENT
6.2 Admissions → registry
Online / staff app → offer → enrol
SPs: AfterInsertApplicationForm, FetchOnlineApplication*, FetchOfferLetters.
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, IH attendance mirrors.
flowchart LR SET[Setup / Faculty
term · structure] --> ENR[(r_stdmodule)] ENR --> TT[Timetable / attendance] ENR --> LEC[Lecturer marks] LEC --> RES[(results / transcript views)] RES --> REP[Reporting]
6.4 Finance & assist
Ledger path only
No separate TEF admission queue — contrast Botswana DTEF; assist codes ssb / limkokwing ≠ Lesotho nmds.
flowchart TB STU[(r_student)] --> BUR[Bursary desk] BUR --> LED[(b_* / b_assistbilling*)] LED --> PROV[[r_assistprovider
ssb · limkokwing]] BUR --> SP[["b_Update_billing / b_Update_Student"]] SP --> LED
6.5 Batch & portal hooks
eswatinibatch + api_* / portal_*_eswatini
Ops scripts (not committed) refresh portal/registry/bursary/exam/billing slices; api_student_* SPs feed external clients.
flowchart LR BATCH[[eswatinibatch
portal · registry · bursary · exam · billing]] --> DB[(campus2_eswatini)] DB --> API[["api_student_* / api_faculty_*"]] DB --> PORT[(portal_*_eswatini)] DB --> LEG[(portal_student_swaziland)] API -.-> EXT([Future Portal API / M5]) PORT -.-> EXT LEG -.-> EXT
7. Database — tables, procedures, triggers & views
Derived from campus2_eswatini structure dumps in
CMS_Eswatini_Source_Codes_&_DB_Structure_23_09_2026.zip (Vara, 5 Oct 2026).
Legacy URL database.html redirects here.
Stored procedures (53) — notable groups
| Group | Examples |
|---|---|
| Portal / API | api_student_login_info, api_student_program_info, api_student_semester_info, api_student_module_info, api_faculty_list, api_faculty_program_list |
| Online applications | AfterInsertApplicationForm, FetchOnlineApplication*, InsertOnlineAppPersonalInfo, UpdateOnlineApp*, OnlineAppEmailNotification |
| Finance / billing | b_Update_billing, b_Update_Student, b_Update_Accommodation, sp_payment_verification_insert |
| Registry / academic | FetchOfferLetters, r_Update_Semester, StudentConfirmModule, examination, fetchCAFDetails |
| Local / SWA helpers | sp_swa_Intake, sp_swa_programlist, sp_swa_countrylist, sp_swa_nationality, sp_swa_religion |
Full list: _proc-catalog.txt ·
Functions (3: ExtractNumberFromString, ISNUMERIC, cap_first):
_function-catalog.txt
Views (330)
Large reporting surface — finance, attendance, population, academic, staff desk views.
Machine extract: _view-catalog.txt
Domain table signals
| Signal | Approx. | Examples |
|---|---|---|
r_* student | 113 | r_student, r_stdprogram, r_stdsemester, r_stdmodule |
f_* academic | 77 | programmes, modules, timetable / results |
b_* finance | 54 | b_assistbilling*, payments / receipts |
rep_* reports | 40 | population / enrolment helpers |
s_* security / setup | 36 | staff, user levels |
gb_* local structs | 32 | gb_student, gb_program, gb_stdmodule |
temp_* | 25 | scratch / dated copies |
w_* welfare / acco | 16 | w_visa, w_occupant, w_room |
app_* admissions | 11 | app_applicationform, app_applicationform_online |
ih_* | 9 | IH attendance / marks mirrors |
portal_* | 6 | portal_student_eswatini … + portal_student_swaziland |
swa_* | 6 | swa_sem1 … swa_sem6 |
Full table list: _table-catalog.txt ·
Triggers (70): _trigger-catalog.txt ·
Index: CATALOG.md
CAP-53 note
Eswatini confirms another mid-size LUCT schema in the same product family, with campus-suffixed
portal tables and api_* procedures. Portal API campus configuration
(CAP-53)
must stay campus-keyed (ESWATINI); do not assume Cyberjaya or Lesotho table names match 1:1.
8. Raisd mapping
Eswatini is an M5 LUCT CMS sibling — not the Lesotho M4 acceptance SoR. Portal API must stay campus-keyed (CAP-53 key ESWATINI.
Desks → Raisd portals
Staff desks stay on CMS MySQL; Raisd portals never talk to campus MySQL directly.
flowchart TB
subgraph SZ["LUCT Eswatini CMS"]
DESKS[Marketing · Registry · Faculty · Bursary
Services · Accommodation · Setup · Reporting]
DB[("campus2_eswatini")]
DESKS --> DB
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 · ESWATINI"| DB
end
| Topic | Guidance |
|---|---|
| Product role | LUCT CMS M5 sibling; not Lesotho M4 SoR. WG: Eswatini may follow Lesotho. |
| CAP-53 campus key | ESWATINI — tables portal_*_eswatini (+ legacy _swaziland) |
| CAP-48 funding | Assist codes ssb · limkokwing — ≠ NMDS ≠ DTEF/TEF |
| ACL transfer | Same app_* + api_student_* pattern as Lesotho/BW — clean LUCT adapter path |
| Batch | Expect nightly portal refresh via eswatinibatch (ops only) |
Full multi-campus matrix: §9 Campus comparison.
9. Campus comparison — Eswatini-centric
Mid-size LUCT sibling: larger than Lesotho (369), thinner than Botswana (713). Table-name overlap vs Eswatini’s 472: Lesotho ~65% · Botswana ~60% · Cyberjaya ~59% · Sierra Leone ~5%.
Where Eswatini sits
Same LUCT app_* family; local assist; no gov TEF POST.
flowchart TB FAMILY["LUCT CMS / PHPMaker family
r_ · f_ · b_ · app_*"] CYB["Cyberjaya · cmscbj"] LSO["Lesotho · campus2_lesotho · M4"] BWA["Botswana · cmsbotswana · DTEF"] SZ["Eswatini · campus2_eswatini · M5"] KHM["Cambodia · ~481 tables"] SLE["Sierra Leone · EMS · ac_*"] RAISD["Raisd portals · CAP-53"] FAMILY --> CYB FAMILY --> LSO FAMILY --> BWA FAMILY --> SZ FAMILY --> KHM FAMILY -.-> SLE LSO ==>|M4 SoR| RAISD SZ -.->|M5 expansion| RAISD BWA -.->|M5| RAISD
| Aspect | Eswatini | Lesotho | Botswana | Cyberjaya | Cambodia | Sierra Leone |
|---|---|---|---|---|---|---|
| Database | campus2_eswatini | campus2_lesotho | cmsbotswana | cmscbj | Cambodia dump | ems_sierraleone |
| Tables | 472 | 369 | 713 | ~1,942 | 481 | 345 |
| Views | 330 | 351 | 407 | large | (inventoried) | 9 |
| SPs / fn / triggers | 53 / 3 / 70 | 51 / 6 / 0† | 46 / 15 / 157 | ~318 / — / ~239 | (inventoried) | 6 / — / 91 |
| Overlap vs SZ | — | ~65% | ~60% | ~59% | (sibling) | ~5% |
| Admissions | app_* (11) | app_* | app_* | app_* | app_* (10) | ac_* |
| Portal hooks | portal_*_eswatini + legacy _swaziland | portal_*_lesotho | portal_*_botswana | portal_*_cyberjaya | portal_*_cambodia | Not in dump |
| Assist / gov | ssb · limkokwing | NMDS (nmds) | DTEF → tef.gov | Assist | Campus assist | Local assist |
| Batch | eswatinibatch | present | botsbatch | cyberbatch | present | empty |
| Raisd role | M5 sibling | M4 SoR | M5 + TEF | ADR-1 historic | M5 | M5 EMS |
| Pages hub | this page | old-cms-lesotho/ | old-cms-botswana/ | old-cms/ | old-cms-cambodia/ | old-cms-sierra-leone/ |
† Lesotho structure export showed 0 triggers in file — contrast Eswatini’s 70.