Three abstractions
A product that spans a trade academy to a PhD university is not one product with six feature sets. It is one data model with two strategy engines and one universally-shaped object. Get these three right or you are maintaining four codebases forever.
authority→stages[]→ per-stagestatus- evidence pack, versioned documents, expiry date
- validated DCF export per regulator
- accreditation readiness scored live
- percentage marks · points
- GPA · GPA+capped · credit pass/fail
- thesis-weighted
- competency / NVQF · clinical OSCE
trade·credit·nvqf_leveldelivery_mode: theory, lab, clinical, OSCE, studio, newsroom, workshop, on-jobexternal_assessorprogramme_version·accreditation_track
1 · RegulatoryTrack — the abstraction the sector forced
The hardest thing about Pakistani education data is not that there are many regulators. It is that every regulator asks for the same three things in the same order. Once you see that, they stop being separate features and become rows in a configuration table.
| Rung | Stage 1 | Stage 2 | Stage 3 |
|---|---|---|---|
| TVET | NAVTTC registration | QAB affiliation (13 bodies, per province) | NAC-TVS accreditation |
| University | HEC recognition / DAI | Programme approval (PEC, NBEAC, PMC) | Accreditation cycle |
| College / School | BISE / FBISE registration | Board affiliation | HEC DAI registration |
| Affiliated college | College registration | Affiliation agreement with parent university | HEC affiliation renewal |
Adding dental costs one regulator row
(PMC/PMDC) plus flipping BDS courses to delivery_mode = clinical. Adding engineering costs one row
(PEC) plus delivery_mode = lab. Adding media costs nothing new — HEC is already in the table and
you add delivery_mode = newsroom. A discipline is configuration, not a module.
2 · GradingStrategy — the make-or-break decision
A school grades on percentage marks with teacher-set weights and no credit. A university grades on credit-weighted GPA with a cap, prerequisite chains and a progression policy. A TVET institute grades competency-based against NVQF level descriptors. A medical college runs OSCEs marked by external examiners. If these are four code paths you will never ship six rungs. If they are one strategy interface, going academy to university becomes configuration.
GradingStrategy
├── PercentageMarks school weighted component sum, teacher-set weights
├── PointsBased school/college
├── GPA college credit-weighted, configurable scale
├── GPA+Capped university min(actual, cap) — e.g. 4.0 cap on a 4.3 scale
├── CreditOnly university pass/fail + credit accumulation
├── ThesisWeighted university thesis + coursework + viva
├── Competency TVET NVQF / CBT&A level descriptors
└── CompetencyLevel clinical OSCE, level-based and non-numeric
Every grade, transcript, GPA calculation, eligibility check and progression rule routes through this interface. There is no second place this decision can be made.
3 · Course — one object, every rung
The unification came from adding the vocational rung. A trade and a course look different until you notice that both need: a theory component, a practical component, an assessment scheme, an external assessor, a level, and a place to be delivered. That is exactly the medical and media case too.
| Segment | Academic unit | delivery_mode | external_assessor | Level |
|---|---|---|---|---|
| TVET | Trade (450+) | Workshop, on-job | QAB assessor | NVQF 1–5 |
| Engineering | Course + lab | Lab, drawing studio, workshop | PEC OBA panel | Credit hours |
| Medical | Course + rotation | Clinical, OPD/IPD, skills lab | Clinical supervisor | Credit hours |
| Dental | Course + operatory | Preclinical lab, teaching clinic | External examiner | Credit hours |
| Media | Course + production | Newsroom, studio, edit suite | Industry mentor | Credit hours |
| School | Subject | Classroom | — | Percentage |
The four supporting abstractions
Versioned curriculum
A 2019 scheme and a 2024 scheme must coexist for cohorts
graduating under each. Programme → ProgrammeVersion. Generic ERPs get this wrong and it is the
number-one complaint in the Pakistani market.
Fee ledger, separate from GL
Cash, vouchers, partial payments, installments, sibling discounts, hardship, mid-semester proration, late fines, fund vs self finance. Naive designs break here every time.
Hold engine
Finance, academic, discipline and document holds gating course registration. This is the single most common student complaint in every Pakistani university — "my fee isn’t cleared".
Tenancy + federation
Institution → Campus → Department → Programme → Section, with an affiliated college modelled as a relationship, not a parent-child link. That distinction is the entire federation wedge.
Reference implementations to lean on
Do not rebuild these. Use them and move on:
Accounting
Double-entry GL, AP/AR, chart of accounts, fund accounting — reference ERPNext / Frappe / Odoo. Our differentiation is the fee ledger, not the general ledger.
Payroll
A multi-tenant PHP HRMS with payroll, recruitment, training, leave and performance already exists on the target infrastructure. Add EOBI and FBR specifics to it; do not rebuild the engine.
LMS
Blackboard is the HEC standard. Integrate over SCORM / xAPI / LTI 1.3. Competing with Blackboard on authoring depth is a two-year loss.