clarion-shared-types 1.0.85 → 1.0.86

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 (46) hide show
  1. package/dist/cjs/index.js +1 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/modules/partner/enums/partner-enums.js +128 -0
  4. package/dist/cjs/modules/partner/enums/partner-enums.js.map +1 -0
  5. package/dist/cjs/modules/partner/index.js +27 -0
  6. package/dist/cjs/modules/partner/index.js.map +1 -0
  7. package/dist/cjs/modules/partner/interfaces/incident-partner-routing.dto.js +3 -0
  8. package/dist/cjs/modules/partner/interfaces/incident-partner-routing.dto.js.map +1 -0
  9. package/dist/cjs/modules/partner/interfaces/partner-coverage-rule.dto.js +3 -0
  10. package/dist/cjs/modules/partner/interfaces/partner-coverage-rule.dto.js.map +1 -0
  11. package/dist/cjs/modules/partner/interfaces/partner-dispatch.dto.js +3 -0
  12. package/dist/cjs/modules/partner/interfaces/partner-dispatch.dto.js.map +1 -0
  13. package/dist/cjs/modules/partner/interfaces/partner-integration.dto.js +3 -0
  14. package/dist/cjs/modules/partner/interfaces/partner-integration.dto.js.map +1 -0
  15. package/dist/cjs/modules/partner/interfaces/partner-provider.dto.js +3 -0
  16. package/dist/cjs/modules/partner/interfaces/partner-provider.dto.js.map +1 -0
  17. package/dist/cjs/modules/partner/utils/partner-display.util.js +116 -0
  18. package/dist/cjs/modules/partner/utils/partner-display.util.js.map +1 -0
  19. package/dist/esm/index.js +1 -0
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/modules/partner/enums/partner-enums.js +125 -0
  22. package/dist/esm/modules/partner/enums/partner-enums.js.map +1 -0
  23. package/dist/esm/modules/partner/index.js +11 -0
  24. package/dist/esm/modules/partner/index.js.map +1 -0
  25. package/dist/esm/modules/partner/interfaces/incident-partner-routing.dto.js +2 -0
  26. package/dist/esm/modules/partner/interfaces/incident-partner-routing.dto.js.map +1 -0
  27. package/dist/esm/modules/partner/interfaces/partner-coverage-rule.dto.js +2 -0
  28. package/dist/esm/modules/partner/interfaces/partner-coverage-rule.dto.js.map +1 -0
  29. package/dist/esm/modules/partner/interfaces/partner-dispatch.dto.js +2 -0
  30. package/dist/esm/modules/partner/interfaces/partner-dispatch.dto.js.map +1 -0
  31. package/dist/esm/modules/partner/interfaces/partner-integration.dto.js +2 -0
  32. package/dist/esm/modules/partner/interfaces/partner-integration.dto.js.map +1 -0
  33. package/dist/esm/modules/partner/interfaces/partner-provider.dto.js +2 -0
  34. package/dist/esm/modules/partner/interfaces/partner-provider.dto.js.map +1 -0
  35. package/dist/esm/modules/partner/utils/partner-display.util.js +110 -0
  36. package/dist/esm/modules/partner/utils/partner-display.util.js.map +1 -0
  37. package/dist/types/index.d.ts +1 -0
  38. package/dist/types/modules/partner/enums/partner-enums.d.ts +112 -0
  39. package/dist/types/modules/partner/index.d.ts +7 -0
  40. package/dist/types/modules/partner/interfaces/incident-partner-routing.dto.d.ts +30 -0
  41. package/dist/types/modules/partner/interfaces/partner-coverage-rule.dto.d.ts +42 -0
  42. package/dist/types/modules/partner/interfaces/partner-dispatch.dto.d.ts +126 -0
  43. package/dist/types/modules/partner/interfaces/partner-integration.dto.d.ts +86 -0
  44. package/dist/types/modules/partner/interfaces/partner-provider.dto.d.ts +53 -0
  45. package/dist/types/modules/partner/utils/partner-display.util.d.ts +37 -0
  46. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -36,6 +36,7 @@ __exportStar(require("./modules/country/index"), exports);
36
36
  __exportStar(require("./modules/tracking/index"), exports);
37
37
  __exportStar(require("./modules/entitlement/index"), exports);
38
38
  __exportStar(require("./modules/alert-dispatch/index"), exports);
39
+ __exportStar(require("./modules/partner/index"), exports);
39
40
  // Interfaces
40
41
  __exportStar(require("./modules/common/interfaces/server-message"), exports);
41
42
  __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;AAE/C,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,0DAAwC;AAExC,aAAa;AACb,6EAA2D;AAC3D,yEAAuD"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Frontend mirrors of the partner enums in grm-shared-library.
4
+ *
5
+ * Kept in ONE file rather than one per enum: the admin's partner screens import
6
+ * most of them together, and the set only means anything as a whole. The values
7
+ * are byte-identical to the backend's, because they travel over the wire as
8
+ * strings and any drift would show up as a silently unstyled chip rather than a
9
+ * compile error.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PartnerDispatchScope = exports.IncidentPartnerRoutingStatus = exports.PartnerAdapterOperation = exports.PartnerLocationProvider = exports.PartnerDispatchFailureReason = exports.PartnerDispatchStatus = exports.PartnerCoverageMatchType = exports.PartnerIntegrationStatus = exports.PartnerIntegrationEnvironment = exports.PartnerRoutingMode = exports.PartnerServiceCapability = exports.PartnerProviderCode = void 0;
13
+ /** The third-party partner behind a partnership. */
14
+ var PartnerProviderCode;
15
+ (function (PartnerProviderCode) {
16
+ PartnerProviderCode["RESCUE_CO"] = "RESCUE_CO";
17
+ PartnerProviderCode["AAR"] = "AAR";
18
+ PartnerProviderCode["ST_JOHN"] = "ST_JOHN";
19
+ PartnerProviderCode["GENERIC_REST"] = "GENERIC_REST";
20
+ })(PartnerProviderCode || (exports.PartnerProviderCode = PartnerProviderCode = {}));
21
+ /** A class of emergency service a partner can be asked to provide. */
22
+ var PartnerServiceCapability;
23
+ (function (PartnerServiceCapability) {
24
+ PartnerServiceCapability["AMBULANCE"] = "AMBULANCE";
25
+ PartnerServiceCapability["MEDICAL_EVACUATION"] = "MEDICAL_EVACUATION";
26
+ PartnerServiceCapability["FIRE_RESPONSE"] = "FIRE_RESPONSE";
27
+ PartnerServiceCapability["SECURITY_RESPONSE"] = "SECURITY_RESPONSE";
28
+ PartnerServiceCapability["ROADSIDE_ASSISTANCE"] = "ROADSIDE_ASSISTANCE";
29
+ PartnerServiceCapability["TOWING"] = "TOWING";
30
+ PartnerServiceCapability["OTHER"] = "OTHER";
31
+ })(PartnerServiceCapability || (exports.PartnerServiceCapability = PartnerServiceCapability = {}));
32
+ /** How an incident a partnership covers reaches the partner. */
33
+ var PartnerRoutingMode;
34
+ (function (PartnerRoutingMode) {
35
+ /** Sent as soon as the incident is created. */
36
+ PartnerRoutingMode["AUTO"] = "AUTO";
37
+ /** Held until an operator confirms it. */
38
+ PartnerRoutingMode["MANUAL"] = "MANUAL";
39
+ /** Configuration kept, nothing routed. */
40
+ PartnerRoutingMode["DISABLED"] = "DISABLED";
41
+ })(PartnerRoutingMode || (exports.PartnerRoutingMode = PartnerRoutingMode = {}));
42
+ /** Which of a partner's environments a partnership points at. */
43
+ var PartnerIntegrationEnvironment;
44
+ (function (PartnerIntegrationEnvironment) {
45
+ PartnerIntegrationEnvironment["SANDBOX"] = "SANDBOX";
46
+ PartnerIntegrationEnvironment["PRODUCTION"] = "PRODUCTION";
47
+ })(PartnerIntegrationEnvironment || (exports.PartnerIntegrationEnvironment = PartnerIntegrationEnvironment = {}));
48
+ /** Last known health of a partnership's connection. Advisory only. */
49
+ var PartnerIntegrationStatus;
50
+ (function (PartnerIntegrationStatus) {
51
+ PartnerIntegrationStatus["UNKNOWN"] = "UNKNOWN";
52
+ PartnerIntegrationStatus["HEALTHY"] = "HEALTHY";
53
+ PartnerIntegrationStatus["DEGRADED"] = "DEGRADED";
54
+ PartnerIntegrationStatus["UNREACHABLE"] = "UNREACHABLE";
55
+ })(PartnerIntegrationStatus || (exports.PartnerIntegrationStatus = PartnerIntegrationStatus = {}));
56
+ /** What a coverage rule matches an incident on. */
57
+ var PartnerCoverageMatchType;
58
+ (function (PartnerCoverageMatchType) {
59
+ PartnerCoverageMatchType["ALL"] = "ALL";
60
+ PartnerCoverageMatchType["INCIDENT_TYPE"] = "INCIDENT_TYPE";
61
+ PartnerCoverageMatchType["INCIDENT_CATEGORY"] = "INCIDENT_CATEGORY";
62
+ PartnerCoverageMatchType["EMERGENCY_TYPE"] = "EMERGENCY_TYPE";
63
+ })(PartnerCoverageMatchType || (exports.PartnerCoverageMatchType = PartnerCoverageMatchType = {}));
64
+ /** Lifecycle of one incident's routing to one partner. */
65
+ var PartnerDispatchStatus;
66
+ (function (PartnerDispatchStatus) {
67
+ PartnerDispatchStatus["PENDING_APPROVAL"] = "PENDING_APPROVAL";
68
+ PartnerDispatchStatus["QUEUED"] = "QUEUED";
69
+ PartnerDispatchStatus["SENDING"] = "SENDING";
70
+ PartnerDispatchStatus["SENT"] = "SENT";
71
+ PartnerDispatchStatus["ACKNOWLEDGED"] = "ACKNOWLEDGED";
72
+ PartnerDispatchStatus["FAILED"] = "FAILED";
73
+ PartnerDispatchStatus["REJECTED"] = "REJECTED";
74
+ PartnerDispatchStatus["CANCELLED"] = "CANCELLED";
75
+ PartnerDispatchStatus["EXPIRED"] = "EXPIRED";
76
+ })(PartnerDispatchStatus || (exports.PartnerDispatchStatus = PartnerDispatchStatus = {}));
77
+ /** Why a dispatch did not reach its partner. */
78
+ var PartnerDispatchFailureReason;
79
+ (function (PartnerDispatchFailureReason) {
80
+ PartnerDispatchFailureReason["INVALID_PAYLOAD"] = "INVALID_PAYLOAD";
81
+ PartnerDispatchFailureReason["MISSING_REQUIRED_FIELD"] = "MISSING_REQUIRED_FIELD";
82
+ PartnerDispatchFailureReason["AUTHENTICATION_FAILED"] = "AUTHENTICATION_FAILED";
83
+ PartnerDispatchFailureReason["FEATURE_NOT_ENABLED"] = "FEATURE_NOT_ENABLED";
84
+ PartnerDispatchFailureReason["PROVIDER_REJECTED"] = "PROVIDER_REJECTED";
85
+ PartnerDispatchFailureReason["ADAPTER_NOT_SUPPORTED"] = "ADAPTER_NOT_SUPPORTED";
86
+ PartnerDispatchFailureReason["INTEGRATION_DISABLED"] = "INTEGRATION_DISABLED";
87
+ PartnerDispatchFailureReason["CREDENTIAL_UNAVAILABLE"] = "CREDENTIAL_UNAVAILABLE";
88
+ PartnerDispatchFailureReason["RATE_LIMITED"] = "RATE_LIMITED";
89
+ PartnerDispatchFailureReason["PROVIDER_UNAVAILABLE"] = "PROVIDER_UNAVAILABLE";
90
+ PartnerDispatchFailureReason["TIMEOUT"] = "TIMEOUT";
91
+ PartnerDispatchFailureReason["MAX_ATTEMPTS_EXCEEDED"] = "MAX_ATTEMPTS_EXCEEDED";
92
+ PartnerDispatchFailureReason["UNKNOWN"] = "UNKNOWN";
93
+ })(PartnerDispatchFailureReason || (exports.PartnerDispatchFailureReason = PartnerDispatchFailureReason = {}));
94
+ /** How the location attached to a dispatch was obtained. */
95
+ var PartnerLocationProvider;
96
+ (function (PartnerLocationProvider) {
97
+ PartnerLocationProvider["GPS"] = "GPS";
98
+ PartnerLocationProvider["NETWORK"] = "NETWORK";
99
+ PartnerLocationProvider["FUSED"] = "FUSED";
100
+ })(PartnerLocationProvider || (exports.PartnerLocationProvider = PartnerLocationProvider = {}));
101
+ /** The outbound partner call an attempt record describes. */
102
+ var PartnerAdapterOperation;
103
+ (function (PartnerAdapterOperation) {
104
+ PartnerAdapterOperation["AUTHENTICATE"] = "AUTHENTICATE";
105
+ PartnerAdapterOperation["HEALTH_CHECK"] = "HEALTH_CHECK";
106
+ PartnerAdapterOperation["DISPATCH"] = "DISPATCH";
107
+ })(PartnerAdapterOperation || (exports.PartnerAdapterOperation = PartnerAdapterOperation = {}));
108
+ /** The incident-side summary of third-party routing, stored on the incident row. */
109
+ var IncidentPartnerRoutingStatus;
110
+ (function (IncidentPartnerRoutingStatus) {
111
+ IncidentPartnerRoutingStatus["NOT_ROUTED"] = "NOT_ROUTED";
112
+ IncidentPartnerRoutingStatus["PENDING"] = "PENDING";
113
+ IncidentPartnerRoutingStatus["AWAITING_APPROVAL"] = "AWAITING_APPROVAL";
114
+ IncidentPartnerRoutingStatus["ROUTED"] = "ROUTED";
115
+ IncidentPartnerRoutingStatus["PARTIALLY_ROUTED"] = "PARTIALLY_ROUTED";
116
+ IncidentPartnerRoutingStatus["FAILED"] = "FAILED";
117
+ IncidentPartnerRoutingStatus["DECLINED"] = "DECLINED";
118
+ })(IncidentPartnerRoutingStatus || (exports.IncidentPartnerRoutingStatus = IncidentPartnerRoutingStatus = {}));
119
+ /** List filter for the admin's partner-routing incident views. */
120
+ var PartnerDispatchScope;
121
+ (function (PartnerDispatchScope) {
122
+ PartnerDispatchScope["ALL"] = "ALL";
123
+ PartnerDispatchScope["ROUTED"] = "ROUTED";
124
+ PartnerDispatchScope["AWAITING_APPROVAL"] = "AWAITING_APPROVAL";
125
+ PartnerDispatchScope["FAILED"] = "FAILED";
126
+ PartnerDispatchScope["NOT_ROUTED"] = "NOT_ROUTED";
127
+ })(PartnerDispatchScope || (exports.PartnerDispatchScope = PartnerDispatchScope = {}));
128
+ //# sourceMappingURL=partner-enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-enums.js","sourceRoot":"","sources":["../../../../../src/modules/partner/enums/partner-enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
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
+ // Enums
18
+ __exportStar(require("./enums/partner-enums"), exports);
19
+ // Interfaces / DTOs
20
+ __exportStar(require("./interfaces/partner-provider.dto"), exports);
21
+ __exportStar(require("./interfaces/partner-integration.dto"), exports);
22
+ __exportStar(require("./interfaces/partner-coverage-rule.dto"), exports);
23
+ __exportStar(require("./interfaces/partner-dispatch.dto"), exports);
24
+ __exportStar(require("./interfaces/incident-partner-routing.dto"), exports);
25
+ // Utilities
26
+ __exportStar(require("./utils/partner-display.util"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/partner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,wDAAsC;AAEtC,oBAAoB;AACpB,oEAAkD;AAClD,uEAAqD;AACrD,yEAAuD;AACvD,oEAAkD;AAClD,4EAA0D;AAE1D,YAAY;AACZ,+DAA6C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=incident-partner-routing.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incident-partner-routing.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/incident-partner-routing.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=partner-coverage-rule.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-coverage-rule.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-coverage-rule.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=partner-dispatch.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-dispatch.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-dispatch.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=partner-integration.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-integration.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-integration.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=partner-provider.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-provider.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-provider.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PARTNER_COVERAGE_MATCH_TYPE_LABELS = exports.PARTNER_CAPABILITY_LABELS = exports.PARTNER_INTEGRATION_STATUS_LABELS = exports.PARTNER_ROUTING_MODE_LABELS = exports.INCIDENT_PARTNER_ROUTING_STATUS_LABELS = exports.PARTNER_DISPATCH_STATUS_LABELS = void 0;
4
+ exports.partnerDispatchStatusTone = partnerDispatchStatusTone;
5
+ exports.incidentPartnerRoutingTone = incidentPartnerRoutingTone;
6
+ exports.partnerDispatchActions = partnerDispatchActions;
7
+ const partner_enums_1 = require("../enums/partner-enums");
8
+ /**
9
+ * Human labels for the partner enums.
10
+ *
11
+ * Kept in the shared package rather than in the admin app so every screen that
12
+ * shows a dispatch - the list, the detail drawer, the incident view - names the
13
+ * same state the same way. An operator reading "Waiting for confirmation" in one
14
+ * place and "Pending approval" in another would reasonably assume they were
15
+ * different things.
16
+ */
17
+ exports.PARTNER_DISPATCH_STATUS_LABELS = {
18
+ [partner_enums_1.PartnerDispatchStatus.PENDING_APPROVAL]: 'Waiting for confirmation',
19
+ [partner_enums_1.PartnerDispatchStatus.QUEUED]: 'Queued',
20
+ [partner_enums_1.PartnerDispatchStatus.SENDING]: 'Sending',
21
+ [partner_enums_1.PartnerDispatchStatus.SENT]: 'Sent to partner',
22
+ [partner_enums_1.PartnerDispatchStatus.ACKNOWLEDGED]: 'Acknowledged by partner',
23
+ [partner_enums_1.PartnerDispatchStatus.FAILED]: 'Failed',
24
+ [partner_enums_1.PartnerDispatchStatus.REJECTED]: 'Declined',
25
+ [partner_enums_1.PartnerDispatchStatus.CANCELLED]: 'Withdrawn',
26
+ [partner_enums_1.PartnerDispatchStatus.EXPIRED]: 'Expired',
27
+ };
28
+ exports.INCIDENT_PARTNER_ROUTING_STATUS_LABELS = {
29
+ [partner_enums_1.IncidentPartnerRoutingStatus.NOT_ROUTED]: 'No partner',
30
+ [partner_enums_1.IncidentPartnerRoutingStatus.PENDING]: 'Contacting partner',
31
+ [partner_enums_1.IncidentPartnerRoutingStatus.AWAITING_APPROVAL]: 'Waiting for confirmation',
32
+ [partner_enums_1.IncidentPartnerRoutingStatus.ROUTED]: 'Partner notified',
33
+ [partner_enums_1.IncidentPartnerRoutingStatus.PARTIALLY_ROUTED]: 'Partly notified',
34
+ [partner_enums_1.IncidentPartnerRoutingStatus.FAILED]: 'Partner not reached',
35
+ [partner_enums_1.IncidentPartnerRoutingStatus.DECLINED]: 'Declined',
36
+ };
37
+ exports.PARTNER_ROUTING_MODE_LABELS = {
38
+ [partner_enums_1.PartnerRoutingMode.AUTO]: 'Automatic',
39
+ [partner_enums_1.PartnerRoutingMode.MANUAL]: 'Needs confirmation',
40
+ [partner_enums_1.PartnerRoutingMode.DISABLED]: 'Routing off',
41
+ };
42
+ exports.PARTNER_INTEGRATION_STATUS_LABELS = {
43
+ [partner_enums_1.PartnerIntegrationStatus.UNKNOWN]: 'Not tested',
44
+ [partner_enums_1.PartnerIntegrationStatus.HEALTHY]: 'Healthy',
45
+ [partner_enums_1.PartnerIntegrationStatus.DEGRADED]: 'Degraded',
46
+ [partner_enums_1.PartnerIntegrationStatus.UNREACHABLE]: 'Unreachable',
47
+ };
48
+ exports.PARTNER_CAPABILITY_LABELS = {
49
+ [partner_enums_1.PartnerServiceCapability.AMBULANCE]: 'Ambulance',
50
+ [partner_enums_1.PartnerServiceCapability.MEDICAL_EVACUATION]: 'Medical evacuation',
51
+ [partner_enums_1.PartnerServiceCapability.FIRE_RESPONSE]: 'Fire response',
52
+ [partner_enums_1.PartnerServiceCapability.SECURITY_RESPONSE]: 'Security response',
53
+ [partner_enums_1.PartnerServiceCapability.ROADSIDE_ASSISTANCE]: 'Roadside assistance',
54
+ [partner_enums_1.PartnerServiceCapability.TOWING]: 'Towing',
55
+ [partner_enums_1.PartnerServiceCapability.OTHER]: 'Other',
56
+ };
57
+ exports.PARTNER_COVERAGE_MATCH_TYPE_LABELS = {
58
+ [partner_enums_1.PartnerCoverageMatchType.ALL]: 'Every incident',
59
+ [partner_enums_1.PartnerCoverageMatchType.INCIDENT_TYPE]: 'Incident type',
60
+ [partner_enums_1.PartnerCoverageMatchType.INCIDENT_CATEGORY]: 'Incident category',
61
+ [partner_enums_1.PartnerCoverageMatchType.EMERGENCY_TYPE]: 'Emergency classification',
62
+ };
63
+ /**
64
+ * Chip family for a dispatch status, matching the admin's existing chip
65
+ * vocabulary: `success` for anything the partner has, `warn` for anything still
66
+ * needing a human, `danger` for a failure, `neutral` for a settled non-event.
67
+ */
68
+ function partnerDispatchStatusTone(status) {
69
+ switch (status) {
70
+ case partner_enums_1.PartnerDispatchStatus.SENT:
71
+ case partner_enums_1.PartnerDispatchStatus.ACKNOWLEDGED:
72
+ return 'success';
73
+ case partner_enums_1.PartnerDispatchStatus.PENDING_APPROVAL:
74
+ case partner_enums_1.PartnerDispatchStatus.QUEUED:
75
+ case partner_enums_1.PartnerDispatchStatus.SENDING:
76
+ return 'warn';
77
+ case partner_enums_1.PartnerDispatchStatus.FAILED:
78
+ case partner_enums_1.PartnerDispatchStatus.EXPIRED:
79
+ return 'danger';
80
+ default:
81
+ return 'neutral';
82
+ }
83
+ }
84
+ /** The same tone mapping for the incident-level rolled-up status. */
85
+ function incidentPartnerRoutingTone(status) {
86
+ switch (status) {
87
+ case partner_enums_1.IncidentPartnerRoutingStatus.ROUTED:
88
+ return 'success';
89
+ case partner_enums_1.IncidentPartnerRoutingStatus.PENDING:
90
+ case partner_enums_1.IncidentPartnerRoutingStatus.AWAITING_APPROVAL:
91
+ case partner_enums_1.IncidentPartnerRoutingStatus.PARTIALLY_ROUTED:
92
+ return 'warn';
93
+ case partner_enums_1.IncidentPartnerRoutingStatus.FAILED:
94
+ return 'danger';
95
+ default:
96
+ return 'neutral';
97
+ }
98
+ }
99
+ /**
100
+ * Whether an operator can act on a dispatch, so a table can enable or hide its
101
+ * buttons without duplicating the backend's transition rules.
102
+ *
103
+ * Withdrawing is deliberately impossible once the partner has the emergency:
104
+ * standing an ambulance down is a phone call to the partner, not a button here.
105
+ */
106
+ function partnerDispatchActions(status) {
107
+ const pending = status === partner_enums_1.PartnerDispatchStatus.PENDING_APPROVAL;
108
+ return {
109
+ canApprove: pending,
110
+ canReject: pending,
111
+ canCancel: pending || status === partner_enums_1.PartnerDispatchStatus.QUEUED,
112
+ canResend: status === partner_enums_1.PartnerDispatchStatus.FAILED ||
113
+ status === partner_enums_1.PartnerDispatchStatus.EXPIRED,
114
+ };
115
+ }
116
+ //# sourceMappingURL=partner-display.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-display.util.js","sourceRoot":"","sources":["../../../../../src/modules/partner/utils/partner-display.util.ts"],"names":[],"mappings":";;;AAiFA,8DAiBC;AAGD,gEAeC;AASD,wDAeC;AA5ID,0DAOgC;AAEhC;;;;;;;;GAQG;AACU,QAAA,8BAA8B,GAAoD;IAC3F,CAAC,qCAAqB,CAAC,gBAAgB,CAAC,EAAE,0BAA0B;IACpE,CAAC,qCAAqB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACxC,CAAC,qCAAqB,CAAC,OAAO,CAAC,EAAE,SAAS;IAC1C,CAAC,qCAAqB,CAAC,IAAI,CAAC,EAAE,iBAAiB;IAC/C,CAAC,qCAAqB,CAAC,YAAY,CAAC,EAAE,yBAAyB;IAC/D,CAAC,qCAAqB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACxC,CAAC,qCAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC5C,CAAC,qCAAqB,CAAC,SAAS,CAAC,EAAE,WAAW;IAC9C,CAAC,qCAAqB,CAAC,OAAO,CAAC,EAAE,SAAS;CAC7C,CAAC;AAEW,QAAA,sCAAsC,GAE/C;IACA,CAAC,4CAA4B,CAAC,UAAU,CAAC,EAAE,YAAY;IACvD,CAAC,4CAA4B,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAC5D,CAAC,4CAA4B,CAAC,iBAAiB,CAAC,EAAE,0BAA0B;IAC5E,CAAC,4CAA4B,CAAC,MAAM,CAAC,EAAE,kBAAkB;IACzD,CAAC,4CAA4B,CAAC,gBAAgB,CAAC,EAAE,iBAAiB;IAClE,CAAC,4CAA4B,CAAC,MAAM,CAAC,EAAE,qBAAqB;IAC5D,CAAC,4CAA4B,CAAC,QAAQ,CAAC,EAAE,UAAU;CACtD,CAAC;AAEW,QAAA,2BAA2B,GAAiD;IACrF,CAAC,kCAAkB,CAAC,IAAI,CAAC,EAAE,WAAW;IACtC,CAAC,kCAAkB,CAAC,MAAM,CAAC,EAAE,oBAAoB;IACjD,CAAC,kCAAkB,CAAC,QAAQ,CAAC,EAAE,aAAa;CAC/C,CAAC;AAEW,QAAA,iCAAiC,GAE1C;IACA,CAAC,wCAAwB,CAAC,OAAO,CAAC,EAAE,YAAY;IAChD,CAAC,wCAAwB,CAAC,OAAO,CAAC,EAAE,SAAS;IAC7C,CAAC,wCAAwB,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC/C,CAAC,wCAAwB,CAAC,WAAW,CAAC,EAAE,aAAa;CACxD,CAAC;AAEW,QAAA,yBAAyB,GAAuD;IACzF,CAAC,wCAAwB,CAAC,SAAS,CAAC,EAAE,WAAW;IACjD,CAAC,wCAAwB,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;IACnE,CAAC,wCAAwB,CAAC,aAAa,CAAC,EAAE,eAAe;IACzD,CAAC,wCAAwB,CAAC,iBAAiB,CAAC,EAAE,mBAAmB;IACjE,CAAC,wCAAwB,CAAC,mBAAmB,CAAC,EAAE,qBAAqB;IACrE,CAAC,wCAAwB,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3C,CAAC,wCAAwB,CAAC,KAAK,CAAC,EAAE,OAAO;CAC5C,CAAC;AAEW,QAAA,kCAAkC,GAE3C;IACA,CAAC,wCAAwB,CAAC,GAAG,CAAC,EAAE,gBAAgB;IAChD,CAAC,wCAAwB,CAAC,aAAa,CAAC,EAAE,eAAe;IACzD,CAAC,wCAAwB,CAAC,iBAAiB,CAAC,EAAE,mBAAmB;IACjE,CAAC,wCAAwB,CAAC,cAAc,CAAC,EAAE,0BAA0B;CACxE,CAAC;AAEF;;;;GAIG;AACH,SAAgB,yBAAyB,CACrC,MAA6B;IAE7B,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,qCAAqB,CAAC,IAAI,CAAC;QAChC,KAAK,qCAAqB,CAAC,YAAY;YACnC,OAAO,SAAS,CAAC;QACrB,KAAK,qCAAqB,CAAC,gBAAgB,CAAC;QAC5C,KAAK,qCAAqB,CAAC,MAAM,CAAC;QAClC,KAAK,qCAAqB,CAAC,OAAO;YAC9B,OAAO,MAAM,CAAC;QAClB,KAAK,qCAAqB,CAAC,MAAM,CAAC;QAClC,KAAK,qCAAqB,CAAC,OAAO;YAC9B,OAAO,QAAQ,CAAC;QACpB;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AAED,qEAAqE;AACrE,SAAgB,0BAA0B,CACtC,MAAoC;IAEpC,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,4CAA4B,CAAC,MAAM;YACpC,OAAO,SAAS,CAAC;QACrB,KAAK,4CAA4B,CAAC,OAAO,CAAC;QAC1C,KAAK,4CAA4B,CAAC,iBAAiB,CAAC;QACpD,KAAK,4CAA4B,CAAC,gBAAgB;YAC9C,OAAO,MAAM,CAAC;QAClB,KAAK,4CAA4B,CAAC,MAAM;YACpC,OAAO,QAAQ,CAAC;QACpB;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CAAC,MAA6B;IAMhE,MAAM,OAAO,GAAG,MAAM,KAAK,qCAAqB,CAAC,gBAAgB,CAAC;IAClE,OAAO;QACH,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,OAAO,IAAI,MAAM,KAAK,qCAAqB,CAAC,MAAM;QAC7D,SAAS,EACL,MAAM,KAAK,qCAAqB,CAAC,MAAM;YACvC,MAAM,KAAK,qCAAqB,CAAC,OAAO;KAC/C,CAAC;AACN,CAAC"}
package/dist/esm/index.js CHANGED
@@ -20,6 +20,7 @@ export * from './modules/country/index';
20
20
  export * from './modules/tracking/index';
21
21
  export * from './modules/entitlement/index';
22
22
  export * from './modules/alert-dispatch/index';
23
+ export * from './modules/partner/index';
23
24
  // Interfaces
24
25
  export * from './modules/common/interfaces/server-message';
25
26
  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;AAE/C,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,yBAAyB,CAAC;AAExC,aAAa;AACb,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Frontend mirrors of the partner enums in grm-shared-library.
3
+ *
4
+ * Kept in ONE file rather than one per enum: the admin's partner screens import
5
+ * most of them together, and the set only means anything as a whole. The values
6
+ * are byte-identical to the backend's, because they travel over the wire as
7
+ * strings and any drift would show up as a silently unstyled chip rather than a
8
+ * compile error.
9
+ */
10
+ /** The third-party partner behind a partnership. */
11
+ export var PartnerProviderCode;
12
+ (function (PartnerProviderCode) {
13
+ PartnerProviderCode["RESCUE_CO"] = "RESCUE_CO";
14
+ PartnerProviderCode["AAR"] = "AAR";
15
+ PartnerProviderCode["ST_JOHN"] = "ST_JOHN";
16
+ PartnerProviderCode["GENERIC_REST"] = "GENERIC_REST";
17
+ })(PartnerProviderCode || (PartnerProviderCode = {}));
18
+ /** A class of emergency service a partner can be asked to provide. */
19
+ export var PartnerServiceCapability;
20
+ (function (PartnerServiceCapability) {
21
+ PartnerServiceCapability["AMBULANCE"] = "AMBULANCE";
22
+ PartnerServiceCapability["MEDICAL_EVACUATION"] = "MEDICAL_EVACUATION";
23
+ PartnerServiceCapability["FIRE_RESPONSE"] = "FIRE_RESPONSE";
24
+ PartnerServiceCapability["SECURITY_RESPONSE"] = "SECURITY_RESPONSE";
25
+ PartnerServiceCapability["ROADSIDE_ASSISTANCE"] = "ROADSIDE_ASSISTANCE";
26
+ PartnerServiceCapability["TOWING"] = "TOWING";
27
+ PartnerServiceCapability["OTHER"] = "OTHER";
28
+ })(PartnerServiceCapability || (PartnerServiceCapability = {}));
29
+ /** How an incident a partnership covers reaches the partner. */
30
+ export var PartnerRoutingMode;
31
+ (function (PartnerRoutingMode) {
32
+ /** Sent as soon as the incident is created. */
33
+ PartnerRoutingMode["AUTO"] = "AUTO";
34
+ /** Held until an operator confirms it. */
35
+ PartnerRoutingMode["MANUAL"] = "MANUAL";
36
+ /** Configuration kept, nothing routed. */
37
+ PartnerRoutingMode["DISABLED"] = "DISABLED";
38
+ })(PartnerRoutingMode || (PartnerRoutingMode = {}));
39
+ /** Which of a partner's environments a partnership points at. */
40
+ export var PartnerIntegrationEnvironment;
41
+ (function (PartnerIntegrationEnvironment) {
42
+ PartnerIntegrationEnvironment["SANDBOX"] = "SANDBOX";
43
+ PartnerIntegrationEnvironment["PRODUCTION"] = "PRODUCTION";
44
+ })(PartnerIntegrationEnvironment || (PartnerIntegrationEnvironment = {}));
45
+ /** Last known health of a partnership's connection. Advisory only. */
46
+ export var PartnerIntegrationStatus;
47
+ (function (PartnerIntegrationStatus) {
48
+ PartnerIntegrationStatus["UNKNOWN"] = "UNKNOWN";
49
+ PartnerIntegrationStatus["HEALTHY"] = "HEALTHY";
50
+ PartnerIntegrationStatus["DEGRADED"] = "DEGRADED";
51
+ PartnerIntegrationStatus["UNREACHABLE"] = "UNREACHABLE";
52
+ })(PartnerIntegrationStatus || (PartnerIntegrationStatus = {}));
53
+ /** What a coverage rule matches an incident on. */
54
+ export var PartnerCoverageMatchType;
55
+ (function (PartnerCoverageMatchType) {
56
+ PartnerCoverageMatchType["ALL"] = "ALL";
57
+ PartnerCoverageMatchType["INCIDENT_TYPE"] = "INCIDENT_TYPE";
58
+ PartnerCoverageMatchType["INCIDENT_CATEGORY"] = "INCIDENT_CATEGORY";
59
+ PartnerCoverageMatchType["EMERGENCY_TYPE"] = "EMERGENCY_TYPE";
60
+ })(PartnerCoverageMatchType || (PartnerCoverageMatchType = {}));
61
+ /** Lifecycle of one incident's routing to one partner. */
62
+ export var PartnerDispatchStatus;
63
+ (function (PartnerDispatchStatus) {
64
+ PartnerDispatchStatus["PENDING_APPROVAL"] = "PENDING_APPROVAL";
65
+ PartnerDispatchStatus["QUEUED"] = "QUEUED";
66
+ PartnerDispatchStatus["SENDING"] = "SENDING";
67
+ PartnerDispatchStatus["SENT"] = "SENT";
68
+ PartnerDispatchStatus["ACKNOWLEDGED"] = "ACKNOWLEDGED";
69
+ PartnerDispatchStatus["FAILED"] = "FAILED";
70
+ PartnerDispatchStatus["REJECTED"] = "REJECTED";
71
+ PartnerDispatchStatus["CANCELLED"] = "CANCELLED";
72
+ PartnerDispatchStatus["EXPIRED"] = "EXPIRED";
73
+ })(PartnerDispatchStatus || (PartnerDispatchStatus = {}));
74
+ /** Why a dispatch did not reach its partner. */
75
+ export var PartnerDispatchFailureReason;
76
+ (function (PartnerDispatchFailureReason) {
77
+ PartnerDispatchFailureReason["INVALID_PAYLOAD"] = "INVALID_PAYLOAD";
78
+ PartnerDispatchFailureReason["MISSING_REQUIRED_FIELD"] = "MISSING_REQUIRED_FIELD";
79
+ PartnerDispatchFailureReason["AUTHENTICATION_FAILED"] = "AUTHENTICATION_FAILED";
80
+ PartnerDispatchFailureReason["FEATURE_NOT_ENABLED"] = "FEATURE_NOT_ENABLED";
81
+ PartnerDispatchFailureReason["PROVIDER_REJECTED"] = "PROVIDER_REJECTED";
82
+ PartnerDispatchFailureReason["ADAPTER_NOT_SUPPORTED"] = "ADAPTER_NOT_SUPPORTED";
83
+ PartnerDispatchFailureReason["INTEGRATION_DISABLED"] = "INTEGRATION_DISABLED";
84
+ PartnerDispatchFailureReason["CREDENTIAL_UNAVAILABLE"] = "CREDENTIAL_UNAVAILABLE";
85
+ PartnerDispatchFailureReason["RATE_LIMITED"] = "RATE_LIMITED";
86
+ PartnerDispatchFailureReason["PROVIDER_UNAVAILABLE"] = "PROVIDER_UNAVAILABLE";
87
+ PartnerDispatchFailureReason["TIMEOUT"] = "TIMEOUT";
88
+ PartnerDispatchFailureReason["MAX_ATTEMPTS_EXCEEDED"] = "MAX_ATTEMPTS_EXCEEDED";
89
+ PartnerDispatchFailureReason["UNKNOWN"] = "UNKNOWN";
90
+ })(PartnerDispatchFailureReason || (PartnerDispatchFailureReason = {}));
91
+ /** How the location attached to a dispatch was obtained. */
92
+ export var PartnerLocationProvider;
93
+ (function (PartnerLocationProvider) {
94
+ PartnerLocationProvider["GPS"] = "GPS";
95
+ PartnerLocationProvider["NETWORK"] = "NETWORK";
96
+ PartnerLocationProvider["FUSED"] = "FUSED";
97
+ })(PartnerLocationProvider || (PartnerLocationProvider = {}));
98
+ /** The outbound partner call an attempt record describes. */
99
+ export var PartnerAdapterOperation;
100
+ (function (PartnerAdapterOperation) {
101
+ PartnerAdapterOperation["AUTHENTICATE"] = "AUTHENTICATE";
102
+ PartnerAdapterOperation["HEALTH_CHECK"] = "HEALTH_CHECK";
103
+ PartnerAdapterOperation["DISPATCH"] = "DISPATCH";
104
+ })(PartnerAdapterOperation || (PartnerAdapterOperation = {}));
105
+ /** The incident-side summary of third-party routing, stored on the incident row. */
106
+ export var IncidentPartnerRoutingStatus;
107
+ (function (IncidentPartnerRoutingStatus) {
108
+ IncidentPartnerRoutingStatus["NOT_ROUTED"] = "NOT_ROUTED";
109
+ IncidentPartnerRoutingStatus["PENDING"] = "PENDING";
110
+ IncidentPartnerRoutingStatus["AWAITING_APPROVAL"] = "AWAITING_APPROVAL";
111
+ IncidentPartnerRoutingStatus["ROUTED"] = "ROUTED";
112
+ IncidentPartnerRoutingStatus["PARTIALLY_ROUTED"] = "PARTIALLY_ROUTED";
113
+ IncidentPartnerRoutingStatus["FAILED"] = "FAILED";
114
+ IncidentPartnerRoutingStatus["DECLINED"] = "DECLINED";
115
+ })(IncidentPartnerRoutingStatus || (IncidentPartnerRoutingStatus = {}));
116
+ /** List filter for the admin's partner-routing incident views. */
117
+ export var PartnerDispatchScope;
118
+ (function (PartnerDispatchScope) {
119
+ PartnerDispatchScope["ALL"] = "ALL";
120
+ PartnerDispatchScope["ROUTED"] = "ROUTED";
121
+ PartnerDispatchScope["AWAITING_APPROVAL"] = "AWAITING_APPROVAL";
122
+ PartnerDispatchScope["FAILED"] = "FAILED";
123
+ PartnerDispatchScope["NOT_ROUTED"] = "NOT_ROUTED";
124
+ })(PartnerDispatchScope || (PartnerDispatchScope = {}));
125
+ //# sourceMappingURL=partner-enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-enums.js","sourceRoot":"","sources":["../../../../../src/modules/partner/enums/partner-enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ // Enums
2
+ export * from './enums/partner-enums';
3
+ // Interfaces / DTOs
4
+ export * from './interfaces/partner-provider.dto';
5
+ export * from './interfaces/partner-integration.dto';
6
+ export * from './interfaces/partner-coverage-rule.dto';
7
+ export * from './interfaces/partner-dispatch.dto';
8
+ export * from './interfaces/incident-partner-routing.dto';
9
+ // Utilities
10
+ export * from './utils/partner-display.util';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/partner/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,uBAAuB,CAAC;AAEtC,oBAAoB;AACpB,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAE1D,YAAY;AACZ,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=incident-partner-routing.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incident-partner-routing.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/incident-partner-routing.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=partner-coverage-rule.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-coverage-rule.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-coverage-rule.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=partner-dispatch.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-dispatch.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-dispatch.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=partner-integration.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-integration.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-integration.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=partner-provider.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-provider.dto.js","sourceRoot":"","sources":["../../../../../src/modules/partner/interfaces/partner-provider.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { IncidentPartnerRoutingStatus, PartnerCoverageMatchType, PartnerDispatchStatus, PartnerIntegrationStatus, PartnerRoutingMode, PartnerServiceCapability, } from '../enums/partner-enums';
2
+ /**
3
+ * Human labels for the partner enums.
4
+ *
5
+ * Kept in the shared package rather than in the admin app so every screen that
6
+ * shows a dispatch - the list, the detail drawer, the incident view - names the
7
+ * same state the same way. An operator reading "Waiting for confirmation" in one
8
+ * place and "Pending approval" in another would reasonably assume they were
9
+ * different things.
10
+ */
11
+ export const PARTNER_DISPATCH_STATUS_LABELS = {
12
+ [PartnerDispatchStatus.PENDING_APPROVAL]: 'Waiting for confirmation',
13
+ [PartnerDispatchStatus.QUEUED]: 'Queued',
14
+ [PartnerDispatchStatus.SENDING]: 'Sending',
15
+ [PartnerDispatchStatus.SENT]: 'Sent to partner',
16
+ [PartnerDispatchStatus.ACKNOWLEDGED]: 'Acknowledged by partner',
17
+ [PartnerDispatchStatus.FAILED]: 'Failed',
18
+ [PartnerDispatchStatus.REJECTED]: 'Declined',
19
+ [PartnerDispatchStatus.CANCELLED]: 'Withdrawn',
20
+ [PartnerDispatchStatus.EXPIRED]: 'Expired',
21
+ };
22
+ export const INCIDENT_PARTNER_ROUTING_STATUS_LABELS = {
23
+ [IncidentPartnerRoutingStatus.NOT_ROUTED]: 'No partner',
24
+ [IncidentPartnerRoutingStatus.PENDING]: 'Contacting partner',
25
+ [IncidentPartnerRoutingStatus.AWAITING_APPROVAL]: 'Waiting for confirmation',
26
+ [IncidentPartnerRoutingStatus.ROUTED]: 'Partner notified',
27
+ [IncidentPartnerRoutingStatus.PARTIALLY_ROUTED]: 'Partly notified',
28
+ [IncidentPartnerRoutingStatus.FAILED]: 'Partner not reached',
29
+ [IncidentPartnerRoutingStatus.DECLINED]: 'Declined',
30
+ };
31
+ export const PARTNER_ROUTING_MODE_LABELS = {
32
+ [PartnerRoutingMode.AUTO]: 'Automatic',
33
+ [PartnerRoutingMode.MANUAL]: 'Needs confirmation',
34
+ [PartnerRoutingMode.DISABLED]: 'Routing off',
35
+ };
36
+ export const PARTNER_INTEGRATION_STATUS_LABELS = {
37
+ [PartnerIntegrationStatus.UNKNOWN]: 'Not tested',
38
+ [PartnerIntegrationStatus.HEALTHY]: 'Healthy',
39
+ [PartnerIntegrationStatus.DEGRADED]: 'Degraded',
40
+ [PartnerIntegrationStatus.UNREACHABLE]: 'Unreachable',
41
+ };
42
+ export const PARTNER_CAPABILITY_LABELS = {
43
+ [PartnerServiceCapability.AMBULANCE]: 'Ambulance',
44
+ [PartnerServiceCapability.MEDICAL_EVACUATION]: 'Medical evacuation',
45
+ [PartnerServiceCapability.FIRE_RESPONSE]: 'Fire response',
46
+ [PartnerServiceCapability.SECURITY_RESPONSE]: 'Security response',
47
+ [PartnerServiceCapability.ROADSIDE_ASSISTANCE]: 'Roadside assistance',
48
+ [PartnerServiceCapability.TOWING]: 'Towing',
49
+ [PartnerServiceCapability.OTHER]: 'Other',
50
+ };
51
+ export const PARTNER_COVERAGE_MATCH_TYPE_LABELS = {
52
+ [PartnerCoverageMatchType.ALL]: 'Every incident',
53
+ [PartnerCoverageMatchType.INCIDENT_TYPE]: 'Incident type',
54
+ [PartnerCoverageMatchType.INCIDENT_CATEGORY]: 'Incident category',
55
+ [PartnerCoverageMatchType.EMERGENCY_TYPE]: 'Emergency classification',
56
+ };
57
+ /**
58
+ * Chip family for a dispatch status, matching the admin's existing chip
59
+ * vocabulary: `success` for anything the partner has, `warn` for anything still
60
+ * needing a human, `danger` for a failure, `neutral` for a settled non-event.
61
+ */
62
+ export function partnerDispatchStatusTone(status) {
63
+ switch (status) {
64
+ case PartnerDispatchStatus.SENT:
65
+ case PartnerDispatchStatus.ACKNOWLEDGED:
66
+ return 'success';
67
+ case PartnerDispatchStatus.PENDING_APPROVAL:
68
+ case PartnerDispatchStatus.QUEUED:
69
+ case PartnerDispatchStatus.SENDING:
70
+ return 'warn';
71
+ case PartnerDispatchStatus.FAILED:
72
+ case PartnerDispatchStatus.EXPIRED:
73
+ return 'danger';
74
+ default:
75
+ return 'neutral';
76
+ }
77
+ }
78
+ /** The same tone mapping for the incident-level rolled-up status. */
79
+ export function incidentPartnerRoutingTone(status) {
80
+ switch (status) {
81
+ case IncidentPartnerRoutingStatus.ROUTED:
82
+ return 'success';
83
+ case IncidentPartnerRoutingStatus.PENDING:
84
+ case IncidentPartnerRoutingStatus.AWAITING_APPROVAL:
85
+ case IncidentPartnerRoutingStatus.PARTIALLY_ROUTED:
86
+ return 'warn';
87
+ case IncidentPartnerRoutingStatus.FAILED:
88
+ return 'danger';
89
+ default:
90
+ return 'neutral';
91
+ }
92
+ }
93
+ /**
94
+ * Whether an operator can act on a dispatch, so a table can enable or hide its
95
+ * buttons without duplicating the backend's transition rules.
96
+ *
97
+ * Withdrawing is deliberately impossible once the partner has the emergency:
98
+ * standing an ambulance down is a phone call to the partner, not a button here.
99
+ */
100
+ export function partnerDispatchActions(status) {
101
+ const pending = status === PartnerDispatchStatus.PENDING_APPROVAL;
102
+ return {
103
+ canApprove: pending,
104
+ canReject: pending,
105
+ canCancel: pending || status === PartnerDispatchStatus.QUEUED,
106
+ canResend: status === PartnerDispatchStatus.FAILED ||
107
+ status === PartnerDispatchStatus.EXPIRED,
108
+ };
109
+ }
110
+ //# sourceMappingURL=partner-display.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partner-display.util.js","sourceRoot":"","sources":["../../../../../src/modules/partner/utils/partner-display.util.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,6 @@ export * from './modules/country/index';
19
19
  export * from './modules/tracking/index';
20
20
  export * from './modules/entitlement/index';
21
21
  export * from './modules/alert-dispatch/index';
22
+ export * from './modules/partner/index';
22
23
  export * from './modules/common/interfaces/server-message';
23
24
  export * from './modules/common/interfaces/pagination';
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Frontend mirrors of the partner enums in grm-shared-library.
3
+ *
4
+ * Kept in ONE file rather than one per enum: the admin's partner screens import
5
+ * most of them together, and the set only means anything as a whole. The values
6
+ * are byte-identical to the backend's, because they travel over the wire as
7
+ * strings and any drift would show up as a silently unstyled chip rather than a
8
+ * compile error.
9
+ */
10
+ /** The third-party partner behind a partnership. */
11
+ export declare enum PartnerProviderCode {
12
+ RESCUE_CO = "RESCUE_CO",
13
+ AAR = "AAR",
14
+ ST_JOHN = "ST_JOHN",
15
+ GENERIC_REST = "GENERIC_REST"
16
+ }
17
+ /** A class of emergency service a partner can be asked to provide. */
18
+ export declare enum PartnerServiceCapability {
19
+ AMBULANCE = "AMBULANCE",
20
+ MEDICAL_EVACUATION = "MEDICAL_EVACUATION",
21
+ FIRE_RESPONSE = "FIRE_RESPONSE",
22
+ SECURITY_RESPONSE = "SECURITY_RESPONSE",
23
+ ROADSIDE_ASSISTANCE = "ROADSIDE_ASSISTANCE",
24
+ TOWING = "TOWING",
25
+ OTHER = "OTHER"
26
+ }
27
+ /** How an incident a partnership covers reaches the partner. */
28
+ export declare enum PartnerRoutingMode {
29
+ /** Sent as soon as the incident is created. */
30
+ AUTO = "AUTO",
31
+ /** Held until an operator confirms it. */
32
+ MANUAL = "MANUAL",
33
+ /** Configuration kept, nothing routed. */
34
+ DISABLED = "DISABLED"
35
+ }
36
+ /** Which of a partner's environments a partnership points at. */
37
+ export declare enum PartnerIntegrationEnvironment {
38
+ SANDBOX = "SANDBOX",
39
+ PRODUCTION = "PRODUCTION"
40
+ }
41
+ /** Last known health of a partnership's connection. Advisory only. */
42
+ export declare enum PartnerIntegrationStatus {
43
+ UNKNOWN = "UNKNOWN",
44
+ HEALTHY = "HEALTHY",
45
+ DEGRADED = "DEGRADED",
46
+ UNREACHABLE = "UNREACHABLE"
47
+ }
48
+ /** What a coverage rule matches an incident on. */
49
+ export declare enum PartnerCoverageMatchType {
50
+ ALL = "ALL",
51
+ INCIDENT_TYPE = "INCIDENT_TYPE",
52
+ INCIDENT_CATEGORY = "INCIDENT_CATEGORY",
53
+ EMERGENCY_TYPE = "EMERGENCY_TYPE"
54
+ }
55
+ /** Lifecycle of one incident's routing to one partner. */
56
+ export declare enum PartnerDispatchStatus {
57
+ PENDING_APPROVAL = "PENDING_APPROVAL",
58
+ QUEUED = "QUEUED",
59
+ SENDING = "SENDING",
60
+ SENT = "SENT",
61
+ ACKNOWLEDGED = "ACKNOWLEDGED",
62
+ FAILED = "FAILED",
63
+ REJECTED = "REJECTED",
64
+ CANCELLED = "CANCELLED",
65
+ EXPIRED = "EXPIRED"
66
+ }
67
+ /** Why a dispatch did not reach its partner. */
68
+ export declare enum PartnerDispatchFailureReason {
69
+ INVALID_PAYLOAD = "INVALID_PAYLOAD",
70
+ MISSING_REQUIRED_FIELD = "MISSING_REQUIRED_FIELD",
71
+ AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED",
72
+ FEATURE_NOT_ENABLED = "FEATURE_NOT_ENABLED",
73
+ PROVIDER_REJECTED = "PROVIDER_REJECTED",
74
+ ADAPTER_NOT_SUPPORTED = "ADAPTER_NOT_SUPPORTED",
75
+ INTEGRATION_DISABLED = "INTEGRATION_DISABLED",
76
+ CREDENTIAL_UNAVAILABLE = "CREDENTIAL_UNAVAILABLE",
77
+ RATE_LIMITED = "RATE_LIMITED",
78
+ PROVIDER_UNAVAILABLE = "PROVIDER_UNAVAILABLE",
79
+ TIMEOUT = "TIMEOUT",
80
+ MAX_ATTEMPTS_EXCEEDED = "MAX_ATTEMPTS_EXCEEDED",
81
+ UNKNOWN = "UNKNOWN"
82
+ }
83
+ /** How the location attached to a dispatch was obtained. */
84
+ export declare enum PartnerLocationProvider {
85
+ GPS = "GPS",
86
+ NETWORK = "NETWORK",
87
+ FUSED = "FUSED"
88
+ }
89
+ /** The outbound partner call an attempt record describes. */
90
+ export declare enum PartnerAdapterOperation {
91
+ AUTHENTICATE = "AUTHENTICATE",
92
+ HEALTH_CHECK = "HEALTH_CHECK",
93
+ DISPATCH = "DISPATCH"
94
+ }
95
+ /** The incident-side summary of third-party routing, stored on the incident row. */
96
+ export declare enum IncidentPartnerRoutingStatus {
97
+ NOT_ROUTED = "NOT_ROUTED",
98
+ PENDING = "PENDING",
99
+ AWAITING_APPROVAL = "AWAITING_APPROVAL",
100
+ ROUTED = "ROUTED",
101
+ PARTIALLY_ROUTED = "PARTIALLY_ROUTED",
102
+ FAILED = "FAILED",
103
+ DECLINED = "DECLINED"
104
+ }
105
+ /** List filter for the admin's partner-routing incident views. */
106
+ export declare enum PartnerDispatchScope {
107
+ ALL = "ALL",
108
+ ROUTED = "ROUTED",
109
+ AWAITING_APPROVAL = "AWAITING_APPROVAL",
110
+ FAILED = "FAILED",
111
+ NOT_ROUTED = "NOT_ROUTED"
112
+ }
@@ -0,0 +1,7 @@
1
+ export * from './enums/partner-enums';
2
+ export * from './interfaces/partner-provider.dto';
3
+ export * from './interfaces/partner-integration.dto';
4
+ export * from './interfaces/partner-coverage-rule.dto';
5
+ export * from './interfaces/partner-dispatch.dto';
6
+ export * from './interfaces/incident-partner-routing.dto';
7
+ export * from './utils/partner-display.util';
@@ -0,0 +1,30 @@
1
+ import { IncidentPartnerRoutingStatus, PartnerDispatchStatus, PartnerProviderCode, PartnerRoutingMode, PartnerServiceCapability } from '../enums/partner-enums';
2
+ /** One partner's leg of an incident's routing, as stored on the incident. */
3
+ export interface IncidentPartnerRoutingEntryDto {
4
+ integrationId: number;
5
+ providerCode: PartnerProviderCode;
6
+ providerName?: string | null;
7
+ capability: PartnerServiceCapability;
8
+ routingMode: PartnerRoutingMode;
9
+ dispatchId: number;
10
+ dispatchReference: string;
11
+ status: PartnerDispatchStatus;
12
+ partnerReference?: string | null;
13
+ updatedAt: string;
14
+ }
15
+ /**
16
+ * The third-party routing summary carried on an incident.
17
+ *
18
+ * A read model owned by clarion-partner-services, so the incident list and
19
+ * detail can answer "was an ambulance called for this?" without a second
20
+ * request. The dispatches themselves live behind
21
+ * `GET /partner-services/dispatches/incidents/:incidentId`.
22
+ */
23
+ export interface IncidentPartnerRoutingSnapshotDto {
24
+ status: IncidentPartnerRoutingStatus;
25
+ evaluatedAt: string;
26
+ consideredIntegrationCount: number;
27
+ entries: IncidentPartnerRoutingEntryDto[];
28
+ /** True when produced without a live answer from clarion-partner-services. */
29
+ degraded?: boolean;
30
+ }
@@ -0,0 +1,42 @@
1
+ import { IncidentEmergencyType } from '../../incident/enums/incident-emergency-type.enum';
2
+ import { PartnerCoverageMatchType, PartnerRoutingMode, PartnerServiceCapability } from '../enums/partner-enums';
3
+ /**
4
+ * One "this kind of incident goes to this partner" statement.
5
+ *
6
+ * The match key must agree with `matchType`: INCIDENT_TYPE needs
7
+ * `incidentTypeId`, INCIDENT_CATEGORY needs `incidentCategoryId`,
8
+ * EMERGENCY_TYPE needs `emergencyType`, ALL needs none. The backend enforces
9
+ * that and blanks the other two, so a form that switches match type must clear
10
+ * the previous key rather than leaving it in the payload.
11
+ */
12
+ export interface PartnerCoverageRuleDto {
13
+ id: number;
14
+ integrationId: number;
15
+ organizationId: number;
16
+ matchType: PartnerCoverageMatchType;
17
+ incidentTypeId: number | null;
18
+ incidentCategoryId: number | null;
19
+ emergencyType: IncidentEmergencyType | null;
20
+ capability: PartnerServiceCapability;
21
+ routingModeOverride: PartnerRoutingMode | null;
22
+ priority: number;
23
+ enabled: boolean;
24
+ notes: string | null;
25
+ createdBy: number | null;
26
+ updatedBy: number | null;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ }
30
+ export interface CreatePartnerCoverageRuleDto {
31
+ matchType: PartnerCoverageMatchType;
32
+ incidentTypeId?: number;
33
+ incidentCategoryId?: number;
34
+ emergencyType?: IncidentEmergencyType;
35
+ /** Must be a capability the partnership declares. */
36
+ capability: PartnerServiceCapability;
37
+ routingModeOverride?: PartnerRoutingMode;
38
+ priority?: number;
39
+ enabled?: boolean;
40
+ notes?: string;
41
+ }
42
+ export type UpdatePartnerCoverageRuleDto = Partial<CreatePartnerCoverageRuleDto>;
@@ -0,0 +1,126 @@
1
+ import { CountryCode } from '../../country/enums/country-code.enum';
2
+ import { PartnerAdapterOperation, PartnerDispatchFailureReason, PartnerDispatchStatus, PartnerLocationProvider, PartnerProviderCode, PartnerRoutingMode, PartnerServiceCapability } from '../enums/partner-enums';
3
+ /** Where the emergency is, as sent to the partner. */
4
+ export interface PartnerDispatchLocationDto {
5
+ latitude: number;
6
+ longitude: number;
7
+ measuredAt: string;
8
+ provider: PartnerLocationProvider;
9
+ address?: string | null;
10
+ }
11
+ /** Who the partner should call about the person in trouble. */
12
+ export interface PartnerEmergencyContactDto {
13
+ emergencyContactName: string;
14
+ /** E.164 numbers, primary guardian first. */
15
+ phoneNumbers: string[];
16
+ relationship?: string;
17
+ }
18
+ /** The incident facts a dispatch was built from, frozen at routing time. */
19
+ export interface PartnerDispatchIncidentSnapshotDto {
20
+ incidentId: number;
21
+ organizationId: number;
22
+ controlCentreId?: number | null;
23
+ incidentTypeId?: number | null;
24
+ incidentTypeName?: string | null;
25
+ incidentCategoryId?: number | null;
26
+ incidentCategoryName?: string | null;
27
+ emergencyType?: string | null;
28
+ incidentClass?: string | null;
29
+ channel?: string | null;
30
+ priority?: string | null;
31
+ description?: string | null;
32
+ createdAt: string;
33
+ reporterName?: string | null;
34
+ reporterPhoneNumber?: string | null;
35
+ reporterUserId?: number | null;
36
+ location?: PartnerDispatchLocationDto | null;
37
+ address?: string | null;
38
+ }
39
+ /** One outbound call made on a dispatch's behalf, success or failure. */
40
+ export interface PartnerDispatchAttemptDto {
41
+ id: number;
42
+ dispatchId: number;
43
+ attemptNumber: number;
44
+ operation: PartnerAdapterOperation;
45
+ /** Query string already masked by the backend. */
46
+ requestUrl: string;
47
+ httpStatus: number | null;
48
+ success: boolean;
49
+ failureReason: PartnerDispatchFailureReason | null;
50
+ errorCode: string | null;
51
+ errorMessage: string | null;
52
+ durationMs: number;
53
+ responseSnapshot: Record<string, unknown> | null;
54
+ createdAt: string;
55
+ }
56
+ /**
57
+ * One incident's routing to one partnership.
58
+ *
59
+ * `requestPayload` and `responsePayload` are sanitized by the backend before
60
+ * they are stored, so they are safe to render verbatim in a support view.
61
+ */
62
+ export interface PartnerDispatchDto {
63
+ id: number;
64
+ /** Stable reference, safe to quote to the partner or in a support ticket. */
65
+ dispatchReference: string;
66
+ organizationId: number;
67
+ controlCentreId: number | null;
68
+ integrationId: number;
69
+ providerCode: PartnerProviderCode;
70
+ capability: PartnerServiceCapability;
71
+ coverageRuleId: number | null;
72
+ incidentId: number;
73
+ incidentTypeId: number | null;
74
+ incidentCategoryId: number | null;
75
+ routingMode: PartnerRoutingMode;
76
+ status: PartnerDispatchStatus;
77
+ countryCode: CountryCode;
78
+ attemptCount: number;
79
+ maxAttempts: number;
80
+ nextAttemptAt: string | null;
81
+ approvalExpiresAt: string | null;
82
+ approvedByUserId: number | null;
83
+ approvedAt: string | null;
84
+ rejectedByUserId: number | null;
85
+ rejectedAt: string | null;
86
+ cancelledByUserId: number | null;
87
+ cancelledAt: string | null;
88
+ decisionReason: string | null;
89
+ /** The partner's own identifier, e.g. a Rescue.co SOS request id. */
90
+ partnerReference: string | null;
91
+ partnerNumber: string | null;
92
+ partnerStatus: string | null;
93
+ requestPayload: Record<string, unknown> | null;
94
+ responsePayload: Record<string, unknown> | null;
95
+ failureReason: PartnerDispatchFailureReason | null;
96
+ lastErrorCode: string | null;
97
+ lastErrorMessage: string | null;
98
+ incidentSnapshot: PartnerDispatchIncidentSnapshotDto;
99
+ emergencyContact: PartnerEmergencyContactDto | null;
100
+ sentAt: string | null;
101
+ completedAt: string | null;
102
+ createdAt: string;
103
+ updatedAt: string;
104
+ /** Present on the detail endpoint. */
105
+ attempts?: PartnerDispatchAttemptDto[];
106
+ }
107
+ /** Body for approve / reject / cancel. The acting user comes from the session. */
108
+ export interface PartnerDispatchDecisionDto {
109
+ reason?: string;
110
+ }
111
+ /** List filters for the dispatches table. */
112
+ export interface PartnerDispatchQueryParams {
113
+ page?: number;
114
+ limit?: number;
115
+ sortBy?: string;
116
+ sortOrder?: 'ASC' | 'DESC';
117
+ /** Super-Admin only. */
118
+ organizationId?: number;
119
+ incidentId?: number;
120
+ integrationId?: number;
121
+ status?: PartnerDispatchStatus;
122
+ providerCode?: PartnerProviderCode;
123
+ capability?: PartnerServiceCapability;
124
+ routingMode?: PartnerRoutingMode;
125
+ countryCode?: CountryCode;
126
+ }
@@ -0,0 +1,86 @@
1
+ import { CountryCode } from '../../country/enums/country-code.enum';
2
+ import { PartnerIntegrationEnvironment, PartnerIntegrationStatus, PartnerProviderCode, PartnerRoutingMode, PartnerServiceCapability } from '../enums/partner-enums';
3
+ import { PartnerCoverageRuleDto } from './partner-coverage-rule.dto';
4
+ /**
5
+ * Frontend view of an organization's partnership with a third-party service
6
+ * partner.
7
+ *
8
+ * NEVER carries the credential value, and never even the reference: the backend
9
+ * returns `credentialConfigured` instead, so the admin can show "configured" or
10
+ * "not configured" without any part of the secret reaching the browser.
11
+ */
12
+ export interface PartnerIntegrationDto {
13
+ id: number;
14
+ organizationId: number;
15
+ controlCentreId: number | null;
16
+ providerCode: PartnerProviderCode;
17
+ name: string;
18
+ environment: PartnerIntegrationEnvironment;
19
+ baseUrl: string;
20
+ credentialConfigured: boolean;
21
+ configuration: Record<string, unknown>;
22
+ capabilities: PartnerServiceCapability[];
23
+ routingMode: PartnerRoutingMode;
24
+ approvalWindowMinutes: number | null;
25
+ enabled: boolean;
26
+ priority: number;
27
+ countryCode: CountryCode;
28
+ status: PartnerIntegrationStatus;
29
+ partnerContactName: string | null;
30
+ partnerContactPhone: string | null;
31
+ partnerContactEmail: string | null;
32
+ lastHealthCheckAt: string | null;
33
+ lastSuccessAt: string | null;
34
+ lastErrorAt: string | null;
35
+ lastErrorCode: string | null;
36
+ lastErrorMessage: string | null;
37
+ createdBy: number | null;
38
+ updatedBy: number | null;
39
+ createdAt: string;
40
+ updatedAt: string;
41
+ /** Present on the detail endpoint. */
42
+ coverageRules?: PartnerCoverageRuleDto[];
43
+ }
44
+ export interface CreatePartnerIntegrationDto {
45
+ /** Super-Admin only: which tenant the partnership belongs to. */
46
+ organizationId?: number;
47
+ controlCentreId?: number;
48
+ providerCode: PartnerProviderCode;
49
+ name: string;
50
+ environment?: PartnerIntegrationEnvironment;
51
+ /** Defaults to the adapter's base URL for the chosen environment. */
52
+ baseUrl?: string;
53
+ /** A secret NAME/reference - never the credential value. */
54
+ credentialReference: string;
55
+ configuration?: Record<string, unknown>;
56
+ capabilities: PartnerServiceCapability[];
57
+ /** Defaults to MANUAL, so a new partnership never dispatches unattended. */
58
+ routingMode?: PartnerRoutingMode;
59
+ approvalWindowMinutes?: number;
60
+ enabled?: boolean;
61
+ priority?: number;
62
+ countryCode?: CountryCode;
63
+ partnerContactName?: string;
64
+ partnerContactPhone?: string;
65
+ partnerContactEmail?: string;
66
+ }
67
+ /**
68
+ * `providerCode` and `organizationId` are deliberately absent: changing either
69
+ * would repoint an existing dispatch history at a different partner or tenant,
70
+ * so a move is a delete and a create.
71
+ */
72
+ export type UpdatePartnerIntegrationDto = Partial<Omit<CreatePartnerIntegrationDto, 'providerCode' | 'organizationId'>>;
73
+ /** List filters for the partnerships table. */
74
+ export interface PartnerIntegrationQueryParams {
75
+ page?: number;
76
+ limit?: number;
77
+ sortBy?: string;
78
+ sortOrder?: 'ASC' | 'DESC';
79
+ /** Super-Admin only. */
80
+ organizationId?: number;
81
+ providerCode?: PartnerProviderCode;
82
+ environment?: PartnerIntegrationEnvironment;
83
+ routingMode?: PartnerRoutingMode;
84
+ countryCode?: CountryCode;
85
+ enabled?: boolean;
86
+ }
@@ -0,0 +1,53 @@
1
+ import { PartnerIntegrationEnvironment, PartnerProviderCode, PartnerServiceCapability } from '../enums/partner-enums';
2
+ /** A credential a partnership must supply, described by the backend adapter. */
3
+ export interface PartnerProviderCredentialFieldDto {
4
+ key: string;
5
+ label: string;
6
+ description?: string;
7
+ required: boolean;
8
+ /** Always true: a credential is supplied as a secret REFERENCE, never a value. */
9
+ secret: boolean;
10
+ }
11
+ /** A non-secret setting a partnership must (or may) supply for a provider. */
12
+ export interface PartnerProviderConfigFieldDto {
13
+ key: string;
14
+ label: string;
15
+ description?: string;
16
+ required: boolean;
17
+ type: 'string' | 'number' | 'boolean' | 'enum';
18
+ allowedValues?: string[];
19
+ defaultValue?: string | number | boolean;
20
+ maxLength?: number;
21
+ }
22
+ /**
23
+ * What one partner adapter can do, served by `GET /partner-services/providers`.
24
+ *
25
+ * The "add a partner" form is BUILT from these descriptors rather than
26
+ * hard-coded, so the fields the admin asks for can never drift from what the
27
+ * backend adapter actually needs. `available: false` marks a reserved partner
28
+ * that has no adapter yet - show it, but do not let anyone configure it.
29
+ */
30
+ export interface PartnerProviderDescriptorDto {
31
+ providerCode: PartnerProviderCode;
32
+ name: string;
33
+ description: string;
34
+ capabilities: PartnerServiceCapability[];
35
+ defaultBaseUrls: Partial<Record<PartnerIntegrationEnvironment, string>>;
36
+ configFields: PartnerProviderConfigFieldDto[];
37
+ credentialFields: PartnerProviderCredentialFieldDto[];
38
+ supportsHealthCheck: boolean;
39
+ available: boolean;
40
+ }
41
+ /** Result of the admin's "test connection" button. Never creates an emergency. */
42
+ export interface PartnerConnectionTestResultDto {
43
+ integrationId: number;
44
+ status: string;
45
+ success: boolean;
46
+ /** True when the stored credential was accepted, even if health then failed. */
47
+ authenticated: boolean;
48
+ partnerServiceVersion?: string | null;
49
+ latencyMs: number;
50
+ checkedAt: string;
51
+ errorCode?: string | null;
52
+ errorMessage?: string | null;
53
+ }
@@ -0,0 +1,37 @@
1
+ import { IncidentPartnerRoutingStatus, PartnerCoverageMatchType, PartnerDispatchStatus, PartnerIntegrationStatus, PartnerRoutingMode, PartnerServiceCapability } from '../enums/partner-enums';
2
+ /**
3
+ * Human labels for the partner enums.
4
+ *
5
+ * Kept in the shared package rather than in the admin app so every screen that
6
+ * shows a dispatch - the list, the detail drawer, the incident view - names the
7
+ * same state the same way. An operator reading "Waiting for confirmation" in one
8
+ * place and "Pending approval" in another would reasonably assume they were
9
+ * different things.
10
+ */
11
+ export declare const PARTNER_DISPATCH_STATUS_LABELS: Readonly<Record<PartnerDispatchStatus, string>>;
12
+ export declare const INCIDENT_PARTNER_ROUTING_STATUS_LABELS: Readonly<Record<IncidentPartnerRoutingStatus, string>>;
13
+ export declare const PARTNER_ROUTING_MODE_LABELS: Readonly<Record<PartnerRoutingMode, string>>;
14
+ export declare const PARTNER_INTEGRATION_STATUS_LABELS: Readonly<Record<PartnerIntegrationStatus, string>>;
15
+ export declare const PARTNER_CAPABILITY_LABELS: Readonly<Record<PartnerServiceCapability, string>>;
16
+ export declare const PARTNER_COVERAGE_MATCH_TYPE_LABELS: Readonly<Record<PartnerCoverageMatchType, string>>;
17
+ /**
18
+ * Chip family for a dispatch status, matching the admin's existing chip
19
+ * vocabulary: `success` for anything the partner has, `warn` for anything still
20
+ * needing a human, `danger` for a failure, `neutral` for a settled non-event.
21
+ */
22
+ export declare function partnerDispatchStatusTone(status: PartnerDispatchStatus): 'success' | 'warn' | 'danger' | 'neutral';
23
+ /** The same tone mapping for the incident-level rolled-up status. */
24
+ export declare function incidentPartnerRoutingTone(status: IncidentPartnerRoutingStatus): 'success' | 'warn' | 'danger' | 'neutral';
25
+ /**
26
+ * Whether an operator can act on a dispatch, so a table can enable or hide its
27
+ * buttons without duplicating the backend's transition rules.
28
+ *
29
+ * Withdrawing is deliberately impossible once the partner has the emergency:
30
+ * standing an ambulance down is a phone call to the partner, not a button here.
31
+ */
32
+ export declare function partnerDispatchActions(status: PartnerDispatchStatus): {
33
+ canApprove: boolean;
34
+ canReject: boolean;
35
+ canCancel: boolean;
36
+ canResend: boolean;
37
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarion-shared-types",
3
- "version": "1.0.85",
3
+ "version": "1.0.86",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",