clarion-shared-types 1.0.105 → 1.0.106
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.
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/modules/alert-dispatch/index.js +1 -0
- package/dist/cjs/modules/alert-dispatch/index.js.map +1 -1
- package/dist/cjs/modules/alert-dispatch/interfaces/guardian-audience.js +3 -0
- package/dist/cjs/modules/alert-dispatch/interfaces/guardian-audience.js.map +1 -0
- package/dist/cjs/modules/permission/enums/permission-actions.enum.js +6 -0
- package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/cjs/modules/permission/enums/permissions-moudule.enum.js +1 -0
- package/dist/cjs/modules/permission/enums/permissions-moudule.enum.js.map +1 -1
- package/dist/cjs/modules/role/constants/safety-roles.js +19 -0
- package/dist/cjs/modules/role/constants/safety-roles.js.map +1 -0
- package/dist/cjs/modules/role/index.js +1 -0
- package/dist/cjs/modules/role/index.js.map +1 -1
- package/dist/cjs/modules/safety/constants/safety-check-limits.const.js +34 -0
- package/dist/cjs/modules/safety/constants/safety-check-limits.const.js.map +1 -0
- package/dist/cjs/modules/safety/constants/safety-taxonomy.const.js +17 -0
- package/dist/cjs/modules/safety/constants/safety-taxonomy.const.js.map +1 -0
- package/dist/cjs/modules/safety/enums/safety-enums.js +95 -0
- package/dist/cjs/modules/safety/enums/safety-enums.js.map +1 -0
- package/dist/cjs/modules/safety/index.js +26 -0
- package/dist/cjs/modules/safety/index.js.map +1 -0
- package/dist/cjs/modules/safety/interfaces/safety-check.dto.js +3 -0
- package/dist/cjs/modules/safety/interfaces/safety-check.dto.js.map +1 -0
- package/dist/cjs/modules/safety/utils/safety-display.util.js +96 -0
- package/dist/cjs/modules/safety/utils/safety-display.util.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/modules/alert-dispatch/index.js +1 -0
- package/dist/esm/modules/alert-dispatch/index.js.map +1 -1
- package/dist/esm/modules/alert-dispatch/interfaces/guardian-audience.js +2 -0
- package/dist/esm/modules/alert-dispatch/interfaces/guardian-audience.js.map +1 -0
- package/dist/esm/modules/permission/enums/permission-actions.enum.js +6 -0
- package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/esm/modules/permission/enums/permissions-moudule.enum.js +1 -0
- package/dist/esm/modules/permission/enums/permissions-moudule.enum.js.map +1 -1
- package/dist/esm/modules/role/constants/safety-roles.js +16 -0
- package/dist/esm/modules/role/constants/safety-roles.js.map +1 -0
- package/dist/esm/modules/role/index.js +1 -0
- package/dist/esm/modules/role/index.js.map +1 -1
- package/dist/esm/modules/safety/constants/safety-check-limits.const.js +31 -0
- package/dist/esm/modules/safety/constants/safety-check-limits.const.js.map +1 -0
- package/dist/esm/modules/safety/constants/safety-taxonomy.const.js +14 -0
- package/dist/esm/modules/safety/constants/safety-taxonomy.const.js.map +1 -0
- package/dist/esm/modules/safety/enums/safety-enums.js +92 -0
- package/dist/esm/modules/safety/enums/safety-enums.js.map +1 -0
- package/dist/esm/modules/safety/index.js +10 -0
- package/dist/esm/modules/safety/index.js.map +1 -0
- package/dist/esm/modules/safety/interfaces/safety-check.dto.js +2 -0
- package/dist/esm/modules/safety/interfaces/safety-check.dto.js.map +1 -0
- package/dist/esm/modules/safety/utils/safety-display.util.js +89 -0
- package/dist/esm/modules/safety/utils/safety-display.util.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/modules/alert-dispatch/index.d.ts +1 -0
- package/dist/types/modules/alert-dispatch/interfaces/guardian-audience.d.ts +12 -0
- package/dist/types/modules/incident/intefaces/incident-category.d.ts +9 -0
- package/dist/types/modules/incident/intefaces/incident-type.d.ts +9 -0
- package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +3 -0
- package/dist/types/modules/permission/enums/permissions-moudule.enum.d.ts +2 -1
- package/dist/types/modules/role/constants/safety-roles.d.ts +8 -0
- package/dist/types/modules/role/index.d.ts +1 -0
- package/dist/types/modules/safety/constants/safety-check-limits.const.d.ts +30 -0
- package/dist/types/modules/safety/constants/safety-taxonomy.const.d.ts +19 -0
- package/dist/types/modules/safety/enums/safety-enums.d.ts +83 -0
- package/dist/types/modules/safety/index.d.ts +5 -0
- package/dist/types/modules/safety/interfaces/safety-check.dto.d.ts +176 -0
- package/dist/types/modules/safety/utils/safety-display.util.d.ts +18 -0
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SafetyIncidentCategoryCode, SafetyIncidentTypeCode } from '../enums/safety-enums';
|
|
2
|
+
/**
|
|
3
|
+
* Names of the platform-managed Safety Alerts category and types, as
|
|
4
|
+
* clarion-incident provisions them for every organization. The admin shows these
|
|
5
|
+
* rows read-only (they carry `isSystem: true`).
|
|
6
|
+
*/
|
|
7
|
+
export const SAFETY_ALERTS_TAXONOMY_NAMES = {
|
|
8
|
+
category: { code: SafetyIncidentCategoryCode.SAFETY_ALERTS, name: 'Safety Alerts' },
|
|
9
|
+
types: [
|
|
10
|
+
{ code: SafetyIncidentTypeCode.SAFETY_CHECK_SOS, name: 'Safety Check SOS' },
|
|
11
|
+
{ code: SafetyIncidentTypeCode.FOLLOW_ME_SOS, name: 'Follow Me SOS' },
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=safety-taxonomy.const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-taxonomy.const.js","sourceRoot":"","sources":["../../../../../src/modules/safety/constants/safety-taxonomy.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE3F;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IACxC,QAAQ,EAAE,EAAE,IAAI,EAAE,0BAA0B,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;IACnF,KAAK,EAAE;QACH,EAAE,IAAI,EAAE,sBAAsB,CAAC,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE;QAC3E,EAAE,IAAI,EAAE,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;KACxE;CACK,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontend mirrors of the Safety enums in grm-shared-library.
|
|
3
|
+
*
|
|
4
|
+
* Kept in ONE file: the admin's Safety Features screens import them together.
|
|
5
|
+
* Values are byte-identical to the backend's, because they travel over the wire
|
|
6
|
+
* as strings and any drift would show up as a silently unstyled chip rather than
|
|
7
|
+
* a compile error (safety-display.spec.ts pins them).
|
|
8
|
+
*/
|
|
9
|
+
/** Lifecycle of one Safety Check. See the backend enum for what each state means. */
|
|
10
|
+
export var SafetyCheckStatus;
|
|
11
|
+
(function (SafetyCheckStatus) {
|
|
12
|
+
SafetyCheckStatus["CREATED"] = "CREATED";
|
|
13
|
+
SafetyCheckStatus["ACTIVE"] = "ACTIVE";
|
|
14
|
+
SafetyCheckStatus["PROMPTING"] = "PROMPTING";
|
|
15
|
+
SafetyCheckStatus["CHECKED_IN"] = "CHECKED_IN";
|
|
16
|
+
SafetyCheckStatus["SOS_TRIGGERED"] = "SOS_TRIGGERED";
|
|
17
|
+
SafetyCheckStatus["STOPPED"] = "STOPPED";
|
|
18
|
+
SafetyCheckStatus["EXPIRED"] = "EXPIRED";
|
|
19
|
+
SafetyCheckStatus["CANCELLED"] = "CANCELLED";
|
|
20
|
+
SafetyCheckStatus["FAILED"] = "FAILED";
|
|
21
|
+
})(SafetyCheckStatus || (SafetyCheckStatus = {}));
|
|
22
|
+
/** Why a Safety Check raised an SOS. */
|
|
23
|
+
export var SafetyCheckSosTrigger;
|
|
24
|
+
(function (SafetyCheckSosTrigger) {
|
|
25
|
+
SafetyCheckSosTrigger["MISSED_CHECK_IN"] = "MISSED_CHECK_IN";
|
|
26
|
+
SafetyCheckSosTrigger["USER_REQUESTED"] = "USER_REQUESTED";
|
|
27
|
+
})(SafetyCheckSosTrigger || (SafetyCheckSosTrigger = {}));
|
|
28
|
+
/** Who caused a Safety Check transition. */
|
|
29
|
+
export var SafetyCheckActorType;
|
|
30
|
+
(function (SafetyCheckActorType) {
|
|
31
|
+
SafetyCheckActorType["USER"] = "USER";
|
|
32
|
+
SafetyCheckActorType["WORKFLOW"] = "WORKFLOW";
|
|
33
|
+
SafetyCheckActorType["RECONCILER"] = "RECONCILER";
|
|
34
|
+
SafetyCheckActorType["SYSTEM"] = "SYSTEM";
|
|
35
|
+
})(SafetyCheckActorType || (SafetyCheckActorType = {}));
|
|
36
|
+
/** Audit trail entries. Never carries a location. */
|
|
37
|
+
export var SafetyCheckAuditEventType;
|
|
38
|
+
(function (SafetyCheckAuditEventType) {
|
|
39
|
+
SafetyCheckAuditEventType["CREATED"] = "CREATED";
|
|
40
|
+
SafetyCheckAuditEventType["ACTIVATED"] = "ACTIVATED";
|
|
41
|
+
SafetyCheckAuditEventType["TRACKING_STARTED"] = "TRACKING_STARTED";
|
|
42
|
+
SafetyCheckAuditEventType["TRACKING_UNAVAILABLE"] = "TRACKING_UNAVAILABLE";
|
|
43
|
+
SafetyCheckAuditEventType["WORKFLOW_STARTED"] = "WORKFLOW_STARTED";
|
|
44
|
+
SafetyCheckAuditEventType["WORKFLOW_START_FAILED"] = "WORKFLOW_START_FAILED";
|
|
45
|
+
SafetyCheckAuditEventType["EXTENDED"] = "EXTENDED";
|
|
46
|
+
SafetyCheckAuditEventType["PROMPT_STARTED"] = "PROMPT_STARTED";
|
|
47
|
+
SafetyCheckAuditEventType["CHECKED_IN"] = "CHECKED_IN";
|
|
48
|
+
SafetyCheckAuditEventType["STOPPED"] = "STOPPED";
|
|
49
|
+
SafetyCheckAuditEventType["CANCELLED"] = "CANCELLED";
|
|
50
|
+
SafetyCheckAuditEventType["SOS_TRIGGERED"] = "SOS_TRIGGERED";
|
|
51
|
+
SafetyCheckAuditEventType["SOS_INCIDENT_CREATED"] = "SOS_INCIDENT_CREATED";
|
|
52
|
+
SafetyCheckAuditEventType["SOS_INCIDENT_RETRY"] = "SOS_INCIDENT_RETRY";
|
|
53
|
+
SafetyCheckAuditEventType["SOS_FAILED"] = "SOS_FAILED";
|
|
54
|
+
SafetyCheckAuditEventType["EXPIRED"] = "EXPIRED";
|
|
55
|
+
})(SafetyCheckAuditEventType || (SafetyCheckAuditEventType = {}));
|
|
56
|
+
/** The safety features that can raise an incident. */
|
|
57
|
+
export var SafetyFeature;
|
|
58
|
+
(function (SafetyFeature) {
|
|
59
|
+
SafetyFeature["SAFETY_CHECK"] = "SAFETY_CHECK";
|
|
60
|
+
SafetyFeature["FOLLOW_ME"] = "FOLLOW_ME";
|
|
61
|
+
})(SafetyFeature || (SafetyFeature = {}));
|
|
62
|
+
/** Stable code of the incident category every organization receives. */
|
|
63
|
+
export var SafetyIncidentCategoryCode;
|
|
64
|
+
(function (SafetyIncidentCategoryCode) {
|
|
65
|
+
SafetyIncidentCategoryCode["SAFETY_ALERTS"] = "SAFETY_ALERTS";
|
|
66
|
+
})(SafetyIncidentCategoryCode || (SafetyIncidentCategoryCode = {}));
|
|
67
|
+
/** Stable codes of the incident types inside the Safety Alerts category. */
|
|
68
|
+
export var SafetyIncidentTypeCode;
|
|
69
|
+
(function (SafetyIncidentTypeCode) {
|
|
70
|
+
SafetyIncidentTypeCode["SAFETY_CHECK_SOS"] = "SAFETY_CHECK_SOS";
|
|
71
|
+
SafetyIncidentTypeCode["FOLLOW_ME_SOS"] = "FOLLOW_ME_SOS";
|
|
72
|
+
})(SafetyIncidentTypeCode || (SafetyIncidentTypeCode = {}));
|
|
73
|
+
/** Machine-readable `code` on errors clarion-safety returns. */
|
|
74
|
+
export var SafetyCheckErrorCode;
|
|
75
|
+
(function (SafetyCheckErrorCode) {
|
|
76
|
+
SafetyCheckErrorCode["NOT_FOUND"] = "SAFETY_CHECK_NOT_FOUND";
|
|
77
|
+
SafetyCheckErrorCode["ALREADY_ACTIVE"] = "SAFETY_CHECK_ALREADY_ACTIVE";
|
|
78
|
+
SafetyCheckErrorCode["ALREADY_ENDED"] = "SAFETY_CHECK_ENDED";
|
|
79
|
+
SafetyCheckErrorCode["SOS_ALREADY_TRIGGERED"] = "SAFETY_CHECK_SOS_ALREADY_TRIGGERED";
|
|
80
|
+
SafetyCheckErrorCode["INVALID_TRANSITION"] = "SAFETY_CHECK_INVALID_TRANSITION";
|
|
81
|
+
SafetyCheckErrorCode["INVALID_DURATION"] = "SAFETY_CHECK_INVALID_DURATION";
|
|
82
|
+
SafetyCheckErrorCode["MAX_DURATION_EXCEEDED"] = "SAFETY_CHECK_MAX_DURATION_EXCEEDED";
|
|
83
|
+
SafetyCheckErrorCode["INVALID_REASON"] = "SAFETY_CHECK_INVALID_REASON";
|
|
84
|
+
SafetyCheckErrorCode["CUSTOM_REASON_REQUIRED"] = "SAFETY_CHECK_CUSTOM_REASON_REQUIRED";
|
|
85
|
+
SafetyCheckErrorCode["GUARDIAN_NOT_FOUND"] = "SAFETY_CHECK_GUARDIAN_NOT_FOUND";
|
|
86
|
+
SafetyCheckErrorCode["GUARDIANS_UNAVAILABLE"] = "SAFETY_CHECK_GUARDIANS_UNAVAILABLE";
|
|
87
|
+
SafetyCheckErrorCode["NO_SOS_RECIPIENTS"] = "SAFETY_CHECK_NO_SOS_RECIPIENTS";
|
|
88
|
+
SafetyCheckErrorCode["SERVICE_PROVIDER_NOT_ENTITLED"] = "SAFETY_CHECK_SERVICE_PROVIDER_NOT_ENTITLED";
|
|
89
|
+
SafetyCheckErrorCode["TRACKING_CLOSED"] = "SAFETY_CHECK_TRACKING_CLOSED";
|
|
90
|
+
SafetyCheckErrorCode["RATE_LIMITED"] = "SAFETY_CHECK_RATE_LIMITED";
|
|
91
|
+
})(SafetyCheckErrorCode || (SafetyCheckErrorCode = {}));
|
|
92
|
+
//# sourceMappingURL=safety-enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-enums.js","sourceRoot":"","sources":["../../../../../src/modules/safety/enums/safety-enums.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qFAAqF;AACrF,MAAM,CAAN,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB,wCAAmB,CAAA;IACnB,sCAAiB,CAAA;IACjB,4CAAuB,CAAA;IACvB,8CAAyB,CAAA;IACzB,oDAA+B,CAAA;IAC/B,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;IACnB,4CAAuB,CAAA;IACvB,sCAAiB,CAAA;AACrB,CAAC,EAVW,iBAAiB,KAAjB,iBAAiB,QAU5B;AAED,wCAAwC;AACxC,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC7B,4DAAmC,CAAA;IACnC,0DAAiC,CAAA;AACrC,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAED,4CAA4C;AAC5C,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC5B,qCAAa,CAAA;IACb,6CAAqB,CAAA;IACrB,iDAAyB,CAAA;IACzB,yCAAiB,CAAA;AACrB,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B;AAED,qDAAqD;AACrD,MAAM,CAAN,IAAY,yBAiBX;AAjBD,WAAY,yBAAyB;IACjC,gDAAmB,CAAA;IACnB,oDAAuB,CAAA;IACvB,kEAAqC,CAAA;IACrC,0EAA6C,CAAA;IAC7C,kEAAqC,CAAA;IACrC,4EAA+C,CAAA;IAC/C,kDAAqB,CAAA;IACrB,8DAAiC,CAAA;IACjC,sDAAyB,CAAA;IACzB,gDAAmB,CAAA;IACnB,oDAAuB,CAAA;IACvB,4DAA+B,CAAA;IAC/B,0EAA6C,CAAA;IAC7C,sEAAyC,CAAA;IACzC,sDAAyB,CAAA;IACzB,gDAAmB,CAAA;AACvB,CAAC,EAjBW,yBAAyB,KAAzB,yBAAyB,QAiBpC;AAED,sDAAsD;AACtD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,8CAA6B,CAAA;IAC7B,wCAAuB,CAAA;AAC3B,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,wEAAwE;AACxE,MAAM,CAAN,IAAY,0BAEX;AAFD,WAAY,0BAA0B;IAClC,6DAA+B,CAAA;AACnC,CAAC,EAFW,0BAA0B,KAA1B,0BAA0B,QAErC;AAED,4EAA4E;AAC5E,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAC9B,+DAAqC,CAAA;IACrC,yDAA+B,CAAA;AACnC,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAED,gEAAgE;AAChE,MAAM,CAAN,IAAY,oBAgBX;AAhBD,WAAY,oBAAoB;IAC5B,4DAAoC,CAAA;IACpC,sEAA8C,CAAA;IAC9C,4DAAoC,CAAA;IACpC,oFAA4D,CAAA;IAC5D,8EAAsD,CAAA;IACtD,0EAAkD,CAAA;IAClD,oFAA4D,CAAA;IAC5D,sEAA8C,CAAA;IAC9C,sFAA8D,CAAA;IAC9D,8EAAsD,CAAA;IACtD,oFAA4D,CAAA;IAC5D,4EAAoD,CAAA;IACpD,oGAA4E,CAAA;IAC5E,wEAAgD,CAAA;IAChD,kEAA0C,CAAA;AAC9C,CAAC,EAhBW,oBAAoB,KAApB,oBAAoB,QAgB/B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Enums
|
|
2
|
+
export * from './enums/safety-enums';
|
|
3
|
+
// Constants
|
|
4
|
+
export * from './constants/safety-check-limits.const';
|
|
5
|
+
export * from './constants/safety-taxonomy.const';
|
|
6
|
+
// Interfaces / DTOs
|
|
7
|
+
export * from './interfaces/safety-check.dto';
|
|
8
|
+
// Utilities
|
|
9
|
+
export * from './utils/safety-display.util';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/safety/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,sBAAsB,CAAC;AAErC,YAAY;AACZ,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAElD,oBAAoB;AACpB,cAAc,+BAA+B,CAAC;AAE9C,YAAY;AACZ,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-check.dto.js","sourceRoot":"","sources":["../../../../../src/modules/safety/interfaces/safety-check.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { SafetyCheckActorType, SafetyCheckAuditEventType, SafetyCheckSosTrigger, SafetyCheckStatus, } from '../enums/safety-enums';
|
|
2
|
+
/**
|
|
3
|
+
* Human labels for the Safety enums, kept here so every screen that shows a
|
|
4
|
+
* Safety Check names the same state the same way.
|
|
5
|
+
*/
|
|
6
|
+
export const SAFETY_CHECK_STATUS_LABELS = {
|
|
7
|
+
[SafetyCheckStatus.CREATED]: 'Starting',
|
|
8
|
+
[SafetyCheckStatus.ACTIVE]: 'In progress',
|
|
9
|
+
[SafetyCheckStatus.PROMPTING]: 'Awaiting check-in',
|
|
10
|
+
[SafetyCheckStatus.CHECKED_IN]: 'Checked in',
|
|
11
|
+
[SafetyCheckStatus.SOS_TRIGGERED]: 'SOS raised',
|
|
12
|
+
[SafetyCheckStatus.STOPPED]: 'Stopped',
|
|
13
|
+
[SafetyCheckStatus.EXPIRED]: 'Expired',
|
|
14
|
+
[SafetyCheckStatus.CANCELLED]: 'Cancelled',
|
|
15
|
+
[SafetyCheckStatus.FAILED]: 'SOS failed',
|
|
16
|
+
};
|
|
17
|
+
export const SAFETY_CHECK_SOS_TRIGGER_LABELS = {
|
|
18
|
+
[SafetyCheckSosTrigger.MISSED_CHECK_IN]: 'Missed check-in',
|
|
19
|
+
[SafetyCheckSosTrigger.USER_REQUESTED]: 'Requested by user',
|
|
20
|
+
};
|
|
21
|
+
export const SAFETY_CHECK_ACTOR_TYPE_LABELS = {
|
|
22
|
+
[SafetyCheckActorType.USER]: 'User',
|
|
23
|
+
[SafetyCheckActorType.WORKFLOW]: 'Timer',
|
|
24
|
+
[SafetyCheckActorType.RECONCILER]: 'Recovery sweep',
|
|
25
|
+
[SafetyCheckActorType.SYSTEM]: 'System',
|
|
26
|
+
};
|
|
27
|
+
export const SAFETY_CHECK_AUDIT_EVENT_LABELS = {
|
|
28
|
+
[SafetyCheckAuditEventType.CREATED]: 'Safety Check requested',
|
|
29
|
+
[SafetyCheckAuditEventType.ACTIVATED]: 'Safety Check started',
|
|
30
|
+
[SafetyCheckAuditEventType.TRACKING_STARTED]: 'Private location tracking started',
|
|
31
|
+
[SafetyCheckAuditEventType.TRACKING_UNAVAILABLE]: 'Location tracking unavailable',
|
|
32
|
+
[SafetyCheckAuditEventType.WORKFLOW_STARTED]: 'Check-in timer scheduled',
|
|
33
|
+
[SafetyCheckAuditEventType.WORKFLOW_START_FAILED]: 'Check-in timer could not be scheduled',
|
|
34
|
+
[SafetyCheckAuditEventType.EXTENDED]: 'Extended',
|
|
35
|
+
[SafetyCheckAuditEventType.PROMPT_STARTED]: 'Check-in prompt shown',
|
|
36
|
+
[SafetyCheckAuditEventType.CHECKED_IN]: 'User checked in',
|
|
37
|
+
[SafetyCheckAuditEventType.STOPPED]: 'Stopped by user',
|
|
38
|
+
[SafetyCheckAuditEventType.CANCELLED]: 'Cancelled',
|
|
39
|
+
[SafetyCheckAuditEventType.SOS_TRIGGERED]: 'SOS triggered',
|
|
40
|
+
[SafetyCheckAuditEventType.SOS_INCIDENT_CREATED]: 'SOS incident created',
|
|
41
|
+
[SafetyCheckAuditEventType.SOS_INCIDENT_RETRY]: 'SOS incident creation retried',
|
|
42
|
+
[SafetyCheckAuditEventType.SOS_FAILED]: 'SOS could not be raised',
|
|
43
|
+
[SafetyCheckAuditEventType.EXPIRED]: 'Expired without SOS',
|
|
44
|
+
};
|
|
45
|
+
export function safetyCheckStatusTone(status) {
|
|
46
|
+
switch (status) {
|
|
47
|
+
case SafetyCheckStatus.CHECKED_IN:
|
|
48
|
+
return 'success';
|
|
49
|
+
case SafetyCheckStatus.CREATED:
|
|
50
|
+
case SafetyCheckStatus.ACTIVE:
|
|
51
|
+
return 'info';
|
|
52
|
+
case SafetyCheckStatus.PROMPTING:
|
|
53
|
+
return 'warn';
|
|
54
|
+
case SafetyCheckStatus.SOS_TRIGGERED:
|
|
55
|
+
case SafetyCheckStatus.FAILED:
|
|
56
|
+
case SafetyCheckStatus.EXPIRED:
|
|
57
|
+
return 'danger';
|
|
58
|
+
default:
|
|
59
|
+
return 'neutral';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Whether the check is still running (the user is "in" it). */
|
|
63
|
+
export function isOpenSafetyCheck(status) {
|
|
64
|
+
return (status === SafetyCheckStatus.CREATED ||
|
|
65
|
+
status === SafetyCheckStatus.ACTIVE ||
|
|
66
|
+
status === SafetyCheckStatus.PROMPTING);
|
|
67
|
+
}
|
|
68
|
+
/** "15 min", "2 h", "1 h 30 min", "24 h". */
|
|
69
|
+
export function formatSafetyCheckDuration(minutes) {
|
|
70
|
+
if (minutes === null || minutes === undefined || !Number.isFinite(minutes) || minutes < 0)
|
|
71
|
+
return '—';
|
|
72
|
+
const whole = Math.round(minutes);
|
|
73
|
+
const hours = Math.floor(whole / 60);
|
|
74
|
+
const rest = whole % 60;
|
|
75
|
+
if (hours === 0)
|
|
76
|
+
return `${rest} min`;
|
|
77
|
+
if (rest === 0)
|
|
78
|
+
return `${hours} h`;
|
|
79
|
+
return `${hours} h ${rest} min`;
|
|
80
|
+
}
|
|
81
|
+
/** A distance in metres as the admin shows it. */
|
|
82
|
+
export function formatSafetyTripDistance(metres) {
|
|
83
|
+
if (metres === null || metres === undefined || !Number.isFinite(metres) || metres < 0)
|
|
84
|
+
return '—';
|
|
85
|
+
if (metres < 1000)
|
|
86
|
+
return `${Math.round(metres)} m`;
|
|
87
|
+
return `${(metres / 1000).toFixed(1)} km`;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=safety-display.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-display.util.js","sourceRoot":"","sources":["../../../../../src/modules/safety/utils/safety-display.util.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -22,5 +22,6 @@ export * from './modules/alert-dispatch/index';
|
|
|
22
22
|
export * from './modules/alert-intake/index';
|
|
23
23
|
export * from './modules/partner/index';
|
|
24
24
|
export * from './modules/support/index';
|
|
25
|
+
export * from './modules/safety/index';
|
|
25
26
|
export * from './modules/common/interfaces/server-message';
|
|
26
27
|
export * from './modules/common/interfaces/pagination';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which of a reporter's guardians an alert is for. Mirrors grm-shared-library.
|
|
3
|
+
*
|
|
4
|
+
* Absent means EVERY guardian (the behaviour of a plain SOS). Present means
|
|
5
|
+
* exactly these guardians: a Safety Check's SOS goes only to the guardians the
|
|
6
|
+
* user ticked when they started it. App-user guardians are identified by user id,
|
|
7
|
+
* external contacts by their E.164 phone number.
|
|
8
|
+
*/
|
|
9
|
+
export interface GuardianAudience {
|
|
10
|
+
systemGuardianUserIds: number[];
|
|
11
|
+
externalGuardianPhoneNumbers: string[];
|
|
12
|
+
}
|
|
@@ -4,5 +4,14 @@ export interface IncidentCategory {
|
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
6
6
|
organizationId: number;
|
|
7
|
+
/** Stable code of a platform-managed row (e.g. SAFETY_CHECK_SOS); null for an organization's own. */
|
|
8
|
+
code?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Platform-managed (the Safety Alerts category and its types): provisioned for
|
|
11
|
+
* every organization, hidden from the SOS sheet and package configuration, and
|
|
12
|
+
* not editable or deletable. Lists include these rows only when asked with
|
|
13
|
+
* `includeSystem=true`.
|
|
14
|
+
*/
|
|
15
|
+
isSystem?: boolean;
|
|
7
16
|
types?: IncidentType[];
|
|
8
17
|
}
|
|
@@ -5,5 +5,14 @@ export interface IncidentType {
|
|
|
5
5
|
description?: string;
|
|
6
6
|
categoryId?: number;
|
|
7
7
|
organizationId: number;
|
|
8
|
+
/** Stable code of a platform-managed row (e.g. SAFETY_CHECK_SOS); null for an organization's own. */
|
|
9
|
+
code?: string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Platform-managed (the Safety Alerts category and its types): provisioned for
|
|
12
|
+
* every organization, hidden from the SOS sheet and package configuration, and
|
|
13
|
+
* not editable or deletable. Lists include these rows only when asked with
|
|
14
|
+
* `includeSystem=true`.
|
|
15
|
+
*/
|
|
16
|
+
isSystem?: boolean;
|
|
8
17
|
category?: IncidentCategory;
|
|
9
18
|
}
|
|
@@ -175,6 +175,9 @@ export declare enum PermissionActions {
|
|
|
175
175
|
REVIEW_ALERT_INTAKE_SCREENED_MESSAGE = "review:alert-intake-screened-message",
|
|
176
176
|
READ_ALERT_INTAKE_ANALYTICS = "read:alert-intake-analytics",
|
|
177
177
|
MANAGE_ALERT_INTAKE_PLATFORM = "manage:alert-intake-platform",
|
|
178
|
+
USE_SAFETY_CHECK = "use:safety-check",
|
|
179
|
+
READ_SAFETY_CHECK = "read:safety-check",
|
|
180
|
+
MANAGE_SAFETY_CHECK_REASON = "manage:safety-check-reason",
|
|
178
181
|
/** @deprecated Retiring: split into the connection / message / screened-message / analytics actions. */
|
|
179
182
|
READ_ALERT_INTAKE = "read:alert-intake",
|
|
180
183
|
/** @deprecated Retiring: split into the connection / message / screened-message / analytics actions. */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The organization roles that curate the Safety Check reasons their app offers.
|
|
3
|
+
* Mirrors grm-shared-library, where roles.spec.ts asserts each holds
|
|
4
|
+
* manage:safety-check-reason. Platform-wide reasons are Super-Admin's alone.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SAFETY_MANAGER_ROLES: string[];
|
|
7
|
+
/** Staff who may read Safety Checks: the managers, and a control-centre admin within their control centre. */
|
|
8
|
+
export declare const SAFETY_VIEWER_ROLES: string[];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Safety Check limits. Mirrors grm-shared-library, which is what the server
|
|
3
|
+
* enforces - the admin only displays them.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SAFETY_CHECK_LIMITS: {
|
|
6
|
+
readonly minDurationMinutes: 1;
|
|
7
|
+
readonly maxDurationMinutes: number;
|
|
8
|
+
readonly defaultDurationMinutes: 15;
|
|
9
|
+
readonly presetDurationsMinutes: readonly number[];
|
|
10
|
+
readonly minPromptCountdownSeconds: 15;
|
|
11
|
+
readonly maxPromptCountdownSeconds: number;
|
|
12
|
+
readonly defaultPromptCountdownSeconds: 60;
|
|
13
|
+
readonly checkInGraceSeconds: 10;
|
|
14
|
+
readonly staleSosWindowMinutes: number;
|
|
15
|
+
readonly customReasonMaxLength: 120;
|
|
16
|
+
readonly maxTrackPointsPerBatch: 200;
|
|
17
|
+
};
|
|
18
|
+
export declare const SAFETY_CHECK_DEFAULTS: {
|
|
19
|
+
readonly durationMinutes: 15;
|
|
20
|
+
readonly promptCountdownSeconds: 60;
|
|
21
|
+
readonly allGuardiansSelected: true;
|
|
22
|
+
readonly notifyServiceProvider: true;
|
|
23
|
+
readonly notifyGuardiansOnStartEnd: true;
|
|
24
|
+
readonly vibrate: true;
|
|
25
|
+
readonly alarmSound: true;
|
|
26
|
+
};
|
|
27
|
+
/** States in which the user is "in a Safety Check". */
|
|
28
|
+
export declare const OPEN_SAFETY_CHECK_STATUS_VALUES: readonly string[];
|
|
29
|
+
/** Upper-snake reason code, as the backend validates it. */
|
|
30
|
+
export declare const SAFETY_CHECK_REASON_CODE_PATTERN: RegExp;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SafetyIncidentCategoryCode, SafetyIncidentTypeCode } from '../enums/safety-enums';
|
|
2
|
+
/**
|
|
3
|
+
* Names of the platform-managed Safety Alerts category and types, as
|
|
4
|
+
* clarion-incident provisions them for every organization. The admin shows these
|
|
5
|
+
* rows read-only (they carry `isSystem: true`).
|
|
6
|
+
*/
|
|
7
|
+
export declare const SAFETY_ALERTS_TAXONOMY_NAMES: {
|
|
8
|
+
readonly category: {
|
|
9
|
+
readonly code: SafetyIncidentCategoryCode;
|
|
10
|
+
readonly name: "Safety Alerts";
|
|
11
|
+
};
|
|
12
|
+
readonly types: readonly [{
|
|
13
|
+
readonly code: SafetyIncidentTypeCode.SAFETY_CHECK_SOS;
|
|
14
|
+
readonly name: "Safety Check SOS";
|
|
15
|
+
}, {
|
|
16
|
+
readonly code: SafetyIncidentTypeCode.FOLLOW_ME_SOS;
|
|
17
|
+
readonly name: "Follow Me SOS";
|
|
18
|
+
}];
|
|
19
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontend mirrors of the Safety enums in grm-shared-library.
|
|
3
|
+
*
|
|
4
|
+
* Kept in ONE file: the admin's Safety Features screens import them together.
|
|
5
|
+
* Values are byte-identical to the backend's, because they travel over the wire
|
|
6
|
+
* as strings and any drift would show up as a silently unstyled chip rather than
|
|
7
|
+
* a compile error (safety-display.spec.ts pins them).
|
|
8
|
+
*/
|
|
9
|
+
/** Lifecycle of one Safety Check. See the backend enum for what each state means. */
|
|
10
|
+
export declare enum SafetyCheckStatus {
|
|
11
|
+
CREATED = "CREATED",
|
|
12
|
+
ACTIVE = "ACTIVE",
|
|
13
|
+
PROMPTING = "PROMPTING",
|
|
14
|
+
CHECKED_IN = "CHECKED_IN",
|
|
15
|
+
SOS_TRIGGERED = "SOS_TRIGGERED",
|
|
16
|
+
STOPPED = "STOPPED",
|
|
17
|
+
EXPIRED = "EXPIRED",
|
|
18
|
+
CANCELLED = "CANCELLED",
|
|
19
|
+
FAILED = "FAILED"
|
|
20
|
+
}
|
|
21
|
+
/** Why a Safety Check raised an SOS. */
|
|
22
|
+
export declare enum SafetyCheckSosTrigger {
|
|
23
|
+
MISSED_CHECK_IN = "MISSED_CHECK_IN",
|
|
24
|
+
USER_REQUESTED = "USER_REQUESTED"
|
|
25
|
+
}
|
|
26
|
+
/** Who caused a Safety Check transition. */
|
|
27
|
+
export declare enum SafetyCheckActorType {
|
|
28
|
+
USER = "USER",
|
|
29
|
+
WORKFLOW = "WORKFLOW",
|
|
30
|
+
RECONCILER = "RECONCILER",
|
|
31
|
+
SYSTEM = "SYSTEM"
|
|
32
|
+
}
|
|
33
|
+
/** Audit trail entries. Never carries a location. */
|
|
34
|
+
export declare enum SafetyCheckAuditEventType {
|
|
35
|
+
CREATED = "CREATED",
|
|
36
|
+
ACTIVATED = "ACTIVATED",
|
|
37
|
+
TRACKING_STARTED = "TRACKING_STARTED",
|
|
38
|
+
TRACKING_UNAVAILABLE = "TRACKING_UNAVAILABLE",
|
|
39
|
+
WORKFLOW_STARTED = "WORKFLOW_STARTED",
|
|
40
|
+
WORKFLOW_START_FAILED = "WORKFLOW_START_FAILED",
|
|
41
|
+
EXTENDED = "EXTENDED",
|
|
42
|
+
PROMPT_STARTED = "PROMPT_STARTED",
|
|
43
|
+
CHECKED_IN = "CHECKED_IN",
|
|
44
|
+
STOPPED = "STOPPED",
|
|
45
|
+
CANCELLED = "CANCELLED",
|
|
46
|
+
SOS_TRIGGERED = "SOS_TRIGGERED",
|
|
47
|
+
SOS_INCIDENT_CREATED = "SOS_INCIDENT_CREATED",
|
|
48
|
+
SOS_INCIDENT_RETRY = "SOS_INCIDENT_RETRY",
|
|
49
|
+
SOS_FAILED = "SOS_FAILED",
|
|
50
|
+
EXPIRED = "EXPIRED"
|
|
51
|
+
}
|
|
52
|
+
/** The safety features that can raise an incident. */
|
|
53
|
+
export declare enum SafetyFeature {
|
|
54
|
+
SAFETY_CHECK = "SAFETY_CHECK",
|
|
55
|
+
FOLLOW_ME = "FOLLOW_ME"
|
|
56
|
+
}
|
|
57
|
+
/** Stable code of the incident category every organization receives. */
|
|
58
|
+
export declare enum SafetyIncidentCategoryCode {
|
|
59
|
+
SAFETY_ALERTS = "SAFETY_ALERTS"
|
|
60
|
+
}
|
|
61
|
+
/** Stable codes of the incident types inside the Safety Alerts category. */
|
|
62
|
+
export declare enum SafetyIncidentTypeCode {
|
|
63
|
+
SAFETY_CHECK_SOS = "SAFETY_CHECK_SOS",
|
|
64
|
+
FOLLOW_ME_SOS = "FOLLOW_ME_SOS"
|
|
65
|
+
}
|
|
66
|
+
/** Machine-readable `code` on errors clarion-safety returns. */
|
|
67
|
+
export declare enum SafetyCheckErrorCode {
|
|
68
|
+
NOT_FOUND = "SAFETY_CHECK_NOT_FOUND",
|
|
69
|
+
ALREADY_ACTIVE = "SAFETY_CHECK_ALREADY_ACTIVE",
|
|
70
|
+
ALREADY_ENDED = "SAFETY_CHECK_ENDED",
|
|
71
|
+
SOS_ALREADY_TRIGGERED = "SAFETY_CHECK_SOS_ALREADY_TRIGGERED",
|
|
72
|
+
INVALID_TRANSITION = "SAFETY_CHECK_INVALID_TRANSITION",
|
|
73
|
+
INVALID_DURATION = "SAFETY_CHECK_INVALID_DURATION",
|
|
74
|
+
MAX_DURATION_EXCEEDED = "SAFETY_CHECK_MAX_DURATION_EXCEEDED",
|
|
75
|
+
INVALID_REASON = "SAFETY_CHECK_INVALID_REASON",
|
|
76
|
+
CUSTOM_REASON_REQUIRED = "SAFETY_CHECK_CUSTOM_REASON_REQUIRED",
|
|
77
|
+
GUARDIAN_NOT_FOUND = "SAFETY_CHECK_GUARDIAN_NOT_FOUND",
|
|
78
|
+
GUARDIANS_UNAVAILABLE = "SAFETY_CHECK_GUARDIANS_UNAVAILABLE",
|
|
79
|
+
NO_SOS_RECIPIENTS = "SAFETY_CHECK_NO_SOS_RECIPIENTS",
|
|
80
|
+
SERVICE_PROVIDER_NOT_ENTITLED = "SAFETY_CHECK_SERVICE_PROVIDER_NOT_ENTITLED",
|
|
81
|
+
TRACKING_CLOSED = "SAFETY_CHECK_TRACKING_CLOSED",
|
|
82
|
+
RATE_LIMITED = "SAFETY_CHECK_RATE_LIMITED"
|
|
83
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { GuardianAudience } from '../../alert-dispatch/interfaces/guardian-audience';
|
|
2
|
+
import { SafetyCheckActorType, SafetyCheckAuditEventType, SafetyCheckSosTrigger, SafetyCheckStatus } from '../enums/safety-enums';
|
|
3
|
+
/**
|
|
4
|
+
* Response shapes of clarion-safety, mirrored from grm-shared-library
|
|
5
|
+
* (modules/safety/interfaces/safety-check.ts). Timestamps are ISO 8601 strings
|
|
6
|
+
* from the server clock.
|
|
7
|
+
*/
|
|
8
|
+
/** A reason as the app's dropdown shows it. */
|
|
9
|
+
export interface SafetyCheckReasonView {
|
|
10
|
+
id: string;
|
|
11
|
+
code: string;
|
|
12
|
+
label: string;
|
|
13
|
+
description: string | null;
|
|
14
|
+
/** The "Write my own" entry: the user types the reason. */
|
|
15
|
+
isCustom: boolean;
|
|
16
|
+
displayOrder: number;
|
|
17
|
+
}
|
|
18
|
+
/** A reason as the admin manages it. */
|
|
19
|
+
export interface SafetyCheckReasonAdminView extends SafetyCheckReasonView {
|
|
20
|
+
/** Null for a platform-wide reason (Super-Admin only). */
|
|
21
|
+
organizationId: number | null;
|
|
22
|
+
/** Null for every country. */
|
|
23
|
+
countryCode: string | null;
|
|
24
|
+
active: boolean;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
updatedAt: string;
|
|
27
|
+
}
|
|
28
|
+
/** Body of POST /safety/admin/check-reasons. */
|
|
29
|
+
export interface CreateSafetyCheckReasonRequest {
|
|
30
|
+
code: string;
|
|
31
|
+
label: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
organizationId?: number;
|
|
34
|
+
countryCode?: string;
|
|
35
|
+
isCustom?: boolean;
|
|
36
|
+
active?: boolean;
|
|
37
|
+
displayOrder?: number;
|
|
38
|
+
}
|
|
39
|
+
/** Body of PATCH /safety/admin/check-reasons/:id. Code, organization and custom-ness are fixed. */
|
|
40
|
+
export interface UpdateSafetyCheckReasonRequest {
|
|
41
|
+
label?: string;
|
|
42
|
+
description?: string | null;
|
|
43
|
+
countryCode?: string | null;
|
|
44
|
+
active?: boolean;
|
|
45
|
+
displayOrder?: number;
|
|
46
|
+
}
|
|
47
|
+
/** One Safety Check as its owner sees it. */
|
|
48
|
+
export interface SafetyCheckView {
|
|
49
|
+
id: string;
|
|
50
|
+
status: SafetyCheckStatus;
|
|
51
|
+
reasonId: string | null;
|
|
52
|
+
reasonCode: string | null;
|
|
53
|
+
reasonLabel: string;
|
|
54
|
+
customReason: string | null;
|
|
55
|
+
durationMinutes: number;
|
|
56
|
+
extensionCount: number;
|
|
57
|
+
startedAt: string;
|
|
58
|
+
scheduledCheckInAt: string;
|
|
59
|
+
promptCountdownSeconds: number;
|
|
60
|
+
promptStartedAt: string | null;
|
|
61
|
+
promptDeadlineAt: string | null;
|
|
62
|
+
checkedInAt: string | null;
|
|
63
|
+
endedAt: string | null;
|
|
64
|
+
guardians: GuardianAudience;
|
|
65
|
+
notifyGuardiansOnStartEnd: boolean;
|
|
66
|
+
notifyServiceProviderRequested: boolean;
|
|
67
|
+
notifyServiceProviderAllowed: boolean;
|
|
68
|
+
sosTrigger: SafetyCheckSosTrigger | null;
|
|
69
|
+
sosTriggeredAt: string | null;
|
|
70
|
+
incidentId: number | null;
|
|
71
|
+
tripId: string | null;
|
|
72
|
+
serverTime: string;
|
|
73
|
+
}
|
|
74
|
+
/** What the setup screens need from the server. */
|
|
75
|
+
export interface SafetyCheckStartOptions {
|
|
76
|
+
limits: {
|
|
77
|
+
minDurationMinutes: number;
|
|
78
|
+
maxDurationMinutes: number;
|
|
79
|
+
presetDurationsMinutes: number[];
|
|
80
|
+
minPromptCountdownSeconds: number;
|
|
81
|
+
maxPromptCountdownSeconds: number;
|
|
82
|
+
customReasonMaxLength: number;
|
|
83
|
+
};
|
|
84
|
+
defaults: {
|
|
85
|
+
durationMinutes: number;
|
|
86
|
+
promptCountdownSeconds: number;
|
|
87
|
+
notifyServiceProvider: boolean;
|
|
88
|
+
notifyGuardiansOnStartEnd: boolean;
|
|
89
|
+
};
|
|
90
|
+
serviceProvider: {
|
|
91
|
+
available: boolean;
|
|
92
|
+
tier: string | null;
|
|
93
|
+
degraded: boolean;
|
|
94
|
+
};
|
|
95
|
+
serverTime: string;
|
|
96
|
+
}
|
|
97
|
+
/** The recorded trip, WITHOUT coordinates - location is never shown before an SOS. */
|
|
98
|
+
export interface SafetyCheckTripSummary {
|
|
99
|
+
id: string;
|
|
100
|
+
status: string;
|
|
101
|
+
visibility: string;
|
|
102
|
+
purpose: string;
|
|
103
|
+
incidentId: number | null;
|
|
104
|
+
startedAt: string;
|
|
105
|
+
endedAt: string | null;
|
|
106
|
+
sharedAt: string | null;
|
|
107
|
+
distanceMeters: number | null;
|
|
108
|
+
trackPointCount: number;
|
|
109
|
+
}
|
|
110
|
+
export interface SafetyCheckAuditEntry {
|
|
111
|
+
id: string;
|
|
112
|
+
eventType: SafetyCheckAuditEventType;
|
|
113
|
+
fromStatus: SafetyCheckStatus | null;
|
|
114
|
+
toStatus: SafetyCheckStatus | null;
|
|
115
|
+
actorType: SafetyCheckActorType;
|
|
116
|
+
actorUserId: number | null;
|
|
117
|
+
/** Identifiers and timings only - never a location or a message body. */
|
|
118
|
+
metadata: Record<string, unknown> | null;
|
|
119
|
+
createdAt: string;
|
|
120
|
+
}
|
|
121
|
+
/** A row of the admin list. */
|
|
122
|
+
export interface SafetyCheckAdminListItem {
|
|
123
|
+
id: string;
|
|
124
|
+
status: SafetyCheckStatus;
|
|
125
|
+
userId: number;
|
|
126
|
+
userName: string | null;
|
|
127
|
+
organizationId: number;
|
|
128
|
+
controlCentreId: number | null;
|
|
129
|
+
reasonLabel: string;
|
|
130
|
+
durationMinutes: number;
|
|
131
|
+
startedAt: string;
|
|
132
|
+
scheduledCheckInAt: string;
|
|
133
|
+
checkedInAt: string | null;
|
|
134
|
+
endedAt: string | null;
|
|
135
|
+
sosTrigger: SafetyCheckSosTrigger | null;
|
|
136
|
+
incidentId: number | null;
|
|
137
|
+
createdAt: string;
|
|
138
|
+
}
|
|
139
|
+
/** The check as the admin detail view receives it. */
|
|
140
|
+
export interface SafetyCheckAdminView extends SafetyCheckView {
|
|
141
|
+
userId: number;
|
|
142
|
+
userName: string | null;
|
|
143
|
+
userPhoneNumber: string | null;
|
|
144
|
+
organizationId: number;
|
|
145
|
+
controlCentreId: number | null;
|
|
146
|
+
appId: string | null;
|
|
147
|
+
countryCode: string | null;
|
|
148
|
+
entitlementTierAtStart: string | null;
|
|
149
|
+
workflowId: string | null;
|
|
150
|
+
workflowStartedAt: string | null;
|
|
151
|
+
trackPointCount: number;
|
|
152
|
+
lastLocationAt: string | null;
|
|
153
|
+
sosAttempts: number;
|
|
154
|
+
sosFailureReason: string | null;
|
|
155
|
+
createdAt: string;
|
|
156
|
+
updatedAt: string;
|
|
157
|
+
}
|
|
158
|
+
/** The admin detail view. */
|
|
159
|
+
export interface SafetyCheckAdminDetail {
|
|
160
|
+
check: SafetyCheckAdminView;
|
|
161
|
+
events: SafetyCheckAuditEntry[];
|
|
162
|
+
trip: SafetyCheckTripSummary | null;
|
|
163
|
+
}
|
|
164
|
+
/** Filters for GET /safety/admin/checks. */
|
|
165
|
+
export interface SafetyCheckAdminQuery {
|
|
166
|
+
page?: number;
|
|
167
|
+
limit?: number;
|
|
168
|
+
status?: SafetyCheckStatus;
|
|
169
|
+
/** Super-admin only. */
|
|
170
|
+
organizationId?: number;
|
|
171
|
+
userId?: number;
|
|
172
|
+
sosOnly?: boolean;
|
|
173
|
+
from?: string;
|
|
174
|
+
to?: string;
|
|
175
|
+
id?: string;
|
|
176
|
+
}
|