@brivioio/api-server-types 7.27.0 → 7.29.0

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,3 +1,5 @@
1
+ import type { TCandidateEmailMessageView } from './candidateEmailMessages.types';
2
+ import type { IResponse } from './utils.types';
1
3
  /**
2
4
  * Lifecycle of a single candidate↔company email thread. The communication agent
3
5
  * advances this as the conversation progresses; the scheduler reads it to decide
@@ -30,6 +32,32 @@ export declare enum ECandidateInterest {
30
32
  ON_THE_FENCE = "on_the_fence",
31
33
  NOT_INTERESTED = "not_interested"
32
34
  }
35
+ /**
36
+ * Structured details the reply agent gathers from an interested candidate over
37
+ * the thread. Role-facing answers (CTC, notice, location, switch intent) live
38
+ * here on the stable conversation; the phone is also mirrored onto the
39
+ * candidate-level `candidateContacts`, and the CV is stored in S3 with its
40
+ * extracted text kept here for downstream evaluation. Empty strings / nulls mean
41
+ * "not yet collected".
42
+ */
43
+ export interface ICollectedInfo {
44
+ currentLocation: string;
45
+ currentCtc: string;
46
+ expectedCtc: string;
47
+ noticePeriod: string;
48
+ /** Whether the candidate is genuinely open to changing jobs. Null = unknown. */
49
+ openToSwitch: boolean | null;
50
+ /** Whether the candidate is open to relocation (if the role needs it). Null = unknown. */
51
+ openToRelocation: boolean | null;
52
+ phone: string;
53
+ cvReceived: boolean;
54
+ /** S3 object key for the candidate's CV, once received. */
55
+ cvStorageKey: string;
56
+ /** Extracted plain text of the CV (for evaluation). */
57
+ cvText: string;
58
+ /** Freeform agent notes on what's gathered and what's still outstanding. */
59
+ notes: string;
60
+ }
33
61
  /**
34
62
  * A stable, threaded email conversation between the company (represented by the
35
63
  * agent) and one candidate, for one role. Keyed by (organization, role,
@@ -82,6 +110,16 @@ export interface ICandidateConversation {
82
110
  nextActionAt: Date | null;
83
111
  /** Message-ID header of the last email on the thread, for In-Reply-To threading. */
84
112
  lastMessageIdHeader: string;
113
+ /** Details collected from the candidate over the thread (interested path). */
114
+ collectedInfo: ICollectedInfo;
115
+ /**
116
+ * Set true when the candidate is interested AND all required info is captured —
117
+ * the signal for the downstream profile-evaluation agent (later phase) to score
118
+ * them and write a match decision onto the shortlist.
119
+ */
120
+ readyForEvaluation: boolean;
121
+ /** When the profile-evaluation agent last scored this candidate; null until run. */
122
+ evaluatedAt: Date | null;
85
123
  closedAt: Date | null;
86
124
  closedReason: string;
87
125
  internalTags: {
@@ -92,4 +130,52 @@ export interface ICandidateConversation {
92
130
  createdAt: string;
93
131
  updatedAt: string;
94
132
  }
133
+ /**
134
+ * Read-only details the team sees about what we've collected from a candidate
135
+ * over the thread (dashboard conversation view).
136
+ */
137
+ export type TConversationCollectedInfo = {
138
+ currentLocation: string;
139
+ currentCtc: string;
140
+ expectedCtc: string;
141
+ noticePeriod: string;
142
+ openToSwitch: boolean | null;
143
+ openToRelocation: boolean | null;
144
+ phone: string;
145
+ cvReceived: boolean;
146
+ notes: string;
147
+ };
148
+ /**
149
+ * One candidate↔company conversation as the dashboard shows it: the thread header
150
+ * (status, interest, counters) plus its messages. Messages are
151
+ * `TCandidateEmailMessageView` (defined in candidateEmailMessages.types).
152
+ */
153
+ export type TConversationThread = {
154
+ id: string;
155
+ jobRoleId: string;
156
+ candidateKey: string;
157
+ status: ECandidateConversationStatus;
158
+ interest: ECandidateInterest;
159
+ subject: string;
160
+ emailsSentCount: number;
161
+ reminderStage: number;
162
+ pocLoopedIn: boolean;
163
+ lastOutboundAt: string | null;
164
+ lastInboundAt: string | null;
165
+ collectedInfo: TConversationCollectedInfo;
166
+ readyForEvaluation: boolean;
167
+ evaluatedAt: string | null;
168
+ createdAt: string;
169
+ /** The full email thread, oldest first. */
170
+ messages: TCandidateEmailMessageView[];
171
+ };
172
+ export declare namespace CandidateConversationsAPITypes {
173
+ /**
174
+ * GET a single candidate's conversation thread for a role (read-only, for the
175
+ * dashboard). `null` when no conversation exists for that candidate yet.
176
+ */
177
+ type TGetConversationResponse = IResponse<{
178
+ conversation: TConversationThread | null;
179
+ } | null>;
180
+ }
95
181
  //# sourceMappingURL=candidateConversations.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidateConversations.types.d.ts","sourceRoot":"","sources":["../src/candidateConversations.types.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,oBAAY,4BAA4B;IACtC,8EAA8E;IAC9E,WAAW,gBAAgB;IAC3B,+EAA+E;IAC/E,kBAAkB,uBAAuB;IACzC,mEAAmE;IACnE,gBAAgB,qBAAqB;IACrC,mFAAmF;IACnF,YAAY,iBAAiB;IAC7B,kFAAkF;IAClF,eAAe,oBAAoB;IACnC,0EAA0E;IAC1E,iBAAiB,sBAAsB;IACvC,mCAAmC;IACnC,qBAAqB,0BAA0B;IAC/C,gEAAgE;IAChE,kBAAkB,uBAAuB;IACzC,wEAAwE;IACxE,YAAY,iBAAiB;CAC9B;AAED,yEAAyE;AACzE,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;CAClC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,4BAA4B,CAAC;IACrC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,oFAAoF;IACpF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"candidateConversations.types.d.ts","sourceRoot":"","sources":["../src/candidateConversations.types.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,32 @@ export interface IEmailAttachment {
46
46
  /** S3 object key where the attachment bytes are stored. */
47
47
  storageKey: string;
48
48
  }
49
+ /** An attachment as the dashboard shows it (no storage internals beyond the key). */
50
+ export type TEmailAttachmentView = {
51
+ filename: string;
52
+ mimeType: string;
53
+ sizeBytes: number;
54
+ storageKey: string;
55
+ };
56
+ /**
57
+ * One email on a conversation, as the dashboard renders it (read-only). Plain
58
+ * fields only — no threading internals.
59
+ */
60
+ export type TCandidateEmailMessageView = {
61
+ id: string;
62
+ direction: EEmailDirection;
63
+ purpose: EEmailPurpose;
64
+ subject: string;
65
+ body: string;
66
+ fromAddress: string;
67
+ toAddresses: string[];
68
+ ccAddresses: string[];
69
+ attachments: TEmailAttachmentView[];
70
+ deliveryStatus: EEmailDeliveryStatus;
71
+ sentAt: string | null;
72
+ receivedAt: string | null;
73
+ createdAt: string;
74
+ };
49
75
  /**
50
76
  * One email on a candidate conversation — sent by us or received from the
51
77
  * candidate / POC. This is the durable audit trail: every email's purpose, body,
@@ -1 +1 @@
1
- {"version":3,"file":"candidateEmailMessages.types.d.ts","sourceRoot":"","sources":["../src/candidateEmailMessages.types.ts"],"names":[],"mappings":"AACA,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,oBAAY,aAAa;IACvB,sDAAsD;IACtD,cAAc,mBAAmB;IACjC,qDAAqD;IACrD,QAAQ,aAAa;IACrB,qEAAqE;IACrE,YAAY,iBAAiB;IAC7B,kFAAkF;IAClF,YAAY,iBAAiB;IAC7B,+EAA+E;IAC/E,WAAW,gBAAgB;IAC3B,2EAA2E;IAC3E,mBAAmB,wBAAwB;IAC3C,6CAA6C;IAC7C,iBAAiB,sBAAsB;IACvC,kEAAkE;IAClE,WAAW,gBAAgB;IAC3B,kCAAkC;IAClC,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,cAAc,EAAE,oBAAoB,CAAC;IACrC,+EAA+E;IAC/E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"candidateEmailMessages.types.d.ts","sourceRoot":"","sources":["../src/candidateEmailMessages.types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ECandidateConversationStatus, ECandidateInterest } from './candidateConversations.types';
1
2
  import type { IResponse } from './utils.types';
2
3
  export declare enum EShortlistSource {
3
4
  /** Surfaced and selected by the sourcing search + scoring. */
@@ -54,6 +55,62 @@ export type TShortlistFeedback = {
54
55
  submittedAt: string | null;
55
56
  updatedAt: string;
56
57
  };
58
+ /**
59
+ * How well a candidate matches the role after the full end-to-end evaluation
60
+ * (profile + collected info + CV, weighed against the role's latest requirements,
61
+ * calibration, and team feedback). This is the team-facing verdict on the
62
+ * shortlist, distinct from the sourcing-time `fitScore`.
63
+ */
64
+ export declare enum EShortlistMatchLevel {
65
+ /** Spot on — meets the bar across the board. */
66
+ EXACT = "exact",
67
+ /** Partial / "sort of" — a real fit with some gaps. */
68
+ SORTA = "sorta",
69
+ /** Low match — notable gaps against the requirements. */
70
+ LOW = "low",
71
+ /** Not a match. */
72
+ NONE = "none"
73
+ }
74
+ /**
75
+ * The profile-evaluation agent's verdict on a candidate, written onto the
76
+ * shortlist entry once the candidate is interested and their details are
77
+ * collected. Visible to the team in the dashboard.
78
+ */
79
+ export interface IShortlistEvaluation {
80
+ matchLevel: EShortlistMatchLevel;
81
+ /** 0-100 overall rating from the evaluation (separate from sourcing `fitScore`). */
82
+ rating: number;
83
+ /** Short, team-facing summary of the verdict. */
84
+ summary: string;
85
+ /** A few concrete strengths against the role. */
86
+ strengths: string[];
87
+ /** A few concrete gaps / risks against the role. */
88
+ concerns: string[];
89
+ /** The requirement version this evaluation was made against. */
90
+ requirementVersion: number;
91
+ decidedAt: string;
92
+ }
93
+ export type TShortlistEvaluation = {
94
+ matchLevel: EShortlistMatchLevel;
95
+ rating: number;
96
+ summary: string;
97
+ strengths: string[];
98
+ concerns: string[];
99
+ requirementVersion: number;
100
+ decidedAt: string;
101
+ };
102
+ /**
103
+ * The candidate's outreach/conversation state, surfaced onto the shortlist entry
104
+ * so the team sees where each candidate stands in the email flow at a glance.
105
+ * Null when no conversation has been provisioned for the candidate yet.
106
+ */
107
+ export type TShortlistOutreachStatus = {
108
+ status: ECandidateConversationStatus;
109
+ interest: ECandidateInterest;
110
+ emailsSentCount: number;
111
+ lastOutboundAt: string | null;
112
+ lastInboundAt: string | null;
113
+ };
57
114
  /**
58
115
  * Per-axis fit breakdown (each 0-100). Drives the composite `fitScore` and gives
59
116
  * the recruiter an explainable "why this rank".
@@ -101,6 +158,11 @@ export interface IShortlist {
101
158
  source: EShortlistSource;
102
159
  /** Per-teammate verdict + note on this candidate; empty until anyone reviews. */
103
160
  feedback: IShortlistFeedback[];
161
+ /**
162
+ * The profile-evaluation agent's verdict, written once the candidate is
163
+ * interested and their info is collected. Null until evaluated.
164
+ */
165
+ evaluation: IShortlistEvaluation | null;
104
166
  internalTags: {
105
167
  key: string;
106
168
  value: string;
@@ -128,6 +190,10 @@ export type TShortlistEntry = {
128
190
  reasoning: string;
129
191
  source: EShortlistSource;
130
192
  feedback: TShortlistFeedback[];
193
+ /** End-to-end match verdict from the evaluation agent; null until evaluated. */
194
+ evaluation: TShortlistEvaluation | null;
195
+ /** Where the candidate stands in the email outreach flow; null if not provisioned. */
196
+ outreach: TShortlistOutreachStatus | null;
131
197
  createdAt: string;
132
198
  };
133
199
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shortlists.types.d.ts","sourceRoot":"","sources":["../src/shortlists.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,oBAAY,gBAAgB;IAC1B,8DAA8D;IAC9D,MAAM,WAAW;IACjB,gFAAgF;IAChF,WAAW,0BAA0B;CACtC;AAED;;;GAGG;AACH,oBAAY,yBAAyB;IACnC,+DAA+D;IAC/D,SAAS,cAAc;IACvB,sBAAsB;IACtB,IAAI,SAAS;IACb,8DAA8D;IAC9D,GAAG,QAAQ;CACZ;AAED;;;;;GAKG;AACH,oBAAY,wBAAwB;IAClC,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,yBAAyB,CAAC;IACnC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,wBAAwB,CAAC;IACjC,4EAA4E;IAC5E,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,yBAAyB,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,uBAAuB,EAAE,MAAM,CAAC;IAChC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iFAAiF;IACjF,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,yBAAiB,kBAAkB,CAAC;IAClC,KAAY,qBAAqB,GAAG,SAAS,CAAC;QAC5C,oEAAoE;QACpE,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,+FAA+F;QAC/F,KAAK,EAAE,OAAO,CAAC;QACf,yFAAyF;QACzF,kBAAkB,EAAE,MAAM,CAAC;KAC5B,GAAG,IAAI,CAAC,CAAC;IAEV;;;OAGG;IACH,KAAY,mBAAmB,GAAG;QAChC,OAAO,EAAE,yBAAyB,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,KAAY,uBAAuB,GAAG,SAAS,CAAC;QAC9C,KAAK,EAAE,eAAe,CAAC;KACxB,GAAG,IAAI,CAAC,CAAC;IAEV,KAAY,uBAAuB,GAAG,SAAS,CAAC;QAC9C,KAAK,EAAE,eAAe,CAAC;KACxB,GAAG,IAAI,CAAC,CAAC;CACX"}
1
+ {"version":3,"file":"shortlists.types.d.ts","sourceRoot":"","sources":["../src/shortlists.types.ts"],"names":[],"mappings":"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"}
@@ -29,3 +29,20 @@ export var EShortlistFeedbackStatus;
29
29
  EShortlistFeedbackStatus["DRAFT"] = "draft";
30
30
  EShortlistFeedbackStatus["SUBMITTED"] = "submitted";
31
31
  })(EShortlistFeedbackStatus || (EShortlistFeedbackStatus = {}));
32
+ /**
33
+ * How well a candidate matches the role after the full end-to-end evaluation
34
+ * (profile + collected info + CV, weighed against the role's latest requirements,
35
+ * calibration, and team feedback). This is the team-facing verdict on the
36
+ * shortlist, distinct from the sourcing-time `fitScore`.
37
+ */
38
+ export var EShortlistMatchLevel;
39
+ (function (EShortlistMatchLevel) {
40
+ /** Spot on — meets the bar across the board. */
41
+ EShortlistMatchLevel["EXACT"] = "exact";
42
+ /** Partial / "sort of" — a real fit with some gaps. */
43
+ EShortlistMatchLevel["SORTA"] = "sorta";
44
+ /** Low match — notable gaps against the requirements. */
45
+ EShortlistMatchLevel["LOW"] = "low";
46
+ /** Not a match. */
47
+ EShortlistMatchLevel["NONE"] = "none";
48
+ })(EShortlistMatchLevel || (EShortlistMatchLevel = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brivioio/api-server-types",
3
- "version": "7.27.0",
3
+ "version": "7.29.0",
4
4
  "description": "TypeScript type definitions for Brivio API Server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",