@d19n/youfibre-odin-sdk 2.0.321 → 2.0.322

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.
Files changed (55) hide show
  1. package/README.md +7 -2
  2. package/dist/actions-v2/CompleteServiceWorkOrderFlowDto.d.ts +14 -14
  3. package/dist/actions-v2/CompleteServiceWorkOrderFlowDto.js +22 -22
  4. package/dist/actions-v2/DefaultServiceWorkOrderEditFormDto.d.ts +8 -1
  5. package/dist/actions-v2/UpdateCustomerDeviceBatteryDto.d.ts +3 -1
  6. package/dist/actions-v2/UpdateCustomerDeviceBatteryDto.js +3 -1
  7. package/dist/api-sdk-v2/CaseApi.d.ts +4 -0
  8. package/dist/api-sdk-v2/CaseApi.js +12 -0
  9. package/dist/api-sdk-v2/CoachingSessionApi.d.ts +50 -0
  10. package/dist/api-sdk-v2/CoachingSessionApi.js +161 -0
  11. package/dist/api-sdk-v2/QaEvaluationAnswerApi.d.ts +48 -0
  12. package/dist/api-sdk-v2/QaEvaluationAnswerApi.js +155 -0
  13. package/dist/api-sdk-v2/QaEvaluationApi.d.ts +54 -0
  14. package/dist/api-sdk-v2/QaEvaluationApi.js +173 -0
  15. package/dist/api-sdk-v2/QaScorecardQuestionApi.d.ts +48 -0
  16. package/dist/api-sdk-v2/QaScorecardQuestionApi.js +155 -0
  17. package/dist/api-sdk-v2/QaScorecardTemplateApi.d.ts +50 -0
  18. package/dist/api-sdk-v2/QaScorecardTemplateApi.js +161 -0
  19. package/dist/db-sdk-v2/CaseDb.d.ts +4 -0
  20. package/dist/db-sdk-v2/CaseDb.js +12 -0
  21. package/dist/db-sdk-v2/CoachingSessionDb.d.ts +122 -0
  22. package/dist/db-sdk-v2/CoachingSessionDb.js +210 -0
  23. package/dist/db-sdk-v2/QaEvaluationAnswerDb.d.ts +120 -0
  24. package/dist/db-sdk-v2/QaEvaluationAnswerDb.js +204 -0
  25. package/dist/db-sdk-v2/QaEvaluationDb.d.ts +126 -0
  26. package/dist/db-sdk-v2/QaEvaluationDb.js +222 -0
  27. package/dist/db-sdk-v2/QaScorecardQuestionDb.d.ts +120 -0
  28. package/dist/db-sdk-v2/QaScorecardQuestionDb.js +204 -0
  29. package/dist/db-sdk-v2/QaScorecardTemplateDb.d.ts +122 -0
  30. package/dist/db-sdk-v2/QaScorecardTemplateDb.js +210 -0
  31. package/dist/entities-v2/Case.d.ts +14 -0
  32. package/dist/entities-v2/Case.js +9 -1
  33. package/dist/entities-v2/CoachingSession.d.ts +247 -0
  34. package/dist/entities-v2/CoachingSession.js +145 -0
  35. package/dist/entities-v2/CustomerDeviceRouter.d.ts +258 -8
  36. package/dist/entities-v2/CustomerDeviceRouter.js +17 -9
  37. package/dist/entities-v2/QaEvaluation.d.ts +361 -0
  38. package/dist/entities-v2/QaEvaluation.js +217 -0
  39. package/dist/entities-v2/QaEvaluationAnswer.d.ts +127 -0
  40. package/dist/entities-v2/QaEvaluationAnswer.js +92 -0
  41. package/dist/entities-v2/QaScorecardQuestion.d.ts +155 -0
  42. package/dist/entities-v2/QaScorecardQuestion.js +96 -0
  43. package/dist/entities-v2/QaScorecardTemplate.d.ts +152 -0
  44. package/dist/entities-v2/QaScorecardTemplate.js +114 -0
  45. package/dist/entities-v2/WorkOrder.d.ts +210 -1
  46. package/dist/entities-v2/WorkOrder.js +22 -4
  47. package/dist/entities-v2/YfFieldVisitOutcomeForm.d.ts +4 -3
  48. package/dist/entities-v2/YfFieldVisitOutcomeForm.js +2 -1
  49. package/dist/records-v2/CustomerDeviceRouterRecord.d.ts +38 -2
  50. package/dist/records-v2/CustomerDeviceRouterRecord.js +37 -0
  51. package/dist/records-v2/WorkOrderRecord.d.ts +4 -4
  52. package/dist/records-v2/WorkOrderRecord.js +4 -4
  53. package/dist/records-v2/YfFieldVisitOutcomeFormRecord.d.ts +5 -4
  54. package/dist/records-v2/YfFieldVisitOutcomeFormRecord.js +5 -5
  55. package/package.json +1 -1
@@ -12,15 +12,17 @@
12
12
  * Generated from Odin schema definition
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FIELD_SERVICE_DISPATCHED_PRODUCT_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FIELD_SERVICE_DISPATCHED_PRODUCT_CREATED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_NOTE_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_NOTE_CREATED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FILE_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FILE_CREATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_DELETED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_UPDATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_CREATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DELETED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_UPDATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CREATED = exports.CustomerDeviceRouter = exports.CustomerDeviceRouterPropertyKeys = exports.CustomerDeviceRouterModel = exports.CustomerDeviceRouterEntityTypes = void 0;
15
+ exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FIELD_SERVICE_DISPATCHED_PRODUCT_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FIELD_SERVICE_DISPATCHED_PRODUCT_CREATED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_NOTE_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_NOTE_CREATED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FILE_DELETED = exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FILE_CREATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_DELETED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_UPDATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_CREATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_DELETED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_UPDATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_CREATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DELETED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_UPDATED = exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CREATED = exports.CustomerDeviceRouter = exports.CustomerDeviceRouterPropertyKeys = exports.CustomerDeviceRouterModel = exports.CustomerDeviceRouterEntityTypes = void 0;
16
16
  const core_1 = require("@d19n/odin-types/dist/core");
17
17
  /**
18
18
  * Available types for CustomerDeviceRouter records
19
19
  */
20
20
  var CustomerDeviceRouterEntityTypes;
21
21
  (function (CustomerDeviceRouterEntityTypes) {
22
- /** Default record type */
23
- CustomerDeviceRouterEntityTypes["DEFAULT"] = "DEFAULT";
22
+ /** CPE Router */
23
+ CustomerDeviceRouterEntityTypes["CPE_ROUTER"] = "CPE_ROUTER";
24
+ /** Mesh */
25
+ CustomerDeviceRouterEntityTypes["MESH"] = "MESH";
24
26
  })(CustomerDeviceRouterEntityTypes = exports.CustomerDeviceRouterEntityTypes || (exports.CustomerDeviceRouterEntityTypes = {}));
25
27
  /**
26
28
  * Valid values for CustomerDeviceRouter.Model
@@ -129,12 +131,18 @@ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DELETED = 'ServiceModule.CustomerDevi
129
131
  * Type-specific routing keys for CustomerDeviceRouter events
130
132
  * Subscribe to these for events on specific entity types only
131
133
  */
132
- /** Default record type created */
133
- exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_CREATED = 'ServiceModule.CustomerDeviceRouter.DEFAULT.SubDbRecordCreated';
134
- /** Default record type updated */
135
- exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_UPDATED = 'ServiceModule.CustomerDeviceRouter.DEFAULT.SubDbRecordUpdated';
136
- /** Default record type deleted */
137
- exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_DEFAULT_DELETED = 'ServiceModule.CustomerDeviceRouter.DEFAULT.SubDbRecordDeleted';
134
+ /** CPE Router created */
135
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_CREATED = 'ServiceModule.CustomerDeviceRouter.CPE_ROUTER.SubDbRecordCreated';
136
+ /** CPE Router updated */
137
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_UPDATED = 'ServiceModule.CustomerDeviceRouter.CPE_ROUTER.SubDbRecordUpdated';
138
+ /** CPE Router deleted */
139
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_CPE_ROUTER_DELETED = 'ServiceModule.CustomerDeviceRouter.CPE_ROUTER.SubDbRecordDeleted';
140
+ /** Mesh created */
141
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_CREATED = 'ServiceModule.CustomerDeviceRouter.MESH.SubDbRecordCreated';
142
+ /** Mesh updated */
143
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_UPDATED = 'ServiceModule.CustomerDeviceRouter.MESH.SubDbRecordUpdated';
144
+ /** Mesh deleted */
145
+ exports.ROUTING_KEY_CUSTOMER_DEVICE_ROUTER_MESH_DELETED = 'ServiceModule.CustomerDeviceRouter.MESH.SubDbRecordDeleted';
138
146
  /** Event: CustomerDeviceRouter__File link created */
139
147
  exports.ROUTING_KEY_LINK_CUSTOMER_DEVICE_ROUTER_FILE_CREATED = 'ServiceModule.CustomerDeviceRouter.File.SubDbRecordAssociationCreated';
140
148
  /** Event: CustomerDeviceRouter__File link deleted */
@@ -0,0 +1,361 @@
1
+ /**
2
+ * QaEvaluation Entity Definition
3
+ *
4
+ * One scoring of one closed Case against the channel scorecard, by a human evaluator or the AI scorer. Amendments supersede rather than mutate, so a correction moves the averages at once and the original stays readable.
5
+ *
6
+ * @module SupportModule
7
+ * @entity QaEvaluation
8
+ * @schemaId 11880071-fb9e-4270-b64f-3db750b97ea7
9
+ *
10
+ * AUTO-GENERATED - DO NOT EDIT DIRECTLY
11
+ * Generated from Odin schema definition
12
+ */
13
+ import { OdinRecord, OdinLink, LinkedOdinRecord } from '@d19n/odin-types/dist/core';
14
+ import { CaseProperties } from './Case';
15
+ import { QaScorecardTemplateProperties } from './QaScorecardTemplate';
16
+ import { CoachingSessionProperties } from './CoachingSession';
17
+ import { QaEvaluationAnswerProperties } from './QaEvaluationAnswer';
18
+ /**
19
+ * Available types for QaEvaluation records
20
+ */
21
+ export declare enum QaEvaluationEntityTypes {
22
+ /** This is the default record type */
23
+ DEFAULT = "DEFAULT"
24
+ }
25
+ /**
26
+ * Pipeline stage names for DEFAULT QaEvaluation
27
+ * Pipeline: QA Evaluation Pipeline
28
+ * Draft → Submitted → Superseded. Only Submitted counts toward any average; an amendment creates a new Submitted record and moves the old one to Superseded.
29
+ */
30
+ export declare enum DefaultQaEvaluationStageNames {
31
+ /** Started and saved without submitting. Private working state — excluded from every average and from the AI-variance comparison. (default) */
32
+ Draft = "Draft",
33
+ /** The evaluation counts. Score, Passed, AutoFail and any variance against the AI are pinned here. This is the only stage the aggregates read. (success) */
34
+ Submitted = "Submitted",
35
+ /** Replaced by an amendment. No longer counts toward any average, but stays readable as the record of what was originally scored and by whom. */
36
+ Superseded = "Superseded"
37
+ }
38
+ /**
39
+ * Pipeline stage keys for DEFAULT QaEvaluation
40
+ * Use these keys when transitioning between stages
41
+ */
42
+ export declare enum DefaultQaEvaluationStageKeys {
43
+ /** Started and saved without submitting. Private working state — excluded from every average and from the AI-variance comparison. */
44
+ QaEvaluationStageDraft = "QaEvaluationStageDraft",
45
+ /** The evaluation counts. Score, Passed, AutoFail and any variance against the AI are pinned here. This is the only stage the aggregates read. */
46
+ QaEvaluationStageSubmitted = "QaEvaluationStageSubmitted",
47
+ /** Replaced by an amendment. No longer counts toward any average, but stays readable as the record of what was originally scored and by whom. */
48
+ QaEvaluationStageSuperseded = "QaEvaluationStageSuperseded"
49
+ }
50
+ /**
51
+ * Valid values for QaEvaluation.AutoFail
52
+ *
53
+ * An auto-fail rule was invoked, which zeroes the score whatever else was answered.
54
+ *
55
+ * @remarks Available options:
56
+ * - `NO` - No
57
+ * - `YES` - Yes
58
+ */
59
+ export declare enum QaEvaluationAutoFail {
60
+ NO = "NO",
61
+ YES = "YES"
62
+ }
63
+ /**
64
+ * Valid values for QaEvaluation.VarianceFlagged
65
+ *
66
+ * The gap between the human and AI scores exceeded the configured tolerance and is queued for review.
67
+ *
68
+ * @remarks Available options:
69
+ * - `NO` - No
70
+ * - `YES` - Yes
71
+ */
72
+ export declare enum QaEvaluationVarianceFlagged {
73
+ NO = "NO",
74
+ YES = "YES"
75
+ }
76
+ /**
77
+ * Valid values for QaEvaluation.Channel
78
+ *
79
+ * Which scorecard applied, copied from the template.
80
+ *
81
+ * @remarks Available options:
82
+ * - `CALL_INBOUND` - Call — inbound
83
+ * - `CALL_OUTBOUND` - Call — outbound
84
+ * - `CHAT` - Chat
85
+ * - `EMAIL` - Email
86
+ */
87
+ export declare enum QaEvaluationChannel {
88
+ CALL_INBOUND = "CALL_INBOUND",
89
+ CALL_OUTBOUND = "CALL_OUTBOUND",
90
+ CHAT = "CHAT",
91
+ EMAIL = "EMAIL"
92
+ }
93
+ /**
94
+ * Valid values for QaEvaluation.Source
95
+ *
96
+ * Who scored it. HUMAN is a QA evaluator; AI is the Databricks quality_assurance_report endpoint. Averages report the two separately.
97
+ *
98
+ * @remarks Available options:
99
+ * - `AI`
100
+ * - `HUMAN` - Human
101
+ */
102
+ export declare enum QaEvaluationSource {
103
+ AI = "AI",
104
+ HUMAN = "HUMAN"
105
+ }
106
+ /**
107
+ * Valid values for QaEvaluation.Passed
108
+ *
109
+ * Score at or above the template benchmark, and no auto-fail.
110
+ *
111
+ * @remarks Available options:
112
+ * - `NO` - No
113
+ * - `YES` - Yes
114
+ */
115
+ export declare enum QaEvaluationPassed {
116
+ NO = "NO",
117
+ YES = "YES"
118
+ }
119
+ /**
120
+ * Property keys for QaEvaluation
121
+ * Use these constants instead of string literals for type safety
122
+ */
123
+ export declare enum QaEvaluationPropertyKeys {
124
+ /** The agent’s team at evaluation time, from Case.TeamId. Snapshotted because agents move teams and a historical average must not move with them. */
125
+ TeamId = "TeamId",
126
+ /** Who scored it — the principal on submit, or the AI bot user for Source=AI. Grouping on this is the calibration view. */
127
+ EvaluatorId = "EvaluatorId",
128
+ /** An auto-fail rule was invoked, which zeroes the score whatever else was answered. */
129
+ AutoFail = "AutoFail",
130
+ /** Id of the evaluation this one amends. Set only on an amendment; the record it names moves to the Superseded stage. This is the audit trail. */
131
+ SupersedesId = "SupersedesId",
132
+ /** Source=AI only: the SupportModule:QaReport generation these answers came from, so the HTML report and the structured score stay connected. */
133
+ QaReportId = "QaReportId",
134
+ /** Snapshotted at submit. Without it a later template edit would silently change what an old score meant. */
135
+ TemplateVersion = "TemplateVersion",
136
+ /** When it was submitted. The date every average and trend is bucketed by — not createdAt, so that an amendment lands on the date it was made. */
137
+ EvaluatedAt = "EvaluatedAt",
138
+ /** The gap between the human and AI scores exceeded the configured tolerance and is queued for review. */
139
+ VarianceFlagged = "VarianceFlagged",
140
+ /** The case this evaluation scores. The real link; holds a uuid so it is not shown in tables — the readable reference is the Case column below. */
141
+ CaseId = "CaseId",
142
+ /** Record number of the case this evaluation scores, e.g. SC6490. */
143
+ Case = "Case",
144
+ /** The scorecard template this was scored against. */
145
+ TemplateId = "TemplateId",
146
+ /** Which scorecard applied, copied from the template. */
147
+ Channel = "Channel",
148
+ /** Who scored it. HUMAN is a QA evaluator; AI is the Databricks quality_assurance_report endpoint. Averages report the two separately. */
149
+ Source = "Source",
150
+ /** Score at or above the template benchmark, and no auto-fail. */
151
+ Passed = "Passed",
152
+ /** Which rule, e.g. AF.3 for the GDPR rule. Empty unless AutoFail is YES. */
153
+ AutoFailRuleId = "AutoFailRuleId",
154
+ /** The evaluated agent, from Case.OwnerId at evaluation time. NOT R_AssignedOrgUserId: measured on production 2026-09-04, OwnerId is populated on 77% of classified cases and R_AssignedOrgUserId on none. */
155
+ AgentId = "AgentId",
156
+ /** Point-in-time name of the evaluated agent, so a report reads correctly after someone leaves. */
157
+ AgentName = "AgentName",
158
+ /** Point-in-time name of the evaluator. */
159
+ EvaluatorName = "EvaluatorName",
160
+ /** The evaluator’s overall comment to the agent. */
161
+ Feedback = "Feedback",
162
+ /** 0-100, one decimal place, computed by the scoring engine. N/A answers are excluded from both sides of the fraction rather than scored as zero. */
163
+ Score = "Score",
164
+ /** Human score minus the AI score for the same case, in percentage points. Set on a human submit when an AI evaluation exists. */
165
+ VarianceVsAi = "VarianceVsAi",
166
+ /** Sum of the weights actually scored, out of 100. Below 100 means questions were answered N/A and removed from both sides of the fraction — a score of 90 over 73 points is a different claim from 90 over 100. */
167
+ WeightConsidered = "WeightConsidered"
168
+ }
169
+ /**
170
+ * Properties for QaEvaluation records
171
+ *
172
+ * @see SupportModule:QaEvaluation
173
+ */
174
+ export interface QaEvaluationProperties {
175
+ /** The agent’s team at evaluation time, from Case.TeamId. Snapshotted because agents move teams and a historical average must not move with them.
176
+ *
177
+ * @type {TEXT}
178
+ * @default
179
+ */
180
+ TeamId: string;
181
+ /** Who scored it — the principal on submit, or the AI bot user for Source=AI. Grouping on this is the calibration view.
182
+ *
183
+ * @type {TEXT}
184
+ * @default
185
+ */
186
+ EvaluatorId: string;
187
+ /** An auto-fail rule was invoked, which zeroes the score whatever else was answered.
188
+ *
189
+ * @type {ENUM}
190
+ * @default
191
+ * @enum {QaEvaluationAutoFail}
192
+ */
193
+ AutoFail: QaEvaluationAutoFail;
194
+ /** Id of the evaluation this one amends. Set only on an amendment; the record it names moves to the Superseded stage. This is the audit trail.
195
+ *
196
+ * @type {TEXT}
197
+ * @default
198
+ */
199
+ SupersedesId: string;
200
+ /** Source=AI only: the SupportModule:QaReport generation these answers came from, so the HTML report and the structured score stay connected.
201
+ *
202
+ * @type {TEXT}
203
+ * @default
204
+ */
205
+ QaReportId: string;
206
+ /** Snapshotted at submit. Without it a later template edit would silently change what an old score meant.
207
+ *
208
+ * @type {NUMBER}
209
+ * @default
210
+ */
211
+ TemplateVersion: number;
212
+ /** When it was submitted. The date every average and trend is bucketed by — not createdAt, so that an amendment lands on the date it was made.
213
+ *
214
+ * @type {DATE_TIME}
215
+ * @default
216
+ */
217
+ EvaluatedAt: string;
218
+ /** The gap between the human and AI scores exceeded the configured tolerance and is queued for review.
219
+ *
220
+ * @type {ENUM}
221
+ * @default
222
+ * @enum {QaEvaluationVarianceFlagged}
223
+ */
224
+ VarianceFlagged: QaEvaluationVarianceFlagged;
225
+ /** The case this evaluation scores. The real link; holds a uuid so it is not shown in tables — the readable reference is the Case column below.
226
+ *
227
+ * @type {LOOKUP}
228
+ * @default
229
+ */
230
+ CaseId: string;
231
+ /** Record number of the case this evaluation scores, e.g. SC6490.
232
+ *
233
+ * @type {TEXT}
234
+ * @default
235
+ */
236
+ Case: string;
237
+ /** The scorecard template this was scored against.
238
+ *
239
+ * @type {LOOKUP}
240
+ * @default
241
+ */
242
+ TemplateId: string;
243
+ /** Which scorecard applied, copied from the template.
244
+ *
245
+ * @type {ENUM}
246
+ * @default
247
+ * @enum {QaEvaluationChannel}
248
+ */
249
+ Channel: QaEvaluationChannel;
250
+ /** Who scored it. HUMAN is a QA evaluator; AI is the Databricks quality_assurance_report endpoint. Averages report the two separately.
251
+ *
252
+ * @type {ENUM}
253
+ * @default
254
+ * @enum {QaEvaluationSource}
255
+ */
256
+ Source: QaEvaluationSource;
257
+ /** Score at or above the template benchmark, and no auto-fail.
258
+ *
259
+ * @type {ENUM}
260
+ * @default
261
+ * @enum {QaEvaluationPassed}
262
+ */
263
+ Passed: QaEvaluationPassed;
264
+ /** Which rule, e.g. AF.3 for the GDPR rule. Empty unless AutoFail is YES.
265
+ *
266
+ * @type {TEXT}
267
+ * @default
268
+ */
269
+ AutoFailRuleId: string;
270
+ /** The evaluated agent, from Case.OwnerId at evaluation time. NOT R_AssignedOrgUserId: measured on production 2026-09-04, OwnerId is populated on 77% of classified cases and R_AssignedOrgUserId on none.
271
+ *
272
+ * @type {TEXT}
273
+ * @default
274
+ */
275
+ AgentId: string;
276
+ /** Point-in-time name of the evaluated agent, so a report reads correctly after someone leaves.
277
+ *
278
+ * @type {TEXT}
279
+ * @default
280
+ */
281
+ AgentName: string;
282
+ /** Point-in-time name of the evaluator.
283
+ *
284
+ * @type {TEXT}
285
+ * @default
286
+ */
287
+ EvaluatorName: string;
288
+ /** The evaluator’s overall comment to the agent.
289
+ *
290
+ * @type {TEXT_LONG}
291
+ * @default
292
+ */
293
+ Feedback: string;
294
+ /** 0-100, one decimal place, computed by the scoring engine. N/A answers are excluded from both sides of the fraction rather than scored as zero.
295
+ *
296
+ * @type {NUMBER}
297
+ * @default
298
+ */
299
+ Score: number;
300
+ /** Human score minus the AI score for the same case, in percentage points. Set on a human submit when an AI evaluation exists.
301
+ *
302
+ * @type {NUMBER}
303
+ * @default
304
+ */
305
+ VarianceVsAi: number;
306
+ /** Sum of the weights actually scored, out of 100. Below 100 means questions were answered N/A and removed from both sides of the fraction — a score of 90 over 73 points is a different claim from 90 over 100.
307
+ *
308
+ * @type {NUMBER}
309
+ * @default
310
+ */
311
+ WeightConsidered: number;
312
+ }
313
+ /**
314
+ * QaEvaluation entity from SupportModule
315
+ *
316
+ * One scoring of one closed Case against the channel scorecard, by a human evaluator or the AI scorer. Amendments supersede rather than mutate, so a correction moves the averages at once and the original stays readable.
317
+ *
318
+ * @module SupportModule
319
+ * @entity QaEvaluation
320
+ * @schemaId 11880071-fb9e-4270-b64f-3db750b97ea7
321
+ * @recordPrefix QAE
322
+ * @capabilities searchable, updateable, undeletable, triggerable
323
+ */
324
+ export declare class QaEvaluation extends OdinRecord<QaEvaluationProperties> {
325
+ entity: 'SupportModule:QaEvaluation';
326
+ type: QaEvaluationEntityTypes;
327
+ schemaId: '11880071-fb9e-4270-b64f-3db750b97ea7';
328
+ properties: QaEvaluationProperties;
329
+ /** Linked Case records (Case__QaEvaluation) */
330
+ Case: OdinLink<LinkedOdinRecord<CaseProperties>>;
331
+ /** Linked QaScorecardTemplate records (QaScorecardTemplate__QaEvaluation) */
332
+ QaScorecardTemplate: OdinLink<LinkedOdinRecord<QaScorecardTemplateProperties>>;
333
+ /** Linked CoachingSession records (QaEvaluation__CoachingSession) */
334
+ CoachingSession: OdinLink<LinkedOdinRecord<CoachingSessionProperties>>;
335
+ /** Linked QaEvaluationAnswer records (QaEvaluation__QaEvaluationAnswer) */
336
+ QaEvaluationAnswer: OdinLink<LinkedOdinRecord<QaEvaluationAnswerProperties>>;
337
+ }
338
+ /**
339
+ * RabbitMQ routing keys for QaEvaluation events
340
+ */
341
+ export declare const ROUTING_KEY_QA_EVALUATION_CREATED = "SupportModule.QaEvaluation.SubDbRecordCreated";
342
+ export declare const ROUTING_KEY_QA_EVALUATION_UPDATED = "SupportModule.QaEvaluation.SubDbRecordUpdated";
343
+ export declare const ROUTING_KEY_QA_EVALUATION_DELETED = "SupportModule.QaEvaluation.SubDbRecordDeleted";
344
+ /**
345
+ * Type-specific routing keys for QaEvaluation events
346
+ * Subscribe to these for events on specific entity types only
347
+ */
348
+ /** This is the default record type created */
349
+ export declare const ROUTING_KEY_QA_EVALUATION_DEFAULT_CREATED = "SupportModule.QaEvaluation.DEFAULT.SubDbRecordCreated";
350
+ /** This is the default record type updated */
351
+ export declare const ROUTING_KEY_QA_EVALUATION_DEFAULT_UPDATED = "SupportModule.QaEvaluation.DEFAULT.SubDbRecordUpdated";
352
+ /** This is the default record type deleted */
353
+ export declare const ROUTING_KEY_QA_EVALUATION_DEFAULT_DELETED = "SupportModule.QaEvaluation.DEFAULT.SubDbRecordDeleted";
354
+ /** Event: QaEvaluation__CoachingSession link created */
355
+ export declare const ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_CREATED = "SupportModule.QaEvaluation.CoachingSession.SubDbRecordAssociationCreated";
356
+ /** Event: QaEvaluation__CoachingSession link deleted */
357
+ export declare const ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_DELETED = "SupportModule.QaEvaluation.CoachingSession.SubDbRecordAssociationDeleted";
358
+ /** Event: QaEvaluation__QaEvaluationAnswer link created */
359
+ export declare const ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_CREATED = "SupportModule.QaEvaluation.QaEvaluationAnswer.SubDbRecordAssociationCreated";
360
+ /** Event: QaEvaluation__QaEvaluationAnswer link deleted */
361
+ export declare const ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_DELETED = "SupportModule.QaEvaluation.QaEvaluationAnswer.SubDbRecordAssociationDeleted";
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /**
3
+ * QaEvaluation Entity Definition
4
+ *
5
+ * One scoring of one closed Case against the channel scorecard, by a human evaluator or the AI scorer. Amendments supersede rather than mutate, so a correction moves the averages at once and the original stays readable.
6
+ *
7
+ * @module SupportModule
8
+ * @entity QaEvaluation
9
+ * @schemaId 11880071-fb9e-4270-b64f-3db750b97ea7
10
+ *
11
+ * AUTO-GENERATED - DO NOT EDIT DIRECTLY
12
+ * Generated from Odin schema definition
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_DELETED = exports.ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_CREATED = exports.ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_DELETED = exports.ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_CREATED = exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_DELETED = exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_UPDATED = exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_CREATED = exports.ROUTING_KEY_QA_EVALUATION_DELETED = exports.ROUTING_KEY_QA_EVALUATION_UPDATED = exports.ROUTING_KEY_QA_EVALUATION_CREATED = exports.QaEvaluation = exports.QaEvaluationPropertyKeys = exports.QaEvaluationPassed = exports.QaEvaluationSource = exports.QaEvaluationChannel = exports.QaEvaluationVarianceFlagged = exports.QaEvaluationAutoFail = exports.DefaultQaEvaluationStageKeys = exports.DefaultQaEvaluationStageNames = exports.QaEvaluationEntityTypes = void 0;
16
+ const core_1 = require("@d19n/odin-types/dist/core");
17
+ /**
18
+ * Available types for QaEvaluation records
19
+ */
20
+ var QaEvaluationEntityTypes;
21
+ (function (QaEvaluationEntityTypes) {
22
+ /** This is the default record type */
23
+ QaEvaluationEntityTypes["DEFAULT"] = "DEFAULT";
24
+ })(QaEvaluationEntityTypes = exports.QaEvaluationEntityTypes || (exports.QaEvaluationEntityTypes = {}));
25
+ /**
26
+ * Pipeline stage names for DEFAULT QaEvaluation
27
+ * Pipeline: QA Evaluation Pipeline
28
+ * Draft → Submitted → Superseded. Only Submitted counts toward any average; an amendment creates a new Submitted record and moves the old one to Superseded.
29
+ */
30
+ var DefaultQaEvaluationStageNames;
31
+ (function (DefaultQaEvaluationStageNames) {
32
+ /** Started and saved without submitting. Private working state — excluded from every average and from the AI-variance comparison. (default) */
33
+ DefaultQaEvaluationStageNames["Draft"] = "Draft";
34
+ /** The evaluation counts. Score, Passed, AutoFail and any variance against the AI are pinned here. This is the only stage the aggregates read. (success) */
35
+ DefaultQaEvaluationStageNames["Submitted"] = "Submitted";
36
+ /** Replaced by an amendment. No longer counts toward any average, but stays readable as the record of what was originally scored and by whom. */
37
+ DefaultQaEvaluationStageNames["Superseded"] = "Superseded";
38
+ })(DefaultQaEvaluationStageNames = exports.DefaultQaEvaluationStageNames || (exports.DefaultQaEvaluationStageNames = {}));
39
+ /**
40
+ * Pipeline stage keys for DEFAULT QaEvaluation
41
+ * Use these keys when transitioning between stages
42
+ */
43
+ var DefaultQaEvaluationStageKeys;
44
+ (function (DefaultQaEvaluationStageKeys) {
45
+ /** Started and saved without submitting. Private working state — excluded from every average and from the AI-variance comparison. */
46
+ DefaultQaEvaluationStageKeys["QaEvaluationStageDraft"] = "QaEvaluationStageDraft";
47
+ /** The evaluation counts. Score, Passed, AutoFail and any variance against the AI are pinned here. This is the only stage the aggregates read. */
48
+ DefaultQaEvaluationStageKeys["QaEvaluationStageSubmitted"] = "QaEvaluationStageSubmitted";
49
+ /** Replaced by an amendment. No longer counts toward any average, but stays readable as the record of what was originally scored and by whom. */
50
+ DefaultQaEvaluationStageKeys["QaEvaluationStageSuperseded"] = "QaEvaluationStageSuperseded";
51
+ })(DefaultQaEvaluationStageKeys = exports.DefaultQaEvaluationStageKeys || (exports.DefaultQaEvaluationStageKeys = {}));
52
+ /**
53
+ * Valid values for QaEvaluation.AutoFail
54
+ *
55
+ * An auto-fail rule was invoked, which zeroes the score whatever else was answered.
56
+ *
57
+ * @remarks Available options:
58
+ * - `NO` - No
59
+ * - `YES` - Yes
60
+ */
61
+ var QaEvaluationAutoFail;
62
+ (function (QaEvaluationAutoFail) {
63
+ QaEvaluationAutoFail["NO"] = "NO";
64
+ QaEvaluationAutoFail["YES"] = "YES";
65
+ })(QaEvaluationAutoFail = exports.QaEvaluationAutoFail || (exports.QaEvaluationAutoFail = {}));
66
+ /**
67
+ * Valid values for QaEvaluation.VarianceFlagged
68
+ *
69
+ * The gap between the human and AI scores exceeded the configured tolerance and is queued for review.
70
+ *
71
+ * @remarks Available options:
72
+ * - `NO` - No
73
+ * - `YES` - Yes
74
+ */
75
+ var QaEvaluationVarianceFlagged;
76
+ (function (QaEvaluationVarianceFlagged) {
77
+ QaEvaluationVarianceFlagged["NO"] = "NO";
78
+ QaEvaluationVarianceFlagged["YES"] = "YES";
79
+ })(QaEvaluationVarianceFlagged = exports.QaEvaluationVarianceFlagged || (exports.QaEvaluationVarianceFlagged = {}));
80
+ /**
81
+ * Valid values for QaEvaluation.Channel
82
+ *
83
+ * Which scorecard applied, copied from the template.
84
+ *
85
+ * @remarks Available options:
86
+ * - `CALL_INBOUND` - Call — inbound
87
+ * - `CALL_OUTBOUND` - Call — outbound
88
+ * - `CHAT` - Chat
89
+ * - `EMAIL` - Email
90
+ */
91
+ var QaEvaluationChannel;
92
+ (function (QaEvaluationChannel) {
93
+ QaEvaluationChannel["CALL_INBOUND"] = "CALL_INBOUND";
94
+ QaEvaluationChannel["CALL_OUTBOUND"] = "CALL_OUTBOUND";
95
+ QaEvaluationChannel["CHAT"] = "CHAT";
96
+ QaEvaluationChannel["EMAIL"] = "EMAIL";
97
+ })(QaEvaluationChannel = exports.QaEvaluationChannel || (exports.QaEvaluationChannel = {}));
98
+ /**
99
+ * Valid values for QaEvaluation.Source
100
+ *
101
+ * Who scored it. HUMAN is a QA evaluator; AI is the Databricks quality_assurance_report endpoint. Averages report the two separately.
102
+ *
103
+ * @remarks Available options:
104
+ * - `AI`
105
+ * - `HUMAN` - Human
106
+ */
107
+ var QaEvaluationSource;
108
+ (function (QaEvaluationSource) {
109
+ QaEvaluationSource["AI"] = "AI";
110
+ QaEvaluationSource["HUMAN"] = "HUMAN";
111
+ })(QaEvaluationSource = exports.QaEvaluationSource || (exports.QaEvaluationSource = {}));
112
+ /**
113
+ * Valid values for QaEvaluation.Passed
114
+ *
115
+ * Score at or above the template benchmark, and no auto-fail.
116
+ *
117
+ * @remarks Available options:
118
+ * - `NO` - No
119
+ * - `YES` - Yes
120
+ */
121
+ var QaEvaluationPassed;
122
+ (function (QaEvaluationPassed) {
123
+ QaEvaluationPassed["NO"] = "NO";
124
+ QaEvaluationPassed["YES"] = "YES";
125
+ })(QaEvaluationPassed = exports.QaEvaluationPassed || (exports.QaEvaluationPassed = {}));
126
+ /**
127
+ * Property keys for QaEvaluation
128
+ * Use these constants instead of string literals for type safety
129
+ */
130
+ var QaEvaluationPropertyKeys;
131
+ (function (QaEvaluationPropertyKeys) {
132
+ /** The agent’s team at evaluation time, from Case.TeamId. Snapshotted because agents move teams and a historical average must not move with them. */
133
+ QaEvaluationPropertyKeys["TeamId"] = "TeamId";
134
+ /** Who scored it — the principal on submit, or the AI bot user for Source=AI. Grouping on this is the calibration view. */
135
+ QaEvaluationPropertyKeys["EvaluatorId"] = "EvaluatorId";
136
+ /** An auto-fail rule was invoked, which zeroes the score whatever else was answered. */
137
+ QaEvaluationPropertyKeys["AutoFail"] = "AutoFail";
138
+ /** Id of the evaluation this one amends. Set only on an amendment; the record it names moves to the Superseded stage. This is the audit trail. */
139
+ QaEvaluationPropertyKeys["SupersedesId"] = "SupersedesId";
140
+ /** Source=AI only: the SupportModule:QaReport generation these answers came from, so the HTML report and the structured score stay connected. */
141
+ QaEvaluationPropertyKeys["QaReportId"] = "QaReportId";
142
+ /** Snapshotted at submit. Without it a later template edit would silently change what an old score meant. */
143
+ QaEvaluationPropertyKeys["TemplateVersion"] = "TemplateVersion";
144
+ /** When it was submitted. The date every average and trend is bucketed by — not createdAt, so that an amendment lands on the date it was made. */
145
+ QaEvaluationPropertyKeys["EvaluatedAt"] = "EvaluatedAt";
146
+ /** The gap between the human and AI scores exceeded the configured tolerance and is queued for review. */
147
+ QaEvaluationPropertyKeys["VarianceFlagged"] = "VarianceFlagged";
148
+ /** The case this evaluation scores. The real link; holds a uuid so it is not shown in tables — the readable reference is the Case column below. */
149
+ QaEvaluationPropertyKeys["CaseId"] = "CaseId";
150
+ /** Record number of the case this evaluation scores, e.g. SC6490. */
151
+ QaEvaluationPropertyKeys["Case"] = "Case";
152
+ /** The scorecard template this was scored against. */
153
+ QaEvaluationPropertyKeys["TemplateId"] = "TemplateId";
154
+ /** Which scorecard applied, copied from the template. */
155
+ QaEvaluationPropertyKeys["Channel"] = "Channel";
156
+ /** Who scored it. HUMAN is a QA evaluator; AI is the Databricks quality_assurance_report endpoint. Averages report the two separately. */
157
+ QaEvaluationPropertyKeys["Source"] = "Source";
158
+ /** Score at or above the template benchmark, and no auto-fail. */
159
+ QaEvaluationPropertyKeys["Passed"] = "Passed";
160
+ /** Which rule, e.g. AF.3 for the GDPR rule. Empty unless AutoFail is YES. */
161
+ QaEvaluationPropertyKeys["AutoFailRuleId"] = "AutoFailRuleId";
162
+ /** The evaluated agent, from Case.OwnerId at evaluation time. NOT R_AssignedOrgUserId: measured on production 2026-09-04, OwnerId is populated on 77% of classified cases and R_AssignedOrgUserId on none. */
163
+ QaEvaluationPropertyKeys["AgentId"] = "AgentId";
164
+ /** Point-in-time name of the evaluated agent, so a report reads correctly after someone leaves. */
165
+ QaEvaluationPropertyKeys["AgentName"] = "AgentName";
166
+ /** Point-in-time name of the evaluator. */
167
+ QaEvaluationPropertyKeys["EvaluatorName"] = "EvaluatorName";
168
+ /** The evaluator’s overall comment to the agent. */
169
+ QaEvaluationPropertyKeys["Feedback"] = "Feedback";
170
+ /** 0-100, one decimal place, computed by the scoring engine. N/A answers are excluded from both sides of the fraction rather than scored as zero. */
171
+ QaEvaluationPropertyKeys["Score"] = "Score";
172
+ /** Human score minus the AI score for the same case, in percentage points. Set on a human submit when an AI evaluation exists. */
173
+ QaEvaluationPropertyKeys["VarianceVsAi"] = "VarianceVsAi";
174
+ /** Sum of the weights actually scored, out of 100. Below 100 means questions were answered N/A and removed from both sides of the fraction — a score of 90 over 73 points is a different claim from 90 over 100. */
175
+ QaEvaluationPropertyKeys["WeightConsidered"] = "WeightConsidered";
176
+ })(QaEvaluationPropertyKeys = exports.QaEvaluationPropertyKeys || (exports.QaEvaluationPropertyKeys = {}));
177
+ /**
178
+ * QaEvaluation entity from SupportModule
179
+ *
180
+ * One scoring of one closed Case against the channel scorecard, by a human evaluator or the AI scorer. Amendments supersede rather than mutate, so a correction moves the averages at once and the original stays readable.
181
+ *
182
+ * @module SupportModule
183
+ * @entity QaEvaluation
184
+ * @schemaId 11880071-fb9e-4270-b64f-3db750b97ea7
185
+ * @recordPrefix QAE
186
+ * @capabilities searchable, updateable, undeletable, triggerable
187
+ */
188
+ class QaEvaluation extends core_1.OdinRecord {
189
+ }
190
+ exports.QaEvaluation = QaEvaluation;
191
+ // ============================================
192
+ // RABBITMQ EVENT ROUTING KEYS
193
+ // ============================================
194
+ /**
195
+ * RabbitMQ routing keys for QaEvaluation events
196
+ */
197
+ exports.ROUTING_KEY_QA_EVALUATION_CREATED = 'SupportModule.QaEvaluation.SubDbRecordCreated';
198
+ exports.ROUTING_KEY_QA_EVALUATION_UPDATED = 'SupportModule.QaEvaluation.SubDbRecordUpdated';
199
+ exports.ROUTING_KEY_QA_EVALUATION_DELETED = 'SupportModule.QaEvaluation.SubDbRecordDeleted';
200
+ /**
201
+ * Type-specific routing keys for QaEvaluation events
202
+ * Subscribe to these for events on specific entity types only
203
+ */
204
+ /** This is the default record type created */
205
+ exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_CREATED = 'SupportModule.QaEvaluation.DEFAULT.SubDbRecordCreated';
206
+ /** This is the default record type updated */
207
+ exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_UPDATED = 'SupportModule.QaEvaluation.DEFAULT.SubDbRecordUpdated';
208
+ /** This is the default record type deleted */
209
+ exports.ROUTING_KEY_QA_EVALUATION_DEFAULT_DELETED = 'SupportModule.QaEvaluation.DEFAULT.SubDbRecordDeleted';
210
+ /** Event: QaEvaluation__CoachingSession link created */
211
+ exports.ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_CREATED = 'SupportModule.QaEvaluation.CoachingSession.SubDbRecordAssociationCreated';
212
+ /** Event: QaEvaluation__CoachingSession link deleted */
213
+ exports.ROUTING_KEY_LINK_QA_EVALUATION_COACHING_SESSION_DELETED = 'SupportModule.QaEvaluation.CoachingSession.SubDbRecordAssociationDeleted';
214
+ /** Event: QaEvaluation__QaEvaluationAnswer link created */
215
+ exports.ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_CREATED = 'SupportModule.QaEvaluation.QaEvaluationAnswer.SubDbRecordAssociationCreated';
216
+ /** Event: QaEvaluation__QaEvaluationAnswer link deleted */
217
+ exports.ROUTING_KEY_LINK_QA_EVALUATION_QA_EVALUATION_ANSWER_DELETED = 'SupportModule.QaEvaluation.QaEvaluationAnswer.SubDbRecordAssociationDeleted';