placementt-core 1.400.991 → 1.400.993

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.
@@ -2080,19 +2080,30 @@ export type DestinationsRecipientFilter = {
2080
2080
  */
2081
2081
  export type AspirationSurveySlot = SurveySlot;
2082
2082
  /**
2083
- * Per-year-group leaver settings. Used as an override entry in
2083
+ * Per-year-group leaver settings.
2084
+ *
2085
+ * Each leg is scheduled the way every other survey is: a relative rule ("third
2086
+ * Thursday of August") with a materialised MM-DD alongside it as the concrete
2087
+ * fallback — the same pair SurveySlot carries. Results day is why: the exam boards
2088
+ * move it by a few days each year but it is always a Thursday. Staff can still
2089
+ * correct one year's date on the survey page (updateSurveyCycleSettings). Used as an override entry in
2084
2090
  * DestinationsConfig.leavers.byYearGroup — each field replaces the shared leaver
2085
2091
  * default for that year group only. All MM-DD strings are zero-padded.
2086
2092
  */
2087
2093
  export type LeaverYearGroupConfig = {
2088
2094
  intentionsSendMMDD: string;
2095
+ /** Relative rule for the intentions form, materialised into intentionsSendMMDD.
2096
+ * Absent on configs written before leaver dates became rules. */
2097
+ intentionsRule?: SurveyDateRule;
2089
2098
  resultsDay: {
2090
2099
  enabled: boolean;
2091
2100
  sendMMDD: string;
2101
+ rule?: SurveyDateRule;
2092
2102
  };
2093
2103
  christmas: {
2094
2104
  enabled: boolean;
2095
2105
  sendMMDD: string;
2106
+ rule?: SurveyDateRule;
2096
2107
  };
2097
2108
  allStudentsLeave?: boolean;
2098
2109
  };
@@ -2107,7 +2118,8 @@ export type DestinationsConfig = {
2107
2118
  aspirations: {
2108
2119
  enabled: boolean;
2109
2120
  yearGroups: number[];
2110
- /** Shared schedule applied to every selected year group (1–3 sends/year). */
2121
+ /** Shared schedule applied to every selected year group. Any number of sends
2122
+ * per year — a school running one a term is as valid as one a year. */
2111
2123
  surveys: AspirationSurveySlot[];
2112
2124
  /** Optional per-year-group override. When a year group key is present its
2113
2125
  * schedule REPLACES `surveys` for that year group only. */
@@ -2122,13 +2134,16 @@ export type DestinationsConfig = {
2122
2134
  enabled: boolean;
2123
2135
  yearGroups: number[];
2124
2136
  intentionsSendMMDD: string;
2137
+ intentionsRule?: SurveyDateRule;
2125
2138
  resultsDay: {
2126
2139
  enabled: boolean;
2127
2140
  sendMMDD: string;
2141
+ rule?: SurveyDateRule;
2128
2142
  };
2129
2143
  christmas: {
2130
2144
  enabled: boolean;
2131
2145
  sendMMDD: string;
2146
+ rule?: SurveyDateRule;
2132
2147
  };
2133
2148
  /** true → every student in these groups leaves (no internal sixth form). */
2134
2149
  allStudentsLeave?: boolean;
@@ -2146,6 +2161,11 @@ export type DestinationsConfig = {
2146
2161
  approveAlumni: boolean;
2147
2162
  alumniConversations: boolean;
2148
2163
  visibleToStudents: boolean;
2164
+ /** Chase each alumnus once a year for an update. Deliberately the only
2165
+ * scheduling a check-in has: unlike every other kind it isn't a cohort send,
2166
+ * so its date is a year on from that person's last reply, not a date the
2167
+ * school picks. Absent = on, matching the behaviour before the toggle. */
2168
+ annualCheckIns?: boolean;
2149
2169
  };
2150
2170
  /** MM-DD on which each new academic year's objects are created. Default "09-01". */
2151
2171
  provisionMMDD: string;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "placementt-core",
4
4
  "author": "Placementt",
5
- "version": "1.400.991",
5
+ "version": "1.400.993",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
8
8
  "scripts": {
@@ -2022,14 +2022,23 @@ export type DestinationsRecipientFilter = {k: string, e?: WhereFilterOp, v: unkn
2022
2022
  export type AspirationSurveySlot = SurveySlot;
2023
2023
 
2024
2024
  /**
2025
- * Per-year-group leaver settings. Used as an override entry in
2025
+ * Per-year-group leaver settings.
2026
+ *
2027
+ * Each leg is scheduled the way every other survey is: a relative rule ("third
2028
+ * Thursday of August") with a materialised MM-DD alongside it as the concrete
2029
+ * fallback — the same pair SurveySlot carries. Results day is why: the exam boards
2030
+ * move it by a few days each year but it is always a Thursday. Staff can still
2031
+ * correct one year's date on the survey page (updateSurveyCycleSettings). Used as an override entry in
2026
2032
  * DestinationsConfig.leavers.byYearGroup — each field replaces the shared leaver
2027
2033
  * default for that year group only. All MM-DD strings are zero-padded.
2028
2034
  */
2029
2035
  export type LeaverYearGroupConfig = {
2030
2036
  intentionsSendMMDD: string,
2031
- resultsDay: {enabled: boolean, sendMMDD: string},
2032
- christmas: {enabled: boolean, sendMMDD: string},
2037
+ /** Relative rule for the intentions form, materialised into intentionsSendMMDD.
2038
+ * Absent on configs written before leaver dates became rules. */
2039
+ intentionsRule?: SurveyDateRule,
2040
+ resultsDay: {enabled: boolean, sendMMDD: string, rule?: SurveyDateRule},
2041
+ christmas: {enabled: boolean, sendMMDD: string, rule?: SurveyDateRule},
2033
2042
  allStudentsLeave?: boolean,
2034
2043
  };
2035
2044
 
@@ -2045,7 +2054,8 @@ export type DestinationsConfig = {
2045
2054
  aspirations: {
2046
2055
  enabled: boolean,
2047
2056
  yearGroups: number[], // e.g. [7,8,9,10,11]
2048
- /** Shared schedule applied to every selected year group (1–3 sends/year). */
2057
+ /** Shared schedule applied to every selected year group. Any number of sends
2058
+ * per year — a school running one a term is as valid as one a year. */
2049
2059
  surveys: AspirationSurveySlot[],
2050
2060
  /** Optional per-year-group override. When a year group key is present its
2051
2061
  * schedule REPLACES `surveys` for that year group only. */
@@ -2058,9 +2068,12 @@ export type DestinationsConfig = {
2058
2068
  leavers: {
2059
2069
  enabled: boolean,
2060
2070
  yearGroups: number[], // subset of [11, 13]
2071
+ // Each leg is scheduled by relative rule with the MM-DD as its materialised
2072
+ // fallback, the same pair aspiration and skills slots use.
2061
2073
  intentionsSendMMDD: string, // Form B, before they leave — default "06-15"
2062
- resultsDay: {enabled: boolean, sendMMDD: string}, // default "08-29"
2063
- christmas: {enabled: boolean, sendMMDD: string}, // default "12-08"
2074
+ intentionsRule?: SurveyDateRule,
2075
+ resultsDay: {enabled: boolean, sendMMDD: string, rule?: SurveyDateRule}, // default "08-29"
2076
+ christmas: {enabled: boolean, sendMMDD: string, rule?: SurveyDateRule}, // default "12-08"
2064
2077
  /** true → every student in these groups leaves (no internal sixth form). */
2065
2078
  allStudentsLeave?: boolean,
2066
2079
  /** Optional per-year-group override. When a year group key is present its
@@ -2076,6 +2089,11 @@ export type DestinationsConfig = {
2076
2089
  approveAlumni: boolean,
2077
2090
  alumniConversations: boolean,
2078
2091
  visibleToStudents: boolean, // default visibility for new alumni records
2092
+ /** Chase each alumnus once a year for an update. Deliberately the only
2093
+ * scheduling a check-in has: unlike every other kind it isn't a cohort send,
2094
+ * so its date is a year on from that person's last reply, not a date the
2095
+ * school picks. Absent = on, matching the behaviour before the toggle. */
2096
+ annualCheckIns?: boolean,
2079
2097
  },
2080
2098
  /** MM-DD on which each new academic year's objects are created. Default "09-01". */
2081
2099
  provisionMMDD: string,