placementt-core 1.400.1253 → 1.400.1254

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.
@@ -54,8 +54,8 @@ export type BulkEngagementSuggestion = {
54
54
  /**
55
55
  * Whether one email suits one school, and what is missing for it.
56
56
  *
57
- * Renewal emails are suggested by days to renewal, and any other admin email
58
- * to schools whose next onboarding step it is. Neither is suggested to a
57
+ * Renewal emails are suggested to every paying school, and any other admin
58
+ * email to schools whose next onboarding step it is. Neither is suggested to a
59
59
  * school that had it in the last 60 days.
60
60
  *
61
61
  * @param {string} templateKey the admin email template.
@@ -76,3 +76,11 @@ export declare const matchesBulkFilters: (school: {
76
76
  package: string;
77
77
  products: string[];
78
78
  }, { packages, products }: BulkEngagementFilters) => boolean;
79
+ /**
80
+ * How long ago an email went, for the send popup's chips.
81
+ *
82
+ * @param {string} day the day it went, YYYY-MM-DD.
83
+ * @param {Date} now the current time.
84
+ * @return {string} "Today", "1 day ago" or "12 days ago".
85
+ */
86
+ export declare const bulkSentAgo: (day: string, now: Date) => string;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.matchesBulkFilters = exports.bulkEngagementSuggestion = exports.RECENTLY_SENT_DAYS = exports.BULK_TEST_SCHOOLS = exports.BULK_TEST_RECIPIENT = exports.BULK_ENGAGEMENT_PRODUCT_LABELS = exports.BULK_ENGAGEMENT_PRODUCTS = exports.BULK_ENGAGEMENT_PACKAGE_LABELS = exports.BULK_ENGAGEMENT_BLOCKING_FLAGS = exports.BULK_ENGAGEMENT_FLAG_LABELS = void 0;
3
+ exports.bulkSentAgo = exports.matchesBulkFilters = exports.bulkEngagementSuggestion = exports.RECENTLY_SENT_DAYS = exports.BULK_TEST_SCHOOLS = exports.BULK_TEST_RECIPIENT = exports.BULK_ENGAGEMENT_PRODUCT_LABELS = exports.BULK_ENGAGEMENT_PRODUCTS = exports.BULK_ENGAGEMENT_PACKAGE_LABELS = exports.BULK_ENGAGEMENT_BLOCKING_FLAGS = exports.BULK_ENGAGEMENT_FLAG_LABELS = void 0;
4
4
  const renewals_1 = require("./renewals");
5
5
  const constants_1 = require("./constants");
6
+ const outreachRules_1 = require("./outreachRules");
6
7
  exports.BULK_ENGAGEMENT_FLAG_LABELS = {
7
8
  noContacts: "No one to send to",
8
9
  noRenewalDate: "No renewal date",
@@ -31,23 +32,11 @@ exports.BULK_TEST_RECIPIENT = "tom@careerthread.co.uk";
31
32
  exports.BULK_TEST_SCHOOLS = 3;
32
33
  /** A school that had this email this recently isn't suggested it again. */
33
34
  exports.RECENTLY_SENT_DAYS = 60;
34
- /**
35
- * Days to renewal each renewal email is suggested for, inclusive. "paying"
36
- * suggests it to every paying school, date or not.
37
- */
38
- const RENEWAL_SUGGEST_DAYS = {
39
- engagementRenewalPrice: [61, 365],
40
- engagementRenewalReview: "paying",
41
- engagementRenewalDue: [31, 90],
42
- engagementRenewalInvoice: [0, 45],
43
- // A date this far off has most likely just moved on a year.
44
- engagementRenewalThanks: [300, 400],
45
- };
46
35
  /**
47
36
  * Whether one email suits one school, and what is missing for it.
48
37
  *
49
- * Renewal emails are suggested by days to renewal, and any other admin email
50
- * to schools whose next onboarding step it is. Neither is suggested to a
38
+ * Renewal emails are suggested to every paying school, and any other admin
39
+ * email to schools whose next onboarding step it is. Neither is suggested to a
51
40
  * school that had it in the last 60 days.
52
41
  *
53
42
  * @param {string} templateKey the admin email template.
@@ -73,17 +62,9 @@ const bulkEngagementSuggestion = (templateKey, school) => {
73
62
  const none = { suggested: false, flags };
74
63
  if (recent || flags.some((f) => exports.BULK_ENGAGEMENT_BLOCKING_FLAGS.includes(f)))
75
64
  return none;
76
- const window = RENEWAL_SUGGEST_DAYS[templateKey];
77
- if (!window)
65
+ if (!renewals_1.RENEWAL_EMAIL_TEMPLATES.includes(templateKey))
78
66
  return nextOnboardingTemplate === templateKey ? { suggested: true, reason: "Their next onboarding step", flags } : none;
79
- if (!renewal.applies)
80
- return none;
81
- if (window === "paying")
82
- return { suggested: true, reason: "Paying customer", flags };
83
- const days = renewal.daysToRenewal;
84
- if (days === undefined || days < window[0] || days > window[1])
85
- return none;
86
- return { suggested: true, reason: `Renews in ${days} days`, flags };
67
+ return renewal.applies ? { suggested: true, reason: "Paying customer", flags } : none;
87
68
  };
88
69
  exports.bulkEngagementSuggestion = bulkEngagementSuggestion;
89
70
  /**
@@ -98,4 +79,18 @@ exports.bulkEngagementSuggestion = bulkEngagementSuggestion;
98
79
  const matchesBulkFilters = (school, { packages, products }) => (!packages.length || packages.includes(school.package)) &&
99
80
  (!products.length || products.some((p) => school.products.includes(p)));
100
81
  exports.matchesBulkFilters = matchesBulkFilters;
82
+ /**
83
+ * How long ago an email went, for the send popup's chips.
84
+ *
85
+ * @param {string} day the day it went, YYYY-MM-DD.
86
+ * @param {Date} now the current time.
87
+ * @return {string} "Today", "1 day ago" or "12 days ago".
88
+ */
89
+ const bulkSentAgo = (day, now) => {
90
+ const days = Math.round((Date.parse(`${(0, outreachRules_1.londonYmd)(now)}T00:00:00Z`) - Date.parse(`${day.slice(0, 10)}T00:00:00Z`)) / 86400000);
91
+ if (days <= 0)
92
+ return "Today";
93
+ return days === 1 ? "1 day ago" : `${days} days ago`;
94
+ };
95
+ exports.bulkSentAgo = bulkSentAgo;
101
96
  //# sourceMappingURL=bulkEngagement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bulkEngagement.js","sourceRoot":"","sources":["../src/bulkEngagement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bulkEngagement.js","sourceRoot":"","sources":["../src/bulkEngagement.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ jest.mock("./firebase/firebaseQuery", () => ({ __esModule: true, default: class
6
6
  const productResolver_1 = require("./productResolver");
7
7
  const bulkEngagement_1 = require("./bulkEngagement");
8
8
  const engagement_1 = require("./callables/engagement");
9
+ const constants_1 = require("./constants");
9
10
  const school = (renewalDate, overrides = {}) => ({
10
11
  name: "Calder Park Academy",
11
12
  package: "institutes-one",
@@ -23,37 +24,23 @@ const suggest = (templateKey, institute, date, extra = {}) => (0, bulkEngagement
23
24
  lastSent: extra.lastSent,
24
25
  });
25
26
  describe("bulk engagement suggestions", () => {
26
- it("suggests the 60-day email to schools renewing in 31 to 90 days", () => {
27
- expect(suggest("engagementRenewalDue", school("2027-01-10"), "2026-11-04")).toMatchObject({ suggested: true, reason: "Renews in 67 days" });
28
- expect(suggest("engagementRenewalDue", school("2027-06-10"), "2026-11-04").suggested).toBe(false);
29
- expect(suggest("engagementRenewalDue", school("2026-11-20"), "2026-11-04").suggested).toBe(false);
30
- });
31
- it("suggests the invoice email inside 45 days, and next year's price further out", () => {
32
- expect(suggest("engagementRenewalInvoice", school("2026-11-20"), "2026-11-04").suggested).toBe(true);
33
- expect(suggest("engagementRenewalPrice", school("2027-06-10"), "2026-11-04").suggested).toBe(true);
34
- expect(suggest("engagementRenewalPrice", school("2026-11-20"), "2026-11-04").suggested).toBe(false);
35
- });
36
- it("suggests the year in review to every paying school, and thanks to those just renewed", () => {
37
- expect(suggest("engagementRenewalReview", school(), "2026-11-04").suggested).toBe(true);
38
- expect(suggest("engagementRenewalThanks", school("2027-10-20"), "2026-11-04").suggested).toBe(true);
39
- expect(suggest("engagementRenewalThanks", school("2027-01-10"), "2026-11-04").suggested).toBe(false);
27
+ it("suggests the check-in to every paying school, date or not", () => {
28
+ expect(suggest("engagementRenewalCheckIn", school("2027-06-10"), "2026-11-04")).toMatchObject({ suggested: true, reason: "Paying customer" });
29
+ expect(suggest("engagementRenewalCheckIn", school(), "2026-11-04").suggested).toBe(true);
40
30
  });
41
31
  it("leaves out hub schools", () => {
42
- expect(suggest("engagementRenewalDue", school("2027-01-10", { package: "careersSchool" }), "2026-11-04").suggested).toBe(false);
32
+ expect(suggest("engagementRenewalCheckIn", school("2027-01-10", { package: "careersSchool" }), "2026-11-04").suggested).toBe(false);
43
33
  });
44
34
  it("doesn't suggest an email the school had in the last 60 days", () => {
45
- const recent = suggest("engagementRenewalDue", school("2027-01-10"), "2026-11-04", { lastSent: "2026-10-01T09:00:00Z" });
35
+ const recent = suggest("engagementRenewalCheckIn", school("2027-01-10"), "2026-11-04", { lastSent: "2026-10-01T09:00:00Z" });
46
36
  expect(recent).toMatchObject({ suggested: false, flags: expect.arrayContaining(["sentRecently"]) });
47
- expect(suggest("engagementRenewalDue", school("2027-01-10"), "2026-11-04", { lastSent: "2026-06-01T09:00:00Z" }).suggested).toBe(true);
37
+ expect(suggest("engagementRenewalCheckIn", school("2027-01-10"), "2026-11-04", { lastSent: "2026-06-01T09:00:00Z" }).suggested).toBe(true);
48
38
  });
49
- it("flags what the email is missing", () => {
50
- expect(suggest("engagementRenewalDue", school(), "2026-11-04", { hasQuote: false }).flags)
51
- .toEqual(["noRenewalDate", "noQuote", "noFinanceContact"]);
52
- const withFinance = school("2027-01-10", { financeContact: { name: "Pat Lee", email: "pat@school.org" } });
53
- expect(suggest("engagementRenewalDue", withFinance, "2026-11-04").flags).toEqual([]);
39
+ it("needs no renewal date, quote or finance contact for the check-in", () => {
40
+ expect(suggest("engagementRenewalCheckIn", school(), "2026-11-04", { hasQuote: false }).flags).toEqual([]);
54
41
  });
55
42
  it("never suggests a school with no one to send to", () => {
56
- expect(suggest("engagementRenewalReview", school(), "2026-11-04", { contactCount: 0 })).toMatchObject({ suggested: false, flags: ["noContacts"] });
43
+ expect(suggest("engagementRenewalCheckIn", school(), "2026-11-04", { contactCount: 0 })).toMatchObject({ suggested: false, flags: ["noContacts"] });
57
44
  });
58
45
  it("suggests an onboarding email to schools whose next step it is", () => {
59
46
  expect(suggest("engagementPickFeatures", school(), "2026-11-04", { nextOnboardingTemplate: "engagementPickFeatures" }))
@@ -102,7 +89,7 @@ describe("matchesBulkFilters", () => {
102
89
  });
103
90
  describe("sendBulkEngagementTest contract", () => {
104
91
  const request = (count) => ({
105
- templateKey: "engagementRenewalDue",
92
+ templateKey: "engagementRenewalCheckIn",
106
93
  oIds: Array.from({ length: count }, (_, i) => `school-${i}`),
107
94
  subject: "Renewing",
108
95
  body: [{ type: "paragraph" }],
@@ -116,4 +103,22 @@ describe("sendBulkEngagementTest contract", () => {
116
103
  expect(contract.parse({ ...request(1), to: "someone@school.sch.uk" })).not.toHaveProperty("to");
117
104
  });
118
105
  });
106
+ describe("bulkSentAgo", () => {
107
+ const now = new Date("2026-11-04T09:00:00Z");
108
+ it("counts whole days, from a day or a full date", () => {
109
+ expect((0, bulkEngagement_1.bulkSentAgo)("2026-11-04", now)).toBe("Today");
110
+ expect((0, bulkEngagement_1.bulkSentAgo)("2026-11-03", now)).toBe("1 day ago");
111
+ expect((0, bulkEngagement_1.bulkSentAgo)("2026-10-23", now)).toBe("12 days ago");
112
+ expect((0, bulkEngagement_1.bulkSentAgo)("2026-10-23T15:00:00Z", now)).toBe("12 days ago");
113
+ });
114
+ });
115
+ describe("the check-in's button", () => {
116
+ it("goes to the Calendly link, not a page on CareerThread", () => {
117
+ const link = constants_1.emailTemplates.engagementRenewalCheckIn.button?.link;
118
+ expect((0, constants_1.emailButtonUrl)(link)).toBe("https://calendly.com/tom-careerthread/30min");
119
+ });
120
+ it("still puts ordinary links on CareerThread", () => {
121
+ expect((0, constants_1.emailButtonUrl)("/institutes/home")).toBe("https://careerthread.co.uk/institutes/home");
122
+ });
123
+ });
119
124
  //# sourceMappingURL=bulkEngagement.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bulkEngagement.test.js","sourceRoot":"","sources":["../src/bulkEngagement.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bulkEngagement.test.js","sourceRoot":"","sources":["../src/bulkEngagement.test.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,17 @@ export declare const engagementCallables: {
23
23
  contacts: z.ZodNumber;
24
24
  /** ISO date this email last went to the school, if it has. */
25
25
  lastSent: z.ZodOptional<z.ZodString>;
26
+ /** The last engagement email of any kind that went to the school, if one has. */
27
+ lastEmail: z.ZodOptional<z.ZodObject<{
28
+ title: z.ZodString;
29
+ sentDay: z.ZodString;
30
+ }, "strip", z.ZodTypeAny, {
31
+ title: string;
32
+ sentDay: string;
33
+ }, {
34
+ title: string;
35
+ sentDay: string;
36
+ }>>;
26
37
  /** The school's params, for previewing the email as they'd get it. */
27
38
  params: z.ZodRecord<z.ZodString, z.ZodString>;
28
39
  }, "strip", z.ZodTypeAny, {
@@ -36,6 +47,10 @@ export declare const engagementCallables: {
36
47
  suggested: boolean;
37
48
  reason?: string | undefined;
38
49
  lastSent?: string | undefined;
50
+ lastEmail?: {
51
+ title: string;
52
+ sentDay: string;
53
+ } | undefined;
39
54
  }, {
40
55
  name: string;
41
56
  oId: string;
@@ -47,6 +62,10 @@ export declare const engagementCallables: {
47
62
  suggested: boolean;
48
63
  reason?: string | undefined;
49
64
  lastSent?: string | undefined;
65
+ lastEmail?: {
66
+ title: string;
67
+ sentDay: string;
68
+ } | undefined;
50
69
  }>, "many">;
51
70
  }, "strip", z.ZodTypeAny, {
52
71
  schools: {
@@ -60,6 +79,10 @@ export declare const engagementCallables: {
60
79
  suggested: boolean;
61
80
  reason?: string | undefined;
62
81
  lastSent?: string | undefined;
82
+ lastEmail?: {
83
+ title: string;
84
+ sentDay: string;
85
+ } | undefined;
63
86
  }[];
64
87
  }, {
65
88
  schools: {
@@ -73,6 +96,10 @@ export declare const engagementCallables: {
73
96
  suggested: boolean;
74
97
  reason?: string | undefined;
75
98
  lastSent?: string | undefined;
99
+ lastEmail?: {
100
+ title: string;
101
+ sentDay: string;
102
+ } | undefined;
76
103
  }[];
77
104
  }>;
78
105
  };
@@ -33,6 +33,8 @@ exports.engagementCallables = {
33
33
  contacts: zod_1.z.number(),
34
34
  /** ISO date this email last went to the school, if it has. */
35
35
  lastSent: zod_1.z.string().optional(),
36
+ /** The last engagement email of any kind that went to the school, if one has. */
37
+ lastEmail: zod_1.z.object({ title: zod_1.z.string(), sentDay: zod_1.z.string() }).optional(),
36
38
  /** The school's params, for previewing the email as they'd get it. */
37
39
  params: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
38
40
  })),
@@ -1 +1 @@
1
- {"version":3,"file":"engagement.js","sourceRoot":"","sources":["../../src/callables/engagement.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AACtB,mCAAqD;AAErD;;;;;;;GAOG;AAEH,MAAM,IAAI,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;AACpG,MAAM,OAAO,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;AAErD,QAAA,mBAAmB,GAAG;IAC/B,yCAAyC,EAAE;QACvC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,mEAAmE;YACnE,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SACjC,CAAC;QACF,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;gBACtB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;gBACf,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;gBAChB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;gBACnB,wDAAwD;gBACxD,QAAQ,EAAE,OAAC,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC1B,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;gBACtB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC7B,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACpB,wDAAwD;gBACxD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;gBACpB,8DAA8D;gBAC9D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC/B,sEAAsE;gBACtE,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC;aAC3C,CAAC,CAAC;SACN,CAAC;KACL;IACD,wCAAwC,EAAE;QACtC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7E,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC;YACvD,8EAA8E;YAC9E,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,4DAA4D;YAC5D,SAAS,EAAE,IAAA,qBAAa,EAAC,OAAC,CAAC,MAAM,EAAE,CAAC;YACpC,oFAAoF;YACpF,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;SACzB,CAAC;QACF,+DAA+D;QAC/D,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;SACrG,CAAC;KACL;IACD;;;;OAIG;IACH,uCAAuC,EAAE;QACrC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC;YACvD,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,SAAS,EAAE,IAAA,qBAAa,EAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SACvC,CAAC;QACF,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;SACrG,CAAC;KACL;IACD,qFAAqF;IACrF,uCAAuC,EAAE;QACrC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,EAAC,CAAC;KAC5C;CACoB,CAAC"}
1
+ {"version":3,"file":"engagement.js","sourceRoot":"","sources":["../../src/callables/engagement.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,16 @@ export declare const allCallables: {
30
30
  flags: z.ZodArray<z.ZodEnum<["noContacts", "noRenewalDate", "noQuote", "noFinanceContact", "sentRecently"]>, "many">;
31
31
  contacts: z.ZodNumber;
32
32
  lastSent: z.ZodOptional<z.ZodString>;
33
+ lastEmail: z.ZodOptional<z.ZodObject<{
34
+ title: z.ZodString;
35
+ sentDay: z.ZodString;
36
+ }, "strip", z.ZodTypeAny, {
37
+ title: string;
38
+ sentDay: string;
39
+ }, {
40
+ title: string;
41
+ sentDay: string;
42
+ }>>;
33
43
  params: z.ZodRecord<z.ZodString, z.ZodString>;
34
44
  }, "strip", z.ZodTypeAny, {
35
45
  name: string;
@@ -42,6 +52,10 @@ export declare const allCallables: {
42
52
  suggested: boolean;
43
53
  reason?: string | undefined;
44
54
  lastSent?: string | undefined;
55
+ lastEmail?: {
56
+ title: string;
57
+ sentDay: string;
58
+ } | undefined;
45
59
  }, {
46
60
  name: string;
47
61
  oId: string;
@@ -53,6 +67,10 @@ export declare const allCallables: {
53
67
  suggested: boolean;
54
68
  reason?: string | undefined;
55
69
  lastSent?: string | undefined;
70
+ lastEmail?: {
71
+ title: string;
72
+ sentDay: string;
73
+ } | undefined;
56
74
  }>, "many">;
57
75
  }, "strip", z.ZodTypeAny, {
58
76
  schools: {
@@ -66,6 +84,10 @@ export declare const allCallables: {
66
84
  suggested: boolean;
67
85
  reason?: string | undefined;
68
86
  lastSent?: string | undefined;
87
+ lastEmail?: {
88
+ title: string;
89
+ sentDay: string;
90
+ } | undefined;
69
91
  }[];
70
92
  }, {
71
93
  schools: {
@@ -79,6 +101,10 @@ export declare const allCallables: {
79
101
  suggested: boolean;
80
102
  reason?: string | undefined;
81
103
  lastSent?: string | undefined;
104
+ lastEmail?: {
105
+ title: string;
106
+ sentDay: string;
107
+ } | undefined;
82
108
  }[];
83
109
  }>;
84
110
  };
@@ -8053,6 +8079,16 @@ export declare const callableGroups: {
8053
8079
  flags: z.ZodArray<z.ZodEnum<["noContacts", "noRenewalDate", "noQuote", "noFinanceContact", "sentRecently"]>, "many">;
8054
8080
  contacts: z.ZodNumber;
8055
8081
  lastSent: z.ZodOptional<z.ZodString>;
8082
+ lastEmail: z.ZodOptional<z.ZodObject<{
8083
+ title: z.ZodString;
8084
+ sentDay: z.ZodString;
8085
+ }, "strip", z.ZodTypeAny, {
8086
+ title: string;
8087
+ sentDay: string;
8088
+ }, {
8089
+ title: string;
8090
+ sentDay: string;
8091
+ }>>;
8056
8092
  params: z.ZodRecord<z.ZodString, z.ZodString>;
8057
8093
  }, "strip", z.ZodTypeAny, {
8058
8094
  name: string;
@@ -8065,6 +8101,10 @@ export declare const callableGroups: {
8065
8101
  suggested: boolean;
8066
8102
  reason?: string | undefined;
8067
8103
  lastSent?: string | undefined;
8104
+ lastEmail?: {
8105
+ title: string;
8106
+ sentDay: string;
8107
+ } | undefined;
8068
8108
  }, {
8069
8109
  name: string;
8070
8110
  oId: string;
@@ -8076,6 +8116,10 @@ export declare const callableGroups: {
8076
8116
  suggested: boolean;
8077
8117
  reason?: string | undefined;
8078
8118
  lastSent?: string | undefined;
8119
+ lastEmail?: {
8120
+ title: string;
8121
+ sentDay: string;
8122
+ } | undefined;
8079
8123
  }>, "many">;
8080
8124
  }, "strip", z.ZodTypeAny, {
8081
8125
  schools: {
@@ -8089,6 +8133,10 @@ export declare const callableGroups: {
8089
8133
  suggested: boolean;
8090
8134
  reason?: string | undefined;
8091
8135
  lastSent?: string | undefined;
8136
+ lastEmail?: {
8137
+ title: string;
8138
+ sentDay: string;
8139
+ } | undefined;
8092
8140
  }[];
8093
8141
  }, {
8094
8142
  schools: {
@@ -8102,6 +8150,10 @@ export declare const callableGroups: {
8102
8150
  suggested: boolean;
8103
8151
  reason?: string | undefined;
8104
8152
  lastSent?: string | undefined;
8153
+ lastEmail?: {
8154
+ title: string;
8155
+ sentDay: string;
8156
+ } | undefined;
8105
8157
  }[];
8106
8158
  }>;
8107
8159
  };
@@ -208,6 +208,13 @@ export declare const defaultApplicantWorkflow: ApplicantStage[];
208
208
  export declare const emailTemplates: {
209
209
  [key: string]: EmailTemplateConfig;
210
210
  };
211
+ /**
212
+ * Where an email button goes: a page on CareerThread, or a full link as it is.
213
+ *
214
+ * @param {string} link the button's link from its template.
215
+ * @return {string} the full URL.
216
+ */
217
+ export declare const emailButtonUrl: (link: string) => string;
211
218
  export declare function productTagAvailable(tag: ProductTag | undefined, products?: ResolvedProducts): boolean;
212
219
  export declare function emailTemplateAvailable(templateKey: string | undefined, products?: ResolvedProducts): boolean;
213
220
  export declare const productTagLabels: {
package/lib/constants.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MISQueryParams = exports.emailTemplateExampleData = exports.emailTemplateProductLabels = exports.productTagLabels = exports.emailTemplates = exports.defaultApplicantWorkflow = exports.mobileCountryCodes = exports.ERROR_COLOR = exports.SUCCESS_COLOR = exports.WARNING_COLOR = exports.INFO_COLOR = exports.INFOBACKGROUNDCOLOR = exports.INFOTEXTCOLOR = exports.WARNINGBACKGROUNDCOLOR = exports.WARNINGTEXTCOLOR = exports.SUCCESSBACKGROUNDCOLOR = exports.SUCCESSTEXTCOLOR = exports.ERRORBACKGROUNDCOLOR = exports.ERRORTEXTCOLOR = exports.STUDENT_COLOUR = exports.PROVIDER_COLOUR = exports.INSTITUTE_COLOUR = exports.SECONDARY_COLOUR = exports.LOGO_TERTIARY_COLOUR = exports.LOGO_SECONDARY_COLOUR = exports.EMAIL_HERO_SIZE = exports.PRIMARY_COLOUR = exports.MICROSOFT_SSO_GUIDE_URL = exports.MICROSOFT_ISSUER_HOST = exports.MICROSOFT_AUTHORITY = exports.MICROSOFT_CLIENT_ID = exports.DEFAULT_ACTIVITY_REFLECTION_FORM = exports.studentActivityCategory = exports.ACTIVITY_SCHEMAS = exports.DEFAULT_ACTIVITY_DESCRIPTION = exports.ACTIVITY_TYPE_DESCRIPTION = exports.ACTIVITY_TYPE_ORGANISATION = exports.activityProfile = exports.ACTIVITY_TYPE_PROFILE = exports.ACTIVITY_PROFILES = exports.ACTIVITY_TYPE_TITLE = exports.ACTIVITY_TYPES_BY_CATEGORY = exports.STUDENT_ACTIVITY_CATEGORIES = exports.DEFAULT_ACTIVITY_REFLECTION_FORM_ID = exports.sampleTargets = exports.flagCodes = exports.defaultStudentWorkflow = exports.defaultInstituteWorkflow = exports.countryList = exports.providerCodes = void 0;
4
- exports.DFE_CONTACT_UPLOAD_COLUMNS = exports.OUTREACH_DEFAULT_DEFER_MONTHS = exports.outreachDeliverabilityLabels = exports.outreachStatusColours = exports.outreachStatusLabels = exports.outreachStatusOrder = exports.SCHEDULED_CHECK_REMINDER_LEAD_DAYS = exports.SCHEDULED_CHECK_MISSED_AFTER_DAYS = exports.STUDENT_YEAR_FIELD = exports.JOB_VALUES = exports.CAREER_INTEREST_CATEGORIES = exports.SIC_SECTIONS = exports.SOC_MAJOR_GROUPS = exports.DESTINATION_CODES = exports.careersHubSchoolOnboardingEmailTemplates = exports.emailCampaignFullStatuses = exports.emailCampaignSummaryStatuses = exports.leadStageOrder = exports.leadStageSchema = exports.commSchema = exports.DEFAULT_YEAR_GROUPS = exports.DEFAULT_SURVEY_RULE = exports.surveyRuleLabel = exports.SURVEY_MONTHS = exports.SURVEY_WEEKDAYS = exports.SURVEY_ORDINALS = exports.skillAssessmentSchedule = exports.skillLabelColours = exports.equalexLearningOutcomes = exports.gatsbyBenchmarks = exports.externalActivityTypes = void 0;
3
+ exports.emailTemplateExampleData = exports.emailTemplateProductLabels = exports.productTagLabels = exports.emailButtonUrl = exports.emailTemplates = exports.defaultApplicantWorkflow = exports.mobileCountryCodes = exports.ERROR_COLOR = exports.SUCCESS_COLOR = exports.WARNING_COLOR = exports.INFO_COLOR = exports.INFOBACKGROUNDCOLOR = exports.INFOTEXTCOLOR = exports.WARNINGBACKGROUNDCOLOR = exports.WARNINGTEXTCOLOR = exports.SUCCESSBACKGROUNDCOLOR = exports.SUCCESSTEXTCOLOR = exports.ERRORBACKGROUNDCOLOR = exports.ERRORTEXTCOLOR = exports.STUDENT_COLOUR = exports.PROVIDER_COLOUR = exports.INSTITUTE_COLOUR = exports.SECONDARY_COLOUR = exports.LOGO_TERTIARY_COLOUR = exports.LOGO_SECONDARY_COLOUR = exports.EMAIL_HERO_SIZE = exports.PRIMARY_COLOUR = exports.MICROSOFT_SSO_GUIDE_URL = exports.MICROSOFT_ISSUER_HOST = exports.MICROSOFT_AUTHORITY = exports.MICROSOFT_CLIENT_ID = exports.DEFAULT_ACTIVITY_REFLECTION_FORM = exports.studentActivityCategory = exports.ACTIVITY_SCHEMAS = exports.DEFAULT_ACTIVITY_DESCRIPTION = exports.ACTIVITY_TYPE_DESCRIPTION = exports.ACTIVITY_TYPE_ORGANISATION = exports.activityProfile = exports.ACTIVITY_TYPE_PROFILE = exports.ACTIVITY_PROFILES = exports.ACTIVITY_TYPE_TITLE = exports.ACTIVITY_TYPES_BY_CATEGORY = exports.STUDENT_ACTIVITY_CATEGORIES = exports.DEFAULT_ACTIVITY_REFLECTION_FORM_ID = exports.sampleTargets = exports.flagCodes = exports.defaultStudentWorkflow = exports.defaultInstituteWorkflow = exports.countryList = exports.providerCodes = void 0;
4
+ exports.DFE_CONTACT_UPLOAD_COLUMNS = exports.OUTREACH_DEFAULT_DEFER_MONTHS = exports.outreachDeliverabilityLabels = exports.outreachStatusColours = exports.outreachStatusLabels = exports.outreachStatusOrder = exports.SCHEDULED_CHECK_REMINDER_LEAD_DAYS = exports.SCHEDULED_CHECK_MISSED_AFTER_DAYS = exports.STUDENT_YEAR_FIELD = exports.JOB_VALUES = exports.CAREER_INTEREST_CATEGORIES = exports.SIC_SECTIONS = exports.SOC_MAJOR_GROUPS = exports.DESTINATION_CODES = exports.careersHubSchoolOnboardingEmailTemplates = exports.emailCampaignFullStatuses = exports.emailCampaignSummaryStatuses = exports.leadStageOrder = exports.leadStageSchema = exports.commSchema = exports.DEFAULT_YEAR_GROUPS = exports.DEFAULT_SURVEY_RULE = exports.surveyRuleLabel = exports.SURVEY_MONTHS = exports.SURVEY_WEEKDAYS = exports.SURVEY_ORDINALS = exports.skillAssessmentSchedule = exports.skillLabelColours = exports.equalexLearningOutcomes = exports.gatsbyBenchmarks = exports.externalActivityTypes = exports.MISQueryParams = void 0;
5
5
  exports.productTagAvailable = productTagAvailable;
6
6
  exports.emailTemplateAvailable = emailTemplateAvailable;
7
7
  exports.skillColour = skillColour;
@@ -1837,53 +1837,13 @@ exports.emailTemplates = {
1837
1837
  recipient: "staff",
1838
1838
  group: "Reminders",
1839
1839
  },
1840
- engagementRenewalPrice: {
1840
+ engagementRenewalCheckIn: {
1841
1841
  product: "admin",
1842
- description: "Gives next year's price in time for the school's budget.",
1843
- params: [...engagementEmailParams, "renewalDate", "quote"],
1844
- button: { text: "See plan and invoices", link: "/institutes/organisation/billing" },
1845
- type: "engagement",
1846
- name: "Next year's price",
1847
- recipient: "staff",
1848
- group: "Renewals",
1849
- },
1850
- engagementRenewalReview: {
1851
- product: "admin",
1852
- description: "Before the summer: thanks the school and points to the impact report.",
1853
- params: [...engagementEmailParams],
1854
- button: { text: "Get your impact report", link: "/institutes/organisation/overview" },
1855
- type: "engagement",
1856
- name: "Year in review",
1857
- recipient: "staff",
1858
- group: "Renewals",
1859
- },
1860
- engagementRenewalDue: {
1861
- product: "admin",
1862
- description: "60 days before renewal: the date and next year's price.",
1863
- params: [...engagementEmailParams, "renewalDate", "quote"],
1864
- button: { text: "See your plan", link: "/institutes/organisation/billing" },
1865
- type: "engagement",
1866
- name: "60 days out",
1867
- recipient: "staff",
1868
- group: "Renewals",
1869
- },
1870
- engagementRenewalInvoice: {
1871
- product: "admin",
1872
- description: "Asks whether the renewal invoice needs a purchase order number.",
1873
- params: [...engagementEmailParams, "renewalDate", "quote"],
1874
- button: { text: "See your invoices", link: "/institutes/organisation/billing" },
1875
- type: "engagement",
1876
- name: "Invoice or PO",
1877
- recipient: "staff",
1878
- group: "Renewals",
1879
- },
1880
- engagementRenewalThanks: {
1881
- product: "admin",
1882
- description: "Sent once the school has renewed.",
1842
+ description: "Tom getting back in touch with a paying school for the new school year, with a link to book a call.",
1883
1843
  params: [...engagementEmailParams],
1884
- button: { text: "Open CareerThread", link: "/institutes/home" },
1844
+ button: { text: "Book a call", link: "https://calendly.com/tom-careerthread/30min" },
1885
1845
  type: "engagement",
1886
- name: "Thanks for renewing",
1846
+ name: "New school year check-in",
1887
1847
  recipient: "staff",
1888
1848
  group: "Renewals",
1889
1849
  },
@@ -1899,6 +1859,14 @@ exports.emailTemplates = {
1899
1859
  group: "Invoices",
1900
1860
  },
1901
1861
  };
1862
+ /**
1863
+ * Where an email button goes: a page on CareerThread, or a full link as it is.
1864
+ *
1865
+ * @param {string} link the button's link from its template.
1866
+ * @return {string} the full URL.
1867
+ */
1868
+ const emailButtonUrl = (link) => /^https?:\/\//.test(link) ? link : `https://careerthread.co.uk${link}`;
1869
+ exports.emailButtonUrl = emailButtonUrl;
1902
1870
  // Whether a resource tagged with a product belongs to a product this organisation has. Untagged, or no product info, shows.
1903
1871
  function productTagAvailable(tag, products) {
1904
1872
  if (!tag || !products)