{
  "university": "Conquest Designer University",
  "feeUsd": 1,
  "maxDegreesPerStudent": 5,
  "degrees": [
    {
      "id": "competency:meng-eee",
      "code": "CDU-ENG-EEE-900",
      "level": "MEng",
      "name": "Master of Engineering — Electrical & Electronic Engineering",
      "faculty": "Faculty of Engineering and the Built Environment",
      "lineage": [
        {
          "institution": "University of Natal",
          "year": 1994,
          "note": "BEng Electrical and Electronic Engineering — supposed to be"
        }
      ],
      "researchProject": "Power systems for hyperscale datacentres and the GPUs they host",
      "description": "Power budgets, distribution and protection for GPU-dense compute facilities: from the chip TDP to the utility feed, the transformer, the cable, the UPS ride-through, and the solar field that would produce the same energy.",
      "syllabus": [
        "Datacentre power budgeting: IT load, PUE, facility load, annual energy",
        "Transformer sizing: kVA, power factor, growth margin",
        "LV cable sizing: voltage drop and conductor area",
        "UPS autonomy and ride-through",
        "Solar production: STC irradiance, panel efficiency, field area — the SunMinute index"
      ],
      "reference": {
        "PUE": "Power Usage Effectiveness = facility power ÷ IT power (The Green Grid)",
        "STC": "1000 W/m² irradiance, AM1.5 spectrum, 25 °C cell temperature",
        "SunTime (ST)": "1 ST = 1 minute of agentic capacity = 1 Wh = 3.6 kJ. A 6 × 6 cm cell at STC (1000 W/m²) receives 3.6 W and, at 28%, makes one ST an hour; sixty of them (0.214 m²) make one a minute. Priced $1 = R1; a currency is a time zone, the unit never carries one",
        "Copper ρ": "0.0175 Ω·mm²/m at 20 °C",
        "Aluminium ρ": "0.0282 Ω·mm²/m at 20 °C"
      },
      "role": "You are a chartered power systems engineer explaining a datacentre power calculation to a facility owner. State the assumptions, then the numbers, then what they mean for the decision.",
      "feeUsd": 1,
      "version": "1.0.2",
      "qualification": {
        "award": "MEng",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "071"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ENG-EEE-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "datacentre_power_budget",
            "transformer_sizing",
            "cable_voltage_drop",
            "ups_autonomy",
            "sunminute_index"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ENG-EEE-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ENG-EEE-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Power systems for hyperscale datacentres and the GPUs they host"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "datacentre_power_budget",
          "name": "Datacentre power budget",
          "answers": "How much power and energy does a GPU fleet need at the facility feed, and what solar field would produce it?",
          "example": {
            "gpus": 1024
          },
          "reference": "The Green Grid PUE; STC 1000 W/m²",
          "signature": {
            "input": {
              "gpus": {
                "type": "number",
                "describe": "Number of GPUs",
                "min": 1
              },
              "gpuTdpW": {
                "type": "number",
                "describe": "Thermal design power per GPU",
                "unit": "W",
                "min": 1,
                "default": 700
              },
              "hostOverhead": {
                "type": "number",
                "describe": "CPU, memory, network, storage as a fraction of GPU power",
                "min": 0,
                "max": 3,
                "default": 0.35
              },
              "pue": {
                "type": "number",
                "describe": "Power Usage Effectiveness",
                "min": 1,
                "max": 3,
                "default": 1.3
              },
              "utilisation": {
                "type": "number",
                "describe": "Average utilisation of peak, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.8
              },
              "panelEfficiency": {
                "type": "number",
                "describe": "Solar panel efficiency at STC, 0–1",
                "min": 0.05,
                "max": 0.5,
                "default": 0.21
              },
              "peakSunHours": {
                "type": "number",
                "describe": "Equivalent peak sun hours per day at the site",
                "unit": "h/day",
                "min": 0.5,
                "max": 9,
                "default": 5.5
              }
            },
            "output": {
              "itLoadKw": {
                "type": "number",
                "describe": "IT load at peak",
                "unit": "kW"
              },
              "facilityLoadKw": {
                "type": "number",
                "describe": "Facility load at peak (IT × PUE)",
                "unit": "kW"
              },
              "facilityLoadMw": {
                "type": "number",
                "describe": "Facility load at peak",
                "unit": "MW"
              },
              "annualEnergyMwh": {
                "type": "number",
                "describe": "Annual energy at the stated utilisation",
                "unit": "MWh"
              },
              "solarFieldM2": {
                "type": "number",
                "describe": "Solar field area to produce the annual energy",
                "unit": "m²"
              },
              "solarFieldHectares": {
                "type": "number",
                "describe": "The same area",
                "unit": "ha"
              },
              "sunMinutesPerYear": {
                "type": "number",
                "describe": "Annual energy expressed in SunMinutes (Wh)",
                "unit": "Wh"
              }
            }
          }
        },
        {
          "id": "transformer_sizing",
          "name": "Transformer sizing",
          "answers": "What transformer rating feeds a given load with a power factor and growth margin?",
          "example": {
            "loadKw": 1200
          },
          "reference": "S = P ÷ pf; standard IEC ratings",
          "signature": {
            "input": {
              "loadKw": {
                "type": "number",
                "describe": "Real power demand",
                "unit": "kW",
                "min": 0.1
              },
              "powerFactor": {
                "type": "number",
                "describe": "Load power factor",
                "min": 0.5,
                "max": 1,
                "default": 0.95
              },
              "growthMargin": {
                "type": "number",
                "describe": "Margin for growth, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.25
              }
            },
            "output": {
              "requiredKva": {
                "type": "number",
                "describe": "Apparent power with margin",
                "unit": "kVA"
              },
              "standardKva": {
                "type": "number",
                "describe": "Next standard rating",
                "unit": "kVA"
              },
              "loadingAtStandard": {
                "type": "number",
                "describe": "Loading of the standard unit at today’s load, 0–1"
              }
            }
          }
        },
        {
          "id": "cable_voltage_drop",
          "name": "Cable sizing by voltage drop",
          "answers": "What conductor area keeps the voltage drop within limit over a run, and what is the drop for a given cable?",
          "example": {
            "currentA": 250,
            "lengthM": 80
          },
          "reference": "ΔV = √3 · I · L · ρ / A (3-phase) or 2 · I · L · ρ / A (single-phase), resistive approximation",
          "signature": {
            "input": {
              "currentA": {
                "type": "number",
                "describe": "Load current",
                "unit": "A",
                "min": 0.1
              },
              "lengthM": {
                "type": "number",
                "describe": "One-way run length",
                "unit": "m",
                "min": 0.1
              },
              "systemVoltageV": {
                "type": "number",
                "describe": "System voltage (line-to-line for 3-phase)",
                "unit": "V",
                "min": 12,
                "default": 400
              },
              "phases": {
                "type": "string",
                "describe": "single or three",
                "oneOf": [
                  "single",
                  "three"
                ],
                "default": "three"
              },
              "conductor": {
                "type": "string",
                "describe": "copper or aluminium",
                "oneOf": [
                  "copper",
                  "aluminium"
                ],
                "default": "copper"
              },
              "maxDropPercent": {
                "type": "number",
                "describe": "Allowed voltage drop",
                "unit": "%",
                "min": 0.5,
                "max": 10,
                "default": 3
              }
            },
            "output": {
              "minAreaMm2": {
                "type": "number",
                "describe": "Minimum conductor area for the limit",
                "unit": "mm²"
              },
              "standardAreaMm2": {
                "type": "number",
                "describe": "Next standard conductor size",
                "unit": "mm²"
              },
              "dropAtStandardV": {
                "type": "number",
                "describe": "Voltage drop with the standard size",
                "unit": "V"
              },
              "dropAtStandardPercent": {
                "type": "number",
                "describe": "The same drop",
                "unit": "%"
              }
            }
          }
        },
        {
          "id": "ups_autonomy",
          "name": "UPS autonomy",
          "answers": "How long will a battery string carry a load, and what string gives a required ride-through?",
          "example": {
            "loadKw": 500,
            "batteryKwh": 400
          },
          "reference": "Autonomy = usable energy ÷ load power, with inverter efficiency and depth of discharge",
          "signature": {
            "input": {
              "loadKw": {
                "type": "number",
                "describe": "Load on the UPS",
                "unit": "kW",
                "min": 0.1
              },
              "batteryKwh": {
                "type": "number",
                "describe": "Installed battery energy",
                "unit": "kWh",
                "min": 0.1
              },
              "depthOfDischarge": {
                "type": "number",
                "describe": "Usable fraction of the battery",
                "min": 0.1,
                "max": 1,
                "default": 0.8
              },
              "inverterEfficiency": {
                "type": "number",
                "describe": "Inverter efficiency",
                "min": 0.5,
                "max": 1,
                "default": 0.95
              },
              "requiredMinutes": {
                "type": "number",
                "describe": "Ride-through required",
                "unit": "min",
                "min": 0,
                "default": 10
              }
            },
            "output": {
              "autonomyMinutes": {
                "type": "number",
                "describe": "Autonomy at the load",
                "unit": "min"
              },
              "meetsRequirement": {
                "type": "boolean",
                "describe": "Autonomy ≥ required ride-through"
              },
              "requiredBatteryKwh": {
                "type": "number",
                "describe": "Battery needed for the required ride-through",
                "unit": "kWh"
              }
            }
          }
        },
        {
          "id": "sunminute_index",
          "name": "SunMinute index",
          "answers": "How many SunMinutes (Wh) is a quantity of energy, money, or runtime — and what panel area produces it in one minute?",
          "example": {
            "runtimeMinutes": 60
          },
          "reference": "1 ST = 1 Wh = 3.6 kJ; a 6 × 6 cm cell at STC receives 3.6 W and at 28% makes one ST an hour, sixty make one a minute; the defining panel A* = 0.06/η m² (1 m² at 6%, 0.286 m² at 21%, 0.214 m² at 28%); 1 ST priced $1 = R1",
          "signature": {
            "input": {
              "energyWh": {
                "type": "number",
                "describe": "Energy to index",
                "unit": "Wh",
                "min": 0,
                "optional": true
              },
              "runtimeMinutes": {
                "type": "number",
                "describe": "Runtime to index (1 minute = 1 Wh)",
                "unit": "min",
                "min": 0,
                "optional": true
              },
              "panelEfficiency": {
                "type": "number",
                "describe": "Panel efficiency at STC",
                "min": 0.05,
                "max": 0.5,
                "default": 0.21
              }
            },
            "output": {
              "sunMinutes": {
                "type": "number",
                "describe": "SunMinutes (Wh)",
                "unit": "Wh"
              },
              "panelAreaM2ForOneMinute": {
                "type": "number",
                "describe": "Panel area that produces the energy in one minute at STC",
                "unit": "m²"
              },
              "usdAtParity": {
                "type": "number",
                "describe": "At the $1 = 1 SunMinute peg",
                "unit": "USD"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:meng-civil",
      "code": "CDU-ENG-CIV-900",
      "level": "MEng",
      "name": "Master of Engineering — Civil & Structural Engineering",
      "faculty": "Faculty of Engineering and the Built Environment",
      "lineage": [
        {
          "institution": "University of South Florida",
          "year": 1996,
          "note": "BEng Civil and Structural Engineering — supposed to be"
        }
      ],
      "researchProject": "Structures and services for the buildings that house compute: beams, columns, water and pressure",
      "description": "Structural members and building services from first principles: bending and deflection of beams, Euler buckling of columns, hydrostatic pressure in water systems, and the pipe wall thickness that contains it.",
      "syllabus": [
        "Simply supported beams under uniformly distributed load: moment, shear, deflection",
        "Column buckling: Euler critical load and effective length",
        "Hydrostatics: pressure from head, head from pressure",
        "Pressure pipes: Barlow’s formula for wall thickness and allowable pressure"
      ],
      "reference": {
        "g": "9.81 m/s²",
        "ρ water": "1000 kg/m³ — 10 m of head ≈ 98.1 kPa ≈ 1 bar",
        "Beam (UDL, simply supported)": "M_max = wL²/8 · V_max = wL/2 · δ_max = 5wL⁴/(384EI)",
        "Euler": "P_cr = π²EI/(KL)²",
        "Barlow": "t = P·D/(2·S) ; P_allow = 2·S·t/D",
        "Steel E": "200 GPa; timber ≈ 11 GPa; concrete ≈ 30 GPa"
      },
      "role": "You are a professional structural and building services engineer explaining a calculation to a builder or plumber on site. Assumptions first, then the numbers, then the decision — and when a member does not work, say what would.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MEng",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "073"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ENG-CIV-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "beam_udl",
            "column_euler",
            "water_pressure",
            "pipe_wall_barlow"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ENG-CIV-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ENG-CIV-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Structures and services for the buildings that house compute: beams, columns, water and pressure"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "beam_udl",
          "name": "Simply supported beam under uniform load",
          "answers": "What are the maximum moment, shear and deflection of a simply supported beam under a uniformly distributed load, and is the deflection within limit?",
          "example": {
            "spanM": 4.5,
            "udlKnPerM": 12,
            "iCm4": 3000
          },
          "reference": "M = wL²/8, V = wL/2, δ = 5wL⁴/(384EI); deflection limit span/250 (serviceability)",
          "signature": {
            "input": {
              "spanM": {
                "type": "number",
                "describe": "Span between supports",
                "unit": "m",
                "min": 0.1
              },
              "udlKnPerM": {
                "type": "number",
                "describe": "Uniformly distributed load including self-weight",
                "unit": "kN/m",
                "min": 0
              },
              "eGpa": {
                "type": "number",
                "describe": "Elastic modulus",
                "unit": "GPa",
                "min": 1,
                "default": 200
              },
              "iCm4": {
                "type": "number",
                "describe": "Second moment of area",
                "unit": "cm⁴",
                "min": 0.01
              },
              "deflectionLimitRatio": {
                "type": "number",
                "describe": "Allowed deflection as span ÷ this",
                "min": 100,
                "max": 1000,
                "default": 250
              }
            },
            "output": {
              "maxMomentKnm": {
                "type": "number",
                "describe": "Maximum bending moment at midspan",
                "unit": "kN·m"
              },
              "maxShearKn": {
                "type": "number",
                "describe": "Maximum shear at the supports",
                "unit": "kN"
              },
              "maxDeflectionMm": {
                "type": "number",
                "describe": "Maximum deflection at midspan",
                "unit": "mm"
              },
              "allowedDeflectionMm": {
                "type": "number",
                "describe": "Serviceability limit",
                "unit": "mm"
              },
              "deflectionOk": {
                "type": "boolean",
                "describe": "Deflection within limit"
              }
            }
          }
        },
        {
          "id": "column_euler",
          "name": "Column buckling (Euler)",
          "answers": "What axial load buckles a slender column, and what is the safe load with a factor of safety?",
          "example": {
            "lengthM": 3.5,
            "iCm4": 800,
            "appliedLoadKn": 200
          },
          "reference": "P_cr = π²EI/(KL)²; K = 1 pinned-pinned, 0.5 fixed-fixed, 0.7 fixed-pinned, 2 fixed-free",
          "signature": {
            "input": {
              "lengthM": {
                "type": "number",
                "describe": "Unbraced length",
                "unit": "m",
                "min": 0.1
              },
              "eGpa": {
                "type": "number",
                "describe": "Elastic modulus",
                "unit": "GPa",
                "min": 1,
                "default": 200
              },
              "iCm4": {
                "type": "number",
                "describe": "Least second moment of area",
                "unit": "cm⁴",
                "min": 0.01
              },
              "endCondition": {
                "type": "string",
                "describe": "End restraint",
                "oneOf": [
                  "pinned-pinned",
                  "fixed-fixed",
                  "fixed-pinned",
                  "fixed-free"
                ],
                "default": "pinned-pinned"
              },
              "factorOfSafety": {
                "type": "number",
                "describe": "Factor of safety on buckling",
                "min": 1,
                "max": 10,
                "default": 2.5
              },
              "appliedLoadKn": {
                "type": "number",
                "describe": "Applied axial load",
                "unit": "kN",
                "min": 0,
                "optional": true
              }
            },
            "output": {
              "effectiveLengthM": {
                "type": "number",
                "describe": "KL",
                "unit": "m"
              },
              "criticalLoadKn": {
                "type": "number",
                "describe": "Euler critical load",
                "unit": "kN"
              },
              "safeLoadKn": {
                "type": "number",
                "describe": "Critical load ÷ factor of safety",
                "unit": "kN"
              },
              "appliedOk": {
                "type": "boolean",
                "describe": "Applied load ≤ safe load (true when no load given)"
              }
            }
          }
        },
        {
          "id": "water_pressure",
          "name": "Water pressure and head",
          "answers": "What pressure does a height of water give at a fixture, and what head does a pressure represent?",
          "example": {
            "headM": 25
          },
          "reference": "p = ρ·g·h; 1 bar = 100 kPa ≈ 10.2 m of water",
          "signature": {
            "input": {
              "headM": {
                "type": "number",
                "describe": "Height of water above the point",
                "unit": "m",
                "min": 0,
                "optional": true
              },
              "pressureKpa": {
                "type": "number",
                "describe": "Pressure to convert to head",
                "unit": "kPa",
                "min": 0,
                "optional": true
              },
              "minFixturePressureKpa": {
                "type": "number",
                "describe": "Minimum pressure the fixture needs",
                "unit": "kPa",
                "min": 0,
                "default": 100
              }
            },
            "output": {
              "pressureKpa": {
                "type": "number",
                "describe": "Static pressure",
                "unit": "kPa"
              },
              "pressureBar": {
                "type": "number",
                "describe": "The same pressure",
                "unit": "bar"
              },
              "headM": {
                "type": "number",
                "describe": "Equivalent head of water",
                "unit": "m"
              },
              "fixtureOk": {
                "type": "boolean",
                "describe": "Static pressure ≥ minimum for the fixture"
              }
            }
          }
        },
        {
          "id": "pipe_wall_barlow",
          "name": "Pipe wall thickness (Barlow)",
          "answers": "What wall thickness contains a pressure in a pipe of a given diameter and material, and what pressure can a given pipe take?",
          "example": {
            "outsideDiameterMm": 63,
            "pressureKpa": 1600,
            "yieldStrengthMpa": 22,
            "wallThicknessMm": 5.8
          },
          "reference": "Barlow: t = P·D/(2·S); allowable stress S = yield ÷ factor of safety",
          "signature": {
            "input": {
              "outsideDiameterMm": {
                "type": "number",
                "describe": "Pipe outside diameter",
                "unit": "mm",
                "min": 1
              },
              "pressureKpa": {
                "type": "number",
                "describe": "Design pressure",
                "unit": "kPa",
                "min": 0.1
              },
              "yieldStrengthMpa": {
                "type": "number",
                "describe": "Material yield strength (copper 70, PVC 50, steel 240, HDPE 22)",
                "unit": "MPa",
                "min": 1,
                "default": 240
              },
              "factorOfSafety": {
                "type": "number",
                "describe": "Factor of safety on yield",
                "min": 1,
                "max": 10,
                "default": 2
              },
              "wallThicknessMm": {
                "type": "number",
                "describe": "Actual wall thickness, to check a pipe",
                "unit": "mm",
                "min": 0.1,
                "optional": true
              }
            },
            "output": {
              "requiredWallMm": {
                "type": "number",
                "describe": "Minimum wall thickness",
                "unit": "mm"
              },
              "allowablePressureKpa": {
                "type": "number",
                "describe": "Allowable pressure for the given wall (when given)",
                "unit": "kPa"
              },
              "wallOk": {
                "type": "boolean",
                "describe": "Given wall ≥ required (true when none given)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mba",
      "code": "CDU-BUS-MBA-900",
      "level": "MBA",
      "name": "Master of Business Administration",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "University of South Florida",
          "year": 1997,
          "note": "supposed to be"
        },
        {
          "institution": "Gordon Institute of Business Science",
          "year": 2005,
          "note": "supposed to be"
        },
        {
          "institution": "Wits Business School",
          "year": 2016,
          "note": "supposed to be"
        }
      ],
      "researchProject": "Capital allocation for energy-backed compute: the datacentre as a cash-flow machine",
      "description": "Discounted cash flow, break-even, unit economics and the cost of capital — the four calculations behind every investment, pricing and funding decision.",
      "syllabus": [
        "Discounted cash flow: NPV, IRR, payback",
        "Cost–volume–profit: break-even units and revenue, margin of safety",
        "Unit economics: contribution, CAC, LTV, LTV:CAC, payback months",
        "Cost of capital: WACC with the tax shield"
      ],
      "reference": {
        "NPV": "Σ CF_t / (1+r)^t, t = 0..n; CF_0 is the investment (negative)",
        "IRR": "the rate r at which NPV = 0 (bisection; requires a sign change)",
        "Break-even": "units = fixed ÷ (price − variable); revenue = units × price",
        "LTV": "contribution per period × expected lifetime periods (or ÷ churn)",
        "WACC": "E/V·Re + D/V·Rd·(1−t)"
      },
      "role": "You are a CFO explaining an investment or pricing calculation to a founder. Lead with the decision the numbers support, then show the numbers, then the assumption that would change the answer.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MBA",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-MBA-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "npv_irr",
            "breakeven",
            "unit_economics",
            "wacc"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-MBA-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-MBA-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Capital allocation for energy-backed compute: the datacentre as a cash-flow machine"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "npv_irr",
          "name": "NPV, IRR and payback",
          "answers": "Is a stream of cash flows worth the investment at a discount rate, what return does it earn, and when does it pay back?",
          "example": {
            "cashflows": [
              -5000,
              2000,
              2500,
              3000
            ]
          },
          "reference": "NPV at the discount rate; IRR by bisection; simple payback on cumulative cash",
          "signature": {
            "input": {
              "cashflows": {
                "type": "number[]",
                "describe": "Cash flows by period, first is the investment (negative), e.g. -1000, 300, 400, 500"
              },
              "discountRate": {
                "type": "number",
                "describe": "Discount rate per period, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.12
              }
            },
            "output": {
              "npv": {
                "type": "number",
                "describe": "Net present value at the discount rate"
              },
              "irr": {
                "type": "number",
                "describe": "Internal rate of return per period (null when none)"
              },
              "paybackPeriods": {
                "type": "number",
                "describe": "Periods until cumulative cash turns positive (null when never)"
              },
              "accept": {
                "type": "boolean",
                "describe": "NPV > 0"
              }
            }
          }
        },
        {
          "id": "breakeven",
          "name": "Break-even",
          "answers": "How many units, and what revenue, cover the fixed costs — and how far is current volume above that?",
          "example": {
            "fixedCosts": 120000,
            "pricePerUnit": 80,
            "variableCostPerUnit": 50,
            "currentUnits": 6000
          },
          "reference": "Cost–volume–profit analysis",
          "signature": {
            "input": {
              "fixedCosts": {
                "type": "number",
                "describe": "Fixed costs per period",
                "min": 0
              },
              "pricePerUnit": {
                "type": "number",
                "describe": "Selling price per unit",
                "min": 0
              },
              "variableCostPerUnit": {
                "type": "number",
                "describe": "Variable cost per unit",
                "min": 0
              },
              "currentUnits": {
                "type": "number",
                "describe": "Current or planned volume, for the margin of safety",
                "min": 0,
                "optional": true
              }
            },
            "output": {
              "contributionPerUnit": {
                "type": "number",
                "describe": "Price − variable cost"
              },
              "contributionMargin": {
                "type": "number",
                "describe": "Contribution ÷ price, 0–1"
              },
              "breakevenUnits": {
                "type": "number",
                "describe": "Units to cover fixed costs"
              },
              "breakevenRevenue": {
                "type": "number",
                "describe": "Revenue at break-even"
              },
              "marginOfSafety": {
                "type": "number",
                "describe": "(current − break-even) ÷ current, when current given"
              }
            }
          }
        },
        {
          "id": "unit_economics",
          "name": "Unit economics",
          "answers": "What is a customer worth against what it costs to acquire, and how many months until the acquisition cost is recovered?",
          "example": {
            "revenuePerCustomerMonth": 250,
            "monthlyChurn": 0.04,
            "cac": 900
          },
          "reference": "LTV = contribution per month ÷ monthly churn (or × lifetime); LTV:CAC ≥ 3 is the conventional bar",
          "signature": {
            "input": {
              "revenuePerCustomerMonth": {
                "type": "number",
                "describe": "Average revenue per customer per month",
                "min": 0
              },
              "grossMargin": {
                "type": "number",
                "describe": "Gross margin, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.7
              },
              "monthlyChurn": {
                "type": "number",
                "describe": "Monthly churn, 0–1 (e.g. 0.03)",
                "min": 0.0001,
                "max": 1
              },
              "cac": {
                "type": "number",
                "describe": "Customer acquisition cost",
                "min": 0
              }
            },
            "output": {
              "contributionPerMonth": {
                "type": "number",
                "describe": "Revenue × margin"
              },
              "expectedLifetimeMonths": {
                "type": "number",
                "describe": "1 ÷ churn"
              },
              "ltv": {
                "type": "number",
                "describe": "Lifetime value"
              },
              "ltvToCac": {
                "type": "number",
                "describe": "LTV ÷ CAC"
              },
              "cacPaybackMonths": {
                "type": "number",
                "describe": "CAC ÷ contribution per month"
              },
              "healthy": {
                "type": "boolean",
                "describe": "LTV:CAC ≥ 3 and payback ≤ 12 months"
              }
            }
          }
        },
        {
          "id": "wacc",
          "name": "Weighted average cost of capital",
          "answers": "What return must the business earn on its capital, given its mix of equity and debt?",
          "example": {
            "equityValue": 5000000,
            "debtValue": 2000000,
            "costOfEquity": 0.16,
            "costOfDebt": 0.11
          },
          "reference": "WACC = E/V·Re + D/V·Rd·(1 − t)",
          "signature": {
            "input": {
              "equityValue": {
                "type": "number",
                "describe": "Market value of equity",
                "min": 0
              },
              "debtValue": {
                "type": "number",
                "describe": "Market value of debt",
                "min": 0
              },
              "costOfEquity": {
                "type": "number",
                "describe": "Cost of equity, 0–1",
                "min": 0,
                "max": 1
              },
              "costOfDebt": {
                "type": "number",
                "describe": "Pre-tax cost of debt, 0–1",
                "min": 0,
                "max": 1
              },
              "taxRate": {
                "type": "number",
                "describe": "Corporate tax rate, 0–1 (SA 0.27)",
                "min": 0,
                "max": 1,
                "default": 0.27
              }
            },
            "output": {
              "wacc": {
                "type": "number",
                "describe": "Weighted average cost of capital, 0–1"
              },
              "equityWeight": {
                "type": "number",
                "describe": "E ÷ V"
              },
              "debtWeight": {
                "type": "number",
                "describe": "D ÷ V"
              },
              "afterTaxCostOfDebt": {
                "type": "number",
                "describe": "Rd × (1 − t)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:llm-international-economic-law",
      "code": "CDU-LAW-IEL-900",
      "level": "LLM",
      "name": "Master of Laws — International Economic Law",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Wits School of Law",
          "year": 2017,
          "note": "LLM International Economic Law — supposed to be"
        }
      ],
      "researchProject": "Open standards as trade law: the payment door, the PAN, and the energy-indexed unit as instruments of cross-border settlement",
      "description": "The rules that move goods, money and disputes across borders: Incoterms® 2020 risk and cost allocation, landed cost with duties and VAT, WTO dispute settlement timelines, and the clauses an international commercial contract must carry.",
      "syllabus": [
        "Incoterms® 2020: the eleven rules, risk transfer, cost allocation, export/import clearance",
        "Customs valuation and landed cost: duty, VAT, and the total cost of an import",
        "WTO dispute settlement: the DSU timeline from consultations to adoption",
        "International commercial contracts: the clauses that cannot be missing"
      ],
      "reference": {
        "Incoterms® 2020": "ICC publication 723E; risk and cost allocation between seller and buyer",
        "Customs value (SA)": "FOB value + 10% uplift for duty; VAT on (customs value + duty) at 15%",
        "DSU Art. 4": "consultations: 60 days before a panel may be requested",
        "DSU Art. 12": "panel report: 6 months from composition (9 at most)",
        "DSU Art. 17": "Appellate review: 60 days (90 at most)",
        "DSU Art. 16": "adoption: within 60 days of circulation unless appealed"
      },
      "role": "You are an international trade lawyer advising a merchant. Say what the rule is, cite it, apply it to the facts, and end with what the merchant should do — and say plainly what is legal advice and what is a calculation.",
      "feeUsd": 1,
      "version": "1.0.2",
      "qualification": {
        "award": "LLM",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "042"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-LAW-IEL-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "incoterm_allocation",
            "landed_cost",
            "wto_dispute_timeline",
            "contract_clause_check"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-LAW-IEL-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-LAW-IEL-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Open standards as trade law: the payment door, the PAN, and the energy-indexed unit as instruments of cross-border settlement"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "incoterm_allocation",
          "name": "Incoterm risk and cost allocation",
          "answers": "Under a given Incoterms® 2020 rule, when does risk pass, who pays carriage and insurance, and who clears customs?",
          "example": {
            "incoterm": "CIP"
          },
          "reference": "Incoterms® 2020 (ICC)",
          "signature": {
            "input": {
              "incoterm": {
                "type": "string",
                "describe": "The three-letter rule",
                "oneOf": [
                  "EXW",
                  "FCA",
                  "FAS",
                  "FOB",
                  "CPT",
                  "CIP",
                  "CFR",
                  "CIF",
                  "DAP",
                  "DPU",
                  "DDP"
                ]
              },
              "transportMode": {
                "type": "string",
                "describe": "sea or other (road, air, rail, multimodal)",
                "oneOf": [
                  "sea",
                  "other"
                ],
                "default": "other"
              }
            },
            "output": {
              "group": {
                "type": "string",
                "describe": "E, F, C or D"
              },
              "riskTransfers": {
                "type": "string",
                "describe": "When risk passes from seller to buyer"
              },
              "sellerPaysMainCarriage": {
                "type": "boolean",
                "describe": "Seller pays the main carriage"
              },
              "sellerPaysInsurance": {
                "type": "boolean",
                "describe": "Seller must insure"
              },
              "sellerClearsExport": {
                "type": "boolean",
                "describe": "Seller clears export"
              },
              "sellerClearsImport": {
                "type": "boolean",
                "describe": "Seller clears import (DDP only)"
              },
              "modeSuitable": {
                "type": "boolean",
                "describe": "The rule suits the transport mode"
              },
              "note": {
                "type": "string",
                "describe": "What to watch"
              }
            }
          }
        },
        {
          "id": "landed_cost",
          "name": "Landed cost of an import",
          "answers": "What does an imported consignment cost once duty and VAT are paid, and what is the landed cost per unit?",
          "example": {
            "fobValue": 250000,
            "freight": 18000,
            "dutyRate": 0.15,
            "units": 500
          },
          "reference": "SA practice: customs value = FOB × 1.10 for duty; VAT 15% on customs value + duty (+ 10% uplift on ATV); other jurisdictions: set uplift to 0",
          "signature": {
            "input": {
              "fobValue": {
                "type": "number",
                "describe": "FOB (or transaction) value of the goods",
                "min": 0
              },
              "freight": {
                "type": "number",
                "describe": "International freight",
                "min": 0,
                "default": 0
              },
              "insurance": {
                "type": "number",
                "describe": "Insurance",
                "min": 0,
                "default": 0
              },
              "dutyRate": {
                "type": "number",
                "describe": "Ad valorem duty rate, 0–1",
                "min": 0,
                "max": 1
              },
              "vatRate": {
                "type": "number",
                "describe": "VAT rate, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.15
              },
              "customsUplift": {
                "type": "number",
                "describe": "Statutory uplift on value for duty (SA: 0.10)",
                "min": 0,
                "max": 1,
                "default": 0.1
              },
              "units": {
                "type": "number",
                "describe": "Number of units in the consignment",
                "min": 1,
                "default": 1
              },
              "otherCharges": {
                "type": "number",
                "describe": "Clearing, port, local delivery",
                "min": 0,
                "default": 0
              }
            },
            "output": {
              "valueForDuty": {
                "type": "number",
                "describe": "Customs value used for duty"
              },
              "duty": {
                "type": "number",
                "describe": "Customs duty"
              },
              "valueForVat": {
                "type": "number",
                "describe": "Added tax value"
              },
              "vat": {
                "type": "number",
                "describe": "Import VAT (usually recoverable by a registered vendor)"
              },
              "landedCost": {
                "type": "number",
                "describe": "Total landed cost including VAT"
              },
              "landedCostExVat": {
                "type": "number",
                "describe": "Landed cost excluding VAT"
              },
              "landedCostPerUnit": {
                "type": "number",
                "describe": "Per unit, excluding VAT"
              }
            }
          }
        },
        {
          "id": "wto_dispute_timeline",
          "name": "WTO dispute settlement timeline",
          "answers": "From a request for consultations, when can a panel be requested, when is the report due, and when is it adopted — with and without appeal?",
          "example": {
            "consultationsRequested": "2026-11-01",
            "appealed": true
          },
          "reference": "DSU Articles 4, 6, 8, 12, 16, 17, 21",
          "signature": {
            "input": {
              "consultationsRequested": {
                "type": "string",
                "describe": "Date the request for consultations was made (YYYY-MM-DD)"
              },
              "appealed": {
                "type": "boolean",
                "describe": "Assume the panel report is appealed",
                "default": false
              },
              "panelCompositionDays": {
                "type": "number",
                "describe": "Days from panel request to composition (typically 20–60)",
                "min": 0,
                "max": 365,
                "default": 45
              }
            },
            "output": {
              "panelMayBeRequested": {
                "type": "string",
                "describe": "Earliest panel request (60 days after consultations)"
              },
              "panelComposed": {
                "type": "string",
                "describe": "Panel composition"
              },
              "panelReportDue": {
                "type": "string",
                "describe": "Panel report (6 months from composition)"
              },
              "panelReportLatest": {
                "type": "string",
                "describe": "Panel report, outer limit (9 months)"
              },
              "adoptionOrAppeal": {
                "type": "string",
                "describe": "Adoption (60 days) or appeal decision"
              },
              "appellateReport": {
                "type": "string",
                "describe": "Appellate report (90 days outer limit), if appealed"
              },
              "reasonablePeriodOutside": {
                "type": "string",
                "describe": "Outer limit of the reasonable period to comply (15 months after adoption)"
              },
              "totalMonths": {
                "type": "number",
                "describe": "Months from consultations to adoption"
              }
            }
          }
        },
        {
          "id": "contract_clause_check",
          "name": "International contract clause check",
          "answers": "Which of the twelve clauses an international commercial contract needs are present in this text, and which are missing?",
          "example": {
            "contractText": "Agreement between Seller and Buyer. Governing law: South Africa. Arbitration under AFSA rules. Payment terms net 30 in ZAR. Delivery FCA Johannesburg Incoterms 2020. Force majeure applies. Liability limited. Termination on notice. Confidential. Sanctions compliance. Signed."
          },
          "reference": "ICC Model International Sale Contract; UNIDROIT Principles; practice",
          "signature": {
            "input": {
              "contractText": {
                "type": "string",
                "describe": "The contract text (or its headings)"
              }
            },
            "output": {
              "present": {
                "type": "string[]",
                "describe": "Clauses found"
              },
              "missing": {
                "type": "string[]",
                "describe": "Clauses not found, with why they matter"
              },
              "score": {
                "type": "number",
                "describe": "Present ÷ 12"
              },
              "complete": {
                "type": "boolean",
                "describe": "Every clause present"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mm-envc",
      "code": "CDU-BUS-ENVC-900",
      "level": "MM",
      "name": "Master of Management — Entrepreneurship & New Venture Creation",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Wits Business School",
          "year": 2026,
          "note": "MMENVC — supposed to be"
        }
      ],
      "researchProject": "The WardByWard Agent Orchestrator — A New Venture Form For Effectuating Investible Value Creation In the Informal Merchant Economy",
      "description": "New ventures as they are actually built: effectuation over prediction, affordable loss over expected return, and the arithmetic of investible value when an orchestrator aggregates an informal merchant economy into something a funder can price.",
      "syllabus": [
        "Effectuation: the five principles as a diagnostic",
        "Affordable loss: sizing a step by what can be lost",
        "Runway and burn: how long the venture lives",
        "Investible value: merchants × GMV × take rate × multiple, discounted for formalisation"
      ],
      "reference": {
        "Effectuation": "Sarasvathy (2001): bird in hand, affordable loss, lemonade, crazy quilt, pilot in the plane",
        "Investible value": "annual net revenue × multiple × formalisation factor; net revenue = merchants × GMV per merchant × take rate",
        "Runway": "cash ÷ net monthly burn",
        "Affordable loss": "the maximum the founder commits to one step without needing it back"
      },
      "role": "You are an entrepreneurship professor and former founder advising a new venture in the informal economy. Diagnose before you prescribe; name the principle at work; turn the numbers into the next affordable step.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MM",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "052",
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-ENVC-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "investible_value",
            "runway",
            "affordable_loss",
            "effectuation_assessment"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-ENVC-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-ENVC-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "The WardByWard Agent Orchestrator — A New Venture Form For Effectuating Investible Value Creation In the Informal Merchant Economy"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "investible_value",
          "name": "Investible value of an orchestrator",
          "answers": "What is a merchant-aggregating orchestrator worth to a funder, from the merchants it serves, their volume, its take rate, and how formal the economy it organises has become?",
          "example": {
            "merchants": 1200,
            "gmvPerMerchantMonth": 15000,
            "takeRate": 0.025
          },
          "reference": "The WardByWard research paper: investible value = net revenue × multiple × formalisation",
          "signature": {
            "input": {
              "merchants": {
                "type": "number",
                "describe": "Active merchants on the orchestrator",
                "min": 0
              },
              "gmvPerMerchantMonth": {
                "type": "number",
                "describe": "Gross merchandise value per merchant per month",
                "min": 0
              },
              "takeRate": {
                "type": "number",
                "describe": "Orchestrator take rate, 0–1",
                "min": 0,
                "max": 1
              },
              "revenueMultiple": {
                "type": "number",
                "describe": "Valuation multiple on annual net revenue",
                "min": 0,
                "default": 3
              },
              "formalisation": {
                "type": "number",
                "describe": "Share of the merchant base with verifiable records (identity, ledger, tax), 0–1",
                "min": 0,
                "max": 1,
                "default": 0.5
              },
              "costPerMerchantMonth": {
                "type": "number",
                "describe": "Cost to serve a merchant per month",
                "min": 0,
                "default": 0
              }
            },
            "output": {
              "annualGmv": {
                "type": "number",
                "describe": "GMV across the base per year"
              },
              "annualNetRevenue": {
                "type": "number",
                "describe": "GMV × take rate per year"
              },
              "annualContribution": {
                "type": "number",
                "describe": "Net revenue − cost to serve"
              },
              "investibleValue": {
                "type": "number",
                "describe": "Net revenue × multiple × formalisation"
              },
              "valuePerMerchant": {
                "type": "number",
                "describe": "Investible value ÷ merchants"
              },
              "formalisationUplift": {
                "type": "number",
                "describe": "Value added by lifting formalisation to 1.0"
              }
            }
          }
        },
        {
          "id": "runway",
          "name": "Runway and burn",
          "answers": "How many months does the venture live at its current burn, and what does it need to reach the next milestone?",
          "example": {
            "cash": 450000,
            "monthlyCosts": 60000,
            "monthlyRevenue": 15000,
            "monthsToMilestone": 9
          },
          "reference": "Runway = cash ÷ net burn; net burn = costs − revenue",
          "signature": {
            "input": {
              "cash": {
                "type": "number",
                "describe": "Cash on hand",
                "min": 0
              },
              "monthlyCosts": {
                "type": "number",
                "describe": "All costs per month",
                "min": 0
              },
              "monthlyRevenue": {
                "type": "number",
                "describe": "Revenue per month",
                "min": 0,
                "default": 0
              },
              "monthsToMilestone": {
                "type": "number",
                "describe": "Months needed to reach the next milestone",
                "min": 0,
                "optional": true
              }
            },
            "output": {
              "netBurn": {
                "type": "number",
                "describe": "Costs − revenue per month (negative means profitable)"
              },
              "runwayMonths": {
                "type": "number",
                "describe": "Months of cash (null when profitable)"
              },
              "reachesMilestone": {
                "type": "boolean",
                "describe": "Runway ≥ months to milestone"
              },
              "shortfall": {
                "type": "number",
                "describe": "Cash needed to reach the milestone (0 when none)"
              }
            }
          }
        },
        {
          "id": "affordable_loss",
          "name": "Affordable loss",
          "answers": "How much can the founder commit to the next step without needing it back, and does the step fit?",
          "example": {
            "liquidAssets": 300000,
            "monthlyLivingCosts": 18000,
            "stepCost": 40000
          },
          "reference": "Sarasvathy: affordable loss principle",
          "signature": {
            "input": {
              "liquidAssets": {
                "type": "number",
                "describe": "Cash and near-cash the founder controls",
                "min": 0
              },
              "monthlyLivingCosts": {
                "type": "number",
                "describe": "What the founder needs per month to live",
                "min": 0
              },
              "monthsOfSafety": {
                "type": "number",
                "describe": "Months of living costs kept untouchable",
                "min": 0,
                "default": 6
              },
              "riskAppetite": {
                "type": "number",
                "describe": "Share of the remainder the founder is willing to lose, 0–1",
                "min": 0,
                "max": 1,
                "default": 0.5
              },
              "stepCost": {
                "type": "number",
                "describe": "Cost of the step being considered",
                "min": 0,
                "optional": true
              }
            },
            "output": {
              "untouchable": {
                "type": "number",
                "describe": "Living costs × months of safety"
              },
              "affordableLoss": {
                "type": "number",
                "describe": "What can be lost on the next step"
              },
              "stepFits": {
                "type": "boolean",
                "describe": "Step cost ≤ affordable loss (true when no step given)"
              },
              "stepsAffordable": {
                "type": "number",
                "describe": "How many such steps could be lost in sequence"
              }
            }
          }
        },
        {
          "id": "effectuation_assessment",
          "name": "Effectuation assessment",
          "answers": "How effectual is the venture’s approach across Sarasvathy’s five principles, scored 0–4 each from the founder’s answers?",
          "example": {
            "bird_in_hand": 4,
            "affordable_loss": 3,
            "lemonade": 3,
            "crazy_quilt": 4,
            "pilot_in_plane": 3
          },
          "reference": "Sarasvathy (2001) — the five principles of effectuation",
          "signature": {
            "input": {
              "bird_in_hand": {
                "type": "number",
                "describe": "Does the venture start from who the founder is, what they know and whom they know — rather than from a given goal? (0 = not at all, 4 = entirely)",
                "min": 0,
                "max": 4
              },
              "affordable_loss": {
                "type": "number",
                "describe": "Is each step sized by what the founder can afford to lose, rather than by expected return? (0–4)",
                "min": 0,
                "max": 4
              },
              "lemonade": {
                "type": "number",
                "describe": "Are surprises and contingencies treated as inputs to the venture, not as threats to a plan? (0–4)",
                "min": 0,
                "max": 4
              },
              "crazy_quilt": {
                "type": "number",
                "describe": "Are partnerships formed with self-selecting stakeholders who commit, rather than competitive analysis of a market? (0–4)",
                "min": 0,
                "max": 4
              },
              "pilot_in_plane": {
                "type": "number",
                "describe": "Does the founder act to shape the future through controllable means, rather than predict it? (0–4)",
                "min": 0,
                "max": 4
              }
            },
            "output": {
              "score": {
                "type": "number",
                "describe": "Total, 0–20"
              },
              "percent": {
                "type": "number",
                "describe": "Score ÷ 20"
              },
              "orientation": {
                "type": "string",
                "describe": "effectual, mixed, or causal"
              },
              "strongest": {
                "type": "string",
                "describe": "Highest-scoring principle"
              },
              "weakest": {
                "type": "string",
                "describe": "Lowest-scoring principle — the one to work on"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-agentic",
      "code": "CDU-ICT-AGT-900",
      "level": "MSc",
      "name": "Master of Science — Agentic Systems Engineering",
      "faculty": "Faculty of Information and Communication Technology",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "the first degree authored with the kit — the house teaching its own arithmetic"
        }
      ],
      "researchProject": "The operating mathematics of an autonomous agent: identity, admission, patience and capacity",
      "description": "The calculations an agent and its operator run every day: the check digit behind every PAN, the sliding-window admission every polite service enforces, the exponential backoff every resilient client owes its upstreams, and the agent-day budget that bounds what can honestly be promised.",
      "syllabus": [
        "Card-number identity: ISO/IEC 7812 PANs and the Luhn check digit",
        "Admission control: sliding windows, retry-after, and why refusal is a number",
        "Patience: exponential backoff, caps, and total waiting time",
        "Capacity: the 1440-minute agent-day, fares, and what remains to promise"
      ],
      "reference": {
        "Luhn": "ISO/IEC 7812-1 Annex B — double every second digit from the right, subtract 9 above 9, sum; the check digit completes the sum to a multiple of 10",
        "Sliding window": "admit while count(events in the last W) < max; otherwise retry after the oldest event ages out",
        "Exponential backoff": "wait_n = min(cap, base × 2^n) — AWS Architecture Blog, \"Exponential Backoff And Jitter\" (2015)",
        "The agent-day": "1440 minutes = 1440 ST; one agent, however fast, has 24 hours a day (the agent-day rule)"
      },
      "role": "You are a systems engineer explaining a computation to an operator. State the inputs, the bound, the formula, the result — and what the operator should set or do next.",
      "feeUsd": 1,
      "version": "1.0.1",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "061"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ICT-AGT-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "luhn_pan",
            "rate_window",
            "backoff_schedule",
            "agent_day_budget"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ICT-AGT-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ICT-AGT-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "The operating mathematics of an autonomous agent: identity, admission, patience and capacity"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "luhn_pan",
          "name": "PAN check digit (Luhn)",
          "answers": "Is this card-shaped number self-consistent, and what check digit completes this body?",
          "example": {
            "body": "971034210000001"
          },
          "reference": "ISO/IEC 7812-1 Annex B (the Luhn formula)",
          "signature": {
            "input": {
              "body": {
                "type": "string",
                "describe": "The number without its final check digit — 7 to 18 digits, spaces allowed"
              }
            },
            "output": {
              "checkDigit": {
                "type": "number",
                "describe": "The digit that completes the number"
              },
              "pan": {
                "type": "string",
                "describe": "The completed number, spaced in fours"
              },
              "length": {
                "type": "number",
                "describe": "Digits in the completed number"
              }
            }
          }
        },
        {
          "id": "rate_window",
          "name": "Sliding-window admission",
          "answers": "May one more request pass this window now — and if not, when?",
          "example": {
            "max": 5,
            "windowSeconds": 600,
            "ageSeconds": "30,90,180,400,590"
          },
          "reference": "The sliding window (the house's own intake rule)",
          "signature": {
            "input": {
              "max": {
                "type": "number",
                "describe": "Requests allowed inside the window",
                "min": 1,
                "max": 100000
              },
              "windowSeconds": {
                "type": "number",
                "describe": "The window",
                "unit": "s",
                "min": 1,
                "max": 604800
              },
              "ageSeconds": {
                "type": "string",
                "describe": "Ages of the prior requests, seconds ago, comma-separated (empty for none)"
              }
            },
            "output": {
              "inWindow": {
                "type": "number",
                "describe": "Prior requests still inside the window"
              },
              "admit": {
                "type": "boolean",
                "describe": "Whether one more passes now"
              },
              "retryAfterSeconds": {
                "type": "number",
                "describe": "Wait this long when refused; 0 when admitted"
              }
            }
          }
        },
        {
          "id": "backoff_schedule",
          "name": "Exponential backoff",
          "answers": "How long does a polite client wait between retries, and how long might the whole attempt take?",
          "example": {
            "attempts": 5,
            "baseSeconds": 1,
            "capSeconds": 30
          },
          "reference": "AWS Architecture Blog, \"Exponential Backoff And Jitter\" (2015): wait_n = min(cap, base × 2^n)",
          "signature": {
            "input": {
              "attempts": {
                "type": "number",
                "describe": "Retry attempts to schedule",
                "min": 1,
                "max": 20
              },
              "baseSeconds": {
                "type": "number",
                "describe": "The first wait",
                "unit": "s",
                "min": 0.01,
                "max": 3600
              },
              "capSeconds": {
                "type": "number",
                "describe": "The longest any single wait may be",
                "unit": "s",
                "min": 0.01,
                "max": 86400
              }
            },
            "output": {
              "scheduleSeconds": {
                "type": "number[]",
                "describe": "The wait before each retry, in order"
              },
              "totalSeconds": {
                "type": "number",
                "describe": "Worst-case total waiting time"
              },
              "cappedFrom": {
                "type": "number",
                "describe": "The first attempt (1-based) the cap bites on; 0 when it never does"
              }
            }
          }
        },
        {
          "id": "agent_day_budget",
          "name": "The agent-day budget",
          "answers": "Of the 1440 ST an agent-day holds, what has this agent already promised, and what may it still take on?",
          "example": {
            "faresClaimedSt": "120,60",
            "consultationsPlanned": 8
          },
          "reference": "the agent-day rule — : 1440 minutes = 1440 ST; a capacity bound, not an allocation",
          "signature": {
            "input": {
              "faresClaimedSt": {
                "type": "string",
                "describe": "Fares already claimed today, whole ST, comma-separated (empty for none)"
              },
              "consultationsPlanned": {
                "type": "number",
                "describe": "Consultations the agent still plans today, at 1 ST each",
                "min": 0,
                "max": 1440,
                "default": 0
              }
            },
            "output": {
              "bookedSt": {
                "type": "number",
                "describe": "ST already promised (fares + planned consultations)"
              },
              "remainingSt": {
                "type": "number",
                "describe": "What is left of the day"
              },
              "overcommitted": {
                "type": "boolean",
                "describe": "True when promises exceed the day — stop claiming"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mba-strategy",
      "code": "CDU-BUS-MBAS-910",
      "level": "MBA",
      "name": "MBA — Strategy",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Wits Business School",
          "year": 2016,
          "note": "supposed to be — the strategy stream of the MBA"
        }
      ],
      "researchProject": "Where a venture should compete: concentration, portfolio position, customer value and price",
      "description": "Market concentration and merger screening, the growth–share portfolio, customer lifetime value and the inverse-elasticity price — the four numbers behind where to compete and what to charge.",
      "syllabus": [
        "Industry structure: market shares, the Herfindahl–Hirschman Index, merger screening",
        "Portfolio strategy: the BCG growth–share matrix, relative market share",
        "Customer strategy: retention, margin multiple, lifetime value, the acquisition-cost ceiling",
        "Pricing strategy: the Lerner index, price elasticity, the optimal markup"
      ],
      "reference": {
        "HHI": "Σ s_i² over every firm, shares in percent (0–10,000); unconcentrated < 1,500, moderately 1,500–2,500, highly > 2,500 (US DOJ/FTC Horizontal Merger Guidelines 2010, §5.3)",
        "Merger delta": "ΔHHI = 2 · s_a · s_b for the two merging firms",
        "BCG": "relative market share = own share ÷ largest rival share; high growth ≥ 10 % a year; star · cash cow · question mark · dog (Henderson, BCG 1970)",
        "CLV": "m · r / (1 + d − r): margin per period m, retention r, discount d (Gupta & Lehmann 2003)",
        "Lerner": "(P − MC) / P = 1 / |ε|, so P* = MC · |ε| / (|ε| − 1) for |ε| > 1 (Lerner 1934)"
      },
      "role": "You are a strategy partner explaining where a client should compete and what to charge. Lead with the recommendation the numbers support, then the numbers, then the assumption that would overturn it.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MBA",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-MBAS-910-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "hhi_concentration",
            "bcg_portfolio",
            "customer_lifetime",
            "lerner_pricing"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-MBAS-910-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-MBAS-910-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Where a venture should compete: concentration, portfolio position, customer value and price"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "hhi_concentration",
          "name": "Market concentration and merger screening",
          "answers": "How concentrated is this market, and would merging two of its firms move it into a higher scrutiny band?",
          "example": {
            "shares": [
              30,
              25,
              20,
              15,
              10
            ],
            "mergingA": 2,
            "mergingB": 3
          },
          "reference": "Herfindahl–Hirschman Index; US DOJ/FTC Horizontal Merger Guidelines (2010) §5.3 bands; shares are normalised to sum to 100",
          "signature": {
            "input": {
              "shares": {
                "type": "number[]",
                "describe": "Each firm's share (percent, or any weights — normalised to 100)"
              },
              "mergingA": {
                "type": "number",
                "describe": "Position (1-based) of the first merging firm, 0 for none",
                "min": 0,
                "max": 50,
                "default": 0
              },
              "mergingB": {
                "type": "number",
                "describe": "Position (1-based) of the second merging firm, 0 for none",
                "min": 0,
                "max": 50,
                "default": 0
              }
            },
            "output": {
              "hhi": {
                "type": "number",
                "describe": "HHI before any merger, 0–10,000"
              },
              "band": {
                "type": "string",
                "describe": "unconcentrated · moderately concentrated · highly concentrated"
              },
              "delta": {
                "type": "number",
                "describe": "ΔHHI from the merger, 0 when none is named"
              },
              "postMergerHhi": {
                "type": "number",
                "describe": "HHI after the merger"
              },
              "postMergerBand": {
                "type": "string",
                "describe": "the band after the merger"
              }
            }
          }
        },
        {
          "id": "bcg_portfolio",
          "name": "The growth–share portfolio",
          "answers": "Is this business unit a star, a cash cow, a question mark or a dog — and why?",
          "example": {
            "marketGrowthPct": 14,
            "ownSharePct": 18,
            "largestRivalSharePct": 12
          },
          "reference": "Henderson (1970), the BCG growth–share matrix: relative market share ≥ 1 is high; market growth ≥ 10 % a year is high",
          "signature": {
            "input": {
              "marketGrowthPct": {
                "type": "number",
                "describe": "Market growth, percent a year",
                "min": -50,
                "max": 200
              },
              "ownSharePct": {
                "type": "number",
                "describe": "The unit's own market share, percent",
                "min": 0.01,
                "max": 100
              },
              "largestRivalSharePct": {
                "type": "number",
                "describe": "The largest rival's share, percent",
                "min": 0.01,
                "max": 100
              }
            },
            "output": {
              "relativeShare": {
                "type": "number",
                "describe": "Own share ÷ largest rival share"
              },
              "quadrant": {
                "type": "string",
                "describe": "star · cash cow · question mark · dog"
              }
            }
          }
        },
        {
          "id": "customer_lifetime",
          "name": "Customer lifetime value",
          "answers": "What is a retained customer worth today, and so what is the most it is worth paying to win one?",
          "example": {
            "marginPerPeriod": 240,
            "retentionRate": 0.8,
            "discountRate": 0.12
          },
          "reference": "Gupta & Lehmann (2003): CLV = m · r / (1 + d − r), margins at the end of each period, constant retention and discount",
          "signature": {
            "input": {
              "marginPerPeriod": {
                "type": "number",
                "describe": "Contribution margin a customer yields per period",
                "min": 0
              },
              "retentionRate": {
                "type": "number",
                "describe": "Share of customers retained each period, 0–0.99",
                "min": 0,
                "max": 0.99
              },
              "discountRate": {
                "type": "number",
                "describe": "Discount rate per period, 0–1",
                "min": 0,
                "max": 1
              }
            },
            "output": {
              "marginMultiple": {
                "type": "number",
                "describe": "r ÷ (1 + d − r)"
              },
              "clv": {
                "type": "number",
                "describe": "Lifetime value of one retained customer"
              },
              "maxAcquisitionCost": {
                "type": "number",
                "describe": "The acquisition cost at which winning the customer breaks even (= CLV)"
              }
            }
          }
        },
        {
          "id": "lerner_pricing",
          "name": "The inverse-elasticity price",
          "answers": "Given marginal cost and how sensitive demand is to price, what price maximises profit, and how much market power does it imply?",
          "example": {
            "marginalCost": 60,
            "elasticity": 2.5
          },
          "reference": "Lerner (1934): (P − MC)/P = 1/|ε|; the profit-maximising price P* = MC · |ε| / (|ε| − 1), defined for elastic demand |ε| > 1",
          "signature": {
            "input": {
              "marginalCost": {
                "type": "number",
                "describe": "Marginal cost per unit",
                "min": 0
              },
              "elasticity": {
                "type": "number",
                "describe": "Absolute price elasticity of demand, > 1",
                "min": 1.05,
                "max": 50
              }
            },
            "output": {
              "optimalPrice": {
                "type": "number",
                "describe": "P* = MC · ε / (ε − 1)"
              },
              "lernerIndex": {
                "type": "number",
                "describe": "(P − MC) / P = 1 / ε"
              },
              "markupOnCost": {
                "type": "number",
                "describe": "(P − MC) / MC"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mcom-accounting--tax",
      "code": "CDU-BUS-ACTX-900",
      "level": "MM",
      "name": "MCom Accounting & Tax",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the IFAC/SAICA technical-competence standards; no prior institution is claimed"
        }
      ],
      "researchProject": "Deferred tax, leases and the arm’s length range: the measurements behind a reconciled tax charge",
      "description": "The measurements a reporting accountant and a tax adviser must get right: deferred tax on temporary differences (IAS 12), the reconciliation of the tax charge to the statutory rate, the lease liability and right-of-use asset (IFRS 16), and the arm’s length range for a related-party margin (OECD Transfer Pricing Guidelines).",
      "syllabus": [
        "Income taxes: carrying amount, tax base, temporary differences, deferred tax assets and liabilities (IAS 12)",
        "The tax charge: taxable income, current tax and the effective-rate reconciliation (IAS 12 ¶81(c))",
        "Leases: the lease liability at the present value of unpaid payments, the right-of-use asset, interest (IFRS 16)",
        "Transfer pricing: comparables, the interquartile range and adjustment to the median (OECD TPG ch. III)"
      ],
      "reference": {
        "Temporary difference": "carrying amount − tax base (IAS 12 ¶5)",
        "Deferred tax": "temporary difference × the rate expected to apply, enacted or substantively enacted (IAS 12 ¶47)",
        "Lease liability": "PV of lease payments not paid at commencement, at the rate implicit in the lease or the incremental borrowing rate (IFRS 16 ¶26)",
        "Right-of-use asset": "lease liability + payments made at or before commencement + initial direct costs (IFRS 16 ¶24)",
        "Arm’s length range": "interquartile range of comparable results; outside it, adjust to a point in it such as the median (OECD TPG ¶3.57, ¶3.60–3.62)"
      },
      "role": "You are a chartered accountant and tax adviser explaining a measurement to a finance director. State the standard and the paragraph, show the numbers, then say what the entry or the adjustment is and what judgement could change it.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MCom",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "IFAC International Education Standards — IES 2 (Revised), Initial Professional Development: Technical Competence",
          "SAICA CA2025 Competency Framework",
          "IFRS Accounting Standards — IAS 12 Income Taxes; IFRS 16 Leases",
          "OECD Transfer Pricing Guidelines for Multinational Enterprises and Tax Administrations (2022)"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-ACTX-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "deferred_tax",
            "tax_rate_reconciliation",
            "lease_liability",
            "arms_length_range"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-ACTX-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-ACTX-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Deferred tax, leases and the arm’s length range: the measurements behind a reconciled tax charge"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "deferred_tax",
          "name": "Deferred tax on a temporary difference",
          "answers": "Does this asset or liability give rise to a deferred tax liability or asset, and how large is it?",
          "example": {
            "itemKind": "asset",
            "carryingAmount": 100000,
            "taxBase": 60000,
            "taxRate": 0.27
          },
          "reference": "IAS 12 Income Taxes ¶5 (temporary difference), ¶15 (taxable → DTL), ¶24 (deductible → DTA, if probable taxable profit), ¶47 (rate)",
          "signature": {
            "input": {
              "itemKind": {
                "type": "string",
                "describe": "Is the item an asset or a liability?",
                "oneOf": [
                  "asset",
                  "liability"
                ]
              },
              "carryingAmount": {
                "type": "number",
                "describe": "Carrying amount in the statement of financial position",
                "min": 0
              },
              "taxBase": {
                "type": "number",
                "describe": "The amount attributed to the item for tax purposes",
                "min": 0
              },
              "taxRate": {
                "type": "number",
                "describe": "Rate expected to apply when it reverses, 0–1",
                "min": 0,
                "max": 1
              }
            },
            "output": {
              "temporaryDifference": {
                "type": "number",
                "describe": "|carrying amount − tax base|"
              },
              "differenceType": {
                "type": "string",
                "describe": "taxable, deductible or none"
              },
              "deferredTax": {
                "type": "number",
                "describe": "Temporary difference × rate"
              },
              "position": {
                "type": "string",
                "describe": "DTL, DTA or none"
              }
            }
          }
        },
        {
          "id": "tax_rate_reconciliation",
          "name": "Current tax and the effective-rate reconciliation",
          "answers": "What is the current tax charge, and why does the effective rate differ from the statutory rate?",
          "example": {
            "accountingProfit": 1000000,
            "statutoryRate": 0.27,
            "nonDeductibleExpenses": 50000,
            "exemptIncome": 20000
          },
          "reference": "IAS 12 ¶81(c): explanation of the relationship between tax expense and accounting profit, as a reconciliation at the applicable tax rate",
          "signature": {
            "input": {
              "accountingProfit": {
                "type": "number",
                "describe": "Profit before tax",
                "min": 0.01
              },
              "statutoryRate": {
                "type": "number",
                "describe": "Applicable (statutory) tax rate, 0–1",
                "min": 0,
                "max": 1
              },
              "nonDeductibleExpenses": {
                "type": "number",
                "describe": "Expenses that are never deductible",
                "min": 0,
                "default": 0
              },
              "exemptIncome": {
                "type": "number",
                "describe": "Income that is never taxable",
                "min": 0,
                "default": 0
              }
            },
            "output": {
              "taxableIncome": {
                "type": "number",
                "describe": "Profit + non-deductible − exempt"
              },
              "taxAtStatutoryRate": {
                "type": "number",
                "describe": "Profit × statutory rate"
              },
              "effectNonDeductible": {
                "type": "number",
                "describe": "Non-deductible × rate"
              },
              "effectExempt": {
                "type": "number",
                "describe": "Exempt × rate (a reduction)"
              },
              "currentTax": {
                "type": "number",
                "describe": "Taxable income × rate, not below zero"
              },
              "effectiveTaxRate": {
                "type": "number",
                "describe": "Current tax ÷ profit"
              }
            }
          }
        },
        {
          "id": "lease_liability",
          "name": "Lease liability and right-of-use asset",
          "answers": "At commencement, what is the lease liability, the right-of-use asset, and the first period’s interest?",
          "example": {
            "periodicPayment": 100000,
            "periods": 5,
            "ratePerPeriod": 0.1,
            "initialDirectCosts": 5000,
            "paymentsInAdvance": false
          },
          "reference": "IFRS 16 Leases ¶26 (liability = PV of payments not paid at commencement), ¶24 (right-of-use asset), ¶36 (interest on the liability)",
          "signature": {
            "input": {
              "periodicPayment": {
                "type": "number",
                "describe": "Fixed lease payment per period",
                "min": 0.01
              },
              "periods": {
                "type": "number",
                "describe": "Number of payments over the lease term",
                "min": 1,
                "max": 600
              },
              "ratePerPeriod": {
                "type": "number",
                "describe": "Discount rate per period (implicit or incremental borrowing), 0–1",
                "min": 0,
                "max": 1
              },
              "initialDirectCosts": {
                "type": "number",
                "describe": "Initial direct costs of the lessee",
                "min": 0,
                "default": 0
              },
              "paymentsInAdvance": {
                "type": "boolean",
                "describe": "Paid at the start of each period (true) or the end (false)",
                "default": false
              }
            },
            "output": {
              "annuityFactor": {
                "type": "number",
                "describe": "PV factor applied to the unpaid payments"
              },
              "leaseLiability": {
                "type": "number",
                "describe": "Lease liability at commencement"
              },
              "rightOfUseAsset": {
                "type": "number",
                "describe": "Right-of-use asset at commencement"
              },
              "firstPeriodInterest": {
                "type": "number",
                "describe": "Liability × rate for the first period"
              },
              "liabilityAfterFirstPeriod": {
                "type": "number",
                "describe": "Liability + interest − the payment at the end of period 1"
              }
            }
          }
        },
        {
          "id": "arms_length_range",
          "name": "Arm’s length range and adjustment",
          "answers": "Is the tested party’s margin inside the interquartile range of the comparables, and if not, what adjustment brings it to the median?",
          "example": {
            "comparableMargins": [
              0.042,
              0.051,
              0.055,
              0.063,
              0.07,
              0.078,
              0.085,
              0.091
            ],
            "testedMargin": 0.035
          },
          "reference": "OECD Transfer Pricing Guidelines (2022) ¶3.57 (interquartile range), ¶3.60–3.62 (outside the range: adjust to a point in it, e.g. the median); quartiles by linear interpolation (type 7)",
          "signature": {
            "input": {
              "comparableMargins": {
                "type": "number[]",
                "describe": "Profit level indicator of each accepted comparable (e.g. net cost plus), as fractions"
              },
              "testedMargin": {
                "type": "number",
                "describe": "The tested party’s result on the same indicator, as a fraction",
                "min": -1,
                "max": 1
              }
            },
            "output": {
              "lowerQuartile": {
                "type": "number",
                "describe": "Q1 of the comparables"
              },
              "median": {
                "type": "number",
                "describe": "Median of the comparables"
              },
              "upperQuartile": {
                "type": "number",
                "describe": "Q3 of the comparables"
              },
              "withinRange": {
                "type": "boolean",
                "describe": "Q1 ≤ tested ≤ Q3"
              },
              "adjustedMargin": {
                "type": "number",
                "describe": "Tested if within range, otherwise the median"
              },
              "adjustment": {
                "type": "number",
                "describe": "Adjusted − tested"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mcom-auditing--assurance",
      "code": "CDU-BUS-AUD-900",
      "level": "MM",
      "name": "MCom Auditing & Assurance",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the IAASB/IFAC standards; no prior institution is claimed"
        }
      ],
      "researchProject": "How much evidence is enough: materiality, sample size and the going-concern signal on one audit file",
      "description": "The calculations an audit file must show: overall and performance materiality and the clearly-trivial threshold (ISA 320, ISA 450), the attribute sample size for a test of controls and the monetary-unit sample for a test of details (ISA 530), and the Altman Z-score as a going-concern indicator (ISA 570).",
      "syllabus": [
        "Materiality: benchmark, percentage, performance materiality, clearly trivial (ISA 320 ¶10–11, ISA 450 ¶A2)",
        "Tests of controls: attribute sampling, tolerable and expected deviations, confidence (ISA 530)",
        "Tests of details: monetary-unit sampling, reliability factor, sampling interval, basic precision (ISA 530)",
        "Going concern: events and conditions, and a quantitative distress indicator (ISA 570 (Revised) ¶A3; Altman 1968)"
      ],
      "reference": {
        "Overall materiality": "benchmark × a percentage set by professional judgement (ISA 320 ¶10, ¶A3–A7)",
        "Performance materiality": "an amount below overall materiality (ISA 320 ¶11)",
        "Attribute sample size": "smallest n with P(deviations ≤ k | n, tolerable rate) ≤ 1 − confidence (binomial)",
        "MUS sample size": "book value × R ÷ tolerable misstatement, R = −ln(1 − confidence) (Poisson, no expected misstatement)",
        "Altman Z": "1.2·WC/TA + 1.4·RE/TA + 3.3·EBIT/TA + 0.6·MVE/TL + 1.0·Sales/TA; < 1.81 distress, > 2.99 safe"
      },
      "role": "You are an audit engagement partner explaining a judgement on the file to the audit committee. Name the standard, show the calculation, and say what the number obliges the team to do next.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MCom",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "IAASB Handbook of International Quality Management, Auditing, Review, Other Assurance, and Related Services Pronouncements — ISA 320, ISA 450, ISA 530, ISA 570 (Revised)",
          "IFAC International Education Standard 8 (Revised), Professional Competence for Engagement Partners Responsible for Audits of Financial Statements",
          "AICPA Audit Guide: Audit Sampling (attribute and monetary-unit sampling)"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-AUD-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "materiality",
            "attribute_sample_size",
            "mus_planning",
            "going_concern_zscore"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-AUD-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-AUD-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "How much evidence is enough: materiality, sample size and the going-concern signal on one audit file"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "materiality",
          "name": "Materiality, performance materiality and clearly trivial",
          "answers": "Given the benchmark and the percentages judged appropriate, what are overall materiality, performance materiality and the clearly-trivial threshold?",
          "example": {
            "benchmark": "profitBeforeTax",
            "benchmarkAmount": 2400000,
            "percentage": 0.05,
            "performanceFactor": 0.75,
            "trivialFactor": 0.05
          },
          "reference": "ISA 320 ¶10 (overall materiality), ¶11 (performance materiality), ¶A3–A7 (benchmarks and percentages); ISA 450 ¶A2 (clearly trivial)",
          "signature": {
            "input": {
              "benchmark": {
                "type": "string",
                "describe": "The benchmark chosen",
                "oneOf": [
                  "profitBeforeTax",
                  "revenue",
                  "totalExpenses",
                  "totalAssets",
                  "equity"
                ]
              },
              "benchmarkAmount": {
                "type": "number",
                "describe": "The benchmark amount",
                "min": 0.01
              },
              "percentage": {
                "type": "number",
                "describe": "Percentage applied to the benchmark, 0–0.1",
                "min": 0.0001,
                "max": 0.1
              },
              "performanceFactor": {
                "type": "number",
                "describe": "Performance materiality as a fraction of overall, 0.5–0.9",
                "min": 0.5,
                "max": 0.9,
                "default": 0.75
              },
              "trivialFactor": {
                "type": "number",
                "describe": "Clearly trivial as a fraction of overall, 0.01–0.1",
                "min": 0.01,
                "max": 0.1,
                "default": 0.05
              }
            },
            "output": {
              "overallMateriality": {
                "type": "number",
                "describe": "Benchmark × percentage"
              },
              "performanceMateriality": {
                "type": "number",
                "describe": "Overall × performance factor"
              },
              "clearlyTrivialThreshold": {
                "type": "number",
                "describe": "Overall × trivial factor"
              }
            }
          }
        },
        {
          "id": "attribute_sample_size",
          "name": "Attribute sample size for a test of controls",
          "answers": "How many items must be tested so that, finding no more than the planned number of deviations, the control can be relied on at this confidence?",
          "example": {
            "confidence": 0.95,
            "tolerableRate": 0.05,
            "plannedDeviations": 1
          },
          "reference": "ISA 530 Audit Sampling ¶7, ¶A10–A13 (tolerable rate, sampling risk); sample size by the binomial distribution as in the AICPA Audit Sampling guide",
          "signature": {
            "input": {
              "confidence": {
                "type": "number",
                "describe": "Confidence level (1 − risk of overreliance), 0.8–0.99",
                "min": 0.8,
                "max": 0.99
              },
              "tolerableRate": {
                "type": "number",
                "describe": "Tolerable deviation rate, 0.01–0.2",
                "min": 0.01,
                "max": 0.2
              },
              "plannedDeviations": {
                "type": "number",
                "describe": "Deviations the plan allows the sample to contain",
                "min": 0,
                "max": 10
              }
            },
            "output": {
              "sampleSize": {
                "type": "number",
                "describe": "Smallest n meeting the risk"
              },
              "riskOfOverreliance": {
                "type": "number",
                "describe": "P(deviations ≤ planned | n, tolerable rate)"
              }
            }
          }
        },
        {
          "id": "mus_planning",
          "name": "Monetary-unit sample: size, interval and basic precision",
          "answers": "For a test of details on this balance, how many monetary units are sampled, at what interval, and what is the basic precision if none is misstated?",
          "example": {
            "bookValue": 5000000,
            "tolerableMisstatement": 150000,
            "confidence": 0.95
          },
          "reference": "ISA 530 Audit Sampling ¶A11 (tolerable misstatement); monetary-unit sampling with the Poisson reliability factor R = −ln(1 − confidence), no expected misstatement",
          "signature": {
            "input": {
              "bookValue": {
                "type": "number",
                "describe": "Recorded amount of the population",
                "min": 0.01
              },
              "tolerableMisstatement": {
                "type": "number",
                "describe": "Tolerable misstatement for the balance",
                "min": 0.01
              },
              "confidence": {
                "type": "number",
                "describe": "Confidence level, 0.8–0.99",
                "min": 0.8,
                "max": 0.99
              }
            },
            "output": {
              "reliabilityFactor": {
                "type": "number",
                "describe": "R = −ln(1 − confidence)"
              },
              "sampleSize": {
                "type": "number",
                "describe": "ceil(book value × R ÷ tolerable)"
              },
              "samplingInterval": {
                "type": "number",
                "describe": "Book value ÷ sample size"
              },
              "basicPrecision": {
                "type": "number",
                "describe": "R × interval: the upper limit when no misstatement is found"
              }
            }
          }
        },
        {
          "id": "going_concern_zscore",
          "name": "Going-concern indicator (Altman Z)",
          "answers": "Does the Altman Z-score put the entity in the distress, grey or safe zone — one quantitative input to the going-concern assessment?",
          "example": {
            "workingCapital": 500000,
            "retainedEarnings": 800000,
            "ebit": 300000,
            "marketValueEquity": 1500000,
            "sales": 4000000,
            "totalAssets": 3000000,
            "totalLiabilities": 1200000
          },
          "reference": "Altman, E. I. (1968), Journal of Finance 23(4) 589–609 — the original five-ratio Z for public manufacturers; ISA 570 (Revised) ¶A3 (events and conditions that may cast doubt)",
          "signature": {
            "input": {
              "workingCapital": {
                "type": "number",
                "describe": "Current assets − current liabilities",
                "min": -1000000000000,
                "max": 1000000000000
              },
              "retainedEarnings": {
                "type": "number",
                "describe": "Retained earnings",
                "min": -1000000000000,
                "max": 1000000000000
              },
              "ebit": {
                "type": "number",
                "describe": "Earnings before interest and tax",
                "min": -1000000000000,
                "max": 1000000000000
              },
              "marketValueEquity": {
                "type": "number",
                "describe": "Market value of equity",
                "min": 0
              },
              "sales": {
                "type": "number",
                "describe": "Sales (revenue)",
                "min": 0
              },
              "totalAssets": {
                "type": "number",
                "describe": "Total assets",
                "min": 0.01
              },
              "totalLiabilities": {
                "type": "number",
                "describe": "Total liabilities",
                "min": 0.01
              }
            },
            "output": {
              "z": {
                "type": "number",
                "describe": "The Z-score"
              },
              "zone": {
                "type": "string",
                "describe": "distress (< 1.81), grey (1.81–2.99) or safe (> 2.99)"
              },
              "goingConcernFlag": {
                "type": "boolean",
                "describe": "True outside the safe zone: the indicator calls for further procedures"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mcom-forensic-accounting--investigation",
      "code": "CDU-BUS-FOR-900",
      "level": "MM",
      "name": "MCom Forensic Accounting & Investigation",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the ACFE body of knowledge; no prior institution is claimed"
        }
      ],
      "researchProject": "Screening before suspicion: digit, ratio, net-worth and duplication tests as a reproducible first pass on a ledger",
      "description": "The first-pass analytics of a fraud examination: first-digit conformity to Benford’s law with Nigrini’s MAD bands, the Beneish M-score for earnings manipulation, the net worth method of proving unexplained income, and the number-duplication test on payments.",
      "syllabus": [
        "Digital analysis: Benford’s first-digit law, mean absolute deviation, chi-square, conformity bands",
        "Financial statement fraud: the eight Beneish indices and the M-score",
        "Indirect methods of proof: net worth, expenditures, unexplained funds",
        "Payment analytics: the number-duplication test, repeated amounts and their rows"
      ],
      "reference": {
        "Benford": "P(first digit d) = log10(1 + 1/d)",
        "MAD (first digit)": "mean |observed − expected| over d = 1..9; ≤ 0.006 close, ≤ 0.012 acceptable, ≤ 0.015 marginal, above: nonconformity (Nigrini 2012)",
        "Beneish M": "−4.84 + 0.920·DSRI + 0.528·GMI + 0.404·AQI + 0.892·SGI + 0.115·DEPI − 0.172·SGAI + 4.679·TATA − 0.327·LVGI; > −1.78 flags a likely manipulator",
        "Net worth method": "unexplained = (closing − opening net worth) + living expenses − known income"
      },
      "role": "You are a certified fraud examiner reporting a screening result to counsel. Say what the test measures, show the numbers, and state plainly that a flag directs further work and proves nothing on its own.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MCom",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041",
          "042"
        ],
        "standards": [
          "ACFE Fraud Examiners Manual — Financial Transactions and Fraud Schemes; Investigation (the CFE examination body of knowledge)",
          "Nigrini, M. J. (2012) Benford’s Law: Applications for Forensic Accounting, Auditing, and Fraud Detection, Wiley",
          "Beneish, M. D. (1999) The Detection of Earnings Manipulation, Financial Analysts Journal 55(5) 24–36",
          "IRS Internal Revenue Manual 9.5.9 — indirect methods of proof: the net worth method"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-FOR-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "benford_first_digit",
            "beneish_m_score",
            "net_worth_method",
            "duplicate_amounts"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-FOR-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-FOR-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Screening before suspicion: digit, ratio, net-worth and duplication tests as a reproducible first pass on a ledger"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "benford_first_digit",
          "name": "First-digit test (Benford)",
          "answers": "Do the leading digits of these amounts conform to Benford’s law, and how far do they deviate?",
          "example": {
            "amounts": [
              1120,
              1380,
              1460,
              1975,
              1042,
              1210,
              1833,
              1598,
              1099,
              1305,
              1712,
              2150,
              2890,
              2431,
              2077,
              2666,
              3120,
              3490,
              3005,
              4210,
              4890,
              5120,
              5775,
              6340,
              7010,
              8450,
              9320,
              1188,
              1523,
              2260,
              3675,
              1407,
              2555,
              1066,
              4402,
              1960,
              2780,
              6150,
              1254,
              1839
            ]
          },
          "reference": "Nigrini (2012) Benford’s Law, ch. 5 (first-digit test, MAD conformity bands 0.006 / 0.012 / 0.015); amounts below 10 excluded",
          "signature": {
            "input": {
              "amounts": {
                "type": "number[]",
                "describe": "Transaction amounts; those below 10 are excluded, as the test prescribes"
              }
            },
            "output": {
              "counted": {
                "type": "number",
                "describe": "Amounts tested (≥ 10)"
              },
              "digitCounts": {
                "type": "number[]",
                "describe": "Observed count of each first digit 1..9"
              },
              "mad": {
                "type": "number",
                "describe": "Mean absolute deviation from Benford"
              },
              "chiSquare": {
                "type": "number",
                "describe": "Σ (O − E)² ÷ E over the nine digits (8 df)"
              },
              "conformity": {
                "type": "string",
                "describe": "close, acceptable, marginal or nonconformity"
              }
            }
          }
        },
        {
          "id": "beneish_m_score",
          "name": "Beneish M-score",
          "answers": "Do the eight Beneish indices put this company above the threshold for a likely earnings manipulator?",
          "example": {
            "dsri": 1.465,
            "gmi": 1.193,
            "aqi": 1.254,
            "sgi": 1.607,
            "depi": 1.077,
            "sgai": 1.041,
            "tata": 0.031,
            "lvgi": 1.111
          },
          "reference": "Beneish (1999) Financial Analysts Journal 55(5) 24–36: the eight-variable probit model and the −1.78 threshold",
          "signature": {
            "input": {
              "dsri": {
                "type": "number",
                "describe": "Days’ sales in receivables index",
                "min": 0
              },
              "gmi": {
                "type": "number",
                "describe": "Gross margin index",
                "min": 0
              },
              "aqi": {
                "type": "number",
                "describe": "Asset quality index",
                "min": 0
              },
              "sgi": {
                "type": "number",
                "describe": "Sales growth index",
                "min": 0
              },
              "depi": {
                "type": "number",
                "describe": "Depreciation index",
                "min": 0
              },
              "sgai": {
                "type": "number",
                "describe": "SG&A expense index",
                "min": 0
              },
              "tata": {
                "type": "number",
                "describe": "Total accruals to total assets",
                "min": -1,
                "max": 1
              },
              "lvgi": {
                "type": "number",
                "describe": "Leverage index",
                "min": 0
              }
            },
            "output": {
              "mScore": {
                "type": "number",
                "describe": "The M-score"
              },
              "likelyManipulator": {
                "type": "boolean",
                "describe": "M > −1.78"
              }
            }
          }
        },
        {
          "id": "net_worth_method",
          "name": "Net worth method: unexplained funds",
          "answers": "How much of the increase in a subject’s net worth, plus what they spent, is not explained by known income?",
          "example": {
            "openingAssets": 500000,
            "openingLiabilities": 200000,
            "closingAssets": 900000,
            "closingLiabilities": 250000,
            "livingExpenses": 120000,
            "knownIncome": 260000
          },
          "reference": "IRS Internal Revenue Manual 9.5.9 (net worth method of proof); ACFE Fraud Examiners Manual, Financial Transactions — indirect methods of proving income",
          "signature": {
            "input": {
              "openingAssets": {
                "type": "number",
                "describe": "Assets at the start of the period (at cost)",
                "min": 0
              },
              "openingLiabilities": {
                "type": "number",
                "describe": "Liabilities at the start",
                "min": 0
              },
              "closingAssets": {
                "type": "number",
                "describe": "Assets at the end (at cost)",
                "min": 0
              },
              "closingLiabilities": {
                "type": "number",
                "describe": "Liabilities at the end",
                "min": 0
              },
              "livingExpenses": {
                "type": "number",
                "describe": "Known personal expenditure in the period",
                "min": 0
              },
              "knownIncome": {
                "type": "number",
                "describe": "Income from known, legitimate sources",
                "min": 0
              }
            },
            "output": {
              "openingNetWorth": {
                "type": "number",
                "describe": "Opening assets − liabilities"
              },
              "closingNetWorth": {
                "type": "number",
                "describe": "Closing assets − liabilities"
              },
              "netWorthIncrease": {
                "type": "number",
                "describe": "Closing − opening net worth"
              },
              "fundsApplied": {
                "type": "number",
                "describe": "Increase + living expenses"
              },
              "unexplainedFunds": {
                "type": "number",
                "describe": "Funds applied − known income"
              }
            }
          }
        },
        {
          "id": "duplicate_amounts",
          "name": "Number-duplication test",
          "answers": "Which payment amounts recur, how often, and how many rows do the repeats account for?",
          "example": {
            "amounts": [
              1250,
              980.5,
              1250,
              4400,
              75,
              980.5,
              1250,
              310,
              5000,
              4400,
              18.99,
              6200
            ]
          },
          "reference": "Nigrini, M. J. (2011) Forensic Analytics, Wiley, ch. 8 (the number-duplication test); amounts compared to the cent",
          "signature": {
            "input": {
              "amounts": {
                "type": "number[]",
                "describe": "Payment amounts, in ledger order"
              }
            },
            "output": {
              "rows": {
                "type": "number",
                "describe": "Amounts tested"
              },
              "distinctAmounts": {
                "type": "number",
                "describe": "Different amounts"
              },
              "duplicatedAmounts": {
                "type": "number",
                "describe": "Amounts that occur more than once"
              },
              "duplicateRows": {
                "type": "number",
                "describe": "Rows carrying a duplicated amount"
              },
              "mostFrequentAmount": {
                "type": "number",
                "describe": "The amount that recurs most (the smallest such, on a tie)"
              },
              "mostFrequentCount": {
                "type": "number",
                "describe": "How often it occurs"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-finance--capital-markets",
      "code": "CDU-BUS-FIN-900",
      "level": "MSc",
      "name": "MSc Finance — Capital Markets",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the CFA Institute body of knowledge; no prior institution is claimed"
        }
      ],
      "researchProject": "Pricing the instruments of a capital market from first principles: bonds, options, the cost of equity and the forward rate",
      "description": "The valuation tools of a capital-markets desk: bond price, Macaulay and modified duration and convexity; the Black–Scholes–Merton price and delta of European options; the CAPM required return with Sharpe, Treynor and Jensen’s alpha; and the forward exchange rate under covered interest parity.",
      "syllabus": [
        "Fixed income: price from yield, Macaulay and modified duration, convexity",
        "Derivatives: Black–Scholes–Merton with a continuous dividend yield; put–call parity; delta",
        "Equity: CAPM, Sharpe ratio, Treynor ratio, Jensen’s alpha",
        "Currencies: covered interest parity, forward points, the forward premium"
      ],
      "reference": {
        "Bond price": "Σ C/(1+y/f)^t + F/(1+y/f)^N",
        "Modified duration": "Macaulay duration ÷ (1 + y/f)",
        "BSM call": "S·e^(−qT)·N(d1) − K·e^(−rT)·N(d2); d1 = [ln(S/K) + (r − q + σ²/2)T] ÷ σ√T; d2 = d1 − σ√T",
        "CAPM": "E(R) = Rf + β·(E(Rm) − Rf)",
        "Covered interest parity": "F = S·(1 + r_d)^T ÷ (1 + r_f)^T (or S·e^((r_d − r_f)T) continuously)"
      },
      "role": "You are a capital-markets analyst explaining a valuation to a portfolio manager. State the model and its assumptions, show the numbers, and say which input the answer is most sensitive to.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "CFA Institute Candidate Body of Knowledge — Fixed Income, Derivatives, Portfolio Management, Economics",
          "Black, F. & Scholes, M. (1973) J. Political Economy 81(3); Merton, R. C. (1973) Bell J. Economics 4(1)",
          "Sharpe, W. F. (1964) J. Finance 19(3) — the capital asset pricing model"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-FIN-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "bond_price_duration",
            "black_scholes_merton",
            "capm_performance",
            "covered_interest_parity"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-FIN-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-FIN-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Pricing the instruments of a capital market from first principles: bonds, options, the cost of equity and the forward rate"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "bond_price_duration",
          "name": "Bond price, duration and convexity",
          "answers": "What is this bond worth at this yield, and how sensitive is its price to a change in yield?",
          "example": {
            "faceValue": 1000,
            "couponRate": 0.06,
            "yieldToMaturity": 0.05,
            "years": 5,
            "frequency": "semiannual"
          },
          "reference": "CFA Institute CBOK, Fixed Income: price from yield to maturity, Macaulay and modified duration, convexity (periodic compounding)",
          "signature": {
            "input": {
              "faceValue": {
                "type": "number",
                "describe": "Par value repaid at maturity",
                "min": 0.01
              },
              "couponRate": {
                "type": "number",
                "describe": "Annual coupon rate, 0–1",
                "min": 0,
                "max": 1
              },
              "yieldToMaturity": {
                "type": "number",
                "describe": "Annual yield to maturity, 0–1",
                "min": 0,
                "max": 1
              },
              "years": {
                "type": "number",
                "describe": "Whole years to maturity",
                "min": 1,
                "max": 100
              },
              "frequency": {
                "type": "string",
                "describe": "Coupons per year",
                "oneOf": [
                  "annual",
                  "semiannual",
                  "quarterly",
                  "monthly"
                ]
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "Full price per the face value"
              },
              "macaulayDuration": {
                "type": "number",
                "describe": "Years"
              },
              "modifiedDuration": {
                "type": "number",
                "describe": "Percentage price change per unit change in yield"
              },
              "convexity": {
                "type": "number",
                "describe": "Years squared"
              }
            }
          }
        },
        {
          "id": "black_scholes_merton",
          "name": "Black–Scholes–Merton option price",
          "answers": "What are a European call and put worth, and what are their deltas?",
          "example": {
            "spot": 42,
            "strike": 40,
            "riskFreeRate": 0.1,
            "volatility": 0.2,
            "years": 0.5,
            "dividendYield": 0
          },
          "reference": "Black & Scholes (1973); Merton (1973) with a continuous dividend yield; CFA Institute CBOK, Derivatives",
          "signature": {
            "input": {
              "spot": {
                "type": "number",
                "describe": "Underlying price",
                "min": 0.0001
              },
              "strike": {
                "type": "number",
                "describe": "Exercise price",
                "min": 0.0001
              },
              "riskFreeRate": {
                "type": "number",
                "describe": "Continuously compounded risk-free rate",
                "min": -0.1,
                "max": 1
              },
              "volatility": {
                "type": "number",
                "describe": "Annual volatility σ",
                "min": 0.0001,
                "max": 5
              },
              "years": {
                "type": "number",
                "describe": "Time to expiry in years",
                "min": 0.0001,
                "max": 100
              },
              "dividendYield": {
                "type": "number",
                "describe": "Continuous dividend yield q",
                "min": 0,
                "max": 1,
                "default": 0
              }
            },
            "output": {
              "d1": {
                "type": "number",
                "describe": "d1"
              },
              "d2": {
                "type": "number",
                "describe": "d2"
              },
              "call": {
                "type": "number",
                "describe": "European call value"
              },
              "put": {
                "type": "number",
                "describe": "European put value"
              },
              "callDelta": {
                "type": "number",
                "describe": "e^(−qT)·N(d1)"
              },
              "putDelta": {
                "type": "number",
                "describe": "e^(−qT)·(N(d1) − 1)"
              }
            }
          }
        },
        {
          "id": "capm_performance",
          "name": "CAPM required return and risk-adjusted performance",
          "answers": "What return does the CAPM require of this portfolio, and did it beat it on Jensen’s, Sharpe’s and Treynor’s measures?",
          "example": {
            "riskFreeRate": 0.04,
            "beta": 1.2,
            "marketReturn": 0.1,
            "portfolioReturn": 0.13,
            "portfolioVolatility": 0.18
          },
          "reference": "Sharpe (1964) CAPM; Sharpe (1966) reward-to-variability; Treynor (1965); Jensen (1968) alpha — CFA Institute CBOK, Portfolio Management",
          "signature": {
            "input": {
              "riskFreeRate": {
                "type": "number",
                "describe": "Risk-free rate for the period",
                "min": -0.1,
                "max": 1
              },
              "beta": {
                "type": "number",
                "describe": "Portfolio beta",
                "min": -5,
                "max": 5
              },
              "marketReturn": {
                "type": "number",
                "describe": "Market return for the period",
                "min": -1,
                "max": 5
              },
              "portfolioReturn": {
                "type": "number",
                "describe": "Portfolio return for the period",
                "min": -1,
                "max": 5
              },
              "portfolioVolatility": {
                "type": "number",
                "describe": "Standard deviation of portfolio returns",
                "min": 0.0001,
                "max": 5
              }
            },
            "output": {
              "requiredReturn": {
                "type": "number",
                "describe": "Rf + β(Rm − Rf)"
              },
              "jensensAlpha": {
                "type": "number",
                "describe": "Rp − required"
              },
              "sharpeRatio": {
                "type": "number",
                "describe": "(Rp − Rf) ÷ σp"
              },
              "treynorRatio": {
                "type": "number",
                "describe": "(Rp − Rf) ÷ β"
              }
            }
          }
        },
        {
          "id": "covered_interest_parity",
          "name": "Forward rate under covered interest parity",
          "answers": "What forward exchange rate does covered interest parity imply, and is the foreign currency at a forward premium or discount?",
          "example": {
            "spot": 18.5,
            "domesticRate": 0.08,
            "foreignRate": 0.05,
            "years": 1,
            "compounding": "annual"
          },
          "reference": "Covered interest rate parity — CFA Institute CBOK, Economics: currency exchange rates (price quoted as domestic per unit of foreign)",
          "signature": {
            "input": {
              "spot": {
                "type": "number",
                "describe": "Spot rate, domestic per unit of foreign",
                "min": 0.000001
              },
              "domesticRate": {
                "type": "number",
                "describe": "Domestic interest rate per year",
                "min": -0.1,
                "max": 1
              },
              "foreignRate": {
                "type": "number",
                "describe": "Foreign interest rate per year",
                "min": -0.1,
                "max": 1
              },
              "years": {
                "type": "number",
                "describe": "Tenor in years",
                "min": 0.0001,
                "max": 30
              },
              "compounding": {
                "type": "string",
                "describe": "Rate convention",
                "oneOf": [
                  "annual",
                  "continuous"
                ]
              }
            },
            "output": {
              "forward": {
                "type": "number",
                "describe": "Forward rate, domestic per foreign"
              },
              "forwardPoints": {
                "type": "number",
                "describe": "Forward − spot"
              },
              "forwardPremium": {
                "type": "number",
                "describe": "Forward ÷ spot − 1 (positive: foreign at a premium)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-investment-management",
      "code": "CDU-BUS-INV-900",
      "level": "MSc",
      "name": "MSc Investment Management",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, GIPS 2020 and the CFA Institute body of knowledge; no prior institution is claimed"
        }
      ],
      "researchProject": "Measuring a manager honestly: time-weighting, the Dietz approximation and the information ratio",
      "description": "How a portfolio’s performance is measured and presented: the time-weighted return from sub-period valuations (GIPS), the Modified Dietz approximation when only flow dates are known, the expected return and risk of a two-asset portfolio with its minimum-variance mix, and the tracking error and information ratio of an active manager.",
      "syllabus": [
        "Performance measurement: sub-period returns, geometric linking, annualisation rules (GIPS 2020)",
        "Approximations: the Modified Dietz return and its day-weighted flows",
        "Portfolio construction: two-asset mean and variance, correlation, the minimum-variance portfolio",
        "Active management: active return, tracking error, information ratio, annualisation"
      ],
      "reference": {
        "Time-weighted return": "Π (1 + r_i) − 1, r_i = V_i ÷ (V_(i−1) + CF_(i−1)) − 1 with a valuation at each external flow",
        "Modified Dietz": "(EMV − BMV − ΣCF) ÷ (BMV + Σ w_i·CF_i), w_i = fraction of the period remaining after the flow",
        "Two-asset variance": "w²σA² + (1−w)²σB² + 2w(1−w)ρσAσB",
        "Information ratio": "mean active return ÷ tracking error (sample standard deviation of active returns)",
        "Annualisation": "GIPS: returns for periods of less than a year must not be annualised"
      },
      "role": "You are an investment performance analyst presenting results to a trustee board. Say which method was used and why, show the numbers, and say what the number does and does not tell them about skill.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "CFA Institute Global Investment Performance Standards (GIPS®) for Firms, 2020 edition — time-weighted returns",
          "CFA Institute Candidate Body of Knowledge — Portfolio Management",
          "Markowitz, H. (1952) Portfolio Selection, J. Finance 7(1) 77–91; Grinold, R. & Kahn, R. (2000) Active Portfolio Management"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-INV-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "time_weighted_return",
            "modified_dietz",
            "two_asset_portfolio",
            "tracking_error_ir"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-INV-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-INV-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Measuring a manager honestly: time-weighting, the Dietz approximation and the information ratio"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "time_weighted_return",
          "name": "Time-weighted return (GIPS)",
          "answers": "What is the time-weighted return across these sub-periods, removing the effect of the client’s own flows?",
          "example": {
            "values": [
              1000000,
              1050000,
              1200000,
              1180000
            ],
            "flows": [
              0,
              100000,
              -50000
            ],
            "years": 1
          },
          "reference": "GIPS for Firms (2020): time-weighted returns with the portfolio valued at each large external cash flow; sub-period returns geometrically linked; no annualisation under one year",
          "signature": {
            "input": {
              "values": {
                "type": "number[]",
                "describe": "Market value at each valuation date, start to end"
              },
              "flows": {
                "type": "number[]",
                "describe": "External flow just after each valuation except the last (negative = withdrawal)"
              },
              "years": {
                "type": "number",
                "describe": "Length of the whole period in years",
                "min": 0.0001,
                "max": 100
              }
            },
            "output": {
              "subPeriodReturns": {
                "type": "number[]",
                "describe": "Each sub-period return (6 dp)"
              },
              "twr": {
                "type": "number",
                "describe": "Linked time-weighted return"
              },
              "annualisedReturn": {
                "type": "number",
                "describe": "Annualised when the period is at least a year; otherwise null"
              }
            }
          }
        },
        {
          "id": "modified_dietz",
          "name": "Modified Dietz return",
          "answers": "When the portfolio was not valued at each flow, what return does the Modified Dietz method approximate?",
          "example": {
            "beginningValue": 1000000,
            "endingValue": 1180000,
            "flows": [
              100000,
              -50000
            ],
            "flowTiming": [
              0.25,
              0.75
            ]
          },
          "reference": "Dietz, P. O. (1966) Pension Funds: Measuring Investment Performance; GIPS 2020 — an approximation of the time-weighted return for sub-periods between valuations",
          "signature": {
            "input": {
              "beginningValue": {
                "type": "number",
                "describe": "Market value at the start",
                "min": 0.01
              },
              "endingValue": {
                "type": "number",
                "describe": "Market value at the end",
                "min": 0
              },
              "flows": {
                "type": "number[]",
                "describe": "External flows in the period (negative = withdrawal)"
              },
              "flowTiming": {
                "type": "number[]",
                "describe": "When each flow happened, as the fraction of the period elapsed (0–1)"
              }
            },
            "output": {
              "netFlows": {
                "type": "number",
                "describe": "Σ flows"
              },
              "weightedFlows": {
                "type": "number",
                "describe": "Σ (1 − timing)·flow"
              },
              "modifiedDietz": {
                "type": "number",
                "describe": "The return"
              }
            }
          }
        },
        {
          "id": "two_asset_portfolio",
          "name": "Two-asset portfolio risk and return",
          "answers": "What are this mix’s expected return and risk, and which mix of the two assets has the least risk?",
          "example": {
            "weightA": 0.6,
            "returnA": 0.1,
            "returnB": 0.06,
            "volatilityA": 0.2,
            "volatilityB": 0.1,
            "correlation": 0.3
          },
          "reference": "Markowitz (1952) mean–variance portfolio theory; CFA Institute CBOK, Portfolio Management",
          "signature": {
            "input": {
              "weightA": {
                "type": "number",
                "describe": "Weight in asset A (B holds the rest), 0–1",
                "min": 0,
                "max": 1
              },
              "returnA": {
                "type": "number",
                "describe": "Expected return of A",
                "min": -1,
                "max": 5
              },
              "returnB": {
                "type": "number",
                "describe": "Expected return of B",
                "min": -1,
                "max": 5
              },
              "volatilityA": {
                "type": "number",
                "describe": "Standard deviation of A",
                "min": 0.0001,
                "max": 5
              },
              "volatilityB": {
                "type": "number",
                "describe": "Standard deviation of B",
                "min": 0.0001,
                "max": 5
              },
              "correlation": {
                "type": "number",
                "describe": "Correlation of A and B, −1 to 1",
                "min": -1,
                "max": 1
              }
            },
            "output": {
              "expectedReturn": {
                "type": "number",
                "describe": "w·RA + (1 − w)·RB"
              },
              "volatility": {
                "type": "number",
                "describe": "Portfolio standard deviation"
              },
              "minimumVarianceWeightA": {
                "type": "number",
                "describe": "Weight in A that minimises variance (unconstrained)"
              }
            }
          }
        },
        {
          "id": "tracking_error_ir",
          "name": "Tracking error and information ratio",
          "answers": "How far did the portfolio stray from its benchmark, and how much active return did it earn per unit of that risk?",
          "example": {
            "portfolioReturns": [
              0.012,
              -0.004,
              0.021,
              0.008,
              -0.011,
              0.015
            ],
            "benchmarkReturns": [
              0.01,
              -0.002,
              0.018,
              0.009,
              -0.013,
              0.011
            ],
            "periodsPerYear": 12
          },
          "reference": "Grinold & Kahn (2000) Active Portfolio Management: information ratio = active return ÷ active risk; sample standard deviation; annualised by periods per year",
          "signature": {
            "input": {
              "portfolioReturns": {
                "type": "number[]",
                "describe": "Portfolio return each period"
              },
              "benchmarkReturns": {
                "type": "number[]",
                "describe": "Benchmark return the same periods"
              },
              "periodsPerYear": {
                "type": "number",
                "describe": "Periods in a year (12 monthly, 52 weekly…)",
                "min": 1,
                "max": 366,
                "default": 12
              }
            },
            "output": {
              "meanActiveReturn": {
                "type": "number",
                "describe": "Mean of portfolio − benchmark, per period"
              },
              "trackingError": {
                "type": "number",
                "describe": "Annualised sample standard deviation of active returns"
              },
              "informationRatio": {
                "type": "number",
                "describe": "Annualised active return ÷ annualised tracking error"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-risk--actuarial",
      "code": "CDU-BUS-RSK-900",
      "level": "MSc",
      "name": "MSc Risk & Actuarial",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, the IFoA/IAA syllabuses and the Basel framework; no prior institution is claimed"
        }
      ],
      "researchProject": "From a loss distribution to a capital number: value at risk, IRB capital, credibility and the pure premium",
      "description": "The quantities a risk function and an actuarial function sign off: parametric value at risk and expected shortfall, the Basel IRB capital requirement and risk-weighted assets of a corporate exposure, the Bühlmann credibility premium, and the mean, variance and loaded premium of an aggregate loss under the collective risk model.",
      "syllabus": [
        "Market risk: parametric VaR and expected shortfall, horizon scaling, the normal assumption and its limits",
        "Credit risk: PD, LGD, EAD, maturity, asset correlation and the IRB capital formula",
        "Credibility theory: expected process variance, variance of hypothetical means, the Bühlmann factor",
        "Risk models: compound distributions, the collective risk model, premium principles"
      ],
      "reference": {
        "Parametric VaR": "V·(z_c·σ·√h − μ·h)",
        "Normal ES": "V·(σ·√h·φ(z_c) ÷ (1 − c) − μ·h)",
        "IRB K (corporate)": "[LGD·N((1−R)^−½·G(PD) + (R/(1−R))^½·G(0.999)) − PD·LGD]·(1 + (M − 2.5)·b) ÷ (1 − 1.5·b) (Basel II ¶272)",
        "Asset correlation": "R = 0.12·(1 − e^(−50·PD))/(1 − e^(−50)) + 0.24·[1 − (1 − e^(−50·PD))/(1 − e^(−50))]; b = (0.11852 − 0.05478·ln PD)²",
        "Bühlmann credibility": "Z = n ÷ (n + k), k = EPV ÷ VHM; premium = Z·X̄ + (1 − Z)·μ",
        "Collective risk model": "E[S] = E[N]·E[X]; Var[S] = E[N]·Var[X] + Var[N]·E[X]²"
      },
      "role": "You are a chief risk officer and actuary explaining a capital or premium number to a board risk committee. State the model and its key assumption, show the numbers, and say what would make the answer wrong.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041",
          "054"
        ],
        "standards": [
          "Institute and Faculty of Actuaries curriculum — CS2 Risk Modelling and Survival Analysis (credibility, loss distributions)",
          "International Actuarial Association Education Syllabus",
          "Basel Committee on Banking Supervision (2006) International Convergence of Capital Measurement and Capital Standards (Basel II) ¶272, ¶285",
          "BCBS (2019) Minimum capital requirements for market risk — expected shortfall at 97.5%"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-RSK-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "parametric_var_es",
            "basel_irb_capital",
            "buhlmann_credibility",
            "collective_risk_premium"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-RSK-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-RSK-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "From a loss distribution to a capital number: value at risk, IRB capital, credibility and the pure premium"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "parametric_var_es",
          "name": "Parametric value at risk and expected shortfall",
          "answers": "Under a normal model, what loss is exceeded only with probability 1 − c over the horizon, and what is the average loss beyond it?",
          "example": {
            "portfolioValue": 10000000,
            "dailyVolatility": 0.012,
            "horizonDays": 10,
            "confidence": 0.99,
            "dailyMeanReturn": 0
          },
          "reference": "J.P. Morgan/Reuters RiskMetrics Technical Document (1996): parametric VaR, square-root-of-time scaling; BCBS (2019) market risk framework: expected shortfall at 97.5%",
          "signature": {
            "input": {
              "portfolioValue": {
                "type": "number",
                "describe": "Current portfolio value",
                "min": 0.01
              },
              "dailyVolatility": {
                "type": "number",
                "describe": "Standard deviation of daily returns",
                "min": 0.000001,
                "max": 1
              },
              "horizonDays": {
                "type": "number",
                "describe": "Holding period in days",
                "min": 1,
                "max": 250
              },
              "confidence": {
                "type": "number",
                "describe": "Confidence level, 0.9–0.999",
                "min": 0.9,
                "max": 0.999
              },
              "dailyMeanReturn": {
                "type": "number",
                "describe": "Expected daily return",
                "min": -0.1,
                "max": 0.1,
                "default": 0
              }
            },
            "output": {
              "z": {
                "type": "number",
                "describe": "Standard normal quantile at the confidence level"
              },
              "valueAtRisk": {
                "type": "number",
                "describe": "VaR over the horizon"
              },
              "expectedShortfall": {
                "type": "number",
                "describe": "ES over the horizon"
              }
            }
          }
        },
        {
          "id": "basel_irb_capital",
          "name": "IRB capital for a corporate exposure",
          "answers": "What capital, risk-weighted assets and expected loss does the Basel IRB formula assign to this corporate exposure?",
          "example": {
            "pd": 0.01,
            "lgd": 0.45,
            "ead": 1000000,
            "maturity": 2.5
          },
          "reference": "Basel II (BCBS 2006) ¶272 (corporate risk-weight function), ¶285 (PD floor 0.03%); RWA = K × 12.5 × EAD",
          "signature": {
            "input": {
              "pd": {
                "type": "number",
                "describe": "One-year probability of default, 0–1",
                "min": 0,
                "max": 0.9999
              },
              "lgd": {
                "type": "number",
                "describe": "Loss given default, 0–1",
                "min": 0,
                "max": 1
              },
              "ead": {
                "type": "number",
                "describe": "Exposure at default",
                "min": 0
              },
              "maturity": {
                "type": "number",
                "describe": "Effective maturity in years, 1–5",
                "min": 1,
                "max": 5
              }
            },
            "output": {
              "pdUsed": {
                "type": "number",
                "describe": "PD after the 0.03% floor"
              },
              "correlation": {
                "type": "number",
                "describe": "Asset correlation R"
              },
              "capitalRequirement": {
                "type": "number",
                "describe": "K, per unit of EAD"
              },
              "riskWeight": {
                "type": "number",
                "describe": "K × 12.5"
              },
              "riskWeightedAssets": {
                "type": "number",
                "describe": "K × 12.5 × EAD"
              },
              "expectedLoss": {
                "type": "number",
                "describe": "PD × LGD × EAD"
              }
            }
          }
        },
        {
          "id": "buhlmann_credibility",
          "name": "Bühlmann credibility premium",
          "answers": "How much weight should this risk’s own experience get against the collective, and what premium results?",
          "example": {
            "observations": 5,
            "sampleMean": 1200,
            "collectiveMean": 1000,
            "expectedProcessVariance": 40000,
            "varianceOfHypotheticalMeans": 10000
          },
          "reference": "Bühlmann, H. (1967) Experience rating and credibility, ASTIN Bulletin 4(3); IFoA CS2 — the Bühlmann model",
          "signature": {
            "input": {
              "observations": {
                "type": "number",
                "describe": "Number of periods (or exposures) of own experience",
                "min": 1
              },
              "sampleMean": {
                "type": "number",
                "describe": "Mean claims of this risk",
                "min": 0
              },
              "collectiveMean": {
                "type": "number",
                "describe": "Mean claims of the collective (μ)",
                "min": 0
              },
              "expectedProcessVariance": {
                "type": "number",
                "describe": "EPV: expected variance within a risk",
                "min": 0
              },
              "varianceOfHypotheticalMeans": {
                "type": "number",
                "describe": "VHM: variance of risk means across the collective",
                "min": 0.000001
              }
            },
            "output": {
              "k": {
                "type": "number",
                "describe": "EPV ÷ VHM"
              },
              "credibilityFactor": {
                "type": "number",
                "describe": "Z = n ÷ (n + k)"
              },
              "credibilityPremium": {
                "type": "number",
                "describe": "Z·X̄ + (1 − Z)·μ"
              }
            }
          }
        },
        {
          "id": "collective_risk_premium",
          "name": "Collective risk model and loaded premium",
          "answers": "What are the mean and spread of aggregate claims, and what premium does the expected-value principle charge?",
          "example": {
            "frequencyMean": 2,
            "frequencyVariance": 2,
            "severityMean": 5000,
            "severityVariance": 4000000,
            "loading": 0.2
          },
          "reference": "Klugman, Panjer & Willmot, Loss Models (compound distributions); IFoA CS2 — the collective risk model; the expected-value premium principle",
          "signature": {
            "input": {
              "frequencyMean": {
                "type": "number",
                "describe": "E[N], expected number of claims",
                "min": 0
              },
              "frequencyVariance": {
                "type": "number",
                "describe": "Var[N] (equal to the mean for Poisson)",
                "min": 0
              },
              "severityMean": {
                "type": "number",
                "describe": "E[X], expected claim size",
                "min": 0
              },
              "severityVariance": {
                "type": "number",
                "describe": "Var[X]",
                "min": 0
              },
              "loading": {
                "type": "number",
                "describe": "Safety loading θ, 0–5",
                "min": 0,
                "max": 5
              }
            },
            "output": {
              "aggregateMean": {
                "type": "number",
                "describe": "E[S]"
              },
              "aggregateVariance": {
                "type": "number",
                "describe": "Var[S]"
              },
              "aggregateSd": {
                "type": "number",
                "describe": "√Var[S]"
              },
              "premium": {
                "type": "number",
                "describe": "(1 + θ)·E[S]"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mpa-public-administration",
      "code": "CDU-BUS-MPA-900",
      "level": "MM",
      "name": "MPA Public Administration",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the NASPAA standards; no prior institution is claimed"
        }
      ],
      "researchProject": "Deciding in public: appraisal, procurement, debt and distribution as four calculations a public manager must show",
      "description": "The analytic core of public management: the social net present value and benefit–cost ratio of a programme at the social discount rate, the 80/20 or 90/10 preference-point award of a public tender, the path and stabilising primary balance of public debt, and the Gini coefficient of an income distribution.",
      "syllabus": [
        "Appraisal: social cost–benefit analysis, the social time preference rate, NPV and BCR (Green Book)",
        "Procurement: price points, specific-goal points, the 80/20 and 90/10 systems (PPPFA Regulations 2022)",
        "Public finance: debt dynamics, the interest–growth differential, the debt-stabilising primary balance (IMF DSA)",
        "Distribution: the Gini coefficient and the mean income"
      ],
      "reference": {
        "Social NPV": "Σ (B_t − C_t) ÷ (1 + r)^t, r = 3.5% STPR (Green Book) unless stated",
        "Price points (80/20)": "Ps = 80·(1 − (Pt − Pmin) ÷ Pmin); up to 20 points for specific goals; 90/10 above R50 million",
        "Debt dynamics": "d(t+1) = d(t)·(1 + r) ÷ (1 + g) − pb; stabilising pb* = d·(r − g) ÷ (1 + g)",
        "Gini": "Σᵢ Σⱼ |xᵢ − xⱼ| ÷ (2·n²·μ)"
      },
      "role": "You are a senior public servant briefing a minister. State the rule that governs the decision, show the calculation, and say what the minister must decide that the numbers cannot.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MPA",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041",
          "031"
        ],
        "standards": [
          "NASPAA Accreditation Standards for Master’s Degree Programs (2019) — Standard 5, universal required competencies",
          "HM Treasury (2022) The Green Book: Central Government Guidance on Appraisal and Evaluation — social time preference rate 3.5%",
          "Preferential Procurement Policy Framework Act 5 of 2000 and the Preferential Procurement Regulations, 2022 (80/20 and 90/10)",
          "IMF (2013) Staff Guidance Note for Public Debt Sustainability Analysis in Market-Access Countries"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-MPA-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "social_cba",
            "preference_points",
            "debt_dynamics",
            "gini"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-MPA-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-MPA-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Deciding in public: appraisal, procurement, debt and distribution as four calculations a public manager must show"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "social_cba",
          "name": "Social cost–benefit analysis",
          "answers": "At the social discount rate, does the programme’s stream of benefits justify its costs?",
          "example": {
            "benefits": [
              0,
              400000,
              450000,
              500000,
              500000
            ],
            "costs": [
              1200000,
              50000,
              50000,
              50000,
              50000
            ],
            "discountRate": 0.035
          },
          "reference": "HM Treasury Green Book (2022): discounting at the social time preference rate of 3.5% (years 0–30); NPV and benefit–cost ratio",
          "signature": {
            "input": {
              "benefits": {
                "type": "number[]",
                "describe": "Social benefits per year, year 0 first"
              },
              "costs": {
                "type": "number[]",
                "describe": "Social costs per year, year 0 first"
              },
              "discountRate": {
                "type": "number",
                "describe": "Social discount rate, 0–0.2",
                "min": 0,
                "max": 0.2,
                "default": 0.035
              }
            },
            "output": {
              "pvBenefits": {
                "type": "number",
                "describe": "Present value of benefits"
              },
              "pvCosts": {
                "type": "number",
                "describe": "Present value of costs"
              },
              "npv": {
                "type": "number",
                "describe": "PV benefits − PV costs"
              },
              "bcr": {
                "type": "number",
                "describe": "PV benefits ÷ PV costs"
              },
              "worthwhile": {
                "type": "boolean",
                "describe": "NPV > 0"
              }
            }
          }
        },
        {
          "id": "preference_points",
          "name": "Preferential procurement award (80/20 or 90/10)",
          "answers": "Which bidder scores highest once price points and specific-goal points are added under the applicable preference system?",
          "example": {
            "estimatedValue": 12000000,
            "bidPrices": [
              1000000,
              950000,
              1100000,
              990000
            ],
            "specificGoalPoints": [
              16,
              8,
              12,
              4
            ]
          },
          "reference": "Preferential Procurement Regulations, 2022 (PPPFA Act 5 of 2000): 80/20 up to R50 million, 90/10 above; Ps = 80(1 − (Pt − Pmin)/Pmin) or 90(…)",
          "signature": {
            "input": {
              "estimatedValue": {
                "type": "number",
                "describe": "Estimated Rand value of the tender (selects 80/20 or 90/10)",
                "min": 0
              },
              "bidPrices": {
                "type": "number[]",
                "describe": "Each acceptable bidder’s price"
              },
              "specificGoalPoints": {
                "type": "number[]",
                "describe": "Specific-goal points each bidder is allotted (≤ 20 under 80/20, ≤ 10 under 90/10)"
              }
            },
            "output": {
              "system": {
                "type": "string",
                "describe": "80/20 or 90/10"
              },
              "pricePoints": {
                "type": "number[]",
                "describe": "Price points per bidder (2 dp)"
              },
              "totalPoints": {
                "type": "number[]",
                "describe": "Price + specific-goal points (2 dp)"
              },
              "winner": {
                "type": "number",
                "describe": "1-based position of the highest total"
              }
            }
          }
        },
        {
          "id": "debt_dynamics",
          "name": "Public debt dynamics",
          "answers": "Where does the debt-to-GDP ratio go over the projection, and what primary balance would hold it steady?",
          "example": {
            "debtRatio": 0.72,
            "interestRate": 0.09,
            "growthRate": 0.07,
            "primaryBalance": -0.01,
            "years": 5
          },
          "reference": "IMF (2013) Staff Guidance Note for Public Debt Sustainability Analysis: d(t+1) = d(t)(1 + r)/(1 + g) − pb, nominal effective r and g",
          "signature": {
            "input": {
              "debtRatio": {
                "type": "number",
                "describe": "Debt ÷ GDP now",
                "min": 0,
                "max": 10
              },
              "interestRate": {
                "type": "number",
                "describe": "Nominal effective interest rate on debt",
                "min": -0.1,
                "max": 1
              },
              "growthRate": {
                "type": "number",
                "describe": "Nominal GDP growth",
                "min": -0.5,
                "max": 1
              },
              "primaryBalance": {
                "type": "number",
                "describe": "Primary balance ÷ GDP (surplus positive)",
                "min": -0.5,
                "max": 0.5
              },
              "years": {
                "type": "number",
                "describe": "Projection horizon in years",
                "min": 1,
                "max": 50
              }
            },
            "output": {
              "projectedDebtRatio": {
                "type": "number",
                "describe": "Debt ÷ GDP at the horizon"
              },
              "change": {
                "type": "number",
                "describe": "Projected − current"
              },
              "stabilisingPrimaryBalance": {
                "type": "number",
                "describe": "pb* = d·(r − g) ÷ (1 + g)"
              }
            }
          }
        },
        {
          "id": "gini",
          "name": "Gini coefficient",
          "answers": "How unequal is this income distribution, on the scale from 0 (equal) to 1?",
          "example": {
            "incomes": [
              12000,
              18000,
              25000,
              31000,
              40000,
              52000,
              68000,
              90000,
              130000,
              250000
            ]
          },
          "reference": "Gini (1912); the mean-absolute-difference definition used by the World Bank Poverty and Inequality Platform",
          "signature": {
            "input": {
              "incomes": {
                "type": "number[]",
                "describe": "Income of each person or household (not negative)"
              }
            },
            "output": {
              "gini": {
                "type": "number",
                "describe": "Σ|xi − xj| ÷ (2n²μ)"
              },
              "mean": {
                "type": "number",
                "describe": "Mean income"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mph-health-economics--policy",
      "code": "CDU-HEA-MPH-900",
      "level": "MSc",
      "name": "MPH Health Economics & Policy",
      "faculty": "Faculty of Health Sciences",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, the CEPH criteria and the NICE reference case; no prior institution is claimed"
        }
      ],
      "researchProject": "Value for a health system: cost per QALY, discounted benefit, association and the worth of a test",
      "description": "The quantitative tools of health policy: the incremental cost-effectiveness ratio and net monetary benefit against a willingness-to-pay threshold, QALYs discounted at the reference-case rate, risk ratio, odds ratio and number needed to treat from a 2×2 table, and the predictive values and likelihood ratios of a diagnostic test.",
      "syllabus": [
        "Economic evaluation: incremental cost, incremental QALYs, ICER, dominance, net monetary benefit (NICE PMG36)",
        "Outcomes: QALYs from utility weights, discounting at 3.5%",
        "Epidemiology: risks, risk ratio with its confidence interval, risk difference, odds ratio, NNT",
        "Screening and diagnosis: sensitivity, specificity, prevalence, predictive values, likelihood ratios"
      ],
      "reference": {
        "ICER": "(C_new − C_comparator) ÷ (E_new − E_comparator)",
        "Net monetary benefit": "λ·ΔE − ΔC; λ = £20,000–£30,000 per QALY (NICE PMG36)",
        "Discounting (NICE)": "3.5% a year for costs and health effects; year 1 undiscounted here",
        "Risk ratio 95% CI": "exp(ln RR ± 1.96·√(1/a − 1/(a+b) + 1/c − 1/(c+d)))",
        "PPV": "sens·prev ÷ (sens·prev + (1 − spec)·(1 − prev))"
      },
      "role": "You are a public-health economist advising a health department. Say what the evidence shows and how certain it is, show the calculation, and separate the technical answer from the value judgement the decision-maker owns.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MPH",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "091",
          "041"
        ],
        "standards": [
          "Council on Education for Public Health (CEPH) Accreditation Criteria, Schools of Public Health & Public Health Programs (2021) — MPH foundational competencies D2",
          "NICE (2022) NICE health technology evaluations: the manual (PMG36) — reference case, 3.5% discounting, £20,000–£30,000 per QALY",
          "Rothman, K. J., Greenland, S. & Lash, T. L. Modern Epidemiology (3rd ed.) — measures of association"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-HEA-MPH-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "icer_nmb",
            "discounted_qalys",
            "two_by_two",
            "diagnostic_accuracy"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-HEA-MPH-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-HEA-MPH-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Value for a health system: cost per QALY, discounted benefit, association and the worth of a test"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "icer_nmb",
          "name": "ICER and net monetary benefit",
          "answers": "What does each extra QALY from the new intervention cost, and is it worth it at the threshold?",
          "example": {
            "costNew": 24000,
            "costComparator": 15000,
            "qalyNew": 6.2,
            "qalyComparator": 5.8,
            "threshold": 20000
          },
          "reference": "NICE (2022) health technology evaluations manual PMG36: ICER against £20,000–£30,000 per QALY; net monetary benefit λΔE − ΔC",
          "signature": {
            "input": {
              "costNew": {
                "type": "number",
                "describe": "Total cost per patient, new intervention",
                "min": 0
              },
              "costComparator": {
                "type": "number",
                "describe": "Total cost per patient, comparator",
                "min": 0
              },
              "qalyNew": {
                "type": "number",
                "describe": "QALYs per patient, new intervention",
                "min": 0
              },
              "qalyComparator": {
                "type": "number",
                "describe": "QALYs per patient, comparator",
                "min": 0
              },
              "threshold": {
                "type": "number",
                "describe": "Willingness to pay per QALY (λ)",
                "min": 0,
                "default": 20000
              }
            },
            "output": {
              "incrementalCost": {
                "type": "number",
                "describe": "ΔC"
              },
              "incrementalQaly": {
                "type": "number",
                "describe": "ΔE"
              },
              "icer": {
                "type": "number",
                "describe": "ΔC ÷ ΔE (null when ΔE = 0)"
              },
              "netMonetaryBenefit": {
                "type": "number",
                "describe": "λ·ΔE − ΔC"
              },
              "verdict": {
                "type": "string",
                "describe": "dominant, dominated, cost-effective or not cost-effective"
              }
            }
          }
        },
        {
          "id": "discounted_qalys",
          "name": "Discounted QALYs",
          "answers": "How many QALYs does this stream of health-state utilities yield, undiscounted and discounted at the reference-case rate?",
          "example": {
            "utilities": [
              0.85,
              0.82,
              0.8,
              0.78,
              0.75
            ],
            "discountRate": 0.035
          },
          "reference": "NICE PMG36 reference case: health effects discounted at 3.5% a year; QALY = Σ utility × time",
          "signature": {
            "input": {
              "utilities": {
                "type": "number[]",
                "describe": "Mean utility in each successive year (0–1; below 0 for states worse than dead)"
              },
              "discountRate": {
                "type": "number",
                "describe": "Annual discount rate, 0–0.1",
                "min": 0,
                "max": 0.1,
                "default": 0.035
              }
            },
            "output": {
              "lifeYears": {
                "type": "number",
                "describe": "Years counted"
              },
              "undiscountedQalys": {
                "type": "number",
                "describe": "Σ utilities"
              },
              "discountedQalys": {
                "type": "number",
                "describe": "Σ u_t ÷ (1 + r)^t, t = 0 for year 1"
              }
            }
          }
        },
        {
          "id": "two_by_two",
          "name": "Measures of association from a 2×2 table",
          "answers": "In this cohort, how much more (or less) likely is the outcome among the exposed, and how many must be exposed for one extra (or one fewer) case?",
          "example": {
            "exposedCases": 30,
            "exposedNonCases": 70,
            "unexposedCases": 15,
            "unexposedNonCases": 85
          },
          "reference": "Rothman, Greenland & Lash, Modern Epidemiology: risk ratio (log-scale 95% CI), risk difference, odds ratio; NNT = 1/|RD|",
          "signature": {
            "input": {
              "exposedCases": {
                "type": "number",
                "describe": "a: exposed with the outcome",
                "min": 0
              },
              "exposedNonCases": {
                "type": "number",
                "describe": "b: exposed without it",
                "min": 0
              },
              "unexposedCases": {
                "type": "number",
                "describe": "c: unexposed with the outcome",
                "min": 0
              },
              "unexposedNonCases": {
                "type": "number",
                "describe": "d: unexposed without it",
                "min": 0
              }
            },
            "output": {
              "riskExposed": {
                "type": "number",
                "describe": "a ÷ (a + b)"
              },
              "riskUnexposed": {
                "type": "number",
                "describe": "c ÷ (c + d)"
              },
              "riskRatio": {
                "type": "number",
                "describe": "RR"
              },
              "riskRatioLower95": {
                "type": "number",
                "describe": "Lower 95% bound of RR"
              },
              "riskRatioUpper95": {
                "type": "number",
                "describe": "Upper 95% bound of RR"
              },
              "riskDifference": {
                "type": "number",
                "describe": "Risk exposed − risk unexposed"
              },
              "oddsRatio": {
                "type": "number",
                "describe": "(a·d) ÷ (b·c)"
              },
              "numberNeeded": {
                "type": "number",
                "describe": "1 ÷ |RD| (to harm if RD > 0, to treat if RD < 0)"
              }
            }
          }
        },
        {
          "id": "diagnostic_accuracy",
          "name": "Predictive values and likelihood ratios",
          "answers": "In a population with this prevalence, how likely is a positive (or negative) result to be right?",
          "example": {
            "sensitivity": 0.9,
            "specificity": 0.95,
            "prevalence": 0.02
          },
          "reference": "Bayes’ theorem applied to a diagnostic test; likelihood ratios LR+ = sens/(1 − spec), LR− = (1 − sens)/spec",
          "signature": {
            "input": {
              "sensitivity": {
                "type": "number",
                "describe": "P(test + | disease), 0–0.9999",
                "min": 0.0001,
                "max": 0.9999
              },
              "specificity": {
                "type": "number",
                "describe": "P(test − | no disease), 0–0.9999",
                "min": 0.0001,
                "max": 0.9999
              },
              "prevalence": {
                "type": "number",
                "describe": "Pre-test probability, 0–1",
                "min": 0.000001,
                "max": 0.999999
              }
            },
            "output": {
              "ppv": {
                "type": "number",
                "describe": "P(disease | +)"
              },
              "npv": {
                "type": "number",
                "describe": "P(no disease | −)"
              },
              "positiveLikelihoodRatio": {
                "type": "number",
                "describe": "LR+"
              },
              "negativeLikelihoodRatio": {
                "type": "number",
                "describe": "LR−"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:llm-dispute-resolution",
      "code": "CDU-LAW-DRS-900",
      "level": "LLM",
      "name": "LLM Dispute Resolution",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the UNCITRAL, ICC and UNIDROIT texts; no prior institution is claimed"
        }
      ],
      "researchProject": "The computable parts of an arbitration: deadlines, interest, costs and the zone of settlement",
      "description": "The calculations an arbitration practitioner cannot get wrong: the Model Law time limits from appointment to setting aside, pre-award interest on a money claim (simple or compound), the apportionment of costs in proportion to success, and the zone of possible agreement between the parties’ expected outcomes.",
      "syllabus": [
        "Procedure: the Model Law time limits (arts. 11, 13, 16, 33, 34) and how they are counted",
        "Remedies: interest for failure to pay money, simple and compound (UNIDROIT art. 7.4.9)",
        "Costs: the loser-pays principle and apportionment by success (UNCITRAL Rules art. 42; ICC Rules art. 38)",
        "Negotiation: expected value, BATNA, reservation points and the settlement zone"
      ],
      "reference": {
        "Model Law art. 13(2)": "challenge within 15 days of becoming aware",
        "Model Law art. 16(3)": "court review of a jurisdiction ruling within 30 days of notice",
        "Model Law art. 33": "correction, interpretation or an additional award: request within 30 days of receipt",
        "Model Law art. 34(3)": "setting aside: no application after three months from receipt of the award",
        "UNCITRAL Rules art. 42(1)": "costs borne in principle by the unsuccessful party; the tribunal may apportion them",
        "Settlement zone": "claimant floor p·A − Cc; respondent ceiling p·A + Cr (risk-neutral parties, each bearing its own costs)"
      },
      "role": "You are an international arbitration practitioner advising a client. State the rule and where it comes from, apply it to the dates and sums, and say plainly which parts depend on the seat, the rules chosen or the tribunal’s discretion.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "LLM",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "042"
        ],
        "standards": [
          "UNCITRAL Model Law on International Commercial Arbitration (1985, with amendments as adopted in 2006)",
          "UNCITRAL Arbitration Rules (as revised in 2010, with art. 1(4) as adopted in 2013) — art. 42 costs",
          "ICC Arbitration Rules (2021) — art. 38 decision as to the costs of the arbitration",
          "UNIDROIT Principles of International Commercial Contracts (2016) — art. 7.4.9 interest for failure to pay money",
          "Chartered Institute of Arbitrators — international arbitration pathway (the practitioner competences the units serve)"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-LAW-DRS-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "model_law_deadline",
            "award_interest",
            "cost_apportionment",
            "settlement_zone"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-LAW-DRS-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-LAW-DRS-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "The computable parts of an arbitration: deadlines, interest, costs and the zone of settlement"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "model_law_deadline",
          "name": "Model Law time limit",
          "answers": "From the event that starts the clock, by what date must the step be taken under the UNCITRAL Model Law?",
          "example": {
            "event": "set_aside",
            "triggerDate": "2026-03-16"
          },
          "reference": "UNCITRAL Model Law arts. 11(3)(a), 13(2), 16(3), 33(1), 33(3), 34(3); counting: the trigger day excluded, months to the same date or the month’s last day (the seat’s law governs computation)",
          "signature": {
            "input": {
              "event": {
                "type": "string",
                "describe": "The step whose time limit is wanted",
                "oneOf": [
                  "appoint_arbitrator",
                  "challenge_arbitrator",
                  "court_review_of_jurisdiction",
                  "request_correction",
                  "request_additional_award",
                  "set_aside"
                ]
              },
              "triggerDate": {
                "type": "string",
                "describe": "The date the clock starts (receipt, awareness, notice), YYYY-MM-DD"
              }
            },
            "output": {
              "article": {
                "type": "string",
                "describe": "The Model Law provision"
              },
              "period": {
                "type": "string",
                "describe": "The period, in days or months"
              },
              "deadline": {
                "type": "string",
                "describe": "Last day, YYYY-MM-DD"
              }
            }
          }
        },
        {
          "id": "award_interest",
          "name": "Interest on a money award",
          "answers": "How much interest accrues on the sum from the due date to the date of the award, simple or compounded annually?",
          "example": {
            "principal": 2500000,
            "annualRate": 0.07,
            "fromDate": "2024-01-15",
            "toDate": "2026-06-30",
            "method": "simple"
          },
          "reference": "UNIDROIT Principles (2016) art. 7.4.9: interest runs from the time payment is due to the time of payment; day count actual/365; compounding is for the tribunal to decide",
          "signature": {
            "input": {
              "principal": {
                "type": "number",
                "describe": "The sum due",
                "min": 0
              },
              "annualRate": {
                "type": "number",
                "describe": "Annual interest rate, 0–1",
                "min": 0,
                "max": 1
              },
              "fromDate": {
                "type": "string",
                "describe": "Date payment was due, YYYY-MM-DD"
              },
              "toDate": {
                "type": "string",
                "describe": "Date interest runs to, YYYY-MM-DD"
              },
              "method": {
                "type": "string",
                "describe": "simple, or compounded annually",
                "oneOf": [
                  "simple",
                  "compound_annual"
                ]
              }
            },
            "output": {
              "days": {
                "type": "number",
                "describe": "Days elapsed"
              },
              "years": {
                "type": "number",
                "describe": "Days ÷ 365"
              },
              "interest": {
                "type": "number",
                "describe": "Interest accrued"
              },
              "total": {
                "type": "number",
                "describe": "Principal + interest"
              }
            }
          }
        },
        {
          "id": "cost_apportionment",
          "name": "Apportionment of costs by success",
          "answers": "If costs follow the event in proportion to success, who pays how much of whose costs, and what is the net?",
          "example": {
            "claimedAmount": 2000000,
            "awardedAmount": 1500000,
            "claimantCosts": 400000,
            "respondentCosts": 300000
          },
          "reference": "UNCITRAL Arbitration Rules (2013) art. 42(1): costs borne in principle by the unsuccessful party, apportionment if reasonable; ICC Rules (2021) art. 38(4)–(5)",
          "signature": {
            "input": {
              "claimedAmount": {
                "type": "number",
                "describe": "Amount claimed",
                "min": 0.01
              },
              "awardedAmount": {
                "type": "number",
                "describe": "Amount awarded",
                "min": 0
              },
              "claimantCosts": {
                "type": "number",
                "describe": "Claimant’s reasonable costs",
                "min": 0
              },
              "respondentCosts": {
                "type": "number",
                "describe": "Respondent’s reasonable costs",
                "min": 0
              }
            },
            "output": {
              "successRate": {
                "type": "number",
                "describe": "Awarded ÷ claimed, at most 1"
              },
              "respondentPaysOfClaimantCosts": {
                "type": "number",
                "describe": "Success × claimant costs"
              },
              "claimantPaysOfRespondentCosts": {
                "type": "number",
                "describe": "(1 − success) × respondent costs"
              },
              "netPayableByRespondent": {
                "type": "number",
                "describe": "The difference (negative: the claimant pays)"
              }
            }
          }
        },
        {
          "id": "settlement_zone",
          "name": "Settlement zone from expected outcomes",
          "answers": "Given the chance of winning and the cost of going on, between what sums should both sides prefer to settle?",
          "example": {
            "awardIfClaimantWins": 1000000,
            "probabilityClaimantWins": 0.6,
            "claimantCostsToAward": 150000,
            "respondentCostsToAward": 120000
          },
          "reference": "Fisher & Ury (1981) Getting to Yes — BATNA; Mnookin, Peppet & Tulumello (2000) Beyond Winning; decision analysis with risk-neutral parties, each bearing its own costs",
          "signature": {
            "input": {
              "awardIfClaimantWins": {
                "type": "number",
                "describe": "Expected award if the claimant wins",
                "min": 0
              },
              "probabilityClaimantWins": {
                "type": "number",
                "describe": "Shared estimate of the claimant’s chance, 0–1",
                "min": 0,
                "max": 1
              },
              "claimantCostsToAward": {
                "type": "number",
                "describe": "Claimant’s further costs to an award",
                "min": 0
              },
              "respondentCostsToAward": {
                "type": "number",
                "describe": "Respondent’s further costs to an award",
                "min": 0
              }
            },
            "output": {
              "claimantFloor": {
                "type": "number",
                "describe": "p·A − claimant costs"
              },
              "respondentCeiling": {
                "type": "number",
                "describe": "p·A + respondent costs"
              },
              "zoneExists": {
                "type": "boolean",
                "describe": "Ceiling ≥ floor"
              },
              "zoneWidth": {
                "type": "number",
                "describe": "Ceiling − floor"
              },
              "midpoint": {
                "type": "number",
                "describe": "A focal settlement figure"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:llm-corporate-environmental--mining-law",
      "code": "CDU-LAW-CEM-900",
      "level": "LLM",
      "name": "LLM Corporate, Environmental & Mining Law",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the South African statutes it names; no prior institution is claimed"
        }
      ],
      "researchProject": "The statute as a formula: royalty, solvency, tenure and control in South African mining companies",
      "description": "The parts of South African corporate and mining law that reduce to a calculation: the mineral royalty percentage for refined and unrefined resources, the solvency and liquidity test before a distribution, the term and renewal of prospecting and mining rights, and the beneficial-interest disclosure and mandatory-offer thresholds.",
      "syllabus": [
        "Mineral royalties: EBIT, gross sales, the refined and unrefined formulae and their caps (Royalty Act s4)",
        "Capital maintenance: the solvency and liquidity test for distributions (Companies Act ss4, 46)",
        "Mineral tenure: prospecting and mining rights, their terms and renewals (MPRDA)",
        "Control: 5% disclosure steps and the 35% mandatory offer (Companies Act ss122–123)"
      ],
      "reference": {
        "Royalty (refined)": "Y% = 0.5 + EBIT ÷ (gross sales × 12.5) × 100, at most 5%",
        "Royalty (unrefined)": "Y% = 0.5 + EBIT ÷ (gross sales × 9) × 100, at most 7%; never below 0.5%",
        "Solvency and liquidity": "assets ≥ liabilities, fairly valued; and able to pay debts as they fall due for 12 months (s4(1))",
        "Mineral rights": "prospecting: ≤ 5 years, renewable once ≤ 3; mining: ≤ 30 years, renewable ≤ 30 at a time",
        "Securities thresholds": "notify at every whole multiple of 5% (s122(1)); mandatory offer at 35% (s123)"
      },
      "role": "You are counsel to a South African mining company. Cite the section, apply it to the numbers, and distinguish what the statute decides from what needs the regulator, the Panel or a court.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "LLM",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "042",
          "052"
        ],
        "standards": [
          "Council on Higher Education, Higher Education Qualifications Sub-Framework (HEQSF) — Master’s Degree, NQF level 9",
          "Mineral and Petroleum Resources Royalty Act 28 of 2008, s4 (royalty percentage)",
          "Companies Act 71 of 2008, s4 (solvency and liquidity), s122 (notice of beneficial interest), s123 (mandatory offers)",
          "Mineral and Petroleum Resources Development Act 28 of 2002, ss17, 18, 23, 24; National Environmental Management Act 107 of 1998"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-LAW-CEM-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "mineral_royalty",
            "solvency_liquidity",
            "mineral_right_term",
            "securities_thresholds"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-LAW-CEM-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-LAW-CEM-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "The statute as a formula: royalty, solvency, tenure and control in South African mining companies"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "mineral_royalty",
          "name": "Mineral royalty percentage and amount",
          "answers": "What royalty percentage and amount does the Royalty Act impose for this year’s gross sales and EBIT?",
          "example": {
            "condition": "refined",
            "grossSales": 500000000,
            "ebit": 120000000
          },
          "reference": "Mineral and Petroleum Resources Royalty Act 28 of 2008 s4: refined 0.5 + EBIT/(gross sales × 12.5) × 100, capped at 5%; unrefined × 9, capped at 7%",
          "signature": {
            "input": {
              "condition": {
                "type": "string",
                "describe": "Condition of the mineral resource transferred",
                "oneOf": [
                  "refined",
                  "unrefined"
                ]
              },
              "grossSales": {
                "type": "number",
                "describe": "Gross sales for the year (s6)",
                "min": 0.01
              },
              "ebit": {
                "type": "number",
                "describe": "Earnings before interest and taxes as the Act defines it (s5); may be negative",
                "min": -1000000000000,
                "max": 1000000000000
              }
            },
            "output": {
              "royaltyPercentage": {
                "type": "number",
                "describe": "Y%, between 0.5 and the cap"
              },
              "royalty": {
                "type": "number",
                "describe": "Y% × gross sales"
              },
              "capped": {
                "type": "boolean",
                "describe": "The cap applied"
              }
            }
          }
        },
        {
          "id": "solvency_liquidity",
          "name": "Solvency and liquidity test",
          "answers": "Would the company still satisfy the solvency and liquidity test immediately after this distribution, and what is the most it could distribute?",
          "example": {
            "assetsFairValue": 50000000,
            "liabilitiesFairValue": 32000000,
            "distribution": 5000000,
            "cashOnHand": 6000000,
            "inflowsNext12Months": 40000000,
            "debtsDueNext12Months": 39000000
          },
          "reference": "Companies Act 71 of 2008 s4(1)(a) (assets ≥ liabilities, fairly valued) and s4(1)(b) (able to pay debts as they become due for 12 months); s46(1)(b) (applied immediately after the distribution)",
          "signature": {
            "input": {
              "assetsFairValue": {
                "type": "number",
                "describe": "Total assets, fairly valued",
                "min": 0
              },
              "liabilitiesFairValue": {
                "type": "number",
                "describe": "Total liabilities, fairly valued",
                "min": 0
              },
              "distribution": {
                "type": "number",
                "describe": "The proposed distribution",
                "min": 0
              },
              "cashOnHand": {
                "type": "number",
                "describe": "Cash and liquid resources now",
                "min": 0
              },
              "inflowsNext12Months": {
                "type": "number",
                "describe": "Reasonably foreseeable inflows over 12 months",
                "min": 0
              },
              "debtsDueNext12Months": {
                "type": "number",
                "describe": "Debts falling due in the ordinary course over 12 months",
                "min": 0
              }
            },
            "output": {
              "solventAfter": {
                "type": "boolean",
                "describe": "Assets − distribution ≥ liabilities"
              },
              "liquidAfter": {
                "type": "boolean",
                "describe": "Cash − distribution + inflows ≥ debts due"
              },
              "passes": {
                "type": "boolean",
                "describe": "Both limbs satisfied"
              },
              "maximumDistribution": {
                "type": "number",
                "describe": "The larger distribution both limbs would still allow"
              }
            }
          }
        },
        {
          "id": "mineral_right_term",
          "name": "Term and renewal of a mineral right",
          "answers": "For a prospecting or mining right granted on this date, when does it expire, and how far can renewal take it?",
          "example": {
            "rightType": "mining",
            "grantDate": "2026-03-01",
            "requestedYears": 25
          },
          "reference": "MPRDA 28 of 2002: prospecting right ≤ 5 years (s17(6)), renewable once ≤ 3 years (s18(4)); mining right ≤ 30 years (s23(6)), renewable ≤ 30 years at a time (s24(4))",
          "signature": {
            "input": {
              "rightType": {
                "type": "string",
                "describe": "The right granted",
                "oneOf": [
                  "prospecting",
                  "mining"
                ]
              },
              "grantDate": {
                "type": "string",
                "describe": "Effective date of the right, YYYY-MM-DD"
              },
              "requestedYears": {
                "type": "number",
                "describe": "Term applied for, whole years",
                "min": 1,
                "max": 100
              }
            },
            "output": {
              "grantedYears": {
                "type": "number",
                "describe": "Requested term, capped by the Act"
              },
              "expiryDate": {
                "type": "string",
                "describe": "Grant date + granted term"
              },
              "renewalYears": {
                "type": "number",
                "describe": "Longest single renewal"
              },
              "expiryAfterOneRenewal": {
                "type": "string",
                "describe": "Expiry if renewed once for the longest period"
              }
            }
          }
        },
        {
          "id": "securities_thresholds",
          "name": "Disclosure steps and the mandatory offer",
          "answers": "Which 5% disclosure steps does this change in holding cross, and does it trigger a mandatory offer?",
          "example": {
            "percentBefore": 28,
            "percentAfter": 36
          },
          "reference": "Companies Act 71 of 2008 s122(1) (notify within three business days at 5%, 10%, 15% and every further whole multiple of 5%) and s123 (mandatory offer on acquiring 35% of the voting securities of a regulated company)",
          "signature": {
            "input": {
              "percentBefore": {
                "type": "number",
                "describe": "Beneficial interest before, % of the class",
                "min": 0,
                "max": 100
              },
              "percentAfter": {
                "type": "number",
                "describe": "Beneficial interest after, % of the class",
                "min": 0,
                "max": 100
              }
            },
            "output": {
              "thresholdsCrossed": {
                "type": "number[]",
                "describe": "Multiples of 5% reached or fallen below"
              },
              "mustNotify": {
                "type": "boolean",
                "describe": "At least one threshold crossed"
              },
              "mandatoryOffer": {
                "type": "boolean",
                "describe": "Crossed up to 35% or more"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:med-assessment--curriculum",
      "code": "CDU-EDU-ASC-900",
      "level": "MSc",
      "name": "MEd Assessment & Curriculum",
      "faculty": "Faculty of Education",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the AERA/APA/NCME Standards; no prior institution is claimed"
        }
      ],
      "researchProject": "Is the test fair to the learner? Item quality, reliability, measurement error and the cut score",
      "description": "The psychometrics behind a defensible assessment: item difficulty and upper–lower discrimination with Ebel’s quality bands, internal-consistency reliability by Cronbach’s alpha, the standard error of measurement and the confidence band around a learner’s score, and a modified-Angoff cut score with its standard error across judges.",
      "syllabus": [
        "Item analysis: difficulty, the upper–lower discrimination index, revising or discarding items",
        "Reliability: internal consistency, Cronbach’s alpha, what lengthens or shortens it",
        "Measurement error: the SEM and the score band a report should show",
        "Standard setting: the modified Angoff method and the precision of a cut score"
      ],
      "reference": {
        "Item difficulty (upper–lower)": "p = (U + L) ÷ 2n",
        "Discrimination index": "D = (U − L) ÷ n; ≥ 0.40 very good, 0.30–0.39 reasonably good, 0.20–0.29 marginal, < 0.20 poor (Ebel & Frisbie 1991)",
        "Cronbach’s alpha": "α = k/(k − 1)·(1 − Σσᵢ² ÷ σ_X²)",
        "SEM": "σ_X·√(1 − reliability); band = score ± z·SEM",
        "Angoff cut": "mean over judges of Σ item probabilities; SE = sd ÷ √judges"
      },
      "role": "You are an assessment specialist advising a curriculum committee. Say what the statistic means for the learner, show the calculation, and say what the committee should change in the test.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MEd",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "011"
        ],
        "standards": [
          "AERA, APA & NCME (2014) Standards for Educational and Psychological Testing — chapters 1 (validity), 2 (reliability/precision and errors of measurement), 5 (scores, scales and cut scores)",
          "CAEP (2022) Standards for initial and advanced educator preparation — evidence from valid and reliable assessments",
          "Ebel, R. L. & Frisbie, D. A. (1991) Essentials of Educational Measurement — discrimination-index guidelines",
          "Cizek, G. J. & Bunch, M. B. (2007) Standard Setting — the (modified) Angoff method"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-EDU-ASC-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "item_analysis",
            "cronbach_alpha",
            "sem_band",
            "angoff_cut"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-EDU-ASC-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-EDU-ASC-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Is the test fair to the learner? Item quality, reliability, measurement error and the cut score"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "item_analysis",
          "name": "Item difficulty and discrimination",
          "answers": "How hard is this item, and does it separate stronger from weaker candidates?",
          "example": {
            "upperCorrect": 24,
            "lowerCorrect": 10,
            "groupSize": 30
          },
          "reference": "Kelley (1939) upper and lower groups; Ebel & Frisbie (1991) discrimination-index guidelines; AERA/APA/NCME Standards (2014) ch. 4 (item development and review)",
          "signature": {
            "input": {
              "upperCorrect": {
                "type": "number",
                "describe": "Correct answers in the upper group",
                "min": 0
              },
              "lowerCorrect": {
                "type": "number",
                "describe": "Correct answers in the lower group",
                "min": 0
              },
              "groupSize": {
                "type": "number",
                "describe": "Candidates in each group (often the top and bottom 27%)",
                "min": 1
              }
            },
            "output": {
              "difficulty": {
                "type": "number",
                "describe": "p = (U + L) ÷ 2n"
              },
              "discrimination": {
                "type": "number",
                "describe": "D = (U − L) ÷ n"
              },
              "quality": {
                "type": "string",
                "describe": "very good, reasonably good, marginal or poor"
              }
            }
          }
        },
        {
          "id": "cronbach_alpha",
          "name": "Cronbach’s alpha",
          "answers": "How internally consistent are the items of this test?",
          "example": {
            "itemVariances": [
              0.8,
              1.1,
              0.9,
              1.2,
              0.7,
              1
            ],
            "totalScoreVariance": 18.5
          },
          "reference": "Cronbach, L. J. (1951) Coefficient alpha and the internal structure of tests, Psychometrika 16(3); AERA/APA/NCME Standards (2014) ch. 2",
          "signature": {
            "input": {
              "itemVariances": {
                "type": "number[]",
                "describe": "Variance of each item score"
              },
              "totalScoreVariance": {
                "type": "number",
                "describe": "Variance of the total test score",
                "min": 0.000001
              }
            },
            "output": {
              "items": {
                "type": "number",
                "describe": "k"
              },
              "sumItemVariances": {
                "type": "number",
                "describe": "Σσᵢ²"
              },
              "alpha": {
                "type": "number",
                "describe": "Cronbach’s alpha"
              }
            }
          }
        },
        {
          "id": "sem_band",
          "name": "Standard error of measurement and score band",
          "answers": "Given the test’s reliability, how precise is this learner’s score, and what band should be reported?",
          "example": {
            "scoreSd": 12,
            "reliability": 0.91,
            "observedScore": 68,
            "band": "95"
          },
          "reference": "Classical test theory: SEM = σ·√(1 − r); AERA/APA/NCME Standards (2014) ch. 2 (errors of measurement should be reported)",
          "signature": {
            "input": {
              "scoreSd": {
                "type": "number",
                "describe": "Standard deviation of test scores",
                "min": 0
              },
              "reliability": {
                "type": "number",
                "describe": "Reliability coefficient, 0–0.999",
                "min": 0,
                "max": 0.999
              },
              "observedScore": {
                "type": "number",
                "describe": "The learner’s observed score",
                "min": 0,
                "max": 100
              },
              "band": {
                "type": "string",
                "describe": "Confidence of the band, %",
                "oneOf": [
                  "68",
                  "90",
                  "95"
                ]
              }
            },
            "output": {
              "sem": {
                "type": "number",
                "describe": "Standard error of measurement"
              },
              "lower": {
                "type": "number",
                "describe": "Score − z·SEM"
              },
              "upper": {
                "type": "number",
                "describe": "Score + z·SEM"
              }
            }
          }
        },
        {
          "id": "angoff_cut",
          "name": "Modified-Angoff cut score",
          "answers": "Where do the judges place the pass mark, and how precise is that placement?",
          "example": {
            "judgeSums": [
              28.5,
              31,
              29.5,
              33,
              30,
              27.5
            ],
            "items": 50
          },
          "reference": "Angoff, W. H. (1971) Scales, norms and equivalent scores, in Educational Measurement (2nd ed.); Cizek & Bunch (2007) Standard Setting, ch. 6",
          "signature": {
            "input": {
              "judgeSums": {
                "type": "number[]",
                "describe": "Each judge’s sum of item probabilities for the borderline candidate"
              },
              "items": {
                "type": "number",
                "describe": "Number of items on the test",
                "min": 1
              }
            },
            "output": {
              "cutScore": {
                "type": "number",
                "describe": "Mean of the judges’ sums (raw score)"
              },
              "cutPercent": {
                "type": "number",
                "describe": "Cut score ÷ items × 100"
              },
              "standardError": {
                "type": "number",
                "describe": "Sample sd of the sums ÷ √judges"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mba-marketing--pricing",
      "code": "CDU-BUS-MKT-910",
      "level": "MBA",
      "name": "MBA Marketing & Pricing",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, AACSB standards and the marketing-metrics canon; no prior institution is claimed"
        }
      ],
      "researchProject": "What a price change must earn: elasticity, break-even volume, marketing return and adoption",
      "description": "The numbers behind a pricing or marketing decision: the arc (midpoint) price elasticity and what it did to revenue, the volume a price cut must win (or a rise may lose) to leave contribution unchanged, the return on a marketing investment, and the adoption path of a new product under the Bass model.",
      "syllabus": [
        "Demand: arc elasticity, elastic and inelastic ranges, revenue effects",
        "Pricing: contribution margin and the break-even sales change for a price move (Nagle & Müller)",
        "Marketing accountability: incremental contribution and ROMI (Farris et al.)",
        "Forecasting adoption: innovation and imitation coefficients, the Bass curve and its peak"
      ],
      "reference": {
        "Arc elasticity": "[(Q2 − Q1) ÷ ((Q1 + Q2)/2)] ÷ [(P2 − P1) ÷ ((P1 + P2)/2)]",
        "Break-even sales change": "−ΔP ÷ (CM + ΔP), as fractions of the original price",
        "ROMI": "(incremental revenue × contribution margin − spend) ÷ spend",
        "Bass model": "N(t) = m·(1 − e^(−(p+q)t)) ÷ (1 + (q/p)·e^(−(p+q)t)); peak at ln(q/p) ÷ (p + q)"
      },
      "role": "You are a pricing and marketing strategist advising a commercial director. Lead with what the numbers recommend, show them, and name the customer behaviour the recommendation assumes.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MBA",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "AACSB International (2020) Guiding Principles and Standards for Business Accreditation",
          "Farris, P. W., Bendle, N. T., Pfeifer, P. E. & Reibstein, D. J. (2010) Marketing Metrics (2nd ed.)",
          "Nagle, T. T. & Müller, G. The Strategy and Tactics of Pricing — price–volume trade-offs",
          "Bass, F. M. (1969) A new product growth model for consumer durables, Management Science 15(5) 215–227"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-MKT-910-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "arc_elasticity",
            "breakeven_price_change",
            "romi",
            "bass_diffusion"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-MKT-910-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-MKT-910-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "What a price change must earn: elasticity, break-even volume, marketing return and adoption"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "arc_elasticity",
          "name": "Arc price elasticity",
          "answers": "Between these two prices, how responsive was demand, and did revenue rise or fall?",
          "example": {
            "price1": 100,
            "quantity1": 1000,
            "price2": 110,
            "quantity2": 880
          },
          "reference": "Midpoint (arc) elasticity of demand; Farris et al. (2010) Marketing Metrics, price elasticity",
          "signature": {
            "input": {
              "price1": {
                "type": "number",
                "describe": "Price before",
                "min": 0.0001
              },
              "quantity1": {
                "type": "number",
                "describe": "Quantity sold before",
                "min": 0
              },
              "price2": {
                "type": "number",
                "describe": "Price after",
                "min": 0.0001
              },
              "quantity2": {
                "type": "number",
                "describe": "Quantity sold after",
                "min": 0
              }
            },
            "output": {
              "elasticity": {
                "type": "number",
                "describe": "Arc elasticity"
              },
              "responsiveness": {
                "type": "string",
                "describe": "elastic (|e| > 1), unit elastic or inelastic"
              },
              "revenue1": {
                "type": "number",
                "describe": "P1 × Q1"
              },
              "revenue2": {
                "type": "number",
                "describe": "P2 × Q2"
              }
            }
          }
        },
        {
          "id": "breakeven_price_change",
          "name": "Break-even sales change for a price move",
          "answers": "By how much must volume rise after a price cut (or may it fall after a rise) for contribution to stay the same?",
          "example": {
            "contributionMargin": 0.35,
            "priceChange": -0.1
          },
          "reference": "Nagle & Müller, The Strategy and Tactics of Pricing: break-even sales change = −ΔP ÷ (CM + ΔP), all as fractions of the original price",
          "signature": {
            "input": {
              "contributionMargin": {
                "type": "number",
                "describe": "Contribution margin as a fraction of the current price, 0–1",
                "min": 0.0001,
                "max": 1
              },
              "priceChange": {
                "type": "number",
                "describe": "Proposed price change as a fraction (−0.1 = a 10% cut)",
                "min": -0.99,
                "max": 5
              }
            },
            "output": {
              "breakevenVolumeChange": {
                "type": "number",
                "describe": "Required change in unit volume, as a fraction"
              },
              "newContributionMargin": {
                "type": "number",
                "describe": "(CM + ΔP) ÷ (1 + ΔP), as a fraction of the new price"
              }
            }
          }
        },
        {
          "id": "romi",
          "name": "Return on marketing investment",
          "answers": "Did the campaign’s incremental contribution repay what was spent on it?",
          "example": {
            "incrementalRevenue": 2000000,
            "contributionMargin": 0.4,
            "marketingSpend": 500000
          },
          "reference": "Farris et al. (2010) Marketing Metrics: ROMI = (incremental revenue × contribution margin − marketing spending) ÷ marketing spending",
          "signature": {
            "input": {
              "incrementalRevenue": {
                "type": "number",
                "describe": "Revenue attributable to the campaign",
                "min": 0
              },
              "contributionMargin": {
                "type": "number",
                "describe": "Contribution margin, 0–1",
                "min": 0,
                "max": 1
              },
              "marketingSpend": {
                "type": "number",
                "describe": "Marketing spend",
                "min": 0.01
              }
            },
            "output": {
              "incrementalContribution": {
                "type": "number",
                "describe": "Revenue × margin"
              },
              "romi": {
                "type": "number",
                "describe": "(Contribution − spend) ÷ spend"
              },
              "paidBack": {
                "type": "boolean",
                "describe": "ROMI ≥ 0"
              }
            }
          }
        },
        {
          "id": "bass_diffusion",
          "name": "Bass diffusion forecast",
          "answers": "How many customers will have adopted by period t, how many adopt in that period, and when do new adoptions peak?",
          "example": {
            "marketPotential": 1000000,
            "innovation": 0.03,
            "imitation": 0.38,
            "period": 5
          },
          "reference": "Bass (1969) Management Science 15(5): N(t) = m(1 − e^(−(p+q)t)) / (1 + (q/p)e^(−(p+q)t)); peak t* = ln(q/p)/(p + q)",
          "signature": {
            "input": {
              "marketPotential": {
                "type": "number",
                "describe": "Eventual adopters m",
                "min": 1
              },
              "innovation": {
                "type": "number",
                "describe": "Coefficient of innovation p",
                "min": 0.0001,
                "max": 1
              },
              "imitation": {
                "type": "number",
                "describe": "Coefficient of imitation q",
                "min": 0,
                "max": 5
              },
              "period": {
                "type": "number",
                "describe": "Period t (whole periods since launch)",
                "min": 1,
                "max": 200
              }
            },
            "output": {
              "cumulativeAdopters": {
                "type": "number",
                "describe": "N(t)"
              },
              "adoptersInPeriod": {
                "type": "number",
                "describe": "N(t) − N(t − 1)"
              },
              "peakPeriod": {
                "type": "number",
                "describe": "ln(q/p) ÷ (p + q); 0 when q ≤ p"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-mineral-economics--mining",
      "code": "CDU-BUS-MIN-900",
      "level": "MSc",
      "name": "MSc Mineral Economics & Mining",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the SAMREC/JORC codes; no prior institution is claimed"
        }
      ],
      "researchProject": "From block model to value: tonnage, cut-off, stripping and smelter return as one chain",
      "description": "The economic chain from a mineral deposit to a value per tonne: tonnage and contained metal as the codes require them reported, the break-even and marginal cut-off grades, the break-even stripping ratio that bounds an open pit, and the net smelter return per tonne of ore under concentrate terms.",
      "syllabus": [
        "Reporting: volume, density, tonnage, grade, contained metal (SAMREC 2016; JORC 2012 Table 1)",
        "Cut-off grade: break-even and marginal cut-offs, recovery, selling costs (Lane; Rendu)",
        "Open-pit economics: stripping ratio and the break-even stripping ratio",
        "Revenue: concentrate ratio, payable metal, treatment and refining charges, NSR"
      ],
      "reference": {
        "Tonnage": "volume × dry bulk density",
        "Contained metal": "tonnes × grade; 1 troy ounce = 31.1034768 g",
        "Break-even cut-off": "(mining + processing + G&A per tonne) ÷ ((price − selling cost) × recovery)",
        "Marginal cut-off": "(processing + G&A per tonne) ÷ ((price − selling cost) × recovery)",
        "BESR": "(recoverable value per tonne of ore − ore cost per tonne) ÷ waste cost per tonne",
        "NSR": "payable metal × (price − refining charge) − concentrate tonnes × (treatment + transport)"
      },
      "role": "You are a mineral economist and Competent Person explaining a figure in a resource statement or a mine plan. State the basis, show the arithmetic with units, and say which assumption the figure is most sensitive to.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "071",
          "041"
        ],
        "standards": [
          "SAMREC Code (2016) — South African Code for the Reporting of Exploration Results, Mineral Resources and Mineral Reserves; SAMVAL Code (2016)",
          "JORC Code (2012) — Australasian Code for Reporting of Exploration Results, Mineral Resources and Ore Reserves; CRIRSCO International Reporting Template",
          "Rendu, J.-M. (2014) An Introduction to Cut-off Grade Estimation (2nd ed.), SME; Lane, K. F. (1964) Choosing the optimum cut-off grade",
          "Hustrulid, W., Kuchta, M. & Martin, R. (2013) Open Pit Mine Planning and Design (3rd ed.)"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-MIN-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "resource_tonnage",
            "cutoff_grade",
            "stripping_ratio",
            "nsr_per_tonne"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-MIN-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-MIN-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "From block model to value: tonnage, cut-off, stripping and smelter return as one chain"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "resource_tonnage",
          "name": "Tonnage and contained metal",
          "answers": "How many tonnes does this volume hold, and how much metal do they contain?",
          "example": {
            "volume": 2500000,
            "density": 2.7,
            "grade": 3.2,
            "gradeUnit": "g/t"
          },
          "reference": "SAMREC Code (2016) and JORC Code (2012) Table 1: tonnage, grade and contained metal reported together; density on a dry basis",
          "signature": {
            "input": {
              "volume": {
                "type": "number",
                "describe": "Volume in cubic metres",
                "min": 0
              },
              "density": {
                "type": "number",
                "describe": "Dry bulk density, t/m³",
                "min": 0.1,
                "max": 25
              },
              "grade": {
                "type": "number",
                "describe": "Average grade",
                "min": 0
              },
              "gradeUnit": {
                "type": "string",
                "describe": "g/t for precious metals, % for base metals",
                "oneOf": [
                  "g/t",
                  "%"
                ]
              }
            },
            "output": {
              "tonnes": {
                "type": "number",
                "describe": "Volume × density"
              },
              "containedMetal": {
                "type": "number",
                "describe": "kg (g/t) or tonnes (%)"
              },
              "metalUnit": {
                "type": "string",
                "describe": "kg or t"
              },
              "troyOunces": {
                "type": "number",
                "describe": "For g/t grades; null for %"
              }
            }
          }
        },
        {
          "id": "cutoff_grade",
          "name": "Break-even and marginal cut-off grade",
          "answers": "Below what grade does a tonne of ore not pay for itself — counting mining (break-even), and once already mined (marginal)?",
          "example": {
            "miningCost": 35,
            "processingCost": 22,
            "adminCost": 8,
            "pricePerGram": 60,
            "sellingCostPerGram": 1.5,
            "recovery": 0.92
          },
          "reference": "Lane (1964); Rendu (2014) An Introduction to Cut-off Grade Estimation: break-even and marginal cut-off grades",
          "signature": {
            "input": {
              "miningCost": {
                "type": "number",
                "describe": "Mining cost per tonne of ore",
                "min": 0
              },
              "processingCost": {
                "type": "number",
                "describe": "Processing cost per tonne",
                "min": 0
              },
              "adminCost": {
                "type": "number",
                "describe": "G&A cost per tonne",
                "min": 0
              },
              "pricePerGram": {
                "type": "number",
                "describe": "Metal price per gram",
                "min": 0.0001
              },
              "sellingCostPerGram": {
                "type": "number",
                "describe": "Refining, transport and royalty per gram",
                "min": 0
              },
              "recovery": {
                "type": "number",
                "describe": "Metallurgical recovery, 0–1",
                "min": 0.01,
                "max": 1
              }
            },
            "output": {
              "breakevenCutoff": {
                "type": "number",
                "describe": "g/t, all costs"
              },
              "marginalCutoff": {
                "type": "number",
                "describe": "g/t, excluding mining"
              }
            }
          }
        },
        {
          "id": "stripping_ratio",
          "name": "Stripping ratio against the break-even",
          "answers": "Is the waste that must be moved per tonne of ore within what the ore can pay for?",
          "example": {
            "wasteTonnes": 18000000,
            "oreTonnes": 4000000,
            "valuePerTonneOre": 95,
            "oreCostPerTonne": 48,
            "wasteCostPerTonne": 9
          },
          "reference": "Hustrulid, Kuchta & Martin (2013) Open Pit Mine Planning and Design: stripping ratio and the break-even stripping ratio",
          "signature": {
            "input": {
              "wasteTonnes": {
                "type": "number",
                "describe": "Waste to be moved",
                "min": 0
              },
              "oreTonnes": {
                "type": "number",
                "describe": "Ore to be mined",
                "min": 0.01
              },
              "valuePerTonneOre": {
                "type": "number",
                "describe": "Recoverable value per tonne of ore",
                "min": 0
              },
              "oreCostPerTonne": {
                "type": "number",
                "describe": "Mining + processing + G&A per tonne of ore",
                "min": 0
              },
              "wasteCostPerTonne": {
                "type": "number",
                "describe": "Cost to mine a tonne of waste",
                "min": 0.0001
              }
            },
            "output": {
              "strippingRatio": {
                "type": "number",
                "describe": "Waste ÷ ore"
              },
              "breakevenStrippingRatio": {
                "type": "number",
                "describe": "(Value − ore cost) ÷ waste cost"
              },
              "economic": {
                "type": "boolean",
                "describe": "SR ≤ BESR"
              }
            }
          }
        },
        {
          "id": "nsr_per_tonne",
          "name": "Net smelter return per tonne of ore",
          "answers": "After recovery, payability and smelter charges, what is a tonne of this ore worth at the mine gate?",
          "example": {
            "headGrade": 0.012,
            "recovery": 0.9,
            "concentrateGrade": 0.28,
            "payable": 0.965,
            "pricePerTonneMetal": 9000,
            "refiningChargePerTonne": 180,
            "treatmentChargePerTonneConc": 80,
            "transportPerTonneConc": 60
          },
          "reference": "Wellmer, Dalheimer & Wagner (2008) Economic Evaluation in Exploration (2nd ed.): net smelter return under concentrate terms",
          "signature": {
            "input": {
              "headGrade": {
                "type": "number",
                "describe": "Metal grade of the ore, as a fraction",
                "min": 0,
                "max": 1
              },
              "recovery": {
                "type": "number",
                "describe": "Recovery to concentrate, 0–1",
                "min": 0,
                "max": 1
              },
              "concentrateGrade": {
                "type": "number",
                "describe": "Metal grade of the concentrate, as a fraction",
                "min": 0.0001,
                "max": 1
              },
              "payable": {
                "type": "number",
                "describe": "Fraction of contained metal the smelter pays for",
                "min": 0,
                "max": 1
              },
              "pricePerTonneMetal": {
                "type": "number",
                "describe": "Metal price per tonne",
                "min": 0
              },
              "refiningChargePerTonne": {
                "type": "number",
                "describe": "RC per tonne of payable metal",
                "min": 0
              },
              "treatmentChargePerTonneConc": {
                "type": "number",
                "describe": "TC per dry tonne of concentrate",
                "min": 0
              },
              "transportPerTonneConc": {
                "type": "number",
                "describe": "Freight per tonne of concentrate",
                "min": 0,
                "default": 0
              }
            },
            "output": {
              "concentratePerTonneOre": {
                "type": "number",
                "describe": "Tonnes of concentrate per tonne of ore"
              },
              "payableMetalPerTonneOre": {
                "type": "number",
                "describe": "Tonnes of payable metal per tonne of ore"
              },
              "nsrPerTonneOre": {
                "type": "number",
                "describe": "Net smelter return per tonne of ore"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:meng-industrial--supply-chain",
      "code": "CDU-ENG-IND-900",
      "level": "MEng",
      "name": "MEng Industrial & Supply Chain",
      "faculty": "Faculty of Engineering and the Built Environment",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, the IEA graduate attributes and the ASCM body of knowledge; no prior institution is claimed"
        }
      ],
      "researchProject": "Stock, service and the machine: order quantities, buffers and equipment effectiveness in one plant",
      "description": "The quantitative core of industrial and supply-chain engineering: the economic order quantity and its annual cost, safety stock and the reorder point at a target cycle-service level, overall equipment effectiveness from availability, performance and quality, and the newsvendor quantity for a single selling season.",
      "syllabus": [
        "Lot sizing: ordering cost, holding cost, the EOQ and the cost curve (Harris 1913)",
        "Uncertainty: safety stock, cycle-service level, reorder point under normal demand",
        "Equipment: availability, performance, quality, OEE and the six big losses (Nakajima 1988)",
        "Single-period decisions: underage and overage costs, the critical ratio, the newsvendor quantity"
      ],
      "reference": {
        "EOQ": "√(2·D·S ÷ H)",
        "Safety stock": "z·σ_d·√L (constant lead time); ROP = d·L + SS",
        "OEE": "availability × performance × quality",
        "Newsvendor": "Q* = μ + σ·Φ⁻¹(Cu ÷ (Cu + Co)), Cu = price − cost, Co = cost − salvage"
      },
      "role": "You are a professional industrial engineer advising a plant or supply-chain manager. State the assumptions, show the numbers with units, and say what to set on the system and what to watch.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MEng",
        "nqfLevel": 9,
        "qualificationType": "Professional Master's Degree (HEQSF qualification type 9b)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "071"
        ],
        "standards": [
          "International Engineering Alliance — Graduate Attributes and Professional Competencies (2021), as applied by ECSA",
          "ASCM (APICS) Certified in Planning and Inventory Management (CPIM) body of knowledge",
          "Silver, E. A., Pyke, D. F. & Thomas, D. J. (2017) Inventory and Production Management in Supply Chains (4th ed.)",
          "Nakajima, S. (1988) Introduction to TPM: Total Productive Maintenance — overall equipment effectiveness"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ENG-IND-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eoq",
            "safety_stock_rop",
            "oee",
            "newsvendor"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ENG-IND-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ENG-IND-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Stock, service and the machine: order quantities, buffers and equipment effectiveness in one plant"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "eoq",
          "name": "Economic order quantity",
          "answers": "How much should be ordered at a time to minimise ordering plus holding cost, and what does that cost a year?",
          "example": {
            "annualDemand": 12000,
            "orderCost": 150,
            "holdingCostPerUnitYear": 4
          },
          "reference": "Harris, F. W. (1913) How many parts to make at once; ASCM CPIM — the EOQ model",
          "signature": {
            "input": {
              "annualDemand": {
                "type": "number",
                "describe": "Units demanded per year",
                "min": 0.01
              },
              "orderCost": {
                "type": "number",
                "describe": "Cost per order placed",
                "min": 0.01
              },
              "holdingCostPerUnitYear": {
                "type": "number",
                "describe": "Cost to hold one unit for a year",
                "min": 0.0001
              }
            },
            "output": {
              "eoq": {
                "type": "number",
                "describe": "Optimal order quantity"
              },
              "ordersPerYear": {
                "type": "number",
                "describe": "D ÷ Q*"
              },
              "annualCost": {
                "type": "number",
                "describe": "Ordering + holding at Q*"
              }
            }
          }
        },
        {
          "id": "safety_stock_rop",
          "name": "Safety stock and reorder point",
          "answers": "How much buffer stock gives this cycle-service level, and at what stock level should the next order be placed?",
          "example": {
            "avgDailyDemand": 40,
            "sdDailyDemand": 12,
            "leadTimeDays": 9,
            "serviceLevel": 0.95
          },
          "reference": "Silver, Pyke & Thomas (2017) ch. 6: safety stock for a cycle-service level, normal demand, constant lead time; ASCM CPIM",
          "signature": {
            "input": {
              "avgDailyDemand": {
                "type": "number",
                "describe": "Mean demand per day",
                "min": 0
              },
              "sdDailyDemand": {
                "type": "number",
                "describe": "Standard deviation of daily demand",
                "min": 0
              },
              "leadTimeDays": {
                "type": "number",
                "describe": "Replenishment lead time in days",
                "min": 0.01
              },
              "serviceLevel": {
                "type": "number",
                "describe": "Cycle-service level (no stock-out in a cycle), 0.5–0.999",
                "min": 0.5,
                "max": 0.999
              }
            },
            "output": {
              "z": {
                "type": "number",
                "describe": "Safety factor Φ⁻¹(service level)"
              },
              "safetyStock": {
                "type": "number",
                "describe": "z·σ·√L"
              },
              "reorderPoint": {
                "type": "number",
                "describe": "d·L + safety stock"
              }
            }
          }
        },
        {
          "id": "oee",
          "name": "Overall equipment effectiveness",
          "answers": "How much of the planned production time was truly productive, and which factor lost the most?",
          "example": {
            "plannedMinutes": 480,
            "downtimeMinutes": 47,
            "idealCycleMinutes": 0.8,
            "totalCount": 500,
            "goodCount": 485
          },
          "reference": "Nakajima (1988) Introduction to TPM: OEE = availability × performance × quality",
          "signature": {
            "input": {
              "plannedMinutes": {
                "type": "number",
                "describe": "Planned production time",
                "min": 0.01
              },
              "downtimeMinutes": {
                "type": "number",
                "describe": "Stop time within the plan",
                "min": 0
              },
              "idealCycleMinutes": {
                "type": "number",
                "describe": "Ideal time per unit",
                "min": 0.0001
              },
              "totalCount": {
                "type": "number",
                "describe": "Units produced",
                "min": 1
              },
              "goodCount": {
                "type": "number",
                "describe": "Units right first time",
                "min": 0
              }
            },
            "output": {
              "availability": {
                "type": "number",
                "describe": "Run time ÷ planned time"
              },
              "performance": {
                "type": "number",
                "describe": "Ideal cycle × total ÷ run time"
              },
              "quality": {
                "type": "number",
                "describe": "Good ÷ total"
              },
              "oee": {
                "type": "number",
                "describe": "A × P × Q"
              },
              "largestLoss": {
                "type": "string",
                "describe": "availability, performance or quality"
              }
            }
          }
        },
        {
          "id": "newsvendor",
          "name": "Newsvendor order quantity",
          "answers": "For a single season with uncertain demand, how many should be ordered to balance the cost of too few against too many?",
          "example": {
            "unitCost": 6,
            "price": 15,
            "salvageValue": 2,
            "meanDemand": 500,
            "sdDemand": 120
          },
          "reference": "Arrow, Harris & Marschak (1951); Silver, Pyke & Thomas (2017): the newsvendor model with normal demand",
          "signature": {
            "input": {
              "unitCost": {
                "type": "number",
                "describe": "Cost per unit bought",
                "min": 0
              },
              "price": {
                "type": "number",
                "describe": "Selling price per unit",
                "min": 0
              },
              "salvageValue": {
                "type": "number",
                "describe": "Value of a unit left over",
                "min": 0
              },
              "meanDemand": {
                "type": "number",
                "describe": "Mean season demand",
                "min": 0
              },
              "sdDemand": {
                "type": "number",
                "describe": "Standard deviation of season demand",
                "min": 0
              }
            },
            "output": {
              "criticalRatio": {
                "type": "number",
                "describe": "Cu ÷ (Cu + Co)"
              },
              "z": {
                "type": "number",
                "describe": "Φ⁻¹(critical ratio)"
              },
              "orderQuantity": {
                "type": "number",
                "describe": "μ + z·σ"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:mm-organisation--people",
      "code": "CDU-BUS-ORG-900",
      "level": "MM",
      "name": "MM Organisation & People",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the SHRM/CIPD frameworks; no prior institution is claimed"
        }
      ],
      "researchProject": "People measures a board can trust: turnover, pay position, the cost of a hire and lawful hours",
      "description": "The people measures a manager is held to: the crude labour-turnover rate and the stability index, the compa-ratio and range penetration of a salary, the cost per hire as the ANSI/SHRM standard defines it, and overtime pay and hours limits under the Basic Conditions of Employment Act.",
      "syllabus": [
        "Workforce flows: leavers, average headcount, turnover and stability (CIPD)",
        "Reward: pay ranges, midpoints, compa-ratio and range penetration",
        "Talent acquisition: external and internal costs, cost per hire (ANSI/SHRM 06001.2012)",
        "Employment law: ordinary hours, overtime limits and overtime pay (BCEA ss9–10)"
      ],
      "reference": {
        "Crude turnover": "leavers ÷ average headcount × 100",
        "Stability index": "employees with ≥ 1 year’s service now ÷ headcount a year ago × 100",
        "Compa-ratio": "salary ÷ range midpoint; range penetration = (salary − min) ÷ (max − min)",
        "Cost per hire": "(external costs + internal costs) ÷ total hires",
        "BCEA overtime": "ordinary hours ≤ 45 a week (s9); overtime ≤ 10 hours a week, paid at 1.5 × the wage (s10)"
      },
      "role": "You are an HR director advising an executive committee. State the measure and its definition, show the numbers, and say what action the number calls for and what it cannot tell you about people.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MM",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "SHRM Body of Applied Skills and Knowledge (BASK)",
          "CIPD Profession Map; CIPD factsheet on employee turnover and retention (crude turnover rate, stability index)",
          "ANSI/SHRM 06001.2012 Cost-Per-Hire American National Standard",
          "Basic Conditions of Employment Act 75 of 1997 (South Africa), ss9–10"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-ORG-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "turnover_stability",
            "compa_ratio",
            "cost_per_hire",
            "bcea_overtime"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-ORG-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-ORG-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "People measures a board can trust: turnover, pay position, the cost of a hire and lawful hours"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "turnover_stability",
          "name": "Labour turnover and stability index",
          "answers": "What share of the workforce left this year, and how stable is the core that stayed?",
          "example": {
            "leavers": 42,
            "headcountStart": 350,
            "headcountEnd": 370,
            "employeesWithOneYearService": 318
          },
          "reference": "CIPD employee turnover and retention: crude turnover rate and the stability index",
          "signature": {
            "input": {
              "leavers": {
                "type": "number",
                "describe": "Leavers in the year",
                "min": 0
              },
              "headcountStart": {
                "type": "number",
                "describe": "Headcount a year ago",
                "min": 1
              },
              "headcountEnd": {
                "type": "number",
                "describe": "Headcount now",
                "min": 0
              },
              "employeesWithOneYearService": {
                "type": "number",
                "describe": "Employees now with a year’s service or more",
                "min": 0
              }
            },
            "output": {
              "averageHeadcount": {
                "type": "number",
                "describe": "(start + end) ÷ 2"
              },
              "turnoverRate": {
                "type": "number",
                "describe": "Crude turnover, %"
              },
              "stabilityIndex": {
                "type": "number",
                "describe": "Stability, %"
              }
            }
          }
        },
        {
          "id": "compa_ratio",
          "name": "Compa-ratio and range penetration",
          "answers": "Where does this salary sit against the midpoint and within the range of its grade?",
          "example": {
            "salary": 540000,
            "rangeMin": 450000,
            "rangeMax": 650000
          },
          "reference": "WorldatWork compensation practice: compa-ratio = pay ÷ range midpoint; range penetration = (pay − minimum) ÷ (maximum − minimum)",
          "signature": {
            "input": {
              "salary": {
                "type": "number",
                "describe": "Annual base salary",
                "min": 0
              },
              "rangeMin": {
                "type": "number",
                "describe": "Grade minimum",
                "min": 0
              },
              "rangeMax": {
                "type": "number",
                "describe": "Grade maximum",
                "min": 0
              }
            },
            "output": {
              "midpoint": {
                "type": "number",
                "describe": "(min + max) ÷ 2"
              },
              "compaRatio": {
                "type": "number",
                "describe": "Salary ÷ midpoint"
              },
              "rangePenetration": {
                "type": "number",
                "describe": "(Salary − min) ÷ (max − min)"
              },
              "position": {
                "type": "string",
                "describe": "below range, in range or above range"
              }
            }
          }
        },
        {
          "id": "cost_per_hire",
          "name": "Cost per hire",
          "answers": "What did each hire cost, counting external and internal recruiting costs as the standard defines them?",
          "example": {
            "externalCosts": 380000,
            "internalCosts": 220000,
            "totalHires": 24
          },
          "reference": "ANSI/SHRM 06001.2012 Cost-Per-Hire: CPH = (Σ external costs + Σ internal costs) ÷ total hires in the period",
          "signature": {
            "input": {
              "externalCosts": {
                "type": "number",
                "describe": "Advertising, agency, assessment, travel, relocation…",
                "min": 0
              },
              "internalCosts": {
                "type": "number",
                "describe": "Recruiter pay, hiring-manager time, systems…",
                "min": 0
              },
              "totalHires": {
                "type": "number",
                "describe": "Hires in the same period",
                "min": 1
              }
            },
            "output": {
              "costPerHire": {
                "type": "number",
                "describe": "(External + internal) ÷ hires"
              },
              "externalShare": {
                "type": "number",
                "describe": "External ÷ total cost"
              }
            }
          }
        },
        {
          "id": "bcea_overtime",
          "name": "Ordinary hours, overtime limit and overtime pay",
          "answers": "Are this week’s hours within the statutory limits, and what overtime pay is due?",
          "example": {
            "hourlyWage": 85,
            "ordinaryHours": 45,
            "overtimeHours": 8
          },
          "reference": "Basic Conditions of Employment Act 75 of 1997 s9(1)(a) (45 ordinary hours a week), s10(1) (overtime only by agreement, at most 10 hours a week), s10(2) (at least one and one-half times the wage)",
          "signature": {
            "input": {
              "hourlyWage": {
                "type": "number",
                "describe": "Ordinary hourly wage",
                "min": 0
              },
              "ordinaryHours": {
                "type": "number",
                "describe": "Ordinary hours worked in the week",
                "min": 0,
                "max": 168
              },
              "overtimeHours": {
                "type": "number",
                "describe": "Overtime hours worked in the week",
                "min": 0,
                "max": 168
              }
            },
            "output": {
              "overtimePay": {
                "type": "number",
                "describe": "Overtime hours × 1.5 × wage"
              },
              "withinOrdinaryLimit": {
                "type": "boolean",
                "describe": "Ordinary hours ≤ 45"
              },
              "withinOvertimeLimit": {
                "type": "boolean",
                "describe": "Overtime ≤ 10 hours"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-software--cybersecurity",
      "code": "CDU-ICT-SEC-900",
      "level": "MSc",
      "name": "MSc Software & Cybersecurity",
      "faculty": "Faculty of Information and Communication Technology",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, CSEC2017 and the FIRST/NIST standards; no prior institution is claimed"
        }
      ],
      "researchProject": "Quantifying exposure: severity, secret strength, expected loss and collision risk as engineering numbers",
      "description": "The numbers a security engineer is asked for: the CVSS v3.1 base score and severity of a vulnerability, the entropy and exhaustive-search time of a memorised secret, annualised loss expectancy and the return on a security control, and the probability of a collision among n hashes of b bits.",
      "syllabus": [
        "Vulnerability management: CVSS v3.1 base metrics, scope, the Roundup rule, severity bands",
        "Authentication: keyspace, entropy, offline guessing rates, length minimums (NIST SP 800-63B)",
        "Risk: single loss expectancy, annualised rate of occurrence, ALE, ROSI (NIST SP 800-30 Rev. 1)",
        "Cryptography: the birthday bound, collision resistance of b/2 bits (NIST SP 800-107 Rev. 1)"
      ],
      "reference": {
        "CVSS v3.1 base": "ISS = 1 − (1−C)(1−I)(1−A); impact 6.42·ISS (unchanged) or 7.52·(ISS−0.029) − 3.25·(ISS−0.02)^15 (changed); exploitability 8.22·AV·AC·PR·UI",
        "CVSS severity": "0 none; 0.1–3.9 low; 4.0–6.9 medium; 7.0–8.9 high; 9.0–10.0 critical",
        "Entropy": "length × log2(alphabet size) for a uniformly random secret",
        "ALE": "SLE × ARO, SLE = asset value × exposure factor; ROSI = (ALE before − ALE after − cost) ÷ cost",
        "Birthday bound": "P(collision) ≈ 1 − exp(−n(n−1) ÷ 2^(b+1)); 50% at ≈ 1.1774·2^(b/2)"
      },
      "role": "You are a security engineer briefing an engineering lead. State the standard and the assumption, show the computation, and say what should be patched, configured or funded first.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "061"
        ],
        "standards": [
          "Joint Task Force on Cybersecurity Education (2017) Cybersecurity Curricula 2017 (CSEC2017), ACM/IEEE CS/AIS SIGSEC/IFIP WG 11.8",
          "FIRST Common Vulnerability Scoring System v3.1: Specification Document",
          "NIST SP 800-63B Digital Identity Guidelines: Authentication and Lifecycle Management; NIST SP 800-30 Rev. 1 Guide for Conducting Risk Assessments",
          "NIST SP 800-107 Rev. 1 Recommendation for Applications Using Approved Hash Algorithms"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ICT-SEC-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "cvss31_base",
            "password_keyspace",
            "ale_rosi",
            "birthday_collision"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ICT-SEC-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ICT-SEC-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Quantifying exposure: severity, secret strength, expected loss and collision risk as engineering numbers"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "cvss31_base",
          "name": "CVSS v3.1 base score",
          "answers": "What base score and severity does this vulnerability’s CVSS v3.1 vector give?",
          "example": {
            "AV": "N",
            "AC": "L",
            "PR": "N",
            "UI": "N",
            "S": "U",
            "C": "H",
            "I": "H",
            "A": "H"
          },
          "reference": "FIRST CVSS v3.1 Specification §7 (base equations) and Appendix A (Roundup); severity rating scale §5",
          "signature": {
            "input": {
              "AV": {
                "type": "string",
                "describe": "Attack vector",
                "oneOf": [
                  "N",
                  "A",
                  "L",
                  "P"
                ]
              },
              "AC": {
                "type": "string",
                "describe": "Attack complexity",
                "oneOf": [
                  "L",
                  "H"
                ]
              },
              "PR": {
                "type": "string",
                "describe": "Privileges required",
                "oneOf": [
                  "N",
                  "L",
                  "H"
                ]
              },
              "UI": {
                "type": "string",
                "describe": "User interaction",
                "oneOf": [
                  "N",
                  "R"
                ]
              },
              "S": {
                "type": "string",
                "describe": "Scope",
                "oneOf": [
                  "U",
                  "C"
                ]
              },
              "C": {
                "type": "string",
                "describe": "Confidentiality impact",
                "oneOf": [
                  "H",
                  "L",
                  "N"
                ]
              },
              "I": {
                "type": "string",
                "describe": "Integrity impact",
                "oneOf": [
                  "H",
                  "L",
                  "N"
                ]
              },
              "A": {
                "type": "string",
                "describe": "Availability impact",
                "oneOf": [
                  "H",
                  "L",
                  "N"
                ]
              }
            },
            "output": {
              "vector": {
                "type": "string",
                "describe": "The CVSS:3.1 vector string"
              },
              "baseScore": {
                "type": "number",
                "describe": "0.0–10.0"
              },
              "severity": {
                "type": "string",
                "describe": "None, Low, Medium, High or Critical"
              }
            }
          }
        },
        {
          "id": "password_keyspace",
          "name": "Secret entropy and exhaustive-search time",
          "answers": "How many bits of entropy does a random secret of this length and alphabet have, and how long would an offline attacker need to exhaust it?",
          "example": {
            "length": 12,
            "alphabetSize": 62,
            "guessesPerSecond": 10000000000,
            "minimumLength": 8
          },
          "reference": "NIST SP 800-63B (Rev. 3) §5.1.1 memorised secrets, minimum length 8 (check the revision in force); entropy of a uniformly random string = L·log2(N)",
          "signature": {
            "input": {
              "length": {
                "type": "number",
                "describe": "Characters in the secret",
                "min": 1,
                "max": 256
              },
              "alphabetSize": {
                "type": "number",
                "describe": "Characters the secret is drawn from (62 = a–z A–Z 0–9)",
                "min": 2,
                "max": 100000
              },
              "guessesPerSecond": {
                "type": "number",
                "describe": "Attacker’s offline guessing rate",
                "min": 1
              },
              "minimumLength": {
                "type": "number",
                "describe": "Length minimum the policy applies",
                "min": 1,
                "max": 256,
                "default": 8
              }
            },
            "output": {
              "entropyBits": {
                "type": "number",
                "describe": "L·log2(N)"
              },
              "log10Keyspace": {
                "type": "number",
                "describe": "log10(N^L)"
              },
              "log10YearsToExhaust": {
                "type": "number",
                "describe": "log10 of the years to try every secret"
              },
              "meetsMinimumLength": {
                "type": "boolean",
                "describe": "Length ≥ the minimum"
              }
            }
          }
        },
        {
          "id": "ale_rosi",
          "name": "Annualised loss expectancy and return on security investment",
          "answers": "What loss does this threat cost a year, before and after the control, and does the control pay for itself?",
          "example": {
            "assetValue": 2000000,
            "exposureFactor": 0.35,
            "annualRateBefore": 0.5,
            "annualRateAfter": 0.1,
            "annualControlCost": 90000
          },
          "reference": "NIST SP 800-30 Rev. 1 (likelihood × impact); ISC² CISSP CBK quantitative risk analysis (SLE, ARO, ALE); Sonnenreich, Albanese & Stout (2006) ROSI",
          "signature": {
            "input": {
              "assetValue": {
                "type": "number",
                "describe": "Value of the asset at risk",
                "min": 0
              },
              "exposureFactor": {
                "type": "number",
                "describe": "Fraction of value lost per incident, 0–1",
                "min": 0,
                "max": 1
              },
              "annualRateBefore": {
                "type": "number",
                "describe": "Incidents per year without the control",
                "min": 0
              },
              "annualRateAfter": {
                "type": "number",
                "describe": "Incidents per year with the control",
                "min": 0
              },
              "annualControlCost": {
                "type": "number",
                "describe": "Annual cost of the control",
                "min": 0.01
              }
            },
            "output": {
              "singleLossExpectancy": {
                "type": "number",
                "describe": "Asset value × exposure factor"
              },
              "aleBefore": {
                "type": "number",
                "describe": "SLE × ARO before"
              },
              "aleAfter": {
                "type": "number",
                "describe": "SLE × ARO after"
              },
              "rosi": {
                "type": "number",
                "describe": "(ALE before − ALE after − cost) ÷ cost"
              }
            }
          }
        },
        {
          "id": "birthday_collision",
          "name": "Birthday-bound collision probability",
          "answers": "Among this many hashed items, how likely is at least one collision, and at what count does it reach 50%?",
          "example": {
            "hashBits": 64,
            "items": 1000000000
          },
          "reference": "The birthday bound; NIST SP 800-107 Rev. 1 §4.1 — collision resistance of an L-bit hash is at most L/2 bits",
          "signature": {
            "input": {
              "hashBits": {
                "type": "number",
                "describe": "Output length in bits",
                "min": 8,
                "max": 1024
              },
              "items": {
                "type": "number",
                "describe": "Number of values hashed",
                "min": 2
              }
            },
            "output": {
              "collisionProbability": {
                "type": "number",
                "describe": "1 − exp(−n(n−1) ÷ 2^(b+1))"
              },
              "itemsFor50Percent": {
                "type": "number",
                "describe": "√(2·ln 2·2^b)"
              },
              "securityBits": {
                "type": "number",
                "describe": "b ÷ 2"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:murb-planning--property",
      "code": "CDU-ENG-URB-900",
      "level": "MSc",
      "name": "MUrb Planning & Property",
      "faculty": "Faculty of Engineering and the Built Environment",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, the SACPLAN competencies and the RICS standards; no prior institution is claimed"
        }
      ],
      "researchProject": "What a site can carry and what it is worth: zoning yield, residual value, capitalised income and housing need",
      "description": "The calculations that join planning to property: the permissible floor area, footprint, storeys and unit yield of a site under its floor-area ratio and coverage; the residual land value of a development (RICS); the capital value of an income property by direct capitalisation; and the dwelling demand implied by a projected population and household size.",
      "syllabus": [
        "Land-use controls: floor-area ratio (bulk), coverage, height, efficiency and unit yield (SPLUMA land use schemes)",
        "Development appraisal: gross development value, costs, finance, developer’s profit, the residual (RICS)",
        "Income valuation: effective gross income, net operating income, capitalisation rate",
        "Planning for growth: geometric population projection, household size, dwelling demand"
      ],
      "reference": {
        "Gross floor area": "site area × floor-area ratio",
        "Residual land value": "GDV − sales costs − build − fees − contingency − finance − developer’s profit",
        "Finance (simplified)": "(build + fees + contingency) × rate × years × ½ (costs drawn evenly)",
        "Direct capitalisation": "value = NOI ÷ capitalisation rate; NOI = gross × (1 − vacancy) − operating expenses",
        "Population projection": "P_t = P_0 × (1 + r)^t; households = P_t ÷ persons per household"
      },
      "role": "You are a town planner and registered valuer advising a municipality or a developer. State the control or the valuation basis, show the arithmetic, and say which assumption moves the answer most.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MUrb",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "073",
          "031"
        ],
        "standards": [
          "South African Council for Planners (SACPLAN) competencies for planners; Spatial Planning and Land Use Management Act 16 of 2013 (land use schemes)",
          "RICS Valuation – Global Standards (Red Book); RICS professional standard, Valuation of development property (2019) — the residual method",
          "Appraisal Institute, The Appraisal of Real Estate — direct capitalisation"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-ENG-URB-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "bulk_yield",
            "residual_land_value",
            "direct_capitalisation",
            "household_projection"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-ENG-URB-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-ENG-URB-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "What a site can carry and what it is worth: zoning yield, residual value, capitalised income and housing need"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "bulk_yield",
          "name": "Development yield under zoning controls",
          "answers": "How much floor area, how many storeys and how many units can this site carry under its floor-area ratio and coverage?",
          "example": {
            "siteArea": 4000,
            "floorAreaRatio": 2.5,
            "coverage": 0.6,
            "efficiency": 0.85,
            "averageUnitSize": 65
          },
          "reference": "Land use scheme controls under SPLUMA 16 of 2013: floor-area ratio (bulk) and coverage; storeys = GFA ÷ footprint (rounded up); net lettable = GFA × efficiency",
          "signature": {
            "input": {
              "siteArea": {
                "type": "number",
                "describe": "Site area, m²",
                "min": 1
              },
              "floorAreaRatio": {
                "type": "number",
                "describe": "Permitted floor-area ratio (bulk factor)",
                "min": 0.01,
                "max": 50
              },
              "coverage": {
                "type": "number",
                "describe": "Permitted coverage, 0–1",
                "min": 0.01,
                "max": 1
              },
              "efficiency": {
                "type": "number",
                "describe": "Net-to-gross efficiency, 0–1",
                "min": 0.1,
                "max": 1,
                "default": 0.85
              },
              "averageUnitSize": {
                "type": "number",
                "describe": "Average net unit size, m²",
                "min": 1
              }
            },
            "output": {
              "grossFloorArea": {
                "type": "number",
                "describe": "m²"
              },
              "maxFootprint": {
                "type": "number",
                "describe": "m²"
              },
              "storeys": {
                "type": "number",
                "describe": "Storeys needed to use the bulk"
              },
              "netArea": {
                "type": "number",
                "describe": "m²"
              },
              "units": {
                "type": "number",
                "describe": "Whole units that fit"
              }
            }
          }
        },
        {
          "id": "residual_land_value",
          "name": "Residual land value",
          "answers": "After every cost and the developer’s profit, what can the developer afford to pay for the land?",
          "example": {
            "gdv": 60000000,
            "buildCost": 32000000,
            "feesRate": 0.12,
            "contingencyRate": 0.05,
            "financeRate": 0.11,
            "constructionYears": 2,
            "profitRate": 0.2,
            "salesCostRate": 0.03
          },
          "reference": "RICS professional standard, Valuation of development property (2019): the residual method; finance on half the cost base over the build (even draw-down), land finance and acquisition costs excluded",
          "signature": {
            "input": {
              "gdv": {
                "type": "number",
                "describe": "Gross development value",
                "min": 0
              },
              "buildCost": {
                "type": "number",
                "describe": "Construction cost",
                "min": 0
              },
              "feesRate": {
                "type": "number",
                "describe": "Professional fees as a fraction of build",
                "min": 0,
                "max": 1
              },
              "contingencyRate": {
                "type": "number",
                "describe": "Contingency as a fraction of build",
                "min": 0,
                "max": 1
              },
              "financeRate": {
                "type": "number",
                "describe": "Annual finance rate",
                "min": 0,
                "max": 1
              },
              "constructionYears": {
                "type": "number",
                "describe": "Build period in years",
                "min": 0,
                "max": 20
              },
              "profitRate": {
                "type": "number",
                "describe": "Developer’s profit as a fraction of GDV",
                "min": 0,
                "max": 1
              },
              "salesCostRate": {
                "type": "number",
                "describe": "Agency and legal costs of sale as a fraction of GDV",
                "min": 0,
                "max": 1
              }
            },
            "output": {
              "costBase": {
                "type": "number",
                "describe": "Build + fees + contingency"
              },
              "financeCost": {
                "type": "number",
                "describe": "Cost base × rate × years × ½"
              },
              "developerProfit": {
                "type": "number",
                "describe": "GDV × profit rate"
              },
              "residualLandValue": {
                "type": "number",
                "describe": "What is left for the land (negative: unviable)"
              }
            }
          }
        },
        {
          "id": "direct_capitalisation",
          "name": "Capital value by direct capitalisation",
          "answers": "What is this income-producing property worth at the market capitalisation rate?",
          "example": {
            "grossIncome": 4800000,
            "vacancyRate": 0.08,
            "operatingExpenses": 1150000,
            "capRate": 0.095
          },
          "reference": "RICS Valuation – Global Standards (Red Book); Appraisal Institute, The Appraisal of Real Estate — direct capitalisation of net operating income",
          "signature": {
            "input": {
              "grossIncome": {
                "type": "number",
                "describe": "Potential gross income per year",
                "min": 0
              },
              "vacancyRate": {
                "type": "number",
                "describe": "Vacancy and collection loss, 0–1",
                "min": 0,
                "max": 1
              },
              "operatingExpenses": {
                "type": "number",
                "describe": "Non-recoverable operating expenses per year",
                "min": 0
              },
              "capRate": {
                "type": "number",
                "describe": "Market capitalisation rate",
                "min": 0.001,
                "max": 1
              }
            },
            "output": {
              "effectiveGrossIncome": {
                "type": "number",
                "describe": "Gross × (1 − vacancy)"
              },
              "netOperatingIncome": {
                "type": "number",
                "describe": "EGI − expenses"
              },
              "capitalValue": {
                "type": "number",
                "describe": "NOI ÷ cap rate"
              }
            }
          }
        },
        {
          "id": "household_projection",
          "name": "Population projection and dwelling demand",
          "answers": "How many people and households will the area hold in t years, and how many more dwellings does that need?",
          "example": {
            "basePopulation": 250000,
            "annualGrowthRate": 0.021,
            "years": 10,
            "personsPerHousehold": 3.4,
            "existingDwellings": 68000
          },
          "reference": "Geometric (compound) population projection; the persons-per-household method of converting population to households",
          "signature": {
            "input": {
              "basePopulation": {
                "type": "number",
                "describe": "Population now",
                "min": 0
              },
              "annualGrowthRate": {
                "type": "number",
                "describe": "Annual growth rate (negative for decline)",
                "min": -0.2,
                "max": 0.2
              },
              "years": {
                "type": "number",
                "describe": "Projection horizon",
                "min": 0,
                "max": 100
              },
              "personsPerHousehold": {
                "type": "number",
                "describe": "Average household size",
                "min": 1,
                "max": 20
              },
              "existingDwellings": {
                "type": "number",
                "describe": "Dwellings now",
                "min": 0
              }
            },
            "output": {
              "projectedPopulation": {
                "type": "number",
                "describe": "P0 × (1 + r)^t"
              },
              "projectedHouseholds": {
                "type": "number",
                "describe": "Population ÷ household size"
              },
              "additionalDwellings": {
                "type": "number",
                "describe": "Households − existing dwellings (negative: surplus)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-programme--change",
      "code": "CDU-BUS-PCM-900",
      "level": "MSc",
      "name": "MSc Programme & Change",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and the PMI/AXELOS standards; no prior institution is claimed"
        }
      ],
      "researchProject": "Knowing where a programme stands: earned value, schedule risk, risk reserves and the price of time",
      "description": "The control numbers of a programme: earned-value variances, indices and estimates at completion; three-point PERT estimates and the probability of meeting a deadline along a path; the expected monetary value of a risk register and the reserve it implies; and the cost slope of crashing an activity.",
      "syllabus": [
        "Cost and schedule control: PV, EV, AC, CV, SV, CPI, SPI, EAC, ETC, VAC, TCPI (PMI EVM Standard)",
        "Estimating: three-point (beta/PERT) estimates, path variance, probability of completion",
        "Risk: probability and impact, expected monetary value, threats and opportunities, contingency reserve",
        "Schedule compression: crashing, the cost slope, crashing the cheapest critical activity first"
      ],
      "reference": {
        "Earned value": "CV = EV − AC; SV = EV − PV; CPI = EV ÷ AC; SPI = EV ÷ PV; EAC = BAC ÷ CPI; TCPI = (BAC − EV) ÷ (BAC − AC)",
        "PERT": "te = (o + 4m + p) ÷ 6; σ = (p − o) ÷ 6; P(T ≤ D) = Φ((D − Σte) ÷ √Σσ²)",
        "EMV": "Σ probability × impact (threats negative, opportunities positive)",
        "Crash cost slope": "(crash cost − normal cost) ÷ (normal time − crash time)"
      },
      "role": "You are a programme director reporting to the programme board. Say where the programme stands against plan, show the numbers, and name the decision the board must take now.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [
          "Project Management Institute, A Guide to the Project Management Body of Knowledge (PMBOK® Guide)",
          "Project Management Institute (2019) The Standard for Earned Value Management",
          "AXELOS, Managing Successful Programmes (MSP®)",
          "Malcolm, D. G., Roseboom, J. H., Clark, C. E. & Fazar, W. (1959) Application of a technique for R&D program evaluation, Operations Research 7(5) — PERT"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-BUS-PCM-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "earned_value",
            "pert_estimate",
            "risk_emv",
            "crash_cost_slope"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-BUS-PCM-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-BUS-PCM-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "Knowing where a programme stands: earned value, schedule risk, risk reserves and the price of time"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "earned_value",
          "name": "Earned-value performance and forecast",
          "answers": "Is the work over or under budget and ahead or behind schedule, and what will it cost at completion at this efficiency?",
          "example": {
            "bac": 1000000,
            "plannedValue": 400000,
            "earnedValue": 350000,
            "actualCost": 420000
          },
          "reference": "PMI (2019) The Standard for Earned Value Management; PMBOK® Guide — cost control, EAC = BAC/CPI (typical variance)",
          "signature": {
            "input": {
              "bac": {
                "type": "number",
                "describe": "Budget at completion",
                "min": 0.01
              },
              "plannedValue": {
                "type": "number",
                "describe": "Planned value to date",
                "min": 0.01
              },
              "earnedValue": {
                "type": "number",
                "describe": "Earned value to date",
                "min": 0
              },
              "actualCost": {
                "type": "number",
                "describe": "Actual cost to date",
                "min": 0.01
              }
            },
            "output": {
              "costVariance": {
                "type": "number",
                "describe": "EV − AC"
              },
              "scheduleVariance": {
                "type": "number",
                "describe": "EV − PV"
              },
              "cpi": {
                "type": "number",
                "describe": "EV ÷ AC"
              },
              "spi": {
                "type": "number",
                "describe": "EV ÷ PV"
              },
              "eac": {
                "type": "number",
                "describe": "BAC ÷ CPI"
              },
              "etc": {
                "type": "number",
                "describe": "EAC − AC"
              },
              "vac": {
                "type": "number",
                "describe": "BAC − EAC"
              },
              "tcpi": {
                "type": "number",
                "describe": "(BAC − EV) ÷ (BAC − AC); null once AC ≥ BAC"
              }
            }
          }
        },
        {
          "id": "pert_estimate",
          "name": "PERT path estimate and deadline probability",
          "answers": "What is the expected duration of this path, its uncertainty, and the chance of finishing by the deadline?",
          "example": {
            "optimistic": [
              4,
              6,
              3
            ],
            "mostLikely": [
              6,
              8,
              5
            ],
            "pessimistic": [
              10,
              14,
              9
            ],
            "deadline": 22
          },
          "reference": "Malcolm et al. (1959) PERT: beta-approximated three-point estimates; PMBOK® Guide three-point estimating; normal approximation for the path (central limit theorem)",
          "signature": {
            "input": {
              "optimistic": {
                "type": "number[]",
                "describe": "Optimistic duration of each activity on the path"
              },
              "mostLikely": {
                "type": "number[]",
                "describe": "Most likely durations"
              },
              "pessimistic": {
                "type": "number[]",
                "describe": "Pessimistic durations"
              },
              "deadline": {
                "type": "number",
                "describe": "Target duration for the path",
                "min": 0
              }
            },
            "output": {
              "expectedDurations": {
                "type": "number[]",
                "describe": "te per activity (4 dp)"
              },
              "pathExpected": {
                "type": "number",
                "describe": "Σ te"
              },
              "pathSd": {
                "type": "number",
                "describe": "√Σσ²"
              },
              "probabilityByDeadline": {
                "type": "number",
                "describe": "Φ((deadline − Σte) ÷ σ)"
              }
            }
          }
        },
        {
          "id": "risk_emv",
          "name": "Expected monetary value of a risk register",
          "answers": "What is the probability-weighted exposure of these risks, threats and opportunities separately, and net?",
          "example": {
            "probabilities": [
              0.3,
              0.1,
              0.5,
              0.2
            ],
            "impacts": [
              -50000,
              -200000,
              -20000,
              30000
            ]
          },
          "reference": "PMBOK® Guide — quantitative risk analysis: expected monetary value; threats negative, opportunities positive",
          "signature": {
            "input": {
              "probabilities": {
                "type": "number[]",
                "describe": "Probability of each risk, 0–1"
              },
              "impacts": {
                "type": "number[]",
                "describe": "Monetary impact of each (negative = threat, positive = opportunity)"
              }
            },
            "output": {
              "emvs": {
                "type": "number[]",
                "describe": "Probability × impact per risk (2 dp)"
              },
              "threatEmv": {
                "type": "number",
                "describe": "Σ EMV of threats"
              },
              "opportunityEmv": {
                "type": "number",
                "describe": "Σ EMV of opportunities"
              },
              "netEmv": {
                "type": "number",
                "describe": "Σ EMV"
              }
            }
          }
        },
        {
          "id": "crash_cost_slope",
          "name": "Crash cost slope",
          "answers": "What does each day saved on this activity cost, and what would saving this many days cost?",
          "example": {
            "normalTime": 20,
            "crashTime": 14,
            "normalCost": 50000,
            "crashCost": 68000,
            "daysToSave": 4
          },
          "reference": "PMBOK® Guide — schedule compression by crashing; cost slope = (crash cost − normal cost) ÷ (normal time − crash time), linear",
          "signature": {
            "input": {
              "normalTime": {
                "type": "number",
                "describe": "Normal duration",
                "min": 0.01
              },
              "crashTime": {
                "type": "number",
                "describe": "Shortest possible duration",
                "min": 0
              },
              "normalCost": {
                "type": "number",
                "describe": "Cost at normal duration",
                "min": 0
              },
              "crashCost": {
                "type": "number",
                "describe": "Cost at crash duration",
                "min": 0
              },
              "daysToSave": {
                "type": "number",
                "describe": "Days the schedule needs back",
                "min": 0
              }
            },
            "output": {
              "costSlope": {
                "type": "number",
                "describe": "Cost per day saved"
              },
              "maxDaysSaved": {
                "type": "number",
                "describe": "Normal − crash time"
              },
              "costToSave": {
                "type": "number",
                "describe": "Slope × days (capped at the maximum)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:msc-agribusiness--water",
      "code": "CDU-AGR-AGW-900",
      "level": "MSc",
      "name": "MSc Agribusiness & Water",
      "faculty": "Faculty of Agriculture and Environmental Sciences",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief and FAO Irrigation and Drainage Papers 24, 56 and 66; no prior institution is claimed"
        }
      ],
      "researchProject": "The value of a cubic metre: reference evapotranspiration, irrigation need, water productivity and the farm gross margin",
      "description": "Crop water and the money it makes: daily reference evapotranspiration by FAO-56 Penman–Monteith, the net and gross irrigation requirement of a crop over a period, the physical and economic productivity of the water applied, and the gross margin, break-even yield and break-even price of an enterprise.",
      "syllabus": [
        "Reference evapotranspiration: radiation, temperature, humidity, wind, the psychrometric constant (FAO-56 ch. 2–4)",
        "Crop water requirement: Kc, effective rainfall, application efficiency (FAO-56 ch. 6; FAO-24)",
        "Water productivity: kg per m³, revenue and margin per m³ (FAO-66)",
        "Enterprise budgets: revenue, variable costs, gross margin, break-even yield and price"
      ],
      "reference": {
        "FAO-56 ET0": "[0.408·Δ·(Rn − G) + γ·(900 ÷ (T + 273))·u2·(es − ea)] ÷ [Δ + γ·(1 + 0.34·u2)] (eq. 6)",
        "Vapour pressure": "e°(T) = 0.6108·exp(17.27T ÷ (T + 237.3)); ea = [e°(Tmin)·RHmax + e°(Tmax)·RHmin] ÷ 200 (eq. 17)",
        "Psychrometric constant": "γ = 0.665 × 10⁻³ × P; P = 101.3·((293 − 0.0065z) ÷ 293)^5.26",
        "Irrigation requirement": "ETc = Kc·ET0; net = ETc − effective rain; gross = net ÷ efficiency; 1 mm on 1 ha = 10 m³",
        "Gross margin": "yield × price − variable costs"
      },
      "role": "You are an agricultural water engineer and agribusiness adviser speaking to a grower. Weather, soil and water first; then the calculation; then the next affordable decision about water and the crop.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "MSc",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a)",
        "totalCredits": 180,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "081",
          "052"
        ],
        "standards": [
          "Allen, R. G., Pereira, L. S., Raes, D. & Smith, M. (1998) Crop evapotranspiration — Guidelines for computing crop water requirements, FAO Irrigation and Drainage Paper 56",
          "Doorenbos, J. & Pruitt, W. O. (1977) Crop water requirements, FAO Irrigation and Drainage Paper 24 — application efficiency",
          "Steduto, P., Hsiao, T. C., Fereres, E. & Raes, D. (2012) Crop yield response to water, FAO Irrigation and Drainage Paper 66 — water productivity"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-AGR-AGW-900-901",
          "title": "Coursework — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "answer every unit of the qualification against its published reference, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "et0_penman_monteith",
            "irrigation_requirement",
            "water_productivity",
            "gross_margin"
          ],
          "notionalHours": 600
        },
        {
          "code": "CDU-AGR-AGW-900-902",
          "title": "Research report",
          "nqfLevel": 9,
          "credits": 120,
          "prerequisites": [
            "CDU-AGR-AGW-900-901"
          ],
          "coRequisites": [],
          "outcomes": [
            "The value of a cubic metre: reference evapotranspiration, irrigation need, water productivity and the farm gross margin"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report, assessed against the qualification’s published reference block",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "et0_penman_monteith",
          "name": "Reference evapotranspiration (FAO-56 Penman–Monteith)",
          "answers": "How much water does the reference grass surface lose on this day, in mm?",
          "example": {
            "tMax": 21.5,
            "tMin": 12.3,
            "rhMax": 84,
            "rhMin": 63,
            "windSpeed2m": 2.078,
            "netRadiation": 13.28,
            "soilHeatFlux": 0,
            "altitude": 100
          },
          "reference": "Allen et al. (1998) FAO-56 eq. 6 (daily ET0), eq. 7–8 (P, γ), eq. 11–13 (es, Δ), eq. 17 (ea from RHmax and RHmin); worked Example 18 (Brussels, 6 July) gives 3.9 mm/day",
          "signature": {
            "input": {
              "tMax": {
                "type": "number",
                "describe": "Maximum air temperature, °C",
                "min": -40,
                "max": 60
              },
              "tMin": {
                "type": "number",
                "describe": "Minimum air temperature, °C",
                "min": -50,
                "max": 50
              },
              "rhMax": {
                "type": "number",
                "describe": "Maximum relative humidity, %",
                "min": 1,
                "max": 100
              },
              "rhMin": {
                "type": "number",
                "describe": "Minimum relative humidity, %",
                "min": 1,
                "max": 100
              },
              "windSpeed2m": {
                "type": "number",
                "describe": "Wind speed at 2 m, m/s",
                "min": 0,
                "max": 30
              },
              "netRadiation": {
                "type": "number",
                "describe": "Net radiation Rn, MJ/m²/day",
                "min": -10,
                "max": 40
              },
              "soilHeatFlux": {
                "type": "number",
                "describe": "Soil heat flux G, MJ/m²/day (≈ 0 for a day)",
                "min": -10,
                "max": 10,
                "default": 0
              },
              "altitude": {
                "type": "number",
                "describe": "Elevation above sea level, m",
                "min": -500,
                "max": 6000
              }
            },
            "output": {
              "et0": {
                "type": "number",
                "describe": "Reference evapotranspiration, mm/day"
              },
              "vapourPressureDeficit": {
                "type": "number",
                "describe": "es − ea, kPa"
              },
              "slope": {
                "type": "number",
                "describe": "Δ, kPa/°C"
              },
              "psychrometricConstant": {
                "type": "number",
                "describe": "γ, kPa/°C"
              }
            }
          }
        },
        {
          "id": "irrigation_requirement",
          "name": "Net and gross irrigation requirement",
          "answers": "Over this period, how much water does the crop need from irrigation, at the field and at the source?",
          "example": {
            "et0": 5.2,
            "cropCoefficient": 1.15,
            "days": 30,
            "effectiveRainfall": 40,
            "applicationEfficiency": 0.75
          },
          "reference": "FAO-56 ch. 6 (single crop coefficient: ETc = Kc·ET0); FAO-24 (application efficiency); 1 mm over 1 ha = 10 m³",
          "signature": {
            "input": {
              "et0": {
                "type": "number",
                "describe": "Mean reference ET over the period, mm/day",
                "min": 0,
                "max": 20
              },
              "cropCoefficient": {
                "type": "number",
                "describe": "Kc for the growth stage",
                "min": 0.05,
                "max": 2
              },
              "days": {
                "type": "number",
                "describe": "Days in the period",
                "min": 1,
                "max": 366
              },
              "effectiveRainfall": {
                "type": "number",
                "describe": "Effective rainfall over the period, mm",
                "min": 0
              },
              "applicationEfficiency": {
                "type": "number",
                "describe": "Irrigation application efficiency, 0–1",
                "min": 0.1,
                "max": 1
              }
            },
            "output": {
              "cropEt": {
                "type": "number",
                "describe": "ETc over the period, mm"
              },
              "netRequirement": {
                "type": "number",
                "describe": "ETc − effective rain (not below 0), mm"
              },
              "grossRequirement": {
                "type": "number",
                "describe": "Net ÷ efficiency, mm"
              },
              "volumePerHectare": {
                "type": "number",
                "describe": "Gross × 10, m³/ha"
              }
            }
          }
        },
        {
          "id": "water_productivity",
          "name": "Physical and economic water productivity",
          "answers": "How much crop, revenue and margin does each cubic metre of water produce?",
          "example": {
            "yieldKgPerHa": 9000,
            "waterM3PerHa": 6000,
            "pricePerKg": 3.2,
            "variableCostPerHa": 18000
          },
          "reference": "FAO-66 (Steduto et al. 2012): crop water productivity in kg per m³ of water consumed; economic productivity as value per m³",
          "signature": {
            "input": {
              "yieldKgPerHa": {
                "type": "number",
                "describe": "Marketable yield, kg/ha",
                "min": 0
              },
              "waterM3PerHa": {
                "type": "number",
                "describe": "Water applied and effective rain, m³/ha",
                "min": 0.01
              },
              "pricePerKg": {
                "type": "number",
                "describe": "Farm-gate price per kg",
                "min": 0
              },
              "variableCostPerHa": {
                "type": "number",
                "describe": "Variable costs per ha",
                "min": 0
              }
            },
            "output": {
              "kgPerM3": {
                "type": "number",
                "describe": "Yield ÷ water"
              },
              "revenuePerM3": {
                "type": "number",
                "describe": "Revenue ÷ water"
              },
              "grossMarginPerM3": {
                "type": "number",
                "describe": "(Revenue − variable costs) ÷ water"
              }
            }
          }
        },
        {
          "id": "gross_margin",
          "name": "Enterprise gross margin and break-evens",
          "answers": "What gross margin does this enterprise earn, and at what yield or price does it only just cover its variable costs?",
          "example": {
            "yieldPerHa": 6.5,
            "pricePerUnit": 4200,
            "variableCostPerHa": 19500,
            "hectares": 120
          },
          "reference": "Farm-management enterprise budgeting (gross margin = output value − variable costs); Kay, Edwards & Duffy, Farm Management",
          "signature": {
            "input": {
              "yieldPerHa": {
                "type": "number",
                "describe": "Yield per hectare (t or units)",
                "min": 0.0001
              },
              "pricePerUnit": {
                "type": "number",
                "describe": "Price per unit of yield",
                "min": 0.0001
              },
              "variableCostPerHa": {
                "type": "number",
                "describe": "Variable costs per hectare",
                "min": 0
              },
              "hectares": {
                "type": "number",
                "describe": "Area planted",
                "min": 0
              }
            },
            "output": {
              "revenuePerHa": {
                "type": "number",
                "describe": "Yield × price"
              },
              "grossMarginPerHa": {
                "type": "number",
                "describe": "Revenue − variable costs"
              },
              "totalGrossMargin": {
                "type": "number",
                "describe": "Per-ha margin × hectares"
              },
              "breakevenYield": {
                "type": "number",
                "describe": "Variable costs ÷ price"
              },
              "breakevenPrice": {
                "type": "number",
                "describe": "Variable costs ÷ yield"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:ethics--conduct-module",
      "code": "CDU-GEN-ETH-900",
      "level": "MSc",
      "name": "Ethics & Conduct Module",
      "faculty": "Faculty of General Studies",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the brief, the IESBA Code and King IV; no prior institution is claimed"
        }
      ],
      "researchProject": "Where conduct has a bright line: fees, tenure, non-audit services and board composition",
      "description": "The parts of professional ethics and governance that are bright lines rather than judgement calls: the fee-dependency thresholds of the IESBA Code, key-audit-partner rotation and cooling-off, the EU 70% cap on non-audit fees, and the King IV composition of a governing body.",
      "syllabus": [
        "The conceptual framework: identify, evaluate and address threats; where the Code sets a bright line (IESBA Part 1, Section 120)",
        "Independence and fees: fee dependency on a client, disclosure, review and withdrawal (Section 410)",
        "Long association: time-on, cooling-off by role (Section 540); non-audit-fee caps (EU 537/2014 Art. 4(2))",
        "Governance: non-executive majority, independence, executive presence on the board (King IV Principle 7)"
      ],
      "reference": {
        "Fee dependency (PIE)": "fees from the client > 15% of the firm’s total fees for two consecutive years: disclose to those charged with governance and arrange a pre-issuance review; for five consecutive years: cease to be auditor (IESBA s410)",
        "Fee dependency (non-PIE)": "> 30% for five consecutive years: disclose and arrange a review (IESBA s410)",
        "Key audit partner (PIE)": "time-on 7 years; cooling-off: engagement partner 5, EQR 3, other KAP 2 (IESBA s540)",
        "EU non-audit fee cap": "non-audit fees ≤ 70% of the average audit fee of the last three consecutive years (Art. 4(2))",
        "King IV Principle 7": "a majority of non-executive members, most of them independent; at least the CEO and the finance executive on the board"
      },
      "role": "You are an ethics partner advising a firm or a board. Name the provision, apply the bright line to the facts, and separate what the Code requires from the judgement that remains with the professional.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "Module",
        "nqfLevel": 9,
        "qualificationType": "Master's Degree (HEQSF qualification type 9a) — a cross-faculty module of the master's offering, not a standalone award",
        "totalCredits": 60,
        "minCreditsAtExitLevel": 60,
        "iscedFields": [
          "001"
        ],
        "standards": [
          "IESBA (2023) Handbook of the International Code of Ethics for Professional Accountants, including International Independence Standards — Section 410 (fees, revised provisions effective for periods beginning on or after 15 December 2022) and Section 540 (long association, PIE audit clients)",
          "Regulation (EU) No 537/2014 on specific requirements regarding statutory audit of public-interest entities, Art. 4(2)",
          "Institute of Directors in Southern Africa (2016) King IV Report on Corporate Governance for South Africa — Principle 7"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "CDU-GEN-ETH-900-901",
          "title": "Ethics and conduct — the executable units",
          "nqfLevel": 9,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the conduct rules of the house to a consultation, with the working shown"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "every unit passed once through the seeded assessment (the seeded assessment room)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "fee_dependency",
            "partner_rotation",
            "non_audit_fee_cap",
            "board_independence"
          ],
          "notionalHours": 600
        }
      ],
      "units": [
        {
          "id": "fee_dependency",
          "name": "Fee dependency on an audit client",
          "answers": "Given the share of the firm’s fees this client has paid each year, what does the IESBA Code require?",
          "example": {
            "publicInterestEntity": true,
            "feeShares": [
              0.12,
              0.16,
              0.17
            ]
          },
          "reference": "IESBA Code Section 410 (revised fee-related provisions, effective for periods beginning on or after 15 December 2022): PIE 15% for two / five consecutive years; non-PIE 30% for five consecutive years",
          "signature": {
            "input": {
              "publicInterestEntity": {
                "type": "boolean",
                "describe": "Is the audit client a public interest entity?"
              },
              "feeShares": {
                "type": "number[]",
                "describe": "Fees from the client ÷ the firm’s total fees, one per year, oldest first"
              }
            },
            "output": {
              "threshold": {
                "type": "number",
                "describe": "0.15 (PIE) or 0.30 (non-PIE)"
              },
              "consecutiveYearsAbove": {
                "type": "number",
                "describe": "Years in a row, ending with the latest, above the threshold"
              },
              "action": {
                "type": "string",
                "describe": "none, disclose-and-pre-issuance-review, cease-after-fifth-year, or disclose-and-review"
              }
            }
          }
        },
        {
          "id": "partner_rotation",
          "name": "Key audit partner rotation and cooling-off",
          "answers": "For this role on a PIE audit, must the partner rotate off now, and for how long must they stay off?",
          "example": {
            "role": "engagement_partner",
            "yearsServed": 6
          },
          "reference": "IESBA Code Section 540 (PIE audit clients): R540.5 time-on of 7 years; cooling-off R540.11 (engagement partner 5), R540.12 (EQR 3), R540.14 (other key audit partner 2)",
          "signature": {
            "input": {
              "role": {
                "type": "string",
                "describe": "Role on the engagement",
                "oneOf": [
                  "engagement_partner",
                  "eqr",
                  "other_kap"
                ]
              },
              "yearsServed": {
                "type": "number",
                "describe": "Cumulative years served as a key audit partner",
                "min": 0,
                "max": 50
              }
            },
            "output": {
              "mustRotate": {
                "type": "boolean",
                "describe": "Years served ≥ 7"
              },
              "yearsRemaining": {
                "type": "number",
                "describe": "Years left before the time-on limit"
              },
              "coolingOffYears": {
                "type": "number",
                "describe": "Consecutive years off once rotated"
              }
            }
          }
        },
        {
          "id": "non_audit_fee_cap",
          "name": "EU cap on non-audit fees",
          "answers": "Do this year’s non-audit fees stay within 70% of the average audit fee of the last three years?",
          "example": {
            "auditFeesLastThreeYears": [
              1200000,
              1250000,
              1300000
            ],
            "nonAuditFeesThisYear": 700000
          },
          "reference": "Regulation (EU) No 537/2014 Art. 4(2): where non-audit services are provided for three or more consecutive years, their fees are limited to 70% of the average audit fee of the last three consecutive years",
          "signature": {
            "input": {
              "auditFeesLastThreeYears": {
                "type": "number[]",
                "describe": "Statutory audit fees of the last three consecutive years"
              },
              "nonAuditFeesThisYear": {
                "type": "number",
                "describe": "Fees for permitted non-audit services this year",
                "min": 0
              }
            },
            "output": {
              "averageAuditFee": {
                "type": "number",
                "describe": "Mean of the three years"
              },
              "cap": {
                "type": "number",
                "describe": "70% of the average"
              },
              "headroom": {
                "type": "number",
                "describe": "Cap − non-audit fees (negative: over the cap)"
              },
              "breach": {
                "type": "boolean",
                "describe": "Non-audit fees above the cap"
              }
            }
          }
        },
        {
          "id": "board_independence",
          "name": "Governing-body composition (King IV Principle 7)",
          "answers": "Does the board have a non-executive majority, mostly independent, with at least two executives?",
          "example": {
            "totalMembers": 12,
            "nonExecutiveMembers": 9,
            "independentNonExecutives": 6
          },
          "reference": "King IV Report (2016) Principle 7, recommended practices: a majority of non-executive members, most of whom should be independent; the CEO and the executive responsible for finance as members",
          "signature": {
            "input": {
              "totalMembers": {
                "type": "number",
                "describe": "Members of the governing body",
                "min": 1
              },
              "nonExecutiveMembers": {
                "type": "number",
                "describe": "Non-executive members",
                "min": 0
              },
              "independentNonExecutives": {
                "type": "number",
                "describe": "Independent non-executive members",
                "min": 0
              }
            },
            "output": {
              "nonExecutiveMajority": {
                "type": "boolean",
                "describe": "Non-executives > half the board"
              },
              "independentMajorityOfNeds": {
                "type": "boolean",
                "describe": "Independents > half the non-executives"
              },
              "atLeastTwoExecutives": {
                "type": "boolean",
                "describe": "Executives ≥ 2"
              },
              "compliant": {
                "type": "boolean",
                "describe": "All three"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:matric-nqf4",
      "code": "CDU-GEN-NSC-400",
      "level": "NSC",
      "name": "Senior Certificate (Amended) — exam-readiness programme (NQF 4 matric)",
      "faculty": "Faculty of General Studies",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored from the offline coursework base (an unofficial working reconstruction of CAPS and the Umalusi qualification); a readiness mapping — the DBE administers the examination and Umalusi certifies it, never the house"
        }
      ],
      "researchProject": "Matriculate Again in 24 Hours — exam readiness across the complete Umalusi subject catalogue, proven against deterministic reference engines",
      "description": "The complete matric subject catalogue on one row: the eleven official languages at three levels, Mathematics and Physical Sciences at full CAPS Grade 12 depth with independently recomputed worked solutions, and every other Umalusi subject with its own deterministic worked-reference unit. The house proves exam readiness; it does not register candidates, mark scripts that count, or issue the Senior Certificate — those are the roles of the examining authorities.",
      "syllabus": [
        "Languages: the eleven official languages at Home / First Additional / Second Additional level",
        "Mathematics (flawless focus): algebra and equations; patterns, sequences and series; functions and graphs; calculus; probability; finance; analytical geometry; trigonometry; Euclidean geometry and measurement; statistics",
        "Physical Sciences (flawless focus): mechanics; waves, sound and light; electricity and magnetism; matter and materials; chemical change; chemical systems",
        "The full elective catalogue: Mathematical Literacy, Life Orientation, Life Sciences, Agricultural Sciences, Accounting, Business Studies, Economics, Geography, History, Religion Studies, Tourism, Consumer Studies, Hospitality Studies, the technology subjects, the arts subjects and the named additional electives",
        "The qualification rules: the 7-subject package and the adult second-chance route, the working assessment splits, the pass rules and the designated-subject list — all working reconstructions with verify-before-claim items"
      ],
      "reference": {
        "Quadratic formula": "x = (−b ± √(b² − 4ac)) / (2a), a ≠ 0; Δ = b² − 4ac",
        "Sequences": "Tₙ = a + (n − 1)d; Sₙ = n/2 [2a + (n − 1)d]; Tₙ = arⁿ⁻¹; S∞ = a/(1 − r), |r| < 1",
        "Calculus": "f′(x) = limₕ→₀ [f(x+h) − f(x)]/h; d/dx axⁿ = naxⁿ⁻¹",
        "Trigonometry": "sin(A ± B) = sinA cosB ± cosA sinB; sine, cosine and area rules",
        "Mechanics": "F_net = ma; f = μN; F_net Δt = Δp; W_net = ΔKE; g = 9,8 m·s⁻²",
        "Waves and light": "v = fλ; f_L = v/(v ∓ v_s)·f_s; n₁ sinθ₁ = n₂ sinθ₂; E = hf = hc/λ",
        "Chemistry": "pV = nRT; c = n/V; pH = −log[H⁺]; Kc from equilibrium concentrations; E°cell = E°cathode − E°anode",
        "Assessment split (working)": "25% school-based assessment, 75% examination; Life Orientation 100% school-based; the adult route has no school-based component — working reconstruction, each a verify item",
        "What this row never claims": "registration, accreditation, an examination centre, or the issuing of a Senior Certificate — readiness only"
      },
      "role": "You are a patient matric tutor working one unit at a time. State the formula, substitute every number, carry the units, and end with the check a learner can redo by hand. You never claim the house registers candidates or issues certificates; readiness is the product.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "Senior Certificate (Amended) — exam readiness",
        "nqfLevel": 4,
        "qualificationType": "Senior Certificate (Amended) — school-sector qualification; the house offers an exam-readiness mapping only",
        "totalCredits": 120,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "001"
        ],
        "standards": [
          "CAPS (Curriculum and Assessment Policy Statements), Grades 10–12 — cited from the offline working reconstruction, not an official text",
          "The NSC and Senior Certificate (Amended) qualification structure — working reconstruction; SAQA identifiers deliberately not typed (verify-before-claim)",
          "Umalusi quality-assurance and certification cycle — working reconstruction; the house holds no accreditation from it"
        ],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "NSC4-LAN-AFRI-HL",
          "title": "Afrikaans Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Afrikaans at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-AFRI-FAL",
          "title": "Afrikaans First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Afrikaans at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-AFRI-SAL",
          "title": "Afrikaans Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Afrikaans at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ENGL-HL",
          "title": "English Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend English at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ENGL-FAL",
          "title": "English First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend English at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ENGL-SAL",
          "title": "English Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend English at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIN-HL",
          "title": "isiNdebele Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiNdebele at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIN-FAL",
          "title": "isiNdebele First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiNdebele at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIN-SAL",
          "title": "isiNdebele Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiNdebele at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIX-HL",
          "title": "isiXhosa Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiXhosa at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIX-FAL",
          "title": "isiXhosa First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiXhosa at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIX-SAL",
          "title": "isiXhosa Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiXhosa at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIZ-HL",
          "title": "isiZulu Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiZulu at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIZ-FAL",
          "title": "isiZulu First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiZulu at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-ISIZ-SAL",
          "title": "isiZulu Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend isiZulu at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SEPE-HL",
          "title": "Sepedi Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sepedi at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SEPE-FAL",
          "title": "Sepedi First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sepedi at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SEPE-SAL",
          "title": "Sepedi Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sepedi at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SESO-HL",
          "title": "Sesotho Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sesotho at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SESO-FAL",
          "title": "Sesotho First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sesotho at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SESO-SAL",
          "title": "Sesotho Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Sesotho at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SETS-HL",
          "title": "Setswana Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Setswana at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SETS-FAL",
          "title": "Setswana First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Setswana at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SETS-SAL",
          "title": "Setswana Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Setswana at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SISW-HL",
          "title": "siSwati Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend siSwati at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SISW-FAL",
          "title": "siSwati First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend siSwati at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-SISW-SAL",
          "title": "siSwati Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend siSwati at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-TSHI-HL",
          "title": "Tshivenda Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Tshivenda at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-TSHI-FAL",
          "title": "Tshivenda First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Tshivenda at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-TSHI-SAL",
          "title": "Tshivenda Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Tshivenda at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-XITS-HL",
          "title": "Xitsonga Home Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Xitsonga at Home Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-XITS-FAL",
          "title": "Xitsonga First Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Xitsonga at First Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LAN-XITS-SAL",
          "title": "Xitsonga Second Additional Language",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, write and comprehend Xitsonga at Second Additional Language level (CAPS working set)",
            "compute the weighted final mark from component marks; measure a fixed passage deterministically"
          ],
          "assessment": {
            "formative": [
              "component marks aggregated under the working 25/75 split (oral inside SBA)"
            ],
            "summative": "the deterministic worked-reference units — the weighted final mark and the fixed-text statistic; orals and essays are marked by people, never by a model",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lang_final_mark",
            "lang_reading_statistic"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-MATH",
          "title": "Mathematics",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Mathematics working set (offline reconstruction)",
            "the flawless focus — full CAPS topic families; not taken together with Mathematical Literacy"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "maths_quadratic_factorise",
            "maths_quadratic_formula",
            "maths_nature_of_roots",
            "maths_simultaneous",
            "maths_arithmetic_sequence",
            "maths_geometric_sequence",
            "maths_geometric_infinite",
            "maths_sigma_sum",
            "maths_parabola",
            "maths_inverse_linear",
            "maths_exponential_log",
            "maths_first_principles",
            "maths_cubic_stationary",
            "maths_optimisation",
            "maths_compound_angle",
            "maths_trig_general_solution",
            "maths_circle_tangent",
            "maths_probability_table",
            "maths_probability_draws",
            "maths_compound_interest",
            "maths_statistics",
            "maths_regression_line"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-MLIT",
          "title": "Mathematical Literacy",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Mathematical Literacy working set (offline reconstruction)",
            "not taken together with Mathematics"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "mathlit_tariff",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LIFO",
          "title": "Life Orientation",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Life Orientation working set (offline reconstruction)",
            "school-based assessment only, no external paper (working reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "school-based assessment only — no external paper (working reconstruction; a verify item of the coursework base)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lo_sba_total"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-PSCI",
          "title": "Physical Sciences",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Physical Sciences working set (offline reconstruction)",
            "the flawless focus — full CAPS topic families"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "sci_newton_second_law",
            "sci_inclined_plane",
            "sci_impulse",
            "sci_work_energy",
            "sci_projectile",
            "sci_doppler",
            "sci_snell",
            "sci_coulomb",
            "sci_internal_resistance",
            "sci_faraday",
            "sci_ideal_gas",
            "sci_stoichiometry",
            "sci_concentration",
            "sci_ph",
            "sci_equilibrium_kc",
            "sci_cell_potential",
            "sci_photon_energy",
            "sci_practical_data"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-LSCI",
          "title": "Life Sciences",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Life Sciences working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "lifesci_punnett",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-AGRI",
          "title": "Agricultural Sciences",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Agricultural Sciences working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "agrisci_npk",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-ACCT",
          "title": "Accounting",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Accounting working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acc_depreciation",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-BSTU",
          "title": "Business Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Business Studies working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "bus_breakeven",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-ECON",
          "title": "Economics",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Economics working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_inflation",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-GEOG",
          "title": "Geography",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Geography working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "geo_map_scale",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-HIST",
          "title": "History",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 History working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "hist_timeline",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-RELS",
          "title": "Religion Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Religion Studies working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "rel_text_compare",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-TOUR",
          "title": "Tourism",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Tourism working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "tour_currency",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-CONS",
          "title": "Consumer Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Consumer Studies working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "cons_unit_price",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-HOSP",
          "title": "Hospitality Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Hospitality Studies working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "hosp_portion_cost",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-CAT",
          "title": "Computer Applications Technology",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Computer Applications Technology working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "cat_filesize",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-IT",
          "title": "Information Technology",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Information Technology working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "it_binary",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-EGD",
          "title": "Engineering Graphics and Design",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Engineering Graphics and Design working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "egd_scale",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-CIVT",
          "title": "Civil Technology",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Civil Technology working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "civtech_load",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-MECT",
          "title": "Mechanical Technology",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Mechanical Technology working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "mechtech_gear",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-ELET",
          "title": "Electrical Technology",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Electrical Technology working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "electech_resistance",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-VART",
          "title": "Visual Arts",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Visual Arts working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "art_colour_mix",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-MUSC",
          "title": "Music",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Music working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "music_interval",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-DRAM",
          "title": "Drama",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Drama working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "drama_cue",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-DANC",
          "title": "Dance Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Dance Studies working set (offline reconstruction)"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "dance_tempo",
            "lang_final_mark"
          ],
          "notionalHours": 200
        },
        {
          "code": "NSC4-BIBL",
          "title": "Biblical Studies",
          "nqfLevel": 4,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "master the CAPS Grade 12 Biblical Studies working set (offline reconstruction)",
            "named in the Additional row of the coursework base §4"
          ],
          "assessment": {
            "formative": [
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the deterministic worked-reference unit(s), each its own marker; the external examination belongs to the DBE and Umalusi, never to the house",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "rel_text_compare",
            "lang_final_mark"
          ],
          "notionalHours": 200
        }
      ],
      "units": [
        {
          "id": "maths_quadratic_factorise",
          "name": "Quadratic equation by factorising",
          "answers": "The roots of ax² + bx + c = 0 by factorisation, with the discriminant, the sum and the product of the roots checked.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M1 (offline reconstruction); quadratic formula and nature of roots",
          "example": {
            "a": 1,
            "b": -5,
            "c": 6
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x² (a ≠ 0)",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant term",
                "min": -10000,
                "max": 10000
              }
            },
            "output": {
              "rootA": {
                "type": "number",
                "describe": "the smaller root"
              },
              "rootB": {
                "type": "number",
                "describe": "the larger root"
              },
              "discriminant": {
                "type": "number",
                "describe": "Δ = b² − 4ac"
              },
              "sumOfRoots": {
                "type": "number",
                "describe": "−b/a"
              },
              "productOfRoots": {
                "type": "number",
                "describe": "c/a"
              }
            }
          }
        },
        {
          "id": "maths_quadratic_formula",
          "name": "Quadratic equation by the formula",
          "answers": "The roots of ax² + bx + c = 0 by x = (−b ± √Δ)/(2a), every substitution shown.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M2 (offline reconstruction); x = (−b ± √(b² − 4ac)) / (2a), a ≠ 0",
          "example": {
            "a": 2,
            "b": 3,
            "c": -2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x² (a ≠ 0)",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant term",
                "min": -10000,
                "max": 10000
              }
            },
            "output": {
              "rootA": {
                "type": "number",
                "describe": "the smaller root"
              },
              "rootB": {
                "type": "number",
                "describe": "the larger root"
              },
              "discriminant": {
                "type": "number",
                "describe": "Δ = b² − 4ac"
              }
            }
          }
        },
        {
          "id": "maths_nature_of_roots",
          "name": "Nature of the roots",
          "answers": "Whether ax² + bx + c = 0 has two distinct real, equal real, or non-real roots, from the discriminant alone.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M3 (offline reconstruction); Δ > 0 distinct real, Δ = 0 equal real, Δ < 0 non-real",
          "example": {
            "a": 1,
            "b": 2,
            "c": 5
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x² (a ≠ 0)",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant term",
                "min": -10000,
                "max": 10000
              }
            },
            "output": {
              "discriminant": {
                "type": "number",
                "describe": "Δ = b² − 4ac"
              },
              "nature": {
                "type": "string",
                "describe": "two distinct real roots | equal real roots | non-real (complex) roots"
              }
            }
          }
        },
        {
          "id": "maths_simultaneous",
          "name": "Simultaneous linear/quadratic system",
          "answers": "Where the line y = mx + k meets the parabola y = x² + px + q — equate, solve, substitute back.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M4 (offline reconstruction); equate the two expressions for y and solve the quadratic",
          "example": {
            "p": -3,
            "q": 2,
            "m": 2,
            "k": -4
          },
          "signature": {
            "input": {
              "p": {
                "type": "number",
                "describe": "parabola coefficient of x",
                "min": -100,
                "max": 100
              },
              "q": {
                "type": "number",
                "describe": "parabola constant",
                "min": -1000,
                "max": 1000
              },
              "m": {
                "type": "number",
                "describe": "line gradient",
                "min": -100,
                "max": 100
              },
              "k": {
                "type": "number",
                "describe": "line intercept",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "x1": {
                "type": "number",
                "describe": "smaller x of intersection"
              },
              "y1": {
                "type": "number",
                "describe": "its y"
              },
              "x2": {
                "type": "number",
                "describe": "larger x of intersection"
              },
              "y2": {
                "type": "number",
                "describe": "its y"
              }
            }
          }
        },
        {
          "id": "maths_arithmetic_sequence",
          "name": "Arithmetic sequence and series",
          "answers": "Tₙ = a + (n − 1)d and Sₙ = n/2 [2a + (n − 1)d], with the Sₙ = n/2 (a + l) cross-check.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M5 (offline reconstruction); Tₙ = a + (n − 1)d; Sₙ = n/2 [2a + (n − 1)d]",
          "example": {
            "a": 4,
            "d": 3,
            "n": 20
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "first term",
                "min": -10000,
                "max": 10000
              },
              "d": {
                "type": "number",
                "describe": "common difference",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "term number (positive integer)",
                "max": 100000
              }
            },
            "output": {
              "tn": {
                "type": "number",
                "describe": "the nth term"
              },
              "sn": {
                "type": "number",
                "describe": "the sum of the first n terms"
              }
            }
          }
        },
        {
          "id": "maths_geometric_sequence",
          "name": "Geometric sequence and series",
          "answers": "Tₙ = arⁿ⁻¹ and Sₙ = a(rⁿ − 1)/(r − 1), refusing r = 1 where the formula is undefined.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M6 (offline reconstruction); Tₙ = arⁿ⁻¹; Sₙ = a(rⁿ − 1)/(r − 1), r ≠ 1",
          "example": {
            "a": 2,
            "r": 3,
            "n": 5
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "first term",
                "min": -10000,
                "max": 10000
              },
              "r": {
                "type": "number",
                "describe": "common ratio (r ≠ 1 for the Sₙ formula)",
                "min": -100,
                "max": 100
              },
              "n": {
                "type": "number",
                "describe": "term number (positive integer)",
                "max": 60
              }
            },
            "output": {
              "tn": {
                "type": "number",
                "describe": "the nth term"
              },
              "sn": {
                "type": "number",
                "describe": "the sum of the first n terms"
              }
            }
          }
        },
        {
          "id": "maths_geometric_infinite",
          "name": "Infinite geometric series",
          "answers": "S∞ = a/(1 − r) for |r| < 1; a ratio at or beyond 1 in magnitude is refused because the sum does not converge.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M6 (offline reconstruction); S∞ = a/(1 − r), only for |r| < 1",
          "example": {
            "a": 8,
            "r": 0.5
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "first term",
                "min": -10000,
                "max": 10000
              },
              "r": {
                "type": "number",
                "describe": "common ratio, |r| < 1",
                "min": -100,
                "max": 100
              }
            },
            "output": {
              "sInfinity": {
                "type": "number",
                "describe": "the infinite sum"
              }
            }
          }
        },
        {
          "id": "maths_sigma_sum",
          "name": "Sigma notation",
          "answers": "Σₖ₌₁ⁿ (pk + q) evaluated with Σk = n(n + 1)/2 and Σ1 = n.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M7 (offline reconstruction); Σₖ₌₁ⁿ k = n(n+1)/2",
          "example": {
            "p": 2,
            "q": 1,
            "n": 10
          },
          "signature": {
            "input": {
              "p": {
                "type": "number",
                "describe": "coefficient of k",
                "min": -1000,
                "max": 1000
              },
              "q": {
                "type": "number",
                "describe": "constant term",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "upper limit (positive integer)",
                "max": 1000000
              }
            },
            "output": {
              "sum": {
                "type": "number",
                "describe": "the value of the sum"
              }
            }
          }
        },
        {
          "id": "maths_parabola",
          "name": "The parabola",
          "answers": "Turning point, axis of symmetry, intercepts and range of f(x) = ax² + bx + c.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M8 (offline reconstruction); turning point at x = −b/(2a)",
          "example": {
            "a": 1,
            "b": -4,
            "c": 3
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x² (a ≠ 0)",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant term",
                "min": -10000,
                "max": 10000
              }
            },
            "output": {
              "tpX": {
                "type": "number",
                "describe": "x of the turning point"
              },
              "tpY": {
                "type": "number",
                "describe": "y of the turning point"
              },
              "xIntercept1": {
                "type": "number",
                "describe": "smaller x-intercept"
              },
              "xIntercept2": {
                "type": "number",
                "describe": "larger x-intercept"
              },
              "yIntercept": {
                "type": "number",
                "describe": "f(0)"
              },
              "range": {
                "type": "string",
                "describe": "the range, e.g. y ≥ −1"
              }
            }
          }
        },
        {
          "id": "maths_inverse_linear",
          "name": "Inverse of a linear function",
          "answers": "g⁻¹ of g(x) = ax + b, the round trip g⁻¹(g(x)) = x, and the composition f(g(x)) with a given parabola.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M8 (offline reconstruction); y = ax + b ⇒ g⁻¹(x) = (x − b)/a, a ≠ 0",
          "example": {
            "a": 2,
            "b": 1,
            "x": 2,
            "pa": 1,
            "pb": -4,
            "pc": 3
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "gradient of g (a ≠ 0)",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "intercept of g",
                "min": -1000,
                "max": 1000
              },
              "x": {
                "type": "number",
                "describe": "where to evaluate",
                "min": -1000,
                "max": 1000
              },
              "pa": {
                "type": "number",
                "describe": "parabola a for the composition",
                "min": -100,
                "max": 100,
                "default": 1
              },
              "pb": {
                "type": "number",
                "describe": "parabola b",
                "min": -1000,
                "max": 1000,
                "default": -4
              },
              "pc": {
                "type": "number",
                "describe": "parabola c",
                "min": -10000,
                "max": 10000,
                "default": 3
              }
            },
            "output": {
              "gOfX": {
                "type": "number",
                "describe": "g(x)"
              },
              "inverseOfGOfX": {
                "type": "number",
                "describe": "g⁻¹(g(x)) — must be x"
              },
              "fOfGOfX": {
                "type": "number",
                "describe": "f(g(x)) with the given parabola"
              }
            }
          }
        },
        {
          "id": "maths_exponential_log",
          "name": "Exponential and logarithmic equations",
          "answers": "Solve baseˣ = value: x = log_base(value), refusing non-positive arguments and degenerate bases.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M9 (offline reconstruction); logarithm defined only for argument > 0 and base > 0, base ≠ 1",
          "example": {
            "base": 2,
            "value": 16
          },
          "signature": {
            "input": {
              "base": {
                "type": "number",
                "describe": "the base (b > 0, b ≠ 1)",
                "min": -1000,
                "max": 1000
              },
              "value": {
                "type": "number",
                "describe": "the value (v > 0)",
                "min": -1000000,
                "max": 1000000
              }
            },
            "output": {
              "exponent": {
                "type": "number",
                "describe": "x with baseˣ = value"
              }
            }
          }
        },
        {
          "id": "maths_first_principles",
          "name": "Differentiation from first principles",
          "answers": "f′(x) of f(x) = ax² + bx from the limit definition, the derivative at a point, and the tangent's equation there.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M10 (offline reconstruction); f′(x) = limₕ→₀ [f(x+h) − f(x)]/h",
          "example": {
            "a": 1,
            "b": 3,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "x0": {
                "type": "number",
                "describe": "the point of tangency",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              },
              "fAt": {
                "type": "number",
                "describe": "f(x0)"
              },
              "tangentSlope": {
                "type": "number",
                "describe": "gradient of the tangent"
              },
              "tangentIntercept": {
                "type": "number",
                "describe": "c of the tangent y = mx + c"
              }
            }
          }
        },
        {
          "id": "maths_cubic_stationary",
          "name": "Stationary points of a cubic",
          "answers": "The stationary points of f(x) = x³ + bx² + cx + d, classified by the second derivative, with the point of inflection.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M11 (offline reconstruction); f′(x) = 0 at stationary points; f″ classifies them",
          "example": {
            "b": -6,
            "c": 9,
            "d": 1
          },
          "signature": {
            "input": {
              "b": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -10000,
                "max": 10000
              },
              "d": {
                "type": "number",
                "describe": "constant term",
                "min": -100000,
                "max": 100000
              }
            },
            "output": {
              "x1": {
                "type": "number",
                "describe": "first stationary x (smaller)"
              },
              "y1": {
                "type": "number",
                "describe": "f(x1)"
              },
              "type1": {
                "type": "string",
                "describe": "local maximum | local minimum"
              },
              "x2": {
                "type": "number",
                "describe": "second stationary x (larger)"
              },
              "y2": {
                "type": "number",
                "describe": "f(x2)"
              },
              "type2": {
                "type": "string",
                "describe": "local maximum | local minimum"
              },
              "inflectionX": {
                "type": "number",
                "describe": "x of the point of inflection"
              }
            }
          }
        },
        {
          "id": "maths_optimisation",
          "name": "Optimisation — the largest rectangle",
          "answers": "The rectangle of greatest area for a fixed perimeter, by differentiating A(x) = x(P/2 − x).",
          "reference": "CAPS Grade 12 Mathematics, worked reference M12 (offline reconstruction); A′(x) = 0 at the maximum, A″ < 0 confirms it",
          "example": {
            "perimeter": 40
          },
          "signature": {
            "input": {
              "perimeter": {
                "type": "number",
                "describe": "the fixed perimeter (metres)",
                "unit": "m",
                "min": 0.001,
                "max": 1000000
              }
            },
            "output": {
              "sideX": {
                "type": "number",
                "describe": "the optimal width (m)"
              },
              "sideY": {
                "type": "number",
                "describe": "the optimal height (m)"
              },
              "maxArea": {
                "type": "number",
                "describe": "the maximal area (m²)"
              }
            }
          }
        },
        {
          "id": "maths_compound_angle",
          "name": "Compound-angle identity",
          "answers": "sin(A + B) = sinA cosB + cosA sinB, every substitution shown — sin 75° exactly and numerically.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M13 (offline reconstruction); sin(A ± B) = sinA cosB ± cosA sinB",
          "example": {
            "angleA": 45,
            "angleB": 30
          },
          "signature": {
            "input": {
              "angleA": {
                "type": "number",
                "describe": "A in degrees",
                "unit": "°",
                "min": 0,
                "max": 90
              },
              "angleB": {
                "type": "number",
                "describe": "B in degrees",
                "unit": "°",
                "min": 0,
                "max": 90
              }
            },
            "output": {
              "sinAB": {
                "type": "number",
                "describe": "sin(A + B)"
              }
            }
          }
        },
        {
          "id": "maths_trig_general_solution",
          "name": "General solution of a trig equation",
          "answers": "Solve p·sinθ = q on [0° ; 360°] with the general solution, refusing |q/p| > 1 because sine never leaves [−1 ; 1].",
          "reference": "CAPS Grade 12 Mathematics, worked reference M14 (offline reconstruction); sinθ = k ⇒ θ = α + 360°k or 180° − α + 360°k",
          "example": {
            "p": 2,
            "q": 1
          },
          "signature": {
            "input": {
              "p": {
                "type": "number",
                "describe": "coefficient of sinθ (p ≠ 0)",
                "min": -100,
                "max": 100
              },
              "q": {
                "type": "number",
                "describe": "right-hand side",
                "min": -100,
                "max": 100
              }
            },
            "output": {
              "alpha": {
                "type": "number",
                "describe": "the reference angle (°)"
              },
              "solution1": {
                "type": "number",
                "describe": "first solution in [0 ; 360] (°)"
              },
              "solution2": {
                "type": "number",
                "describe": "second solution in [0 ; 360] (°)"
              }
            }
          }
        },
        {
          "id": "maths_circle_tangent",
          "name": "Tangent to a circle",
          "answers": "The tangent to (x − a)² + (y − b)² = r² at a point on the circle: prove the point is on it, radius ⟂ tangent, the line in standard form.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M15 (offline reconstruction); gradient of tangent = −1/(gradient of radius)",
          "example": {
            "a": 2,
            "b": -1,
            "r": 5,
            "px": 5,
            "py": 3
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "centre x",
                "min": -1000,
                "max": 1000
              },
              "b": {
                "type": "number",
                "describe": "centre y",
                "min": -1000,
                "max": 1000
              },
              "r": {
                "type": "number",
                "describe": "radius (r > 0)",
                "min": 0.001,
                "max": 100000
              },
              "px": {
                "type": "number",
                "describe": "point x",
                "min": -100000,
                "max": 100000
              },
              "py": {
                "type": "number",
                "describe": "point y",
                "min": -100000,
                "max": 100000
              }
            },
            "output": {
              "tangentGradient": {
                "type": "number",
                "describe": "gradient of the tangent"
              },
              "lineA": {
                "type": "number",
                "describe": "A of Ax + By + C = 0"
              },
              "lineB": {
                "type": "number",
                "describe": "B of Ax + By + C = 0"
              },
              "lineC": {
                "type": "number",
                "describe": "C of Ax + By + C = 0"
              }
            }
          }
        },
        {
          "id": "maths_probability_table",
          "name": "Probability from a contingency table",
          "answers": "P(A | B) and P(neither) for two subject choices over one class, refusing any probability outside [0 ; 1].",
          "reference": "CAPS Grade 12 Mathematics, worked reference M16 (offline reconstruction); P(A∪B) = P(A) + P(B) − P(A∩B)",
          "example": {
            "total": 100,
            "nA": 60,
            "nB": 40,
            "nBoth": 30
          },
          "signature": {
            "input": {
              "total": {
                "type": "number",
                "describe": "learners in the class",
                "min": 1,
                "max": 1000000
              },
              "nA": {
                "type": "number",
                "describe": "take subject A",
                "min": 0,
                "max": 1000000
              },
              "nB": {
                "type": "number",
                "describe": "take subject B",
                "min": 0,
                "max": 1000000
              },
              "nBoth": {
                "type": "number",
                "describe": "take both",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "pAGivenB": {
                "type": "number",
                "describe": "P(A | B)"
              },
              "pNeither": {
                "type": "number",
                "describe": "P(neither)"
              }
            }
          }
        },
        {
          "id": "maths_probability_draws",
          "name": "Probability without replacement",
          "answers": "P(both red) for two draws without replacement from a mixed set of counters.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M16 (offline reconstruction); dependent events multiply along the branch",
          "example": {
            "red": 5,
            "blue": 3,
            "green": 2
          },
          "signature": {
            "input": {
              "red": {
                "type": "number",
                "describe": "red counters",
                "min": 0,
                "max": 100000
              },
              "blue": {
                "type": "number",
                "describe": "blue counters",
                "min": 0,
                "max": 100000
              },
              "green": {
                "type": "number",
                "describe": "green counters",
                "min": 0,
                "max": 100000
              }
            },
            "output": {
              "pBothRed": {
                "type": "number",
                "describe": "P(first red and second red)"
              }
            }
          }
        },
        {
          "id": "maths_compound_interest",
          "name": "Compound interest",
          "answers": "A = P(1 + i)ⁿ and the interest earned, each substitution shown.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M17 (offline reconstruction); A = P(1 + i)ⁿ, i > −1",
          "example": {
            "principal": 10000,
            "ratePercent": 8,
            "years": 3
          },
          "signature": {
            "input": {
              "principal": {
                "type": "number",
                "describe": "P, the amount invested",
                "min": 0,
                "max": 1000000000
              },
              "ratePercent": {
                "type": "number",
                "describe": "annual rate (percent)",
                "min": -99,
                "max": 1000
              },
              "years": {
                "type": "number",
                "describe": "n, whole years",
                "min": 0,
                "max": 200
              }
            },
            "output": {
              "amount": {
                "type": "number",
                "describe": "A after n years"
              },
              "interestEarned": {
                "type": "number",
                "describe": "A − P"
              }
            }
          }
        },
        {
          "id": "maths_statistics",
          "name": "Descriptive statistics",
          "answers": "Mean, population variance and standard deviation, the five-number summary (inclusive quartiles), IQR and the outlier fences.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M18 (offline reconstruction); σ = √(Σ(x − x̄)²/n); quartiles include the median in each half",
          "example": {
            "data": [
              2,
              4,
              6,
              8,
              10
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the data values"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄"
              },
              "variance": {
                "type": "number",
                "describe": "σ² (population)"
              },
              "standardDeviation": {
                "type": "number",
                "describe": "σ, 4 d.p."
              },
              "min": {
                "type": "number",
                "describe": "minimum"
              },
              "q1": {
                "type": "number",
                "describe": "lower quartile"
              },
              "median": {
                "type": "number",
                "describe": "median"
              },
              "q3": {
                "type": "number",
                "describe": "upper quartile"
              },
              "max": {
                "type": "number",
                "describe": "maximum"
              },
              "iqr": {
                "type": "number",
                "describe": "Q3 − Q1"
              },
              "outliers": {
                "type": "number",
                "describe": "how many values lie outside the 1.5·IQR fences"
              }
            }
          }
        },
        {
          "id": "maths_regression_line",
          "name": "Least-squares regression line",
          "answers": "ŷ = a + bx from r, the standard deviations and the means: b = r·σ_y/σ_x, a = ȳ − b·x̄. A zero σ_x is refused.",
          "reference": "CAPS Grade 12 Mathematics, worked reference M19 (offline reconstruction); r is interpreted, never used as proof of causation",
          "example": {
            "r": 0.8,
            "sigmaX": 2,
            "sigmaY": 3,
            "meanX": 10,
            "meanY": 20
          },
          "signature": {
            "input": {
              "r": {
                "type": "number",
                "describe": "correlation coefficient",
                "min": -1,
                "max": 1
              },
              "sigmaX": {
                "type": "number",
                "describe": "σ_x (must be > 0)",
                "min": 0,
                "max": 1000000
              },
              "sigmaY": {
                "type": "number",
                "describe": "σ_y",
                "min": 0,
                "max": 1000000
              },
              "meanX": {
                "type": "number",
                "describe": "x̄",
                "min": -1000000,
                "max": 1000000
              },
              "meanY": {
                "type": "number",
                "describe": "ȳ",
                "min": -1000000,
                "max": 1000000
              }
            },
            "output": {
              "slope": {
                "type": "number",
                "describe": "b"
              },
              "intercept": {
                "type": "number",
                "describe": "a"
              }
            }
          }
        },
        {
          "id": "sci_newton_second_law",
          "name": "Newton's second law — horizontal motion",
          "answers": "The acceleration of a block under an applied force and kinetic friction: a = F_net/m.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P1 (offline reconstruction); F_net = ma",
          "example": {
            "mass": 5,
            "appliedForce": 20,
            "friction": 5
          },
          "signature": {
            "input": {
              "mass": {
                "type": "number",
                "describe": "mass (kg)",
                "unit": "kg",
                "min": 0.001,
                "max": 100000
              },
              "appliedForce": {
                "type": "number",
                "describe": "applied force (N), positive in the direction of motion",
                "unit": "N",
                "min": 0,
                "max": 1000000
              },
              "friction": {
                "type": "number",
                "describe": "kinetic friction magnitude (N)",
                "unit": "N",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "netForce": {
                "type": "number",
                "describe": "F_net (N)"
              },
              "acceleration": {
                "type": "number",
                "describe": "a (m·s⁻²)"
              }
            }
          }
        },
        {
          "id": "sci_inclined_plane",
          "name": "Inclined plane with friction",
          "answers": "The acceleration of a block sliding down a rough incline: components, the normal, μN, F_net, a — every substitution shown.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P2 (offline reconstruction); f = μN; up the slope is positive for the friction on a sliding block",
          "example": {
            "mass": 10,
            "angleDeg": 30,
            "mu": 0.2
          },
          "signature": {
            "input": {
              "mass": {
                "type": "number",
                "describe": "mass (kg)",
                "unit": "kg",
                "min": 0.001,
                "max": 100000
              },
              "angleDeg": {
                "type": "number",
                "describe": "incline angle (° in [0 ; 90])",
                "unit": "°",
                "min": 0,
                "max": 90
              },
              "mu": {
                "type": "number",
                "describe": "coefficient of kinetic friction",
                "min": 0,
                "max": 5
              }
            },
            "output": {
              "downSlopeComponent": {
                "type": "number",
                "describe": "mg sinθ (N)"
              },
              "normalForce": {
                "type": "number",
                "describe": "N = mg cosθ (N)"
              },
              "frictionForce": {
                "type": "number",
                "describe": "f = μN (N)"
              },
              "netForce": {
                "type": "number",
                "describe": "F_net (N)"
              },
              "acceleration": {
                "type": "number",
                "describe": "a (m·s⁻², 2 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_impulse",
          "name": "Impulse and rebound",
          "answers": "Δp = m(v − u) for a rebound, the impulse magnitude, the average force, and the direction stated — never just the magnitude.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P3 (offline reconstruction); F_net Δt = Δp; toward the wall is positive",
          "example": {
            "mass": 0.2,
            "uToward": 4,
            "vRebound": -3,
            "contactTime": 0.01
          },
          "signature": {
            "input": {
              "mass": {
                "type": "number",
                "describe": "mass (kg)",
                "unit": "kg",
                "min": 0.0001,
                "max": 100000
              },
              "uToward": {
                "type": "number",
                "describe": "approach velocity, toward the wall positive (m·s⁻¹)",
                "unit": "m·s⁻¹",
                "min": -1000,
                "max": 1000
              },
              "vRebound": {
                "type": "number",
                "describe": "rebound velocity, same sign convention (m·s⁻¹)",
                "unit": "m·s⁻¹",
                "min": -1000,
                "max": 1000
              },
              "contactTime": {
                "type": "number",
                "describe": "contact time (s, > 0)",
                "unit": "s",
                "min": 0.000001,
                "max": 60
              }
            },
            "output": {
              "momentumChange": {
                "type": "number",
                "describe": "Δp (kg·m·s⁻¹, signed)"
              },
              "impulseMagnitude": {
                "type": "number",
                "describe": "|J| (N·s)"
              },
              "averageForceMagnitude": {
                "type": "number",
                "describe": "|F| (N)"
              },
              "direction": {
                "type": "string",
                "describe": "away from the wall | toward the wall"
              }
            }
          }
        },
        {
          "id": "sci_work_energy",
          "name": "Work–energy theorem",
          "answers": "The net work on a vehicle from its change in kinetic energy: W_net = ΔKE = ½m(v² − u²).",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P4 (offline reconstruction); W_net = ΔKE",
          "example": {
            "mass": 1200,
            "uSpeed": 10,
            "vSpeed": 25
          },
          "signature": {
            "input": {
              "mass": {
                "type": "number",
                "describe": "mass (kg)",
                "unit": "kg",
                "min": 0.001,
                "max": 1000000
              },
              "uSpeed": {
                "type": "number",
                "describe": "initial speed (m·s⁻¹)",
                "unit": "m·s⁻¹",
                "min": 0,
                "max": 10000
              },
              "vSpeed": {
                "type": "number",
                "describe": "final speed (m·s⁻¹)",
                "unit": "m·s⁻¹",
                "min": 0,
                "max": 10000
              }
            },
            "output": {
              "workJoule": {
                "type": "number",
                "describe": "W_net (J)"
              },
              "workKilojoule": {
                "type": "number",
                "describe": "W_net (kJ)"
              }
            }
          }
        },
        {
          "id": "sci_projectile",
          "name": "Vertical projectile motion",
          "answers": "Time to the top, maximum height and total flight time for a projectile launched straight up at u, constant g, no air resistance.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P5 (offline reconstruction); t_up = u/g; h_max = u²/(2g)",
          "example": {
            "uUp": 20
          },
          "signature": {
            "input": {
              "uUp": {
                "type": "number",
                "describe": "launch speed upward (m·s⁻¹, > 0)",
                "unit": "m·s⁻¹",
                "min": 0.001,
                "max": 10000
              }
            },
            "output": {
              "timeUp": {
                "type": "number",
                "describe": "t to the highest point (s, 3 d.p.)"
              },
              "maxHeight": {
                "type": "number",
                "describe": "h_max (m, 3 d.p.)"
              },
              "flightTime": {
                "type": "number",
                "describe": "total time back to launch height (s, 3 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_doppler",
          "name": "Doppler effect",
          "answers": "The observed frequency for a source approaching or receding from a stationary listener; a source at or beyond the speed of sound is refused.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P6 (offline reconstruction); f_L = v/(v ∓ v_s) · f_s; v = 340 m·s⁻¹ working value",
          "example": {
            "sourceFrequency": 500,
            "sourceSpeed": 20,
            "motion": "approaching"
          },
          "signature": {
            "input": {
              "sourceFrequency": {
                "type": "number",
                "describe": "f_s (Hz)",
                "unit": "Hz",
                "min": 0.001,
                "max": 1000000
              },
              "sourceSpeed": {
                "type": "number",
                "describe": "source speed (m·s⁻¹, < 340)",
                "unit": "m·s⁻¹",
                "min": 0,
                "max": 10000
              },
              "motion": {
                "type": "string",
                "describe": "approaching or receding",
                "oneOf": [
                  "approaching",
                  "receding"
                ]
              }
            },
            "output": {
              "observedFrequency": {
                "type": "number",
                "describe": "f_L (Hz)"
              }
            }
          }
        },
        {
          "id": "sci_snell",
          "name": "Snell's law and the critical angle",
          "answers": "The refraction angle for n₁ sinθ₁ = n₂ sinθ₂ and the critical angle for the reverse passage; total internal reflection is refused by name.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P7 (offline reconstruction); sinθ_c = n₁/n₂ for the denser-to-rarer passage",
          "example": {
            "n1": 1,
            "n2": 1.5,
            "theta1": 30
          },
          "signature": {
            "input": {
              "n1": {
                "type": "number",
                "describe": "refractive index of the first medium (> 0)",
                "min": 0.001,
                "max": 10
              },
              "n2": {
                "type": "number",
                "describe": "refractive index of the second medium (> 0)",
                "min": 0.001,
                "max": 10
              },
              "theta1": {
                "type": "number",
                "describe": "angle of incidence (°)",
                "unit": "°",
                "min": 0,
                "max": 90
              }
            },
            "output": {
              "theta2": {
                "type": "number",
                "describe": "angle of refraction (°, 2 d.p.)"
              },
              "criticalAngle": {
                "type": "number",
                "describe": "critical angle for the denser-to-rarer passage (°, 2 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_coulomb",
          "name": "Coulomb's law",
          "answers": "The electrostatic force between two point charges, its magnitude and its nature (attractive or repulsive).",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P8 (offline reconstruction); F = k|Q₁Q₂|/r², k = 9,0 × 10⁹ N·m²·C⁻²",
          "example": {
            "q1MicroC": 2,
            "q2MicroC": -3,
            "distance": 0.3
          },
          "signature": {
            "input": {
              "q1MicroC": {
                "type": "number",
                "describe": "Q₁ (μC)",
                "unit": "μC",
                "min": -1000000,
                "max": 1000000
              },
              "q2MicroC": {
                "type": "number",
                "describe": "Q₂ (μC)",
                "unit": "μC",
                "min": -1000000,
                "max": 1000000
              },
              "distance": {
                "type": "number",
                "describe": "separation r (m, > 0)",
                "unit": "m",
                "min": 0.000001,
                "max": 100000
              }
            },
            "output": {
              "forceNewton": {
                "type": "number",
                "describe": "|F| (N)"
              },
              "nature": {
                "type": "string",
                "describe": "attractive | repulsive"
              }
            }
          }
        },
        {
          "id": "sci_internal_resistance",
          "name": "EMF and internal resistance",
          "answers": "Current, terminal potential difference and the power split for ε = I(R + r), with the energy check εI = P_R + P_r.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P9 (offline reconstruction); ε = I(R + r); P = I²R",
          "example": {
            "emf": 12,
            "internalResistance": 1,
            "loadResistance": 5
          },
          "signature": {
            "input": {
              "emf": {
                "type": "number",
                "describe": "ε (V)",
                "unit": "V",
                "min": 0.001,
                "max": 1000000
              },
              "internalResistance": {
                "type": "number",
                "describe": "r (Ω)",
                "unit": "Ω",
                "min": 0,
                "max": 1000000
              },
              "loadResistance": {
                "type": "number",
                "describe": "R (Ω, > 0)",
                "unit": "Ω",
                "min": 0.001,
                "max": 1000000
              }
            },
            "output": {
              "current": {
                "type": "number",
                "describe": "I (A)"
              },
              "terminalPd": {
                "type": "number",
                "describe": "V = IR (V)"
              },
              "powerLoad": {
                "type": "number",
                "describe": "P_R = I²R (W)"
              },
              "powerInternal": {
                "type": "number",
                "describe": "P_r = I²r (W)"
              }
            }
          }
        },
        {
          "id": "sci_faraday",
          "name": "Faraday's law",
          "answers": "The magnitude of the induced emf for a changing flux through N turns; the sign follows Lenz and is stated, not dropped.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P10 (offline reconstruction); ε = −NΔΦ/Δt",
          "example": {
            "turns": 200,
            "fluxFrom": 0.02,
            "fluxTo": 0,
            "timeSeconds": 0.1
          },
          "signature": {
            "input": {
              "turns": {
                "type": "number",
                "describe": "N (whole turns, ≥ 1)",
                "min": 1,
                "max": 1000000
              },
              "fluxFrom": {
                "type": "number",
                "describe": "initial flux (Wb)",
                "unit": "Wb",
                "min": -1000,
                "max": 1000
              },
              "fluxTo": {
                "type": "number",
                "describe": "final flux (Wb)",
                "unit": "Wb",
                "min": -1000,
                "max": 1000
              },
              "timeSeconds": {
                "type": "number",
                "describe": "Δt (s, > 0)",
                "unit": "s",
                "min": 0.000001,
                "max": 86400
              }
            },
            "output": {
              "emfMagnitude": {
                "type": "number",
                "describe": "|ε| (V)"
              }
            }
          }
        },
        {
          "id": "sci_ideal_gas",
          "name": "The ideal gas law",
          "answers": "The pressure from pV = nRT, kelvin only — a Celsius temperature is refused with the conversion shown.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P11 (offline reconstruction); pV = nRT, R = 8,314 J·K⁻¹·mol⁻¹",
          "example": {
            "moles": 2,
            "temperature": 300,
            "volume": 0.05,
            "temperatureUnit": "K"
          },
          "signature": {
            "input": {
              "moles": {
                "type": "number",
                "describe": "n (mol, ≥ 0)",
                "unit": "mol",
                "min": 0,
                "max": 1000000
              },
              "temperature": {
                "type": "number",
                "describe": "T (kelvin, > 0)",
                "unit": "K",
                "min": -273,
                "max": 100000
              },
              "volume": {
                "type": "number",
                "describe": "V (m³, > 0)",
                "unit": "m³",
                "min": 1e-7,
                "max": 1000000
              },
              "temperatureUnit": {
                "type": "string",
                "describe": "K only — a Celsius value must be converted first",
                "oneOf": [
                  "K",
                  "C"
                ],
                "default": "K"
              }
            },
            "output": {
              "pressurePa": {
                "type": "number",
                "describe": "p (Pa)"
              },
              "pressureKPa": {
                "type": "number",
                "describe": "p (kPa, 1 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_stoichiometry",
          "name": "Stoichiometry — 2H₂ + O₂ → 2H₂O",
          "answers": "The limiting reagent and the mass of water formed, with the mole ratios shown (working molar masses: H₂ 2, O₂ 32, H₂O 18 g·mol⁻¹).",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P12 (offline reconstruction); the limiting reagent fixes the product",
          "example": {
            "massH2": 4,
            "massO2": 32
          },
          "signature": {
            "input": {
              "massH2": {
                "type": "number",
                "describe": "mass of H₂ (g, ≥ 0)",
                "unit": "g",
                "min": 0,
                "max": 1000000
              },
              "massO2": {
                "type": "number",
                "describe": "mass of O₂ (g, ≥ 0)",
                "unit": "g",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "molH2": {
                "type": "number",
                "describe": "n(H₂) (mol)"
              },
              "molO2": {
                "type": "number",
                "describe": "n(O₂) (mol)"
              },
              "limiting": {
                "type": "string",
                "describe": "H2 | O2 | stoichiometric"
              },
              "massWater": {
                "type": "number",
                "describe": "mass of H₂O formed (g)"
              }
            }
          }
        },
        {
          "id": "sci_concentration",
          "name": "Concentration",
          "answers": "c = n/V with the volume converted from cm³ to dm³ first.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P13 (offline reconstruction); c = n/V, V in dm³",
          "example": {
            "moles": 0.5,
            "volumeCm3": 250
          },
          "signature": {
            "input": {
              "moles": {
                "type": "number",
                "describe": "n (mol, ≥ 0)",
                "unit": "mol",
                "min": 0,
                "max": 1000000
              },
              "volumeCm3": {
                "type": "number",
                "describe": "V (cm³, > 0)",
                "unit": "cm³",
                "min": 0.001,
                "max": 100000000
              }
            },
            "output": {
              "concentration": {
                "type": "number",
                "describe": "c (mol·dm⁻³)"
              }
            }
          }
        },
        {
          "id": "sci_ph",
          "name": "pH of a strong acid",
          "answers": "pH = −log[H⁺] for a fully dissociated monoprotic acid; a weak acid without Ka is refused with that reason.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P14 (offline reconstruction); pH = −log[H⁺]",
          "example": {
            "concentration": 0.01,
            "acidStrength": "strong"
          },
          "signature": {
            "input": {
              "concentration": {
                "type": "number",
                "describe": "[acid] (mol·dm⁻³, > 0)",
                "unit": "mol·dm⁻³",
                "min": 1e-10,
                "max": 20
              },
              "acidStrength": {
                "type": "string",
                "describe": "strong (full dissociation) or weak (needs Ka)",
                "oneOf": [
                  "strong",
                  "weak"
                ]
              }
            },
            "output": {
              "pH": {
                "type": "number",
                "describe": "pH (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_equilibrium_kc",
          "name": "Equilibrium constant — N₂ + 3H₂ ⇌ 2NH₃",
          "answers": "Kc = [NH₃]²/([N₂][H₂]³) from the equilibrium concentrations; a zero denominator is refused.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P15 (offline reconstruction); Kc carries no unit in the house's convention",
          "example": {
            "concN2": 0.5,
            "concH2": 1.5,
            "concNH3": 1
          },
          "signature": {
            "input": {
              "concN2": {
                "type": "number",
                "describe": "[N₂] (mol·dm⁻³, ≥ 0)",
                "unit": "mol·dm⁻³",
                "min": 0,
                "max": 1000
              },
              "concH2": {
                "type": "number",
                "describe": "[H₂] (mol·dm⁻³, ≥ 0)",
                "unit": "mol·dm⁻³",
                "min": 0,
                "max": 1000
              },
              "concNH3": {
                "type": "number",
                "describe": "[NH₃] (mol·dm⁻³, ≥ 0)",
                "unit": "mol·dm⁻³",
                "min": 0,
                "max": 1000
              }
            },
            "output": {
              "kc": {
                "type": "number",
                "describe": "Kc (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_cell_potential",
          "name": "Standard cell potential",
          "answers": "E°cell = E°cathode − E°anode; a negative answer is reported as non-spontaneous as written, never called an error.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P16 (offline reconstruction); working electrode potentials Zn²⁺/Zn −0,76 V, Cu²⁺/Cu +0,34 V",
          "example": {
            "eCathode": 0.34,
            "eAnode": -0.76
          },
          "signature": {
            "input": {
              "eCathode": {
                "type": "number",
                "describe": "E° of the cathode half-cell (V)",
                "unit": "V",
                "min": -10,
                "max": 10
              },
              "eAnode": {
                "type": "number",
                "describe": "E° of the anode half-cell (V)",
                "unit": "V",
                "min": -10,
                "max": 10
              }
            },
            "output": {
              "cellPotential": {
                "type": "number",
                "describe": "E°cell (V)"
              },
              "spontaneity": {
                "type": "string",
                "describe": "spontaneous as written | non-spontaneous as written"
              }
            }
          }
        },
        {
          "id": "sci_photon_energy",
          "name": "Photon energy",
          "answers": "E = hc/λ in joule and electron-volt for a given wavelength; λ ≤ 0 is refused.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P17 (offline reconstruction); h = 6,63 × 10⁻³⁴ J·s, c = 3,0 × 10⁸ m·s⁻¹, e = 1,6 × 10⁻¹⁹ C",
          "example": {
            "wavelengthNm": 500
          },
          "signature": {
            "input": {
              "wavelengthNm": {
                "type": "number",
                "describe": "λ (nm, > 0)",
                "unit": "nm",
                "min": 0.001,
                "max": 100000000
              }
            },
            "output": {
              "energyJoule": {
                "type": "number",
                "describe": "E (J)"
              },
              "energyEv": {
                "type": "number",
                "describe": "E (eV, 2 d.p.)"
              }
            }
          }
        },
        {
          "id": "sci_practical_data",
          "name": "Practical data exercise (offline)",
          "answers": "The gradient of extension against load, the mean of repeated readings and their spread — over SUPPLIED readings; no experiment was performed.",
          "reference": "CAPS Grade 12 Physical Sciences, worked reference P18 (offline reconstruction); the practical is a data exercise, not a performed experiment",
          "example": {
            "loads": [
              0,
              2,
              4,
              6,
              8
            ],
            "extensions": [
              0,
              0.8,
              1.6,
              2.4,
              3.2
            ],
            "repeats": [
              3.1,
              3.2,
              3.3
            ]
          },
          "signature": {
            "input": {
              "loads": {
                "type": "number[]",
                "describe": "applied loads (N), in order"
              },
              "extensions": {
                "type": "number[]",
                "describe": "measured extensions (cm), one per load"
              },
              "repeats": {
                "type": "number[]",
                "describe": "repeated readings of the final extension (cm)"
              }
            },
            "output": {
              "gradient": {
                "type": "number",
                "describe": "Δ(extension)/Δ(load) (cm·N⁻¹)"
              },
              "meanRepeat": {
                "type": "number",
                "describe": "mean of the repeated readings (cm)"
              },
              "spread": {
                "type": "number",
                "describe": "range of the repeated readings (cm)"
              }
            }
          }
        },
        {
          "id": "lang_final_mark",
          "name": "Weighted final mark",
          "answers": "The final subject mark from the school-based assessment and the examination mark under the stated weighting — or the examination mark alone on the adult (no-SBA) route.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); working split 25% SBA / 75% exam for exam subjects; the Senior Certificate (Amended) route has no SBA (verify item §12)",
          "example": {
            "sbaMark": 60,
            "examMark": 68,
            "route": "nsc"
          },
          "signature": {
            "input": {
              "sbaMark": {
                "type": "number",
                "describe": "school-based assessment mark (percent)",
                "min": 0,
                "max": 100
              },
              "examMark": {
                "type": "number",
                "describe": "examination mark (percent)",
                "min": 0,
                "max": 100
              },
              "route": {
                "type": "string",
                "describe": "nsc (25/75) or amended (exam only)",
                "oneOf": [
                  "nsc",
                  "amended"
                ]
              }
            },
            "output": {
              "finalMark": {
                "type": "number",
                "describe": "the final mark (percent)"
              }
            }
          }
        },
        {
          "id": "lang_reading_statistic",
          "name": "Reading statistic on a fixed text",
          "answers": "Word count, sentence count and average word length of a supplied passage — a deterministic text measure, never a model-marked essay.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); a fixed-text statistic (languages row of §4)",
          "example": {
            "text": "The sun rose over the valley. Every learner opened a book. Reading builds the mind."
          },
          "signature": {
            "input": {
              "text": {
                "type": "string",
                "describe": "the passage (non-empty)"
              }
            },
            "output": {
              "words": {
                "type": "number",
                "describe": "word count"
              },
              "sentences": {
                "type": "number",
                "describe": "sentence count"
              },
              "averageWordLength": {
                "type": "number",
                "describe": "letters per word (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "mathlit_tariff",
          "name": "Stepped tariff",
          "answers": "The cost of consumption under a two-block stepped tariff, block by block.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Mathematical Literacy row of §4 — a tariff computation",
          "example": {
            "unitsUsed": 150,
            "blockOneLimit": 100,
            "blockOneRate": 1.5,
            "blockTwoRate": 2.1
          },
          "signature": {
            "input": {
              "unitsUsed": {
                "type": "number",
                "describe": "units consumed (≥ 0)",
                "min": 0,
                "max": 1000000
              },
              "blockOneLimit": {
                "type": "number",
                "describe": "units in the first block",
                "min": 0.001,
                "max": 1000000
              },
              "blockOneRate": {
                "type": "number",
                "describe": "rate per unit in block one",
                "min": 0,
                "max": 100000
              },
              "blockTwoRate": {
                "type": "number",
                "describe": "rate per unit above the limit",
                "min": 0,
                "max": 100000
              }
            },
            "output": {
              "totalCost": {
                "type": "number",
                "describe": "the total cost (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "lo_sba_total",
          "name": "School-based assessment total",
          "answers": "The Life Orientation SBA percentage from task marks and task totals — 100% school-based, no external paper (working reconstruction).",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Life Orientation is 100% SBA with no external examination (verify item §12)",
          "example": {
            "taskMarks": [
              38,
              42,
              71,
              85
            ],
            "taskTotals": [
              50,
              50,
              80,
              100
            ]
          },
          "signature": {
            "input": {
              "taskMarks": {
                "type": "number[]",
                "describe": "mark achieved per task"
              },
              "taskTotals": {
                "type": "number[]",
                "describe": "maximum mark per task"
              }
            },
            "output": {
              "sbaPercent": {
                "type": "number",
                "describe": "the SBA percentage (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "lifesci_punnett",
          "name": "Punnett square — monohybrid cross",
          "answers": "The genotype and phenotype ratios of a monohybrid cross, by enumerating the four gamete combinations.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Life Sciences row of §4 — a Punnett-square ratio",
          "example": {
            "parentOne": "Aa",
            "parentTwo": "Aa"
          },
          "signature": {
            "input": {
              "parentOne": {
                "type": "string",
                "describe": "first parent genotype",
                "oneOf": [
                  "AA",
                  "Aa",
                  "aa"
                ]
              },
              "parentTwo": {
                "type": "string",
                "describe": "second parent genotype",
                "oneOf": [
                  "AA",
                  "Aa",
                  "aa"
                ]
              }
            },
            "output": {
              "genotypeRatio": {
                "type": "string",
                "describe": "AA : Aa : aa"
              },
              "dominantFraction": {
                "type": "number",
                "describe": "fraction showing the dominant phenotype"
              }
            }
          }
        },
        {
          "id": "agrisci_npk",
          "name": "Fertiliser nutrient mass",
          "answers": "The mass of N, P and K in a bag from its stated percentages.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Agricultural Sciences row of §4 — nutrient mass from a fertiliser label",
          "example": {
            "bagMassKg": 50,
            "nPercent": 10,
            "pPercent": 6,
            "kPercent": 4
          },
          "signature": {
            "input": {
              "bagMassKg": {
                "type": "number",
                "describe": "bag mass (kg, > 0)",
                "unit": "kg",
                "min": 0.001,
                "max": 100000
              },
              "nPercent": {
                "type": "number",
                "describe": "N (%)",
                "min": 0,
                "max": 100
              },
              "pPercent": {
                "type": "number",
                "describe": "P (%)",
                "min": 0,
                "max": 100
              },
              "kPercent": {
                "type": "number",
                "describe": "K (%)",
                "min": 0,
                "max": 100
              }
            },
            "output": {
              "massN": {
                "type": "number",
                "describe": "kg of N"
              },
              "massP": {
                "type": "number",
                "describe": "kg of P"
              },
              "massK": {
                "type": "number",
                "describe": "kg of K"
              }
            }
          }
        },
        {
          "id": "acc_depreciation",
          "name": "Depreciation",
          "answers": "Depreciation for a chosen year and the carrying value, on the straight-line or the diminishing-balance method.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Accounting row of §4 — depreciation and carrying value",
          "example": {
            "cost": 100000,
            "ratePercent": 20,
            "year": 3,
            "method": "diminishing-balance"
          },
          "signature": {
            "input": {
              "cost": {
                "type": "number",
                "describe": "cost price (> 0)",
                "min": 0.01,
                "max": 1000000000
              },
              "ratePercent": {
                "type": "number",
                "describe": "annual rate (%, 0–100)",
                "min": 0,
                "max": 100
              },
              "year": {
                "type": "number",
                "describe": "which year (1-based whole number)",
                "min": 1,
                "max": 100
              },
              "method": {
                "type": "string",
                "describe": "straight-line or diminishing-balance",
                "oneOf": [
                  "straight-line",
                  "diminishing-balance"
                ]
              }
            },
            "output": {
              "depreciationForYear": {
                "type": "number",
                "describe": "depreciation in that year (2 d.p.)"
              },
              "carryingValue": {
                "type": "number",
                "describe": "carrying value at the end of that year (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "bus_breakeven",
          "name": "Break-even quantity",
          "answers": "Fixed cost over the contribution per unit; a selling price at or below the variable cost is refused because no volume can break even.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Business Studies row of §4 — break-even from fixed cost, price and variable cost",
          "example": {
            "fixedCost": 60000,
            "sellingPrice": 50,
            "variableCost": 30
          },
          "signature": {
            "input": {
              "fixedCost": {
                "type": "number",
                "describe": "fixed cost per period (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "sellingPrice": {
                "type": "number",
                "describe": "selling price per unit (> 0)",
                "min": 0.01,
                "max": 1000000
              },
              "variableCost": {
                "type": "number",
                "describe": "variable cost per unit (≥ 0)",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "breakEvenUnits": {
                "type": "number",
                "describe": "units to break even (rounded up)"
              }
            }
          }
        },
        {
          "id": "econ_inflation",
          "name": "Inflation rate from two index values",
          "answers": "The percentage change of a price index between two readings.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Economics row of §4 — an inflation rate from two index values",
          "example": {
            "indexOld": 120,
            "indexNew": 129
          },
          "signature": {
            "input": {
              "indexOld": {
                "type": "number",
                "describe": "earlier index value (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "indexNew": {
                "type": "number",
                "describe": "later index value (≥ 0)",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "inflationPercent": {
                "type": "number",
                "describe": "the rate (%, 2 d.p.)"
              }
            }
          }
        },
        {
          "id": "geo_map_scale",
          "name": "Map scale and gradient",
          "answers": "The ground distance from a map measurement and a 1 : n scale, and the gradient as 1 : (run/rise).",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Geography row of §4 — a map scale distance and a gradient",
          "example": {
            "mapDistanceCm": 4.5,
            "scaleDenominator": 50000,
            "riseM": 120
          },
          "signature": {
            "input": {
              "mapDistanceCm": {
                "type": "number",
                "describe": "measured map distance (cm, > 0)",
                "unit": "cm",
                "min": 0.001,
                "max": 10000
              },
              "scaleDenominator": {
                "type": "number",
                "describe": "the n of 1 : n (> 0)",
                "min": 1,
                "max": 10000000
              },
              "riseM": {
                "type": "number",
                "describe": "height gained over the distance (m, > 0)",
                "unit": "m",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "groundDistanceKm": {
                "type": "number",
                "describe": "ground distance (km, 3 d.p.)"
              },
              "gradientRun": {
                "type": "number",
                "describe": "the n of gradient 1 : n (1 d.p.)"
              }
            }
          }
        },
        {
          "id": "hist_timeline",
          "name": "Timeline span",
          "answers": "The span in years between two dated events; an end year before the start year is refused.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); History row of §4 — a timeline span and a source-weighting total",
          "example": {
            "startYear": 1948,
            "endYear": 1994
          },
          "signature": {
            "input": {
              "startYear": {
                "type": "number",
                "describe": "the earlier year",
                "min": -3000,
                "max": 3000
              },
              "endYear": {
                "type": "number",
                "describe": "the later year",
                "min": -3000,
                "max": 3000
              }
            },
            "output": {
              "spanYears": {
                "type": "number",
                "describe": "years between the two"
              }
            }
          }
        },
        {
          "id": "rel_text_compare",
          "name": "Fixed-text comparison statistic",
          "answers": "The shared and unique word counts of two supplied passages — a deterministic comparison, never a model-marked essay.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Religion Studies row of §4 — a fixed-text comparison statistic",
          "example": {
            "textA": "Compassion and justice guide the community.",
            "textB": "Justice and mercy guide the household."
          },
          "signature": {
            "input": {
              "textA": {
                "type": "string",
                "describe": "first passage"
              },
              "textB": {
                "type": "string",
                "describe": "second passage"
              }
            },
            "output": {
              "sharedWords": {
                "type": "number",
                "describe": "distinct words in both"
              },
              "uniqueToA": {
                "type": "number",
                "describe": "distinct words only in A"
              },
              "uniqueToB": {
                "type": "number",
                "describe": "distinct words only in B"
              }
            }
          }
        },
        {
          "id": "tour_currency",
          "name": "Currency conversion and occupancy",
          "answers": "A currency conversion at a stated rate, and the occupancy percentage of a lodge.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Tourism row of §4 — a currency conversion and an occupancy percentage",
          "example": {
            "amount": 1000,
            "rate": 18.5,
            "roomsSold": 45,
            "roomsAvailable": 60
          },
          "signature": {
            "input": {
              "amount": {
                "type": "number",
                "describe": "amount in the source currency (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "rate": {
                "type": "number",
                "describe": "units of the target currency per source unit (> 0)",
                "min": 0.000001,
                "max": 1000000
              },
              "roomsSold": {
                "type": "number",
                "describe": "rooms sold",
                "min": 0,
                "max": 1000000
              },
              "roomsAvailable": {
                "type": "number",
                "describe": "rooms available (> 0)",
                "min": 1,
                "max": 1000000
              }
            },
            "output": {
              "converted": {
                "type": "number",
                "describe": "converted amount (2 d.p.)"
              },
              "occupancyPercent": {
                "type": "number",
                "describe": "occupancy (%, 1 d.p.)"
              }
            }
          }
        },
        {
          "id": "cons_unit_price",
          "name": "Unit price and recipe scaling",
          "answers": "The price per unit of a pack and the factor to scale a recipe between serving counts.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Consumer Studies row of §4 — a unit price and a recipe scale factor",
          "example": {
            "packPrice": 36,
            "packSize": 6,
            "servingsHave": 4,
            "servingsNeed": 10
          },
          "signature": {
            "input": {
              "packPrice": {
                "type": "number",
                "describe": "price of the pack (≥ 0)",
                "min": 0,
                "max": 1000000
              },
              "packSize": {
                "type": "number",
                "describe": "units in the pack (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "servingsHave": {
                "type": "number",
                "describe": "servings the recipe makes (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "servingsNeed": {
                "type": "number",
                "describe": "servings needed (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "unitPrice": {
                "type": "number",
                "describe": "price per unit (2 d.p.)"
              },
              "scaleFactor": {
                "type": "number",
                "describe": "multiply every ingredient by this (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "hosp_portion_cost",
          "name": "Portion cost",
          "answers": "The cost per portion from a batch cost and a portion count.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Hospitality Studies row of §4 — a portion cost and a cover count",
          "example": {
            "batchCost": 480,
            "portions": 32
          },
          "signature": {
            "input": {
              "batchCost": {
                "type": "number",
                "describe": "cost of the batch (≥ 0)",
                "min": 0,
                "max": 1000000
              },
              "portions": {
                "type": "number",
                "describe": "portions from the batch (whole, ≥ 1)",
                "min": 1,
                "max": 100000
              }
            },
            "output": {
              "costPerPortion": {
                "type": "number",
                "describe": "cost per portion (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "cat_filesize",
          "name": "File-size total",
          "answers": "The total of a list of file sizes in KB, converted to MB at 1024 KB per MB.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); CAT row of §4 — a file-size total",
          "example": {
            "fileSizesKb": [
              512,
              256,
              1280
            ]
          },
          "signature": {
            "input": {
              "fileSizesKb": {
                "type": "number[]",
                "describe": "file sizes (KB, each ≥ 0)"
              }
            },
            "output": {
              "totalKb": {
                "type": "number",
                "describe": "total (KB)"
              },
              "totalMb": {
                "type": "number",
                "describe": "total (MB, 3 d.p.)"
              }
            }
          }
        },
        {
          "id": "it_binary",
          "name": "Binary and decimal conversion",
          "answers": "The binary representation of a whole number (0–65535) and the round-trip back to decimal.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); IT row of §4 — a binary/decimal conversion",
          "example": {
            "value": 156
          },
          "signature": {
            "input": {
              "value": {
                "type": "number",
                "describe": "whole number 0–65535",
                "min": 0,
                "max": 65535
              }
            },
            "output": {
              "binary": {
                "type": "string",
                "describe": "binary digits"
              },
              "bits": {
                "type": "number",
                "describe": "how many bits"
              },
              "roundTrip": {
                "type": "number",
                "describe": "parsed back to decimal — must equal the input"
              }
            }
          }
        },
        {
          "id": "egd_scale",
          "name": "Scale drawing length",
          "answers": "The actual length from a drawing measurement and a 1 : n scale.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); EGD row of §4 — a scale drawing length",
          "example": {
            "drawingMm": 45,
            "scaleDenominator": 20
          },
          "signature": {
            "input": {
              "drawingMm": {
                "type": "number",
                "describe": "measured length on the drawing (mm, > 0)",
                "unit": "mm",
                "min": 0.001,
                "max": 100000
              },
              "scaleDenominator": {
                "type": "number",
                "describe": "the n of 1 : n (> 0)",
                "min": 0.001,
                "max": 1000000
              }
            },
            "output": {
              "actualMm": {
                "type": "number",
                "describe": "actual length (mm)"
              },
              "actualM": {
                "type": "number",
                "describe": "actual length (m, 3 d.p.)"
              }
            }
          }
        },
        {
          "id": "civtech_load",
          "name": "Load per area",
          "answers": "The distributed load on a slab: force over area.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Civil Technology row of §4 — a load per area",
          "example": {
            "loadKn": 12,
            "areaM2": 2.5
          },
          "signature": {
            "input": {
              "loadKn": {
                "type": "number",
                "describe": "total load (kN, ≥ 0)",
                "unit": "kN",
                "min": 0,
                "max": 1000000
              },
              "areaM2": {
                "type": "number",
                "describe": "area (m², > 0)",
                "unit": "m²",
                "min": 0.0001,
                "max": 1000000
              }
            },
            "output": {
              "loadPerArea": {
                "type": "number",
                "describe": "kN/m² (3 d.p.)"
              }
            }
          }
        },
        {
          "id": "mechtech_gear",
          "name": "Gear ratio and torque",
          "answers": "The velocity ratio of a gear pair and the ideal output torque.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Mechanical Technology row of §4 — a gear ratio and a torque",
          "example": {
            "teethDriver": 20,
            "teethDriven": 60,
            "inputTorque": 50
          },
          "signature": {
            "input": {
              "teethDriver": {
                "type": "number",
                "describe": "teeth on the driver (whole, ≥ 1)",
                "min": 1,
                "max": 10000
              },
              "teethDriven": {
                "type": "number",
                "describe": "teeth on the driven gear (whole, ≥ 1)",
                "min": 1,
                "max": 10000
              },
              "inputTorque": {
                "type": "number",
                "describe": "input torque (N·m, ≥ 0)",
                "unit": "N·m",
                "min": 0,
                "max": 1000000
              }
            },
            "output": {
              "gearRatio": {
                "type": "number",
                "describe": "driven/driver (3 d.p.)"
              },
              "outputTorque": {
                "type": "number",
                "describe": "ideal output torque (N·m, 3 d.p.)"
              }
            }
          }
        },
        {
          "id": "electech_resistance",
          "name": "Series and parallel resistance",
          "answers": "The total resistance of a set of resistors in series or in parallel; a zero resistor in parallel is refused.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Electrical Technology row of §4 — a series/parallel resistance",
          "example": {
            "resistors": [
              10,
              20,
              30
            ],
            "arrangement": "series"
          },
          "signature": {
            "input": {
              "resistors": {
                "type": "number[]",
                "describe": "resistances (Ω, each > 0)"
              },
              "arrangement": {
                "type": "string",
                "describe": "series or parallel",
                "oneOf": [
                  "series",
                  "parallel"
                ]
              }
            },
            "output": {
              "totalResistance": {
                "type": "number",
                "describe": "total (Ω, 3 d.p.)"
              }
            }
          }
        },
        {
          "id": "art_colour_mix",
          "name": "Colour-mix ratio and frame area",
          "answers": "The fraction of each pigment in a stated mix, and the area of a picture frame border.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Visual Arts row of §4 — a colour-mix ratio and a frame area",
          "example": {
            "partsA": 2,
            "partsB": 3,
            "innerWidthCm": 40,
            "innerHeightCm": 30,
            "borderCm": 5
          },
          "signature": {
            "input": {
              "partsA": {
                "type": "number",
                "describe": "parts of the first pigment (> 0)",
                "min": 0.001,
                "max": 1000
              },
              "partsB": {
                "type": "number",
                "describe": "parts of the second pigment (> 0)",
                "min": 0.001,
                "max": 1000
              },
              "innerWidthCm": {
                "type": "number",
                "describe": "picture width (cm, > 0)",
                "unit": "cm",
                "min": 0.001,
                "max": 10000
              },
              "innerHeightCm": {
                "type": "number",
                "describe": "picture height (cm, > 0)",
                "unit": "cm",
                "min": 0.001,
                "max": 10000
              },
              "borderCm": {
                "type": "number",
                "describe": "frame border width (cm, ≥ 0)",
                "unit": "cm",
                "min": 0,
                "max": 1000
              }
            },
            "output": {
              "fractionA": {
                "type": "number",
                "describe": "fraction of pigment A (4 d.p.)"
              },
              "frameAreaCm2": {
                "type": "number",
                "describe": "area of the border (cm²)"
              }
            }
          }
        },
        {
          "id": "music_interval",
          "name": "Interval frequency ratio",
          "answers": "The just-intonation frequency ratio of a named interval and the upper note from a base frequency.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Music row of §4 — a frequency ratio for an interval",
          "example": {
            "interval": "perfect fifth",
            "baseFrequencyHz": 440
          },
          "signature": {
            "input": {
              "interval": {
                "type": "string",
                "describe": "the interval",
                "oneOf": [
                  "octave",
                  "perfect fifth",
                  "perfect fourth",
                  "major third"
                ]
              },
              "baseFrequencyHz": {
                "type": "number",
                "describe": "the lower note (Hz, > 0)",
                "unit": "Hz",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "ratio": {
                "type": "number",
                "describe": "the frequency ratio (4 d.p.)"
              },
              "upperFrequencyHz": {
                "type": "number",
                "describe": "the upper note (Hz, 2 d.p.)"
              }
            }
          }
        },
        {
          "id": "drama_cue",
          "name": "Lighting-cue duration total",
          "answers": "The total running time of a cue list in seconds and minutes:seconds.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Drama row of §4 — a lighting-cue duration total",
          "example": {
            "cueSeconds": [
              12,
              45,
              8,
              95
            ]
          },
          "signature": {
            "input": {
              "cueSeconds": {
                "type": "number[]",
                "describe": "cue durations (s, each ≥ 0)"
              }
            },
            "output": {
              "totalSeconds": {
                "type": "number",
                "describe": "total (s)"
              },
              "clock": {
                "type": "string",
                "describe": "m:ss"
              }
            }
          }
        },
        {
          "id": "dance_tempo",
          "name": "Tempo and bar count",
          "answers": "How many beats and full bars fit a piece at a stated tempo and time signature.",
          "reference": "Umalusi/NSC subject catalogue, worked reference (offline reconstruction); Dance Studies row of §4 — a tempo/bar count",
          "example": {
            "tempoBpm": 120,
            "beatsPerBar": 4,
            "durationSeconds": 90
          },
          "signature": {
            "input": {
              "tempoBpm": {
                "type": "number",
                "describe": "tempo (beats per minute, > 0)",
                "min": 0.001,
                "max": 1000
              },
              "beatsPerBar": {
                "type": "number",
                "describe": "beats per bar (whole, ≥ 1)",
                "min": 1,
                "max": 32
              },
              "durationSeconds": {
                "type": "number",
                "describe": "duration (s, > 0)",
                "unit": "s",
                "min": 0.001,
                "max": 86400
              }
            },
            "output": {
              "beats": {
                "type": "number",
                "describe": "total beats"
              },
              "fullBars": {
                "type": "number",
                "describe": "complete bars"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:higher-certificate",
      "code": "CDU-GEN-HC-500",
      "level": "HCert",
      "name": "Higher Certificate in Foundation Studies (January 2027 intake)",
      "faculty": "Faculty of General Studies",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "One year that restarts a study career: the shared foundation spine, proven unit by unit",
      "description": "The shared NQF 5 first-year foundation spine — Academic English, Calculus I and II, Accounting, Economics, Statistics — as a complete 120-credit Higher Certificate. Every module of the January 2027 intake runs on a real executable unit.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Higher Certificate: 120 credits at NQF 5 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "HCert",
        "nqfLevel": 5,
        "qualificationType": "Higher Certificate",
        "totalCredits": 120,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "001"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:diploma-business",
      "code": "CDU-BUS-DIP-600",
      "level": "Dip",
      "name": "Diploma in Business Practice (January 2027 intake)",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "From the shared first year to business practice: a 240-credit diploma with the 2028 year stated honestly as future work",
      "description": "The shared NQF 5 first year plus a 120-credit NQF 6 business year. The 2028 modules are credit-bearing and honestly unitless until that intake; the January 2027 modules all execute.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Diploma (240): 240 credits at NQF 6 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "Dip",
        "nqfLevel": 6,
        "qualificationType": "Diploma (240 credits)",
        "totalCredits": 240,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y2-BUS611",
          "title": "Business Management II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y1-MAT511",
            "Y1-ENG511"
          ],
          "coRequisites": [],
          "outcomes": [
            "Business Management II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Business Management II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-BUS621",
          "title": "Financial Accounting II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-BUS611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Financial Accounting II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Financial Accounting II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-BUS631",
          "title": "Commercial Law I",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-BUS611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Commercial Law I — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Commercial Law I: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-BUS641",
          "title": "Operations and Projects",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-BUS611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Operations and Projects — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Operations and Projects: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:bcom",
      "code": "CDU-BUS-BCOM-700",
      "level": "BCom",
      "name": "BCom — Commerce (January 2027 starter)",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "The commerce starter degree: shared first year, a commerce core, and an exit-level capstone",
      "description": "A 360-credit NQF 7 Bachelor of Commerce on the starter spine: the shared executable first year, with the 2028 and 2029 years stated honestly as future modules.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Bachelor's Degree: 360 credits at NQF 7 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "BCom",
        "nqfLevel": 7,
        "qualificationType": "Bachelor's Degree",
        "totalCredits": 360,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y2-COM611",
          "title": "Financial Accounting II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y1-MAT511",
            "Y1-ENG511"
          ],
          "coRequisites": [],
          "outcomes": [
            "Financial Accounting II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Financial Accounting II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-COM621",
          "title": "Microeconomics II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Microeconomics II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Microeconomics II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-COM631",
          "title": "Business Statistics II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Business Statistics II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Business Statistics II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-COM641",
          "title": "Commercial Law I",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Commercial Law I — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Commercial Law I: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-COM711",
          "title": "Financial Management III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Financial Management III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Financial Management III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-COM721",
          "title": "Macroeconomics III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Macroeconomics III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Macroeconomics III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-COM731",
          "title": "Strategy Capstone",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Strategy Capstone — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Strategy Capstone: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-COM741",
          "title": "Taxation III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-COM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Taxation III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Taxation III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:bsc",
      "code": "CDU-SCI-BSC-700",
      "level": "BSc",
      "name": "BSc — Mathematical Sciences (January 2027 starter)",
      "faculty": "Faculty of Science",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "The science starter degree: shared first year into mathematical and statistical depth",
      "description": "A 360-credit NQF 7 Bachelor of Science on the starter spine: the shared executable first year, with the mathematical years of 2028 and 2029 stated honestly as future modules.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Bachelor's Degree: 360 credits at NQF 7 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "BSc",
        "nqfLevel": 7,
        "qualificationType": "Bachelor's Degree",
        "totalCredits": 360,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "054"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y2-SCI611",
          "title": "Linear Algebra II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y1-MAT511",
            "Y1-ENG511"
          ],
          "coRequisites": [],
          "outcomes": [
            "Linear Algebra II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Linear Algebra II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-SCI621",
          "title": "Real Analysis II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Real Analysis II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Real Analysis II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-SCI631",
          "title": "Probability II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Probability II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Probability II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-SCI641",
          "title": "Scientific Computing II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Scientific Computing II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Scientific Computing II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-SCI711",
          "title": "Abstract Algebra III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Abstract Algebra III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Abstract Algebra III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-SCI721",
          "title": "Statistical Inference III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Statistical Inference III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Statistical Inference III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-SCI731",
          "title": "Numerical Methods III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Numerical Methods III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Numerical Methods III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-SCI741",
          "title": "Research Project",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-SCI611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Research Project — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Research Project: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:ba",
      "code": "CDU-HUM-BA-700",
      "level": "BA",
      "name": "BA — Humanities (January 2027 starter)",
      "faculty": "Faculty of Humanities",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "The humanities starter degree: the shared quantitative first year, read into the humanities core",
      "description": "A 360-credit NQF 7 Bachelor of Arts on the starter spine: the shared executable first year, with the 2028 and 2029 humanities years stated honestly as future modules.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Bachelor's Degree: 360 credits at NQF 7 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "BA",
        "nqfLevel": 7,
        "qualificationType": "Bachelor's Degree",
        "totalCredits": 360,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "022"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y2-HUM611",
          "title": "Philosophy II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y1-MAT511",
            "Y1-ENG511"
          ],
          "coRequisites": [],
          "outcomes": [
            "Philosophy II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Philosophy II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-HUM621",
          "title": "History of Ideas II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "History of Ideas II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "History of Ideas II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-HUM631",
          "title": "Language and Society II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Language and Society II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Language and Society II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-HUM641",
          "title": "Research Writing II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Research Writing II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Research Writing II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-HUM711",
          "title": "Ethics III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Ethics III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Ethics III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-HUM721",
          "title": "Historiography III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Historiography III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Historiography III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-HUM731",
          "title": "Critical Theory III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Critical Theory III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Critical Theory III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-HUM741",
          "title": "Humanities Capstone",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-HUM611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Humanities Capstone — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Humanities Capstone: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:beng",
      "code": "CDU-ENG-BENG-700",
      "level": "BEng",
      "name": "BEng — Engineering Foundations (January 2027 starter)",
      "faculty": "Faculty of Engineering and the Built Environment",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "The engineering starter: honestly NQF 7 and 360 credits, mapped against the 480-credit professional type it aspires to",
      "description": "A 360-credit NQF 7 engineering starter degree. The framework lookup also names the 480-credit professional Bachelor's type this copy is mapped AGAINST; the starter is honestly labelled NQF 7, 360 credits, and nothing claims registration.",
      "syllabus": [
        "Shared Year 1 (January 2027): Academic English, Calculus I and II, Accounting I, Economics I, Statistics I — every module executable",
        "The later years are named module by module and carry credits honestly before they carry code",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (src-of-truth: the framework lookup)",
        "Award size": "Bachelor's Degree: 360 credits at NQF 7 exit level, per the one framework lookup",
        "Honest registration": "not registered — the mapping against the framework is published as a mapping, never as a registration"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "BEng",
        "nqfLevel": 7,
        "qualificationType": "Bachelor's Degree",
        "totalCredits": 360,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "071"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "Y1-ENG511",
          "title": "Academic English",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "read, summarise and reference academic prose; the deterministic compression measure is the executable check"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the summary-compression unit plus portfolio work marked by people — no model writes or marks an essay",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "eng_academic_summary"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT511",
          "title": "Calculus I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "differentiate polynomial functions and interpret the derivative"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the power-rule unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc1_derivative"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-MAT521",
          "title": "Calculus II",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [
            "Y1-MAT511"
          ],
          "coRequisites": [],
          "outcomes": [
            "estimate and check definite integrals numerically"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the trapezium-rule unit with its exact-value check",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "calc2_trapezium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ACC511",
          "title": "Accounting I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "apply the accounting equation and read a simple statement of position"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the accounting-equation unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "acct_equation"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-ECO511",
          "title": "Economics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "solve a linear market equilibrium and interpret the result"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the market-equilibrium unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "econ_equilibrium"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y1-STA511",
          "title": "Statistics I",
          "nqfLevel": 5,
          "credits": 20,
          "prerequisites": [],
          "coRequisites": [
            "Y1-MAT511"
          ],
          "outcomes": [
            "compute and interpret descriptive measures of a sample"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the descriptive-statistics unit through the seeded assessment",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "stat_descriptive"
          ],
          "notionalHours": 200
        },
        {
          "code": "Y2-ENG611",
          "title": "Engineering Mathematics II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y1-MAT511",
            "Y1-ENG511"
          ],
          "coRequisites": [],
          "outcomes": [
            "Engineering Mathematics II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Engineering Mathematics II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-ENG621",
          "title": "Mechanics of Materials II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Mechanics of Materials II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Mechanics of Materials II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-ENG631",
          "title": "Thermofluids II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Thermofluids II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Thermofluids II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y2-ENG641",
          "title": "Electrical Systems II",
          "nqfLevel": 6,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Electrical Systems II — second-year outcome set (2028 intake year; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Electrical Systems II: examination and coursework (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-ENG711",
          "title": "Design III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Design III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Design III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-ENG721",
          "title": "Control Systems III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Control Systems III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Control Systems III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-ENG731",
          "title": "Engineering Economics III",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Engineering Economics III — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Engineering Economics III: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "Y3-ENG741",
          "title": "Capstone Project",
          "nqfLevel": 7,
          "credits": 30,
          "prerequisites": [
            "Y2-ENG611"
          ],
          "coRequisites": [],
          "outcomes": [
            "Capstone Project — exit-level outcome set (2029; units land with that intake)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "Capstone Project: examination and a capstone (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "eng_academic_summary",
          "name": "Academic English — summary compression",
          "answers": "The compression ratio and sentence statistics of a summary against its source passage — a deterministic measure, never a model-marked essay.",
          "reference": "Shared Year 1 — Academic English (January 2027 intake); a fixed-text statistic",
          "example": {
            "source": "The committee met for three hours to debate the budget. Several members raised concerns about the cost of the new library. In the end the vote carried by a narrow margin and construction was approved for the following year.",
            "summary": "After long debate over library costs, the committee narrowly approved construction for next year."
          },
          "signature": {
            "input": {
              "source": {
                "type": "string",
                "describe": "the source passage"
              },
              "summary": {
                "type": "string",
                "describe": "the summary to measure"
              }
            },
            "output": {
              "sourceWords": {
                "type": "number",
                "describe": "words in the source"
              },
              "summaryWords": {
                "type": "number",
                "describe": "words in the summary"
              },
              "compressionRatio": {
                "type": "number",
                "describe": "summary/source (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "calc1_derivative",
          "name": "Calculus I — the power rule",
          "answers": "The derivative of axⁿ + bx + c and its value at a point.",
          "reference": "Shared Year 1 — Calculus I (January 2027 intake); d/dx axⁿ = naxⁿ⁻¹",
          "example": {
            "a": 3,
            "n": 2,
            "b": -4,
            "c": 7,
            "x0": 2
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of xⁿ",
                "min": -1000,
                "max": 1000
              },
              "n": {
                "type": "number",
                "describe": "power (whole, ≥ 1)",
                "min": 1,
                "max": 12
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -1000,
                "max": 1000
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -10000,
                "max": 10000
              },
              "x0": {
                "type": "number",
                "describe": "evaluate the derivative here",
                "min": -1000,
                "max": 1000
              }
            },
            "output": {
              "derivativeAt": {
                "type": "number",
                "describe": "f′(x0)"
              }
            }
          }
        },
        {
          "id": "calc2_trapezium",
          "name": "Calculus II — numerical integration",
          "answers": "The trapezium-rule estimate of ∫ f for f(x) = ax² + bx + c over [lo, hi] with k strips, against the exact value.",
          "reference": "Shared Year 1 — Calculus II (January 2027 intake); trapezium rule with the exact antiderivative check",
          "example": {
            "a": 1,
            "b": 0,
            "c": 1,
            "lo": 0,
            "hi": 2,
            "strips": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "coefficient of x²",
                "min": -100,
                "max": 100
              },
              "b": {
                "type": "number",
                "describe": "coefficient of x",
                "min": -100,
                "max": 100
              },
              "c": {
                "type": "number",
                "describe": "constant",
                "min": -1000,
                "max": 1000
              },
              "lo": {
                "type": "number",
                "describe": "lower limit",
                "min": -1000,
                "max": 1000
              },
              "hi": {
                "type": "number",
                "describe": "upper limit (> lo)",
                "min": -1000,
                "max": 1000
              },
              "strips": {
                "type": "number",
                "describe": "strips (whole, 1–1000)",
                "min": 1,
                "max": 1000
              }
            },
            "output": {
              "estimate": {
                "type": "number",
                "describe": "trapezium estimate (4 d.p.)"
              },
              "exact": {
                "type": "number",
                "describe": "exact integral (4 d.p.)"
              }
            }
          }
        },
        {
          "id": "acct_equation",
          "name": "Accounting I — the accounting equation",
          "answers": "The missing element of Assets = Owner's equity + Liabilities.",
          "reference": "Shared Year 1 — Accounting I (January 2027 intake); the accounting equation",
          "example": {
            "assets": 250000,
            "liabilities": 90000,
            "solveFor": "equity"
          },
          "signature": {
            "input": {
              "assets": {
                "type": "number",
                "describe": "total assets (≥ 0; ignored when solving for it)",
                "min": 0,
                "max": 1000000000
              },
              "liabilities": {
                "type": "number",
                "describe": "total liabilities (≥ 0)",
                "min": 0,
                "max": 1000000000
              },
              "solveFor": {
                "type": "string",
                "describe": "which element to solve for",
                "oneOf": [
                  "equity",
                  "assets"
                ]
              }
            },
            "output": {
              "solved": {
                "type": "number",
                "describe": "the missing element"
              }
            }
          }
        },
        {
          "id": "econ_equilibrium",
          "name": "Economics I — market equilibrium",
          "answers": "The equilibrium price and quantity of linear demand Qd = a − bP and supply Qs = c + dP.",
          "reference": "Shared Year 1 — Economics I (January 2027 intake); Qd = Qs at equilibrium",
          "example": {
            "a": 100,
            "b": 2,
            "c": 10,
            "d": 4
          },
          "signature": {
            "input": {
              "a": {
                "type": "number",
                "describe": "demand intercept (> 0)",
                "min": 0.001,
                "max": 1000000
              },
              "b": {
                "type": "number",
                "describe": "demand slope (> 0)",
                "min": 0.001,
                "max": 100000
              },
              "c": {
                "type": "number",
                "describe": "supply intercept",
                "min": -1000000,
                "max": 1000000
              },
              "d": {
                "type": "number",
                "describe": "supply slope (> 0)",
                "min": 0.001,
                "max": 100000
              }
            },
            "output": {
              "price": {
                "type": "number",
                "describe": "equilibrium price (2 d.p.)"
              },
              "quantity": {
                "type": "number",
                "describe": "equilibrium quantity (2 d.p.)"
              }
            }
          }
        },
        {
          "id": "stat_descriptive",
          "name": "Statistics I — descriptive measures",
          "answers": "Mean, median and sample standard deviation of a data set.",
          "reference": "Shared Year 1 — Statistics I (January 2027 intake); s = √(Σ(x − x̄)²/(n − 1))",
          "example": {
            "data": [
              12,
              15,
              11,
              19,
              13,
              14
            ]
          },
          "signature": {
            "input": {
              "data": {
                "type": "number[]",
                "describe": "the observations (n ≥ 2)"
              }
            },
            "output": {
              "mean": {
                "type": "number",
                "describe": "x̄ (4 d.p.)"
              },
              "median": {
                "type": "number",
                "describe": "the median"
              },
              "sampleSd": {
                "type": "number",
                "describe": "s (4 d.p.)"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:bcom-honours",
      "code": "CDU-BUS-HONS-800",
      "level": "Hons",
      "name": "BCom Honours — Commerce (NQF 8)",
      "faculty": "Faculty of Commerce, Law and Management",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "The honours year: a completed Bachelor's deepened into research readiness",
      "description": "A 120-credit NQF 8 honours year. Admission requires a completed Bachelor's degree — the rule is data, checked by the progression engine, and a refusal names what is missing. The research-planning unit executes today; the seminar modules are honestly unitless until their intake.",
      "syllabus": [
        "Research design and the honours project plan (executable today)",
        "Advanced commerce seminars — named, credit-bearing, future-year",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (the framework lookup)",
        "Award size": "Bachelor Honours Degree: 120 credits at NQF 8, per the one framework lookup",
        "Progression": "admits a completed Bachelor's only; leads to the Master's step, which resolves into the existing NQF 9 rows of the one register"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "BCom Hons",
        "nqfLevel": 8,
        "qualificationType": "Bachelor Honours Degree",
        "totalCredits": 120,
        "minCreditsAtExitLevel": 120,
        "iscedFields": [
          "041"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "H8-RES801",
          "title": "Research design and project plan",
          "nqfLevel": 8,
          "credits": 30,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "plan an honours research project inside an honest notional-hour budget"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the project-plan unit: the notional-hour arithmetic is the executable check; the proposal itself is read by people",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "hons_project_plan"
          ],
          "notionalHours": 300
        },
        {
          "code": "H8-SEM811",
          "title": "Advanced commerce seminar I",
          "nqfLevel": 8,
          "credits": 30,
          "prerequisites": [
            "H8-RES801"
          ],
          "coRequisites": [],
          "outcomes": [
            "seminar outcome set (future intake; units land with it)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "seminar examination (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "H8-SEM821",
          "title": "Advanced commerce seminar II",
          "nqfLevel": 8,
          "credits": 30,
          "prerequisites": [
            "H8-RES801"
          ],
          "coRequisites": [],
          "outcomes": [
            "seminar outcome set (future intake; units land with it)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "seminar examination (future year — no executable unit yet, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        },
        {
          "code": "H8-REP831",
          "title": "Honours research report",
          "nqfLevel": 8,
          "credits": 30,
          "prerequisites": [
            "H8-RES801"
          ],
          "coRequisites": [],
          "outcomes": [
            "the honours report, examined by people"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the research report (future year — examined by people, never a model)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 300
        }
      ],
      "units": [
        {
          "id": "hons_project_plan",
          "name": "Honours project plan — the notional-hour budget",
          "answers": "Whether a weekly study plan covers a module’s notional hours inside the term, and the margin.",
          "reference": "Honours research design; one credit = ten notional hours (the framework lookup)",
          "example": {
            "credits": 30,
            "hoursPerWeek": 15,
            "weeks": 24
          },
          "signature": {
            "input": {
              "credits": {
                "type": "number",
                "describe": "module credits (whole, ≥ 1)",
                "min": 1,
                "max": 360
              },
              "hoursPerWeek": {
                "type": "number",
                "describe": "planned study hours per week (> 0)",
                "min": 0.5,
                "max": 100
              },
              "weeks": {
                "type": "number",
                "describe": "weeks available (whole, ≥ 1)",
                "min": 1,
                "max": 52
              }
            },
            "output": {
              "notionalHours": {
                "type": "number",
                "describe": "credits × 10"
              },
              "plannedHours": {
                "type": "number",
                "describe": "hoursPerWeek × weeks"
              },
              "marginHours": {
                "type": "number",
                "describe": "planned − notional (negative means the plan is short)"
              },
              "feasible": {
                "type": "boolean",
                "describe": "does the plan cover the notional hours?"
              }
            }
          }
        }
      ]
    },
    {
      "id": "competency:phd",
      "code": "CDU-GEN-PHD-1000",
      "level": "PhD",
      "name": "PhD — Doctor of Philosophy (NQF 10)",
      "faculty": "Faculty of General Studies",
      "lineage": [
        {
          "institution": "Conquest Designer University",
          "year": 2026,
          "note": "authored for the January 2027 intake on the shared first-year spine; the house’s own executable programme, mapped against the framework for assessment — no prior institution and no registration is claimed"
        }
      ],
      "researchProject": "Original research: a Master's graduate carried to a defended thesis",
      "description": "A 360-credit NQF 10 doctorate by research. Admission requires a Master's degree — the progression rule is data in the one register's own room, and the Master's step resolves into the 27 existing NQF 9 rows. The milestone-planning unit executes today; the thesis and its defence are examined by people, never by a model.",
      "syllabus": [
        "Proposal and milestone plan (executable arithmetic today)",
        "The research years and the thesis — credit-bearing, examined by people",
        "The credit rule, the prerequisite graph and the completion arithmetic, proven by the one conformance gate"
      ],
      "reference": {
        "Credit rule": "one credit is ten notional hours (the framework lookup)",
        "Award size": "Doctoral Degree: 360 credits at NQF 10, per the one framework lookup",
        "Progression": "admits a Master's graduate with a passed research module; the Master's rows are the existing 27"
      },
      "role": "You are a first-year lecturer who shows every step. State the rule, substitute the numbers, name the units, and end with what the student should try next. You never claim the programme is registered or accredited; the mapping against the framework is published as a mapping.",
      "feeUsd": 1,
      "version": "1.0.0",
      "qualification": {
        "award": "PhD",
        "nqfLevel": 10,
        "qualificationType": "Doctoral Degree",
        "totalCredits": 360,
        "minCreditsAtExitLevel": 360,
        "iscedFields": [
          "001"
        ],
        "standards": [],
        "registration": "not registered"
      },
      "modules": [
        {
          "code": "D10-PRO1001",
          "title": "Proposal and milestone plan",
          "nqfLevel": 10,
          "credits": 60,
          "prerequisites": [],
          "coRequisites": [],
          "outcomes": [
            "plan the research against an honest milestone arithmetic"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "the milestone unit is the executable check; the proposal is read by people",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [
            "phd_milestones"
          ],
          "notionalHours": 600
        },
        {
          "code": "D10-RES1011",
          "title": "Research years",
          "nqfLevel": 10,
          "credits": 180,
          "prerequisites": [
            "D10-PRO1001"
          ],
          "coRequisites": [],
          "outcomes": [
            "conduct the research programme (future years; examined by people)"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "annual progress review by people (future years — no executable unit, stated honestly)",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1800
        },
        {
          "code": "D10-THE1021",
          "title": "Thesis and defence",
          "nqfLevel": 10,
          "credits": 120,
          "prerequisites": [
            "D10-RES1011"
          ],
          "coRequisites": [],
          "outcomes": [
            "the thesis, defended before human examiners"
          ],
          "assessment": {
            "formative": [
              "worked examples re-run against the published reference",
              "seeded practice scenarios, deterministic per (pan, unit, attempt)"
            ],
            "summative": "examination by people — a model never writes or marks a thesis",
            "passMark": 50,
            "subminimum": 40,
            "moderation": "internally assessed by the unit itself — its reference implementation is the marker; the working is published so anyone can re-run the mark (D-13.1 — no model marks anything)"
          },
          "unitIds": [],
          "notionalHours": 1200
        }
      ],
      "units": [
        {
          "id": "phd_milestones",
          "name": "Milestone plan — the research calendar",
          "answers": "The milestone dates of a doctorate from a start year and a duration, with the credit-to-hours arithmetic.",
          "reference": "Doctoral milestone arithmetic; one credit = ten notional hours (the framework lookup)",
          "example": {
            "startYear": 2027,
            "durationYears": 4,
            "totalCredits": 360
          },
          "signature": {
            "input": {
              "startYear": {
                "type": "number",
                "describe": "start year (whole)",
                "min": 2026,
                "max": 2100
              },
              "durationYears": {
                "type": "number",
                "describe": "planned duration (whole years, 2–8)",
                "min": 2,
                "max": 8
              },
              "totalCredits": {
                "type": "number",
                "describe": "credit size (whole, ≥ 120)",
                "min": 120,
                "max": 720
              }
            },
            "output": {
              "proposalYear": {
                "type": "number",
                "describe": "proposal defended"
              },
              "midpointYear": {
                "type": "number",
                "describe": "midpoint review"
              },
              "submissionYear": {
                "type": "number",
                "describe": "thesis submitted"
              },
              "notionalHours": {
                "type": "number",
                "describe": "credits × 10"
              },
              "hoursPerYear": {
                "type": "number",
                "describe": "notional hours per planned year (1 d.p.)"
              }
            }
          }
        }
      ]
    }
  ]
}