placementt-core 1.400.1017 → 1.400.1019

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { ExternalEvent, StudentActivity } from "./typeDefinitions";
1
+ import { CareersRecordEntry, ExternalEvent, StudentActivity } from "./typeDefinitions";
2
2
  /**
3
3
  * ─── Single source of truth for Gatsby Benchmark *evidence* ───────────────────
4
4
  *
@@ -20,7 +20,25 @@ export type GatsbyBenchmarkNumber = (typeof GATSBY_BENCHMARK_NUMBERS)[number];
20
20
  * Where a benchmark's evidence comes from on CareerThread. Drives how the dashboard
21
21
  * renders each card and whether it can show a coverage percentage at all.
22
22
  */
23
- export type BenchmarkEvidenceSource = "provision" | "destinations" | "events" | "eventsAndActivities" | "eventsAndPlacements" | "untracked";
23
+ export type BenchmarkEvidenceSource = "provision" | "destinations" | "events" | "eventsAndActivities" | "eventsAndPlacements" | "guidance";
24
+ /**
25
+ * ─── Time model ───────────────────────────────────────────────────────────────
26
+ * The period a benchmark's coverage is measured over. This is NOT cosmetic: the
27
+ * benchmarks genuinely differ, and measuring them all annually (as this module
28
+ * originally did) understates coverage badly.
29
+ *
30
+ * BM5 renews every year → "Every year, from the age of 11, at least one
31
+ * meaningful encounter with an employer."
32
+ * BM2 runs per Key Stage → "During each Key Stage, all pupils should access
33
+ * and use information about careers…"
34
+ * BM6/7/8 are cumulative → "By the age of 16… and a further one by 18."
35
+ *
36
+ * The cumulative case is the one that bites. Measured annually, a Year 11 who did
37
+ * their work experience in Year 10 reads as uncovered, and every pupil in Years 7-9
38
+ * sits in the denominator of a duty that does not apply to them until 16 — which is
39
+ * why `biggestGap` currently keeps nominating Year 7 as a school's worst gap on BM6.
40
+ */
41
+ export type BenchmarkTimeModel = "annual" | "keyStage" | "cumulativeByAge" | "provision";
24
42
  export type BenchmarkMeta = {
25
43
  number: GatsbyBenchmarkNumber;
26
44
  /** Short title (no "GB"/"score" wording). */
@@ -30,22 +48,61 @@ export type BenchmarkMeta = {
30
48
  source: BenchmarkEvidenceSource;
31
49
  /**
32
50
  * Whether this benchmark yields a per-student coverage number. False for BM1
33
- * (provision-level, shown as an informational card) and BM8 (untracked, shown
34
- * as an honest empty state). The dashboard must not render a coverage % for a
35
- * benchmark where this is false.
51
+ * (provision-level, shown as an informational card). The dashboard must not
52
+ * render a coverage % for a benchmark where this is false.
36
53
  */
37
54
  countsTowardCoverage: boolean;
38
55
  /** True for 5-7: the PAL Compliance flag is meaningful (mirrors COMPASS_PAL_BENCHMARKS). */
39
56
  palRelevant: boolean;
57
+ /** How coverage is periodised. Drives both the denominator and the card's label. */
58
+ timeModel: BenchmarkTimeModel;
40
59
  };
41
60
  /**
42
- * Benchmarks that produce a coverage percentage on the matrix / cards. Deliberately
43
- * BM2-8 excluding the two that can't be a per-student coverage number: BM1
44
- * (provision) and BM8 (untracked). Derived from the Compass export's valid set so
45
- * the two files can't drift.
61
+ * Benchmarks that produce a coverage percentage on the matrix / cards. BM1 is the
62
+ * only exclusion: it is whole-programme provision and can never be a per-pupil
63
+ * number. Derived from the Compass export's valid set (2-8) so the two files can't
64
+ * drift.
65
+ *
66
+ * BM8 was previously excluded here because personal guidance was untracked. It is
67
+ * now recorded on the careers record, so it earns a coverage number like the rest —
68
+ * but a cumulative, age-banded one. See BENCHMARK_AGE_CHECKPOINTS.
46
69
  */
47
70
  export declare const BENCHMARK_COVERAGE_NUMBERS: GatsbyBenchmarkNumber[];
48
71
  export declare const BENCHMARK_META: Record<GatsbyBenchmarkNumber, BenchmarkMeta>;
72
+ /**
73
+ * ─── Age checkpoints for cumulative benchmarks ────────────────────────────────
74
+ * BM6, BM7 and BM8 are all phrased as "by the age of 16… and by 18". Coverage for
75
+ * these is judged at the two points where the duty actually falls due, not spread
76
+ * across every year group: asking what proportion of Year 7 has had a personal
77
+ * guidance meeting measures nothing, because none of them are due one yet.
78
+ *
79
+ * The headline figure for each checkpoint is therefore the *due* cohort — the year
80
+ * group at which the duty has just become expected. Earlier year groups still get a
81
+ * progression figure (are we on track?), but they must not drag the headline down.
82
+ */
83
+ export type BenchmarkAgeCheckpoint = {
84
+ /** The age the benchmark names. */
85
+ age: 16 | 18;
86
+ /** The year group at which the duty has fallen due in full. */
87
+ dueYearGroup: number;
88
+ /** Year groups the duty is accumulating across, up to and including the due one. */
89
+ accumulatingYearGroups: number[];
90
+ label: string;
91
+ };
92
+ export declare const BENCHMARK_AGE_CHECKPOINTS: BenchmarkAgeCheckpoint[];
93
+ /** The checkpoint a year group is working towards, or undefined if off-scale. */
94
+ export declare function ageCheckpointForYearGroup(yearGroup: number): BenchmarkAgeCheckpoint | undefined;
95
+ /**
96
+ * The pupil's year group at some earlier date, back-derived from their current year
97
+ * group. Records written before `yearGroupAtEntry` existed (and every placement and
98
+ * event, which never carried one) have no snapshot, so cumulative coverage has to
99
+ * reconstruct it: each academic year that has elapsed since the record is one year
100
+ * group to subtract.
101
+ *
102
+ * Returns undefined when the result falls outside schooling, which is the honest
103
+ * answer for a record whose date predates the pupil joining.
104
+ */
105
+ export declare function yearGroupAtDate(currentYearGroup: number, recordDate: string | undefined, now?: Date | string): number | undefined;
49
106
  /**
50
107
  * StudentActivity.activityType → the benchmark(s) that activity is evidence for.
51
108
  * Employer-facing encounters count towards BM5; first-hand workplace experiences
@@ -80,6 +137,23 @@ export declare function eventEvidenceBenchmarks(event: Pick<ExternalEvent, "gats
80
137
  export declare function eventProvidesBenchmark(event: Pick<ExternalEvent, "gatsbyBenchmarks">, benchmark: GatsbyBenchmarkNumber): boolean;
81
138
  /** The benchmarks a logged student activity is evidence for. */
82
139
  export declare function activityEvidenceBenchmarks(activity: Pick<StudentActivity, "activityType">): GatsbyBenchmarkNumber[];
140
+ /**
141
+ * ─── Careers record entries as evidence ───────────────────────────────────────
142
+ * Every entry is BM3 evidence: the updated Benchmark 3 asks schools to record the
143
+ * individual advice given to each pupil and any decisions subsequently agreed, and
144
+ * makes no distinction between a formal guidance interview and an option-choice
145
+ * conversation for that purpose.
146
+ *
147
+ * BM8 is far narrower. It is satisfied only by a personal guidance meeting with a
148
+ * careers adviser trained to an appropriate level. A school that logs fifty tutor-time
149
+ * careers chats has kept excellent records and has NOT delivered personal guidance, so
150
+ * only `personalGuidance` entries with `adviserQualified` count here. Loosening this
151
+ * would manufacture compliance with a statutory expectation, which is the one thing
152
+ * this module exists to prevent.
153
+ */
154
+ export declare function isPersonalGuidanceEntry(entry: Pick<CareersRecordEntry, "entryType" | "adviserQualified">): boolean;
155
+ /** The benchmarks a careers record entry is evidence for. */
156
+ export declare function careersRecordEvidenceBenchmarks(entry: Pick<CareersRecordEntry, "entryType" | "adviserQualified">): GatsbyBenchmarkNumber[];
83
157
  /**
84
158
  * A PAL-compliant provider encounter: the event carries the existing PAL flag AND
85
159
  * is tagged with a PAL-relevant benchmark (5-7). Same rule the export uses when
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PAL_PHASES = exports.PAL_ENCOUNTERS_PER_PHASE = exports.ACTIVITY_TYPE_BENCHMARKS = exports.BENCHMARK_META = exports.BENCHMARK_COVERAGE_NUMBERS = exports.GATSBY_BENCHMARK_NUMBERS = void 0;
3
+ exports.PAL_PHASES = exports.PAL_ENCOUNTERS_PER_PHASE = exports.ACTIVITY_TYPE_BENCHMARKS = exports.BENCHMARK_AGE_CHECKPOINTS = exports.BENCHMARK_META = exports.BENCHMARK_COVERAGE_NUMBERS = exports.GATSBY_BENCHMARK_NUMBERS = void 0;
4
+ exports.ageCheckpointForYearGroup = ageCheckpointForYearGroup;
5
+ exports.yearGroupAtDate = yearGroupAtDate;
4
6
  exports.eventEvidenceBenchmarks = eventEvidenceBenchmarks;
5
7
  exports.eventProvidesBenchmark = eventProvidesBenchmark;
6
8
  exports.activityEvidenceBenchmarks = activityEvidenceBenchmarks;
9
+ exports.isPersonalGuidanceEntry = isPersonalGuidanceEntry;
10
+ exports.careersRecordEvidenceBenchmarks = careersRecordEvidenceBenchmarks;
7
11
  exports.isPalCompliantProviderEncounter = isPalCompliantProviderEncounter;
8
12
  exports.palPhaseForYearGroup = palPhaseForYearGroup;
9
13
  exports.academicYearForDate = academicYearForDate;
@@ -28,12 +32,16 @@ const compassExport_1 = require("./compassExport");
28
32
  */
29
33
  exports.GATSBY_BENCHMARK_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8];
30
34
  /**
31
- * Benchmarks that produce a coverage percentage on the matrix / cards. Deliberately
32
- * BM2-8 excluding the two that can't be a per-student coverage number: BM1
33
- * (provision) and BM8 (untracked). Derived from the Compass export's valid set so
34
- * the two files can't drift.
35
+ * Benchmarks that produce a coverage percentage on the matrix / cards. BM1 is the
36
+ * only exclusion: it is whole-programme provision and can never be a per-pupil
37
+ * number. Derived from the Compass export's valid set (2-8) so the two files can't
38
+ * drift.
39
+ *
40
+ * BM8 was previously excluded here because personal guidance was untracked. It is
41
+ * now recorded on the careers record, so it earns a coverage number like the rest —
42
+ * but a cumulative, age-banded one. See BENCHMARK_AGE_CHECKPOINTS.
35
43
  */
36
- exports.BENCHMARK_COVERAGE_NUMBERS = compassExport_1.COMPASS_VALID_ACTIVITY_BENCHMARKS.filter((b) => b !== 8);
44
+ exports.BENCHMARK_COVERAGE_NUMBERS = [...compassExport_1.COMPASS_VALID_ACTIVITY_BENCHMARKS];
37
45
  exports.BENCHMARK_META = {
38
46
  1: {
39
47
  number: 1,
@@ -42,6 +50,7 @@ exports.BENCHMARK_META = {
42
50
  source: "provision",
43
51
  countsTowardCoverage: false,
44
52
  palRelevant: false,
53
+ timeModel: "provision",
45
54
  },
46
55
  2: {
47
56
  number: 2,
@@ -50,6 +59,9 @@ exports.BENCHMARK_META = {
50
59
  source: "events",
51
60
  countsTowardCoverage: true,
52
61
  palRelevant: false,
62
+ // The benchmark's unit is the Key Stage, not the year. Still measured annually
63
+ // until the Key Stage denominator lands — see BENCHMARK_AGE_CHECKPOINTS.
64
+ timeModel: "annual",
53
65
  },
54
66
  3: {
55
67
  number: 3,
@@ -58,6 +70,7 @@ exports.BENCHMARK_META = {
58
70
  source: "destinations",
59
71
  countsTowardCoverage: true,
60
72
  palRelevant: false,
73
+ timeModel: "annual",
61
74
  },
62
75
  4: {
63
76
  number: 4,
@@ -66,6 +79,7 @@ exports.BENCHMARK_META = {
66
79
  source: "events",
67
80
  countsTowardCoverage: true,
68
81
  palRelevant: false,
82
+ timeModel: "annual",
69
83
  },
70
84
  5: {
71
85
  number: 5,
@@ -74,6 +88,9 @@ exports.BENCHMARK_META = {
74
88
  source: "eventsAndActivities",
75
89
  countsTowardCoverage: true,
76
90
  palRelevant: true,
91
+ // The one benchmark whose annual model matches its own wording: "every year,
92
+ // from the age of 11, at least one meaningful encounter with an employer".
93
+ timeModel: "annual",
77
94
  },
78
95
  6: {
79
96
  number: 6,
@@ -82,6 +99,7 @@ exports.BENCHMARK_META = {
82
99
  source: "eventsAndPlacements",
83
100
  countsTowardCoverage: true,
84
101
  palRelevant: true,
102
+ timeModel: "cumulativeByAge",
85
103
  },
86
104
  7: {
87
105
  number: 7,
@@ -90,16 +108,46 @@ exports.BENCHMARK_META = {
90
108
  source: "events",
91
109
  countsTowardCoverage: true,
92
110
  palRelevant: true,
111
+ timeModel: "cumulativeByAge",
93
112
  },
94
113
  8: {
95
114
  number: 8,
96
115
  name: "Personal guidance",
97
- description: "Every pupil has personal guidance interviews with a careers adviser when they need them.",
98
- source: "untracked",
99
- countsTowardCoverage: false,
116
+ description: "Every pupil has a personal guidance meeting with a careers adviser by 16, and a further one by 18.",
117
+ source: "guidance",
118
+ countsTowardCoverage: true,
100
119
  palRelevant: false,
120
+ timeModel: "cumulativeByAge",
101
121
  },
102
122
  };
123
+ exports.BENCHMARK_AGE_CHECKPOINTS = [
124
+ { age: 16, dueYearGroup: 11, accumulatingYearGroups: [7, 8, 9, 10, 11], label: "By age 16" },
125
+ { age: 18, dueYearGroup: 13, accumulatingYearGroups: [12, 13], label: "By age 18" },
126
+ ];
127
+ /** The checkpoint a year group is working towards, or undefined if off-scale. */
128
+ function ageCheckpointForYearGroup(yearGroup) {
129
+ return exports.BENCHMARK_AGE_CHECKPOINTS.find((c) => c.accumulatingYearGroups.includes(yearGroup));
130
+ }
131
+ /**
132
+ * The pupil's year group at some earlier date, back-derived from their current year
133
+ * group. Records written before `yearGroupAtEntry` existed (and every placement and
134
+ * event, which never carried one) have no snapshot, so cumulative coverage has to
135
+ * reconstruct it: each academic year that has elapsed since the record is one year
136
+ * group to subtract.
137
+ *
138
+ * Returns undefined when the result falls outside schooling, which is the honest
139
+ * answer for a record whose date predates the pupil joining.
140
+ */
141
+ function yearGroupAtDate(currentYearGroup, recordDate, now = new Date()) {
142
+ if (!recordDate)
143
+ return undefined;
144
+ const recordYear = parseInt(academicYearForDate(recordDate).split("-")[0], 10);
145
+ const currentYear = parseInt(academicYearForDate(now).split("-")[0], 10);
146
+ if (isNaN(recordYear) || isNaN(currentYear))
147
+ return undefined;
148
+ const derived = currentYearGroup - (currentYear - recordYear);
149
+ return derived >= 1 && derived <= 15 ? derived : undefined;
150
+ }
103
151
  /**
104
152
  * StudentActivity.activityType → the benchmark(s) that activity is evidence for.
105
153
  * Employer-facing encounters count towards BM5; first-hand workplace experiences
@@ -174,6 +222,27 @@ function eventProvidesBenchmark(event, benchmark) {
174
222
  function activityEvidenceBenchmarks(activity) {
175
223
  return exports.ACTIVITY_TYPE_BENCHMARKS[activity.activityType] || [];
176
224
  }
225
+ /**
226
+ * ─── Careers record entries as evidence ───────────────────────────────────────
227
+ * Every entry is BM3 evidence: the updated Benchmark 3 asks schools to record the
228
+ * individual advice given to each pupil and any decisions subsequently agreed, and
229
+ * makes no distinction between a formal guidance interview and an option-choice
230
+ * conversation for that purpose.
231
+ *
232
+ * BM8 is far narrower. It is satisfied only by a personal guidance meeting with a
233
+ * careers adviser trained to an appropriate level. A school that logs fifty tutor-time
234
+ * careers chats has kept excellent records and has NOT delivered personal guidance, so
235
+ * only `personalGuidance` entries with `adviserQualified` count here. Loosening this
236
+ * would manufacture compliance with a statutory expectation, which is the one thing
237
+ * this module exists to prevent.
238
+ */
239
+ function isPersonalGuidanceEntry(entry) {
240
+ return entry.entryType === "personalGuidance" && Boolean(entry.adviserQualified);
241
+ }
242
+ /** The benchmarks a careers record entry is evidence for. */
243
+ function careersRecordEvidenceBenchmarks(entry) {
244
+ return isPersonalGuidanceEntry(entry) ? [3, 8] : [3];
245
+ }
177
246
  /**
178
247
  * A PAL-compliant provider encounter: the event carries the existing PAL flag AND
179
248
  * is tagged with a PAL-relevant benchmark (5-7). Same rule the export uses when
@@ -1 +1 @@
1
- {"version":3,"file":"benchmarkEvidenceRules.js","sourceRoot":"","sources":["../src/benchmarkEvidenceRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"benchmarkEvidenceRules.js","sourceRoot":"","sources":["../src/benchmarkEvidenceRules.ts"],"names":[],"mappings":"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"}
@@ -4,16 +4,27 @@ const benchmarkEvidenceRules_1 = require("./benchmarkEvidenceRules");
4
4
  const compassExport_1 = require("./compassExport");
5
5
  describe("benchmarkEvidenceRules single-source consistency", () => {
6
6
  it("stays consistent with the Compass export's valid activity benchmarks (2-8)", () => {
7
- // Coverage numbers are the export-valid set minus BM8 (untracked on CareerThread).
8
- expect(benchmarkEvidenceRules_1.BENCHMARK_COVERAGE_NUMBERS).toEqual(compassExport_1.COMPASS_VALID_ACTIVITY_BENCHMARKS.filter((b) => b !== 8));
7
+ // Coverage numbers are exactly the export-valid set. BM8 joined it when personal
8
+ // guidance became recordable on the careers record; BM1 was never in it.
9
+ expect(benchmarkEvidenceRules_1.BENCHMARK_COVERAGE_NUMBERS).toEqual([...compassExport_1.COMPASS_VALID_ACTIVITY_BENCHMARKS]);
9
10
  expect(benchmarkEvidenceRules_1.BENCHMARK_COVERAGE_NUMBERS).not.toContain(1);
10
- expect(benchmarkEvidenceRules_1.BENCHMARK_COVERAGE_NUMBERS).not.toContain(8);
11
+ expect(benchmarkEvidenceRules_1.BENCHMARK_COVERAGE_NUMBERS).toContain(8);
11
12
  });
12
- it("marks BM1 as provision-level and BM8 as untracked — neither counts toward coverage", () => {
13
+ it("marks BM1 as the only provision-level benchmark, and BM8 as guidance-sourced", () => {
13
14
  expect(benchmarkEvidenceRules_1.BENCHMARK_META[1].countsTowardCoverage).toBe(false);
14
15
  expect(benchmarkEvidenceRules_1.BENCHMARK_META[1].source).toBe("provision");
15
- expect(benchmarkEvidenceRules_1.BENCHMARK_META[8].countsTowardCoverage).toBe(false);
16
- expect(benchmarkEvidenceRules_1.BENCHMARK_META[8].source).toBe("untracked");
16
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[8].countsTowardCoverage).toBe(true);
17
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[8].source).toBe("guidance");
18
+ });
19
+ it("periodises each benchmark the way its own wording does", () => {
20
+ // BM5 is the only benchmark that genuinely renews annually ("every year, from
21
+ // the age of 11"). BM6/7/8 are cumulative duties pinned to 16 and 18, and
22
+ // measuring them annually understates coverage — see BenchmarkTimeModel.
23
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[5].timeModel).toBe("annual");
24
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[6].timeModel).toBe("cumulativeByAge");
25
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[7].timeModel).toBe("cumulativeByAge");
26
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[8].timeModel).toBe("cumulativeByAge");
27
+ expect(benchmarkEvidenceRules_1.BENCHMARK_META[1].timeModel).toBe("provision");
17
28
  });
18
29
  it("flags PAL relevance for exactly benchmarks 5-7", () => {
19
30
  [1, 2, 3, 4, 5, 6, 7, 8].forEach((b) => {
@@ -74,4 +85,59 @@ describe("coverage bands are neutral (no pass/fail theatre)", () => {
74
85
  expect((0, benchmarkEvidenceRules_1.coverageBand)(1)).toBe("full");
75
86
  });
76
87
  });
88
+ describe("careers record entries as benchmark evidence", () => {
89
+ it("counts a qualified adviser's personal guidance towards BM8", () => {
90
+ const entry = { entryType: "personalGuidance", adviserQualified: true };
91
+ expect((0, benchmarkEvidenceRules_1.isPersonalGuidanceEntry)(entry)).toBe(true);
92
+ expect((0, benchmarkEvidenceRules_1.careersRecordEvidenceBenchmarks)(entry)).toEqual([3, 8]);
93
+ });
94
+ it("does NOT count personal guidance from an unqualified adviser towards BM8", () => {
95
+ // The benchmark is satisfied by a meeting with a careers adviser trained to an
96
+ // appropriate level. Counting an untrained member of staff would fabricate
97
+ // compliance with a statutory expectation.
98
+ const entry = { entryType: "personalGuidance", adviserQualified: false };
99
+ expect((0, benchmarkEvidenceRules_1.isPersonalGuidanceEntry)(entry)).toBe(false);
100
+ expect((0, benchmarkEvidenceRules_1.careersRecordEvidenceBenchmarks)(entry)).toEqual([3]);
101
+ });
102
+ it("does NOT let other entry types inflate BM8, however many are logged", () => {
103
+ const others = [
104
+ "careersConversation", "optionsMeeting", "applicationSupport",
105
+ "sendReview", "parentMeeting", "groupGuidance", "other",
106
+ ];
107
+ others.forEach((entryType) => {
108
+ const entry = { entryType, adviserQualified: true };
109
+ expect((0, benchmarkEvidenceRules_1.isPersonalGuidanceEntry)(entry)).toBe(false);
110
+ expect((0, benchmarkEvidenceRules_1.careersRecordEvidenceBenchmarks)(entry)).toEqual([3]);
111
+ });
112
+ });
113
+ it("still treats every entry as BM3 record-keeping evidence", () => {
114
+ expect((0, benchmarkEvidenceRules_1.careersRecordEvidenceBenchmarks)({ entryType: "careersConversation", adviserQualified: false })).toContain(3);
115
+ });
116
+ });
117
+ describe("cumulative age-banded coverage", () => {
118
+ it("maps year groups onto the checkpoint they are working towards", () => {
119
+ expect((0, benchmarkEvidenceRules_1.ageCheckpointForYearGroup)(9)?.age).toBe(16);
120
+ expect((0, benchmarkEvidenceRules_1.ageCheckpointForYearGroup)(11)?.age).toBe(16);
121
+ expect((0, benchmarkEvidenceRules_1.ageCheckpointForYearGroup)(12)?.age).toBe(18);
122
+ expect((0, benchmarkEvidenceRules_1.ageCheckpointForYearGroup)(13)?.age).toBe(18);
123
+ expect((0, benchmarkEvidenceRules_1.ageCheckpointForYearGroup)(6)).toBeUndefined();
124
+ });
125
+ it("back-derives the year group a pupil was in when an older record was made", () => {
126
+ // A Year 11 pupil "now" (2025-26) did work experience in 2024-25, so they were
127
+ // in Year 10 at the time. Without this, BM6 reads them as uncovered.
128
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(11, "2025-03-01", "2026-03-01")).toBe(10);
129
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(11, "2025-11-01", "2026-03-01")).toBe(11);
130
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(13, "2023-10-01", "2026-03-01")).toBe(11);
131
+ });
132
+ it("rolls over at the start of the academic year, not the calendar year", () => {
133
+ // August starts the new academic year, so a record dated 2025-09-01 and one
134
+ // dated 2026-01-01 sit in the same year group.
135
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(11, "2025-09-01", "2026-01-01")).toBe(11);
136
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(11, "2025-07-01", "2026-01-01")).toBe(10);
137
+ });
138
+ it("returns undefined rather than guessing when a date predates schooling", () => {
139
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(11, undefined)).toBeUndefined();
140
+ expect((0, benchmarkEvidenceRules_1.yearGroupAtDate)(7, "2005-01-01", "2026-03-01")).toBeUndefined();
141
+ });
142
+ });
77
143
  //# sourceMappingURL=benchmarkEvidenceRules.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"benchmarkEvidenceRules.test.js","sourceRoot":"","sources":["../src/benchmarkEvidenceRules.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"benchmarkEvidenceRules.test.js","sourceRoot":"","sources":["../src/benchmarkEvidenceRules.test.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,4 @@ export * from "./registry";
3
3
  export * from "./destinationsConfig";
4
4
  export * from "./placement";
5
5
  export * from "./events";
6
+ export * from "./jobRoles";
@@ -19,4 +19,5 @@ __exportStar(require("./registry"), exports);
19
19
  __exportStar(require("./destinationsConfig"), exports);
20
20
  __exportStar(require("./placement"), exports);
21
21
  __exportStar(require("./events"), exports);
22
+ __exportStar(require("./jobRoles"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/callables/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6CAA2B;AAC3B,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/callables/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6CAA2B;AAC3B,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B"}