MEM Academy
For OrgsClara

Sprint 6 · Module 05 of 8

Module4 min read · 921 words
Not started

Saved on this device · no account needed

05 — Pricing Calculator

Audience: AEs (paper version), Engineering (JSON spec for future in-app build) Use: Deterministic quote generation. Same inputs → same number, every time.

Paper calculator (AE-usable today)

Fill in steps in order. Show all working in the proposal.

Step 1 — Cohort inputs

InputYour value
Number of cohorts_____
Participants per cohort (avg)_____
Total participants (cohorts × per cohort)_____

Step 2 — Validate against floors

  • Each cohort has ≥15 participants (else: redesign or decline per §04)
  • No cohort >30 participants (else: split into more cohorts)

Step 3 — Calculate base price

LineFormulaValue
A. Base engagement feeFixed£18,000
B. Per-participant fee£900 × total participants£_____
C. Additional cohort fee£6,000 × (cohorts - 1)£_____
SubtotalA + B + C£_____

Step 4 — Apply ONE complexity uplift (if any)

Pick the highest applicable, never stack:

  • Multi-site 3+ locations: +£4,000
  • Out-of-hours per cohort: +£3,000 × cohorts
  • Bespoke curriculum: +£5,000 (needs Delivery Lead sign-off)
  • Welsh/bilingual per cohort: +£4,500 × cohorts
  • Extended KPI reporting: +£2,500
LineValue
D. Complexity uplift£_____
Subtotal after upliftA+B+C+D = £_____

Step 5 — Apply ONE discount (if any)

Pick the most favourable to client, never stack:

  • 3+ cohorts same window: 5% off (B + C only, not A or D)
  • 12-month multi-engagement signed: 10% off total (needs Sales Lead sign-off)
  • Reference client rights: 5% off total (needs marketing sign-off)
LineValue
E. Discount-£_____
Total engagement priceA+B+C+D-E = £_____

Step 6 — Floor check

  • Total ≥ £31,500 (single cohort minimum) OR
  • Total ≥ £25,000 absolute floor

If below floor → escalate per §04 quoting workflow.

Step 7 — Per-participant equivalent (for the proposal)

per_participant_cost = total / total_participants

Show this in the proposal — buyers think in per-head terms.


Worked example sheet (clip into proposals)

Scenario: A UK Local Authority wants to roll out manager mental health training to 75 frontline managers across 3 cohorts, single site, no bespoke needs.

StepCalculationResult
A. BaseFixed£18,000
B. Per-participant£900 × 75£67,500
C. Additional cohorts£6,000 × 2£12,000
D. ComplexityNone£0
SubtotalA+B+C+D£97,500
E. Discount (3+ cohorts: 5% off B+C)-5% × £79,500-£3,975
Total£93,525
Per participant£93,525 / 75£1,247

Frame in proposal: "At £1,247 per manager over 12 weeks, this represents less than 5% of the CIPD-modelled cost of replacing a single frontline manager."


JSON spec (for engineering to build the in-app calculator)

{
  "calculator": {
    "version": "1.0.0",
    "effective_from": "2026-01-01",
    "inputs": {
      "cohorts": { "type": "integer", "min": 1, "max": 12, "required": true },
      "participants_per_cohort": { "type": "integer", "min": 15, "max": 30, "required": true },
      "complexity": {
        "type": "enum",
        "options": ["none", "multi_site", "out_of_hours", "bespoke_curriculum", "welsh_bilingual", "extended_kpi"],
        "default": "none"
      },
      "discount": {
        "type": "enum",
        "options": ["none", "volume_3plus", "annual_commitment", "reference_client"],
        "default": "none"
      }
    },
    "constants": {
      "base_engagement_fee": 18000,
      "per_participant_fee": 900,
      "additional_cohort_fee": 6000,
      "complexity_uplifts": {
        "none": 0,
        "multi_site": 4000,
        "out_of_hours_per_cohort": 3000,
        "bespoke_curriculum": 5000,
        "welsh_bilingual_per_cohort": 4500,
        "extended_kpi": 2500
      },
      "discount_rates": {
        "none": { "type": "none", "value": 0 },
        "volume_3plus": { "type": "pct_of_variable", "value": 0.05 },
        "annual_commitment": { "type": "pct_of_total", "value": 0.10 },
        "reference_client": { "type": "pct_of_total", "value": 0.05 }
      },
      "floors": {
        "absolute_minimum": 25000,
        "single_cohort_minimum": 31500,
        "min_participants_per_cohort": 15,
        "max_participants_per_cohort": 30
      }
    },
    "formula": {
      "a_base": "constants.base_engagement_fee",
      "b_participants": "constants.per_participant_fee * cohorts * participants_per_cohort",
      "c_additional_cohorts": "constants.additional_cohort_fee * (cohorts - 1)",
      "d_complexity": "complexity_uplift_resolved",
      "subtotal": "a + b + c + d",
      "e_discount": "resolve_discount(discount, b+c, subtotal)",
      "total": "subtotal - e",
      "per_participant": "total / (cohorts * participants_per_cohort)"
    },
    "validation": {
      "pre_calc": [
        "participants_per_cohort >= floors.min_participants_per_cohort OR fail('Cohort below min size 15')",
        "participants_per_cohort <= floors.max_participants_per_cohort OR fail('Split cohorts: max 30')",
        "complexity != 'bespoke_curriculum' OR require_signoff('delivery_lead')",
        "discount == 'annual_commitment' IMPLIES require_signoff('sales_lead')",
        "discount == 'reference_client' IMPLIES require_signoff('marketing')"
      ],
      "post_calc": [
        "total >= floors.absolute_minimum OR escalate('below_floor', delivery_lead + sales_lead)",
        "cohorts == 1 AND total < floors.single_cohort_minimum OR escalate('below_floor', delivery_lead + sales_lead)"
      ]
    },
    "outputs": {
      "total": "GBP integer",
      "per_participant": "GBP rounded to nearest £",
      "breakdown": "object with a, b, c, d, e components",
      "warnings": "array of strings",
      "signoffs_required": "array of role names"
    }
  }
}

Engineering implementation notes (for whoever builds the in-app version)

  • Server function: createServerFn at src/lib/pricing.functions.ts.
  • Auth: AE role required (has_role(auth.uid(), 'staff')).
  • Store every quote in a quotes table with: inputs, outputs, breakdown, AE id, timestamp, signoff status.
  • Re-running the calculator on the same quote ID must return identical output (deterministic).
  • UI: form on /staff/pricing-calculator rendering output as the proposal-ready table above.
  • Export: button that copies the worked-example table into clipboard, ready to paste into Proposal §06.

Do not build yet — this lives in this spec until the AE team has used the paper version for 2 quarters and confirmed the formula holds. Premature automation locks in mistakes.

Continue learning

All sprints

Want to roll this out to your team?

Bring Sales Enablement into your organisation.

MEM is a self-serve resource library — your managers and staff work through the modules at their own pace, with the workbooks, runsheets and pocket cards provided. Coach-led delivery is available only for our corporate fitness sessions, not the educational modules. Every funded seat also opens a mirrored free seat for someone leaving prison, with SROI your board can sign off.