@openhi/constructs 0.0.0

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 (90) hide show
  1. package/README.md +3 -0
  2. package/lib/app/index.d.ts +4 -0
  3. package/lib/app/index.js +21 -0
  4. package/lib/app/open-hi-app.d.ts +85 -0
  5. package/lib/app/open-hi-app.js +127 -0
  6. package/lib/app/open-hi-environment.d.ts +59 -0
  7. package/lib/app/open-hi-environment.js +72 -0
  8. package/lib/app/open-hi-service.d.ts +169 -0
  9. package/lib/app/open-hi-service.js +195 -0
  10. package/lib/app/open-hi-stage.d.ts +71 -0
  11. package/lib/app/open-hi-stage.js +70 -0
  12. package/lib/components/acm/root-wildcard-certificate.d.ts +15 -0
  13. package/lib/components/acm/root-wildcard-certificate.js +35 -0
  14. package/lib/components/api-gateway/core-http-api.d.ts +10 -0
  15. package/lib/components/api-gateway/core-http-api.js +44 -0
  16. package/lib/components/api-gateway/http-lambda-integration-no-permissions.d.ts +18 -0
  17. package/lib/components/api-gateway/http-lambda-integration-no-permissions.js +26 -0
  18. package/lib/components/app-sync/core-graphql-api.d.ts +12 -0
  19. package/lib/components/app-sync/core-graphql-api.js +54 -0
  20. package/lib/components/auth.d.ts +75 -0
  21. package/lib/components/auth.js +100 -0
  22. package/lib/components/cognito/core-user-pool-client.d.ts +10 -0
  23. package/lib/components/cognito/core-user-pool-client.js +47 -0
  24. package/lib/components/cognito/core-user-pool-domain.d.ts +10 -0
  25. package/lib/components/cognito/core-user-pool-domain.js +41 -0
  26. package/lib/components/cognito/core-user-pool-kms-key.d.ts +10 -0
  27. package/lib/components/cognito/core-user-pool-kms-key.js +37 -0
  28. package/lib/components/cognito/core-user-pool.d.ts +10 -0
  29. package/lib/components/cognito/core-user-pool.js +54 -0
  30. package/lib/components/core.d.ts +102 -0
  31. package/lib/components/core.js +79 -0
  32. package/lib/components/dynamodb/dynamo-db-data-store.d.ts +33 -0
  33. package/lib/components/dynamodb/dynamo-db-data-store.js +107 -0
  34. package/lib/components/event-bridge/data-event-bus.d.ts +19 -0
  35. package/lib/components/event-bridge/data-event-bus.js +34 -0
  36. package/lib/components/event-bridge/ops-event-bus.d.ts +19 -0
  37. package/lib/components/event-bridge/ops-event-bus.js +34 -0
  38. package/lib/components/global.d.ts +36 -0
  39. package/lib/components/global.js +63 -0
  40. package/lib/components/index.d.ts +1 -0
  41. package/lib/components/index.js +18 -0
  42. package/lib/components/route-53/child-hosted-zone.d.ts +20 -0
  43. package/lib/components/route-53/child-hosted-zone.js +48 -0
  44. package/lib/components/route-53/root-hosted-zone.d.ts +10 -0
  45. package/lib/components/route-53/root-hosted-zone.js +20 -0
  46. package/lib/components/ssm/discoverable-string-parameter.d.ts +59 -0
  47. package/lib/components/ssm/discoverable-string-parameter.js +50 -0
  48. package/lib/components/ssm/index.d.ts +1 -0
  49. package/lib/components/ssm/index.js +18 -0
  50. package/lib/data/dynamo/ehr/r4/Patient.d.ts +180 -0
  51. package/lib/data/dynamo/ehr/r4/Patient.js +192 -0
  52. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.d.ts +162 -0
  53. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.js +37 -0
  54. package/lib/data/hello-world.d.ts +39 -0
  55. package/lib/data/hello-world.js +59 -0
  56. package/lib/data/import-patient-with-dynalite.d.ts +1 -0
  57. package/lib/data/import-patient-with-dynalite.js +87 -0
  58. package/lib/data/import-patient.d.ts +47 -0
  59. package/lib/data/import-patient.js +158 -0
  60. package/lib/data/lambda/rest-api-lambda.d.ts +13 -0
  61. package/lib/data/lambda/rest-api-lambda.handler.d.ts +1 -0
  62. package/lib/data/lambda/rest-api-lambda.handler.js +10 -0
  63. package/lib/data/lambda/rest-api-lambda.js +22 -0
  64. package/lib/data/middleware/open-hi-context.d.ts +13 -0
  65. package/lib/data/middleware/open-hi-context.js +31 -0
  66. package/lib/data/rest-api/ehr/r4/Patient.d.ts +16 -0
  67. package/lib/data/rest-api/ehr/r4/Patient.js +234 -0
  68. package/lib/data/rest-api/rest-api-local.d.ts +1 -0
  69. package/lib/data/rest-api/rest-api-local.js +8 -0
  70. package/lib/data/rest-api/rest-api-mockdata.d.ts +7 -0
  71. package/lib/data/rest-api/rest-api-mockdata.js +585 -0
  72. package/lib/data/rest-api/rest-api.d.ts +3 -0
  73. package/lib/data/rest-api/rest-api.js +26 -0
  74. package/lib/index.d.ts +3 -0
  75. package/lib/index.js +20 -0
  76. package/lib/lib/compression.d.ts +27 -0
  77. package/lib/lib/compression.js +87 -0
  78. package/lib/services/index.d.ts +5 -0
  79. package/lib/services/index.js +22 -0
  80. package/lib/services/open-hi-auth-service.d.ts +31 -0
  81. package/lib/services/open-hi-auth-service.js +31 -0
  82. package/lib/services/open-hi-core-service.d.ts +15 -0
  83. package/lib/services/open-hi-core-service.js +38 -0
  84. package/lib/services/open-hi-data-service.d.ts +18 -0
  85. package/lib/services/open-hi-data-service.js +18 -0
  86. package/lib/services/open-hi-global-service.d.ts +15 -0
  87. package/lib/services/open-hi-global-service.js +44 -0
  88. package/lib/services/open-hi-rest-api-service.d.ts +17 -0
  89. package/lib/services/open-hi-rest-api-service.js +107 -0
  90. package/package.json +67 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiscoverableStringParameter = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
6
+ const app_1 = require("../../app");
7
+ /**
8
+ * Discoverable SSM string parameter construct. Extends CDK StringParameter:
9
+ * builds parameterName from the given name via buildParameterName and tags
10
+ * the parameter with the name constant.
11
+ */
12
+ class DiscoverableStringParameter extends aws_ssm_1.StringParameter {
13
+ /**
14
+ * Build a param name based on predictable attributes found in services and
15
+ * constructs. Used for storage and retrieval of SSM values across services.
16
+ */
17
+ static buildParameterName(scope, props) {
18
+ const stack = app_1.OpenHiService.of(scope);
19
+ return ("/" +
20
+ [
21
+ props.branchHash ?? stack.branchHash,
22
+ props.serviceType ?? stack.serviceType,
23
+ props.account ?? stack.account,
24
+ props.region ?? stack.region,
25
+ props.ssmParamName,
26
+ ]
27
+ .join("/")
28
+ .toUpperCase());
29
+ }
30
+ /**
31
+ * Read the string value of an SSM parameter created with DiscoverableStringParameter,
32
+ * using props that include ssmParamName and optional overrides (e.g. serviceType).
33
+ */
34
+ static valueForLookupName(scope, props) {
35
+ const paramName = DiscoverableStringParameter.buildParameterName(scope, props);
36
+ return aws_ssm_1.StringParameter.valueForStringParameter(scope, paramName);
37
+ }
38
+ constructor(scope, id, props) {
39
+ const { ssmParamName, branchHash, serviceType, account, region, ...rest } = props;
40
+ const parameterName = DiscoverableStringParameter.buildParameterName(scope, props);
41
+ super(scope, id, {
42
+ ...rest,
43
+ parameterName,
44
+ });
45
+ const { appName } = app_1.OpenHiService.of(scope);
46
+ aws_cdk_lib_1.Tags.of(this).add(`${appName}:param-name`, ssmParamName);
47
+ }
48
+ }
49
+ exports.DiscoverableStringParameter = DiscoverableStringParameter;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY292ZXJhYmxlLXN0cmluZy1wYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zc20vZGlzY292ZXJhYmxlLXN0cmluZy1wYXJhbWV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW1DO0FBQ25DLGlEQUc2QjtBQUU3QixtQ0FBMEM7QUFzRDFDOzs7O0dBSUc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHlCQUFlO0lBQzlEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDOUIsS0FBZ0IsRUFDaEIsS0FBOEI7UUFFOUIsTUFBTSxLQUFLLEdBQUcsbUJBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFrQixDQUFDO1FBQ3ZELE9BQU8sQ0FDTCxHQUFHO1lBQ0g7Z0JBQ0UsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVTtnQkFDcEMsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVztnQkFDdEMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTztnQkFDOUIsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTTtnQkFDNUIsS0FBSyxDQUFDLFlBQVk7YUFDbkI7aUJBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDVCxXQUFXLEVBQUUsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQzlCLEtBQWdCLEVBQ2hCLEtBQThCO1FBRTlCLE1BQU0sU0FBUyxHQUFHLDJCQUEyQixDQUFDLGtCQUFrQixDQUM5RCxLQUFLLEVBQ0wsS0FBSyxDQUNOLENBQUM7UUFDRixPQUFPLHlCQUFlLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUF1QztRQUV2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxHQUN2RSxLQUFLLENBQUM7UUFFUixNQUFNLGFBQWEsR0FBRywyQkFBMkIsQ0FBQyxrQkFBa0IsQ0FDbEUsS0FBSyxFQUNMLEtBQUssQ0FDTixDQUFDO1FBRUYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLElBQUk7WUFDUCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBa0IsQ0FBQztRQUM3RCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUE1REQsa0VBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU3RyaW5nUGFyYW1ldGVyLFxuICB0eXBlIFN0cmluZ1BhcmFtZXRlclByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9wZW5IaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKlxuICogRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyUHJvcHM6IHByb3BzIGZvciBjcmVhdGluZyBvciBsb29raW5nIHVwIFNTTVxuICogcGFyYW1ldGVycy4gSW5jbHVkZXMgU3RyaW5nUGFyYW1ldGVyUHJvcHMgKG1pbnVzIHBhcmFtZXRlck5hbWUpIHBsdXNcbiAqIG5hbWUtYnVpbGRpbmcgZmllbGRzIHVzZWQgYnkgYnVpbGRQYXJhbWV0ZXJOYW1lLlxuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyUHJvcHMgZXh0ZW5kcyBPbWl0PFxuICBTdHJpbmdQYXJhbWV0ZXJQcm9wcyxcbiAgXCJwYXJhbWV0ZXJOYW1lXCJcbj4ge1xuICAvKipcbiAgICogU1NNIHBhcmFtIG5hbWUgdXNlZCB0byBidWlsZCB0aGUgU1NNIHBhcmFtZXRlciBuYW1lIHZpYSBidWlsZFBhcmFtZXRlck5hbWVcbiAgICogYW5kIHN0b3JlZCBhcyBhIHRhZyBvbiB0aGUgcGFyYW1ldGVyIGZvciBkaXNjb3ZlcmFiaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBzc21QYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGhhc2ggdGhlIHBhcmFtZXRlciBiZWxvbmdzIHRvLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBjdXJyZW50IHN0YWNrJ3MgZW52aXJvbm1lbnQgaGFzaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoSGFzaD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgdHlwZSB0aGUgcGFyYW1ldGVyIGJlbG9uZ3MgdG8uXG4gICAqIEBkZWZhdWx0IC0gdGhlIGN1cnJlbnQgc3RhY2sncyBzZXJ2aWNlIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgdGhlIHBhcmFtZXRlciBiZWxvbmdzIHRvLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBjdXJyZW50IHN0YWNrJ3MgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdGhlIHBhcmFtZXRlciBiZWxvbmdzIHRvLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBjdXJyZW50IHN0YWNrJ3MgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGJ1aWxkUGFyYW1ldGVyTmFtZSBhbmQgdmFsdWVGb3JMb29rdXBOYW1lLlxuICogSW5jbHVkZXMgc3NtUGFyYW1OYW1lIChyZXF1aXJlZCkgYW5kIG9wdGlvbmFsIG92ZXJyaWRlcyAoYnJhbmNoSGFzaCwgc2VydmljZVR5cGUsIGFjY291bnQsIHJlZ2lvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEJ1aWxkUGFyYW1ldGVyTmFtZVByb3BzID0gUGljazxcbiAgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyUHJvcHMsXG4gIFwic3NtUGFyYW1OYW1lXCIgfCBcImJyYW5jaEhhc2hcIiB8IFwic2VydmljZVR5cGVcIiB8IFwiYWNjb3VudFwiIHwgXCJyZWdpb25cIlxuPjtcblxuLyoqXG4gKiBEaXNjb3ZlcmFibGUgU1NNIHN0cmluZyBwYXJhbWV0ZXIgY29uc3RydWN0LiBFeHRlbmRzIENESyBTdHJpbmdQYXJhbWV0ZXI6XG4gKiBidWlsZHMgcGFyYW1ldGVyTmFtZSBmcm9tIHRoZSBnaXZlbiBuYW1lIHZpYSBidWlsZFBhcmFtZXRlck5hbWUgYW5kIHRhZ3NcbiAqIHRoZSBwYXJhbWV0ZXIgd2l0aCB0aGUgbmFtZSBjb25zdGFudC5cbiAqL1xuZXhwb3J0IGNsYXNzIERpc2NvdmVyYWJsZVN0cmluZ1BhcmFtZXRlciBleHRlbmRzIFN0cmluZ1BhcmFtZXRlciB7XG4gIC8qKlxuICAgKiBCdWlsZCBhIHBhcmFtIG5hbWUgYmFzZWQgb24gcHJlZGljdGFibGUgYXR0cmlidXRlcyBmb3VuZCBpbiBzZXJ2aWNlcyBhbmRcbiAgICogY29uc3RydWN0cy4gVXNlZCBmb3Igc3RvcmFnZSBhbmQgcmV0cmlldmFsIG9mIFNTTSB2YWx1ZXMgYWNyb3NzIHNlcnZpY2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBidWlsZFBhcmFtZXRlck5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwcm9wczogQnVpbGRQYXJhbWV0ZXJOYW1lUHJvcHMsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBPcGVuSGlTZXJ2aWNlLm9mKHNjb3BlKSBhcyBPcGVuSGlTZXJ2aWNlO1xuICAgIHJldHVybiAoXG4gICAgICBcIi9cIiArXG4gICAgICBbXG4gICAgICAgIHByb3BzLmJyYW5jaEhhc2ggPz8gc3RhY2suYnJhbmNoSGFzaCxcbiAgICAgICAgcHJvcHMuc2VydmljZVR5cGUgPz8gc3RhY2suc2VydmljZVR5cGUsXG4gICAgICAgIHByb3BzLmFjY291bnQgPz8gc3RhY2suYWNjb3VudCxcbiAgICAgICAgcHJvcHMucmVnaW9uID8/IHN0YWNrLnJlZ2lvbixcbiAgICAgICAgcHJvcHMuc3NtUGFyYW1OYW1lLFxuICAgICAgXVxuICAgICAgICAuam9pbihcIi9cIilcbiAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIHN0cmluZyB2YWx1ZSBvZiBhbiBTU00gcGFyYW1ldGVyIGNyZWF0ZWQgd2l0aCBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIsXG4gICAqIHVzaW5nIHByb3BzIHRoYXQgaW5jbHVkZSBzc21QYXJhbU5hbWUgYW5kIG9wdGlvbmFsIG92ZXJyaWRlcyAoZS5nLiBzZXJ2aWNlVHlwZSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbHVlRm9yTG9va3VwTmFtZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHByb3BzOiBCdWlsZFBhcmFtZXRlck5hbWVQcm9wcyxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbU5hbWUgPSBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIuYnVpbGRQYXJhbWV0ZXJOYW1lKFxuICAgICAgc2NvcGUsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICAgIHJldHVybiBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoc2NvcGUsIHBhcmFtTmFtZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERpc2NvdmVyYWJsZVN0cmluZ1BhcmFtZXRlclByb3BzLFxuICApIHtcbiAgICBjb25zdCB7IHNzbVBhcmFtTmFtZSwgYnJhbmNoSGFzaCwgc2VydmljZVR5cGUsIGFjY291bnQsIHJlZ2lvbiwgLi4ucmVzdCB9ID1cbiAgICAgIHByb3BzO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IERpc2NvdmVyYWJsZVN0cmluZ1BhcmFtZXRlci5idWlsZFBhcmFtZXRlck5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIHByb3BzLFxuICAgICk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhcHBOYW1lIH0gPSBPcGVuSGlTZXJ2aWNlLm9mKHNjb3BlKSBhcyBPcGVuSGlTZXJ2aWNlO1xuICAgIFRhZ3Mub2YodGhpcykuYWRkKGAke2FwcE5hbWV9OnBhcmFtLW5hbWVgLCBzc21QYXJhbU5hbWUpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from "./discoverable-string-parameter";
@@ -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("./discoverable-string-parameter"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zc20vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtFQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Rpc2NvdmVyYWJsZS1zdHJpbmctcGFyYW1ldGVyXCI7XG4iXX0=
@@ -0,0 +1,180 @@
1
+ import { Entity } from "electrodb";
2
+ /**
3
+ * Patient data-store entity based on FHIR (single-table store).
4
+ *
5
+ * Key structure: PK = TID#<tenantId>#WID#<workspaceId>#RT#Patient#ID#<id>, SK = CURRENT.
6
+ * Standard attributes (FHIR source and entity purpose) are documented in the Data-Store Entity Standards (FHIR).
7
+ *
8
+ * @see sites/www-docs/content/reference/data-store-entities.md — Standard attributes (all FHIR domain resources)
9
+ * @see sites/www-docs/content/architecture/dynamodb-single-table-design.md
10
+ */
11
+ export declare const Patient: Entity<string, string, string, {
12
+ model: {
13
+ entity: string;
14
+ service: string;
15
+ version: string;
16
+ };
17
+ attributes: {
18
+ /** Sort key. "CURRENT" for current version; version history in S3. */
19
+ sk: {
20
+ type: "string";
21
+ required: true;
22
+ default: string;
23
+ };
24
+ tenantId: {
25
+ type: "string";
26
+ required: true;
27
+ };
28
+ workspaceId: {
29
+ type: "string";
30
+ required: true;
31
+ };
32
+ /** FHIR Resource.id; logical id in URL and PK. */
33
+ id: {
34
+ type: "string";
35
+ required: true;
36
+ };
37
+ /** FHIR resource as JSON string. JSON.stringify(resource) on write; JSON.parse(item.resource) on read. */
38
+ resource: {
39
+ type: "string";
40
+ required: true;
41
+ };
42
+ /** Version id (e.g. ULID). Tracks current version; S3 history key. */
43
+ vid: {
44
+ type: "string";
45
+ required: true;
46
+ };
47
+ lastUpdated: {
48
+ type: "string";
49
+ required: true;
50
+ };
51
+ deleted: {
52
+ type: "boolean";
53
+ required: false;
54
+ };
55
+ bundleId: {
56
+ type: "string";
57
+ required: false;
58
+ };
59
+ msgId: {
60
+ type: "string";
61
+ required: false;
62
+ };
63
+ /** Identifier system (e.g. MRN system URI). When set with identifierValue, item is written to GSI2. */
64
+ identifierSystem: {
65
+ type: "string";
66
+ required: false;
67
+ };
68
+ /** Identifier value (e.g. MRN). When set with identifierSystem, item is written to GSI2. */
69
+ identifierValue: {
70
+ type: "string";
71
+ required: false;
72
+ };
73
+ /** For GSI2/GSI3 projection: base table PK/SK so GetItem can be used after query. */
74
+ resourcePk: {
75
+ type: "string";
76
+ required: false;
77
+ };
78
+ resourceSk: {
79
+ type: "string";
80
+ required: false;
81
+ };
82
+ /** For GSI2 projection: display name for roster/lookup. */
83
+ display: {
84
+ type: "string";
85
+ required: false;
86
+ };
87
+ /** For GSI2 projection: resource status if applicable. */
88
+ status: {
89
+ type: "string";
90
+ required: false;
91
+ };
92
+ /** Facility id. When set with normalizedName, item is written to GSI3. */
93
+ facilityId: {
94
+ type: "string";
95
+ required: false;
96
+ };
97
+ /** Normalized display name for roster sort. When set with facilityId, item is written to GSI3. */
98
+ normalizedName: {
99
+ type: "string";
100
+ required: false;
101
+ };
102
+ };
103
+ indexes: {
104
+ /** Base table: PK, SK (data store key names). PK is built from tenantId, workspaceId, id; do not supply PK from outside. */
105
+ record: {
106
+ pk: {
107
+ field: string;
108
+ composite: ("id" | "tenantId" | "workspaceId")[];
109
+ template: string;
110
+ };
111
+ sk: {
112
+ field: string;
113
+ composite: "sk"[];
114
+ };
115
+ };
116
+ /**
117
+ * GSI1 — Reverse Reference: query "what references this patient?".
118
+ * Patient items are never written to GSI1 (condition: false); reference index items
119
+ * are written by other resources. This index enables querying GSI1 by REFTO#RT#Patient#ID#<id>.
120
+ */
121
+ gsi1: {
122
+ index: string;
123
+ condition: () => boolean;
124
+ pk: {
125
+ field: string;
126
+ composite: ("id" | "tenantId" | "workspaceId")[];
127
+ template: string;
128
+ };
129
+ sk: {
130
+ field: string;
131
+ composite: never[];
132
+ };
133
+ };
134
+ /** GSI2 — Identifier Lookup: MRN, NPI, member ID, etc. Keys built from identifier components. */
135
+ gsi2: {
136
+ index: string;
137
+ condition: (attr: Record<string, unknown>) => boolean;
138
+ pk: {
139
+ field: string;
140
+ composite: ("tenantId" | "workspaceId" | "identifierSystem" | "identifierValue")[];
141
+ template: string;
142
+ };
143
+ sk: {
144
+ field: string;
145
+ composite: "id"[];
146
+ template: string;
147
+ };
148
+ };
149
+ /** GSI3 — Facility Ops: facility roster, worklists. Keys built from facility + name. */
150
+ gsi3: {
151
+ index: string;
152
+ condition: (attr: Record<string, unknown>) => boolean;
153
+ pk: {
154
+ field: string;
155
+ composite: ("tenantId" | "workspaceId" | "facilityId")[];
156
+ template: string;
157
+ };
158
+ sk: {
159
+ field: string;
160
+ composite: ("id" | "normalizedName")[];
161
+ template: string;
162
+ };
163
+ };
164
+ /** GSI4 — Resource Type Index: list all Patients in workspace (no scan). */
165
+ gsi4: {
166
+ index: string;
167
+ condition: () => boolean;
168
+ pk: {
169
+ field: string;
170
+ composite: ("tenantId" | "workspaceId")[];
171
+ template: string;
172
+ };
173
+ sk: {
174
+ field: string;
175
+ composite: "id"[];
176
+ template: string;
177
+ };
178
+ };
179
+ };
180
+ }>;
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Patient = void 0;
4
+ const electrodb_1 = require("electrodb");
5
+ /**
6
+ * Patient data-store entity based on FHIR (single-table store).
7
+ *
8
+ * Key structure: PK = TID#<tenantId>#WID#<workspaceId>#RT#Patient#ID#<id>, SK = CURRENT.
9
+ * Standard attributes (FHIR source and entity purpose) are documented in the Data-Store Entity Standards (FHIR).
10
+ *
11
+ * @see sites/www-docs/content/reference/data-store-entities.md — Standard attributes (all FHIR domain resources)
12
+ * @see sites/www-docs/content/architecture/dynamodb-single-table-design.md
13
+ */
14
+ exports.Patient = new electrodb_1.Entity({
15
+ model: {
16
+ entity: "patient",
17
+ service: "fhir",
18
+ version: "01",
19
+ },
20
+ attributes: {
21
+ /** Sort key. "CURRENT" for current version; version history in S3. */
22
+ sk: {
23
+ type: "string",
24
+ required: true,
25
+ default: "CURRENT",
26
+ },
27
+ tenantId: {
28
+ type: "string",
29
+ required: true,
30
+ },
31
+ workspaceId: {
32
+ type: "string",
33
+ required: true,
34
+ },
35
+ /** FHIR Resource.id; logical id in URL and PK. */
36
+ id: {
37
+ type: "string",
38
+ required: true,
39
+ },
40
+ /** FHIR resource as JSON string. JSON.stringify(resource) on write; JSON.parse(item.resource) on read. */
41
+ resource: {
42
+ type: "string",
43
+ required: true,
44
+ },
45
+ /** Version id (e.g. ULID). Tracks current version; S3 history key. */
46
+ vid: {
47
+ type: "string",
48
+ required: true,
49
+ },
50
+ lastUpdated: {
51
+ type: "string",
52
+ required: true,
53
+ },
54
+ deleted: {
55
+ type: "boolean",
56
+ required: false,
57
+ },
58
+ bundleId: {
59
+ type: "string",
60
+ required: false,
61
+ },
62
+ msgId: {
63
+ type: "string",
64
+ required: false,
65
+ },
66
+ // Audit is in FHIR resource meta (meta.extension), not item attributes. See data-store-entities.md.
67
+ // --- GSI2 (Identifier Lookup): optional; set when indexing this patient by identifier (e.g. MRN)
68
+ /** Identifier system (e.g. MRN system URI). When set with identifierValue, item is written to GSI2. */
69
+ identifierSystem: {
70
+ type: "string",
71
+ required: false,
72
+ },
73
+ /** Identifier value (e.g. MRN). When set with identifierSystem, item is written to GSI2. */
74
+ identifierValue: {
75
+ type: "string",
76
+ required: false,
77
+ },
78
+ /** For GSI2/GSI3 projection: base table PK/SK so GetItem can be used after query. */
79
+ resourcePk: {
80
+ type: "string",
81
+ required: false,
82
+ },
83
+ resourceSk: {
84
+ type: "string",
85
+ required: false,
86
+ },
87
+ /** For GSI2 projection: display name for roster/lookup. */
88
+ display: {
89
+ type: "string",
90
+ required: false,
91
+ },
92
+ /** For GSI2 projection: resource status if applicable. */
93
+ status: {
94
+ type: "string",
95
+ required: false,
96
+ },
97
+ // --- GSI3 (Facility Ops): optional; set when indexing this patient on a facility roster
98
+ /** Facility id. When set with normalizedName, item is written to GSI3. */
99
+ facilityId: {
100
+ type: "string",
101
+ required: false,
102
+ },
103
+ /** Normalized display name for roster sort. When set with facilityId, item is written to GSI3. */
104
+ normalizedName: {
105
+ type: "string",
106
+ required: false,
107
+ },
108
+ },
109
+ indexes: {
110
+ /** Base table: PK, SK (data store key names). PK is built from tenantId, workspaceId, id; do not supply PK from outside. */
111
+ record: {
112
+ pk: {
113
+ field: "PK",
114
+ composite: ["tenantId", "workspaceId", "id"],
115
+ template: "TID#${tenantId}#WID#${workspaceId}#RT#Patient#ID#${id}",
116
+ },
117
+ sk: {
118
+ field: "SK",
119
+ composite: ["sk"],
120
+ },
121
+ },
122
+ /**
123
+ * GSI1 — Reverse Reference: query "what references this patient?".
124
+ * Patient items are never written to GSI1 (condition: false); reference index items
125
+ * are written by other resources. This index enables querying GSI1 by REFTO#RT#Patient#ID#<id>.
126
+ */
127
+ gsi1: {
128
+ index: "GSI1",
129
+ condition: () => false,
130
+ pk: {
131
+ field: "GSI1PK",
132
+ composite: ["tenantId", "workspaceId", "id"],
133
+ template: "TID#${tenantId}#WID#${workspaceId}#REFTO#RT#Patient#ID#${id}",
134
+ },
135
+ sk: {
136
+ field: "GSI1SK",
137
+ composite: [],
138
+ },
139
+ },
140
+ /** GSI2 — Identifier Lookup: MRN, NPI, member ID, etc. Keys built from identifier components. */
141
+ gsi2: {
142
+ index: "GSI2",
143
+ condition: (attr) => attr.identifierSystem != null && attr.identifierValue != null,
144
+ pk: {
145
+ field: "GSI2PK",
146
+ composite: [
147
+ "tenantId",
148
+ "workspaceId",
149
+ "identifierSystem",
150
+ "identifierValue",
151
+ ],
152
+ template: "TID#${tenantId}#WID#${workspaceId}#IDENT#${identifierSystem}#${identifierValue}",
153
+ },
154
+ sk: {
155
+ field: "GSI2SK",
156
+ composite: ["id"],
157
+ template: "RT#Patient#ID#${id}",
158
+ },
159
+ },
160
+ /** GSI3 — Facility Ops: facility roster, worklists. Keys built from facility + name. */
161
+ gsi3: {
162
+ index: "GSI3",
163
+ condition: (attr) => attr.facilityId != null && attr.normalizedName != null,
164
+ pk: {
165
+ field: "GSI3PK",
166
+ composite: ["tenantId", "workspaceId", "facilityId"],
167
+ template: "TID#${tenantId}#WID#${workspaceId}#FAC#${facilityId}",
168
+ },
169
+ sk: {
170
+ field: "GSI3SK",
171
+ composite: ["id", "normalizedName"],
172
+ template: "TYPE#PATIENT#PAT#${id}#NAME#${normalizedName}",
173
+ },
174
+ },
175
+ /** GSI4 — Resource Type Index: list all Patients in workspace (no scan). */
176
+ gsi4: {
177
+ index: "GSI4",
178
+ condition: () => true,
179
+ pk: {
180
+ field: "GSI4PK",
181
+ composite: ["tenantId", "workspaceId"],
182
+ template: "TID#${tenantId}#WID#${workspaceId}#RT#Patient",
183
+ },
184
+ sk: {
185
+ field: "GSI4SK",
186
+ composite: ["id"],
187
+ template: "ID#${id}",
188
+ },
189
+ },
190
+ },
191
+ });
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhL2R5bmFtby9laHIvcjQvUGF0aWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBbUM7QUFFbkM7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLE9BQU8sR0FBRyxJQUFJLGtCQUFNLENBQUM7SUFDaEMsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLFNBQVM7UUFDakIsT0FBTyxFQUFFLE1BQU07UUFDZixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsVUFBVSxFQUFFO1FBQ1Ysc0VBQXNFO1FBQ3RFLEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsU0FBUztTQUNuQjtRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNELGtEQUFrRDtRQUNsRCxFQUFFLEVBQUU7WUFDRixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJO1NBQ2Y7UUFDRCwwR0FBMEc7UUFDMUcsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmO1FBQ0Qsc0VBQXNFO1FBQ3RFLEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxTQUFTO1lBQ2YsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEs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VSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7Z0JBQ3BELFFBQVEsRUFBRSxzREFBc0Q7YUFDakU7WUFDRCxFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO2dCQUNuQyxRQUFRLEVBQUUsK0NBQStDO2FBQzFEO1NBQ0Y7UUFDRCw0RUFBNEU7UUFDNUUsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNyQixFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQztnQkFDdEMsUUFBUSxFQUFFLCtDQUErQzthQUMxRDtZQUNELEVBQUUsRUFBRTtnQkFDRixLQUFLLEVBQUUsUUFBUTtnQkFDZixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLFFBQVEsRUFBRSxVQUFVO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSB9IGZyb20gXCJlbGVjdHJvZGJcIjtcblxuLyoqXG4gKiBQYXRpZW50IGRhdGEtc3RvcmUgZW50aXR5IGJhc2VkIG9uIEZISVIgKHNpbmdsZS10YWJsZSBzdG9yZSkuXG4gKlxuICogS2V5IHN0cnVjdHVyZTogUEsgPSBUSUQjPHRlbmFudElkPiNXSUQjPHdvcmtzcGFjZUlkPiNSVCNQYXRpZW50I0lEIzxpZD4sIFNLID0gQ1VSUkVOVC5cbiAqIFN0YW5kYXJkIGF0dHJpYnV0ZXMgKEZISVIgc291cmNlIGFuZCBlbnRpdHkgcHVycG9zZSkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIERhdGEtU3RvcmUgRW50aXR5IFN0YW5kYXJkcyAoRkhJUikuXG4gKlxuICogQHNlZSBzaXRlcy93d3ctZG9jcy9jb250ZW50L3JlZmVyZW5jZS9kYXRhLXN0b3JlLWVudGl0aWVzLm1kIOKAlCBTdGFuZGFyZCBhdHRyaWJ1dGVzIChhbGwgRkhJUiBkb21haW4gcmVzb3VyY2VzKVxuICogQHNlZSBzaXRlcy93d3ctZG9jcy9jb250ZW50L2FyY2hpdGVjdHVyZS9keW5hbW9kYi1zaW5nbGUtdGFibGUtZGVzaWduLm1kXG4gKi9cbmV4cG9ydCBjb25zdCBQYXRpZW50ID0gbmV3IEVudGl0eSh7XG4gIG1vZGVsOiB7XG4gICAgZW50aXR5OiBcInBhdGllbnRcIixcbiAgICBzZXJ2aWNlOiBcImZoaXJcIixcbiAgICB2ZXJzaW9uOiBcIjAxXCIsXG4gIH0sXG4gIGF0dHJpYnV0ZXM6IHtcbiAgICAvKiogU29ydCBrZXkuIFwiQ1VSUkVOVFwiIGZvciBjdXJyZW50IHZlcnNpb247IHZlcnNpb24gaGlzdG9yeSBpbiBTMy4gKi9cbiAgICBzazoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZGVmYXVsdDogXCJDVVJSRU5UXCIsXG4gICAgfSxcbiAgICB0ZW5hbnRJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAgd29ya3NwYWNlSWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIC8qKiBGSElSIFJlc291cmNlLmlkOyBsb2dpY2FsIGlkIGluIFVSTCBhbmQgUEsuICovXG4gICAgaWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIC8qKiBGSElSIHJlc291cmNlIGFzIEpTT04gc3RyaW5nLiBKU09OLnN0cmluZ2lmeShyZXNvdXJjZSkgb24gd3JpdGU7IEpTT04ucGFyc2UoaXRlbS5yZXNvdXJjZSkgb24gcmVhZC4gKi9cbiAgICByZXNvdXJjZToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAgLyoqIFZlcnNpb24gaWQgKGUuZy4gVUxJRCkuIFRyYWNrcyBjdXJyZW50IHZlcnNpb247IFMzIGhpc3Rvcnkga2V5LiAqL1xuICAgIHZpZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAgbGFzdFVwZGF0ZWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIGRlbGV0ZWQ6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgYnVuZGxlSWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICBtc2dJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB9LFxuICAgIC8vIEF1ZGl0IGlzIGluIEZISVIgcmVzb3VyY2UgbWV0YSAobWV0YS5leHRlbnNpb24pLCBub3QgaXRlbSBhdHRyaWJ1dGVzLiBTZWUgZGF0YS1zdG9yZS1lbnRpdGllcy5tZC5cbiAgICAvLyAtLS0gR1NJMiAoSWRlbnRpZmllciBMb29rdXApOiBvcHRpb25hbDsgc2V0IHdoZW4gaW5kZXhpbmcgdGhpcyBwYXRpZW50IGJ5IGlkZW50aWZpZXIgKGUuZy4gTVJOKVxuICAgIC8qKiBJZGVudGlmaWVyIHN5c3RlbSAoZS5nLiBNUk4gc3lzdGVtIFVSSSkuIFdoZW4gc2V0IHdpdGggaWRlbnRpZmllclZhbHVlLCBpdGVtIGlzIHdyaXR0ZW4gdG8gR1NJMi4gKi9cbiAgICBpZGVudGlmaWVyU3lzdGVtOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgLyoqIElkZW50aWZpZXIgdmFsdWUgKGUuZy4gTVJOKS4gV2hlbiBzZXQgd2l0aCBpZGVudGlmaWVyU3lzdGVtLCBpdGVtIGlzIHdyaXR0ZW4gdG8gR1NJMi4gKi9cbiAgICBpZGVudGlmaWVyVmFsdWU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICAvKiogRm9yIEdTSTIvR1NJMyBwcm9qZWN0aW9uOiBiYXNlIHRhYmxlIFBLL1NLIHNvIEdldEl0ZW0gY2FuIGJlIHVzZWQgYWZ0ZXIgcXVlcnkuICovXG4gICAgcmVzb3VyY2VQazoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB9LFxuICAgIHJlc291cmNlU2s6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICAvKiogRm9yIEdTSTIgcHJvamVjdGlvbjogZGlzcGxheSBuYW1lIGZvciByb3N0ZXIvbG9va3VwLiAqL1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICAvKiogRm9yIEdTSTIgcHJvamVjdGlvbjogcmVzb3VyY2Ugc3RhdHVzIGlmIGFwcGxpY2FibGUuICovXG4gICAgc3RhdHVzOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgLy8gLS0tIEdTSTMgKEZhY2lsaXR5IE9wcyk6IG9wdGlvbmFsOyBzZXQgd2hlbiBpbmRleGluZyB0aGlzIHBhdGllbnQgb24gYSBmYWNpbGl0eSByb3N0ZXJcbiAgICAvKiogRmFjaWxpdHkgaWQuIFdoZW4gc2V0IHdpdGggbm9ybWFsaXplZE5hbWUsIGl0ZW0gaXMgd3JpdHRlbiB0byBHU0kzLiAqL1xuICAgIGZhY2lsaXR5SWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICAvKiogTm9ybWFsaXplZCBkaXNwbGF5IG5hbWUgZm9yIHJvc3RlciBzb3J0LiBXaGVuIHNldCB3aXRoIGZhY2lsaXR5SWQsIGl0ZW0gaXMgd3JpdHRlbiB0byBHU0kzLiAqL1xuICAgIG5vcm1hbGl6ZWROYW1lOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0sXG4gIH0sXG4gIGluZGV4ZXM6IHtcbiAgICAvKiogQmFzZSB0YWJsZTogUEssIFNLIChkYXRhIHN0b3JlIGtleSBuYW1lcykuIFBLIGlzIGJ1aWx0IGZyb20gdGVuYW50SWQsIHdvcmtzcGFjZUlkLCBpZDsgZG8gbm90IHN1cHBseSBQSyBmcm9tIG91dHNpZGUuICovXG4gICAgcmVjb3JkOiB7XG4gICAgICBwazoge1xuICAgICAgICBmaWVsZDogXCJQS1wiLFxuICAgICAgICBjb21wb3NpdGU6IFtcInRlbmFudElkXCIsIFwid29ya3NwYWNlSWRcIiwgXCJpZFwiXSxcbiAgICAgICAgdGVtcGxhdGU6IFwiVElEIyR7dGVuYW50SWR9I1dJRCMke3dvcmtzcGFjZUlkfSNSVCNQYXRpZW50I0lEIyR7aWR9XCIsXG4gICAgICB9LFxuICAgICAgc2s6IHtcbiAgICAgICAgZmllbGQ6IFwiU0tcIixcbiAgICAgICAgY29tcG9zaXRlOiBbXCJza1wiXSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdTSTEg4oCUIFJldmVyc2UgUmVmZXJlbmNlOiBxdWVyeSBcIndoYXQgcmVmZXJlbmNlcyB0aGlzIHBhdGllbnQ/XCIuXG4gICAgICogUGF0aWVudCBpdGVtcyBhcmUgbmV2ZXIgd3JpdHRlbiB0byBHU0kxIChjb25kaXRpb246IGZhbHNlKTsgcmVmZXJlbmNlIGluZGV4IGl0ZW1zXG4gICAgICogYXJlIHdyaXR0ZW4gYnkgb3RoZXIgcmVzb3VyY2VzLiBUaGlzIGluZGV4IGVuYWJsZXMgcXVlcnlpbmcgR1NJMSBieSBSRUZUTyNSVCNQYXRpZW50I0lEIzxpZD4uXG4gICAgICovXG4gICAgZ3NpMToge1xuICAgICAgaW5kZXg6IFwiR1NJMVwiLFxuICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcbiAgICAgIHBrOiB7XG4gICAgICAgIGZpZWxkOiBcIkdTSTFQS1wiLFxuICAgICAgICBjb21wb3NpdGU6IFtcInRlbmFudElkXCIsIFwid29ya3NwYWNlSWRcIiwgXCJpZFwiXSxcbiAgICAgICAgdGVtcGxhdGU6XG4gICAgICAgICAgXCJUSUQjJHt0ZW5hbnRJZH0jV0lEIyR7d29ya3NwYWNlSWR9I1JFRlRPI1JUI1BhdGllbnQjSUQjJHtpZH1cIixcbiAgICAgIH0sXG4gICAgICBzazoge1xuICAgICAgICBmaWVsZDogXCJHU0kxU0tcIixcbiAgICAgICAgY29tcG9zaXRlOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8qKiBHU0kyIOKAlCBJZGVudGlmaWVyIExvb2t1cDogTVJOLCBOUEksIG1lbWJlciBJRCwgZXRjLiBLZXlzIGJ1aWx0IGZyb20gaWRlbnRpZmllciBjb21wb25lbnRzLiAqL1xuICAgIGdzaTI6IHtcbiAgICAgIGluZGV4OiBcIkdTSTJcIixcbiAgICAgIGNvbmRpdGlvbjogKGF0dHIpID0+XG4gICAgICAgIGF0dHIuaWRlbnRpZmllclN5c3RlbSAhPSBudWxsICYmIGF0dHIuaWRlbnRpZmllclZhbHVlICE9IG51bGwsXG4gICAgICBwazoge1xuICAgICAgICBmaWVsZDogXCJHU0kyUEtcIixcbiAgICAgICAgY29tcG9zaXRlOiBbXG4gICAgICAgICAgXCJ0ZW5hbnRJZFwiLFxuICAgICAgICAgIFwid29ya3NwYWNlSWRcIixcbiAgICAgICAgICBcImlkZW50aWZpZXJTeXN0ZW1cIixcbiAgICAgICAgICBcImlkZW50aWZpZXJWYWx1ZVwiLFxuICAgICAgICBdLFxuICAgICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgICBcIlRJRCMke3RlbmFudElkfSNXSUQjJHt3b3Jrc3BhY2VJZH0jSURFTlQjJHtpZGVudGlmaWVyU3lzdGVtfSMke2lkZW50aWZpZXJWYWx1ZX1cIixcbiAgICAgIH0sXG4gICAgICBzazoge1xuICAgICAgICBmaWVsZDogXCJHU0kyU0tcIixcbiAgICAgICAgY29tcG9zaXRlOiBbXCJpZFwiXSxcbiAgICAgICAgdGVtcGxhdGU6IFwiUlQjUGF0aWVudCNJRCMke2lkfVwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIC8qKiBHU0kzIOKAlCBGYWNpbGl0eSBPcHM6IGZhY2lsaXR5IHJvc3Rlciwgd29ya2xpc3RzLiBLZXlzIGJ1aWx0IGZyb20gZmFjaWxpdHkgKyBuYW1lLiAqL1xuICAgIGdzaTM6IHtcbiAgICAgIGluZGV4OiBcIkdTSTNcIixcbiAgICAgIGNvbmRpdGlvbjogKGF0dHIpID0+XG4gICAgICAgIGF0dHIuZmFjaWxpdHlJZCAhPSBudWxsICYmIGF0dHIubm9ybWFsaXplZE5hbWUgIT0gbnVsbCxcbiAgICAgIHBrOiB7XG4gICAgICAgIGZpZWxkOiBcIkdTSTNQS1wiLFxuICAgICAgICBjb21wb3NpdGU6IFtcInRlbmFudElkXCIsIFwid29ya3NwYWNlSWRcIiwgXCJmYWNpbGl0eUlkXCJdLFxuICAgICAgICB0ZW1wbGF0ZTogXCJUSUQjJHt0ZW5hbnRJZH0jV0lEIyR7d29ya3NwYWNlSWR9I0ZBQyMke2ZhY2lsaXR5SWR9XCIsXG4gICAgICB9LFxuICAgICAgc2s6IHtcbiAgICAgICAgZmllbGQ6IFwiR1NJM1NLXCIsXG4gICAgICAgIGNvbXBvc2l0ZTogW1wiaWRcIiwgXCJub3JtYWxpemVkTmFtZVwiXSxcbiAgICAgICAgdGVtcGxhdGU6IFwiVFlQRSNQQVRJRU5UI1BBVCMke2lkfSNOQU1FIyR7bm9ybWFsaXplZE5hbWV9XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAgLyoqIEdTSTQg4oCUIFJlc291cmNlIFR5cGUgSW5kZXg6IGxpc3QgYWxsIFBhdGllbnRzIGluIHdvcmtzcGFjZSAobm8gc2NhbikuICovXG4gICAgZ3NpNDoge1xuICAgICAgaW5kZXg6IFwiR1NJNFwiLFxuICAgICAgY29uZGl0aW9uOiAoKSA9PiB0cnVlLFxuICAgICAgcGs6IHtcbiAgICAgICAgZmllbGQ6IFwiR1NJNFBLXCIsXG4gICAgICAgIGNvbXBvc2l0ZTogW1widGVuYW50SWRcIiwgXCJ3b3Jrc3BhY2VJZFwiXSxcbiAgICAgICAgdGVtcGxhdGU6IFwiVElEIyR7dGVuYW50SWR9I1dJRCMke3dvcmtzcGFjZUlkfSNSVCNQYXRpZW50XCIsXG4gICAgICB9LFxuICAgICAgc2s6IHtcbiAgICAgICAgZmllbGQ6IFwiR1NJNFNLXCIsXG4gICAgICAgIGNvbXBvc2l0ZTogW1wiaWRcIl0sXG4gICAgICAgIHRlbXBsYXRlOiBcIklEIyR7aWR9XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcbiJdfQ==
@@ -0,0 +1,162 @@
1
+ import { Service } from "electrodb";
2
+ /**
3
+ * ElectroDB Service for the single-table data store. Provides access to Patient
4
+ * and other entities; use with the data store table (PK, SK, GSI1, GSI2, GSI3, GSI4).
5
+ */
6
+ export declare const EhrR4DataService: Service<{
7
+ patient: import("electrodb").Entity<string, string, string, {
8
+ model: {
9
+ entity: string;
10
+ service: string;
11
+ version: string;
12
+ };
13
+ attributes: {
14
+ sk: {
15
+ type: "string";
16
+ required: true;
17
+ default: string;
18
+ };
19
+ tenantId: {
20
+ type: "string";
21
+ required: true;
22
+ };
23
+ workspaceId: {
24
+ type: "string";
25
+ required: true;
26
+ };
27
+ id: {
28
+ type: "string";
29
+ required: true;
30
+ };
31
+ resource: {
32
+ type: "string";
33
+ required: true;
34
+ };
35
+ vid: {
36
+ type: "string";
37
+ required: true;
38
+ };
39
+ lastUpdated: {
40
+ type: "string";
41
+ required: true;
42
+ };
43
+ deleted: {
44
+ type: "boolean";
45
+ required: false;
46
+ };
47
+ bundleId: {
48
+ type: "string";
49
+ required: false;
50
+ };
51
+ msgId: {
52
+ type: "string";
53
+ required: false;
54
+ };
55
+ identifierSystem: {
56
+ type: "string";
57
+ required: false;
58
+ };
59
+ identifierValue: {
60
+ type: "string";
61
+ required: false;
62
+ };
63
+ resourcePk: {
64
+ type: "string";
65
+ required: false;
66
+ };
67
+ resourceSk: {
68
+ type: "string";
69
+ required: false;
70
+ };
71
+ display: {
72
+ type: "string";
73
+ required: false;
74
+ };
75
+ status: {
76
+ type: "string";
77
+ required: false;
78
+ };
79
+ facilityId: {
80
+ type: "string";
81
+ required: false;
82
+ };
83
+ normalizedName: {
84
+ type: "string";
85
+ required: false;
86
+ };
87
+ };
88
+ indexes: {
89
+ record: {
90
+ pk: {
91
+ field: string;
92
+ composite: ("id" | "tenantId" | "workspaceId")[];
93
+ template: string;
94
+ };
95
+ sk: {
96
+ field: string;
97
+ composite: "sk"[];
98
+ };
99
+ };
100
+ gsi1: {
101
+ index: string;
102
+ condition: () => boolean;
103
+ pk: {
104
+ field: string;
105
+ composite: ("id" | "tenantId" | "workspaceId")[];
106
+ template: string;
107
+ };
108
+ sk: {
109
+ field: string;
110
+ composite: never[];
111
+ };
112
+ };
113
+ gsi2: {
114
+ index: string;
115
+ condition: (attr: Record<string, unknown>) => boolean;
116
+ pk: {
117
+ field: string;
118
+ composite: ("tenantId" | "workspaceId" | "identifierSystem" | "identifierValue")[];
119
+ template: string;
120
+ };
121
+ sk: {
122
+ field: string;
123
+ composite: "id"[];
124
+ template: string;
125
+ };
126
+ };
127
+ gsi3: {
128
+ index: string;
129
+ condition: (attr: Record<string, unknown>) => boolean;
130
+ pk: {
131
+ field: string;
132
+ composite: ("tenantId" | "workspaceId" | "facilityId")[];
133
+ template: string;
134
+ };
135
+ sk: {
136
+ field: string;
137
+ composite: ("id" | "normalizedName")[];
138
+ template: string;
139
+ };
140
+ };
141
+ gsi4: {
142
+ index: string;
143
+ condition: () => boolean;
144
+ pk: {
145
+ field: string;
146
+ composite: ("tenantId" | "workspaceId")[];
147
+ template: string;
148
+ };
149
+ sk: {
150
+ field: string;
151
+ composite: "id"[];
152
+ template: string;
153
+ };
154
+ };
155
+ };
156
+ }>;
157
+ }>;
158
+ /**
159
+ * Returns an ElectroDB Service for the data store using the given table name.
160
+ * Use in tests with a dedicated table (e.g. "data-store-test" in jest-dynalite).
161
+ */
162
+ export declare function getEhrR4DataService(tableName: string): typeof EhrR4DataService;