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).

DB campus2_eswatini 472 tables 330 views 53 procs · 3 fn · 70 triggers app_* admissions Pack 5 Oct 2026
LUCT CMS subsection. Connected from the Cyberjaya analysis hub: LUCT CMS → Eswatini. Use the top nav LUCT CMS → Eswatini flyout for FSD, integrations, ERD, DFD, database, and comparison.
Scope. Structure and behaviour only. PHP tree, 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

AreaDeskWhat happens
Visa / insuranceservices/w_visa, w_insurance*, sp_student_visaexp
Hostelaccommodation/w_occupant, w_room, w_receiptacco; b_Update_Accommodation
Noticesnotice/Campus bulletins
Batch / portaleswatinibatch/portal.sql · registry.sql · bursary.sql · examination.sql · billing.sql + swazilandbatchnight.sh + logs
Portal hooksDB routinesapi_student_*, api_faculty_*, portal_*_eswatini, legacy portal_student_swaziland
Streaming / classAdBeConnect/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 · ssb Assist · limkokwing portal_*_eswatini api_student_* eswatinibatch No TEF / no NMDS API

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

IntegrationDirectionEvidenceRaisd 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.

Contrast Raisd ERD at ../erd.html. Eswatini uses LUCT 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.

472 tables 330 views 53 procs 3 functions 70 triggers

Stored procedures (53) — notable groups

GroupExamples
Portal / APIapi_student_login_info, api_student_program_info, api_student_semester_info, api_student_module_info, api_faculty_list, api_faculty_program_list
Online applicationsAfterInsertApplicationForm, FetchOnlineApplication*, InsertOnlineAppPersonalInfo, UpdateOnlineApp*, OnlineAppEmailNotification
Finance / billingb_Update_billing, b_Update_Student, b_Update_Accommodation, sp_payment_verification_insert
Registry / academicFetchOfferLetters, r_Update_Semester, StudentConfirmModule, examination, fetchCAFDetails
Local / SWA helperssp_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

SignalApprox.Examples
r_* student113r_student, r_stdprogram, r_stdsemester, r_stdmodule
f_* academic77programmes, modules, timetable / results
b_* finance54b_assistbilling*, payments / receipts
rep_* reports40population / enrolment helpers
s_* security / setup36staff, user levels
gb_* local structs32gb_student, gb_program, gb_stdmodule
temp_*25scratch / dated copies
w_* welfare / acco16w_visa, w_occupant, w_room
app_* admissions11app_applicationform, app_applicationform_online
ih_*9IH attendance / marks mirrors
portal_*6portal_student_eswatini … + portal_student_swaziland
swa_*6swa_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
TopicGuidance
Product roleLUCT CMS M5 sibling; not Lesotho M4 SoR. WG: Eswatini may follow Lesotho.
CAP-53 campus keyESWATINI — tables portal_*_eswatini (+ legacy _swaziland)
CAP-48 fundingAssist codes ssb · limkokwing — ≠ NMDS ≠ DTEF/TEF
ACL transferSame app_* + api_student_* pattern as Lesotho/BW — clean LUCT adapter path
BatchExpect 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%.

Eswatini = M5 LUCT Lesotho = M4 pilot SoR Botswana = TEF · SL = EMS ac_*

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
Databasecampus2_eswatinicampus2_lesothocmsbotswanacmscbjCambodia dumpems_sierraleone
Tables472369713~1,942481345
Views330351407large(inventoried)9
SPs / fn / triggers53 / 3 / 7051 / 6 / 0†46 / 15 / 157~318 / — / ~239(inventoried)6 / — / 91
Overlap vs SZ—~65%~60%~59%(sibling)~5%
Admissionsapp_* (11)app_*app_*app_*app_* (10)ac_*
Portal hooksportal_*_eswatini + legacy _swazilandportal_*_lesothoportal_*_botswanaportal_*_cyberjayaportal_*_cambodiaNot in dump
Assist / govssb · limkokwingNMDS (nmds)DTEF → tef.govAssistCampus assistLocal assist
Batcheswatinibatchpresentbotsbatchcyberbatchpresentempty
Raisd roleM5 siblingM4 SoRM5 + TEFADR-1 historicM5M5 EMS
Pages hubthis pageold-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.

Verdict. Prefer LUCT adapter patterns (same as Lesotho/BW). Keep CAP-53 campus-keyed ESWATINI. Do not invent NMDS or TEF clients for this campus. AI inventory: old-cms-eswatini.md · CAP comparison: cms-feature-comparison.md.