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.

DB ems_sierraleone 345 tables ~137 non-temp 7 desks 6 SPs · 91 triggers Dump 23 Sep 2026
LUCT CMS subsection. Connected from the Cyberjaya analysis hub: LUCT CMS → Sierra Leone. Use the top nav LUCT CMS → Sierra Leone flyout for ERD, DFD, database, integrations, and comparison.
Scope. Structure and behaviour only. PHP tree, .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

AreaDeskWhat happens
Visa / passportstudentaffair/sa_studentvisa, r_stdpassport
Insurancestudentaffair/sa_insurance, sa_insuranceclaim
Offer lettersregistry/ + RTFSelf-paid, government, Portuguese scholarship, sponsor templates
Emailemail.php / zemail/POST to cmssupport.limkokwing.net
Batch / portalsleonebatch/, 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).

cmssupport.limkokwing.net Google reCAPTCHA No gov scholarship API No api_student_* hooks

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

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

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

345 tables ~137 non-temp 6 SPs 91 triggers 9 views

Stored procedures (6)

ProcedureDomain
b_calcmoduleFinance — module fee calculation
b_calcschFinance — scholarship / assist calculation
f_calcassAcademic — assessment calculation
f_calccgpaAcademic — CGPA
f_calcgpaAcademic — GPA
f_calcgpa_oldAcademic — legacy GPA

Catalog: _proc-catalog.txt

Views (9)

Machine extract: _view-catalog.txt

Domain table signals

SignalApprox.Examples
Temp / scratch / dated~208temp_*, tempTicketTG*, *_20171220
f_* academic~44f_program, f_module, timetable / assessment
b_* finance~31b_invoice, b_payment, b_assist*
q_* lookup / letters~27q_letter, q_campus, grading
r_* student~26r_student, r_stdmodule, r_stdofferletter
s_* security / setup~8s_staff, s_userlevels
ac_* admissions~7ac_application, ac_enquiry
sa_* affairs~3sa_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 surfaceRaisd portalFlag
ac_* admissionsApplicantMap aliases — not Cyberjaya app_* names
Registry / academicStudent + StaffReuse r_* / f_* mental model
Finance assistStudent Finance / Staff BursaryLocal assist — no TEF feature flag
Student affairsStaff ServicesThin sa_* vs Cyberjaya EMGS
Email via cmssupportNotificationsDo 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
AspectCyberjayaBotswanaSierra Leone
Dump date23 Sep 202624 Sep 202623 Sep 2026
Databasecmscbjcmsbotswanaems_sierraleone
UI brandLUCT CMS familyCMS 0.9a / BWA-GBECMS-ICA V 1.0
Tables~1,942713345 (~137 non-temp)
Stored procedures~31846 (+15 fn)6
Triggers~23915791
Viewslarge4079
DesksMany campus apps + Laravel14 under botswana/campus/7 under sierraleone/
Admissions prefixapp_*app_*ac_*
Gov scholarship API—DTEF → tef.gov.bw—
Portal API hooksapi_student_* …api_* + portal_*_botswanaNot in dump
Batch folderpresentbotsbatch/sleonebatch/ empty
Accommodation / libraryYesYesNo desks in package
ADR-1 launch SoRYesNo — M5No — M5
Pages hubold-cms/old-cms-botswana/this page