@awell-health/awell-extensions 1.0.165 → 1.0.166

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.d.ts +4 -0
  2. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.js +74 -0
  3. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.js.map +1 -0
  4. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.test.d.ts +1 -0
  5. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.test.js +57 -0
  6. package/dist/extensions/healthie/actions/checkPatientTag/checkPatientTag.test.js.map +1 -0
  7. package/dist/extensions/healthie/actions/checkPatientTag/config/dataPoints.d.ts +6 -0
  8. package/dist/extensions/healthie/actions/checkPatientTag/config/dataPoints.js +10 -0
  9. package/dist/extensions/healthie/actions/checkPatientTag/config/dataPoints.js.map +1 -0
  10. package/dist/extensions/healthie/actions/checkPatientTag/config/fields.d.ts +15 -0
  11. package/dist/extensions/healthie/actions/checkPatientTag/config/fields.js +19 -0
  12. package/dist/extensions/healthie/actions/checkPatientTag/config/fields.js.map +1 -0
  13. package/dist/extensions/healthie/actions/checkPatientTag/config/index.d.ts +2 -0
  14. package/dist/extensions/healthie/actions/checkPatientTag/config/index.js +8 -0
  15. package/dist/extensions/healthie/actions/checkPatientTag/config/index.js.map +1 -0
  16. package/dist/extensions/healthie/actions/checkPatientTag/index.d.ts +1 -0
  17. package/dist/extensions/healthie/actions/checkPatientTag/index.js +18 -0
  18. package/dist/extensions/healthie/actions/checkPatientTag/index.js.map +1 -0
  19. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.d.ts +4 -0
  20. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.js +77 -0
  21. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.js.map +1 -0
  22. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.test.d.ts +1 -0
  23. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.test.js +57 -0
  24. package/dist/extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.test.js.map +1 -0
  25. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/dataPoints.d.ts +6 -0
  26. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/dataPoints.js +10 -0
  27. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/dataPoints.js.map +1 -0
  28. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/fields.d.ts +16 -0
  29. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/fields.js +20 -0
  30. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/fields.js.map +1 -0
  31. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/index.d.ts +2 -0
  32. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/index.js +8 -0
  33. package/dist/extensions/healthie/actions/checkScheduledAppointments/config/index.js.map +1 -0
  34. package/dist/extensions/healthie/actions/checkScheduledAppointments/index.d.ts +1 -0
  35. package/dist/extensions/healthie/actions/checkScheduledAppointments/index.js +18 -0
  36. package/dist/extensions/healthie/actions/checkScheduledAppointments/index.js.map +1 -0
  37. package/dist/extensions/healthie/actions/index.d.ts +59 -0
  38. package/dist/extensions/healthie/actions/index.js +4 -0
  39. package/dist/extensions/healthie/actions/index.js.map +1 -1
  40. package/dist/extensions/healthie/gql/sdk.d.ts +1502 -307
  41. package/dist/extensions/healthie/gql/sdk.js +527 -3
  42. package/dist/extensions/healthie/gql/sdk.js.map +1 -1
  43. package/dist/extensions/markdown.json +2 -2
  44. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import { type Action } from '@awell-health/extensions-core';
2
+ import { type settings } from '../../settings';
3
+ import { dataPoints, fields } from './config';
4
+ export declare const checkPatientTag: Action<typeof fields, typeof settings, keyof typeof dataPoints>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkPatientTag = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ const errors_1 = require("../../errors");
6
+ const sdk_1 = require("../../gql/sdk");
7
+ const graphqlClient_1 = require("../../graphqlClient");
8
+ const config_1 = require("./config");
9
+ exports.checkPatientTag = {
10
+ key: 'checkPatientTag',
11
+ category: extensions_core_1.Category.EHR_INTEGRATIONS,
12
+ title: 'Check patient tag',
13
+ description: 'Check if a patient has the given tag in their active tags in Healthie.',
14
+ fields: config_1.fields,
15
+ dataPoints: config_1.dataPoints,
16
+ previewable: true,
17
+ onActivityCreated: async (payload, onComplete, onError) => {
18
+ var _a, _b;
19
+ const { fields, settings } = payload;
20
+ const { id, patientId } = fields;
21
+ try {
22
+ const client = (0, graphqlClient_1.initialiseClient)(settings);
23
+ if (client !== undefined) {
24
+ const sdk = (0, sdk_1.getSdk)(client);
25
+ const { data } = await sdk.getUser({ id: patientId });
26
+ const activeTags = (_b = (_a = data.user) === null || _a === void 0 ? void 0 : _a.active_tags) !== null && _b !== void 0 ? _b : [];
27
+ const hasTag = activeTags.some((tag) => tag.id === id);
28
+ await onComplete({
29
+ data_points: {
30
+ hasTag: String(hasTag),
31
+ },
32
+ });
33
+ }
34
+ else {
35
+ await onError({
36
+ events: [
37
+ {
38
+ date: new Date().toISOString(),
39
+ text: { en: 'API client requires an API url and API key' },
40
+ error: {
41
+ category: 'MISSING_SETTINGS',
42
+ message: 'Missing api url or api key',
43
+ },
44
+ },
45
+ ],
46
+ });
47
+ }
48
+ }
49
+ catch (err) {
50
+ if (err instanceof errors_1.HealthieError) {
51
+ const errors = (0, errors_1.mapHealthieToActivityError)(err.errors);
52
+ await onError({
53
+ events: errors,
54
+ });
55
+ }
56
+ else {
57
+ const error = err;
58
+ await onError({
59
+ events: [
60
+ {
61
+ date: new Date().toISOString(),
62
+ text: { en: 'Healthie API reported an error' },
63
+ error: {
64
+ category: 'SERVER_ERROR',
65
+ message: error.message,
66
+ },
67
+ },
68
+ ],
69
+ });
70
+ }
71
+ }
72
+ },
73
+ };
74
+ //# sourceMappingURL=checkPatientTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkPatientTag.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkPatientTag/checkPatientTag.ts"],"names":[],"mappings":";;;AACA,mEAAwD;AACxD,yCAAwE;AACxE,uCAAsC;AACtC,uDAAsD;AAEtD,qCAA6C;AAEhC,QAAA,eAAe,GAIxB;IACF,GAAG,EAAE,iBAAiB;IACtB,QAAQ,EAAE,0BAAQ,CAAC,gBAAgB;IACnC,KAAK,EAAE,mBAAmB;IAC1B,WAAW,EAAE,wEAAwE;IACrF,MAAM,EAAN,eAAM;IACN,UAAU,EAAV,mBAAU;IACV,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAiB,EAAE;;QACvE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QACpC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;QAChC,IAAI;YACF,MAAM,MAAM,GAAG,IAAA,gCAAgB,EAAC,QAAQ,CAAC,CAAA;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,GAAG,GAAG,IAAA,YAAM,EAAC,MAAM,CAAC,CAAA;gBAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;gBACrD,MAAM,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,mCAAI,EAAE,CAAA;gBAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;gBACtD,MAAM,UAAU,CAAC;oBACf,WAAW,EAAE;wBACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;qBACvB;iBACF,CAAC,CAAA;aACH;iBAAM;gBACL,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,4CAA4C,EAAE;4BAC1D,KAAK,EAAE;gCACL,QAAQ,EAAE,kBAAkB;gCAC5B,OAAO,EAAE,4BAA4B;6BACtC;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,sBAAa,EAAE;gBAChC,MAAM,MAAM,GAAG,IAAA,mCAA0B,EAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACrD,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE,MAAM;iBACf,CAAC,CAAA;aACH;iBAAM;gBACL,MAAM,KAAK,GAAG,GAAY,CAAA;gBAC1B,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,gCAAgC,EAAE;4BAC9C,KAAK,EAAE;gCACL,QAAQ,EAAE,cAAc;gCACxB,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;SACF;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tests_1 = require("../../../../src/tests");
4
+ const sdk_1 = require("../../gql/sdk");
5
+ const sdk_2 = require("../../gql/__mocks__/sdk");
6
+ const checkPatientTag_1 = require("../checkPatientTag");
7
+ jest.mock('../../gql/sdk');
8
+ jest.mock('../../graphqlClient');
9
+ describe('checkPatientTag action', () => {
10
+ const onComplete = jest.fn();
11
+ beforeAll(() => {
12
+ const mockSdk = sdk_1.getSdk;
13
+ mockSdk.mockImplementation(sdk_2.mockGetSdk);
14
+ });
15
+ beforeEach(() => {
16
+ jest.clearAllMocks();
17
+ });
18
+ describe('when tag is applied', () => {
19
+ it('should return call onComplete with hasTag data points set to true', async () => {
20
+ await checkPatientTag_1.checkPatientTag.onActivityCreated((0, tests_1.generateTestPayload)({
21
+ fields: {
22
+ id: 'tag-1',
23
+ patientId: 'patient-1',
24
+ },
25
+ settings: {
26
+ apiKey: 'apiKey',
27
+ apiUrl: 'test-url',
28
+ },
29
+ }), onComplete, jest.fn());
30
+ expect(onComplete).toHaveBeenCalledWith({
31
+ data_points: {
32
+ hasTag: 'true',
33
+ },
34
+ });
35
+ });
36
+ });
37
+ describe('when tag is not applied', () => {
38
+ it('should return call onComplete with hasTag data points set to false', async () => {
39
+ await checkPatientTag_1.checkPatientTag.onActivityCreated((0, tests_1.generateTestPayload)({
40
+ fields: {
41
+ id: 'no-tag',
42
+ patientId: 'patient-1',
43
+ },
44
+ settings: {
45
+ apiKey: 'apiKey',
46
+ apiUrl: 'test-url',
47
+ },
48
+ }), onComplete, jest.fn());
49
+ expect(onComplete).toHaveBeenCalledWith({
50
+ data_points: {
51
+ hasTag: 'false',
52
+ },
53
+ });
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=checkPatientTag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkPatientTag.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkPatientTag/checkPatientTag.test.ts"],"names":[],"mappings":";;AAAA,iDAA2D;AAC3D,uCAAsC;AACtC,iDAAoD;AACpD,wDAAoD;AAEpD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;AAEhC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,YAAmB,CAAA;QACnC,OAAO,CAAC,kBAAkB,CAAC,gBAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,iCAAe,CAAC,iBAAiB,CACrC,IAAA,2BAAmB,EAAC;gBAClB,MAAM,EAAE;oBACN,EAAE,EAAE,OAAO;oBACX,SAAS,EAAE,WAAW;iBACvB;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,EACF,UAAU,EACV,IAAI,CAAC,EAAE,EAAE,CACV,CAAA;YAED,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;gBACtC,WAAW,EAAE;oBACX,MAAM,EAAE,MAAM;iBACf;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,iCAAe,CAAC,iBAAiB,CACrC,IAAA,2BAAmB,EAAC;gBAClB,MAAM,EAAE;oBACN,EAAE,EAAE,QAAQ;oBACZ,SAAS,EAAE,WAAW;iBACvB;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,EACF,UAAU,EACV,IAAI,CAAC,EAAE,EAAE,CACV,CAAA;YAED,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;gBACtC,WAAW,EAAE;oBACX,MAAM,EAAE,OAAO;iBAChB;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const dataPoints: {
2
+ hasTag: {
3
+ key: string;
4
+ valueType: "boolean";
5
+ };
6
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = void 0;
4
+ exports.dataPoints = {
5
+ hasTag: {
6
+ key: 'hasTag',
7
+ valueType: 'boolean',
8
+ },
9
+ };
10
+ //# sourceMappingURL=dataPoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataPoints.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkPatientTag/config/dataPoints.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE;QACN,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,SAAS;KACrB;CAC4C,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { FieldType } from '@awell-health/extensions-core';
2
+ export declare const fields: {
3
+ id: {
4
+ id: string;
5
+ label: string;
6
+ description: string;
7
+ type: FieldType.STRING;
8
+ };
9
+ patientId: {
10
+ id: string;
11
+ label: string;
12
+ description: string;
13
+ type: FieldType.STRING;
14
+ };
15
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fields = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ exports.fields = {
6
+ id: {
7
+ id: 'id',
8
+ label: 'Tag ID',
9
+ description: 'The ID of the tag in Healthie.',
10
+ type: extensions_core_1.FieldType.STRING,
11
+ },
12
+ patientId: {
13
+ id: 'patientId',
14
+ label: 'Patient ID',
15
+ description: 'The ID of the patient in Healthie.',
16
+ type: extensions_core_1.FieldType.STRING,
17
+ },
18
+ };
19
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkPatientTag/config/fields.ts"],"names":[],"mappings":";;;AAAA,mEAAqE;AAExD,QAAA,MAAM,GAAG;IACpB,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,2BAAS,CAAC,MAAM;KACvB;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,2BAAS,CAAC,MAAM;KACvB;CAC8B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { fields } from './fields';
2
+ export { dataPoints } from './dataPoints';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = exports.fields = void 0;
4
+ var fields_1 = require("./fields");
5
+ Object.defineProperty(exports, "fields", { enumerable: true, get: function () { return fields_1.fields; } });
6
+ var dataPoints_1 = require("./dataPoints");
7
+ Object.defineProperty(exports, "dataPoints", { enumerable: true, get: function () { return dataPoints_1.dataPoints; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkPatientTag/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAiC;AAAxB,gGAAA,MAAM,OAAA;AACf,2CAAyC;AAAhC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1 @@
1
+ export * from './checkPatientTag';
@@ -0,0 +1,18 @@
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
+ __exportStar(require("./checkPatientTag"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkPatientTag/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC"}
@@ -0,0 +1,4 @@
1
+ import { type Action } from '@awell-health/extensions-core';
2
+ import { type settings } from '../../settings';
3
+ import { dataPoints, fields } from './config';
4
+ export declare const checkScheduledAppointments: Action<typeof fields, typeof settings, keyof typeof dataPoints>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkScheduledAppointments = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ const errors_1 = require("../../errors");
6
+ const sdk_1 = require("../../gql/sdk");
7
+ const graphqlClient_1 = require("../../graphqlClient");
8
+ const config_1 = require("./config");
9
+ exports.checkScheduledAppointments = {
10
+ key: 'checkScheduledAppointments',
11
+ category: extensions_core_1.Category.EHR_INTEGRATIONS,
12
+ title: 'Check scheduled appointments',
13
+ description: 'Check if the given patient has an active appointment scheduled for the given appointment type.',
14
+ fields: config_1.fields,
15
+ dataPoints: config_1.dataPoints,
16
+ previewable: true,
17
+ onActivityCreated: async (payload, onComplete, onError) => {
18
+ var _a;
19
+ const { fields, settings } = payload;
20
+ const { patientId, appointmentTypeId } = fields;
21
+ try {
22
+ const client = (0, graphqlClient_1.initialiseClient)(settings);
23
+ if (client !== undefined) {
24
+ const sdk = (0, sdk_1.getSdk)(client);
25
+ const { data } = await sdk.getScheduledAppointments({
26
+ user_id: patientId,
27
+ appointment_type_id: appointmentTypeId,
28
+ });
29
+ const appointments = (_a = data.appointments) !== null && _a !== void 0 ? _a : [];
30
+ const isScheduled = appointments.length > 0;
31
+ await onComplete({
32
+ data_points: {
33
+ isScheduled: String(isScheduled),
34
+ },
35
+ });
36
+ }
37
+ else {
38
+ await onError({
39
+ events: [
40
+ {
41
+ date: new Date().toISOString(),
42
+ text: { en: 'API client requires an API url and API key' },
43
+ error: {
44
+ category: 'MISSING_SETTINGS',
45
+ message: 'Missing api url or api key',
46
+ },
47
+ },
48
+ ],
49
+ });
50
+ }
51
+ }
52
+ catch (err) {
53
+ if (err instanceof errors_1.HealthieError) {
54
+ const errors = (0, errors_1.mapHealthieToActivityError)(err.errors);
55
+ await onError({
56
+ events: errors,
57
+ });
58
+ }
59
+ else {
60
+ const error = err;
61
+ await onError({
62
+ events: [
63
+ {
64
+ date: new Date().toISOString(),
65
+ text: { en: 'Healthie API reported an error' },
66
+ error: {
67
+ category: 'SERVER_ERROR',
68
+ message: error.message,
69
+ },
70
+ },
71
+ ],
72
+ });
73
+ }
74
+ }
75
+ },
76
+ };
77
+ //# sourceMappingURL=checkScheduledAppointments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkScheduledAppointments.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.ts"],"names":[],"mappings":";;;AACA,mEAAwD;AACxD,yCAAwE;AACxE,uCAAsC;AACtC,uDAAsD;AAEtD,qCAA6C;AAEhC,QAAA,0BAA0B,GAInC;IACF,GAAG,EAAE,4BAA4B;IACjC,QAAQ,EAAE,0BAAQ,CAAC,gBAAgB;IACnC,KAAK,EAAE,8BAA8B;IACrC,WAAW,EACT,gGAAgG;IAClG,MAAM,EAAN,eAAM;IACN,UAAU,EAAV,mBAAU;IACV,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAiB,EAAE;;QACvE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QACpC,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAA;QAC/C,IAAI;YACF,MAAM,MAAM,GAAG,IAAA,gCAAgB,EAAC,QAAQ,CAAC,CAAA;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,GAAG,GAAG,IAAA,YAAM,EAAC,MAAM,CAAC,CAAA;gBAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,wBAAwB,CAAC;oBAClD,OAAO,EAAE,SAAS;oBAClB,mBAAmB,EAAE,iBAAiB;iBACvC,CAAC,CAAA;gBACF,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,YAAY,mCAAI,EAAE,CAAA;gBAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA;gBAC3C,MAAM,UAAU,CAAC;oBACf,WAAW,EAAE;wBACX,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;qBACjC;iBACF,CAAC,CAAA;aACH;iBAAM;gBACL,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,4CAA4C,EAAE;4BAC1D,KAAK,EAAE;gCACL,QAAQ,EAAE,kBAAkB;gCAC5B,OAAO,EAAE,4BAA4B;6BACtC;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,sBAAa,EAAE;gBAChC,MAAM,MAAM,GAAG,IAAA,mCAA0B,EAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACrD,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE,MAAM;iBACf,CAAC,CAAA;aACH;iBAAM;gBACL,MAAM,KAAK,GAAG,GAAY,CAAA;gBAC1B,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,gCAAgC,EAAE;4BAC9C,KAAK,EAAE;gCACL,QAAQ,EAAE,cAAc;gCACxB,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;SACF;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tests_1 = require("../../../../src/tests");
4
+ const sdk_1 = require("../../gql/sdk");
5
+ const sdk_2 = require("../../gql/__mocks__/sdk");
6
+ const checkScheduledAppointments_1 = require("../checkScheduledAppointments");
7
+ jest.mock('../../gql/sdk');
8
+ jest.mock('../../graphqlClient');
9
+ describe('checkScheduledAppointments action', () => {
10
+ const onComplete = jest.fn();
11
+ beforeAll(() => {
12
+ const mockSdk = sdk_1.getSdk;
13
+ mockSdk.mockImplementation(sdk_2.mockGetSdk);
14
+ });
15
+ beforeEach(() => {
16
+ jest.clearAllMocks();
17
+ });
18
+ describe('when there is active future appointment with appointment_type_id', () => {
19
+ it('should return call onComplete with isScheduled data points set to true', async () => {
20
+ await checkScheduledAppointments_1.checkScheduledAppointments.onActivityCreated((0, tests_1.generateTestPayload)({
21
+ fields: {
22
+ patientId: 'patient-1',
23
+ appointmentTypeId: 'appointment-type-1',
24
+ },
25
+ settings: {
26
+ apiKey: 'apiKey',
27
+ apiUrl: 'test-url',
28
+ },
29
+ }), onComplete, jest.fn());
30
+ expect(onComplete).toHaveBeenCalledWith({
31
+ data_points: {
32
+ isScheduled: 'true',
33
+ },
34
+ });
35
+ });
36
+ });
37
+ describe('when there is not active future appointment with appointment_type_id', () => {
38
+ it('should return call onComplete with isScheduled data points set to false', async () => {
39
+ await checkScheduledAppointments_1.checkScheduledAppointments.onActivityCreated((0, tests_1.generateTestPayload)({
40
+ fields: {
41
+ patientId: 'patient-1',
42
+ appointmentTypeId: 'appointment-type-2',
43
+ },
44
+ settings: {
45
+ apiKey: 'apiKey',
46
+ apiUrl: 'test-url',
47
+ },
48
+ }), onComplete, jest.fn());
49
+ expect(onComplete).toHaveBeenCalledWith({
50
+ data_points: {
51
+ isScheduled: 'false',
52
+ },
53
+ });
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=checkScheduledAppointments.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkScheduledAppointments.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkScheduledAppointments/checkScheduledAppointments.test.ts"],"names":[],"mappings":";;AAAA,iDAA2D;AAC3D,uCAAsC;AACtC,iDAAoD;AACpD,8EAA0E;AAE1E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;AAEhC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,YAAmB,CAAA;QACnC,OAAO,CAAC,kBAAkB,CAAC,gBAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAChF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,uDAA0B,CAAC,iBAAiB,CAChD,IAAA,2BAAmB,EAAC;gBAClB,MAAM,EAAE;oBACN,SAAS,EAAE,WAAW;oBACtB,iBAAiB,EAAE,oBAAoB;iBACxC;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,EACF,UAAU,EACV,IAAI,CAAC,EAAE,EAAE,CACV,CAAA;YAED,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;gBACtC,WAAW,EAAE;oBACX,WAAW,EAAE,MAAM;iBACpB;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,sEAAsE,EAAE,GAAG,EAAE;QACpF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,uDAA0B,CAAC,iBAAiB,CAChD,IAAA,2BAAmB,EAAC;gBAClB,MAAM,EAAE;oBACN,SAAS,EAAE,WAAW;oBACtB,iBAAiB,EAAE,oBAAoB;iBACxC;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,EACF,UAAU,EACV,IAAI,CAAC,EAAE,EAAE,CACV,CAAA;YAED,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;gBACtC,WAAW,EAAE;oBACX,WAAW,EAAE,OAAO;iBACrB;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const dataPoints: {
2
+ isScheduled: {
3
+ key: string;
4
+ valueType: "boolean";
5
+ };
6
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = void 0;
4
+ exports.dataPoints = {
5
+ isScheduled: {
6
+ key: 'isScheduled',
7
+ valueType: 'boolean',
8
+ },
9
+ };
10
+ //# sourceMappingURL=dataPoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataPoints.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkScheduledAppointments/config/dataPoints.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE;QACX,GAAG,EAAE,aAAa;QAClB,SAAS,EAAE,SAAS;KACrB;CAC4C,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { FieldType } from '@awell-health/extensions-core';
2
+ export declare const fields: {
3
+ patientId: {
4
+ id: string;
5
+ label: string;
6
+ description: string;
7
+ type: FieldType.STRING;
8
+ };
9
+ appointmentTypeId: {
10
+ id: string;
11
+ label: string;
12
+ description: string;
13
+ type: FieldType.STRING;
14
+ required: true;
15
+ };
16
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fields = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ exports.fields = {
6
+ patientId: {
7
+ id: 'patientId',
8
+ label: 'Patient ID',
9
+ description: 'The ID of the patient in Healthie.',
10
+ type: extensions_core_1.FieldType.STRING,
11
+ },
12
+ appointmentTypeId: {
13
+ id: 'appointmentTypeId',
14
+ label: 'Appointment type ID',
15
+ description: 'The ID of the appointment type.',
16
+ type: extensions_core_1.FieldType.STRING,
17
+ required: true,
18
+ },
19
+ };
20
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkScheduledAppointments/config/fields.ts"],"names":[],"mappings":";;;AAAA,mEAAqE;AAExD,QAAA,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,2BAAS,CAAC,MAAM;KACvB;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,2BAAS,CAAC,MAAM;QACtB,QAAQ,EAAE,IAAI;KACf;CAC8B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { fields } from './fields';
2
+ export { dataPoints } from './dataPoints';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataPoints = exports.fields = void 0;
4
+ var fields_1 = require("./fields");
5
+ Object.defineProperty(exports, "fields", { enumerable: true, get: function () { return fields_1.fields; } });
6
+ var dataPoints_1 = require("./dataPoints");
7
+ Object.defineProperty(exports, "dataPoints", { enumerable: true, get: function () { return dataPoints_1.dataPoints; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../extensions/healthie/actions/checkScheduledAppointments/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAiC;AAAxB,gGAAA,MAAM,OAAA;AACf,2CAAyC;AAAhC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1 @@
1
+ export * from './checkScheduledAppointments';
@@ -0,0 +1,18 @@
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
+ __exportStar(require("./checkScheduledAppointments"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/checkScheduledAppointments/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA4C"}
@@ -881,4 +881,63 @@ export declare const actions: {
881
881
  description: string;
882
882
  };
883
883
  }, string, never>;
884
+ checkPatientTag: import("@awell-health/extensions-core").Action<{
885
+ id: {
886
+ id: string;
887
+ label: string;
888
+ description: string;
889
+ type: import("@awell-health/extensions-core").FieldType.STRING;
890
+ };
891
+ patientId: {
892
+ id: string;
893
+ label: string;
894
+ description: string;
895
+ type: import("@awell-health/extensions-core").FieldType.STRING;
896
+ };
897
+ }, {
898
+ apiUrl: {
899
+ key: string;
900
+ label: string;
901
+ obfuscated: false;
902
+ required: true;
903
+ description: string;
904
+ };
905
+ apiKey: {
906
+ key: string;
907
+ label: string;
908
+ obfuscated: true;
909
+ required: true;
910
+ description: string;
911
+ };
912
+ }, "hasTag", never>;
913
+ checkScheduledAppointments: import("@awell-health/extensions-core").Action<{
914
+ patientId: {
915
+ id: string;
916
+ label: string;
917
+ description: string;
918
+ type: import("@awell-health/extensions-core").FieldType.STRING;
919
+ };
920
+ appointmentTypeId: {
921
+ id: string;
922
+ label: string;
923
+ description: string;
924
+ type: import("@awell-health/extensions-core").FieldType.STRING;
925
+ required: true;
926
+ };
927
+ }, {
928
+ apiUrl: {
929
+ key: string;
930
+ label: string;
931
+ obfuscated: false;
932
+ required: true;
933
+ description: string;
934
+ };
935
+ apiKey: {
936
+ key: string;
937
+ label: string;
938
+ obfuscated: true;
939
+ required: true;
940
+ description: string;
941
+ };
942
+ }, "isScheduled", never>;
884
943
  };
@@ -23,6 +23,8 @@ const applyTagToPatient_1 = require("./applyTagToPatient");
23
23
  const getMetricEntry_1 = require("./getMetricEntry");
24
24
  const updatePatientQuickNote_1 = require("./updatePatientQuickNote");
25
25
  const createMetricEntry_1 = require("./createMetricEntry");
26
+ const checkPatientTag_1 = require("./checkPatientTag");
27
+ const checkScheduledAppointments_1 = require("./checkScheduledAppointments");
26
28
  exports.actions = {
27
29
  createAppointment: createAppointment_1.createAppointment,
28
30
  createTask: createTask_1.createTask,
@@ -55,5 +57,7 @@ exports.actions = {
55
57
  getMetricEntry: getMetricEntry_1.getMetricEntry,
56
58
  updatePatientQuickNote: updatePatientQuickNote_1.updatePatientQuickNote,
57
59
  createMetricEntry: createMetricEntry_1.createMetricEntry,
60
+ checkPatientTag: checkPatientTag_1.checkPatientTag,
61
+ checkScheduledAppointments: checkScheduledAppointments_1.checkScheduledAppointments,
58
62
  };
59
63
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../extensions/healthie/actions/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AACvD,wDAAoD;AACpD,qDAAiD;AACjD,uDAAmD;AACnD,mDAA+C;AAC/C,iEAA6D;AAC7D,6DAAyD;AACzD,2EAAuE;AACvE,qDAAiD;AACjD,oDAAoD;AACpD,mEAA+D;AAC/D,2DAAuD;AACvD,2DAAuD;AACvD,6CAAyC;AACzC,iDAA6C;AAC7C,iEAA6D;AAC7D,mDAA+C;AAC/C,6CAAyC;AACzC,2DAAuD;AACvD,qDAAiD;AACjD,qEAAiE;AACjE,2DAAuD;AAE1C,QAAA,OAAO,GAAG;IACrB,iBAAiB,EAAjB,qCAAiB;IACjB,UAAU,EAAV,uBAAU;IACV,cAAc,EAAd,+BAAc;IACd,UAAU,EAAV,uBAAU;IACV,eAAe,EAAf,iCAAe;IACf,aAAa,EAAb,6BAAa;IACb,aAAa,EAAb,6BAAa;IACb,iBAAiB,EAAjB,qCAAiB;IACjB,oBAAoB,EAApB,2CAAoB;IACpB,kBAAkB,EAAlB,uCAAkB;IAClB,yBAAyB,EAAzB,qDAAyB;IACzB,cAAc,EAAd,+BAAc;IACd;;;QAGI;IACJ,kBAAkB;IAClB,qBAAqB,EAArB,6CAAqB;IACrB,iBAAiB,EAAjB,qCAAiB;IACjB,iBAAiB,EAAjB,qCAAiB;IACjB;;;QAGI;IACJ,sBAAsB;IACtB,UAAU,EAAV,uBAAU;IACV,YAAY,EAAZ,2BAAY;IACZ,oBAAoB,EAApB,2CAAoB;IACpB,cAAc,EAAd,+BAAc;IACd,sBAAsB,EAAtB,+CAAsB;IACtB,iBAAiB,EAAjB,qCAAiB;CAClB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../extensions/healthie/actions/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AACvD,wDAAoD;AACpD,qDAAiD;AACjD,uDAAmD;AACnD,mDAA+C;AAC/C,iEAA6D;AAC7D,6DAAyD;AACzD,2EAAuE;AACvE,qDAAiD;AACjD,oDAAoD;AACpD,mEAA+D;AAC/D,2DAAuD;AACvD,2DAAuD;AACvD,6CAAyC;AACzC,iDAA6C;AAC7C,iEAA6D;AAC7D,mDAA+C;AAC/C,6CAAyC;AACzC,2DAAuD;AACvD,qDAAiD;AACjD,qEAAiE;AACjE,2DAAuD;AACvD,uDAAmD;AACnD,6EAAyE;AAE5D,QAAA,OAAO,GAAG;IACrB,iBAAiB,EAAjB,qCAAiB;IACjB,UAAU,EAAV,uBAAU;IACV,cAAc,EAAd,+BAAc;IACd,UAAU,EAAV,uBAAU;IACV,eAAe,EAAf,iCAAe;IACf,aAAa,EAAb,6BAAa;IACb,aAAa,EAAb,6BAAa;IACb,iBAAiB,EAAjB,qCAAiB;IACjB,oBAAoB,EAApB,2CAAoB;IACpB,kBAAkB,EAAlB,uCAAkB;IAClB,yBAAyB,EAAzB,qDAAyB;IACzB,cAAc,EAAd,+BAAc;IACd;;;QAGI;IACJ,kBAAkB;IAClB,qBAAqB,EAArB,6CAAqB;IACrB,iBAAiB,EAAjB,qCAAiB;IACjB,iBAAiB,EAAjB,qCAAiB;IACjB;;;QAGI;IACJ,sBAAsB;IACtB,UAAU,EAAV,uBAAU;IACV,YAAY,EAAZ,2BAAY;IACZ,oBAAoB,EAApB,2CAAoB;IACpB,cAAc,EAAd,+BAAc;IACd,sBAAsB,EAAtB,+CAAsB;IACtB,iBAAiB,EAAjB,qCAAiB;IACjB,eAAe,EAAf,iCAAe;IACf,0BAA0B,EAA1B,uDAA0B;CAC3B,CAAA"}