@openhi/constructs 0.0.159 → 0.0.161

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 (129) hide show
  1. package/lib/{chunk-HQ67J7BP.mjs → chunk-5S6VFBLT.mjs} +12 -70
  2. package/lib/chunk-5S6VFBLT.mjs.map +1 -0
  3. package/lib/{chunk-MVQWAIMC.mjs → chunk-6BB4CRSS.mjs} +3 -312
  4. package/lib/chunk-6BB4CRSS.mjs.map +1 -0
  5. package/lib/{chunk-WPCBVDFZ.mjs → chunk-76UM2LQ5.mjs} +2 -2
  6. package/lib/chunk-7TRO2STL.mjs +4616 -0
  7. package/lib/chunk-7TRO2STL.mjs.map +1 -0
  8. package/lib/chunk-BUAYVN3C.mjs +87 -0
  9. package/lib/chunk-BUAYVN3C.mjs.map +1 -0
  10. package/lib/{chunk-23PUSHBV.mjs → chunk-D2Y6DDOC.mjs} +2 -2
  11. package/lib/chunk-DWSWCUZR.mjs +123 -0
  12. package/lib/chunk-DWSWCUZR.mjs.map +1 -0
  13. package/lib/{chunk-VZCPGQXA.mjs → chunk-EUIP2U5F.mjs} +69 -1
  14. package/lib/{chunk-VZCPGQXA.mjs.map → chunk-EUIP2U5F.mjs.map} +1 -1
  15. package/lib/chunk-GJTPXJKD.mjs +46 -0
  16. package/lib/chunk-GJTPXJKD.mjs.map +1 -0
  17. package/lib/chunk-I6LUPJUY.mjs +61 -0
  18. package/lib/chunk-I6LUPJUY.mjs.map +1 -0
  19. package/lib/{chunk-KR2Y2CVQ.mjs → chunk-KA3OMP3X.mjs} +2 -2
  20. package/lib/{chunk-ZM4GDHHC.mjs → chunk-KMEWULMX.mjs} +51 -3
  21. package/lib/chunk-KMEWULMX.mjs.map +1 -0
  22. package/lib/chunk-LKKLO66E.mjs +25 -0
  23. package/lib/chunk-LKKLO66E.mjs.map +1 -0
  24. package/lib/{chunk-CFJDATDK.mjs → chunk-MLFMW5IF.mjs} +43 -9
  25. package/lib/chunk-MLFMW5IF.mjs.map +1 -0
  26. package/lib/chunk-O5VQWB6U.mjs +315 -0
  27. package/lib/chunk-O5VQWB6U.mjs.map +1 -0
  28. package/lib/{chunk-7BQHLC7U.mjs → chunk-P3CTZWC2.mjs} +8 -40
  29. package/lib/chunk-P3CTZWC2.mjs.map +1 -0
  30. package/lib/chunk-P3NFCKTZ.mjs +502 -0
  31. package/lib/chunk-P3NFCKTZ.mjs.map +1 -0
  32. package/lib/{chunk-M7Y3BOQW.mjs → chunk-Q3MKITPY.mjs} +5 -5
  33. package/lib/chunk-Q64MOYJ7.mjs +218 -0
  34. package/lib/chunk-Q64MOYJ7.mjs.map +1 -0
  35. package/lib/chunk-RQKJNMX5.mjs +89 -0
  36. package/lib/chunk-RQKJNMX5.mjs.map +1 -0
  37. package/lib/{chunk-ZWSGM6PZ.mjs → chunk-SD7J3N3C.mjs} +2 -2
  38. package/lib/{chunk-7RZHFI77.mjs → chunk-VESULYQQ.mjs} +2 -2
  39. package/lib/{chunk-AOSEKL7U.mjs → chunk-WOTU36P3.mjs} +6 -103
  40. package/lib/chunk-WOTU36P3.mjs.map +1 -0
  41. package/lib/{chunk-X5E4YJGZ.mjs → chunk-YPTJJ35S.mjs} +2 -2
  42. package/lib/counter-apply-operation-DZM3MIDm.d.mts +63 -0
  43. package/lib/counter-apply-operation-DZM3MIDm.d.ts +63 -0
  44. package/lib/counter-maintenance.handler.d.mts +38 -0
  45. package/lib/counter-maintenance.handler.d.ts +38 -0
  46. package/lib/counter-maintenance.handler.js +2885 -0
  47. package/lib/counter-maintenance.handler.js.map +1 -0
  48. package/lib/counter-maintenance.handler.mjs +180 -0
  49. package/lib/counter-maintenance.handler.mjs.map +1 -0
  50. package/lib/counter-reconciliation.handler.d.mts +116 -0
  51. package/lib/counter-reconciliation.handler.d.ts +116 -0
  52. package/lib/counter-reconciliation.handler.js +3324 -0
  53. package/lib/counter-reconciliation.handler.js.map +1 -0
  54. package/lib/counter-reconciliation.handler.mjs +295 -0
  55. package/lib/counter-reconciliation.handler.mjs.map +1 -0
  56. package/lib/data-store-postgres-replication.handler.js +50 -2
  57. package/lib/data-store-postgres-replication.handler.js.map +1 -1
  58. package/lib/data-store-postgres-replication.handler.mjs +2 -2
  59. package/lib/delete-chunk.handler.js +118 -2
  60. package/lib/delete-chunk.handler.js.map +1 -1
  61. package/lib/delete-chunk.handler.mjs +3 -3
  62. package/lib/{events-DTgo2dcW.d.mts → events-TG654e7L.d.mts} +68 -19
  63. package/lib/{events-DTgo2dcW.d.ts → events-TG654e7L.d.ts} +68 -19
  64. package/lib/finalize.handler.js +50 -2
  65. package/lib/finalize.handler.js.map +1 -1
  66. package/lib/finalize.handler.mjs +4 -4
  67. package/lib/firehose-archive-transform.handler.js +50 -2
  68. package/lib/firehose-archive-transform.handler.js.map +1 -1
  69. package/lib/firehose-archive-transform.handler.mjs +2 -2
  70. package/lib/index.d.mts +1283 -4
  71. package/lib/index.d.ts +1389 -24
  72. package/lib/index.js +4113 -320
  73. package/lib/index.js.map +1 -1
  74. package/lib/index.mjs +602 -195
  75. package/lib/index.mjs.map +1 -1
  76. package/lib/list-chunks.handler.js +118 -2
  77. package/lib/list-chunks.handler.js.map +1 -1
  78. package/lib/list-chunks.handler.mjs +3 -3
  79. package/lib/platform-deploy-bridge.handler.js +50 -2
  80. package/lib/platform-deploy-bridge.handler.js.map +1 -1
  81. package/lib/platform-deploy-bridge.handler.mjs +1 -1
  82. package/lib/pre-token-generation.handler.js +68 -0
  83. package/lib/pre-token-generation.handler.js.map +1 -1
  84. package/lib/pre-token-generation.handler.mjs +9 -5
  85. package/lib/pre-token-generation.handler.mjs.map +1 -1
  86. package/lib/provision-default-workspace.handler.js +887 -4
  87. package/lib/provision-default-workspace.handler.js.map +1 -1
  88. package/lib/provision-default-workspace.handler.mjs +14 -9
  89. package/lib/provision-default-workspace.handler.mjs.map +1 -1
  90. package/lib/rename-finalize.handler.js +50 -2
  91. package/lib/rename-finalize.handler.js.map +1 -1
  92. package/lib/rename-finalize.handler.mjs +2 -2
  93. package/lib/rename-list-targets.handler.js +118 -2
  94. package/lib/rename-list-targets.handler.js.map +1 -1
  95. package/lib/rename-list-targets.handler.mjs +11 -9
  96. package/lib/rename-list-targets.handler.mjs.map +1 -1
  97. package/lib/rename-rewrite-chunk.handler.js +68 -0
  98. package/lib/rename-rewrite-chunk.handler.js.map +1 -1
  99. package/lib/rename-rewrite-chunk.handler.mjs +2 -2
  100. package/lib/rest-api-lambda.handler.js +1454 -251
  101. package/lib/rest-api-lambda.handler.js.map +1 -1
  102. package/lib/rest-api-lambda.handler.mjs +673 -821
  103. package/lib/rest-api-lambda.handler.mjs.map +1 -1
  104. package/lib/seed-demo-data.handler.d.mts +1 -1
  105. package/lib/seed-demo-data.handler.d.ts +1 -1
  106. package/lib/seed-demo-data.handler.js +4004 -201
  107. package/lib/seed-demo-data.handler.js.map +1 -1
  108. package/lib/seed-demo-data.handler.mjs +10 -7
  109. package/lib/seed-system-data.handler.js +118 -2
  110. package/lib/seed-system-data.handler.js.map +1 -1
  111. package/lib/seed-system-data.handler.mjs +5 -5
  112. package/package.json +1 -1
  113. package/lib/chunk-7BQHLC7U.mjs.map +0 -1
  114. package/lib/chunk-AOSEKL7U.mjs.map +0 -1
  115. package/lib/chunk-BQMJSDOD.mjs +0 -1136
  116. package/lib/chunk-BQMJSDOD.mjs.map +0 -1
  117. package/lib/chunk-CFJDATDK.mjs.map +0 -1
  118. package/lib/chunk-E6MCKJVS.mjs +0 -212
  119. package/lib/chunk-E6MCKJVS.mjs.map +0 -1
  120. package/lib/chunk-HQ67J7BP.mjs.map +0 -1
  121. package/lib/chunk-MVQWAIMC.mjs.map +0 -1
  122. package/lib/chunk-ZM4GDHHC.mjs.map +0 -1
  123. /package/lib/{chunk-WPCBVDFZ.mjs.map → chunk-76UM2LQ5.mjs.map} +0 -0
  124. /package/lib/{chunk-23PUSHBV.mjs.map → chunk-D2Y6DDOC.mjs.map} +0 -0
  125. /package/lib/{chunk-KR2Y2CVQ.mjs.map → chunk-KA3OMP3X.mjs.map} +0 -0
  126. /package/lib/{chunk-M7Y3BOQW.mjs.map → chunk-Q3MKITPY.mjs.map} +0 -0
  127. /package/lib/{chunk-ZWSGM6PZ.mjs.map → chunk-SD7J3N3C.mjs.map} +0 -0
  128. /package/lib/{chunk-7RZHFI77.mjs.map → chunk-VESULYQQ.mjs.map} +0 -0
  129. /package/lib/{chunk-X5E4YJGZ.mjs.map → chunk-YPTJJ35S.mjs.map} +0 -0
package/lib/index.d.ts CHANGED
@@ -8,12 +8,12 @@ import { Key, KeyProps, IKey } from 'aws-cdk-lib/aws-kms';
8
8
  import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
9
9
  import { AttributeValue } from '@aws-sdk/client-dynamodb';
10
10
  import * as events from 'aws-cdk-lib/aws-events';
11
- import { EventBus, EventBusProps, Archive, Rule, IEventBus } from 'aws-cdk-lib/aws-events';
11
+ import { EventBus, EventBusProps, Rule, IEventBus, Archive } from 'aws-cdk-lib/aws-events';
12
12
  import * as kinesis from 'aws-cdk-lib/aws-kinesis';
13
13
  import * as kinesisfirehose from 'aws-cdk-lib/aws-kinesisfirehose';
14
14
  import * as s3 from 'aws-cdk-lib/aws-s3';
15
15
  import { IBucket, BucketProps } from 'aws-cdk-lib/aws-s3';
16
- import { Table, TableProps, ITable } from 'aws-cdk-lib/aws-dynamodb';
16
+ import { ITable, Table, TableProps } from 'aws-cdk-lib/aws-dynamodb';
17
17
  import { IFunction, Function } from 'aws-cdk-lib/aws-lambda';
18
18
  import * as ec2 from 'aws-cdk-lib/aws-ec2';
19
19
  import * as rds from 'aws-cdk-lib/aws-rds';
@@ -22,8 +22,8 @@ import { StringParameterProps, StringParameter } from 'aws-cdk-lib/aws-ssm';
22
22
  import { Distribution, Function as Function$1, DistributionProps, CachePolicyProps, BehaviorOptions } from 'aws-cdk-lib/aws-cloudfront';
23
23
  import { StateMachine } from 'aws-cdk-lib/aws-stepfunctions';
24
24
  import { RenamableEntityType } from '@openhi/workflows';
25
- export { ControlPlaneOwningDeleteCompleteV1, ControlPlaneOwningDeleteCompleteV1Detail, ControlPlaneOwningDeleteFailedV1, ControlPlaneOwningDeleteFailedV1Detail, ControlPlaneOwningDeleteV1, ControlPlaneOwningDeleteV1Detail, ControlPlaneRenameCompleteV1, ControlPlaneRenameCompleteV1Detail, ControlPlaneRenameFailedV1, ControlPlaneRenameFailedV1Detail, ControlPlaneRenameV1, ControlPlaneRenameV1Detail, OPENHI_DATA_SOURCE, OPENHI_OPS_SOURCE, OWNING_ENTITY_TYPE, OwningEntityType, PlatformDeploymentCompletedV1, PlatformSystemDataSeededV1, RENAMABLE_ENTITY_TYPE, RenamableEntityType } from '@openhi/workflows';
26
- import { PlatformRoleCode, Patient, Practitioner, Observation, Encounter, Account } from '@openhi/types';
25
+ export { ControlPlaneMembershipCreatedV1, ControlPlaneMembershipDeletedV1, ControlPlaneOwningDeleteCompleteV1, ControlPlaneOwningDeleteCompleteV1Detail, ControlPlaneOwningDeleteFailedV1, ControlPlaneOwningDeleteFailedV1Detail, ControlPlaneOwningDeleteV1, ControlPlaneOwningDeleteV1Detail, ControlPlaneRenameCompleteV1, ControlPlaneRenameCompleteV1Detail, ControlPlaneRenameFailedV1, ControlPlaneRenameFailedV1Detail, ControlPlaneRenameV1, ControlPlaneRenameV1Detail, ControlPlaneRoleAssignmentCreatedV1, ControlPlaneRoleAssignmentDeletedV1, ControlPlaneWorkspaceCreatedV1, ControlPlaneWorkspaceDeletedV1, OPENHI_DATA_SOURCE, OPENHI_OPS_SOURCE, OWNING_ENTITY_TYPE, OwningEntityType, PlatformDeploymentCompletedV1, PlatformSystemDataSeededV1, RENAMABLE_ENTITY_TYPE, RenamableEntityType } from '@openhi/workflows';
26
+ import { PlatformRoleCode, Patient, Practitioner, Observation, Encounter, Account, Location, Organization, Coverage, Appointment, Condition, Procedure, Claim, PaymentNotice, Practitioner_Qualification } from '@openhi/types';
27
27
  import { PostConfirmationTriggerEvent } from 'aws-lambda';
28
28
 
29
29
  /*******************************************************************************
@@ -521,6 +521,44 @@ interface RenameCascadeFinalizeOutput {
521
521
  /** Env var the construct uses to inject the ops event bus name into the finalize Lambda. */
522
522
  declare const RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR: "RENAME_CASCADE_OPS_EVENT_BUS_NAME";
523
523
 
524
+ /**
525
+ * Kind of actor performing the operation (for audit trail and UI).
526
+ */
527
+ type OpenHiActorType = "human" | "internal-system" | "external-system";
528
+ /**
529
+ * Adapter or entry point that created the context (for audit and metrics).
530
+ */
531
+ type OpenHiContextSource = "rest" | "graphql" | "step-function";
532
+ /**
533
+ * OpenHI context: tenant/workspace scope and acting actor (human or system).
534
+ * Shared by REST, GraphQL, and Step Function adapters when calling the data operations layer.
535
+ * Used for tenant/workspace isolation, audit records, and merging into FHIR data on mutations.
536
+ *
537
+ * @see sites/www-docs/content/packages/@openhi/constructs/rest-api.md — Middleware (REST)
538
+ */
539
+ interface OpenHiContext {
540
+ /** Tenant (organization) scope; used for multi-tenant isolation and data partition. */
541
+ tenantId: string;
542
+ /** Workspace scope within the tenant; used for workspace-level isolation and data partition. */
543
+ workspaceId: string;
544
+ /** Timestamp of the request/operation (e.g. ISO 8601). */
545
+ date: string;
546
+ /** Stable identifier for the actor (human, internal system, or external integration). */
547
+ actorId: string;
548
+ /** Display name for the actor for audit and UI (e.g. "Jane Doe", "FHIR Sync Service"). */
549
+ actorName: string;
550
+ /** Kind of actor; optional, for audit and display. */
551
+ actorType?: OpenHiActorType;
552
+ /** Role scope for Configuration and other role-scoped resources; optional. */
553
+ roleId?: string;
554
+ /** Request or correlation ID for tracing across adapters and logs; optional. */
555
+ requestId?: string;
556
+ /** Adapter that created this context (rest, graphql, step-function); optional. */
557
+ source?: OpenHiContextSource;
558
+ /** OAuth or client identifier when the caller is an application; optional. */
559
+ clientId?: string;
560
+ }
561
+
524
562
  /**
525
563
  * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/events.md
526
564
  */
@@ -551,16 +589,54 @@ declare const DEMO_PERIOD: {
551
589
  readonly start: "2026-01-01T00:00:00Z";
552
590
  };
553
591
 
554
- /** Placeholder Tenant id seeded by the workflow as the dev-user `currentTenant`. */
592
+ /**
593
+ * Placeholder Tenant id.
594
+ *
595
+ * The placeholder is a **system sentinel**, not a user-facing demo
596
+ * tenant. It exists for two reasons:
597
+ *
598
+ * 1. `pre-token-generation.handler.ts` stamps this id into the
599
+ * JWT `ohi_tid` claim when a User cannot be resolved (no
600
+ * DynamoDB record, missing `currentTenant`/`currentWorkspace`,
601
+ * etc.) so the token still satisfies `openHiContextMiddleware`
602
+ * and downstream APIs return a deterministic 403 instead of
603
+ * crashing on a missing claim.
604
+ * 2. The seed workflow re-asserts a Tenant + Workspace record at
605
+ * these ids so the JWT fallback dereferences to a real DynamoDB
606
+ * row (avoids dangling references on read paths that follow
607
+ * `Tenant/placeholder-tenant-id`).
608
+ *
609
+ * Dev users' `currentTenant`/`currentWorkspace` no longer point here
610
+ * (issue #1301) — they point at the on-site demo tenant below. The
611
+ * placeholder records remain seeded purely as a structural sentinel.
612
+ */
555
613
  declare const PLACEHOLDER_TENANT_ID = "placeholder-tenant-id";
556
- /** Placeholder Workspace id seeded by the workflow as the dev-user `currentWorkspace`. */
614
+ /** Placeholder Workspace id. See {@link PLACEHOLDER_TENANT_ID}. */
557
615
  declare const PLACEHOLDER_WORKSPACE_ID = "placeholder-workspace-id";
616
+ /**
617
+ * Stable Tenant id for the on-site-medical UAT demo tenant
618
+ * (issue #1301). Downstream demo-data tickets (#1302 providers,
619
+ * #1303 facilities, #1304 patients/encounters, etc.) import this
620
+ * constant to attach their fixture resources without re-discovering
621
+ * the tenant.
622
+ *
623
+ * This is the tenant every seeded dev user lands on at sign-in
624
+ * (`currentTenant` on the seeded User resource). UAT testers see
625
+ * "On-Site Medical — Demo" in the Tenant Switcher on first sign-in.
626
+ */
627
+ declare const ON_SITE_DEMO_TENANT_ID = "on-site-demo-tenant";
628
+ /**
629
+ * Stable Workspace id under {@link ON_SITE_DEMO_TENANT_ID}. Single
630
+ * workspace for v1 UAT; workspace topology (per business line vs
631
+ * per jurisdiction) is deferred pending an ADR (#1301 design note).
632
+ */
633
+ declare const ON_SITE_DEMO_WORKSPACE_ID = "on-site-demo-workspace";
558
634
  /**
559
635
  * Dev-user descriptor. Every entry produces:
560
636
  * - one Cognito user (idempotent create-then-skip),
561
637
  * - one DynamoDB User record (id = `dev-<email-local-part>`),
562
- * - four Memberships (placeholder + the three demo tenants),
563
- * - four `tenant-admin` RoleAssignments (one per tenant the user
638
+ * - five Memberships (placeholder + on-site demo + three demo tenants),
639
+ * - five `tenant-admin` RoleAssignments (one per tenant the user
564
640
  * belongs to),
565
641
  * - one `system-admin` RoleAssignment scoped to {@link PLATFORM_SCOPE_TENANT_ID}.
566
642
  */
@@ -569,6 +645,10 @@ interface DemoDevUser {
569
645
  readonly id: string;
570
646
  /** Email used as the Cognito `Username` and as the seed for the password algorithm. */
571
647
  readonly email: string;
648
+ /** Given name, populated on the seeded User FHIR resource as `name[0].given[0]`. */
649
+ readonly firstName: string;
650
+ /** Family name, populated on the seeded User FHIR resource as `name[0].family`. */
651
+ readonly lastName: string;
572
652
  }
573
653
  /**
574
654
  * Hardcoded dev-user roster. Adding a new developer is a one-line
@@ -579,8 +659,9 @@ interface DemoDevUser {
579
659
  declare const DEV_USERS: ReadonlyArray<DemoDevUser>;
580
660
  /**
581
661
  * A single workspace inside a demo tenant. The mixed tenant has two
582
- * workspaces (wound-care and primary-care sub-workspaces); the other
583
- * two tenants have one each.
662
+ * workspaces (wound-care and primary-care sub-workspaces); every
663
+ * other tenant (placeholder, on-site demo, wound-care, primary-care)
664
+ * has exactly one.
584
665
  */
585
666
  interface DemoWorkspaceSpec {
586
667
  /** Stable id (DynamoDB record id; also drives the canonical OHI URN). */
@@ -601,9 +682,10 @@ interface DemoWorkspaceSpec {
601
682
  */
602
683
  interface DemoTenantSpec {
603
684
  /**
604
- * Scenario slug — `placeholder`, `demo-wound-care`, `demo-primary-care`,
605
- * `demo-mixed`. The placeholder tenant's slug is `placeholder`; the
606
- * three demo tenants use `demo-*` slugs.
685
+ * Scenario slug — `placeholder`, `on-site-demo`, `demo-wound-care`,
686
+ * `demo-primary-care`, `demo-mixed`. The placeholder tenant uses
687
+ * `placeholder`; the on-site UAT demo tenant uses `on-site-demo`
688
+ * (#1301); the three demo tenants use `demo-*` slugs.
607
689
  */
608
690
  readonly scenario: string;
609
691
  /** Stable id (DynamoDB record id; also drives the canonical OHI URN). */
@@ -614,17 +696,22 @@ interface DemoTenantSpec {
614
696
  readonly workspaces: ReadonlyArray<DemoWorkspaceSpec>;
615
697
  }
616
698
  /**
617
- * The full demo-tenant graph. Four entries: the placeholder tenant the
618
- * JWT-claim fallback resolves to, plus the three v1 demo scenarios
619
- * (OPS-009 §"v1 scenarios"):
699
+ * The full demo-tenant graph. Five entries: the placeholder tenant
700
+ * the JWT-claim fallback resolves to, the on-site-medical UAT demo
701
+ * tenant every dev user lands on at sign-in (#1301), and the three
702
+ * v1 demo scenarios (OPS-009 §"v1 scenarios"):
620
703
  *
621
704
  * 0. Placeholder tenant — dereferences the JWT-claim fallback in
622
- * `pre-token-generation.handler.ts` and acts as every dev user's
623
- * `currentTenant`/`currentWorkspace` so Post-Confirmation skips
624
- * default provisioning when a seeded User signs in.
625
- * 1. Single-workspace wound-care tenant.
626
- * 2. Single-workspace primary-care tenant.
627
- * 3. Two-workspace mixed tenant exercises the cross-workspace
705
+ * `pre-token-generation.handler.ts`. Carries no user-facing
706
+ * content; exists purely so the JWT fallback resolves to a real
707
+ * DynamoDB row instead of dangling.
708
+ * 1. On-site-medical UAT demo tenant — every seeded dev user's
709
+ * `currentTenant`/`currentWorkspace`. Downstream demo-data
710
+ * tickets (providers, facilities, patients) attach to this
711
+ * tenant via {@link ON_SITE_DEMO_TENANT_ID}.
712
+ * 2. Single-workspace wound-care tenant.
713
+ * 3. Single-workspace primary-care tenant.
714
+ * 4. Two-workspace mixed tenant — exercises the cross-workspace
628
715
  * isolation flow that single-workspace tenants cannot.
629
716
  */
630
717
  declare const DEMO_TENANT_SPECS: ReadonlyArray<DemoTenantSpec>;
@@ -2730,6 +2817,113 @@ declare class OpenHiRestApiService extends OpenHiService {
2730
2817
  protected resolveRuntimeConfigEnvVars(): Record<string, string>;
2731
2818
  }
2732
2819
 
2820
+ /**
2821
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/counter-maintenance/events.md
2822
+ *
2823
+ * Wiring constants for the ADR-028 counter-maintenance consumer: the
2824
+ * dedup consumer name and the set of `openhi.control` detail-types the
2825
+ * EventBridge rule routes to the Lambda.
2826
+ */
2827
+ /**
2828
+ * Stable logical name this workflow registers with the shared
2829
+ * `WorkflowDedupTable` (TR-015). Used in both the construct grant
2830
+ * (`WorkflowDedupTable.grantConsumerFromLookup(... , COUNTER_MAINTENANCE_CONSUMER_NAME)`)
2831
+ * and the handler's runtime `recordIfAbsent` call — keep them aligned by
2832
+ * importing this constant in both places.
2833
+ */
2834
+ declare const COUNTER_MAINTENANCE_CONSUMER_NAME = "counter-maintenance";
2835
+ /**
2836
+ * The six `openhi.control` detail-types the counter-maintenance consumer
2837
+ * subscribes to. The EventBridge rule matches `source: ["openhi.control"]`
2838
+ * and this exact detail-type list; the handler dispatches on the
2839
+ * `detail-type` to choose the counter routing.
2840
+ */
2841
+ declare const COUNTER_MAINTENANCE_DETAIL_TYPES: readonly [string, string, string, string, string, string];
2842
+
2843
+ interface CounterMaintenanceLambdaProps {
2844
+ /**
2845
+ * Control event bus carrying the `openhi.control` membership /
2846
+ * role-assignment / workspace lifecycle events. The Rule mounts here.
2847
+ */
2848
+ readonly controlEventBus: IEventBus;
2849
+ /**
2850
+ * Data-store table the consumer applies atomic counter ADDs against.
2851
+ * Wired via `DYNAMO_TABLE_NAME`; granted `dynamodb:UpdateItem` (the
2852
+ * counter mutation is a conditional `ADD` — no reads, no other writes).
2853
+ */
2854
+ readonly dataStoreTable: ITable;
2855
+ }
2856
+ /** Lambda + EventBridge Rule for the counter-maintenance consumer. */
2857
+ declare class CounterMaintenanceLambda extends Construct {
2858
+ readonly lambda: NodejsFunction;
2859
+ readonly rule: Rule;
2860
+ constructor(scope: Construct, props: CounterMaintenanceLambdaProps);
2861
+ }
2862
+
2863
+ /**
2864
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/counter-maintenance/counter-maintenance-workflow.md
2865
+ *
2866
+ * ADR-028 counter-maintenance workflow. Subscribes to the control-plane
2867
+ * membership / role-assignment / workspace lifecycle events on the
2868
+ * control event bus and maintains the denormalized counters on the
2869
+ * canonical Tenant / Workspace / User records via idempotent atomic ADD.
2870
+ *
2871
+ * Mounted on the data-service stack so the IAM grant against the
2872
+ * data-store table stays local. The control event bus and the workflow
2873
+ * dedup table reach in cross-stack via the SSM lookups
2874
+ * `OpenHiGlobalService.controlEventBusFromConstruct` and
2875
+ * `WorkflowDedupTable.grantConsumerFromLookup` respectively — the same
2876
+ * pattern the seed-demo-data workflow uses.
2877
+ */
2878
+ interface CounterMaintenanceWorkflowProps {
2879
+ /** Control event bus carrying the `openhi.control` counter-relevant events. */
2880
+ readonly controlEventBus: IEventBus;
2881
+ /** Data-store table the counters live on / are mutated against. */
2882
+ readonly dataStoreTable: ITable;
2883
+ }
2884
+ /** Composes the counter-maintenance Lambda and wires it to the dedup table. */
2885
+ declare class CounterMaintenanceWorkflow extends Construct {
2886
+ readonly counterMaintenance: CounterMaintenanceLambda;
2887
+ constructor(scope: Construct, props: CounterMaintenanceWorkflowProps);
2888
+ }
2889
+
2890
+ interface CounterReconciliationLambdaProps {
2891
+ /**
2892
+ * Data-store table the job recomputes counters from and SETs the
2893
+ * repaired values onto. Wired via `DYNAMO_TABLE_NAME`; granted read +
2894
+ * write because the sweep reads every canonical record (and its GSI1 /
2895
+ * projection rows) and writes the recomputed counter back.
2896
+ */
2897
+ readonly dataStoreTable: ITable;
2898
+ }
2899
+ /** On-demand Lambda for the counter-reconciliation job (no EventBridge trigger). */
2900
+ declare class CounterReconciliationLambda extends Construct {
2901
+ readonly lambda: NodejsFunction;
2902
+ constructor(scope: Construct, props: CounterReconciliationLambdaProps);
2903
+ }
2904
+
2905
+ /**
2906
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/counter-reconciliation/counter-reconciliation-workflow.md
2907
+ *
2908
+ * ADR-028 counter-reconciliation workflow. Composes the on-demand
2909
+ * reconciliation Lambda and mounts it on the data-service stack so the
2910
+ * DynamoDB grant against the data-store table stays local.
2911
+ *
2912
+ * Unlike the event-driven counter-maintenance workflow, this job needs no
2913
+ * control-event-bus subscription and no `WorkflowDedupTable` wiring — it
2914
+ * is invoked on demand and is idempotent (it SETs absolute recomputed
2915
+ * values, so re-running corrects nothing on unchanged data).
2916
+ */
2917
+ interface CounterReconciliationWorkflowProps {
2918
+ /** Data-store table the job recomputes counters from / repairs. */
2919
+ readonly dataStoreTable: ITable;
2920
+ }
2921
+ /** Composes the counter-reconciliation Lambda. */
2922
+ declare class CounterReconciliationWorkflow extends Construct {
2923
+ readonly counterReconciliation: CounterReconciliationLambda;
2924
+ constructor(scope: Construct, props: CounterReconciliationWorkflowProps);
2925
+ }
2926
+
2733
2927
  /**
2734
2928
  * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/data-plane-fixtures.md
2735
2929
  *
@@ -2769,6 +2963,111 @@ interface DemoWorkspaceDataPlaneFixtures {
2769
2963
  readonly observations: ReadonlyArray<Observation>;
2770
2964
  readonly encounters: ReadonlyArray<Encounter>;
2771
2965
  readonly accounts: ReadonlyArray<Account>;
2966
+ /**
2967
+ * Facility (FHIR Location) fixtures. Optional — only the
2968
+ * on-site UAT demo workspace seeds facilities (#1303). Defaults
2969
+ * to the empty array when omitted.
2970
+ */
2971
+ readonly locations?: ReadonlyArray<Location>;
2972
+ /**
2973
+ * Directory Organization fixtures (#1308). Optional — only the
2974
+ * on-site UAT demo workspace seeds Organizations today. Covers
2975
+ * DME suppliers and insurance payor contacts; defaults to the
2976
+ * empty array when omitted.
2977
+ */
2978
+ readonly organizations?: ReadonlyArray<Organization>;
2979
+ /**
2980
+ * Insurance Coverage fixtures (#1304). Optional — only the
2981
+ * on-site UAT demo workspace seeds Coverages today. Defaults to
2982
+ * the empty array when omitted. Coverages reference their
2983
+ * `beneficiary` Patient via `Patient/<id>`, so the seeder writes
2984
+ * Coverages after Patients in the same workspace pass.
2985
+ */
2986
+ readonly coverages?: ReadonlyArray<Coverage>;
2987
+ /**
2988
+ * Optional dynamic Patient builder. Resolved by the seeder at
2989
+ * write time so per-tenant fixtures that depend on other
2990
+ * fixture modules (cross-module references between blocks +
2991
+ * facilities + facility patients) can be evaluated lazily,
2992
+ * avoiding the TDZ that hits when one fixture module reads a
2993
+ * top-level const from another mid-cycle. When set, the seeder
2994
+ * iterates `buildPatients()` instead of `patients`.
2995
+ */
2996
+ readonly buildPatients?: () => ReadonlyArray<Patient>;
2997
+ /**
2998
+ * Optional dynamic Coverage builder. Same lazy-evaluation
2999
+ * contract as {@link buildPatients}.
3000
+ */
3001
+ readonly buildCoverages?: () => ReadonlyArray<Coverage>;
3002
+ /**
3003
+ * Optional dynamic Appointment builder. Resolved by the seeder
3004
+ * with `baseContext` so block-style Appointments can anchor
3005
+ * their recurrence to the current ISO week (#1303 — block
3006
+ * Appointments must show up at a useful position on the demo
3007
+ * calendar relative to "today"). When omitted, no Appointments
3008
+ * are written for this workspace.
3009
+ */
3010
+ readonly buildAppointments?: (baseContext: OpenHiContext) => ReadonlyArray<Appointment>;
3011
+ /**
3012
+ * Optional static wound / problem Condition fixtures (#1306).
3013
+ * Wound Conditions reference their Patient via `subject` and
3014
+ * sit upstream of wound-exam Observations (which reference the
3015
+ * Condition via `focus`) and wound Procedures (which reference
3016
+ * the Condition via `reasonReference`). The seeder writes
3017
+ * Conditions immediately after Patients so the reference chain
3018
+ * resolves cleanly on read paths.
3019
+ */
3020
+ readonly conditions?: ReadonlyArray<Condition>;
3021
+ /**
3022
+ * Optional static Procedure fixtures (#1306). Procedures
3023
+ * reference their Encounter via `encounter`, their wound
3024
+ * Condition via `reasonReference[0]`, and their Patient via
3025
+ * `subject`. Written after Encounters and Conditions so the
3026
+ * reference chain resolves cleanly on read paths.
3027
+ */
3028
+ readonly procedures?: ReadonlyArray<Procedure>;
3029
+ /**
3030
+ * Optional dynamic Condition builder. Same lazy-evaluation
3031
+ * contract as {@link buildPatients} — used so the on-site
3032
+ * encounter fixtures can anchor wound Conditions to the same
3033
+ * `baseContext.date` window the encounter dates are derived
3034
+ * from.
3035
+ */
3036
+ readonly buildConditions?: (baseContext: OpenHiContext) => ReadonlyArray<Condition>;
3037
+ /**
3038
+ * Optional dynamic Encounter builder. Same lazy-evaluation
3039
+ * contract as {@link buildPatients} — encounter dates depend on
3040
+ * `baseContext.date` (past block occurrences for facility
3041
+ * patients, past visit cadence for home-health patients).
3042
+ */
3043
+ readonly buildEncounters?: (baseContext: OpenHiContext) => ReadonlyArray<Encounter>;
3044
+ /**
3045
+ * Optional dynamic Observation builder. Same lazy-evaluation
3046
+ * contract as {@link buildPatients} — wound-exam Observations
3047
+ * reference encounters that depend on `baseContext.date`.
3048
+ */
3049
+ readonly buildObservations?: (baseContext: OpenHiContext) => ReadonlyArray<Observation>;
3050
+ /**
3051
+ * Optional dynamic Procedure builder. Same lazy-evaluation
3052
+ * contract as {@link buildPatients} — wound Procedures
3053
+ * reference encounters that depend on `baseContext.date`.
3054
+ */
3055
+ readonly buildProcedures?: (baseContext: OpenHiContext) => ReadonlyArray<Procedure>;
3056
+ /**
3057
+ * Optional dynamic Claim builder (#1307). Claims reference
3058
+ * the encounter they bill via `item[].encounter`, the
3059
+ * patient's primary Coverage via `insurance[0].coverage`, and
3060
+ * therefore depend on the encounter + coverage builders above.
3061
+ * Written after Procedures so every reference chain resolves
3062
+ * cleanly on read paths.
3063
+ */
3064
+ readonly buildClaims?: (baseContext: OpenHiContext) => ReadonlyArray<Claim>;
3065
+ /**
3066
+ * Optional dynamic PaymentNotice builder (#1307). One
3067
+ * PaymentNotice per accepted Claim; references the Claim via
3068
+ * `request` + `payment`. Written after Claims.
3069
+ */
3070
+ readonly buildPaymentNotices?: (baseContext: OpenHiContext) => ReadonlyArray<PaymentNotice>;
2772
3071
  }
2773
3072
  /**
2774
3073
  * Per-workspace fixtures the data-plane phase writes on every fire.
@@ -2808,6 +3107,1041 @@ declare const DEMO_DATA_PLANE_FIXTURES: ReadonlyArray<DemoWorkspaceDataPlaneFixt
2808
3107
  */
2809
3108
  declare const PLATFORM_SCOPE_TENANT_ID = "platform";
2810
3109
 
3110
+ /**
3111
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-blocks.md
3112
+ *
3113
+ * Hand-authored weekly scheduling block fixtures the
3114
+ * `seed-demo-data` workflow upserts into the on-site-medical UAT
3115
+ * demo tenant ({@link ON_SITE_DEMO_TENANT_ID} +
3116
+ * {@link ON_SITE_DEMO_WORKSPACE_ID}) on every non-prod deploy
3117
+ * (issue #1303).
3118
+ *
3119
+ * Modelling choice: blocks are represented as FHIR
3120
+ * `Appointment` resources with `appointmentType.code = "block"`
3121
+ * (matching the on-site app's `isBlockAppointment` helper at
3122
+ * `sites/app-ehr/src/types/appointment.ts`). The on-site
3123
+ * calendar reads `Appointment` records, not `Schedule`/`Slot`
3124
+ * resources, so seeding `Appointment`s is the path that
3125
+ * actually renders something for UAT testers. Each block is
3126
+ * "recurring weekly" — we materialize that as a window of
3127
+ * concrete weekly occurrences anchored to the week containing
3128
+ * the seeder's `baseContext.date`, so blocks always show up at
3129
+ * a useful position relative to "today" on the demo schedule.
3130
+ *
3131
+ * Topology — issue #1303 design:
3132
+ * - Facility 1 (Druid Hills Skilled Nursing) — TWO weekly
3133
+ * blocks: Tuesday + Thursday (the high-volume facility).
3134
+ * - Facility 2 (Buckhead Rehabilitation Center) — one
3135
+ * weekly block on Wednesday.
3136
+ * - Facility 3 (Decatur Senior Living) — one weekly block
3137
+ * on Monday.
3138
+ *
3139
+ * Each block is assigned one doctor and one scribe from the
3140
+ * demo provider pool (#1302). Doctors are distributed so no
3141
+ * single doctor covers all four blocks. Capacities accommodate
3142
+ * 12-20 patients each (the upstream patient-distribution
3143
+ * ticket #1304 reads {@link ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL}
3144
+ * to spread patients across blocks).
3145
+ */
3146
+ /**
3147
+ * Extension URL stamped on every block Appointment carrying the
3148
+ * block's intended capacity (number of patients the block can
3149
+ * accommodate). FHIR Appointment has no first-class capacity
3150
+ * field, so we publish a local URL under the on-site
3151
+ * convention.
3152
+ */
3153
+ declare const ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/block-capacity";
3154
+ /** Coding system the on-site app expects on Appointment.appointmentType. */
3155
+ declare const ON_SITE_APPOINTMENT_TYPE_SYSTEM = "https://onsite-medical.org/appointment-type";
3156
+ /**
3157
+ * Weeks of past occurrences materialized per block. Past
3158
+ * occurrences let UAT testers exercise "history" views without
3159
+ * waiting through time.
3160
+ */
3161
+ declare const BLOCK_OCCURRENCE_WEEKS_PAST = 4;
3162
+ /**
3163
+ * Weeks of future occurrences materialized per block. Future
3164
+ * occurrences cover the calendar's default "month ahead"
3165
+ * window plus room for testers to navigate forward.
3166
+ */
3167
+ declare const BLOCK_OCCURRENCE_WEEKS_FUTURE = 8;
3168
+ /**
3169
+ * Total weekly occurrences materialized per block template
3170
+ * (past + current week + future). Re-fires with the same
3171
+ * `baseContext.date` produce byte-identical occurrence ids.
3172
+ */
3173
+ declare const BLOCK_OCCURRENCES_PER_TEMPLATE: number;
3174
+ /**
3175
+ * ISO day-of-week index used by {@link BlockTemplate.dayOfWeek}.
3176
+ * 1 = Monday, ..., 7 = Sunday (matches ISO 8601 / FHIR usage).
3177
+ */
3178
+ type IsoDayOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7;
3179
+ /** Stable block-template ids in dispatch order. Re-exported for downstream tickets. */
3180
+ declare const ON_SITE_DEMO_BLOCK_TEMPLATE_IDS: ReadonlyArray<string>;
3181
+ /**
3182
+ * Materialize every block template's weekly occurrences,
3183
+ * anchored to the Monday of the ISO week containing
3184
+ * `referenceIso` (typically `baseContext.date`). Each template
3185
+ * produces {@link BLOCK_OCCURRENCES_PER_TEMPLATE} appointments:
3186
+ * `BLOCK_OCCURRENCE_WEEKS_PAST` past weeks, the current week,
3187
+ * and `BLOCK_OCCURRENCE_WEEKS_FUTURE` future weeks. With the
3188
+ * default window of 4 + 1 + 8 = 13 occurrences per template ×
3189
+ * 4 templates, the seeder writes 52 block Appointments per
3190
+ * fire.
3191
+ *
3192
+ * Idempotency: ids are derived from `(templateId, weekOffset)`,
3193
+ * not from a wall-clock timestamp, so re-fires of the seeder
3194
+ * with the same `referenceIso` upsert the same Appointment
3195
+ * records (no duplicates). A re-fire with a different
3196
+ * `referenceIso` (e.g., the deploy event days later) writes a
3197
+ * new set of occurrences and leaves prior weeks' records as
3198
+ * orphaned past history — that is acceptable for UAT.
3199
+ */
3200
+ declare const buildOnSiteDemoBlockAppointments: (referenceIso: string) => ReadonlyArray<Appointment>;
3201
+ /**
3202
+ * Stable per-template (doctor, scribe) pair for the on-site
3203
+ * block schedule. Downstream tickets (e.g., the patient-
3204
+ * distribution helper in #1304) call this to look up which
3205
+ * provider pair staffs a given block without re-reading the
3206
+ * block-template list.
3207
+ */
3208
+ declare const findOnSiteDemoBlockTemplate: (templateId: string) => {
3209
+ readonly id: string;
3210
+ readonly facilityId: string;
3211
+ readonly displayName: string;
3212
+ readonly doctorId: string;
3213
+ readonly scribeId: string;
3214
+ readonly capacity: number;
3215
+ readonly dayOfWeek: IsoDayOfWeek;
3216
+ } | undefined;
3217
+
3218
+ /**
3219
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-claims.md
3220
+ *
3221
+ * Hand-authored Claim + PaymentNotice fixtures the `seed-demo-data`
3222
+ * workflow upserts into the on-site-medical UAT demo tenant
3223
+ * ({@link ON_SITE_DEMO_TENANT_ID} + {@link ON_SITE_DEMO_WORKSPACE_ID})
3224
+ * on every non-prod deploy (issue #1307).
3225
+ *
3226
+ * Topology — issue #1307 design:
3227
+ * - For each historical encounter (#1306), decide deterministically
3228
+ * whether the visit is billed or explicitly unbilled. The unbilled
3229
+ * decision is recorded by the *absence* of a Claim resource on
3230
+ * that encounter id; the on-site UI can derive "unbilled" by
3231
+ * listing claims and finding no match for an encounter.
3232
+ * - Billed encounters get exactly one {@link Claim} resource keyed
3233
+ * `<encounter-id>-claim`. The Claim carries:
3234
+ * - `status: "active"` (FHIR R4 enum only has
3235
+ * `active|cancelled|draft|entered-in-error`, none of which
3236
+ * encode our domain workflow status — see
3237
+ * {@link CLAIM_WORKFLOW_STATUS_EXTENSION_URL}).
3238
+ * - `claim-workflow-status` extension carrying the domain
3239
+ * status: `submitted` / `accepted` / `rejected` /
3240
+ * `reworked` / `resubmitted`.
3241
+ * - `insurance[0].coverage` referencing the patient's primary
3242
+ * {@link Coverage} (which is what carries the actual payor).
3243
+ * - `item[]` carrying one line: a wound-debridement CPT for
3244
+ * encounters that have a procedure (#1306), otherwise an
3245
+ * E/M visit code (99213/99214/99215) chosen deterministically.
3246
+ * - `total` denormalised from the single line item's `net`.
3247
+ * - Accepted claims get a {@link PaymentNotice} resource keyed
3248
+ * `<encounter-id>-payment` whose `paymentStatus` CodeableConcept
3249
+ * carries the domain payment status: `partial` / `full` /
3250
+ * `write-off`. Submitted / rejected / reworked / resubmitted
3251
+ * claims do not emit a PaymentNotice — the "in flux" subset is
3252
+ * specifically every `submitted` claim with no PaymentNotice.
3253
+ *
3254
+ * Modelling choices:
3255
+ * - **Single Claim per encounter** (not a chain). The "reworked"
3256
+ * status implies history (original rejected → resubmitted),
3257
+ * denormalised onto the same Claim via the
3258
+ * `claim-workflow-status` extension. On-site's current UI
3259
+ * (`sites/app-ehr/src/pages/patient/tabs/insurance/ClaimsTable.tsx`)
3260
+ * shows a single status badge per claim and does not need a
3261
+ * chain to render correctly.
3262
+ * - **PaymentNotice over a denormalised payment summary** —
3263
+ * PaymentNotice operations already exist in the data layer
3264
+ * (`packages/@openhi/constructs/src/data/operations/data/paymentnotice/`),
3265
+ * so we lean on real FHIR resources rather than adding a new
3266
+ * extension schema.
3267
+ * - **Domain status as an extension** — FHIR R4 `Claim.status`
3268
+ * does not include the workflow-status concepts the demo
3269
+ * needs, and stamping a non-standard string onto the enum
3270
+ * would fail the zod schema. The extension approach mirrors
3271
+ * how on-site already encodes domain state on other
3272
+ * resources (hospice status, QMB status, care-context, etc.).
3273
+ *
3274
+ * Distribution targets — chosen so all 5 workflow statuses plus
3275
+ * unbilled appear in the demo data, with payment-status variety
3276
+ * on the accepted bucket and a meaningful "in flux" submitted
3277
+ * bucket:
3278
+ * - ~15% of encounters are unbilled (no Claim)
3279
+ * - ~20% of claims are submitted (no PaymentNotice — "in flux")
3280
+ * - ~45% of claims are accepted (with PaymentNotice)
3281
+ * - ~40% of accepted: partial payment
3282
+ * - ~40% of accepted: full payment
3283
+ * - ~20% of accepted: write-off
3284
+ * - ~10% of claims are rejected
3285
+ * - ~15% of claims are reworked
3286
+ * - ~10% of claims are resubmitted
3287
+ *
3288
+ * Ids are deterministic — re-fires upsert the same records,
3289
+ * matching the workflow's idempotency contract.
3290
+ */
3291
+ /**
3292
+ * Extension URL stamped on every seeded Claim recording the
3293
+ * domain workflow status — submitted / accepted / rejected /
3294
+ * reworked / resubmitted. FHIR R4 `Claim.status` only carries
3295
+ * the lifecycle states `active|cancelled|draft|entered-in-error`,
3296
+ * so the demo's workflow status sits on this extension instead
3297
+ * of squeezing into the base enum.
3298
+ */
3299
+ declare const CLAIM_WORKFLOW_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/claim-workflow-status";
3300
+ /** Sub-extension under {@link CLAIM_WORKFLOW_STATUS_EXTENSION_URL}. */
3301
+ declare const CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL = "status";
3302
+ /** Sub-extension under {@link CLAIM_WORKFLOW_STATUS_EXTENSION_URL}. */
3303
+ declare const CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL = "lastTransition";
3304
+ /**
3305
+ * Domain workflow status values written to
3306
+ * {@link CLAIM_WORKFLOW_STATUS_EXTENSION_URL}.
3307
+ */
3308
+ declare const CLAIM_WORKFLOW_STATUS: {
3309
+ readonly SUBMITTED: "submitted";
3310
+ readonly ACCEPTED: "accepted";
3311
+ readonly REJECTED: "rejected";
3312
+ readonly REWORKED: "reworked";
3313
+ readonly RESUBMITTED: "resubmitted";
3314
+ };
3315
+ type ClaimWorkflowStatus = (typeof CLAIM_WORKFLOW_STATUS)[keyof typeof CLAIM_WORKFLOW_STATUS];
3316
+ /**
3317
+ * Domain payment status values written to
3318
+ * {@link PaymentNotice.paymentStatus} on accepted claims.
3319
+ */
3320
+ declare const PAYMENT_STATUS: {
3321
+ readonly PARTIAL: "partial";
3322
+ readonly FULL: "full";
3323
+ readonly WRITE_OFF: "write-off";
3324
+ };
3325
+ type PaymentStatus = (typeof PAYMENT_STATUS)[keyof typeof PAYMENT_STATUS];
3326
+ /** CodeSystem URL stamped on the {@link PaymentNotice.paymentStatus} coding. */
3327
+ declare const PAYMENT_STATUS_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/payment-status";
3328
+ /**
3329
+ * Test seam — clear caches between test invocations so stale
3330
+ * state from a prior seed run does not leak into the next.
3331
+ */
3332
+ declare const __resetOnSiteDemoClaimCachesForTests: () => void;
3333
+ /**
3334
+ * Materialise every Claim resource for the on-site UAT demo
3335
+ * workspace. Walks every historical encounter (#1306); skips the
3336
+ * ~15% flagged as unbilled. Returns an empty array if no
3337
+ * encounter metadata is available (intake-only deployments).
3338
+ */
3339
+ declare const buildOnSiteDemoClaims: (referenceIso: string) => ReadonlyArray<Claim>;
3340
+ /**
3341
+ * Materialise every PaymentNotice resource for the on-site UAT
3342
+ * demo workspace. One per `accepted` Claim (no PaymentNotice on
3343
+ * submitted / rejected / reworked / resubmitted — submitted-with-
3344
+ * no-payment is the "in flux" subset the AC asks for).
3345
+ */
3346
+ declare const buildOnSiteDemoPaymentNotices: (referenceIso: string) => ReadonlyArray<PaymentNotice>;
3347
+ /**
3348
+ * Stable list of every Claim id seeded for the on-site UAT demo
3349
+ * workspace, anchored to `referenceIso`. Order matches the
3350
+ * underlying encounter list. Downstream tickets (#1308 — billing
3351
+ * directory, etc.) read this to fan out per-claim work.
3352
+ */
3353
+ declare const onSiteDemoClaimIds: (referenceIso: string) => ReadonlyArray<string>;
3354
+ /**
3355
+ * Stable list of every PaymentNotice id seeded for the on-site
3356
+ * UAT demo workspace, anchored to `referenceIso`.
3357
+ */
3358
+ declare const onSiteDemoPaymentNoticeIds: (referenceIso: string) => ReadonlyArray<string>;
3359
+ /**
3360
+ * Encounter ids the seeder flags as unbilled (no Claim emitted).
3361
+ * Exposed so tests and downstream tickets can assert the
3362
+ * unbilled cut without re-deriving the hash.
3363
+ */
3364
+ declare const onSiteDemoUnbilledEncounterIds: (referenceIso: string) => ReadonlyArray<string>;
3365
+ /**
3366
+ * Encounter ids the seeder flags as billed (one Claim emitted per
3367
+ * id). Exposed so tests and downstream tickets can fan out per
3368
+ * billed encounter without re-deriving the hash.
3369
+ */
3370
+ declare const onSiteDemoBilledEncounterIds: (referenceIso: string) => ReadonlyArray<string>;
3371
+
3372
+ /**
3373
+ * FHIR `Organization.type[0].coding.system` for the standard
3374
+ * organization-type valueset. Carrying the standard coding alongside
3375
+ * the domain category keeps the bodies interoperable.
3376
+ */
3377
+ declare const FHIR_ORGANIZATION_TYPE_SYSTEM = "http://terminology.hl7.org/CodeSystem/organization-type";
3378
+ /**
3379
+ * On-site domain category system for directory categorisation —
3380
+ * separates `dme-supplier` from `insurance-payor` so the directory
3381
+ * UI's category filter can match a single coding without parsing
3382
+ * the FHIR-standard `prov` / `pay` codes.
3383
+ */
3384
+ declare const ON_SITE_DIRECTORY_CATEGORY_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/directory-category";
3385
+ /** Domain category code stamped on every DME-supplier Organization. */
3386
+ declare const DME_SUPPLIER_CATEGORY_CODE = "dme-supplier";
3387
+ /** Domain category code stamped on every insurance-payor Organization. */
3388
+ declare const INSURANCE_PAYOR_CATEGORY_CODE = "insurance-payor";
3389
+ /**
3390
+ * Sub-category coding system stamped on the payor Organization's
3391
+ * `type[1]` so the directory UI can group payors by plan family
3392
+ * (commercial / Medicare / Medicare Advantage) without re-parsing
3393
+ * the display name. Mirrors the
3394
+ * {@link COVERAGE_PAYOR_TYPE_SYSTEM} convention used on Coverage
3395
+ * resources in #1304.
3396
+ */
3397
+ declare const INSURANCE_PAYOR_PLAN_TYPE_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/payor-plan-type";
3398
+ /** Commercial plan payor (Aetna, Cigna, UnitedHealthcare, etc.). */
3399
+ declare const PAYOR_PLAN_TYPE_COMMERCIAL = "commercial";
3400
+ /** Traditional Medicare (FFS) — single payor. */
3401
+ declare const PAYOR_PLAN_TYPE_MEDICARE = "medicare";
3402
+ /** Medicare Advantage plan payor (Humana MA, Anthem MA, etc.). */
3403
+ declare const PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE = "medicare-advantage";
3404
+ /** Union of the three plan-type codes a payor Organization may carry. */
3405
+ type PayorPlanType = typeof PAYOR_PLAN_TYPE_COMMERCIAL | typeof PAYOR_PLAN_TYPE_MEDICARE | typeof PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE;
3406
+ /**
3407
+ * Root extension URL stamped on each `qualification[]` entry recording
3408
+ * the per-state credentialing context (state code + status). FHIR R4
3409
+ * `Practitioner_Qualification` carries `identifier`, `code`, `period`,
3410
+ * and `issuer` natively but has no `status` field; the extension fills
3411
+ * that gap without forking the schema.
3412
+ */
3413
+ declare const PRACTITIONER_CREDENTIALING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/practitioner-credentialing";
3414
+ /** Sub-extension under {@link PRACTITIONER_CREDENTIALING_EXTENSION_URL}. */
3415
+ declare const PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL = "state";
3416
+ /** Sub-extension under {@link PRACTITIONER_CREDENTIALING_EXTENSION_URL}. */
3417
+ declare const PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL = "status";
3418
+ /**
3419
+ * Credentialing status values. Mirrors the wound-care industry
3420
+ * convention — credentialing is either active (license current and in
3421
+ * good standing), suspended (under board action), or expired (lapsed
3422
+ * past expiration date).
3423
+ */
3424
+ declare const CREDENTIALING_STATUS: {
3425
+ readonly ACTIVE: "active";
3426
+ readonly SUSPENDED: "suspended";
3427
+ readonly EXPIRED: "expired";
3428
+ };
3429
+ type CredentialingStatus = (typeof CREDENTIALING_STATUS)[keyof typeof CREDENTIALING_STATUS];
3430
+ /**
3431
+ * FHIR `Identifier.system` for a US state medical license. Uses the
3432
+ * on-site-medical URL prefix so the identifier round-trips through
3433
+ * the on-site directory UI without colliding with the NPI system.
3434
+ */
3435
+ declare const STATE_MEDICAL_LICENSE_SYSTEM = "https://on-site-medical.app/fhir/sid/state-medical-license";
3436
+ /** Demo DME-supplier Organizations seeded into the on-site UAT workspace. */
3437
+ declare const ON_SITE_DEMO_DME_SUPPLIERS: ReadonlyArray<Organization>;
3438
+ /** Demo insurance-payor Organizations seeded into the on-site UAT workspace. */
3439
+ declare const ON_SITE_DEMO_INSURANCE_PAYORS: ReadonlyArray<Organization>;
3440
+ /** Stable DME-supplier ids in dispatch order. */
3441
+ declare const onSiteDemoDmeSupplierIds: () => ReadonlyArray<string>;
3442
+ /** Stable insurance-payor ids in dispatch order. */
3443
+ declare const onSiteDemoInsurancePayorIds: () => ReadonlyArray<string>;
3444
+ /**
3445
+ * The full directory Organization pool seeded into the on-site UAT
3446
+ * workspace — DME suppliers followed by insurance payors. The seeder
3447
+ * walks this in order via `buildOrganizations`.
3448
+ */
3449
+ declare const ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS: ReadonlyArray<Organization>;
3450
+ /**
3451
+ * Per-state credentialing spec for one license. The doctor specs in
3452
+ * `on-site-demo-fixtures.ts` carry a small array of these and the
3453
+ * build helper below converts each into a FHIR
3454
+ * `Practitioner_Qualification` entry appended after the "Physician"
3455
+ * qualification.
3456
+ */
3457
+ interface PractitionerCredentialingSpec {
3458
+ /** Two-letter USPS state code (GA, AL, TN, …). */
3459
+ readonly state: string;
3460
+ /** State medical board display label used for `issuer.display`. */
3461
+ readonly stateBoardDisplay: string;
3462
+ /** Opaque license number (real format varies by state). */
3463
+ readonly licenseNumber: string;
3464
+ /** ISO date the license was issued. */
3465
+ readonly issued: string;
3466
+ /** ISO date the license expires (after-end-of-period if expired). */
3467
+ readonly expires: string;
3468
+ readonly status: CredentialingStatus;
3469
+ }
3470
+ /**
3471
+ * Lookup helper: per-state credentialing entries for one doctor. Returns
3472
+ * an empty array if the practitioner id is not a seeded on-site doctor.
3473
+ */
3474
+ declare const practitionerCredentialingForDoctor: (practitionerId: string) => ReadonlyArray<PractitionerCredentialingSpec>;
3475
+ /**
3476
+ * Lookup helper: per-state credentialing entry for a specific
3477
+ * (practitionerId, stateCode) pair. Returns `undefined` when the pair
3478
+ * has no credentialing entry — the on-site UI can render this as
3479
+ * "not credentialed in <state>" without inspecting the full list.
3480
+ */
3481
+ declare const practitionerCredentialingForState: (practitionerId: string, stateCode: string) => PractitionerCredentialingSpec | undefined;
3482
+ /**
3483
+ * Build the FHIR `qualification[]` entries representing per-state
3484
+ * credentialing for one doctor. The on-site demo doctor builder
3485
+ * appends these after the base "Physician" qualification so the
3486
+ * resulting Practitioner.qualification array carries:
3487
+ * - [0] role label (`{text: "Physician"}`)
3488
+ * - [1..N] per-state licenses (one entry per state in the
3489
+ * credentialing map for this doctor)
3490
+ *
3491
+ * Each license entry's identifier is keyed under
3492
+ * {@link STATE_MEDICAL_LICENSE_SYSTEM} so the on-site UI can pluck the
3493
+ * license number without parsing the issuer display.
3494
+ */
3495
+ declare const buildCredentialingQualifications: (practitionerId: string) => ReadonlyArray<Practitioner_Qualification>;
3496
+
3497
+ /**
3498
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-encounters.md
3499
+ *
3500
+ * Historical Encounter + wound-Condition + wound-exam Observation +
3501
+ * wound-debridement Procedure fixtures the `seed-demo-data` workflow
3502
+ * upserts into the on-site-medical UAT demo tenant
3503
+ * ({@link ON_SITE_DEMO_TENANT_ID} + {@link ON_SITE_DEMO_WORKSPACE_ID})
3504
+ * on every non-prod deploy (issue #1306).
3505
+ *
3506
+ * Topology — issue #1306 design:
3507
+ * - Brand-new intake patients (6 facility intake-only + 3 home
3508
+ * intake-only) get **no** encounters. They carry intake +
3509
+ * insurance only.
3510
+ * - Scheduled facility patients (60 patients across 4 blocks) get
3511
+ * one Encounter per past block occurrence their block ran on
3512
+ * (the `BLOCK_OCCURRENCE_WEEKS_PAST` window = 4 past weeks).
3513
+ * Authored by the block's doctor + scribe, dated to that
3514
+ * occurrence's date.
3515
+ * - Scheduled home-health patients (17 patients) get one Encounter
3516
+ * per past visit at their cadence, stepping back from the
3517
+ * reference date. With cadence 14 days and 4 past visits, the
3518
+ * dates land at -14, -28, -42, -56 days. Authored by the
3519
+ * assigned home-health provider.
3520
+ * - ~70% of scheduled patients carry a "current wound" — one
3521
+ * {@link Condition} per patient with `category.text = "wound"`
3522
+ * plus a deterministic lower-extremity body site and wound type.
3523
+ * Every encounter for that patient records a wound-exam
3524
+ * {@link Observation} (LOINC panel 39135-9) whose components
3525
+ * show progression — length / width / depth shrink (healing) or
3526
+ * grow (worsening) across encounters depending on a
3527
+ * deterministic per-patient trajectory.
3528
+ * - ~25% of wound-bearing patients get one wound-debridement
3529
+ * {@link Procedure} on the most-recent wound encounter, using a
3530
+ * CPT code from the on-site EHR's
3531
+ * `PRESET_PROCEDURES` catalogue (e.g. 97597 Sharp Debridement).
3532
+ *
3533
+ * Modelling choices:
3534
+ * - Encounter `class` follows the on-site EHR's
3535
+ * `ENCOUNTER_CLASS_BY_LOCATION` map at
3536
+ * `sites/app-ehr/src/types/encounter.ts` — facility encounters
3537
+ * carry `code: "IMP", display: "Facility"`; home-health
3538
+ * encounters carry `code: "HH", display: "Home Health"`. The
3539
+ * `system` matches the v3 ActCode URL the on-site EHR reads.
3540
+ * - Wound is encoded as a FHIR {@link Condition} with
3541
+ * `category: [{ text: "wound" }]` (mirroring the on-site
3542
+ * `mapWoundFormToCondition` helper at
3543
+ * `sites/app-ehr/src/pages/visit/encounter/components/AddWoundDialog/woundFormMapping.ts`).
3544
+ * Wound exams are encoded as a single panel Observation per
3545
+ * encounter (LOINC 39135-9), with components for length /
3546
+ * width / depth — matching the on-site `buildWoundExamObservation`
3547
+ * mapper at `sites/app-ehr/src/features/wounds/mappers/woundExamMappers.ts`.
3548
+ * - Procedure carries a CPT code on `code.coding[0]` with system
3549
+ * `http://www.ama-assn.org/go/cpt` (the on-site EHR's
3550
+ * `CPT_SYSTEM` constant). `reasonReference` points at the wound
3551
+ * Condition; `encounter` points at the encounter the procedure
3552
+ * was performed during.
3553
+ *
3554
+ * Ids are deterministic — re-fires upsert the same records,
3555
+ * matching the workflow's idempotency contract.
3556
+ */
3557
+ /** FHIR v3 ActEncounter coding system, used on `Encounter.class`. */
3558
+ declare const ENCOUNTER_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode";
3559
+ /** Encounter class coding for facility encounters (on-site `ENCOUNTER_CLASS_BY_LOCATION.facility`). */
3560
+ declare const ENCOUNTER_CLASS_FACILITY: {
3561
+ readonly system: "http://terminology.hl7.org/CodeSystem/v3-ActCode";
3562
+ readonly code: "IMP";
3563
+ readonly display: "Facility";
3564
+ };
3565
+ /** Encounter class coding for home-health encounters (on-site `ENCOUNTER_CLASS_BY_LOCATION.home`). */
3566
+ declare const ENCOUNTER_CLASS_HOME_HEALTH: {
3567
+ readonly system: "http://terminology.hl7.org/CodeSystem/v3-ActCode";
3568
+ readonly code: "HH";
3569
+ readonly display: "Home Health";
3570
+ };
3571
+ /** LOINC system URL used on Observation.code.coding entries. */
3572
+ declare const LOINC_SYSTEM = "http://loinc.org";
3573
+ /** SNOMED CT system URL used on Condition.code / bodySite coding entries. */
3574
+ declare const SNOMED_SYSTEM = "http://snomed.info/sct";
3575
+ /** CPT coding system used on Procedure.code (matches on-site `CPT_SYSTEM`). */
3576
+ declare const CPT_SYSTEM = "http://www.ama-assn.org/go/cpt";
3577
+ /**
3578
+ * LOINC panel code for the wound assessment panel (matches on-site
3579
+ * `WOUND_EXAM_PANEL_CODE` at
3580
+ * `sites/app-ehr/src/features/wounds/types/woundExamCodes.ts`).
3581
+ */
3582
+ declare const WOUND_EXAM_PANEL_CODE = "39135-9";
3583
+ /** Display for {@link WOUND_EXAM_PANEL_CODE}. */
3584
+ declare const WOUND_EXAM_PANEL_DISPLAY = "Wound assessment panel";
3585
+ /** LOINC component code for wound length (cm). */
3586
+ declare const WOUND_LENGTH_CODE = "39126-8";
3587
+ /** LOINC component code for wound width (cm). */
3588
+ declare const WOUND_WIDTH_CODE = "39125-0";
3589
+ /** LOINC component code for wound depth (cm). */
3590
+ declare const WOUND_DEPTH_CODE = "39127-6";
3591
+ /** LOINC component code for wound status (declining / stagnant / improving). */
3592
+ declare const WOUND_STATUS_CODE = "72311-4";
3593
+ /**
3594
+ * Hl7 condition-clinical system URL used on Condition.clinicalStatus.
3595
+ */
3596
+ declare const CONDITION_CLINICAL_STATUS_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-clinical";
3597
+ /**
3598
+ * Number of past home-health visits materialized per scheduled
3599
+ * home-health patient. Matches {@link BLOCK_OCCURRENCE_WEEKS_PAST}
3600
+ * so the facility and home-health populations carry comparable
3601
+ * history depths (~4 historical encounters per scheduled patient).
3602
+ */
3603
+ declare const HOME_HEALTH_VISITS_PAST = 4;
3604
+ /**
3605
+ * Stable wound-Condition id for a patient. The id is the patient
3606
+ * id suffixed with `-wound-001` — one wound per patient suffices
3607
+ * for UAT.
3608
+ */
3609
+ declare const woundConditionIdForPatient: (patientId: string) => string;
3610
+ /**
3611
+ * Test seam — clear the spec cache between test invocations so
3612
+ * stale state from a prior seed run does not leak into the next.
3613
+ * Not part of the public API contract.
3614
+ */
3615
+ declare const __resetOnSiteDemoEncounterCachesForTests: () => void;
3616
+ /**
3617
+ * Materialize every Encounter resource for the on-site UAT demo
3618
+ * workspace. Scheduled facility patients fan out over the past 4
3619
+ * block occurrences; scheduled home-health patients fan out over
3620
+ * the past {@link HOME_HEALTH_VISITS_PAST} cadence visits. Intake-
3621
+ * only patients contribute zero encounters.
3622
+ */
3623
+ declare const buildOnSiteDemoEncounters: (referenceIso: string) => ReadonlyArray<Encounter>;
3624
+ /**
3625
+ * Materialize every wound {@link Condition} resource for the
3626
+ * on-site UAT demo workspace. One Condition per wound-bearing
3627
+ * patient, dated to that patient's earliest encounter.
3628
+ */
3629
+ declare const buildOnSiteDemoWoundConditions: (referenceIso: string) => ReadonlyArray<Condition>;
3630
+ /**
3631
+ * Materialize every wound-exam {@link Observation} for the on-site
3632
+ * UAT demo workspace. One per encounter on a wound-bearing
3633
+ * patient, with progressing length / width / depth components.
3634
+ */
3635
+ declare const buildOnSiteDemoWoundObservations: (referenceIso: string) => ReadonlyArray<Observation>;
3636
+ /**
3637
+ * Materialize every wound-debridement {@link Procedure} for the
3638
+ * on-site UAT demo workspace. One per qualifying wound-bearing
3639
+ * patient, on their most-recent encounter, with a real CPT code.
3640
+ */
3641
+ declare const buildOnSiteDemoWoundProcedures: (referenceIso: string) => ReadonlyArray<Procedure>;
3642
+ /**
3643
+ * Stable list of every Encounter id seeded for the on-site UAT
3644
+ * demo workspace, anchored to `referenceIso`. Downstream tickets
3645
+ * (e.g. #1307 — claims walking each historical encounter) read
3646
+ * this to fan out per-encounter work without re-deriving the
3647
+ * mapping.
3648
+ */
3649
+ declare const onSiteDemoEncounterIds: (referenceIso: string) => ReadonlyArray<string>;
3650
+ /**
3651
+ * Encounters scoped to a single patient, ordered earliest first.
3652
+ * Returns the empty array for intake-only patients (no
3653
+ * encounters) and for unknown patient ids.
3654
+ */
3655
+ declare const onSiteDemoEncountersForPatient: (patientId: string, referenceIso: string) => ReadonlyArray<string>;
3656
+ /**
3657
+ * Public projection of an encounter's seed metadata. Downstream
3658
+ * tickets (e.g. #1307 — claims walking each historical encounter)
3659
+ * read this instead of re-parsing the encounter id string.
3660
+ */
3661
+ interface OnSiteDemoEncounterMetadata {
3662
+ /** Stable Encounter id. */
3663
+ readonly id: string;
3664
+ /** Patient the encounter is authored against. */
3665
+ readonly patientId: string;
3666
+ /** 1-based sequence ordinal within the patient's encounter list (1 = earliest). */
3667
+ readonly sequence: number;
3668
+ /** Total encounters seeded for this patient. */
3669
+ readonly totalEncounters: number;
3670
+ /** ISO 8601 start instant the encounter is dated to. */
3671
+ readonly periodStart: string;
3672
+ /** Whether this encounter carries a wound-debridement Procedure. */
3673
+ readonly hasWoundProcedure: boolean;
3674
+ }
3675
+ /**
3676
+ * Materialize every encounter's seed metadata for the on-site UAT
3677
+ * demo workspace. Order matches {@link onSiteDemoEncounterIds}.
3678
+ * The `hasWoundProcedure` flag is `true` only on the patient's
3679
+ * most-recent encounter when {@link onSiteDemoWoundProcedurePatientIds}
3680
+ * lists that patient — mirroring the procedure-attachment rule in
3681
+ * {@link buildOnSiteDemoWoundProcedures}.
3682
+ */
3683
+ declare const onSiteDemoEncounterMetadata: (referenceIso: string) => ReadonlyArray<OnSiteDemoEncounterMetadata>;
3684
+ /**
3685
+ * Subset of patients (facility + home-health) the seeder flags as
3686
+ * carrying a current wound. Exported so tests and downstream
3687
+ * tickets can assert wound-coverage targets without re-deriving
3688
+ * the hash. Order matches the input list of scheduled patients.
3689
+ */
3690
+ declare const onSiteDemoWoundBearingPatientIds: () => ReadonlyArray<string>;
3691
+ /**
3692
+ * Subset of {@link onSiteDemoWoundBearingPatientIds} whose patients
3693
+ * also get a CPT-coded debridement Procedure on their most-recent
3694
+ * encounter.
3695
+ */
3696
+ declare const onSiteDemoWoundProcedurePatientIds: () => ReadonlyArray<string>;
3697
+
3698
+ /**
3699
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-facilities.md
3700
+ *
3701
+ * Hand-authored Facility (FHIR Location) fixtures the
3702
+ * `seed-demo-data` workflow upserts into the on-site-medical UAT
3703
+ * demo tenant ({@link ON_SITE_DEMO_TENANT_ID} +
3704
+ * {@link ON_SITE_DEMO_WORKSPACE_ID}) on every non-prod deploy
3705
+ * (issue #1303).
3706
+ *
3707
+ * Three facilities — UAT testers exercise the calendar's "View by
3708
+ * facility" filter and the home-health vs facility-visit
3709
+ * routing. The on-site `AdminLocationFormPage` reads:
3710
+ * - `name`
3711
+ * - `type[0].text` — `"facility"` (drives the
3712
+ * classification dropdown)
3713
+ * - `address.line/city/state/postalCode/country`
3714
+ * - `telecom` (phone + email + optional fax)
3715
+ * - `status` (`"active"`)
3716
+ *
3717
+ * Director-of-nursing is not a first-class FHIR R4 `Location`
3718
+ * field. We denormalize it as an `extension` (single root
3719
+ * extension with three sub-extensions: `name`, `phone`,
3720
+ * `email`) under the established on-site URL convention
3721
+ * (`https://on-site-medical.app/fhir/StructureDefinition/*`) so a
3722
+ * later on-site UI iteration can pick it up without a schema
3723
+ * change.
3724
+ *
3725
+ * Ids are deterministic — re-fires upsert the same records,
3726
+ * matching the workflow's idempotency contract.
3727
+ */
3728
+ /**
3729
+ * Root extension URL stamped on every facility Location for the
3730
+ * director-of-nursing contact. The root extension carries three
3731
+ * sub-extensions (`name`, `phone`, `email`) — none of FHIR R4's
3732
+ * shipped extensions cover this exact triple, so we publish a
3733
+ * local URL under the on-site convention.
3734
+ */
3735
+ declare const DIRECTOR_OF_NURSING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/director-of-nursing";
3736
+ /** Sub-extension URL: director-of-nursing display name. */
3737
+ declare const DIRECTOR_OF_NURSING_NAME_EXTENSION_URL = "name";
3738
+ /** Sub-extension URL: director-of-nursing phone (E.164). */
3739
+ declare const DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL = "phone";
3740
+ /** Sub-extension URL: director-of-nursing email. */
3741
+ declare const DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL = "email";
3742
+ /** Demo facilities seeded into the on-site UAT demo workspace. */
3743
+ declare const ON_SITE_DEMO_FACILITIES: ReadonlyArray<Location>;
3744
+ /** Stable facility ids in dispatch order. Re-exported for downstream tickets. */
3745
+ declare const ON_SITE_DEMO_FACILITY_IDS: ReadonlyArray<string>;
3746
+
3747
+ /**
3748
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-facility-patients.md
3749
+ *
3750
+ * Hand-authored facility Patient + Coverage fixtures the
3751
+ * `seed-demo-data` workflow upserts into the on-site-medical UAT
3752
+ * demo tenant ({@link ON_SITE_DEMO_TENANT_ID} +
3753
+ * {@link ON_SITE_DEMO_WORKSPACE_ID}) on every non-prod deploy
3754
+ * (issue #1304).
3755
+ *
3756
+ * Topology — issue #1304 design:
3757
+ * - 4 blocks (#1303) × per-block patient count (16 + 14 + 18 +
3758
+ * 12 = 60 scheduled patients). No patient appears in more
3759
+ * than one block.
3760
+ * - Plus 6 intake-complete-not-yet-scheduled patients (2 per
3761
+ * facility — small subset that exercises the "new intake,
3762
+ * not yet on a calendar" UI state). Total: 66 Patients.
3763
+ * - Every patient is assigned `care-context = facility` via
3764
+ * the on-site `patient-default-care-setting` /
3765
+ * `patient-default-care-location` extension pair
3766
+ * (`sites/app-ehr/src/types/fhir-extensions/patient.ts`). The
3767
+ * UI distinguishes facility vs home-health patients by
3768
+ * reading those extensions, so seeding them is the path that
3769
+ * actually surfaces the patient under the right "Patient
3770
+ * Type" column in the on-site EHR.
3771
+ *
3772
+ * Insurance:
3773
+ * - Every patient gets a primary Coverage with
3774
+ * `status: "active"` and a verification date stamped on the
3775
+ * coverage body via the on-site `coverage-verification-date`
3776
+ * extension.
3777
+ * - A subset (~40%) gets a secondary Coverage.
3778
+ * - Payor mix: commercial / Medicare / Medicare Advantage.
3779
+ * - QMB is a Medicare-only program (real-world constraint); the
3780
+ * QMB extension only attaches to Medicare-primary patients.
3781
+ * - ~20% of patients carry the `patient-hospice-status`
3782
+ * extension on the Patient resource (CMS hospice billing
3783
+ * status — separate from QMB).
3784
+ *
3785
+ * Modelling choice — block assignment. The seeder also records
3786
+ * which block template a patient is assigned to so downstream
3787
+ * tickets (#1306 — encounters per scheduled patient per block
3788
+ * occurrence) can fan out without re-deriving the mapping.
3789
+ * Encounters are NOT created here; this ticket only attaches the
3790
+ * block reference via an extension on the Patient body. Intake-
3791
+ * only patients omit the extension entirely.
3792
+ *
3793
+ * Ids are deterministic — re-fires upsert the same records,
3794
+ * matching the workflow's idempotency contract. Adding,
3795
+ * renaming, or moving a patient is a one-line edit here plus a
3796
+ * redeploy.
3797
+ */
3798
+ /**
3799
+ * Extension URL stamped on the Patient body when the patient's
3800
+ * default care setting is facility-based (mirrors the on-site
3801
+ * EHR's `EXT_PATIENT_DEFAULT_CARE_SETTING` constant at
3802
+ * `sites/app-ehr/src/types/fhir-extensions/patient.ts`).
3803
+ */
3804
+ declare const PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-default-care-setting";
3805
+ /**
3806
+ * Extension URL stamped on the Patient body when the patient's
3807
+ * default care setting is `facility`, carrying the Location id
3808
+ * (mirrors the on-site EHR's `EXT_PATIENT_DEFAULT_CARE_LOCATION`
3809
+ * constant).
3810
+ */
3811
+ declare const PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-default-care-location";
3812
+ /** Extension URL: patient residency admission date (facility-only). */
3813
+ declare const PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-residency-admission-date";
3814
+ /** Extension URL: patient residency room number (facility-only). */
3815
+ declare const PATIENT_RESIDENCY_ROOM_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-residency-room";
3816
+ /**
3817
+ * Extension URL stamped on the Patient body recording which
3818
+ * weekly scheduling block template the patient is assigned to
3819
+ * (#1303 + #1304). Downstream tickets (#1306 — encounters per
3820
+ * block occurrence) read this to fan out per-occurrence
3821
+ * Encounter records. Intake-only patients (no block yet) omit
3822
+ * the extension entirely.
3823
+ */
3824
+ declare const PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-assigned-block-template";
3825
+ /**
3826
+ * Root extension URL stamped on the Patient body recording the
3827
+ * patient's hospice status (CMS hospice billing flag). Carries
3828
+ * three sub-extensions (`status`, `effectiveDate`,
3829
+ * `terminationDate`) mirroring the on-site Medicare form's
3830
+ * hospice fields at
3831
+ * `sites/app-ehr/src/fixtures/medicareForm.ts`. Only ~20% of
3832
+ * patients carry this extension; the absence of the extension
3833
+ * means the patient is not in hospice.
3834
+ */
3835
+ declare const PATIENT_HOSPICE_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-hospice-status";
3836
+ /** Sub-extension URL under {@link PATIENT_HOSPICE_STATUS_EXTENSION_URL}. */
3837
+ declare const HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL = "status";
3838
+ /** Sub-extension URL under {@link PATIENT_HOSPICE_STATUS_EXTENSION_URL}. */
3839
+ declare const HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL = "effectiveDate";
3840
+ /**
3841
+ * Extension URL stamped on every primary Coverage body recording
3842
+ * the most-recent verification timestamp. The on-site
3843
+ * `VerificationHistoryTable` displays verification rows from this
3844
+ * value (and from the Coverage's audit history downstream). The
3845
+ * value is an ISO 8601 instant in UTC.
3846
+ */
3847
+ declare const COVERAGE_VERIFICATION_DATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/coverage-verification-date";
3848
+ /**
3849
+ * Root extension URL stamped on a Medicare-primary Coverage
3850
+ * recording the QMB (Qualified Medicare Beneficiary) status.
3851
+ * Carries `status` + `effectiveDate` sub-extensions mirroring
3852
+ * the on-site Medicare form (`sites/app-ehr/src/fixtures/medicareForm.ts`).
3853
+ * QMB only attaches to Medicare-primary patients — it is a
3854
+ * Medicare program and is invalid on commercial-primary or
3855
+ * Medicare-Advantage-primary coverages.
3856
+ */
3857
+ declare const COVERAGE_QMB_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/coverage-qmb-status";
3858
+ /** Sub-extension URL under {@link COVERAGE_QMB_STATUS_EXTENSION_URL}. */
3859
+ declare const QMB_STATUS_VALUE_SUB_EXTENSION_URL = "status";
3860
+ /** Sub-extension URL under {@link COVERAGE_QMB_STATUS_EXTENSION_URL}. */
3861
+ declare const QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL = "effectiveDate";
3862
+ /**
3863
+ * Payor codes the on-site app reads from Coverage.type.coding[0].
3864
+ * The values mirror the labels used in the on-site Medicare and
3865
+ * insurance forms. `medicare-advantage` is intentionally distinct
3866
+ * from `medicare` — Medicare Advantage is a private-plan layer on
3867
+ * top of Medicare and bills through different payor pathways.
3868
+ */
3869
+ declare const COVERAGE_PAYOR_TYPE_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/coverage-payor-type";
3870
+ /** Payor type values written to {@link COVERAGE_PAYOR_TYPE_SYSTEM}. */
3871
+ declare const PAYOR_TYPE_COMMERCIAL = "commercial";
3872
+ /** Payor type values written to {@link COVERAGE_PAYOR_TYPE_SYSTEM}. */
3873
+ declare const PAYOR_TYPE_MEDICARE = "medicare";
3874
+ /** Payor type values written to {@link COVERAGE_PAYOR_TYPE_SYSTEM}. */
3875
+ declare const PAYOR_TYPE_MEDICARE_ADVANTAGE = "medicare-advantage";
3876
+ /**
3877
+ * Lazily materialize the facility-patient Patient resources
3878
+ * seeded into the on-site UAT demo workspace. Called by the
3879
+ * fixture group when the seeder iterates `group.patients`.
3880
+ */
3881
+ declare const buildOnSiteDemoFacilityPatients: () => ReadonlyArray<Patient>;
3882
+ /**
3883
+ * Lazily materialize the facility-patient Coverage resources
3884
+ * (primary + optional secondary) for the on-site UAT demo
3885
+ * workspace. Called by the fixture group when the seeder
3886
+ * iterates `group.coverages`.
3887
+ */
3888
+ declare const buildOnSiteDemoFacilityCoverages: () => ReadonlyArray<Coverage>;
3889
+ /**
3890
+ * Stable facility-patient ids in dispatch order. Lazy — call
3891
+ * this from downstream tickets (e.g. #1306 — encounters per
3892
+ * scheduled patient per block occurrence) instead of capturing
3893
+ * the array at module load.
3894
+ */
3895
+ declare const onSiteDemoFacilityPatientIds: () => ReadonlyArray<string>;
3896
+ /**
3897
+ * Subset of {@link onSiteDemoFacilityPatientIds} whose patients
3898
+ * are scheduled into a weekly block. Excludes the intake-only
3899
+ * subset. Order matches `PATIENTS_PER_BLOCK` (all block-001
3900
+ * patients first, then block-002, etc.).
3901
+ */
3902
+ declare const onSiteDemoScheduledFacilityPatientIds: () => ReadonlyArray<string>;
3903
+ /**
3904
+ * Subset of {@link onSiteDemoFacilityPatientIds} whose patients
3905
+ * are intake-complete but not yet on a schedule. These patients
3906
+ * have a facility assignment but no block reference and no
3907
+ * Encounter records (downstream tickets must respect that
3908
+ * absence).
3909
+ */
3910
+ declare const onSiteDemoIntakeOnlyFacilityPatientIds: () => ReadonlyArray<string>;
3911
+ /**
3912
+ * Look up the block template a facility patient is scheduled
3913
+ * into, or `undefined` for intake-only patients.
3914
+ */
3915
+ declare const findOnSiteDemoFacilityPatientBlock: (patientId: string) => string | undefined;
3916
+ /**
3917
+ * List facility patients scheduled into a given block template
3918
+ * id. Downstream tickets (encounters, scribe assignments) call
3919
+ * this to fan out per-block work without re-deriving the
3920
+ * mapping.
3921
+ */
3922
+ declare const facilityPatientsForBlock: (blockTemplateId: string) => ReadonlyArray<string>;
3923
+
3924
+ /**
3925
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-fixtures.md
3926
+ *
3927
+ * Hand-authored Practitioner fixtures the `seed-demo-data` workflow
3928
+ * upserts into the on-site-medical UAT demo tenant
3929
+ * ({@link ON_SITE_DEMO_TENANT_ID} + {@link ON_SITE_DEMO_WORKSPACE_ID})
3930
+ * on every non-prod deploy. Issue #1302 — the on-site repo's facility
3931
+ * blocks, home-health visits, and encounter records need a realistic
3932
+ * pool of doctors and scribes to reference.
3933
+ *
3934
+ * Two sets are seeded:
3935
+ * - {@link ON_SITE_DEMO_DOCTORS} — ten Practitioners with
3936
+ * `qualification[0].code.text = "Physician"`. The first five carry
3937
+ * a `home-health-eligible` boolean extension set to `true` so the
3938
+ * on-site UI can filter the home-health-eligible subset for
3939
+ * home-visit scheduling.
3940
+ * - {@link ON_SITE_DEMO_SCRIBES} — five Practitioners with
3941
+ * `qualification[0].code.text = "Scribe"`. Scribes share the
3942
+ * Practitioner resource shape with doctors so the on-site
3943
+ * practitioner CRUD form can edit both without a new resource
3944
+ * type; the `qualification` value distinguishes the role.
3945
+ *
3946
+ * Field set matches what the on-site provider form expects today
3947
+ * (`sites/app-ehr/src/pages/admin/AdminPractitionerFormPage.tsx`):
3948
+ * - `name[0]` — given + family + text
3949
+ * - `qualification[0].code.text` — role label
3950
+ * - `active`
3951
+ * - `gender`, `birthDate`
3952
+ * - `telecom[]` — phone (E.164) + email
3953
+ * - `identifier[0]` — NPI (US national provider identifier)
3954
+ * - `address[0]` — line / city / state / postalCode / country
3955
+ * - `extension[]` — home-health-eligible boolean (doctors only)
3956
+ *
3957
+ * Ids are deterministic — re-fires upsert the same records, matching
3958
+ * the workflow's idempotency contract. Adding or renaming a Practitioner
3959
+ * is a one-line edit here plus a redeploy.
3960
+ */
3961
+ /** FHIR `Identifier.system` for the US NPI (National Provider Identifier). */
3962
+ declare const US_NPI_SYSTEM = "http://hl7.org/fhir/sid/us-npi";
3963
+ /**
3964
+ * Extension URL stamped on a Practitioner body when the practitioner
3965
+ * is approved to take home-health visits. Mirrors the on-site repo's
3966
+ * convention (`https://on-site-medical.app/fhir/StructureDefinition/*`)
3967
+ * — the on-site UI can pick this extension up directly without a
3968
+ * schema change. Boolean `valueBoolean: true` means eligible.
3969
+ */
3970
+ declare const HOME_HEALTH_ELIGIBLE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/home-health-eligible";
3971
+ /** Practitioner.qualification code-text for a physician (matches on-site form). */
3972
+ declare const PRACTITIONER_ROLE_PHYSICIAN = "Physician";
3973
+ /** Practitioner.qualification code-text for a scribe. */
3974
+ declare const PRACTITIONER_ROLE_SCRIBE = "Scribe";
3975
+ /** FHIR `Identifier.system` for internal on-site staff ids (non-NPI). */
3976
+ declare const ON_SITE_STAFF_ID_SYSTEM = "https://on-site-medical.app/fhir/sid/staff-id";
3977
+ /** Demo doctors seeded into the on-site UAT demo workspace. */
3978
+ declare const ON_SITE_DEMO_DOCTORS: ReadonlyArray<Practitioner>;
3979
+ /** Demo scribes seeded into the on-site UAT demo workspace. */
3980
+ declare const ON_SITE_DEMO_SCRIBES: ReadonlyArray<Practitioner>;
3981
+ /** Stable doctor ids in dispatch order. Re-exported for downstream tickets. */
3982
+ declare const ON_SITE_DEMO_DOCTOR_IDS: ReadonlyArray<string>;
3983
+ /** Stable scribe ids in dispatch order. Re-exported for downstream tickets. */
3984
+ declare const ON_SITE_DEMO_SCRIBE_IDS: ReadonlyArray<string>;
3985
+ /**
3986
+ * Subset of {@link ON_SITE_DEMO_DOCTORS} flagged as home-health-eligible
3987
+ * (via the {@link HOME_HEALTH_ELIGIBLE_EXTENSION_URL} extension on the
3988
+ * Practitioner body). Downstream tickets (home-health visit scheduling,
3989
+ * facility-block fixtures) use this helper to attach realistic providers
3990
+ * to home-visit-only encounters without re-reading the extension list.
3991
+ */
3992
+ declare const homeHealthEligibleDoctors: () => ReadonlyArray<Practitioner>;
3993
+ /**
3994
+ * Fixture group the seeder writes into the on-site UAT demo workspace.
3995
+ * Carries practitioners (doctors + scribes — #1302), facilities
3996
+ * (#1303), recurring weekly block Appointments (#1303), facility
3997
+ * patients + their insurance Coverages (#1304), home-health
3998
+ * patients + their insurance Coverages (#1305), historical
3999
+ * encounters / wounds / wound observations / wound debridement
4000
+ * procedures (#1306), and claims + payment notices tied to those
4001
+ * encounters (#1307). Accounts for this tenant are owned by later
4002
+ * tickets.
4003
+ *
4004
+ * `buildAppointments` is dynamic so the recurring block occurrences
4005
+ * anchor to the ISO week containing the seeder's `baseContext.date`
4006
+ * — re-fires on the same date produce byte-identical Appointment ids,
4007
+ * and re-fires on a later date roll the window forward without
4008
+ * duplicating prior weeks' records.
4009
+ */
4010
+ declare const ON_SITE_DEMO_FIXTURES: DemoWorkspaceDataPlaneFixtures;
4011
+
4012
+ /**
4013
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/on-site-demo-home-health-patients.md
4014
+ *
4015
+ * Hand-authored home-health Patient + Coverage fixtures the
4016
+ * `seed-demo-data` workflow upserts into the on-site-medical UAT
4017
+ * demo tenant ({@link ON_SITE_DEMO_TENANT_ID} +
4018
+ * {@link ON_SITE_DEMO_WORKSPACE_ID}) on every non-prod deploy
4019
+ * (issue #1305).
4020
+ *
4021
+ * Topology — issue #1305 design:
4022
+ * - 20 home-health patients total. None are assigned to a
4023
+ * facility — `patient-default-care-setting` is `home`
4024
+ * (mirrors the on-site EHR's `LocationClassification = "home"`
4025
+ * at `sites/app-ehr/src/utils/patient/patientDefaultCareSetting.ts`),
4026
+ * and the `patient-default-care-location` extension is
4027
+ * intentionally omitted (home patients have no Location
4028
+ * reference).
4029
+ * - 17 patients are scheduled to a home-health-eligible doctor
4030
+ * (see {@link homeHealthEligibleDoctors}) with a recurring
4031
+ * visit cadence. Doctor assignment is a deterministic
4032
+ * round-robin over the 5 home-health-eligible doctors.
4033
+ * - 3 patients are intake-complete-but-not-yet-scheduled —
4034
+ * they carry a home address + care-context = home but have
4035
+ * no provider assignment and no visit cadence (the on-site
4036
+ * UI state for a brand-new home-health intake that hasn't
4037
+ * been put on the calendar yet).
4038
+ *
4039
+ * Insurance is identical to the facility-patient rules (#1304):
4040
+ * - Every patient gets a primary Coverage with
4041
+ * `status: "active"` and a verification date.
4042
+ * - A subset (~40%) gets a secondary Coverage.
4043
+ * - Payor mix: commercial / Medicare / Medicare Advantage.
4044
+ * - QMB only attaches to Medicare-primary patients.
4045
+ * - ~20% of patients carry the `patient-hospice-status`
4046
+ * extension on the Patient resource.
4047
+ *
4048
+ * Modelling choice — visit cadence. On-site has no formal
4049
+ * home-health visit cadence schema today (the `REPEAT_OPTIONS`
4050
+ * at `sites/app-ehr/src/features/calendar/components/eventPopoverUtils.ts`
4051
+ * are calendar-level recurrences, not patient-level cadences).
4052
+ * Each scheduled home-health patient therefore carries a simple
4053
+ * `home-health-visit-cadence-days` valueInteger extension with
4054
+ * a value drawn from the set 7 / 14 / 28 — weekly / bi-weekly /
4055
+ * monthly — distributed deterministically across the roster so
4056
+ * the UAT tenant exercises all three cadences. Intake-only
4057
+ * patients omit the extension entirely.
4058
+ *
4059
+ * Modelling choice — provider assignment. The home-health
4060
+ * analogue of the facility-patient's block reference is a
4061
+ * `patient-assigned-home-health-provider` `valueReference`
4062
+ * pointing at `Practitioner/<doctor-id>`. Downstream tickets
4063
+ * (#1306 — encounters) read this reference to fan out per-
4064
+ * patient visit Encounters. Intake-only patients omit the
4065
+ * extension (no provider yet → no encounters).
4066
+ *
4067
+ * Ids are deterministic — re-fires upsert the same records,
4068
+ * matching the workflow's idempotency contract. Adding,
4069
+ * renaming, or moving a patient is a one-line edit here plus a
4070
+ * redeploy.
4071
+ */
4072
+ /**
4073
+ * Extension URL stamped on a home-health Patient body recording
4074
+ * the {@link Practitioner} id of the home-health-eligible doctor
4075
+ * the patient is currently scheduled with. Carries a
4076
+ * `valueReference` shaped `{ reference: "Practitioner/<id>" }`.
4077
+ * Intake-only patients omit this extension.
4078
+ */
4079
+ declare const PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-assigned-home-health-provider";
4080
+ /**
4081
+ * Extension URL stamped on a home-health Patient body recording
4082
+ * the patient's recurring visit cadence in days. The value is a
4083
+ * `valueInteger` drawn from {@link HOME_HEALTH_VISIT_CADENCE_OPTIONS}
4084
+ * — weekly (7), bi-weekly (14), or monthly (28). On-site has no
4085
+ * formal cadence schema today, so this denormalised extension
4086
+ * captures the visit interval directly on the Patient body until
4087
+ * the on-site team picks a permanent shape. Intake-only patients
4088
+ * omit this extension.
4089
+ */
4090
+ declare const HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/home-health-visit-cadence-days";
4091
+ /**
4092
+ * Allowed visit-cadence day values. Roughly weekly / bi-weekly /
4093
+ * monthly — enough variation for UAT to exercise distinct
4094
+ * cadences in the calendar without modelling every possible
4095
+ * interval.
4096
+ */
4097
+ declare const HOME_HEALTH_VISIT_CADENCE_OPTIONS: ReadonlyArray<number>;
4098
+ /** Total home-health patients seeded. */
4099
+ declare const TOTAL_HOME_HEALTH_PATIENTS: number;
4100
+ /**
4101
+ * Lazily materialize the home-health Patient resources seeded
4102
+ * into the on-site UAT demo workspace. Called by the fixture
4103
+ * group when the seeder iterates `group.buildPatients()`.
4104
+ */
4105
+ declare const buildOnSiteDemoHomeHealthPatients: () => ReadonlyArray<Patient>;
4106
+ /**
4107
+ * Lazily materialize the home-health Coverage resources
4108
+ * (primary + optional secondary) for the on-site UAT demo
4109
+ * workspace.
4110
+ */
4111
+ declare const buildOnSiteDemoHomeHealthCoverages: () => ReadonlyArray<Coverage>;
4112
+ /**
4113
+ * Stable home-health-patient ids in dispatch order. Lazy — call
4114
+ * this from downstream tickets (e.g. #1306 — encounters per
4115
+ * scheduled home-health visit) instead of capturing the array
4116
+ * at module load.
4117
+ */
4118
+ declare const onSiteDemoHomeHealthPatientIds: () => ReadonlyArray<string>;
4119
+ /**
4120
+ * Subset of {@link onSiteDemoHomeHealthPatientIds} whose
4121
+ * patients are scheduled with a home-health-eligible provider +
4122
+ * visit cadence. Excludes the intake-only subset.
4123
+ */
4124
+ declare const onSiteDemoScheduledHomeHealthPatientIds: () => ReadonlyArray<string>;
4125
+ /**
4126
+ * Subset of {@link onSiteDemoHomeHealthPatientIds} whose
4127
+ * patients are intake-complete but not yet on a schedule. These
4128
+ * patients carry a home address + care-context = home but no
4129
+ * provider, no cadence, and (per #1306) no Encounter records.
4130
+ */
4131
+ declare const onSiteDemoIntakeOnlyHomeHealthPatientIds: () => ReadonlyArray<string>;
4132
+ /**
4133
+ * Look up the home-health-eligible provider assigned to a given
4134
+ * home-health patient, or `undefined` for intake-only patients.
4135
+ * Downstream tickets (encounters per scheduled visit) call this
4136
+ * to fan out per-patient encounter records.
4137
+ */
4138
+ declare const findOnSiteDemoHomeHealthPatientProvider: (patientId: string) => string | undefined;
4139
+ /**
4140
+ * Look up the visit cadence (in days) for a given home-health
4141
+ * patient, or `undefined` for intake-only patients.
4142
+ */
4143
+ declare const findOnSiteDemoHomeHealthPatientVisitCadenceDays: (patientId: string) => number | undefined;
4144
+
2811
4145
  interface SeedDemoDataLambdaProps {
2812
4146
  /**
2813
4147
  * Data-store table the workflow upserts demo-data records into.
@@ -3031,6 +4365,24 @@ declare class OpenHiDataService extends OpenHiService {
3031
4365
  * target; the construct itself never checks the stage.
3032
4366
  */
3033
4367
  readonly seedDemoDataWorkflow?: SeedDemoDataWorkflow;
4368
+ /**
4369
+ * ADR-028 counter-maintenance workflow. Subscribes to the
4370
+ * control-plane membership / role-assignment / workspace lifecycle
4371
+ * events on the control event bus and maintains the denormalized
4372
+ * counters on the canonical Tenant / Workspace / User records via
4373
+ * idempotent atomic ADD. Mounted on every stage (the admin console
4374
+ * reads these counters in prod as well as non-prod).
4375
+ */
4376
+ readonly counterMaintenanceWorkflow: CounterMaintenanceWorkflow;
4377
+ /**
4378
+ * ADR-028 counter-reconciliation job (#1319). An on-demand Lambda that
4379
+ * recomputes the denormalized counters from canonical data and repairs
4380
+ * any drift the event-driven counter-maintenance path missed
4381
+ * (dropped / replayed events, rows that predate the counter work).
4382
+ * Mounted on every stage; invoked manually or by a separately-wired
4383
+ * schedule — it has no EventBridge trigger of its own.
4384
+ */
4385
+ readonly counterReconciliationWorkflow: CounterReconciliationWorkflow;
3034
4386
  /**
3035
4387
  * Cached control-event-bus lookup. `OpenHiGlobalService.controlEventBusFromConstruct`
3036
4388
  * registers a child `EventBus.fromEventBusName` construct with a
@@ -3059,6 +4411,19 @@ declare class OpenHiDataService extends OpenHiService {
3059
4411
  * does not exist in prod stacks. Override to customize.
3060
4412
  */
3061
4413
  protected createSeedDemoDataWorkflow(): SeedDemoDataWorkflow | undefined;
4414
+ /**
4415
+ * Creates the ADR-028 counter-maintenance workflow. Override to
4416
+ * customize. Mounted on every stage — the denormalized counters back
4417
+ * the admin console list columns in prod and non-prod alike.
4418
+ */
4419
+ protected createCounterMaintenanceWorkflow(): CounterMaintenanceWorkflow;
4420
+ /**
4421
+ * Creates the ADR-028 counter-reconciliation job (#1319). Override to
4422
+ * customize. Mounted on every stage — the recompute-and-repair backstop
4423
+ * is the correctness authority for the denormalized counters in prod
4424
+ * and non-prod alike. On-demand only (no EventBridge trigger).
4425
+ */
4426
+ protected createCounterReconciliationWorkflow(): CounterReconciliationWorkflow;
3062
4427
  /**
3063
4428
  * Creates the single-table DynamoDB data store.
3064
4429
  * Override to customize.
@@ -3576,5 +4941,5 @@ declare class RenameCascadeWorkflow extends Construct {
3576
4941
  constructor(scope: Construct, props: RenameCascadeWorkflowProps);
3577
4942
  }
3578
4943
 
3579
- export { ADMIN_DOMAIN_PREFIX, BRIDGED_STATUSES, CLOUDFORMATION_EVENT_SOURCE, CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE, CONTROL_EVENT_BUS_NAME_ENV_VAR, ChildHostedZone, CognitoUserPool, CognitoUserPoolClient, CognitoUserPoolDomain, CognitoUserPoolKmsKey, ControlEventBus, DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES, DATA_STORE_CHANGE_DETAIL_TYPE, DEFAULT_PREVIEW_EXPIRATION_DAYS, DEMO_DATA_PLANE_FIXTURES, DEMO_PERIOD, DEMO_TENANT_SPECS, DEMO_URN_SYSTEM, DEV_CORS_ALLOW_ORIGINS, DEV_USERS, DataEventBus, DataStoreHistoricalArchive, DataStorePostgresReplica, DiscoverableStringParameter, DynamoDbDataStore, LOCALHOST_OAUTH_CALLBACK_URLS, LOCALHOST_OAUTH_LOGOUT_URLS, OPENHI_REPO_TAG_KEY_ENV_VAR, OPENHI_RESOURCE_URN_SYSTEM, OPENHI_TAG_KEY_PREFIX_ENV_VAR, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OWNING_DELETE_CASCADE_CONSUMER_NAME, OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY, OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES, OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR, OpenHiApp, OpenHiAuthService, OpenHiDataService, OpenHiEnvironment, OpenHiGlobalService, OpenHiGraphqlService, OpenHiRestApiService, OpenHiService, OpenHiStage, OpenHiWebsiteService, OpsEventBus, OwningDeleteCascadeLambdas, OwningDeleteCascadeWorkflow, PER_BRANCH_PREVIEW_PREFIX, PLACEHOLDER_TENANT_ID, PLACEHOLDER_WORKSPACE_ID, PLATFORM_DEPLOY_BRIDGE_ACTOR_SYSTEM, PLATFORM_SCOPE_TENANT_ID, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE, PerBranchHostname, PlatformDeployBridge, PlatformDeployBridgeLambda, PostAuthenticationLambda, PostConfirmationLambda, PreTokenGenerationLambda, ProvisionDefaultWorkspaceLambda, RENAME_CASCADE_CONSUMER_NAME, RENAME_CASCADE_DEFAULT_CONCURRENCY, RENAME_CASCADE_FAILED_THRESHOLD, RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR, RENAME_CASCADE_SLOW_THRESHOLD_SECONDS, REST_API_BASE_URL_SSM_NAME, REST_API_DOMAIN_NAME_SSM_NAME, RenameCascadeLambdas, RenameCascadeWorkflow, RootGraphqlApi, RootHostedZone, RootHttpApi, RootWildcardCertificate, SEED_DEMO_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_ACTOR_SYSTEM, SEED_SYSTEM_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR, SSM_PARAM_NAME_FULL_DOMAIN, STATIC_HOSTING_SERVICE_TYPE, SeedDemoDataLambda, SeedDemoDataWorkflow, SeedSystemDataLambda, SeedSystemDataWorkflow, StaticContent, StaticHosting, USER_ONBOARDING_EVENT_SOURCE, UserOnboardingWorkflow, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, buildFhirCurrentResourceChangeDetail, buildProvisionDefaultWorkspaceRequestedDetail, computeBranchHash, demoMembershipId, demoRoleAssignmentId, demoRolesForUserInTenant, demoScenarioIdentifier, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, openHiTagKey, openhiResourceIdentifier };
3580
- export type { BridgedStatus, BuildParameterNameProps, CascadeChunkInput, CascadeFinalizeInput, CascadeFinalizeOutput, CascadeListInput, CascadeListOutput, ChildHostedZoneProps, CloudFormationStackStatusChangeDetail, ComposeServiceDomainOptions, ComputeBranchHashOptions, DataEventBusOptions, DataStoreHistoricalArchiveProps, DataStorePostgresReplicaProps, DemoDevUser, DemoTenantSpec, DemoWorkspaceDataPlaneFixtures, DemoWorkspaceSpec, DiscoverableStringParameterProps, DynamoDbDataStoreProps, FhirCurrentResourceChangeDetail, GrantConsumerOptions, HostingMode, OpenHiAppProps, OpenHiAuthServiceProps, OpenHiDataServiceProps, OpenHiEnvironmentProps, OpenHiGlobalServiceProps, OpenHiGraphqlServiceProps, OpenHiRestApiServiceProps, OpenHiServiceProps, OpenHiServiceType, OpenHiStageProps, OpenHiWebsiteServiceProps, OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflowProps, PerBranchHostnameProps, PlatformDeployBridgeLambdaProps, PlatformDeployBridgeProps, PostConfirmationLambdaProps, PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambdaProps, ProvisionDefaultWorkspaceRequestedDetail, RenameCascadeChunkInput, RenameCascadeFinalizeInput, RenameCascadeFinalizeOutput, RenameCascadeLambdasProps, RenameCascadeListInput, RenameCascadeListOutput, RenameCascadeWorkflowProps, RootGraphqlApiProps, RootHttpApiProps, SeedDemoDataLambdaProps, SeedDemoDataWorkflowProps, SeedSystemDataLambdaProps, SeedSystemDataWorkflowProps, StaticContentProps, StaticHostingProps, UserOnboardingWorkflowProps, WorkflowDedupTableProps };
4944
+ export { ADMIN_DOMAIN_PREFIX, BLOCK_OCCURRENCES_PER_TEMPLATE, BLOCK_OCCURRENCE_WEEKS_FUTURE, BLOCK_OCCURRENCE_WEEKS_PAST, BRIDGED_STATUSES, CLAIM_WORKFLOW_STATUS, CLAIM_WORKFLOW_STATUS_EXTENSION_URL, CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL, CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL, CLOUDFORMATION_EVENT_SOURCE, CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE, CONDITION_CLINICAL_STATUS_SYSTEM, CONTROL_EVENT_BUS_NAME_ENV_VAR, COUNTER_MAINTENANCE_CONSUMER_NAME, COUNTER_MAINTENANCE_DETAIL_TYPES, COVERAGE_PAYOR_TYPE_SYSTEM, COVERAGE_QMB_STATUS_EXTENSION_URL, COVERAGE_VERIFICATION_DATE_EXTENSION_URL, CPT_SYSTEM, CREDENTIALING_STATUS, ChildHostedZone, CognitoUserPool, CognitoUserPoolClient, CognitoUserPoolDomain, CognitoUserPoolKmsKey, ControlEventBus, CounterMaintenanceLambda, CounterMaintenanceWorkflow, CounterReconciliationLambda, CounterReconciliationWorkflow, DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES, DATA_STORE_CHANGE_DETAIL_TYPE, DEFAULT_PREVIEW_EXPIRATION_DAYS, DEMO_DATA_PLANE_FIXTURES, DEMO_PERIOD, DEMO_TENANT_SPECS, DEMO_URN_SYSTEM, DEV_CORS_ALLOW_ORIGINS, DEV_USERS, DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL, DIRECTOR_OF_NURSING_EXTENSION_URL, DIRECTOR_OF_NURSING_NAME_EXTENSION_URL, DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL, DME_SUPPLIER_CATEGORY_CODE, DataEventBus, DataStoreHistoricalArchive, DataStorePostgresReplica, DiscoverableStringParameter, DynamoDbDataStore, ENCOUNTER_CLASS_FACILITY, ENCOUNTER_CLASS_HOME_HEALTH, ENCOUNTER_CLASS_SYSTEM, FHIR_ORGANIZATION_TYPE_SYSTEM, HOME_HEALTH_ELIGIBLE_EXTENSION_URL, HOME_HEALTH_VISITS_PAST, HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL, HOME_HEALTH_VISIT_CADENCE_OPTIONS, HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL, HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL, INSURANCE_PAYOR_CATEGORY_CODE, INSURANCE_PAYOR_PLAN_TYPE_SYSTEM, LOCALHOST_OAUTH_CALLBACK_URLS, LOCALHOST_OAUTH_LOGOUT_URLS, LOINC_SYSTEM, ON_SITE_APPOINTMENT_TYPE_SYSTEM, ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL, ON_SITE_DEMO_BLOCK_TEMPLATE_IDS, ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS, ON_SITE_DEMO_DME_SUPPLIERS, ON_SITE_DEMO_DOCTORS, ON_SITE_DEMO_DOCTOR_IDS, ON_SITE_DEMO_FACILITIES, ON_SITE_DEMO_FACILITY_IDS, ON_SITE_DEMO_FIXTURES, ON_SITE_DEMO_INSURANCE_PAYORS, ON_SITE_DEMO_SCRIBES, ON_SITE_DEMO_SCRIBE_IDS, ON_SITE_DEMO_TENANT_ID, ON_SITE_DEMO_WORKSPACE_ID, ON_SITE_DIRECTORY_CATEGORY_SYSTEM, ON_SITE_STAFF_ID_SYSTEM, OPENHI_REPO_TAG_KEY_ENV_VAR, OPENHI_RESOURCE_URN_SYSTEM, OPENHI_TAG_KEY_PREFIX_ENV_VAR, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OWNING_DELETE_CASCADE_CONSUMER_NAME, OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY, OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES, OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR, OpenHiApp, OpenHiAuthService, OpenHiDataService, OpenHiEnvironment, OpenHiGlobalService, OpenHiGraphqlService, OpenHiRestApiService, OpenHiService, OpenHiStage, OpenHiWebsiteService, OpsEventBus, OwningDeleteCascadeLambdas, OwningDeleteCascadeWorkflow, PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL, PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL, PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL, PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL, PATIENT_HOSPICE_STATUS_EXTENSION_URL, PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL, PATIENT_RESIDENCY_ROOM_EXTENSION_URL, PAYMENT_STATUS, PAYMENT_STATUS_SYSTEM, PAYOR_PLAN_TYPE_COMMERCIAL, PAYOR_PLAN_TYPE_MEDICARE, PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE, PAYOR_TYPE_COMMERCIAL, PAYOR_TYPE_MEDICARE, PAYOR_TYPE_MEDICARE_ADVANTAGE, PER_BRANCH_PREVIEW_PREFIX, PLACEHOLDER_TENANT_ID, PLACEHOLDER_WORKSPACE_ID, PLATFORM_DEPLOY_BRIDGE_ACTOR_SYSTEM, PLATFORM_SCOPE_TENANT_ID, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PRACTITIONER_CREDENTIALING_EXTENSION_URL, PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL, PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL, PRACTITIONER_ROLE_PHYSICIAN, PRACTITIONER_ROLE_SCRIBE, PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE, PerBranchHostname, PlatformDeployBridge, PlatformDeployBridgeLambda, PostAuthenticationLambda, PostConfirmationLambda, PreTokenGenerationLambda, ProvisionDefaultWorkspaceLambda, QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL, QMB_STATUS_VALUE_SUB_EXTENSION_URL, RENAME_CASCADE_CONSUMER_NAME, RENAME_CASCADE_DEFAULT_CONCURRENCY, RENAME_CASCADE_FAILED_THRESHOLD, RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR, RENAME_CASCADE_SLOW_THRESHOLD_SECONDS, REST_API_BASE_URL_SSM_NAME, REST_API_DOMAIN_NAME_SSM_NAME, RenameCascadeLambdas, RenameCascadeWorkflow, RootGraphqlApi, RootHostedZone, RootHttpApi, RootWildcardCertificate, SEED_DEMO_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_ACTOR_SYSTEM, SEED_SYSTEM_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR, SNOMED_SYSTEM, SSM_PARAM_NAME_FULL_DOMAIN, STATE_MEDICAL_LICENSE_SYSTEM, STATIC_HOSTING_SERVICE_TYPE, SeedDemoDataLambda, SeedDemoDataWorkflow, SeedSystemDataLambda, SeedSystemDataWorkflow, StaticContent, StaticHosting, TOTAL_HOME_HEALTH_PATIENTS, USER_ONBOARDING_EVENT_SOURCE, US_NPI_SYSTEM, UserOnboardingWorkflow, WOUND_DEPTH_CODE, WOUND_EXAM_PANEL_CODE, WOUND_EXAM_PANEL_DISPLAY, WOUND_LENGTH_CODE, WOUND_STATUS_CODE, WOUND_WIDTH_CODE, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, __resetOnSiteDemoClaimCachesForTests, __resetOnSiteDemoEncounterCachesForTests, buildCredentialingQualifications, buildFhirCurrentResourceChangeDetail, buildOnSiteDemoBlockAppointments, buildOnSiteDemoClaims, buildOnSiteDemoEncounters, buildOnSiteDemoFacilityCoverages, buildOnSiteDemoFacilityPatients, buildOnSiteDemoHomeHealthCoverages, buildOnSiteDemoHomeHealthPatients, buildOnSiteDemoPaymentNotices, buildOnSiteDemoWoundConditions, buildOnSiteDemoWoundObservations, buildOnSiteDemoWoundProcedures, buildProvisionDefaultWorkspaceRequestedDetail, computeBranchHash, demoMembershipId, demoRoleAssignmentId, demoRolesForUserInTenant, demoScenarioIdentifier, facilityPatientsForBlock, findOnSiteDemoBlockTemplate, findOnSiteDemoFacilityPatientBlock, findOnSiteDemoHomeHealthPatientProvider, findOnSiteDemoHomeHealthPatientVisitCadenceDays, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, homeHealthEligibleDoctors, onSiteDemoBilledEncounterIds, onSiteDemoClaimIds, onSiteDemoDmeSupplierIds, onSiteDemoEncounterIds, onSiteDemoEncounterMetadata, onSiteDemoEncountersForPatient, onSiteDemoFacilityPatientIds, onSiteDemoHomeHealthPatientIds, onSiteDemoInsurancePayorIds, onSiteDemoIntakeOnlyFacilityPatientIds, onSiteDemoIntakeOnlyHomeHealthPatientIds, onSiteDemoPaymentNoticeIds, onSiteDemoScheduledFacilityPatientIds, onSiteDemoScheduledHomeHealthPatientIds, onSiteDemoUnbilledEncounterIds, onSiteDemoWoundBearingPatientIds, onSiteDemoWoundProcedurePatientIds, openHiTagKey, openhiResourceIdentifier, practitionerCredentialingForDoctor, practitionerCredentialingForState, woundConditionIdForPatient };
4945
+ export type { BridgedStatus, BuildParameterNameProps, CascadeChunkInput, CascadeFinalizeInput, CascadeFinalizeOutput, CascadeListInput, CascadeListOutput, ChildHostedZoneProps, ClaimWorkflowStatus, CloudFormationStackStatusChangeDetail, ComposeServiceDomainOptions, ComputeBranchHashOptions, CounterMaintenanceLambdaProps, CounterMaintenanceWorkflowProps, CounterReconciliationLambdaProps, CounterReconciliationWorkflowProps, CredentialingStatus, DataEventBusOptions, DataStoreHistoricalArchiveProps, DataStorePostgresReplicaProps, DemoDevUser, DemoTenantSpec, DemoWorkspaceDataPlaneFixtures, DemoWorkspaceSpec, DiscoverableStringParameterProps, DynamoDbDataStoreProps, FhirCurrentResourceChangeDetail, GrantConsumerOptions, HostingMode, IsoDayOfWeek, OnSiteDemoEncounterMetadata, OpenHiAppProps, OpenHiAuthServiceProps, OpenHiDataServiceProps, OpenHiEnvironmentProps, OpenHiGlobalServiceProps, OpenHiGraphqlServiceProps, OpenHiRestApiServiceProps, OpenHiServiceProps, OpenHiServiceType, OpenHiStageProps, OpenHiWebsiteServiceProps, OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflowProps, PaymentStatus, PayorPlanType, PerBranchHostnameProps, PlatformDeployBridgeLambdaProps, PlatformDeployBridgeProps, PostConfirmationLambdaProps, PractitionerCredentialingSpec, PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambdaProps, ProvisionDefaultWorkspaceRequestedDetail, RenameCascadeChunkInput, RenameCascadeFinalizeInput, RenameCascadeFinalizeOutput, RenameCascadeLambdasProps, RenameCascadeListInput, RenameCascadeListOutput, RenameCascadeWorkflowProps, RootGraphqlApiProps, RootHttpApiProps, SeedDemoDataLambdaProps, SeedDemoDataWorkflowProps, SeedSystemDataLambdaProps, SeedSystemDataWorkflowProps, StaticContentProps, StaticHostingProps, UserOnboardingWorkflowProps, WorkflowDedupTableProps };