Sierra Leone CMS — end-to-end functional flow
Full campus lifecycle for ICA Sierra Leone (DB ems_sierraleone, UI brand
CMS-ICA V 1.0) broken down by desk / capability — including campus-local
assist / scholarship letter templates and Limkokwing CMS-support email APIs.
Package ICA_SierraLeone_Codes_&_DB_Structure_23_09_2026.
Not the launch SoR (ADR-1 remains Cyberjaya);
use for M5 expansion.
.gz portal extracts, credentials, and live student data are
not committed. Canonical notes:
old-cms-sierra-leone.md.
1. End-to-end campus lifecycle
One shared MySQL SoR. Staff desks own writes. No thin student/lecturer portal tree and no
api_student_* hooks ship in this package. Assist / scholarship is campus-local
(templates + b_assist*) — not a government POST like Botswana TEF.
Student journey across desks
Enquiry → application centre → offer → register → term study → fees / assist → affairs → reporting.
flowchart LR
subgraph Recruit["1 · Recruit"]
ENQ[Application centre
ac_enquiry]
end
subgraph Admit["2 · Admit"]
AC[Application centre
ac_application*]
REG1[Registry
offer letters]
end
subgraph Enrol["3 · Enrol"]
REG2[Registry
r_student / programme]
SET[Setting
terms / fees / structures]
end
subgraph Study["4 · Study"]
ACAD[Academic
timetable / results]
end
subgraph Money["5 · Finance"]
FIN[Finance
invoice / pay / assist]
end
subgraph Life["6 · Student life"]
SA[Student affairs
visa / insurance]
end
subgraph Close["7 · Close / report"]
REP[Reports]
MAIL[cmssupport email]
end
ENQ --> AC
AC --> REG1
REG1 --> REG2
SET --> REG2
REG2 --> ACAD
REG2 --> FIN
REG2 --> SA
ACAD --> REP
FIN --> REP
REG1 -.-> MAIL
FIN -.-> MAIL
2. Functional breakdown by desk
PHPMaker apps under sierraleone/<desk>/ — EMS family sibling of Cyberjaya / Botswana.
Functional structure
Domains map to folders; all share ems_sierraleone.
mindmap root((Sierra Leone CMS
CMS-ICA)) Academic registry academic setting Admissions applicationcenter lettertemplate Commercial finance assist_loans Student_life studentaffair Platform reports help zemail
Module catalogue
| Desk | Primary job | Key tables / signals | ~PHP |
|---|---|---|---|
applicationcenter/ |
Enquiry, applications, course apps, eligibility, promotions, app fees | ac_application, ac_courseapplication, ac_enquiry, ac_promotion |
~218 |
setting/ |
Institution, terms, fee catalogs, assessment / timetable setup, staff | f_institution, f_term, b_admissionfee*, s_staff |
~260 |
reports/ |
Population, enrolment, payment, scholarship, transcripts, BOE | CurTermPopulationlist, rep_*, transcript / BOE lists |
~231 |
registry/ |
Student master, offers, forms, current-term population | r_student, r_stdprogram, r_stdofferletter |
~215 |
academic/ |
Schools, programmes, modules, timetable, assessment, attendance | f_program, f_module, f_timetable*, f_assessment* |
~202 |
finance/ |
Fee structures, invoices, payments, assist, loans, refunds | b_invoice, b_payment*, b_assist*, b_studentloan* |
~191 |
help/ |
In-app help modules | s_helpfile / modular help screens |
~133 |
studentaffair/ |
Visa, insurance claims, passport | sa_studentvisa, sa_insurance*, r_stdpassport |
~77 |
Absent vs Botswana: dedicated marketing, accommodation, library, lecturer, CDU, notice, and student self-service desks;
sleonebatch/ is empty.
3. Core process flows
3.1 Admissions & registry
Enquiry → application → offer → student record
ac_* forms, eligibility, offer letters, r_student creation via SIdx spine.
flowchart TD A[Enquiry
ac_enquiry] --> B[Application
ac_application] B --> C[Course application
ac_courseapplication] C --> D[Eligibility / docs
ac_courseeligibility · confirmation] D --> E[Registry offer
r_stdofferletter · RTF templates] E --> F[r_student + r_stdprogram
+ r_stdsemester] F --> G[Academic structure
f_program / f_structure] F --> H[Finance fee plan
b_feestructure]
3.2 Academic term cycle
Modules → attendance → results
Academic desk; SPs f_calcass, f_calcgpa, f_calccgpa.
flowchart LR T[Term / structure
f_term · f_structure*] --> M[Module enrolment
r_stdmodule] M --> TT[Timetable
f_timetable*] TT --> ATT[Attendance
f_stdattendance] M --> MARK[Assessment
f_stdassessment*] MARK --> RR[Release results
f_releaseresult*] RR --> GPA[GPA / CGPA SPs] GPA --> TR[Transcripts / BOE reports]
3.3 Finance & assist
Billing → payment → scholarship assist
Finance owns money; scholarship assist is local (b_calcsch) — no TEF POST.
flowchart TD FEE[Fee catalog / setting] --> INV[Invoices
b_invoice] INV --> PAY[Payments / details
b_payment*] PAY --> STMT[Statement views] INV --> ASSIST[Assist programmes
b_stdassistprog / sem] ASSIST --> SCH[b_calcsch SP] INV --> LOAN[Student loans / refunds] FEE -.-> MOD[b_calcmodule SP]
3.4 Student life & ops
| Area | Desk | What happens |
|---|---|---|
| Visa / passport | studentaffair/ | sa_studentvisa, r_stdpassport |
| Insurance | studentaffair/ | sa_insurance, sa_insuranceclaim |
| Offer letters | registry/ + RTF | Self-paid, government, Portuguese scholarship, sponsor templates |
email.php / zemail/ | POST to cmssupport.limkokwing.net | |
| Batch / portal | sleonebatch/, portal/ | Batch empty; portal folder is SQL/gz ops extracts only |
4. Integrations
External touchpoints found in the PHP tree. Sierra Leone has no TEF/DTEF government admission API (that pattern is Botswana-only).
Email & support push
Evidence: email.php, zemail/com.mh.func.app.email.php.
sequenceDiagram
participant Desk as Staff desk / letter
participant Mail as email.php / zemail
participant Support as cmssupport.limkokwing.net
Desk->>Mail: Compose outbound message
Mail->>Support: POST /support/emailserverapi.php
Mail->>Support: POST /support/pushsupport.php
Support-->>Mail: Response body
Mail-->>Desk: Success / failure
Integration catalogue
| Integration | Direction | Evidence | Raisd note |
|---|---|---|---|
| CMS support email API | Outbound | emailserverapi.php, pushsupport.php |
Replace with campus-owned notification path under Portal API for Live |
| Google reCAPTCHA | Outbound verify | login.php siteverify |
Auth remains CMS-local until CAP-53 identity cutover |
| Multi-schema EMS switcher | Read | login.php lists ems_% schemas |
Confirms ICA multi-campus EMS family pattern |
| Government scholarship POST | — | Not found | Do not invent; Botswana owns TEF pattern |
| Portal API SP hooks | — | Not found | M5 must add campus-keyed ACL; cannot assume Botswana api_* parity |
5. Physical ERD (ems_sierraleone)
Logical view of real MySQL tables from the Sierra Leone structure dump. Not the Raisd canonical model — CAP-53 translates; it does not clone these tables.
ac_* admissions
and SIdx as the student join spine (vs Botswana’s thicker w_* / acc_* / TEF queue).
5.1 Core student
r_student · programme · semester · module
Same LUCT spine; joins commonly via SIdx.
erDiagram
r_student {
int SIdx PK
int StudentID UK
string StudentNo
string PortalActive
}
r_stdpersonal {
int StudentID PK
}
r_stdprogram {
int StdProgramID PK
int SIdx FK
int ProgramID FK
int FeeStructureID FK
}
r_stdsemester {
int StdSemesterID PK
int StdProgramID FK
int TermID FK
float GPA
float CGPA
}
r_stdmodule {
int StdModuleID PK
int StdSemesterID FK
int ModuleID FK
string FinalGrade
}
f_program {
int ProgramID PK
string ProgramCode
}
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
5.2 Admissions & offer
ac_* → offer → student
ac_application, course application, enquiry; offer letters on registry.
erDiagram
ac_enquiry {
int EnquiryID PK
}
ac_application {
int ApplicationID PK
string ApplicantName
string ICPassportNo
}
ac_courseapplication {
int CourseApplicationID PK
int ApplicationID FK
int ProgramID FK
int SIdx FK
}
r_stdofferletter {
int StudentID FK
}
r_student {
int SIdx PK
int StudentID UK
}
ac_enquiry ||--o| ac_application : may_become
ac_application ||--o{ ac_courseapplication : ApplicationID
ac_courseapplication ||--o| r_student : SIdx
r_student ||--o{ r_stdofferletter : StudentID
5.3 Finance & assist
Fee structure · invoice · payment · assist
No r_scholarshipapp TEF queue — assist stays on b_stdassist*.
erDiagram
r_stdprogram {
int StdProgramID PK
int FeeStructureID FK
}
b_feestructure {
int FeeStructureID PK
int ProgramID FK
}
b_invoice {
int InvoiceID PK
int SIdx FK
}
b_payment {
int PaymentID PK
int SIdx FK
float Amount
}
b_stdassistprog {
int AssistProgID PK
int StdProgramID FK
int AssistProviderID FK
}
b_stdassistsem {
int AssistProgID FK
int StdSemesterID FK
}
r_stdprogram }o--|| b_feestructure : FeeStructureID
r_stdprogram ||--o{ b_stdassistprog : StdProgramID
b_stdassistprog ||--o{ b_stdassistsem : AssistProgID
b_invoice ||--o{ b_payment : applied_to
5.4 Student affairs
sa_* visa · insurance · passport
Thinner than Botswana w_* / acc_*; no accommodation schema in this dump.
erDiagram
r_student {
int SIdx PK
}
r_stdpassport {
int StdPassportID PK
int SIdx FK
}
sa_studentvisa {
int StudentVisaID PK
int StdPassportID FK
}
sa_insurance {
int StdInsuranceID PK
int SIdx FK
}
sa_insuranceclaim {
int InsuranceClaimID PK
int StdInsuranceID FK
}
r_student ||--o{ r_stdpassport : SIdx
r_stdpassport ||--o{ sa_studentvisa : StdPassportID
r_student ||--o{ sa_insurance : SIdx
sa_insurance ||--o{ sa_insuranceclaim : StdInsuranceID
6. Data-flow diagrams (DFD)
How data moves between external actors, Sierra Leone desks, ems_sierraleone,
and Limkokwing CMS support email — without a government scholarship endpoint.
6.1 Context diagram (Level 0)
External entities ↔ Sierra Leone CMS
Staff desks share one SoR; email is outbound to central CMS support.
flowchart TB APPLICANT([Applicant / enquirer]) STAFF([Registry · Academic · Finance · Affairs]) SUPPORT([cmssupport.limkokwing.net]) CMS[["Sierra Leone CMS
PHPMaker desks + ems_sierraleone"]] APPLICANT -->|enquiry / application| CMS STAFF -->|operational writes| CMS CMS -->|letters / statements| APPLICANT CMS -->|email / push| SUPPORT
6.2 Admissions → registry
Enquiry / staff app → offer → enrol
Triggers on ac_application* / ac_courseapplication*.
flowchart LR
EXT([Applicant]) --> AC[Application centre]
AC --> APP[(ac_application*)]
APP --> REG[Registry desk]
REG --> OFF[(r_stdofferletter)]
REG --> STU[(r_student / r_stdprogram)]
STU --> ACAD[Academic structures]
STU --> FIN[Finance fee plan]
6.3 Academic term
Structure → modules → results
f_calcass, f_calcgpa, f_calccgpa; release-result triggers.
flowchart LR SET[Setting / Academic
term · structure] --> ENR[(r_stdmodule)] ENR --> TT[Timetable / attendance] ENR --> ASS[Assessment marks] ASS --> RES[(results / GPA)] RES --> REP[Reports / BOE]
6.4 Finance & assist
Ledger path only
No separate TEF admission queue — contrast Botswana §4 DTEF.
flowchart TB
STU[(r_student / SIdx)] --> FIN[Finance desk]
FIN --> LED[(b_invoice / b_payment / b_assist*)]
LED --> VIEW[[statement* views]]
FIN --> SP[["b_calcmodule / b_calcsch"]]
SP --> LED
6.5 Batch & portal extracts
Empty batch · ops-only portal folder
sleonebatch/ empty; portal/ holds gz/SQL extracts — not committed.
flowchart LR BATCH[[sleonebatch
empty in package]] -.-> DB[(ems_sierraleone)] PORT[[portal/*.sql.gz
ops extracts]] -.-> DB DB -.-> EXT([Future Portal API / M5])
7. Database — tables, procedures, triggers & views
Derived from ems_sierraleone structure dumps
(ems_sierraleone-…-Structure-backup.sql plus Procedure / Triggers / Views SQL.
Legacy URL database.html redirects here.
Stored procedures (6)
| Procedure | Domain |
|---|---|
b_calcmodule | Finance — module fee calculation |
b_calcsch | Finance — scholarship / assist calculation |
f_calcass | Academic — assessment calculation |
f_calccgpa | Academic — CGPA |
f_calcgpa | Academic — GPA |
f_calcgpa_old | Academic — legacy GPA |
Catalog: _proc-catalog.txt
Views (9)
- Population:
CurTermPopulationlist - Admissions:
ac_courseeligibility - Academic:
c_stdassessment,c_stdtimetable,f_moduletermview,r_stdmoduleview - Finance:
statement,statement_base,statement_total
Machine extract: _view-catalog.txt
Domain table signals
| Signal | Approx. | Examples |
|---|---|---|
| Temp / scratch / dated | ~208 | temp_*, tempTicketTG*, *_20171220 |
f_* academic | ~44 | f_program, f_module, timetable / assessment |
b_* finance | ~31 | b_invoice, b_payment, b_assist* |
q_* lookup / letters | ~27 | q_letter, q_campus, grading |
r_* student | ~26 | r_student, r_stdmodule, r_stdofferletter |
s_* security / setup | ~8 | s_staff, s_userlevels |
ac_* admissions | ~7 | ac_application, ac_enquiry |
sa_* affairs | ~3 | sa_studentvisa, sa_insurance* |
Full table list: _table-catalog.txt ·
Triggers: _trigger-summary.txt
8. Raisd mapping
Sierra Leone is an M5 expansion / pattern reference — not ADR-1 SoR. Portal API must stay campus-keyed (CAP-53).
Desks → Raisd portals
Staff desks stay on CMS MySQL; Raisd portals never talk to campus MySQL directly.
flowchart TB
subgraph SL["ICA Sierra Leone CMS"]
AC[Application centre]
REG[Registry]
ACAD[Academic]
FIN[Finance]
SA[Student affairs]
REP[Reports]
DB[("ems_sierraleone")]
AC --> DB
REG --> DB
ACAD --> DB
FIN --> DB
SA --> DB
REP --> 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 -.->|"campus-keyed CAP-53"| DB
end
| CMS surface | Raisd portal | Flag |
|---|---|---|
ac_* admissions | Applicant | Map aliases — not Cyberjaya app_* names |
| Registry / academic | Student + Staff | Reuse r_* / f_* mental model |
| Finance assist | Student Finance / Staff Bursary | Local assist — no TEF feature flag |
| Student affairs | Staff Services | Thin sa_* vs Cyberjaya EMGS |
| Email via cmssupport | Notifications | Do not hard-wire Limkokwing support hosts in Raisd |
9. Campus comparison — all aspects
Three LUCT-family dumps side by side. Cyberjaya remains launch SoR; Botswana and Sierra Leone are M5 expansion references.
Product family
Shared EMS DNA; different depth and campus-local integrations.
flowchart TB FAMILY["LUCT / ICA EMS family
PHPMaker · r_/f_/b_"] CYB["Cyberjaya
cmscbj · ADR-1 SoR"] BWA["Botswana
cmsbotswana · DTEF"] SLE["Sierra Leone
ems_sierraleone · CMS-ICA"] RAISD["Raisd portals
Portal API · CAP-53"] FAMILY --> CYB FAMILY --> BWA FAMILY --> SLE CYB -->|launch ACL| RAISD BWA -.->|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 | LUCT CMS family | CMS 0.9a / BWA-GBE | CMS-ICA V 1.0 |
| Tables | ~1,942 | 713 | 345 (~137 non-temp) |
| Stored procedures | ~318 | 46 (+15 fn) | 6 |
| Triggers | ~239 | 157 | 91 |
| Views | large | 407 | 9 |
| Desks | Many 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_* … | api_* + portal_*_botswana | Not in dump |
| Batch folder | present | botsbatch/ | sleonebatch/ empty |
| Accommodation / library | Yes | Yes | No desks in package |
| ADR-1 launch SoR | Yes | No — M5 | No — M5 |
| Pages hub | old-cms/ | old-cms-botswana/ | this page |