Botswana CMS — end-to-end functional flow
Full campus lifecycle for LUCT Botswana (BWA-GBE, DB
cmsbotswana) broken down by desk / capability — including the
campus-local DTEF → TEF.gov.bw scholarship admission sync.
Package CMS_Botswana_Source_Codes_&_DB_Structure_24_09_2026.
Not the launch SoR (ADR-1 remains Cyberjaya);
use for M5 expansion.
1. End-to-end campus lifecycle
One shared MySQL SoR. Staff desks own writes; thin student/lecturer PHPMaker UIs and
api_student_* / portal_*_botswana hooks sit beside them.
The TEF government POST is Botswana-only (no Cyberjaya equivalent).
Student journey across desks
Recruitment → offer → register → term study → fees / DTEF → services → reporting.
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]
SET[Setup
terms / fees]
end
subgraph Study["4 · Study"]
FAC2[Faculty
timetable / results]
LEC[Lecturer
marks / attendance]
STU[Student desk
self-service]
end
subgraph Money["5 · Finance"]
BUR[Bursary
invoice / pay / assist]
DTEF[DTEF queue
r_scholarshipapp]
TEF[tef.gov.bw]
end
subgraph Life["6 · Student life"]
SVC[Services
visa / welfare]
ACC[Accommodation]
LIB[Library]
end
subgraph Close["7 · Close / report"]
REP[Reporting]
BATCH[botsbatch]
end
MKT --> APP
CDU -.-> APP
APP --> REG1
REG1 --> REG2
SET --> REG2
FAC1 --> REG2
REG2 --> FAC2
FAC2 --> LEC
FAC2 --> STU
REG2 --> BUR
BUR --> DTEF
DTEF -->|status 31 POST| TEF
REG2 --> SVC
REG2 --> ACC
REG2 --> LIB
FAC2 --> REP
BUR --> REP
BATCH -.-> REP
2. Functional breakdown by desk
PHPMaker apps under botswana/campus/<desk>/ — same LUCT family as Cyberjaya.
Functional structure
Domains map to folders; all share cmsbotswana.
mindmap root((Botswana CMS
BWA-GBE)) Academic registry faculty lecturer cdu training Student life services accommodation library notice student Commercial bursary marketing DTEF_TEF_sync Platform setup reporting botsbatch portal_api_hooks
Module catalogue
| Desk | Primary job | Key tables / signals | ~PHP |
|---|---|---|---|
registry/ |
Student master, offers, forms, transcripts, DTEF scholarship queue | r_student, r_stdprogram, r_stdofferletter*, r_scholarshipapp |
~894 |
setup/ |
Institution, terms, fee catalogs, user levels | f_term, fee / security setup tables |
~756 |
bursary/ |
Invoices, payments, receipts, assist / DTEF billing | b_payment*, b_assistbilling*, b_stdassist*, DTEF letters |
~452 |
faculty/ |
Schools, programmes, modules, attendance, results | f_program, f_module, bots_program*, timetable |
~333 |
services/ |
Welfare, counselling, visa / insurance ops | w_* visa, insurance, applications |
~308 |
marketing/ |
Applications, agents, recruitment | app_*, m_agent |
~235 |
reporting/ |
Population, enrolment, payment, scholarship reports | rep_*, dtef_scholarship view |
~211 |
cdu/ |
AQA / programme accreditation | Entry / accreditation desks | ~207 |
training/ |
Short-course / training enrolment | Training desks | ~202 |
lecturer/ |
Marks, attendance, module materials | Lecturer portal screens | ~122 |
library/ |
Library desks | Library tables / views | ~121 |
accommodation/ |
Dorms, occupants, room charges | acc_*, w_occupant, w_room* |
~118 |
notice/ |
Bulletin / noticeboard | Notice desks | ~79 |
student/ |
Thin student self-service | Student PHPMaker screens | ~38 |
3. Core process flows
3.1 Admissions & registry
Application → offer → student record
app_* forms, eligibility, offer letters, r_student creation.
flowchart TD A[Marketing / online app
app_applicationform*] --> B[Docs / eligibility
app_docfile · letters] B --> C[Registry offer
r_stdofferletter* · FetchOfferLetters] C --> D[Confirm registration
confirmReg SP] D --> E[r_student + r_stdprogram
+ r_stdsemester] E --> F[Faculty structure
f_program / bots_program*] E --> G[Bursary fee plan]
3.2 Academic term cycle
Modules → attendance → results
Faculty + lecturer desks; SPs GetTimetable, StudentConfirmModule, insertModule.
flowchart LR T[Term / structure
f_term · bots_structuresemester*] --> M[Module enrolment
r_stdmodule] M --> TT[Timetable
GetTimetable] TT --> ATT[Attendance] M --> MARK[Lecturer marks] MARK --> RR[Release results
f_releaseresult*] RR --> TR[Transcripts / BOE views]
3.3 Finance & assist
Billing → payment → scholarship assist
Bursary owns money; Registry owns DTEF admission POST to TEF (see §4).
flowchart TD FEE[Fee catalog / setup] --> INV[Invoices / instalments
b_*] INV --> PAY[Payments / receipts] PAY --> STMT[Statements / ageing views] INV --> ASSIST[Assist programmes
b_stdassistprog / sem] ASSIST --> DSCH[dtef_scholarship view
AssistProviderCode=DTEF] ASSIST --> GSTAT[getSCholarshipStatus fn] REGQ[Registry r_scholarshipapp] -->|status 31| TEF[tef.gov.bw] TEF -.->|34/35 outcomes| REGQ
3.4 Student life & ops
| Area | Desk | What happens |
|---|---|---|
| Visa / welfare / insurance | services/ | w_visa, w_insurance*, counselling apps |
| Hostel | accommodation/ | acc_dorm / occupants / charges; links to bursary accommodation updates |
| Library / notices | library/, notice/ | Campus services & bulletins |
| Batch / portal | botsbatch/ | Nightly SQL (registry, bursary, examination, portal, attendance) — ops artefacts, not committed |
| Portal hooks | DB routines | api_student_*, api_faculty_*, portal_*_botswana |
4. Integrations — DTEF scholarship → TEF.gov.bw
Botswana-specific government integration. Registry queues programme-of-study admissions;
saving with status 31 (Sent by Registry) POSTs HAL+JSON to
tef.gov.bw. Finance assist billing is a separate path
(b_stdassist* / dtef_scholarship.
Sync sequence
Evidence: r_scholarshipappedit.php / r_dropout_scholarshipappedit.php
(lists r_scholarshipapplist.php, r_dropout_scholarshipapplist.php).
sequenceDiagram actor Reg as Registry officer participant Edit as Scholarship edit participant DB as r_scholarshipapp participant TEF as tef.gov.bw Reg->>Edit: Edit row · set status 31 · Save Edit->>TEF: GET /rest/session/token TEF-->>Edit: CSRF token Edit->>TEF: POST /api/post/studentadmissions
(HAL+JSON program_of_study) alt success or duplicate admission Edit->>DB: app_status=32 · remark=SUCCESS! else API / curl error Edit->>DB: app_status=33 · remark=error Edit-->>Reg: Alert — contact support end Note over DB,TEF: 34 Approved / 35 Rejected
recorded later (outcome path)
Where it sits in the campus flow
Admission POST vs finance assist
Same campus, two paths — do not conflate.
flowchart LR
subgraph Registry["Registry"]
L1[Active list]
L2[Dropout list]
E[Edit · status 31]
L1 --> E
L2 --> E
end
subgraph Store["cmsbotswana"]
T[(r_scholarshipapp)]
A[(b_stdassistprog / sem)]
V[[dtef_scholarship]]
end
subgraph Gov["Government"]
TEF[tef.gov.bw]
DTEF[DTEF financing]
end
E -->|POST program_of_study| TEF
E -->|UPDATE 32/33| T
TEF -.->|34/35| T
A --> V
T -.->|ID overlap| A
DTEF -.-> TEF
Status vocabulary (app_status)
| Code | Meaning | TEF call? |
|---|---|---|
| 30 | Pending | No |
| 31 | Sent by Registry | Yes — triggers POST |
| 32 | Successfully Sent to DTEF | Result |
| 33 | Failed | Result |
| 34 | Approved by DTEF | Outcome (later) |
| 35 | Rejected by DTEF | Outcome (later) |
Registry desks & API contract
| Desk | List | Edit (sync) | Query surface |
|---|---|---|---|
| Active | r_scholarshipapplist.php |
r_scholarshipappedit.php |
View r_scholarshipapp_v |
| Dropout | r_dropout_scholarshipapplist.php |
r_dropout_scholarshipappedit.php |
r_scholarshipapp ⟕ w_student_sview; requires programCost; skips update when status already 34 |
| Step | Request | Notes |
|---|---|---|
| 1 · CSRF | GET https://tef.gov.bw/rest/session/token |
Sent as X-CSRF-Token |
| 2 · Admission | POST …/api/post/studentadmissions?_format=hal_json |
application/hal+json · HTTP Basic (credentials not published) |
| Entity | type[].target_id = program_of_study |
Fields: title, id, surname, firstname, institution, institution_program_code, program_name, program_duration, start/completion dates, entry_level, cost |
| Duplicate | Duplicate Student Admission! |
Treated as non-fatal → status 32 |
Full field map and Raisd security notes: botswana-dtef-scholarship-sync.md. Legacy deep-link: dtef-scholarship-sync.html → this section.
5. Physical ERD (cmsbotswana)
Logical view of real MySQL tables from the Botswana structure dump. Not the Raisd canonical model — CAP-53 translates; it does not clone these tables.
5.1 Core student
r_student · programme · semester · module
Same LUCT spine as Cyberjaya; Botswana mirrors via bots_program*.
erDiagram
r_student {
int StudentID PK
string StudentNo
string LoginActive
}
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
}
bots_program {
int ProgramID FK
}
r_student ||--|| r_stdpersonal : StudentID
r_student ||--o{ r_stdprogram : StudentID
r_stdprogram ||--o{ r_stdsemester : StdProgramID
r_stdsemester ||--o{ r_stdmodule : StdSemesterID
r_stdprogram }o--|| bots_program : Botswana_mirror
5.2 Admissions & offer
app_* → offer → student
app_applicationform, docs, eligibility, r_stdofferletter*.
erDiagram
app_applicationform {
int ApplicationID PK
}
app_docfile {
int ApplicationID FK
}
app_eligibilityletter {
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_eligibilityletter : ApplicationID
app_applicationform ||--o| r_stdofferletter : ApplicationID
r_student ||--o{ r_stdofferletter : StudentID
5.3 Finance & DTEF scholarship queue
Assist billing vs TEF admission queue
b_stdassist* for campus finance; r_scholarshipapp for gov POST.
erDiagram
r_student {
int StudentID PK
string StudentNo
}
r_stdprogram {
int StdProgramID PK
int StudentID FK
}
b_stdassistprog {
int AssistProgID PK
int StdProgramID FK
int AssistProviderID FK
}
b_stdassistsem {
int AssistProgID FK
int StdSemesterID FK
}
r_assistprovider {
int AssistProviderID PK
string AssistProviderCode
}
r_scholarshipapp {
int schctr PK
int applicationid
string IDNumber
string app_status
double programCost
}
r_student ||--o{ r_stdprogram : StudentID
r_stdprogram ||--o{ b_stdassistprog : StdProgramID
b_stdassistprog ||--o{ b_stdassistsem : AssistProgID
r_assistprovider ||--o{ b_stdassistprog : AssistProviderID
r_student ||--o{ r_scholarshipapp : "IDNumber=StudentNo"
5.4 Accommodation, welfare & portal
acc_* · w_* · portal_*_botswana
Thicker student-life schema than Sierra Leone; campus-suffixed portal sync tables.
erDiagram
r_student {
int StudentID PK
}
acc_dorm {
int DormID PK
}
acc_occupant {
int OccupantID PK
int StudentID FK
}
w_visa {
int StudentID FK
}
w_insurance {
int StudentID FK
}
portal_r_student_botswana {
int StudentID FK
}
r_student ||--o{ acc_occupant : StudentID
acc_dorm ||--o{ acc_occupant : houses
r_student ||--o{ w_visa : StudentID
r_student ||--o{ w_insurance : StudentID
r_student ||--o| portal_r_student_botswana : sync
6. Data-flow diagrams (DFD)
How data moves between external actors, Botswana desks, cmsbotswana,
nightly botsbatch, and TEF.gov.bw.
6.1 Context diagram (Level 0)
External entities ↔ Botswana CMS
Staff desks + thin student/lecturer UIs share one SoR; TEF is outbound only.
flowchart TB APPLICANT([Applicant / agent]) STUDENT([Student]) LECTURER([Lecturer]) STAFF([Registry · Faculty · Bursary · Services]) TEF([tef.gov.bw / DTEF]) CMS[["Botswana CMS
PHPMaker desks + cmsbotswana"]] APPLICANT -->|application / docs| CMS STAFF -->|operational writes| CMS STUDENT -->|self-service reads / confirms| CMS LECTURER -->|marks / attendance| CMS CMS -->|invoices / letters / portal data| STUDENT CMS -->|HAL+JSON admissions| TEF TEF -.->|approval outcomes 34/35| CMS
6.2 Admissions → registry
Online / staff app → offer → enrol
SPs: AfterInsertApplicationForm, FetchOnlineApplication*, confirmReg.
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
GetTimetable, StudentConfirmModule, release-result triggers.
flowchart LR SET[Setup / Faculty
term · bots_structure*] --> ENR[(r_stdmodule)] ENR --> TT[Timetable / attendance] ENR --> LEC[Lecturer marks] LEC --> RES[(results / transcript views)] RES --> REP[Reporting]
6.4 Finance + DTEF / TEF
Two money-related paths
Bursary ledger vs Registry TEF admission POST.
flowchart TB
STU[(r_student)] --> BUR[Bursary desk]
BUR --> LED[(b_payment / receipt / assist*)]
LED --> VIEW[[dtef_scholarship view]]
STU --> REG[Registry scholarship desks]
REG --> QUEUE[(r_scholarshipapp)]
QUEUE -->|status 31 POST| TEF([tef.gov.bw])
TEF -.->|34/35| QUEUE
BATCH[[botsbatch SQL]] -.-> LED
BATCH -.-> STU
6.5 Batch & portal hooks
botsbatch + api_* / portal_*_botswana
Ops scripts (not committed) refresh portal/exam/registry/bursary slices; api_student_* SPs feed external clients.
flowchart LR BATCH[[botsbatch
portal · registry · bursary · exam]] --> DB[(cmsbotswana)] DB --> API[["api_student_* / api_faculty_*"]] DB --> PORT[(portal_*_botswana)] API -.-> EXT([Future Portal API / M5]) PORT -.-> EXT
7. Database — tables, procedures, triggers & views
Derived from cmsbotswana structure dumps
(CMS_Botswana_Tables|Procedure|Triggers|Views_24_09_2026.sql.
Legacy URL database.html redirects here.
Stored procedures (46) — highlights
| Procedure | Domain |
|---|---|
api_student_login_info | Portal API — student login |
api_student_module_info | Portal API — modules |
api_student_program_info | Portal API — programme |
api_student_semester_info | Portal API — semester |
api_faculty_list / api_faculty_program_list | Portal API — faculty |
AfterInsertApplicationForm / FetchOnlineApplication* | Admissions — online app |
b_Update_billing / b_Update_Student | Finance — billing |
confirmReg / GetTimetable / r_Update_Semester | Registry / academic |
getSCholarshipStatus (function) | Assist / DTEF status helper |
Full list (46 procedures + 15 functions): _proc-catalog.txt
Views (407)
Large reporting forest — finance statements, attendance, transcripts, population, accommodation.
- Finance:
b_statement*,b_outstanding*,b_receipt*,b_instalmentreport - Academic / registry:
r_stdmoduleview,r_stdtranscript*,r_boe,r_activestudent* - DTEF / scholarship:
dtef_scholarship,r_scholarshipapp_v,r_studentdtefdropoutview - Attendance:
f_attend*,ih_studentattendance - Accommodation:
acc_*,w_occupant*,w_room* - Reports:
rep_curtermpopulation*,rep_preenrollment*
Machine extract: _view-catalog.txt
Domain table signals
| Signal | Approx. | Examples |
|---|---|---|
| Temp / scratch | ~159 | temp_*, tmp_*, one-off billing copies |
r_* student | ~110 | r_student, r_stdmodule, r_scholarshipapp |
f_* academic | ~74 | f_program, f_module, attendance / results |
w_* welfare / visa / acco | ~49 | w_visa, w_insurance, w_occupant |
b_* finance | ~42 | b_payment, b_receipt, b_assistbilling* |
app_* admissions | ~21 | app_applicationform, app_docfile |
bots_* local structs | ~11 | bots_program, bots_stdPortal |
portal_* | 6 | portal_r_student_botswana, … |
Full table list:
_table-catalog.txt ·
Triggers (157 — heavy on r_student*, app_*, finance, accommodation):
_trigger-summary.txt
CAP-53 note
Botswana confirms a third live 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; do not assume Cyberjaya table names or SP signatures match 1:1.
8. Raisd mapping
Desks vs portals
Portals never talk to campus MySQL; Portal API / ACL is campus-keyed (CAP-53).
flowchart TB
subgraph BW["LUCT Botswana CMS"]
DESKS[Registry · Faculty · Bursary · Marketing
Lecturer · Services · Accommodation · Setup · Reporting]
DB[("cmsbotswana")]
DESKS --> DB
DESKS -.->|DTEF POST| TEFext[tef.gov.bw]
end
subgraph Raisd["Raisd — M5+"]
API[Portal API]
AP[Applicant]
SP[Student]
LP[Lecturer]
ST[Staff]
AP --> API
SP --> API
LP --> API
ST --> API
API -.->|"campus-keyed"| DB
end
| Topic | Guidance |
|---|---|
| Launch SoR | Cyberjaya remains ADR-1. Botswana is expansion reference. |
| Closest sister | Same LUCT desk tree and app_* as Cyberjaya — cleaner ACL transfer than Sierra Leone EMS. |
| DTEF / TEF | Campus feature flag + secret store; Portal API must own any future TEF client (never browser → TEF). |
| CAP-48 | Scholarships — SoR today is registry + bursary; student portal read-only awards later. |
| Accommodation / welfare | Thicker w_* / acc_* than Sierra Leone — may need earlier staff-portal surfaces for Botswana. |
Full three-campus matrix: §9 Campus comparison.
9. Comparison — Cyberjaya · Botswana · Sierra Leone
All-aspect matrix of the three inventoried campus dumps. Botswana sits between Cyberjaya
(fullest LUCT SoR) and Sierra Leone (thinner EMS / ac_* shape) — closest sister
to Cyberjaya, with a unique government TEF integration.
Where each campus sits
Product family vs launch role.
flowchart LR
subgraph Family["Same product family"]
CYB["Cyberjaya
cmscbj · LUCT · app_*"]
BWA["Botswana
cmsbotswana · LUCT · app_*"]
SLE["Sierra Leone
ems_sierraleone · EMS · ac_*"]
end
CYB -->|closest sister| BWA
CYB -.->|same EMS roots
different admissions prefix| SLE
CYB ==>|ADR-1 launch SoR| LAUNCH([Raisd portals])
BWA -.->|M5 expansion| LAUNCH
SLE -.->|M5 expansion| LAUNCH
BWA -->|TEF.gov.bw| GOV([DTEF government])
9.1 Identity & role
| Aspect | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Package date | 23 Sep 2026 | 24 Sep 2026 | 23 Sep 2026 |
| Database | cmscbj | cmsbotswana | ems_sierraleone |
| Campus / brand code | [MYS-CYB] | [BWA-GBE] · CMS 0.9a | ICA Sierra Leone EMS |
| Product family | LUCT CMS / PHPMaker | LUCT CMS / PHPMaker | EMS / PHPMaker (same roots) |
| Desk path | cyberjaya/campus/<desk> | botswana/campus/<desk> | sierraleone/<desk> |
| ADR-1 launch SoR | Yes | No — M5 expansion | No — M5 expansion |
| Pages hub | old-cms/ | old-cms-botswana/ | old-cms-sierra-leone/ |
9.2 Scale & technology
| Aspect | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Tables (structure) | ~1,942 | 713 (~554 non-temp) | 345 (~156 non-temp) |
| Stored procedures | ~318 | 46 (+15 functions) | 6 |
| Triggers | ~239 | 157 | 91 |
| Views | Large | 407 | 9 |
| Laravel add-ons | Payment + ICU PDPA | Not in dump | Not in dump |
| Live class / streaming | Adobe Connect + classroom link | Not highlighted in dump | Not in dump |
| Batch / ops | cyberbatch + scripts | botsbatch (SQL + logs) | sleonebatch empty in package |
| Approx. desk PHP | Largest estate | ~5.7k under campus | ~1.7k PHP desks |
9.3 Desks / modules
| Capability area | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Registry / student master | registry/ | registry/ (~894) | registry/ |
| Faculty / academic | faculty/ | faculty/ | academic/ |
| Bursary / finance | bursary/ + Laravel payment | bursary/ | finance/ |
| Marketing / admissions ops | marketing/ | marketing/ | applicationcenter/ |
| Lecturer | lecturer/ · lec/ | lecturer/ | Inside academic desks |
| Student services / affairs | services/ (EMGS/KDN/SSD) | services/ (w_*) | studentaffair/ (sa_*) |
| Accommodation | accommodation/ | accommodation/ + w_* | Thin / not a full desk |
| AQA / curriculum | cdu/ | cdu/ | Setting / academic mix |
| Compliance / PDPA | icu/ · Laravel icupdpa | Not a dedicated dump desk | Not in dump |
| Reporting | reporting/ | reporting/ | reports/ |
| Setup / settings | cmsadminsetup / setup desks | setup/ (~756) | setting/ |
| Student self-service | Multiple (stdfile, SIU, …) | Thin student/ (~38) | Portal extracts only |
9.4 Domain data model
| Aspect | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Admissions tables | Mostly app_* | Mostly app_* | Mostly ac_* |
| Student spine | r_student → programme → semester → module | Same + bots_* mirrors | Same r_* / f_* spine |
| Finance | Rich b_* + payment app | b_* + assist / DTEF billing | b_* + loans; 6 calc SPs |
| Welfare / visa | Large EMGS/KDN forest | Thick w_* (~49) | Small sa_* (~3) |
| Local campus structs | Cyberjaya-specific tables | bots_* (~11) | Fewer campus-only structs |
| Portal sync tables | portal_*_cyberjaya | portal_*_botswana (6) | Not in dump |
| Temp / scratch share | High (dump includes history) | ~159 temp/scratch | ~189 temp/scratch |
9.5 Functional capabilities
| Capability | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Online / staff applications | Present (app_*) | Present (app_* + online SPs) | Present (ac_*) |
| Offer letters | Present | Present | Present (RTF variants) |
| Timetable / attendance / results | Full faculty + lecturer | Present (+ IH mirrors) | Present (academic desk) |
| Invoices / payments / statements | Full + Laravel payment | Full b_* | Full b_* + loans |
| Scholarships / assist | Bursary incentives / assist | Assist + TEF.gov.bw POST | Assist calc SPs; no gov API |
| Government integration | EMGS/KDN/eIPTS reporting | DTEF → tef.gov.bw HAL API | Not found in dump |
| Accommodation | Full desk | Full desk + w_occupant | Thin |
| Visa / insurance | Services (rich) | Services w_* | Student affairs sa_* |
| Portal / API procedures | api_student_* + portal tables | Same pattern (*_botswana) | Not in dump |
| Nightly batch gating | portal.sql LoginActive rules | botsbatch portal/registry/… | Empty batch folder |
9.6 External integrations
| Integration | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| National financing portal | — | tef.gov.bw student admissions | — |
| Immigration / study permit ops | EMGS / KDN heavy | w_visa / welfare | sa_studentvisa |
| Online classroom | Adobe Connect / streaming host | — | — |
| Payment gateway app | Laravel payment/ | — | — |
| Raisd Portal API readiness | Highest (launch ACL) | High (same hooks, campus suffix) | Lower (no api_* in dump) |
9.7 Raisd / M5 implications
| Topic | Cyberjaya | Botswana | Sierra Leone |
|---|---|---|---|
| Launch posture | SoR for portals (ADR-1) | Do not treat as launch SoR | Do not treat as launch SoR |
| ACL transfer | Baseline | Cleanest sister (app_* + portal hooks) | Expect ac_* mapping + thinner SPs |
| CAP-53 campus key | *_cyberjaya | *_botswana / bots_* | New campus key when onboarded |
| Feature flags needed | Core product | TEF client · thick housing/welfare | Admissions prefix · loans |
| Staff portal priority extras | EMGS / payment / PDPA ops | DTEF queue · accommodation earlier | Application centre shape |
| Inventory docs | old-cms-cyberjaya.md | old-cms-botswana.md | old-cms-sierra-leone.md |
app_* admissions, portal api_* hooks present). Sierra Leone proves EMS portability
with a different admissions prefix and a much smaller SP/view surface. Only Botswana evidence-backed
government scholarship admission sync is tef.gov.bw — keep it campus-flagged.
CAP comparison detail (Cyberjaya-focused):
old-cms/comparison.html ·
SDD-14.