clarion-shared-types 1.0.111 → 1.0.113

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 (31) hide show
  1. package/dist/cjs/index.js +1 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/modules/newsfeed/index.js +19 -0
  4. package/dist/cjs/modules/newsfeed/index.js.map +1 -0
  5. package/dist/cjs/modules/newsfeed/interfaces/newsfeed-analytics.js +19 -0
  6. package/dist/cjs/modules/newsfeed/interfaces/newsfeed-analytics.js.map +1 -0
  7. package/dist/cjs/modules/permission/enums/permission-actions.enum.js +6 -0
  8. package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
  9. package/dist/cjs/modules/support/index.js +1 -0
  10. package/dist/cjs/modules/support/index.js.map +1 -1
  11. package/dist/cjs/modules/support/interfaces/support-analytics.js +30 -0
  12. package/dist/cjs/modules/support/interfaces/support-analytics.js.map +1 -0
  13. package/dist/esm/index.js +1 -0
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/modules/newsfeed/index.js +3 -0
  16. package/dist/esm/modules/newsfeed/index.js.map +1 -0
  17. package/dist/esm/modules/newsfeed/interfaces/newsfeed-analytics.js +18 -0
  18. package/dist/esm/modules/newsfeed/interfaces/newsfeed-analytics.js.map +1 -0
  19. package/dist/esm/modules/permission/enums/permission-actions.enum.js +6 -0
  20. package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
  21. package/dist/esm/modules/support/index.js +1 -0
  22. package/dist/esm/modules/support/index.js.map +1 -1
  23. package/dist/esm/modules/support/interfaces/support-analytics.js +29 -0
  24. package/dist/esm/modules/support/interfaces/support-analytics.js.map +1 -0
  25. package/dist/types/index.d.ts +1 -0
  26. package/dist/types/modules/newsfeed/index.d.ts +1 -0
  27. package/dist/types/modules/newsfeed/interfaces/newsfeed-analytics.d.ts +324 -0
  28. package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +2 -0
  29. package/dist/types/modules/support/index.d.ts +1 -0
  30. package/dist/types/modules/support/interfaces/support-analytics.d.ts +390 -0
  31. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -41,6 +41,7 @@ __exportStar(require("./modules/partner/index"), exports);
41
41
  __exportStar(require("./modules/support/index"), exports);
42
42
  __exportStar(require("./modules/safety/index"), exports);
43
43
  __exportStar(require("./modules/billing/index"), exports);
44
+ __exportStar(require("./modules/newsfeed/index"), exports);
44
45
  // Interfaces
45
46
  __exportStar(require("./modules/common/interfaces/server-message"), exports);
46
47
  __exportStar(require("./modules/common/interfaces/pagination"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,UAAU;AACV,uDAAqC;AACrC,+DAA6C;AAC7C,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,uDAAqC;AACrC,iEAA+C;AAC/C,gEAA8C;AAC9C,2DAAyC;AACzC,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,yDAAuC;AACvC,mEAAiD;AACjD,+DAA6C;AAC7C,uDAAqC;AACrC,0DAAwC;AACxC,2DAAyC;AACzC,8DAA4C;AAC5C,iEAA+C;AAC/C,+DAA6C;AAC7C,0DAAwC;AACxC,0DAAwC;AACxC,yDAAuC;AACvC,0DAAwC;AAExC,aAAa;AACb,6EAA2D;AAC3D,yEAAuD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,UAAU;AACV,uDAAqC;AACrC,+DAA6C;AAC7C,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,uDAAqC;AACrC,iEAA+C;AAC/C,gEAA8C;AAC9C,2DAAyC;AACzC,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,yDAAuC;AACvC,mEAAiD;AACjD,+DAA6C;AAC7C,uDAAqC;AACrC,0DAAwC;AACxC,2DAAyC;AACzC,8DAA4C;AAC5C,iEAA+C;AAC/C,+DAA6C;AAC7C,0DAAwC;AACxC,0DAAwC;AACxC,yDAAuC;AACvC,0DAAwC;AACxC,2DAAyC;AAEzC,aAAa;AACb,6EAA2D;AAC3D,yEAAuD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Interfaces
18
+ __exportStar(require("./interfaces/newsfeed-analytics"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/newsfeed/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,aAAa;AACb,kEAAgD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Newsfeed analytics (the admin's Newsfeed Analytics): what an organization published
4
+ * to its members, and how the members responded - likes, comments, shares - when, how
5
+ * quickly, and to what kind of post.
6
+ *
7
+ * One read, computed by clarion-newsfeed from one consistent snapshot, so every number
8
+ * on a dashboard agrees with every other. Counts, durations and the organization's own
9
+ * posts only: never a member's name, never who liked, commented or shared.
10
+ *
11
+ * Posts are counted by when they were FIRST published (a post archived and published
12
+ * again counts once). Responses are counted by when they were made, whenever the post
13
+ * was published. A like that was taken back is gone (an unlike deletes it), so likes
14
+ * are the likes still standing - the ones taken back are counted separately, from the
15
+ * events the service emitted. Comments are every comment written, including any since
16
+ * hidden by a moderator or removed.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ //# sourceMappingURL=newsfeed-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newsfeed-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/newsfeed/interfaces/newsfeed-analytics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -115,6 +115,9 @@ var PermissionActions;
115
115
  PermissionActions["MANAGE_SUPPORT_SLA"] = "manage:support-sla";
116
116
  PermissionActions["MANAGE_SUPPORT_CONFIGURATION"] = "manage:support-configuration";
117
117
  PermissionActions["READ_SUPPORT_REPORT"] = "read:support-report";
118
+ // Support Analytics: how the desk did over a period - totals only. Held by
119
+ // exactly the roles that read the support reports.
120
+ PermissionActions["READ_SUPPORT_ANALYTICS"] = "read:support-analytics";
118
121
  PermissionActions["READ_SUPPORT_SYNC"] = "read:support-sync";
119
122
  PermissionActions["MANAGE_SUPPORT_SYNC"] = "manage:support-sync";
120
123
  // Module: Notification
@@ -216,6 +219,9 @@ var PermissionActions;
216
219
  PermissionActions["READ_NEWSFEED_FEED"] = "read:newsfeed-feed";
217
220
  PermissionActions["ENGAGE_NEWSFEED_POST"] = "engage:newsfeed-post";
218
221
  PermissionActions["MODERATE_NEWSFEED_COMMENT"] = "moderate:newsfeed-comment";
222
+ // Newsfeed Analytics: what was published and how the members responded - totals
223
+ // only. Held by everybody who reads the posts as staff do (read:newsfeed-post).
224
+ PermissionActions["READ_NEWSFEED_ANALYTICS"] = "read:newsfeed-analytics";
219
225
  // Module: Alert Intake
220
226
  // The channels the PUBLIC reaches an organization on without the app - its SMS
221
227
  // short code, WhatsApp number and mailbox (clarion-alerts) - configuring them, and
@@ -1 +1 @@
1
- {"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ __exportStar(require("./interfaces/customer-feedback.dto"), exports);
22
22
  __exportStar(require("./interfaces/support-configuration.dto"), exports);
23
23
  __exportStar(require("./interfaces/support-sync.dto"), exports);
24
24
  __exportStar(require("./interfaces/support-reports.dto"), exports);
25
+ __exportStar(require("./interfaces/support-analytics"), exports);
25
26
  // Utilities
26
27
  __exportStar(require("./utils/support-display.util"), exports);
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/support/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,wDAAsC;AAEtC,oBAAoB;AACpB,kEAAgD;AAChD,qEAAmD;AACnD,yEAAuD;AACvD,gEAA8C;AAC9C,mEAAiD;AAEjD,YAAY;AACZ,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/support/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,wDAAsC;AAEtC,oBAAoB;AACpB,kEAAgD;AAChD,qEAAmD;AACnD,yEAAuD;AACvD,gEAA8C;AAC9C,mEAAiD;AACjD,iEAA+C;AAE/C,YAAY;AACZ,+DAA6C"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Support analytics (the admin's Support Analytics): how the support desk did over a
4
+ * period - tickets raised and settled, how quickly they were answered and resolved,
5
+ * the SLA, what customers asked about, the agents, what customers thought of the
6
+ * help they got, the feedback they left, and whether the helpdesk mirror kept up.
7
+ *
8
+ * One read, computed by clarion-support from one consistent snapshot, so every number
9
+ * on a dashboard agrees with every other. Counts, rates and durations only: never a
10
+ * customer's name, a subject or a message. The only people named are AGENTS, as on
11
+ * the desk's own team report.
12
+ *
13
+ * DURATIONS ARE IN SECONDS, like every analytics contract (the support REPORTS use
14
+ * minutes; this is a separate contract). They are calendar time - an SLA measured in
15
+ * business hours can be met while the calendar duration looks long.
16
+ *
17
+ * How it is counted:
18
+ * - A ticket is RAISED when created. It is RESOLVED, CLOSED, REOPENED or CANCELLED
19
+ * when its status history says it moved there - a reopen clears the ticket's own
20
+ * resolvedAt, so the history is the only record of the earlier resolution.
21
+ * - Time to resolve runs from raising to the FIRST time the ticket was resolved or
22
+ * closed, for tickets first settled in the period: it measures the original
23
+ * request and does not move when a ticket is reopened.
24
+ * - SLA compliance counts SETTLED clocks only (met or breached); a running clock is
25
+ * neither. Breach alerts are the monitor's breach events in the period - a ticket
26
+ * whose deadline later moved (waiting on the customer, a reopen) can be breached
27
+ * once and still end up met.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ //# sourceMappingURL=support-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/support/interfaces/support-analytics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG"}
package/dist/esm/index.js CHANGED
@@ -25,6 +25,7 @@ export * from './modules/partner/index';
25
25
  export * from './modules/support/index';
26
26
  export * from './modules/safety/index';
27
27
  export * from './modules/billing/index';
28
+ export * from './modules/newsfeed/index';
28
29
  // Interfaces
29
30
  export * from './modules/common/interfaces/server-message';
30
31
  export * from './modules/common/interfaces/pagination';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAExC,aAAa;AACb,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,aAAa;AACb,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Interfaces
2
+ export * from './interfaces/newsfeed-analytics';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/newsfeed/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Newsfeed analytics (the admin's Newsfeed Analytics): what an organization published
3
+ * to its members, and how the members responded - likes, comments, shares - when, how
4
+ * quickly, and to what kind of post.
5
+ *
6
+ * One read, computed by clarion-newsfeed from one consistent snapshot, so every number
7
+ * on a dashboard agrees with every other. Counts, durations and the organization's own
8
+ * posts only: never a member's name, never who liked, commented or shared.
9
+ *
10
+ * Posts are counted by when they were FIRST published (a post archived and published
11
+ * again counts once). Responses are counted by when they were made, whenever the post
12
+ * was published. A like that was taken back is gone (an unlike deletes it), so likes
13
+ * are the likes still standing - the ones taken back are counted separately, from the
14
+ * events the service emitted. Comments are every comment written, including any since
15
+ * hidden by a moderator or removed.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=newsfeed-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newsfeed-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/newsfeed/interfaces/newsfeed-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -112,6 +112,9 @@ export var PermissionActions;
112
112
  PermissionActions["MANAGE_SUPPORT_SLA"] = "manage:support-sla";
113
113
  PermissionActions["MANAGE_SUPPORT_CONFIGURATION"] = "manage:support-configuration";
114
114
  PermissionActions["READ_SUPPORT_REPORT"] = "read:support-report";
115
+ // Support Analytics: how the desk did over a period - totals only. Held by
116
+ // exactly the roles that read the support reports.
117
+ PermissionActions["READ_SUPPORT_ANALYTICS"] = "read:support-analytics";
115
118
  PermissionActions["READ_SUPPORT_SYNC"] = "read:support-sync";
116
119
  PermissionActions["MANAGE_SUPPORT_SYNC"] = "manage:support-sync";
117
120
  // Module: Notification
@@ -213,6 +216,9 @@ export var PermissionActions;
213
216
  PermissionActions["READ_NEWSFEED_FEED"] = "read:newsfeed-feed";
214
217
  PermissionActions["ENGAGE_NEWSFEED_POST"] = "engage:newsfeed-post";
215
218
  PermissionActions["MODERATE_NEWSFEED_COMMENT"] = "moderate:newsfeed-comment";
219
+ // Newsfeed Analytics: what was published and how the members responded - totals
220
+ // only. Held by everybody who reads the posts as staff do (read:newsfeed-post).
221
+ PermissionActions["READ_NEWSFEED_ANALYTICS"] = "read:newsfeed-analytics";
216
222
  // Module: Alert Intake
217
223
  // The channels the PUBLIC reaches an organization on without the app - its SMS
218
224
  // short code, WhatsApp number and mailbox (clarion-alerts) - configuring them, and
@@ -1 +1 @@
1
- {"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export * from './interfaces/customer-feedback.dto';
6
6
  export * from './interfaces/support-configuration.dto';
7
7
  export * from './interfaces/support-sync.dto';
8
8
  export * from './interfaces/support-reports.dto';
9
+ export * from './interfaces/support-analytics';
9
10
  // Utilities
10
11
  export * from './utils/support-display.util';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/support/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,uBAAuB,CAAC;AAEtC,oBAAoB;AACpB,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AAEjD,YAAY;AACZ,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/support/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,uBAAuB,CAAC;AAEtC,oBAAoB;AACpB,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAE/C,YAAY;AACZ,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Support analytics (the admin's Support Analytics): how the support desk did over a
3
+ * period - tickets raised and settled, how quickly they were answered and resolved,
4
+ * the SLA, what customers asked about, the agents, what customers thought of the
5
+ * help they got, the feedback they left, and whether the helpdesk mirror kept up.
6
+ *
7
+ * One read, computed by clarion-support from one consistent snapshot, so every number
8
+ * on a dashboard agrees with every other. Counts, rates and durations only: never a
9
+ * customer's name, a subject or a message. The only people named are AGENTS, as on
10
+ * the desk's own team report.
11
+ *
12
+ * DURATIONS ARE IN SECONDS, like every analytics contract (the support REPORTS use
13
+ * minutes; this is a separate contract). They are calendar time - an SLA measured in
14
+ * business hours can be met while the calendar duration looks long.
15
+ *
16
+ * How it is counted:
17
+ * - A ticket is RAISED when created. It is RESOLVED, CLOSED, REOPENED or CANCELLED
18
+ * when its status history says it moved there - a reopen clears the ticket's own
19
+ * resolvedAt, so the history is the only record of the earlier resolution.
20
+ * - Time to resolve runs from raising to the FIRST time the ticket was resolved or
21
+ * closed, for tickets first settled in the period: it measures the original
22
+ * request and does not move when a ticket is reopened.
23
+ * - SLA compliance counts SETTLED clocks only (met or breached); a running clock is
24
+ * neither. Breach alerts are the monitor's breach events in the period - a ticket
25
+ * whose deadline later moved (waiting on the customer, a reopen) can be breached
26
+ * once and still end up met.
27
+ */
28
+ export {};
29
+ //# sourceMappingURL=support-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/support/interfaces/support-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG"}
@@ -24,5 +24,6 @@ export * from './modules/partner/index';
24
24
  export * from './modules/support/index';
25
25
  export * from './modules/safety/index';
26
26
  export * from './modules/billing/index';
27
+ export * from './modules/newsfeed/index';
27
28
  export * from './modules/common/interfaces/server-message';
28
29
  export * from './modules/common/interfaces/pagination';
@@ -0,0 +1 @@
1
+ export * from './interfaces/newsfeed-analytics';
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Newsfeed analytics (the admin's Newsfeed Analytics): what an organization published
3
+ * to its members, and how the members responded - likes, comments, shares - when, how
4
+ * quickly, and to what kind of post.
5
+ *
6
+ * One read, computed by clarion-newsfeed from one consistent snapshot, so every number
7
+ * on a dashboard agrees with every other. Counts, durations and the organization's own
8
+ * posts only: never a member's name, never who liked, commented or shared.
9
+ *
10
+ * Posts are counted by when they were FIRST published (a post archived and published
11
+ * again counts once). Responses are counted by when they were made, whenever the post
12
+ * was published. A like that was taken back is gone (an unlike deletes it), so likes
13
+ * are the likes still standing - the ones taken back are counted separately, from the
14
+ * events the service emitted. Comments are every comment written, including any since
15
+ * hidden by a moderator or removed.
16
+ */
17
+ /** How the period is cut into points for the charts. Chosen by the service from the length of the period. */
18
+ export type NewsfeedAnalyticsBucket = 'hour' | 'day' | 'week' | 'month';
19
+ export interface NewsfeedAnalyticsRange {
20
+ /** Inclusive, ISO 8601. The first post's creation when the period asked for was "forever". */
21
+ from: string;
22
+ /** Exclusive, ISO 8601. */
23
+ to: string;
24
+ bucket: NewsfeedAnalyticsBucket;
25
+ /** IANA time zone the buckets, the times of day and the hour-of-week grid are cut in. */
26
+ timeZone: string;
27
+ }
28
+ /** A count by a key (a status, a kind, a band), largest first unless the section says otherwise. */
29
+ export interface NewsfeedAnalyticsCount<K extends string = string> {
30
+ key: K;
31
+ count: number;
32
+ }
33
+ /** Median and 90th percentile of one duration, in seconds; null when nothing was measured. */
34
+ export interface NewsfeedAnalyticsDuration {
35
+ median: number | null;
36
+ p90: number | null;
37
+ /** How many were measured. */
38
+ count: number;
39
+ }
40
+ /** What was published in the period, and the feed as it stands now. */
41
+ export interface NewsfeedAnalyticsPosts {
42
+ /** First published in the period. */
43
+ published: number;
44
+ /** Of those, written as a draft and published later (more than a minute after it was written). */
45
+ draftedFirst: number;
46
+ /** Of those, published the moment they were written. */
47
+ publishedStraightAway: number;
48
+ /** From written to published, for those drafted first. */
49
+ draftToPublish: NewsfeedAnalyticsDuration;
50
+ /** Written in the period, published or not. */
51
+ written: number;
52
+ /** Of those published in the period: with at least one image, with a video, with no media at all. */
53
+ withImages: number;
54
+ withVideo: number;
55
+ textOnly: number;
56
+ /** Images and videos attached to the posts published in the period. */
57
+ mediaItems: number;
58
+ /** Staff who published in the period. */
59
+ authors: number;
60
+ /** Of those published in the period: archived since, and deleted since. */
61
+ archivedSince: number;
62
+ deletedSince: number;
63
+ /** NOW, whatever the period: the posts members can see, drafts waiting, archived and deleted posts. */
64
+ liveNow: number;
65
+ draftsNow: number;
66
+ archivedNow: number;
67
+ deletedNow: number;
68
+ /** When the oldest draft still waiting was written; null when there is none. */
69
+ oldestDraftAt: string | null;
70
+ /** The last time anything was published - whatever the period. */
71
+ lastPublishedAt: string | null;
72
+ /** Every post now by where it stands: PUBLISHED, DRAFT, ARCHIVED, DELETED - zeros included. */
73
+ byStatus: NewsfeedAnalyticsCount[];
74
+ /** The posts published in the period by kind: TEXT, IMAGE (one), GALLERY (several), VIDEO - zeros included. */
75
+ byKind: NewsfeedAnalyticsCount[];
76
+ }
77
+ /** How the members responded in the period. */
78
+ export interface NewsfeedAnalyticsEngagement {
79
+ /** Likes, comments and shares made in the period. */
80
+ total: number;
81
+ /** Likes made in the period and still standing. */
82
+ likes: number;
83
+ /** Likes taken back in the period - they are not in `likes`. */
84
+ unliked: number;
85
+ /** Comments written in the period, replies included. */
86
+ comments: number;
87
+ shares: number;
88
+ /** Members who responded at all - and who liked, commented, shared (a member can be all three). */
89
+ members: number;
90
+ likers: number;
91
+ commenters: number;
92
+ sharers: number;
93
+ /** Members whose first response to this feed, ever, was in the period. */
94
+ newMembers: number;
95
+ /** Members who responded to more than one post in the period. */
96
+ repeatMembers: number;
97
+ /** Posts that drew any response in the period, whenever they were published. */
98
+ postsResponded: number;
99
+ /** Of the posts published in the period: those that have drawn a response, by the end of the period. */
100
+ publishedResponded: number;
101
+ /** Responses drawn by the posts published in the period, by the end of the period. */
102
+ publishedResponses: number;
103
+ /** publishedResponses / posts published in the period; null when nothing was published. */
104
+ perPublishedPost: number | null;
105
+ /** From a post published in the period going out to its first like, comment or share. */
106
+ firstResponse: NewsfeedAnalyticsDuration;
107
+ /** Of the responses to the posts published in the period, the share made in each post's first 24 hours, as a percentage. */
108
+ firstDayShare: number | null;
109
+ /** The period's responses by how old the post was: H1 (first hour), H6, D1, D3, W1, M1, OLDER - in that order. */
110
+ byPostAge: NewsfeedAnalyticsCount[];
111
+ /** The posts published in the period by the responses they drew: NONE, 1-2, 3-5, 6-10, 11-25, 26+ - in that order. */
112
+ postsByResponses: NewsfeedAnalyticsCount[];
113
+ /** The members who responded, by how many times: 1, 2-3, 4-10, 11+ - in that order. */
114
+ membersByResponses: NewsfeedAnalyticsCount[];
115
+ /** The members who responded, by what they did: LIKED, COMMENTED or SHARED only, or SEVERAL. */
116
+ membersByKind: NewsfeedAnalyticsCount[];
117
+ }
118
+ /** The conversation under the posts. */
119
+ export interface NewsfeedAnalyticsComments {
120
+ /** Written in the period. */
121
+ written: number;
122
+ /** Of those, replies to another comment. */
123
+ replies: number;
124
+ commenters: number;
125
+ /** Posts commented on in the period. */
126
+ postsDiscussed: number;
127
+ /** Of those written in the period, where they stand now: VISIBLE, HIDDEN by a moderator, REMOVED. */
128
+ visible: number;
129
+ hidden: number;
130
+ removed: number;
131
+ /** Every comment a moderator is holding back now, whenever it was written. */
132
+ hiddenNow: number;
133
+ }
134
+ /** Posts members passed on. */
135
+ export interface NewsfeedAnalyticsShares {
136
+ shares: number;
137
+ sharers: number;
138
+ /** Posts shared in the period. */
139
+ postsShared: number;
140
+ /** Where the app says it went: WHATSAPP, SMS, EMAIL, SYSTEM_SHARE (the phone's share sheet), COPIED_LINK, OTHER. */
141
+ byTarget: NewsfeedAnalyticsCount[];
142
+ /**
143
+ * The app the phone's share sheet handed it to, when the phone said - an Android
144
+ * package such as `com.whatsapp` - or NOT_RECORDED. The ten most used.
145
+ */
146
+ byApp: NewsfeedAnalyticsCount[];
147
+ }
148
+ /** One group of the posts published in the period, and what they drew by the end of it. */
149
+ export interface NewsfeedAnalyticsContentRow {
150
+ key: string;
151
+ posts: number;
152
+ /** Posts that drew at least one response. */
153
+ responded: number;
154
+ likes: number;
155
+ comments: number;
156
+ shares: number;
157
+ }
158
+ /** What draws a response: the posts published in the period, grouped four ways. */
159
+ export interface NewsfeedAnalyticsContent {
160
+ /** TEXT, IMAGE, GALLERY, VIDEO - zeros included. */
161
+ byKind: NewsfeedAnalyticsContentRow[];
162
+ /** SHORT (under 280 characters), MEDIUM (280 to 999), LONG (1,000 and more) - zeros included. */
163
+ byLength: NewsfeedAnalyticsContentRow[];
164
+ /** When it went out, in `range.timeZone`: NIGHT (00-06), MORNING (06-12), AFTERNOON (12-18), EVENING (18-24) - zeros included. */
165
+ byDaypart: NewsfeedAnalyticsContentRow[];
166
+ /** TITLED or UNTITLED - zeros included. */
167
+ byTitle: NewsfeedAnalyticsContentRow[];
168
+ }
169
+ /** One kind of event the service handed on, and how that went. */
170
+ export interface NewsfeedAnalyticsDeliveryType {
171
+ /** The event, e.g. newsfeed.post.published. */
172
+ type: string;
173
+ events: number;
174
+ delivered: number;
175
+ /** Failed and being retried, or given up on. */
176
+ failed: number;
177
+ /** Not handed on yet. */
178
+ waiting: number;
179
+ medianLagSeconds: number | null;
180
+ }
181
+ /**
182
+ * Behind the scenes: the events clarion-newsfeed handed to the platform about these
183
+ * posts in the period. A published post's event is what clarion-notification turns into
184
+ * the push members receive, so `announcements` is whether members were told.
185
+ */
186
+ export interface NewsfeedAnalyticsDelivery {
187
+ events: number;
188
+ delivered: number;
189
+ /** Not handed on yet (pending or being sent). */
190
+ waiting: number;
191
+ /** Failed, and to be tried again. */
192
+ retrying: number;
193
+ /** Failed every attempt - nobody was told. */
194
+ gaveUp: number;
195
+ /** Delivered, but not at the first attempt. */
196
+ retried: number;
197
+ /** From the event being written to it being handed on - delivered ones. */
198
+ lag: NewsfeedAnalyticsDuration;
199
+ /** Published-post events: the push announcements. */
200
+ announcements: number;
201
+ announcementsDelivered: number;
202
+ byType: NewsfeedAnalyticsDeliveryType[];
203
+ }
204
+ /** One post: what it is, and how members responded - in the period, and in all by the end of it. */
205
+ export interface NewsfeedAnalyticsPostRow {
206
+ id: number;
207
+ organizationId: number;
208
+ countryCode: string;
209
+ /** The title, or the opening of the text when it has none. */
210
+ title: string;
211
+ hasTitle: boolean;
212
+ /** PUBLISHED, DRAFT or ARCHIVED. */
213
+ status: string;
214
+ deleted: boolean;
215
+ /** TEXT, IMAGE, GALLERY or VIDEO. */
216
+ kind: string;
217
+ images: number;
218
+ videos: number;
219
+ publishedAt: string | null;
220
+ /** In the period. */
221
+ responses: number;
222
+ likes: number;
223
+ comments: number;
224
+ shares: number;
225
+ members: number;
226
+ /** In all, by the end of the period. */
227
+ totalLikes: number;
228
+ totalComments: number;
229
+ totalShares: number;
230
+ /** From publishing to its first response; null when it has none. */
231
+ firstResponseSeconds: number | null;
232
+ }
233
+ /** One country's posts. */
234
+ export interface NewsfeedAnalyticsCountryRow {
235
+ countryCode: string;
236
+ published: number;
237
+ liveNow: number;
238
+ likes: number;
239
+ comments: number;
240
+ shares: number;
241
+ members: number;
242
+ }
243
+ /** A Super-Admin's view of every organization: one row each, busiest first. */
244
+ export interface NewsfeedAnalyticsOrganizationRow {
245
+ organizationId: number;
246
+ published: number;
247
+ liveNow: number;
248
+ draftsNow: number;
249
+ likes: number;
250
+ comments: number;
251
+ shares: number;
252
+ members: number;
253
+ postsResponded: number;
254
+ /** Responses per post published in the period, by the end of it. */
255
+ perPublishedPost: number | null;
256
+ lastPublishedAt: string | null;
257
+ }
258
+ /** One point on the charts: a bucket of the period. */
259
+ export interface NewsfeedAnalyticsPoint {
260
+ /** Local wall-clock start of the bucket, in `range.timeZone` (no offset). */
261
+ bucket: string;
262
+ published: number;
263
+ likes: number;
264
+ comments: number;
265
+ shares: number;
266
+ /** Likes taken back. */
267
+ unliked: number;
268
+ /** Members who responded in the bucket. */
269
+ members: number;
270
+ }
271
+ /** One hour of the week: the responses made in it, and the posts published in it. Weekday 1 is Monday. */
272
+ export interface NewsfeedAnalyticsHeatCell {
273
+ weekday: number;
274
+ hour: number;
275
+ responses: number;
276
+ published: number;
277
+ }
278
+ /** The previous period of the same length, for the change on each headline figure. */
279
+ export interface NewsfeedAnalyticsPrevious {
280
+ from: string;
281
+ to: string;
282
+ published: number;
283
+ likes: number;
284
+ unliked: number;
285
+ comments: number;
286
+ shares: number;
287
+ members: number;
288
+ newMembers: number;
289
+ postsResponded: number;
290
+ medianSecondsToFirstResponse: number | null;
291
+ }
292
+ export interface NewsfeedAnalytics {
293
+ /** Whose figures: one organization, or null for every organization. */
294
+ organizationId: number | null;
295
+ /** The one country the figures are narrowed to, or null for every country. */
296
+ countryCode: string | null;
297
+ range: NewsfeedAnalyticsRange;
298
+ generatedAt: string;
299
+ previous: NewsfeedAnalyticsPrevious | null;
300
+ /** The countries posts were written for, in scope and whatever country is chosen - for narrowing to one. */
301
+ countryOptions: NewsfeedAnalyticsCount[];
302
+ posts: NewsfeedAnalyticsPosts;
303
+ engagement: NewsfeedAnalyticsEngagement;
304
+ comments: NewsfeedAnalyticsComments;
305
+ shares: NewsfeedAnalyticsShares;
306
+ content: NewsfeedAnalyticsContent;
307
+ delivery: NewsfeedAnalyticsDelivery;
308
+ timeline: NewsfeedAnalyticsPoint[];
309
+ /** All 168 hours of the week, Monday first, zeros included. */
310
+ heatmap: NewsfeedAnalyticsHeatCell[];
311
+ /** Posts published in the period or responded to in it, most responses in the period first - at most 50. */
312
+ topPosts: NewsfeedAnalyticsPostRow[];
313
+ byCountry: NewsfeedAnalyticsCountryRow[];
314
+ /** A Super-Admin looking at every organization only. */
315
+ byOrganization?: NewsfeedAnalyticsOrganizationRow[];
316
+ }
317
+ /** What a dashboard asks: the period, one country - and, for a Super-Admin, whose figures. */
318
+ export interface NewsfeedAnalyticsQuery {
319
+ from?: string;
320
+ to?: string;
321
+ timeZone?: string;
322
+ organizationId?: number;
323
+ countryCode?: string;
324
+ }
@@ -82,6 +82,7 @@ export declare enum PermissionActions {
82
82
  MANAGE_SUPPORT_SLA = "manage:support-sla",
83
83
  MANAGE_SUPPORT_CONFIGURATION = "manage:support-configuration",
84
84
  READ_SUPPORT_REPORT = "read:support-report",
85
+ READ_SUPPORT_ANALYTICS = "read:support-analytics",
85
86
  READ_SUPPORT_SYNC = "read:support-sync",
86
87
  MANAGE_SUPPORT_SYNC = "manage:support-sync",
87
88
  READ_NOTIFICATION_BRANDING = "read:notification-branding",
@@ -167,6 +168,7 @@ export declare enum PermissionActions {
167
168
  READ_NEWSFEED_FEED = "read:newsfeed-feed",
168
169
  ENGAGE_NEWSFEED_POST = "engage:newsfeed-post",
169
170
  MODERATE_NEWSFEED_COMMENT = "moderate:newsfeed-comment",
171
+ READ_NEWSFEED_ANALYTICS = "read:newsfeed-analytics",
170
172
  CREATE_ALERT_INTAKE_CONNECTION = "create:alert-intake-connection",
171
173
  READ_ALERT_INTAKE_CONNECTION = "read:alert-intake-connection",
172
174
  UPDATE_ALERT_INTAKE_CONNECTION = "update:alert-intake-connection",
@@ -4,4 +4,5 @@ export * from './interfaces/customer-feedback.dto';
4
4
  export * from './interfaces/support-configuration.dto';
5
5
  export * from './interfaces/support-sync.dto';
6
6
  export * from './interfaces/support-reports.dto';
7
+ export * from './interfaces/support-analytics';
7
8
  export * from './utils/support-display.util';
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Support analytics (the admin's Support Analytics): how the support desk did over a
3
+ * period - tickets raised and settled, how quickly they were answered and resolved,
4
+ * the SLA, what customers asked about, the agents, what customers thought of the
5
+ * help they got, the feedback they left, and whether the helpdesk mirror kept up.
6
+ *
7
+ * One read, computed by clarion-support from one consistent snapshot, so every number
8
+ * on a dashboard agrees with every other. Counts, rates and durations only: never a
9
+ * customer's name, a subject or a message. The only people named are AGENTS, as on
10
+ * the desk's own team report.
11
+ *
12
+ * DURATIONS ARE IN SECONDS, like every analytics contract (the support REPORTS use
13
+ * minutes; this is a separate contract). They are calendar time - an SLA measured in
14
+ * business hours can be met while the calendar duration looks long.
15
+ *
16
+ * How it is counted:
17
+ * - A ticket is RAISED when created. It is RESOLVED, CLOSED, REOPENED or CANCELLED
18
+ * when its status history says it moved there - a reopen clears the ticket's own
19
+ * resolvedAt, so the history is the only record of the earlier resolution.
20
+ * - Time to resolve runs from raising to the FIRST time the ticket was resolved or
21
+ * closed, for tickets first settled in the period: it measures the original
22
+ * request and does not move when a ticket is reopened.
23
+ * - SLA compliance counts SETTLED clocks only (met or breached); a running clock is
24
+ * neither. Breach alerts are the monitor's breach events in the period - a ticket
25
+ * whose deadline later moved (waiting on the customer, a reopen) can be breached
26
+ * once and still end up met.
27
+ */
28
+ /** How the period is cut into points for the charts. Chosen by the service from the length of the period. */
29
+ export type SupportAnalyticsBucket = 'hour' | 'day' | 'week' | 'month';
30
+ export interface SupportAnalyticsRange {
31
+ /** Inclusive, ISO 8601. The first ticket or feedback when the period asked for was "forever". */
32
+ from: string;
33
+ /** Exclusive, ISO 8601. */
34
+ to: string;
35
+ bucket: SupportAnalyticsBucket;
36
+ /** IANA time zone the buckets and the hour-of-week grid are cut in. */
37
+ timeZone: string;
38
+ }
39
+ /** A count by a key (a status, a channel, a reason), largest first unless the section says otherwise. */
40
+ export interface SupportAnalyticsCount<K extends string = string> {
41
+ key: K;
42
+ count: number;
43
+ }
44
+ /** Median and 90th percentile of one duration, in seconds; null when nothing was measured. */
45
+ export interface SupportAnalyticsDuration {
46
+ median: number | null;
47
+ p90: number | null;
48
+ /** How many were measured. */
49
+ count: number;
50
+ }
51
+ /** A configured thing tickets are grouped by - a category, a queue, a team - and how its tickets went. */
52
+ export interface SupportAnalyticsGroupRow {
53
+ /** The category, queue or team id; null for tickets with none. */
54
+ id: string | null;
55
+ name: string | null;
56
+ /** Raised in the period. */
57
+ raised: number;
58
+ /** First settled (resolved or closed) in the period. */
59
+ resolved: number;
60
+ /** Open now, whenever raised. */
61
+ openNow: number;
62
+ medianSecondsToFirstResponse: number | null;
63
+ medianSecondsToResolve: number | null;
64
+ /** Raised in the period with a breached clock. */
65
+ breached: number;
66
+ }
67
+ /** Tickets: what came in, what was settled, and what is open now. */
68
+ export interface SupportAnalyticsTickets {
69
+ raised: number;
70
+ /** Different customers who raised them. */
71
+ customers: number;
72
+ /** Raised by promoting a piece of customer feedback. */
73
+ fromFeedback: number;
74
+ /** Tickets resolved in the period (a status move to RESOLVED). */
75
+ resolved: number;
76
+ closed: number;
77
+ reopened: number;
78
+ cancelled: number;
79
+ /** Reopened / (resolved or closed) in the period, as a percentage. */
80
+ reopenRate: number | null;
81
+ /** Open at the start and at the end of the period (from the status history). */
82
+ backlogStart: number;
83
+ backlogEnd: number;
84
+ /** NOW, whatever the period. */
85
+ openNow: number;
86
+ unassignedNow: number;
87
+ waitingOnCustomerNow: number;
88
+ waitingOnInternalTeamNow: number;
89
+ /** Open, and nobody has answered yet. */
90
+ awaitingFirstResponseNow: number;
91
+ /** When the oldest open ticket was raised; null when nothing is open. */
92
+ oldestOpenAt: string | null;
93
+ /** Tickets raised in the period, by where they stand now - every status, in lifecycle order. */
94
+ byStatus: SupportAnalyticsCount[];
95
+ /** CRITICAL, URGENT, HIGH, NORMAL, LOW - in that order, zeros included. */
96
+ byPriority: SupportAnalyticsCount[];
97
+ byChannel: SupportAnalyticsCount[];
98
+ bySource: SupportAnalyticsCount[];
99
+ byCountry: SupportAnalyticsCount[];
100
+ /** The app it was raised from; NONE when not recorded. */
101
+ byApp: SupportAnalyticsCount[];
102
+ /** What the ticket is about (an incident, a payment...), each linked kind counted once per ticket. */
103
+ byRelatedType: SupportAnalyticsCount[];
104
+ /** The ten most used tags. */
105
+ byTag: SupportAnalyticsCount[];
106
+ byCategory: SupportAnalyticsGroupRow[];
107
+ byQueue: SupportAnalyticsGroupRow[];
108
+ byTeam: SupportAnalyticsGroupRow[];
109
+ }
110
+ /** How long each step took. */
111
+ export interface SupportAnalyticsTimings {
112
+ /** Raised to the first assignment to an agent - tickets raised in the period. */
113
+ toAssign: SupportAnalyticsDuration;
114
+ /** Raised to the first reply - tickets raised in the period. */
115
+ toFirstResponse: SupportAnalyticsDuration;
116
+ /** Raised to first resolved or closed - tickets first settled in the period. */
117
+ toResolve: SupportAnalyticsDuration;
118
+ /** Time spent waiting on the customer (the SLA clock paused) - tickets first settled in the period that waited. */
119
+ waitingOnCustomer: SupportAnalyticsDuration;
120
+ }
121
+ /** One SLA clock over the tickets raised in the period. */
122
+ export interface SupportAnalyticsSlaClock {
123
+ met: number;
124
+ breached: number;
125
+ /** On track, at risk or paused - not settled yet. */
126
+ running: number;
127
+ /** No policy applied. */
128
+ notApplicable: number;
129
+ /** met / (met + breached), as a percentage. */
130
+ rate: number | null;
131
+ }
132
+ /** The SLA by priority - tickets raised in the period. */
133
+ export interface SupportAnalyticsSlaPriorityRow {
134
+ priority: string;
135
+ raised: number;
136
+ firstResponseMet: number;
137
+ firstResponseBreached: number;
138
+ resolutionMet: number;
139
+ resolutionBreached: number;
140
+ medianSecondsToFirstResponse: number | null;
141
+ medianSecondsToResolve: number | null;
142
+ /** The policy's targets, as applied to these tickets (average), in minutes as policies are written. */
143
+ firstResponseTargetMinutes: number | null;
144
+ resolutionTargetMinutes: number | null;
145
+ }
146
+ export interface SupportAnalyticsSla {
147
+ firstResponse: SupportAnalyticsSlaClock;
148
+ resolution: SupportAnalyticsSlaClock;
149
+ /** Breach alerts raised by the monitor in the period - first response and resolution. */
150
+ breachAlerts: number;
151
+ firstResponseBreachAlerts: number;
152
+ resolutionBreachAlerts: number;
153
+ /** Warnings raised in the period (a deadline close). */
154
+ warnings: number;
155
+ /** NOW: open tickets with a clock at risk, or already breached. */
156
+ atRiskNow: number;
157
+ breachedOpenNow: number;
158
+ byPriority: SupportAnalyticsSlaPriorityRow[];
159
+ }
160
+ /** The messages on tickets in the period. */
161
+ export interface SupportAnalyticsConversation {
162
+ customerMessages: number;
163
+ agentReplies: number;
164
+ /** Of the agent replies, those written in the helpdesk (Zammad, Freshdesk) and synced in. */
165
+ repliesFromHelpdesk: number;
166
+ internalNotes: number;
167
+ /** System and status messages. */
168
+ systemMessages: number;
169
+ /** Agents who replied from Clarion (helpdesk agents have no Clarion account to count). */
170
+ agentsReplying: number;
171
+ /** Agent replies on the tickets first settled in the period, per ticket. */
172
+ repliesPerResolvedTicket: number | null;
173
+ /** Customer messages on those tickets, per ticket - the back-and-forth it took. */
174
+ customerMessagesPerResolvedTicket: number | null;
175
+ }
176
+ /** One agent's work. Agents are named, as on the desk's team report. */
177
+ export interface SupportAnalyticsAgentRow {
178
+ agentUserId: number;
179
+ name: string | null;
180
+ /** Open and assigned to them now. */
181
+ openNow: number;
182
+ /** Tickets raised in the period that are assigned to them. */
183
+ raised: number;
184
+ /** Tickets assigned to them first settled in the period. */
185
+ resolved: number;
186
+ /** Replies they wrote in the period. */
187
+ replies: number;
188
+ medianSecondsToFirstResponse: number | null;
189
+ medianSecondsToResolve: number | null;
190
+ /** Their tickets raised in the period with a breached clock. */
191
+ breached: number;
192
+ /** Ratings left in the period on their tickets. */
193
+ ratings: number;
194
+ ratingAverage: number | null;
195
+ }
196
+ export interface SupportAnalyticsAgents {
197
+ /** Agents assigned anything open, or who settled, were given or replied to anything in the period. */
198
+ rows: SupportAnalyticsAgentRow[];
199
+ /** Assignments made in the period, and of those reassignments from one agent to another. */
200
+ assignments: number;
201
+ reassignments: number;
202
+ }
203
+ /** An open ticket, oldest first - for a supervisor to act on. No subject, no customer. */
204
+ export interface SupportAnalyticsOpenTicketRow {
205
+ id: string;
206
+ ticketNumber: string;
207
+ organizationId: number;
208
+ status: string;
209
+ priority: string;
210
+ createdAt: string;
211
+ agentUserId: number | null;
212
+ agentName: string | null;
213
+ categoryName: string | null;
214
+ queueName: string | null;
215
+ firstResponseSlaState: string;
216
+ resolutionSlaState: string;
217
+ /** Nobody has replied yet. */
218
+ awaitingFirstResponse: boolean;
219
+ }
220
+ /** What customers thought of the help they got: the ratings left on resolved tickets. */
221
+ export interface SupportAnalyticsSatisfaction {
222
+ ratings: number;
223
+ /** Out of 5. */
224
+ average: number | null;
225
+ /** Rated 4 or 5, as a percentage of ratings. */
226
+ csat: number | null;
227
+ /** 1 to 5, in that order. */
228
+ distribution: SupportAnalyticsCount[];
229
+ /** Ratings in the period / tickets first settled in the period, as a percentage. */
230
+ ratedShare: number | null;
231
+ }
232
+ /** Customer feedback - a separate domain from tickets. Support ratings are counted in `satisfaction`, not here. */
233
+ export interface SupportAnalyticsFeedback {
234
+ received: number;
235
+ people: number;
236
+ /** Of those received in the period: reviewed, responded to, turned into a ticket, dismissed. */
237
+ reviewed: number;
238
+ responded: number;
239
+ converted: number;
240
+ dismissed: number;
241
+ /** Received to the desk's first response. */
242
+ toRespond: SupportAnalyticsDuration;
243
+ /** NOW: feedback nobody has dealt with (new or under review), whenever received. */
244
+ openNow: number;
245
+ byType: SupportAnalyticsCount[];
246
+ /** Every status, in workflow order, zeros included. */
247
+ byStatus: SupportAnalyticsCount[];
248
+ /** POSITIVE, NEUTRAL, NEGATIVE, UNKNOWN - in that order. */
249
+ bySentiment: SupportAnalyticsCount[];
250
+ byChannel: SupportAnalyticsCount[];
251
+ byPlatform: SupportAnalyticsCount[];
252
+ /** "app version" - the ten with most feedback. */
253
+ byAppVersion: SupportAnalyticsCount[];
254
+ /** Ratings of the SERVICE (not of support): how many, the average out of 5, and 1 to 5. */
255
+ serviceRatings: number;
256
+ serviceRatingAverage: number | null;
257
+ serviceRatingDistribution: SupportAnalyticsCount[];
258
+ }
259
+ /** One kind of helpdesk operation and how it went. */
260
+ export interface SupportAnalyticsSyncOperationRow {
261
+ operation: string;
262
+ attempts: number;
263
+ succeeded: number;
264
+ failed: number;
265
+ deadLettered: number;
266
+ pending: number;
267
+ }
268
+ /**
269
+ * The helpdesk mirror (Zammad or Freshdesk). Per ORGANIZATION: the country picked does
270
+ * not narrow it, and a control centre sees its organization's.
271
+ */
272
+ export interface SupportAnalyticsHelpdesk {
273
+ /** The helpdesks written to in the period. */
274
+ providers: SupportAnalyticsCount[];
275
+ /** Synchronizations queued in the period, by where they stand now. */
276
+ operations: number;
277
+ succeeded: number;
278
+ failed: number;
279
+ deadLettered: number;
280
+ pending: number;
281
+ /** Skipped or superseded by a later change - nothing to send. */
282
+ skipped: number;
283
+ /** succeeded / (succeeded + failed + dead-lettered). */
284
+ successRate: number | null;
285
+ /** Queued to sent, for those that succeeded. */
286
+ toSync: SupportAnalyticsDuration;
287
+ /** NOW: dead-lettered rows waiting for a person, and rows still to send - whenever queued. */
288
+ deadLetteredNow: number;
289
+ pendingNow: number;
290
+ /** NOW: tickets whose last mirror attempt failed. */
291
+ ticketsWithFailedSyncNow: number;
292
+ byOperation: SupportAnalyticsSyncOperationRow[];
293
+ failureReasons: SupportAnalyticsCount[];
294
+ /** Webhooks the helpdesk sent in the period, by what became of them. */
295
+ webhooks: number;
296
+ webhooksByStatus: SupportAnalyticsCount[];
297
+ medianWebhookMs: number | null;
298
+ }
299
+ /** One point on the charts: a bucket of the period. */
300
+ export interface SupportAnalyticsPoint {
301
+ /** Local wall-clock start of the bucket, in `range.timeZone` (no offset). */
302
+ bucket: string;
303
+ raised: number;
304
+ resolved: number;
305
+ closed: number;
306
+ reopened: number;
307
+ cancelled: number;
308
+ /** Open at the END of the bucket. */
309
+ backlog: number;
310
+ breachAlerts: number;
311
+ /** Of the tickets raised in the bucket. */
312
+ medianSecondsToFirstResponse: number | null;
313
+ ratings: number;
314
+ ratingAverage: number | null;
315
+ feedback: number;
316
+ }
317
+ /** One hour of the week. Weekday 1 is Monday. */
318
+ export interface SupportAnalyticsHeatCell {
319
+ weekday: number;
320
+ hour: number;
321
+ /** Tickets raised in it - when customers need help. */
322
+ raised: number;
323
+ /** Agent replies written in it - when the desk answers. */
324
+ replies: number;
325
+ }
326
+ /** The previous period of the same length, for the change on each headline figure. */
327
+ export interface SupportAnalyticsPrevious {
328
+ from: string;
329
+ to: string;
330
+ raised: number;
331
+ resolved: number;
332
+ reopened: number;
333
+ breachAlerts: number;
334
+ medianSecondsToFirstResponse: number | null;
335
+ medianSecondsToResolve: number | null;
336
+ firstResponseRate: number | null;
337
+ resolutionRate: number | null;
338
+ ratings: number;
339
+ ratingAverage: number | null;
340
+ csat: number | null;
341
+ feedback: number;
342
+ }
343
+ /** A Super-Admin's view of every organization: one row each, busiest first. */
344
+ export interface SupportAnalyticsOrganizationRow {
345
+ organizationId: number;
346
+ raised: number;
347
+ resolved: number;
348
+ openNow: number;
349
+ breachAlerts: number;
350
+ medianSecondsToFirstResponse: number | null;
351
+ firstResponseRate: number | null;
352
+ ratings: number;
353
+ ratingAverage: number | null;
354
+ feedback: number;
355
+ }
356
+ export interface SupportAnalytics {
357
+ /** Whose figures: one organization (and one control centre in it), or null for every organization. */
358
+ organizationId: number | null;
359
+ controlCentreId: number | null;
360
+ /** The one country the figures are narrowed to, or null for every country. */
361
+ countryCode: string | null;
362
+ range: SupportAnalyticsRange;
363
+ generatedAt: string;
364
+ previous: SupportAnalyticsPrevious | null;
365
+ /** Countries with tickets or feedback in scope, whatever country is chosen - for narrowing to one. */
366
+ countryOptions: SupportAnalyticsCount[];
367
+ tickets: SupportAnalyticsTickets;
368
+ timings: SupportAnalyticsTimings;
369
+ sla: SupportAnalyticsSla;
370
+ conversation: SupportAnalyticsConversation;
371
+ agents: SupportAnalyticsAgents;
372
+ /** The 25 oldest open tickets. */
373
+ oldestOpen: SupportAnalyticsOpenTicketRow[];
374
+ satisfaction: SupportAnalyticsSatisfaction;
375
+ feedback: SupportAnalyticsFeedback;
376
+ helpdesk: SupportAnalyticsHelpdesk;
377
+ timeline: SupportAnalyticsPoint[];
378
+ /** All 168 hours of the week, Monday first, zeros included. */
379
+ heatmap: SupportAnalyticsHeatCell[];
380
+ /** A Super-Admin looking at every organization only. */
381
+ byOrganization?: SupportAnalyticsOrganizationRow[];
382
+ }
383
+ /** What a dashboard asks: the period, one country - and, for a Super-Admin, whose figures. */
384
+ export interface SupportAnalyticsQuery {
385
+ from?: string;
386
+ to?: string;
387
+ timeZone?: string;
388
+ organizationId?: number;
389
+ countryCode?: string;
390
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarion-shared-types",
3
- "version": "1.0.111",
3
+ "version": "1.0.113",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",