@openhi/constructs 0.0.158 → 0.0.160

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -767,10 +767,23 @@ var require_lib2 = __commonJS({
767
767
  var src_exports = {};
768
768
  __export(src_exports, {
769
769
  ADMIN_DOMAIN_PREFIX: () => ADMIN_DOMAIN_PREFIX,
770
+ BLOCK_OCCURRENCES_PER_TEMPLATE: () => BLOCK_OCCURRENCES_PER_TEMPLATE,
771
+ BLOCK_OCCURRENCE_WEEKS_FUTURE: () => BLOCK_OCCURRENCE_WEEKS_FUTURE,
772
+ BLOCK_OCCURRENCE_WEEKS_PAST: () => BLOCK_OCCURRENCE_WEEKS_PAST,
770
773
  BRIDGED_STATUSES: () => BRIDGED_STATUSES,
774
+ CLAIM_WORKFLOW_STATUS: () => CLAIM_WORKFLOW_STATUS,
775
+ CLAIM_WORKFLOW_STATUS_EXTENSION_URL: () => CLAIM_WORKFLOW_STATUS_EXTENSION_URL,
776
+ CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL: () => CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL,
777
+ CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL: () => CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL,
771
778
  CLOUDFORMATION_EVENT_SOURCE: () => CLOUDFORMATION_EVENT_SOURCE,
772
779
  CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE: () => CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE,
780
+ CONDITION_CLINICAL_STATUS_SYSTEM: () => CONDITION_CLINICAL_STATUS_SYSTEM,
773
781
  CONTROL_EVENT_BUS_NAME_ENV_VAR: () => CONTROL_EVENT_BUS_NAME_ENV_VAR,
782
+ COVERAGE_PAYOR_TYPE_SYSTEM: () => COVERAGE_PAYOR_TYPE_SYSTEM,
783
+ COVERAGE_QMB_STATUS_EXTENSION_URL: () => COVERAGE_QMB_STATUS_EXTENSION_URL,
784
+ COVERAGE_VERIFICATION_DATE_EXTENSION_URL: () => COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
785
+ CPT_SYSTEM: () => CPT_SYSTEM,
786
+ CREDENTIALING_STATUS: () => CREDENTIALING_STATUS,
774
787
  ChildHostedZone: () => ChildHostedZone,
775
788
  CognitoUserPool: () => CognitoUserPool,
776
789
  CognitoUserPoolClient: () => CognitoUserPoolClient,
@@ -792,13 +805,48 @@ __export(src_exports, {
792
805
  DEMO_URN_SYSTEM: () => DEMO_URN_SYSTEM,
793
806
  DEV_CORS_ALLOW_ORIGINS: () => DEV_CORS_ALLOW_ORIGINS,
794
807
  DEV_USERS: () => DEV_USERS,
808
+ DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL: () => DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL,
809
+ DIRECTOR_OF_NURSING_EXTENSION_URL: () => DIRECTOR_OF_NURSING_EXTENSION_URL,
810
+ DIRECTOR_OF_NURSING_NAME_EXTENSION_URL: () => DIRECTOR_OF_NURSING_NAME_EXTENSION_URL,
811
+ DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL: () => DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL,
812
+ DME_SUPPLIER_CATEGORY_CODE: () => DME_SUPPLIER_CATEGORY_CODE,
795
813
  DataEventBus: () => DataEventBus,
796
814
  DataStoreHistoricalArchive: () => DataStoreHistoricalArchive,
797
815
  DataStorePostgresReplica: () => DataStorePostgresReplica,
798
816
  DiscoverableStringParameter: () => DiscoverableStringParameter,
799
817
  DynamoDbDataStore: () => DynamoDbDataStore,
818
+ ENCOUNTER_CLASS_FACILITY: () => ENCOUNTER_CLASS_FACILITY,
819
+ ENCOUNTER_CLASS_HOME_HEALTH: () => ENCOUNTER_CLASS_HOME_HEALTH,
820
+ ENCOUNTER_CLASS_SYSTEM: () => ENCOUNTER_CLASS_SYSTEM,
821
+ FHIR_ORGANIZATION_TYPE_SYSTEM: () => FHIR_ORGANIZATION_TYPE_SYSTEM,
822
+ HOME_HEALTH_ELIGIBLE_EXTENSION_URL: () => HOME_HEALTH_ELIGIBLE_EXTENSION_URL,
823
+ HOME_HEALTH_VISITS_PAST: () => HOME_HEALTH_VISITS_PAST,
824
+ HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL: () => HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL,
825
+ HOME_HEALTH_VISIT_CADENCE_OPTIONS: () => HOME_HEALTH_VISIT_CADENCE_OPTIONS,
826
+ HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL: () => HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL,
827
+ HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL: () => HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL,
828
+ INSURANCE_PAYOR_CATEGORY_CODE: () => INSURANCE_PAYOR_CATEGORY_CODE,
829
+ INSURANCE_PAYOR_PLAN_TYPE_SYSTEM: () => INSURANCE_PAYOR_PLAN_TYPE_SYSTEM,
800
830
  LOCALHOST_OAUTH_CALLBACK_URLS: () => LOCALHOST_OAUTH_CALLBACK_URLS,
801
831
  LOCALHOST_OAUTH_LOGOUT_URLS: () => LOCALHOST_OAUTH_LOGOUT_URLS,
832
+ LOINC_SYSTEM: () => LOINC_SYSTEM,
833
+ ON_SITE_APPOINTMENT_TYPE_SYSTEM: () => ON_SITE_APPOINTMENT_TYPE_SYSTEM,
834
+ ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL: () => ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL,
835
+ ON_SITE_DEMO_BLOCK_TEMPLATE_IDS: () => ON_SITE_DEMO_BLOCK_TEMPLATE_IDS,
836
+ ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS: () => ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS,
837
+ ON_SITE_DEMO_DME_SUPPLIERS: () => ON_SITE_DEMO_DME_SUPPLIERS,
838
+ ON_SITE_DEMO_DOCTORS: () => ON_SITE_DEMO_DOCTORS,
839
+ ON_SITE_DEMO_DOCTOR_IDS: () => ON_SITE_DEMO_DOCTOR_IDS,
840
+ ON_SITE_DEMO_FACILITIES: () => ON_SITE_DEMO_FACILITIES,
841
+ ON_SITE_DEMO_FACILITY_IDS: () => ON_SITE_DEMO_FACILITY_IDS,
842
+ ON_SITE_DEMO_FIXTURES: () => ON_SITE_DEMO_FIXTURES,
843
+ ON_SITE_DEMO_INSURANCE_PAYORS: () => ON_SITE_DEMO_INSURANCE_PAYORS,
844
+ ON_SITE_DEMO_SCRIBES: () => ON_SITE_DEMO_SCRIBES,
845
+ ON_SITE_DEMO_SCRIBE_IDS: () => ON_SITE_DEMO_SCRIBE_IDS,
846
+ ON_SITE_DEMO_TENANT_ID: () => ON_SITE_DEMO_TENANT_ID,
847
+ ON_SITE_DEMO_WORKSPACE_ID: () => ON_SITE_DEMO_WORKSPACE_ID,
848
+ ON_SITE_DIRECTORY_CATEGORY_SYSTEM: () => ON_SITE_DIRECTORY_CATEGORY_SYSTEM,
849
+ ON_SITE_STAFF_ID_SYSTEM: () => ON_SITE_STAFF_ID_SYSTEM,
802
850
  OPENHI_REPO_TAG_KEY_ENV_VAR: () => OPENHI_REPO_TAG_KEY_ENV_VAR,
803
851
  OPENHI_RESOURCE_URN_SYSTEM: () => OPENHI_RESOURCE_URN_SYSTEM,
804
852
  OPENHI_TAG_KEY_PREFIX_ENV_VAR: () => OPENHI_TAG_KEY_PREFIX_ENV_VAR,
@@ -824,6 +872,21 @@ __export(src_exports, {
824
872
  OpsEventBus: () => OpsEventBus,
825
873
  OwningDeleteCascadeLambdas: () => OwningDeleteCascadeLambdas,
826
874
  OwningDeleteCascadeWorkflow: () => OwningDeleteCascadeWorkflow,
875
+ PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL: () => PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL,
876
+ PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL: () => PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL,
877
+ PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL: () => PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL,
878
+ PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL: () => PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL,
879
+ PATIENT_HOSPICE_STATUS_EXTENSION_URL: () => PATIENT_HOSPICE_STATUS_EXTENSION_URL,
880
+ PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL: () => PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL,
881
+ PATIENT_RESIDENCY_ROOM_EXTENSION_URL: () => PATIENT_RESIDENCY_ROOM_EXTENSION_URL,
882
+ PAYMENT_STATUS: () => PAYMENT_STATUS,
883
+ PAYMENT_STATUS_SYSTEM: () => PAYMENT_STATUS_SYSTEM,
884
+ PAYOR_PLAN_TYPE_COMMERCIAL: () => PAYOR_PLAN_TYPE_COMMERCIAL,
885
+ PAYOR_PLAN_TYPE_MEDICARE: () => PAYOR_PLAN_TYPE_MEDICARE,
886
+ PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE: () => PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE,
887
+ PAYOR_TYPE_COMMERCIAL: () => PAYOR_TYPE_COMMERCIAL,
888
+ PAYOR_TYPE_MEDICARE: () => PAYOR_TYPE_MEDICARE,
889
+ PAYOR_TYPE_MEDICARE_ADVANTAGE: () => PAYOR_TYPE_MEDICARE_ADVANTAGE,
827
890
  PER_BRANCH_PREVIEW_PREFIX: () => PER_BRANCH_PREVIEW_PREFIX,
828
891
  PLACEHOLDER_TENANT_ID: () => PLACEHOLDER_TENANT_ID,
829
892
  PLACEHOLDER_WORKSPACE_ID: () => PLACEHOLDER_WORKSPACE_ID,
@@ -832,6 +895,11 @@ __export(src_exports, {
832
895
  POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME: () => POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME,
833
896
  POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME: () => POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME,
834
897
  POSTGRES_REPLICA_SECRET_ARN_SSM_NAME: () => POSTGRES_REPLICA_SECRET_ARN_SSM_NAME,
898
+ PRACTITIONER_CREDENTIALING_EXTENSION_URL: () => PRACTITIONER_CREDENTIALING_EXTENSION_URL,
899
+ PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL: () => PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL,
900
+ PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL: () => PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL,
901
+ PRACTITIONER_ROLE_PHYSICIAN: () => PRACTITIONER_ROLE_PHYSICIAN,
902
+ PRACTITIONER_ROLE_SCRIBE: () => PRACTITIONER_ROLE_SCRIBE,
835
903
  PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE: () => PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE,
836
904
  PerBranchHostname: () => PerBranchHostname,
837
905
  PlatformDeployBridge: () => PlatformDeployBridge,
@@ -841,6 +909,8 @@ __export(src_exports, {
841
909
  PostConfirmationLambda: () => PostConfirmationLambda,
842
910
  PreTokenGenerationLambda: () => PreTokenGenerationLambda,
843
911
  ProvisionDefaultWorkspaceLambda: () => ProvisionDefaultWorkspaceLambda,
912
+ QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL: () => QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL,
913
+ QMB_STATUS_VALUE_SUB_EXTENSION_URL: () => QMB_STATUS_VALUE_SUB_EXTENSION_URL,
844
914
  RENAMABLE_ENTITY_TYPE: () => import_workflows6.RENAMABLE_ENTITY_TYPE,
845
915
  RENAME_CASCADE_CONSUMER_NAME: () => RENAME_CASCADE_CONSUMER_NAME,
846
916
  RENAME_CASCADE_DEFAULT_CONCURRENCY: () => RENAME_CASCADE_DEFAULT_CONCURRENCY,
@@ -859,7 +929,9 @@ __export(src_exports, {
859
929
  SEED_SYSTEM_DATA_ACTOR_SYSTEM: () => SEED_SYSTEM_DATA_ACTOR_SYSTEM,
860
930
  SEED_SYSTEM_DATA_CONSUMER_NAME: () => SEED_SYSTEM_DATA_CONSUMER_NAME,
861
931
  SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR: () => SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR,
932
+ SNOMED_SYSTEM: () => SNOMED_SYSTEM,
862
933
  SSM_PARAM_NAME_FULL_DOMAIN: () => SSM_PARAM_NAME_FULL_DOMAIN,
934
+ STATE_MEDICAL_LICENSE_SYSTEM: () => STATE_MEDICAL_LICENSE_SYSTEM,
863
935
  STATIC_HOSTING_SERVICE_TYPE: () => STATIC_HOSTING_SERVICE_TYPE,
864
936
  SeedDemoDataLambda: () => SeedDemoDataLambda,
865
937
  SeedDemoDataWorkflow: () => SeedDemoDataWorkflow,
@@ -867,23 +939,71 @@ __export(src_exports, {
867
939
  SeedSystemDataWorkflow: () => SeedSystemDataWorkflow,
868
940
  StaticContent: () => StaticContent,
869
941
  StaticHosting: () => StaticHosting,
942
+ TOTAL_HOME_HEALTH_PATIENTS: () => TOTAL_HOME_HEALTH_PATIENTS,
870
943
  USER_ONBOARDING_EVENT_SOURCE: () => USER_ONBOARDING_EVENT_SOURCE,
944
+ US_NPI_SYSTEM: () => US_NPI_SYSTEM,
871
945
  UserOnboardingWorkflow: () => UserOnboardingWorkflow,
946
+ WOUND_DEPTH_CODE: () => WOUND_DEPTH_CODE,
947
+ WOUND_EXAM_PANEL_CODE: () => WOUND_EXAM_PANEL_CODE,
948
+ WOUND_EXAM_PANEL_DISPLAY: () => WOUND_EXAM_PANEL_DISPLAY,
949
+ WOUND_LENGTH_CODE: () => WOUND_LENGTH_CODE,
950
+ WOUND_STATUS_CODE: () => WOUND_STATUS_CODE,
951
+ WOUND_WIDTH_CODE: () => WOUND_WIDTH_CODE,
872
952
  WorkflowDedupConsumerNameInvalidError: () => WorkflowDedupConsumerNameInvalidError,
873
953
  WorkflowDedupTable: () => WorkflowDedupTable,
874
954
  WorkflowDedupTableDuplicateError: () => WorkflowDedupTableDuplicateError,
955
+ __resetOnSiteDemoClaimCachesForTests: () => __resetOnSiteDemoClaimCachesForTests,
956
+ __resetOnSiteDemoEncounterCachesForTests: () => __resetOnSiteDemoEncounterCachesForTests,
957
+ buildCredentialingQualifications: () => buildCredentialingQualifications,
875
958
  buildFhirCurrentResourceChangeDetail: () => buildFhirCurrentResourceChangeDetail,
959
+ buildOnSiteDemoBlockAppointments: () => buildOnSiteDemoBlockAppointments,
960
+ buildOnSiteDemoClaims: () => buildOnSiteDemoClaims,
961
+ buildOnSiteDemoEncounters: () => buildOnSiteDemoEncounters,
962
+ buildOnSiteDemoFacilityCoverages: () => buildOnSiteDemoFacilityCoverages,
963
+ buildOnSiteDemoFacilityPatients: () => buildOnSiteDemoFacilityPatients,
964
+ buildOnSiteDemoHomeHealthCoverages: () => buildOnSiteDemoHomeHealthCoverages,
965
+ buildOnSiteDemoHomeHealthPatients: () => buildOnSiteDemoHomeHealthPatients,
966
+ buildOnSiteDemoPaymentNotices: () => buildOnSiteDemoPaymentNotices,
967
+ buildOnSiteDemoWoundConditions: () => buildOnSiteDemoWoundConditions,
968
+ buildOnSiteDemoWoundObservations: () => buildOnSiteDemoWoundObservations,
969
+ buildOnSiteDemoWoundProcedures: () => buildOnSiteDemoWoundProcedures,
876
970
  buildProvisionDefaultWorkspaceRequestedDetail: () => buildProvisionDefaultWorkspaceRequestedDetail,
877
971
  computeBranchHash: () => computeBranchHash,
878
972
  demoMembershipId: () => demoMembershipId,
879
973
  demoRoleAssignmentId: () => demoRoleAssignmentId,
880
974
  demoRolesForUserInTenant: () => demoRolesForUserInTenant,
881
975
  demoScenarioIdentifier: () => demoScenarioIdentifier,
976
+ facilityPatientsForBlock: () => facilityPatientsForBlock,
977
+ findOnSiteDemoBlockTemplate: () => findOnSiteDemoBlockTemplate,
978
+ findOnSiteDemoFacilityPatientBlock: () => findOnSiteDemoFacilityPatientBlock,
979
+ findOnSiteDemoHomeHealthPatientProvider: () => findOnSiteDemoHomeHealthPatientProvider,
980
+ findOnSiteDemoHomeHealthPatientVisitCadenceDays: () => findOnSiteDemoHomeHealthPatientVisitCadenceDays,
882
981
  getDynamoDbDataStoreTableName: () => getDynamoDbDataStoreTableName,
883
982
  getPostgresReplicaSchemaName: () => getPostgresReplicaSchemaName,
884
983
  getWorkflowDedupTableName: () => getWorkflowDedupTableName,
984
+ homeHealthEligibleDoctors: () => homeHealthEligibleDoctors,
985
+ onSiteDemoBilledEncounterIds: () => onSiteDemoBilledEncounterIds,
986
+ onSiteDemoClaimIds: () => onSiteDemoClaimIds,
987
+ onSiteDemoDmeSupplierIds: () => onSiteDemoDmeSupplierIds,
988
+ onSiteDemoEncounterIds: () => onSiteDemoEncounterIds,
989
+ onSiteDemoEncounterMetadata: () => onSiteDemoEncounterMetadata,
990
+ onSiteDemoEncountersForPatient: () => onSiteDemoEncountersForPatient,
991
+ onSiteDemoFacilityPatientIds: () => onSiteDemoFacilityPatientIds,
992
+ onSiteDemoHomeHealthPatientIds: () => onSiteDemoHomeHealthPatientIds,
993
+ onSiteDemoInsurancePayorIds: () => onSiteDemoInsurancePayorIds,
994
+ onSiteDemoIntakeOnlyFacilityPatientIds: () => onSiteDemoIntakeOnlyFacilityPatientIds,
995
+ onSiteDemoIntakeOnlyHomeHealthPatientIds: () => onSiteDemoIntakeOnlyHomeHealthPatientIds,
996
+ onSiteDemoPaymentNoticeIds: () => onSiteDemoPaymentNoticeIds,
997
+ onSiteDemoScheduledFacilityPatientIds: () => onSiteDemoScheduledFacilityPatientIds,
998
+ onSiteDemoScheduledHomeHealthPatientIds: () => onSiteDemoScheduledHomeHealthPatientIds,
999
+ onSiteDemoUnbilledEncounterIds: () => onSiteDemoUnbilledEncounterIds,
1000
+ onSiteDemoWoundBearingPatientIds: () => onSiteDemoWoundBearingPatientIds,
1001
+ onSiteDemoWoundProcedurePatientIds: () => onSiteDemoWoundProcedurePatientIds,
885
1002
  openHiTagKey: () => openHiTagKey,
886
- openhiResourceIdentifier: () => openhiResourceIdentifier
1003
+ openhiResourceIdentifier: () => openhiResourceIdentifier,
1004
+ practitionerCredentialingForDoctor: () => practitionerCredentialingForDoctor,
1005
+ practitionerCredentialingForState: () => practitionerCredentialingForState,
1006
+ woundConditionIdForPatient: () => woundConditionIdForPatient
887
1007
  });
888
1008
  module.exports = __toCommonJS(src_exports);
889
1009
 
@@ -3112,16 +3232,63 @@ var OPENHI_RESOURCE_URN_SYSTEM = "http://openhi.org/";
3112
3232
  var DEMO_PERIOD = { start: "2026-01-01T00:00:00Z" };
3113
3233
  var PLACEHOLDER_TENANT_ID = "placeholder-tenant-id";
3114
3234
  var PLACEHOLDER_WORKSPACE_ID = "placeholder-workspace-id";
3235
+ var ON_SITE_DEMO_TENANT_ID = "on-site-demo-tenant";
3236
+ var ON_SITE_DEMO_WORKSPACE_ID = "on-site-demo-workspace";
3115
3237
  var DEV_USERS = [
3116
- { id: "dev-russell", email: "russell@codedrifters.com" },
3117
- { id: "dev-cameron", email: "cameron@codedrifters.com" },
3118
- { id: "dev-neelima", email: "neelima@codedrifters.com" },
3119
- { id: "dev-garon", email: "garon@codedrifters.com" },
3120
- { id: "dev-dave", email: "dave@codedrifters.com" },
3121
- { id: "dev-drew", email: "drew@codedrifters.com" },
3122
- { id: "dev-jessica", email: "jessica@codedrifters.com" },
3123
- { id: "dev-jared", email: "jared@codedrifters.com" },
3124
- { id: "dev-goddess", email: "goddess@codedrifters.com" },
3238
+ {
3239
+ id: "dev-russell",
3240
+ email: "russell@codedrifters.com",
3241
+ firstName: "Russell",
3242
+ lastName: "Ingram"
3243
+ },
3244
+ {
3245
+ id: "dev-cameron",
3246
+ email: "cameron@codedrifters.com",
3247
+ firstName: "Cameron",
3248
+ lastName: "Childress"
3249
+ },
3250
+ {
3251
+ id: "dev-neelima",
3252
+ email: "neelima@codedrifters.com",
3253
+ firstName: "Neelima",
3254
+ lastName: "Ramaraju"
3255
+ },
3256
+ {
3257
+ id: "dev-garon",
3258
+ email: "garon@codedrifters.com",
3259
+ firstName: "Garon",
3260
+ lastName: "Bailey"
3261
+ },
3262
+ {
3263
+ id: "dev-dave",
3264
+ email: "dave@codedrifters.com",
3265
+ firstName: "Dave",
3266
+ lastName: "Finlay"
3267
+ },
3268
+ {
3269
+ id: "dev-drew",
3270
+ email: "drew@codedrifters.com",
3271
+ firstName: "Drew",
3272
+ lastName: "Morris"
3273
+ },
3274
+ {
3275
+ id: "dev-jessica",
3276
+ email: "jessica@codedrifters.com",
3277
+ firstName: "Jessica",
3278
+ lastName: "Branks"
3279
+ },
3280
+ {
3281
+ id: "dev-jared",
3282
+ email: "jared@codedrifters.com",
3283
+ firstName: "Jared",
3284
+ lastName: "Trotter"
3285
+ },
3286
+ {
3287
+ id: "dev-goddess",
3288
+ email: "goddess@codedrifters.com",
3289
+ firstName: "Goddess",
3290
+ lastName: "Culberson"
3291
+ },
3125
3292
  // Dedicated end-to-end test principal for admin-console Playwright
3126
3293
  // specs (issue #1275). Reuses the standard DEV_USERS plumbing
3127
3294
  // (Cognito user + DynamoDB User + per-tenant Memberships +
@@ -3131,78 +3298,3259 @@ var DEV_USERS = [
3131
3298
  // /openhi/seed/users/e2e-admin-console_at_codedrifters.com/password
3132
3299
  // out of band, and the seeded Cognito user picks it up via
3133
3300
  // AdminSetUserPassword on every seed run.
3134
- { id: "dev-e2e-admin-console", email: "e2e-admin-console@codedrifters.com" }
3301
+ {
3302
+ id: "dev-e2e-admin-console",
3303
+ email: "e2e-admin-console@codedrifters.com",
3304
+ firstName: "E2E",
3305
+ lastName: "AdminConsole"
3306
+ }
3307
+ ];
3308
+ var DEMO_TENANT_SPECS = [
3309
+ {
3310
+ scenario: "placeholder",
3311
+ tenantId: PLACEHOLDER_TENANT_ID,
3312
+ tenantName: "OpenHI Placeholder Tenant",
3313
+ workspaces: [
3314
+ {
3315
+ id: PLACEHOLDER_WORKSPACE_ID,
3316
+ name: "OpenHI Placeholder Workspace",
3317
+ roleSuffix: "workspace"
3318
+ }
3319
+ ]
3320
+ },
3321
+ {
3322
+ scenario: "on-site-demo",
3323
+ tenantId: ON_SITE_DEMO_TENANT_ID,
3324
+ tenantName: "On-Site Medical \u2014 Demo",
3325
+ workspaces: [
3326
+ {
3327
+ id: ON_SITE_DEMO_WORKSPACE_ID,
3328
+ name: "On-Site Medical \u2014 Primary Workspace",
3329
+ roleSuffix: "workspace"
3330
+ }
3331
+ ]
3332
+ },
3333
+ {
3334
+ scenario: "demo-wound-care",
3335
+ tenantId: "demo-wound-care-tenant",
3336
+ tenantName: "Cedarbrook Wound Healing Institute",
3337
+ workspaces: [
3338
+ {
3339
+ id: "demo-wound-care-workspace",
3340
+ name: "Cedarbrook Outpatient Wound Clinic",
3341
+ roleSuffix: "workspace"
3342
+ }
3343
+ ]
3344
+ },
3345
+ {
3346
+ scenario: "demo-primary-care",
3347
+ tenantId: "demo-primary-care-tenant",
3348
+ tenantName: "Maple Ridge Family Medicine",
3349
+ workspaces: [
3350
+ {
3351
+ id: "demo-primary-care-workspace",
3352
+ name: "Maple Ridge Main Street Office",
3353
+ roleSuffix: "workspace"
3354
+ }
3355
+ ]
3356
+ },
3357
+ {
3358
+ scenario: "demo-mixed",
3359
+ tenantId: "demo-mixed-tenant",
3360
+ tenantName: "Northbridge Health Network",
3361
+ workspaces: [
3362
+ {
3363
+ id: "demo-mixed-workspace-wound-care",
3364
+ name: "Northbridge Wound Care Center",
3365
+ roleSuffix: "workspace-wound-care"
3366
+ },
3367
+ {
3368
+ id: "demo-mixed-workspace-primary-care",
3369
+ name: "Northbridge Family Practice",
3370
+ roleSuffix: "workspace-primary-care"
3371
+ }
3372
+ ]
3373
+ }
3374
+ ];
3375
+ var demoMembershipId = (devUserId, tenantId) => `demo-membership-${devUserId}-${tenantId}`;
3376
+ var demoRoleAssignmentId = (devUserId, tenantId, roleCode) => `demo-roleassignment-${devUserId}-${tenantId}-${roleCode}`;
3377
+ var demoScenarioIdentifier = (scenario, roleSuffix) => ({
3378
+ system: DEMO_URN_SYSTEM,
3379
+ value: `${scenario}:${roleSuffix}`
3380
+ });
3381
+ var openhiResourceIdentifier = (params) => ({
3382
+ use: "unversioned",
3383
+ system: OPENHI_RESOURCE_URN_SYSTEM,
3384
+ value: `urn:ohi:${params.tenantId}:${params.workspaceId}:${params.resourceType}:${params.id}`
3385
+ });
3386
+ var demoRolesForUserInTenant = (_user, _tenantId) => {
3387
+ void _user;
3388
+ void _tenantId;
3389
+ return [import_types.PLATFORM_ROLE_CODE.TENANT_ADMIN];
3390
+ };
3391
+
3392
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-facilities.ts
3393
+ var DIRECTOR_OF_NURSING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/director-of-nursing";
3394
+ var DIRECTOR_OF_NURSING_NAME_EXTENSION_URL = "name";
3395
+ var DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL = "phone";
3396
+ var DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL = "email";
3397
+ var ON_SITE_SCENARIO = "on-site-demo";
3398
+ var FACILITY_SPECS = [
3399
+ {
3400
+ id: "on-site-demo-facility-001",
3401
+ name: "Druid Hills Skilled Nursing",
3402
+ phone: "+14045550301",
3403
+ email: "frontdesk@druidhills.on-site-demo.example.com",
3404
+ addressLine: "1455 Clifton Road NE",
3405
+ addressCity: "Atlanta",
3406
+ addressState: "GA",
3407
+ addressPostalCode: "30322",
3408
+ directorOfNursingName: "Patricia Lambert, RN",
3409
+ directorOfNursingPhone: "+14045550311",
3410
+ directorOfNursingEmail: "p.lambert@druidhills.on-site-demo.example.com"
3411
+ },
3412
+ {
3413
+ id: "on-site-demo-facility-002",
3414
+ name: "Buckhead Rehabilitation Center",
3415
+ phone: "+14045550302",
3416
+ email: "frontdesk@buckhead.on-site-demo.example.com",
3417
+ addressLine: "3193 Howell Mill Road NW",
3418
+ addressCity: "Atlanta",
3419
+ addressState: "GA",
3420
+ addressPostalCode: "30327",
3421
+ directorOfNursingName: "Karen Whitfield, RN",
3422
+ directorOfNursingPhone: "+14045550312",
3423
+ directorOfNursingEmail: "k.whitfield@buckhead.on-site-demo.example.com"
3424
+ },
3425
+ {
3426
+ id: "on-site-demo-facility-003",
3427
+ name: "Decatur Senior Living",
3428
+ phone: "+14045550303",
3429
+ email: "frontdesk@decatur.on-site-demo.example.com",
3430
+ addressLine: "920 Church Street",
3431
+ addressCity: "Decatur",
3432
+ addressState: "GA",
3433
+ addressPostalCode: "30030",
3434
+ directorOfNursingName: "Monique Beaumont, RN",
3435
+ directorOfNursingPhone: "+14045550313",
3436
+ directorOfNursingEmail: "m.beaumont@decatur.on-site-demo.example.com"
3437
+ }
3438
+ ];
3439
+ var buildIdentifierPair = (locationId, roleSuffix) => [
3440
+ demoScenarioIdentifier(ON_SITE_SCENARIO, roleSuffix),
3441
+ openhiResourceIdentifier({
3442
+ tenantId: ON_SITE_DEMO_TENANT_ID,
3443
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
3444
+ resourceType: "Location",
3445
+ id: locationId
3446
+ })
3447
+ ];
3448
+ var buildFacilityResource = (spec) => ({
3449
+ resourceType: "Location",
3450
+ id: spec.id,
3451
+ status: "active",
3452
+ name: spec.name,
3453
+ identifier: buildIdentifierPair(spec.id, `facility-${spec.id}`),
3454
+ type: [{ text: "facility" }],
3455
+ telecom: [
3456
+ { system: "phone", value: spec.phone, use: "work" },
3457
+ { system: "email", value: spec.email, use: "work" }
3458
+ ],
3459
+ address: {
3460
+ use: "work",
3461
+ line: [spec.addressLine],
3462
+ city: spec.addressCity,
3463
+ state: spec.addressState,
3464
+ postalCode: spec.addressPostalCode,
3465
+ country: "US"
3466
+ },
3467
+ extension: [
3468
+ {
3469
+ url: DIRECTOR_OF_NURSING_EXTENSION_URL,
3470
+ extension: [
3471
+ {
3472
+ url: DIRECTOR_OF_NURSING_NAME_EXTENSION_URL,
3473
+ valueString: spec.directorOfNursingName
3474
+ },
3475
+ {
3476
+ url: DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL,
3477
+ valueString: spec.directorOfNursingPhone
3478
+ },
3479
+ {
3480
+ url: DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL,
3481
+ valueString: spec.directorOfNursingEmail
3482
+ }
3483
+ ]
3484
+ }
3485
+ ]
3486
+ });
3487
+ var ON_SITE_DEMO_FACILITIES = FACILITY_SPECS.map(buildFacilityResource);
3488
+ var ON_SITE_DEMO_FACILITY_IDS = FACILITY_SPECS.map((f) => f.id);
3489
+
3490
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-blocks.ts
3491
+ var ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/block-capacity";
3492
+ var ON_SITE_APPOINTMENT_TYPE_SYSTEM = "https://onsite-medical.org/appointment-type";
3493
+ var BLOCK_OCCURRENCE_WEEKS_PAST = 4;
3494
+ var BLOCK_OCCURRENCE_WEEKS_FUTURE = 8;
3495
+ var BLOCK_OCCURRENCES_PER_TEMPLATE = BLOCK_OCCURRENCE_WEEKS_PAST + 1 + BLOCK_OCCURRENCE_WEEKS_FUTURE;
3496
+ var BLOCK_TEMPLATES = [
3497
+ {
3498
+ id: "on-site-demo-block-001",
3499
+ facilityId: "on-site-demo-facility-001",
3500
+ // Druid Hills
3501
+ displayName: "Druid Hills \u2014 Tuesday rounds",
3502
+ dayOfWeek: 2,
3503
+ // Tuesday
3504
+ startHourUtc: 14,
3505
+ // 09:00 ET (EST: 14:00 UTC; EDT: 13:00 UTC) — fixed UTC keeps demo deterministic
3506
+ endHourUtc: 18,
3507
+ // 4-hour block
3508
+ doctorId: "on-site-demo-doctor-001",
3509
+ scribeId: "on-site-demo-scribe-001",
3510
+ capacity: 16
3511
+ },
3512
+ {
3513
+ id: "on-site-demo-block-002",
3514
+ facilityId: "on-site-demo-facility-001",
3515
+ // Druid Hills (same facility, different weekday)
3516
+ displayName: "Druid Hills \u2014 Thursday rounds",
3517
+ dayOfWeek: 4,
3518
+ // Thursday
3519
+ startHourUtc: 14,
3520
+ endHourUtc: 18,
3521
+ doctorId: "on-site-demo-doctor-002",
3522
+ scribeId: "on-site-demo-scribe-002",
3523
+ capacity: 16
3524
+ },
3525
+ {
3526
+ id: "on-site-demo-block-003",
3527
+ facilityId: "on-site-demo-facility-002",
3528
+ // Buckhead
3529
+ displayName: "Buckhead \u2014 Wednesday rounds",
3530
+ dayOfWeek: 3,
3531
+ // Wednesday
3532
+ startHourUtc: 14,
3533
+ endHourUtc: 18,
3534
+ doctorId: "on-site-demo-doctor-003",
3535
+ scribeId: "on-site-demo-scribe-003",
3536
+ capacity: 14
3537
+ },
3538
+ {
3539
+ id: "on-site-demo-block-004",
3540
+ facilityId: "on-site-demo-facility-003",
3541
+ // Decatur
3542
+ displayName: "Decatur \u2014 Monday rounds",
3543
+ dayOfWeek: 1,
3544
+ // Monday
3545
+ startHourUtc: 14,
3546
+ endHourUtc: 18,
3547
+ doctorId: "on-site-demo-doctor-004",
3548
+ scribeId: "on-site-demo-scribe-004",
3549
+ capacity: 12
3550
+ }
3551
+ ];
3552
+ var validateBlockTemplateReferences = () => {
3553
+ const facilitySet = new Set(ON_SITE_DEMO_FACILITY_IDS);
3554
+ const doctorSet = new Set(ON_SITE_DEMO_DOCTOR_IDS);
3555
+ const scribeSet = new Set(ON_SITE_DEMO_SCRIBE_IDS);
3556
+ for (const template of BLOCK_TEMPLATES) {
3557
+ if (!facilitySet.has(template.facilityId)) {
3558
+ throw new Error(
3559
+ `Block template "${template.id}" references unknown facility id "${template.facilityId}".`
3560
+ );
3561
+ }
3562
+ if (!doctorSet.has(template.doctorId)) {
3563
+ throw new Error(
3564
+ `Block template "${template.id}" references unknown doctor id "${template.doctorId}".`
3565
+ );
3566
+ }
3567
+ if (!scribeSet.has(template.scribeId)) {
3568
+ throw new Error(
3569
+ `Block template "${template.id}" references unknown scribe id "${template.scribeId}".`
3570
+ );
3571
+ }
3572
+ }
3573
+ };
3574
+ var ON_SITE_DEMO_BLOCK_TEMPLATE_IDS = BLOCK_TEMPLATES.map((t) => t.id);
3575
+ var ON_SITE_SCENARIO2 = "on-site-demo";
3576
+ var mondayOfIsoWeekUtc = (referenceIso) => {
3577
+ const ref = new Date(referenceIso);
3578
+ if (Number.isNaN(ref.getTime())) {
3579
+ throw new Error(
3580
+ `mondayOfIsoWeekUtc: invalid reference date "${referenceIso}".`
3581
+ );
3582
+ }
3583
+ const utcDay = ref.getUTCDay() === 0 ? 7 : ref.getUTCDay();
3584
+ const monday = new Date(
3585
+ Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
3586
+ );
3587
+ monday.setUTCDate(monday.getUTCDate() - (utcDay - 1));
3588
+ return monday;
3589
+ };
3590
+ var occurrenceId = (templateId, weekOffset) => {
3591
+ const sign = weekOffset >= 0 ? "p" : "m";
3592
+ const magnitude = Math.abs(weekOffset).toString().padStart(2, "0");
3593
+ return `${templateId}-w${sign}${magnitude}`;
3594
+ };
3595
+ var buildIdentifierPair2 = (appointmentId, roleSuffix) => [
3596
+ demoScenarioIdentifier(ON_SITE_SCENARIO2, roleSuffix),
3597
+ openhiResourceIdentifier({
3598
+ tenantId: ON_SITE_DEMO_TENANT_ID,
3599
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
3600
+ resourceType: "Appointment",
3601
+ id: appointmentId
3602
+ })
3603
+ ];
3604
+ var toIsoZ = (d) => (
3605
+ // toISOString() always emits a `Z` suffix on UTC times.
3606
+ d.toISOString()
3607
+ );
3608
+ var buildOccurrenceAppointment = (template, anchorMondayUtc, weekOffset) => {
3609
+ const occurrenceDay = new Date(anchorMondayUtc);
3610
+ occurrenceDay.setUTCDate(
3611
+ occurrenceDay.getUTCDate() + weekOffset * 7 + (template.dayOfWeek - 1)
3612
+ );
3613
+ const start = new Date(occurrenceDay);
3614
+ start.setUTCHours(template.startHourUtc, 0, 0, 0);
3615
+ const end = new Date(occurrenceDay);
3616
+ end.setUTCHours(template.endHourUtc, 0, 0, 0);
3617
+ const id = occurrenceId(template.id, weekOffset);
3618
+ return {
3619
+ resourceType: "Appointment",
3620
+ id,
3621
+ status: "booked",
3622
+ identifier: buildIdentifierPair2(id, `block-${id}`),
3623
+ appointmentType: {
3624
+ coding: [
3625
+ {
3626
+ system: ON_SITE_APPOINTMENT_TYPE_SYSTEM,
3627
+ code: "block",
3628
+ display: "Block"
3629
+ }
3630
+ ],
3631
+ text: "Block"
3632
+ },
3633
+ description: template.displayName,
3634
+ start: toIsoZ(start),
3635
+ end: toIsoZ(end),
3636
+ minutesDuration: (template.endHourUtc - template.startHourUtc) * 60,
3637
+ participant: [
3638
+ {
3639
+ actor: {
3640
+ reference: `Location/${template.facilityId}`,
3641
+ type: "Location"
3642
+ },
3643
+ status: "accepted"
3644
+ },
3645
+ {
3646
+ actor: {
3647
+ reference: `Practitioner/${template.doctorId}`,
3648
+ type: "Practitioner"
3649
+ },
3650
+ status: "accepted"
3651
+ },
3652
+ {
3653
+ actor: {
3654
+ reference: `Practitioner/${template.scribeId}`,
3655
+ type: "Practitioner"
3656
+ },
3657
+ status: "accepted"
3658
+ }
3659
+ ],
3660
+ extension: [
3661
+ {
3662
+ url: ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL,
3663
+ valueInteger: template.capacity
3664
+ }
3665
+ ]
3666
+ };
3667
+ };
3668
+ var buildOnSiteDemoBlockAppointments = (referenceIso) => {
3669
+ validateBlockTemplateReferences();
3670
+ const anchorMonday = mondayOfIsoWeekUtc(referenceIso);
3671
+ const out = [];
3672
+ for (const template of BLOCK_TEMPLATES) {
3673
+ for (let weekOffset = -BLOCK_OCCURRENCE_WEEKS_PAST; weekOffset <= BLOCK_OCCURRENCE_WEEKS_FUTURE; weekOffset += 1) {
3674
+ out.push(buildOccurrenceAppointment(template, anchorMonday, weekOffset));
3675
+ }
3676
+ }
3677
+ return out;
3678
+ };
3679
+ var findOnSiteDemoBlockTemplate = (templateId) => {
3680
+ const t = BLOCK_TEMPLATES.find((tt) => tt.id === templateId);
3681
+ if (!t) {
3682
+ return void 0;
3683
+ }
3684
+ return {
3685
+ id: t.id,
3686
+ facilityId: t.facilityId,
3687
+ displayName: t.displayName,
3688
+ doctorId: t.doctorId,
3689
+ scribeId: t.scribeId,
3690
+ capacity: t.capacity,
3691
+ dayOfWeek: t.dayOfWeek
3692
+ };
3693
+ };
3694
+
3695
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-facility-patients.ts
3696
+ var PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-default-care-setting";
3697
+ var PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-default-care-location";
3698
+ var PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-residency-admission-date";
3699
+ var PATIENT_RESIDENCY_ROOM_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-residency-room";
3700
+ var PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-assigned-block-template";
3701
+ var PATIENT_HOSPICE_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-hospice-status";
3702
+ var HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL = "status";
3703
+ var HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL = "effectiveDate";
3704
+ var COVERAGE_VERIFICATION_DATE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/coverage-verification-date";
3705
+ var COVERAGE_QMB_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/coverage-qmb-status";
3706
+ var QMB_STATUS_VALUE_SUB_EXTENSION_URL = "status";
3707
+ var QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL = "effectiveDate";
3708
+ var COVERAGE_PAYOR_TYPE_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/coverage-payor-type";
3709
+ var PAYOR_TYPE_COMMERCIAL = "commercial";
3710
+ var PAYOR_TYPE_MEDICARE = "medicare";
3711
+ var PAYOR_TYPE_MEDICARE_ADVANTAGE = "medicare-advantage";
3712
+ var PATIENTS_PER_BLOCK = [
3713
+ { blockTemplateId: "on-site-demo-block-001", count: 16 },
3714
+ { blockTemplateId: "on-site-demo-block-002", count: 14 },
3715
+ { blockTemplateId: "on-site-demo-block-003", count: 18 },
3716
+ { blockTemplateId: "on-site-demo-block-004", count: 12 }
3717
+ ];
3718
+ var INTAKE_ONLY_PATIENTS_PER_FACILITY = 2;
3719
+ var PRIMARY_PAYOR_OPTIONS = [
3720
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Aetna PPO" },
3721
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Blue Cross Blue Shield of Georgia" },
3722
+ { type: PAYOR_TYPE_COMMERCIAL, display: "UnitedHealthcare Choice Plus" },
3723
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Cigna OAP" },
3724
+ { type: PAYOR_TYPE_MEDICARE, display: "Medicare Part B" },
3725
+ { type: PAYOR_TYPE_MEDICARE_ADVANTAGE, display: "Humana Medicare Advantage" },
3726
+ {
3727
+ type: PAYOR_TYPE_MEDICARE_ADVANTAGE,
3728
+ display: "Wellcare by Allwell HMO"
3729
+ }
3730
+ ];
3731
+ var SECONDARY_PAYOR_OPTIONS = [
3732
+ { display: "AARP Medigap Plan G" },
3733
+ { display: "Mutual of Omaha Medicare Supplement" },
3734
+ { display: "Cigna Supplemental Health" },
3735
+ { display: "AFLAC Supplemental" }
3736
+ ];
3737
+ var PATIENT_LAST_NAMES = [
3738
+ "Anderson",
3739
+ "Bennett",
3740
+ "Brennan",
3741
+ "Carter",
3742
+ "Chen",
3743
+ "Coleman",
3744
+ "Cooper",
3745
+ "Davis",
3746
+ "Diaz",
3747
+ "Edwards",
3748
+ "Fisher",
3749
+ "Foster",
3750
+ "Garcia",
3751
+ "Garrett",
3752
+ "Gonzalez",
3753
+ "Graham",
3754
+ "Greene",
3755
+ "Hall",
3756
+ "Harper",
3757
+ "Harris",
3758
+ "Hayes",
3759
+ "Hernandez",
3760
+ "Holloway",
3761
+ "Hughes",
3762
+ "Jackson",
3763
+ "Jenkins",
3764
+ "Johnson",
3765
+ "Jones",
3766
+ "Kelly",
3767
+ "Kim",
3768
+ "Lambert",
3769
+ "Lawson",
3770
+ "Lee",
3771
+ "Lopez",
3772
+ "Marshall",
3773
+ "Martin",
3774
+ "Mason",
3775
+ "McKenzie",
3776
+ "Mendez",
3777
+ "Miller",
3778
+ "Mitchell",
3779
+ "Moore",
3780
+ "Morgan",
3781
+ "Morris",
3782
+ "Murphy",
3783
+ "Nguyen",
3784
+ "Nichols",
3785
+ "Norton",
3786
+ "O'Brien",
3787
+ "Ortiz",
3788
+ "Owens",
3789
+ "Park",
3790
+ "Patel",
3791
+ "Pearson",
3792
+ "Perez",
3793
+ "Phillips",
3794
+ "Porter",
3795
+ "Powell",
3796
+ "Ramirez",
3797
+ "Reed",
3798
+ "Reyes",
3799
+ "Robinson",
3800
+ "Rodriguez",
3801
+ "Russell",
3802
+ "Sanders",
3803
+ "Schultz",
3804
+ "Singh",
3805
+ "Stewart",
3806
+ "Sullivan",
3807
+ "Tanaka",
3808
+ "Taylor",
3809
+ "Thompson",
3810
+ "Torres",
3811
+ "Walker",
3812
+ "Wallace",
3813
+ "Watson",
3814
+ "Webb",
3815
+ "Williams",
3816
+ "Wilson",
3817
+ "Wong",
3818
+ "Wright"
3819
+ ];
3820
+ var PATIENT_FIRST_NAMES = [
3821
+ { name: "Margaret", gender: "female" },
3822
+ { name: "Robert", gender: "male" },
3823
+ { name: "Dorothy", gender: "female" },
3824
+ { name: "William", gender: "male" },
3825
+ { name: "Helen", gender: "female" },
3826
+ { name: "Charles", gender: "male" },
3827
+ { name: "Patricia", gender: "female" },
3828
+ { name: "Richard", gender: "male" },
3829
+ { name: "Barbara", gender: "female" },
3830
+ { name: "James", gender: "male" },
3831
+ { name: "Linda", gender: "female" },
3832
+ { name: "George", gender: "male" },
3833
+ { name: "Mary", gender: "female" },
3834
+ { name: "Joseph", gender: "male" },
3835
+ { name: "Elizabeth", gender: "female" },
3836
+ { name: "Thomas", gender: "male" },
3837
+ { name: "Susan", gender: "female" },
3838
+ { name: "Frank", gender: "male" },
3839
+ { name: "Ruth", gender: "female" },
3840
+ { name: "Walter", gender: "male" },
3841
+ { name: "Carol", gender: "female" },
3842
+ { name: "Donald", gender: "male" },
3843
+ { name: "Janet", gender: "female" },
3844
+ { name: "Harold", gender: "male" },
3845
+ { name: "Joan", gender: "female" },
3846
+ { name: "Edward", gender: "male" },
3847
+ { name: "Nancy", gender: "female" },
3848
+ { name: "Henry", gender: "male" },
3849
+ { name: "Betty", gender: "female" },
3850
+ { name: "Arthur", gender: "male" }
3851
+ ];
3852
+ var ON_SITE_SCENARIO3 = "on-site-demo";
3853
+ var PATIENT_ANCHOR_DATE = "2026-05-01T00:00:00Z";
3854
+ var padIndex = (n) => n.toString().padStart(3, "0");
3855
+ var deterministicBirthDate = (index) => {
3856
+ const baseYear = 1935;
3857
+ const yearSpan = 30;
3858
+ const year = baseYear + index % yearSpan;
3859
+ const month = index * 7 % 12 + 1;
3860
+ const day = index * 11 % 28 + 1;
3861
+ const mm = month.toString().padStart(2, "0");
3862
+ const dd = day.toString().padStart(2, "0");
3863
+ return `${year}-${mm}-${dd}`;
3864
+ };
3865
+ var deterministicVerificationDate = (index) => {
3866
+ const dayOffset = index % 30 + 1;
3867
+ const anchor = new Date(PATIENT_ANCHOR_DATE);
3868
+ const verifyAt = new Date(anchor);
3869
+ verifyAt.setUTCDate(verifyAt.getUTCDate() - dayOffset);
3870
+ return verifyAt.toISOString();
3871
+ };
3872
+ var deterministicAdmissionDate = (index) => {
3873
+ const dayOffset = index * 13 % 365 + 1;
3874
+ const anchor = new Date(PATIENT_ANCHOR_DATE);
3875
+ const admitAt = new Date(anchor);
3876
+ admitAt.setUTCDate(admitAt.getUTCDate() - dayOffset);
3877
+ return admitAt.toISOString().slice(0, 10);
3878
+ };
3879
+ var deterministicPhone = (index) => {
3880
+ const last4 = (400 + index).toString().padStart(4, "0");
3881
+ return `+1404555${last4}`;
3882
+ };
3883
+ var deterministicEmail = (firstName, lastName, index) => {
3884
+ const local = `${firstName}.${lastName}.${padIndex(index)}`.toLowerCase().replace(/[^a-z0-9.]/g, "");
3885
+ return `${local}@on-site-demo.example.com`;
3886
+ };
3887
+ var FACILITY_STREET_NAMES = [
3888
+ "Peachtree Street NE",
3889
+ "Ponce de Leon Avenue",
3890
+ "Piedmont Avenue",
3891
+ "Howell Mill Road NW",
3892
+ "Northside Drive NW",
3893
+ "Edgewood Avenue SE",
3894
+ "Spring Street NW",
3895
+ "Clifton Road NE"
3896
+ ];
3897
+ var deterministicAddressLine = (index) => {
3898
+ const houseNumber = 100 + index * 7;
3899
+ const streetIndex = index % FACILITY_STREET_NAMES.length;
3900
+ return `${houseNumber} ${FACILITY_STREET_NAMES[streetIndex]}`;
3901
+ };
3902
+ var deterministicPrimaryPayor = (index) => {
3903
+ const bucket = index % 10;
3904
+ if (bucket <= 3) {
3905
+ return PRIMARY_PAYOR_OPTIONS[bucket % 4];
3906
+ }
3907
+ if (bucket <= 6) {
3908
+ return PRIMARY_PAYOR_OPTIONS[4];
3909
+ }
3910
+ return PRIMARY_PAYOR_OPTIONS[5 + (bucket - 7) % 2];
3911
+ };
3912
+ var hasSecondaryCoverage = (index) => {
3913
+ return index % 5 < 2;
3914
+ };
3915
+ var hasQmbStatus = (index) => {
3916
+ return index % 2 === 0;
3917
+ };
3918
+ var isHospicePatient = (index) => {
3919
+ return index % 5 === 0;
3920
+ };
3921
+ var buildIdentifierPair3 = (patientId, roleSuffix) => [
3922
+ demoScenarioIdentifier(ON_SITE_SCENARIO3, roleSuffix),
3923
+ openhiResourceIdentifier({
3924
+ tenantId: ON_SITE_DEMO_TENANT_ID,
3925
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
3926
+ resourceType: "Patient",
3927
+ id: patientId
3928
+ })
3929
+ ];
3930
+ var buildCoverageIdentifierPair = (coverageId, roleSuffix) => [
3931
+ demoScenarioIdentifier(ON_SITE_SCENARIO3, roleSuffix),
3932
+ openhiResourceIdentifier({
3933
+ tenantId: ON_SITE_DEMO_TENANT_ID,
3934
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
3935
+ resourceType: "Coverage",
3936
+ id: coverageId
3937
+ })
3938
+ ];
3939
+ var buildFacilityPatientResource = (spec) => {
3940
+ const firstNameEntry = PATIENT_FIRST_NAMES[spec.index % PATIENT_FIRST_NAMES.length];
3941
+ const lastName = PATIENT_LAST_NAMES[spec.index * 3 % PATIENT_LAST_NAMES.length];
3942
+ const fullText = `${firstNameEntry.name} ${lastName}`;
3943
+ const admissionDate = deterministicAdmissionDate(spec.index);
3944
+ const blockExtension = spec.blockTemplateId ? [
3945
+ {
3946
+ url: PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL,
3947
+ valueString: spec.blockTemplateId
3948
+ }
3949
+ ] : [];
3950
+ const hospiceExtension = isHospicePatient(spec.index) ? [
3951
+ {
3952
+ url: PATIENT_HOSPICE_STATUS_EXTENSION_URL,
3953
+ extension: [
3954
+ {
3955
+ url: HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL,
3956
+ valueCode: "in_hospice"
3957
+ },
3958
+ {
3959
+ url: HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL,
3960
+ valueDate: admissionDate
3961
+ }
3962
+ ]
3963
+ }
3964
+ ] : [];
3965
+ return {
3966
+ resourceType: "Patient",
3967
+ id: spec.id,
3968
+ active: true,
3969
+ identifier: buildIdentifierPair3(spec.id, `patient-${spec.id}`),
3970
+ name: [
3971
+ {
3972
+ use: "official",
3973
+ text: fullText,
3974
+ given: [firstNameEntry.name],
3975
+ family: lastName
3976
+ }
3977
+ ],
3978
+ gender: firstNameEntry.gender,
3979
+ birthDate: deterministicBirthDate(spec.index),
3980
+ telecom: [
3981
+ {
3982
+ system: "phone",
3983
+ value: deterministicPhone(spec.index),
3984
+ use: "home"
3985
+ },
3986
+ {
3987
+ system: "email",
3988
+ value: deterministicEmail(firstNameEntry.name, lastName, spec.index),
3989
+ use: "home"
3990
+ }
3991
+ ],
3992
+ address: [
3993
+ {
3994
+ use: "home",
3995
+ line: [deterministicAddressLine(spec.index)],
3996
+ city: "Atlanta",
3997
+ state: "GA",
3998
+ postalCode: "30303",
3999
+ country: "US"
4000
+ }
4001
+ ],
4002
+ extension: [
4003
+ {
4004
+ url: PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL,
4005
+ valueCode: "facility"
4006
+ },
4007
+ {
4008
+ url: PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL,
4009
+ valueReference: { reference: `Location/${spec.facilityId}` }
4010
+ },
4011
+ {
4012
+ url: PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL,
4013
+ valueDate: admissionDate
4014
+ },
4015
+ {
4016
+ url: PATIENT_RESIDENCY_ROOM_EXTENSION_URL,
4017
+ // Pad to 3 digits so room numbers look like 100..600.
4018
+ valueString: `${100 + spec.index % 500}`
4019
+ },
4020
+ ...blockExtension,
4021
+ ...hospiceExtension
4022
+ ]
4023
+ };
4024
+ };
4025
+ var buildPrimaryCoverageResource = (spec) => {
4026
+ const id = `${spec.id}-coverage-primary`;
4027
+ const payor = deterministicPrimaryPayor(spec.index);
4028
+ const verificationDate = deterministicVerificationDate(spec.index);
4029
+ const isMedicarePrimary = payor.type === PAYOR_TYPE_MEDICARE;
4030
+ const qmbExtension = isMedicarePrimary && hasQmbStatus(spec.index) ? [
4031
+ {
4032
+ url: COVERAGE_QMB_STATUS_EXTENSION_URL,
4033
+ extension: [
4034
+ {
4035
+ url: QMB_STATUS_VALUE_SUB_EXTENSION_URL,
4036
+ valueCode: "active"
4037
+ },
4038
+ {
4039
+ url: QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL,
4040
+ valueDate: deterministicAdmissionDate(spec.index)
4041
+ }
4042
+ ]
4043
+ }
4044
+ ] : [];
4045
+ return {
4046
+ resourceType: "Coverage",
4047
+ id,
4048
+ status: "active",
4049
+ identifier: buildCoverageIdentifierPair(id, `coverage-primary-${spec.id}`),
4050
+ beneficiary: { reference: `Patient/${spec.id}`, type: "Patient" },
4051
+ subscriber: { reference: `Patient/${spec.id}`, type: "Patient" },
4052
+ subscriberId: `MBR-${padIndex(spec.index)}-PRI`,
4053
+ relationship: { text: "self" },
4054
+ payor: [
4055
+ {
4056
+ display: payor.display
4057
+ }
4058
+ ],
4059
+ type: {
4060
+ coding: [
4061
+ {
4062
+ system: COVERAGE_PAYOR_TYPE_SYSTEM,
4063
+ code: payor.type,
4064
+ display: payor.display
4065
+ }
4066
+ ],
4067
+ text: payor.display
4068
+ },
4069
+ order: 1,
4070
+ extension: [
4071
+ {
4072
+ url: COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
4073
+ valueDateTime: verificationDate
4074
+ },
4075
+ ...qmbExtension
4076
+ ]
4077
+ };
4078
+ };
4079
+ var buildSecondaryCoverageResource = (spec) => {
4080
+ if (!hasSecondaryCoverage(spec.index)) {
4081
+ return void 0;
4082
+ }
4083
+ const id = `${spec.id}-coverage-secondary`;
4084
+ const payor = SECONDARY_PAYOR_OPTIONS[spec.index % SECONDARY_PAYOR_OPTIONS.length];
4085
+ const verificationDate = deterministicVerificationDate(spec.index);
4086
+ return {
4087
+ resourceType: "Coverage",
4088
+ id,
4089
+ status: "active",
4090
+ identifier: buildCoverageIdentifierPair(
4091
+ id,
4092
+ `coverage-secondary-${spec.id}`
4093
+ ),
4094
+ beneficiary: { reference: `Patient/${spec.id}`, type: "Patient" },
4095
+ subscriber: { reference: `Patient/${spec.id}`, type: "Patient" },
4096
+ subscriberId: `MBR-${padIndex(spec.index)}-SEC`,
4097
+ relationship: { text: "self" },
4098
+ payor: [
4099
+ {
4100
+ display: payor.display
4101
+ }
4102
+ ],
4103
+ type: {
4104
+ text: payor.display
4105
+ },
4106
+ order: 2,
4107
+ extension: [
4108
+ {
4109
+ url: COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
4110
+ valueDateTime: verificationDate
4111
+ }
4112
+ ]
4113
+ };
4114
+ };
4115
+ var buildAllFacilityPatientSpecs = () => {
4116
+ validateBlockReferences();
4117
+ const specs = [];
4118
+ let nextIndex = 0;
4119
+ for (const { blockTemplateId, count } of PATIENTS_PER_BLOCK) {
4120
+ const template = findOnSiteDemoBlockTemplate(blockTemplateId);
4121
+ if (!template) {
4122
+ throw new Error(
4123
+ `Block template "${blockTemplateId}" not found while seeding facility patients.`
4124
+ );
4125
+ }
4126
+ for (let i = 0; i < count; i += 1) {
4127
+ const index = nextIndex;
4128
+ specs.push({
4129
+ id: `on-site-demo-facility-patient-${padIndex(index + 1)}`,
4130
+ index,
4131
+ facilityId: template.facilityId,
4132
+ blockTemplateId
4133
+ });
4134
+ nextIndex += 1;
4135
+ }
4136
+ }
4137
+ for (const facilityId of ON_SITE_DEMO_FACILITY_IDS) {
4138
+ for (let i = 0; i < INTAKE_ONLY_PATIENTS_PER_FACILITY; i += 1) {
4139
+ const index = nextIndex;
4140
+ specs.push({
4141
+ id: `on-site-demo-facility-patient-${padIndex(index + 1)}`,
4142
+ index,
4143
+ facilityId,
4144
+ blockTemplateId: void 0
4145
+ });
4146
+ nextIndex += 1;
4147
+ }
4148
+ }
4149
+ return specs;
4150
+ };
4151
+ var validateBlockReferences = () => {
4152
+ const blockSet = new Set(ON_SITE_DEMO_BLOCK_TEMPLATE_IDS);
4153
+ for (const entry of PATIENTS_PER_BLOCK) {
4154
+ if (!blockSet.has(entry.blockTemplateId)) {
4155
+ throw new Error(
4156
+ `Facility-patient generator references unknown block template id "${entry.blockTemplateId}".`
4157
+ );
4158
+ }
4159
+ }
4160
+ };
4161
+ var cachedSpecs;
4162
+ var getFacilityPatientSpecs = () => {
4163
+ if (!cachedSpecs) {
4164
+ cachedSpecs = buildAllFacilityPatientSpecs();
4165
+ }
4166
+ return cachedSpecs;
4167
+ };
4168
+ var buildOnSiteDemoFacilityPatients = () => getFacilityPatientSpecs().map(buildFacilityPatientResource);
4169
+ var buildOnSiteDemoFacilityCoverages = () => {
4170
+ const out = [];
4171
+ for (const spec of getFacilityPatientSpecs()) {
4172
+ out.push(buildPrimaryCoverageResource(spec));
4173
+ const secondary = buildSecondaryCoverageResource(spec);
4174
+ if (secondary) {
4175
+ out.push(secondary);
4176
+ }
4177
+ }
4178
+ return out;
4179
+ };
4180
+ var onSiteDemoFacilityPatientIds = () => getFacilityPatientSpecs().map((s) => s.id);
4181
+ var onSiteDemoScheduledFacilityPatientIds = () => getFacilityPatientSpecs().filter((s) => s.blockTemplateId !== void 0).map((s) => s.id);
4182
+ var onSiteDemoIntakeOnlyFacilityPatientIds = () => getFacilityPatientSpecs().filter((s) => s.blockTemplateId === void 0).map((s) => s.id);
4183
+ var findOnSiteDemoFacilityPatientBlock = (patientId) => {
4184
+ const spec = getFacilityPatientSpecs().find((s) => s.id === patientId);
4185
+ return spec?.blockTemplateId;
4186
+ };
4187
+ var facilityPatientsForBlock = (blockTemplateId) => getFacilityPatientSpecs().filter((s) => s.blockTemplateId === blockTemplateId).map((s) => s.id);
4188
+
4189
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-home-health-patients.ts
4190
+ var PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/patient-assigned-home-health-provider";
4191
+ var HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/home-health-visit-cadence-days";
4192
+ var HOME_HEALTH_VISIT_CADENCE_OPTIONS = [
4193
+ 7,
4194
+ 14,
4195
+ 28
4196
+ ];
4197
+ var SCHEDULED_HOME_HEALTH_PATIENTS = 17;
4198
+ var INTAKE_ONLY_HOME_HEALTH_PATIENTS = 3;
4199
+ var TOTAL_HOME_HEALTH_PATIENTS = SCHEDULED_HOME_HEALTH_PATIENTS + INTAKE_ONLY_HOME_HEALTH_PATIENTS;
4200
+ var PRIMARY_PAYOR_OPTIONS2 = [
4201
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Aetna PPO" },
4202
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Blue Cross Blue Shield of Georgia" },
4203
+ { type: PAYOR_TYPE_COMMERCIAL, display: "UnitedHealthcare Choice Plus" },
4204
+ { type: PAYOR_TYPE_COMMERCIAL, display: "Cigna OAP" },
4205
+ { type: PAYOR_TYPE_MEDICARE, display: "Medicare Part B" },
4206
+ { type: PAYOR_TYPE_MEDICARE_ADVANTAGE, display: "Humana Medicare Advantage" },
4207
+ {
4208
+ type: PAYOR_TYPE_MEDICARE_ADVANTAGE,
4209
+ display: "Wellcare by Allwell HMO"
4210
+ }
4211
+ ];
4212
+ var SECONDARY_PAYOR_OPTIONS2 = [
4213
+ { display: "AARP Medigap Plan G" },
4214
+ { display: "Mutual of Omaha Medicare Supplement" },
4215
+ { display: "Cigna Supplemental Health" },
4216
+ { display: "AFLAC Supplemental" }
4217
+ ];
4218
+ var PATIENT_LAST_NAMES2 = [
4219
+ "Acosta",
4220
+ "Barnett",
4221
+ "Bryant",
4222
+ "Castillo",
4223
+ "Conway",
4224
+ "Delgado",
4225
+ "Eldridge",
4226
+ "Fitzgerald",
4227
+ "Garza",
4228
+ "Hicks",
4229
+ "Ingram",
4230
+ "Jensen",
4231
+ "Klein",
4232
+ "Larson",
4233
+ "McCarthy",
4234
+ "Nash",
4235
+ "O'Connor",
4236
+ "Pierce",
4237
+ "Quintana",
4238
+ "Reilly",
4239
+ "Salazar",
4240
+ "Tate",
4241
+ "Underwood",
4242
+ "Vega",
4243
+ "Whitaker"
4244
+ ];
4245
+ var PATIENT_FIRST_NAMES2 = [
4246
+ { name: "Eleanor", gender: "female" },
4247
+ { name: "Albert", gender: "male" },
4248
+ { name: "Florence", gender: "female" },
4249
+ { name: "Bernard", gender: "male" },
4250
+ { name: "Marjorie", gender: "female" },
4251
+ { name: "Stanley", gender: "male" },
4252
+ { name: "Gladys", gender: "female" },
4253
+ { name: "Norman", gender: "male" },
4254
+ { name: "Pauline", gender: "female" },
4255
+ { name: "Raymond", gender: "male" },
4256
+ { name: "Lillian", gender: "female" },
4257
+ { name: "Howard", gender: "male" },
4258
+ { name: "Mildred", gender: "female" },
4259
+ { name: "Russell", gender: "male" },
4260
+ { name: "Frances", gender: "female" },
4261
+ { name: "Eugene", gender: "male" },
4262
+ { name: "Bernice", gender: "female" },
4263
+ { name: "Leonard", gender: "male" },
4264
+ { name: "Eileen", gender: "female" },
4265
+ { name: "Clifford", gender: "male" }
4266
+ ];
4267
+ var ON_SITE_SCENARIO4 = "on-site-demo";
4268
+ var PATIENT_ANCHOR_DATE2 = "2026-05-01T00:00:00Z";
4269
+ var padIndex2 = (n) => n.toString().padStart(3, "0");
4270
+ var deterministicBirthDate2 = (index) => {
4271
+ const baseYear = 1932;
4272
+ const yearSpan = 25;
4273
+ const year = baseYear + index % yearSpan;
4274
+ const month = index * 7 % 12 + 1;
4275
+ const day = index * 11 % 28 + 1;
4276
+ const mm = month.toString().padStart(2, "0");
4277
+ const dd = day.toString().padStart(2, "0");
4278
+ return `${year}-${mm}-${dd}`;
4279
+ };
4280
+ var deterministicVerificationDate2 = (index) => {
4281
+ const dayOffset = index % 30 + 1;
4282
+ const anchor = new Date(PATIENT_ANCHOR_DATE2);
4283
+ const verifyAt = new Date(anchor);
4284
+ verifyAt.setUTCDate(verifyAt.getUTCDate() - dayOffset);
4285
+ return verifyAt.toISOString();
4286
+ };
4287
+ var deterministicEffectiveDate = (index) => {
4288
+ const dayOffset = index * 13 % 365 + 1;
4289
+ const anchor = new Date(PATIENT_ANCHOR_DATE2);
4290
+ const eff = new Date(anchor);
4291
+ eff.setUTCDate(eff.getUTCDate() - dayOffset);
4292
+ return eff.toISOString().slice(0, 10);
4293
+ };
4294
+ var deterministicPhone2 = (index) => {
4295
+ const last4 = (600 + index).toString().padStart(4, "0");
4296
+ return `+1404555${last4}`;
4297
+ };
4298
+ var deterministicEmail2 = (firstName, lastName, index) => {
4299
+ const local = `${firstName}.${lastName}.${padIndex2(index)}`.toLowerCase().replace(/[^a-z0-9.]/g, "");
4300
+ return `${local}@on-site-demo.example.com`;
4301
+ };
4302
+ var HOME_STREET_NAMES = [
4303
+ "Briarcliff Road NE",
4304
+ "Cheshire Bridge Road",
4305
+ "Dekalb Avenue NE",
4306
+ "Lavista Road",
4307
+ "Memorial Drive SE",
4308
+ "Moreland Avenue NE",
4309
+ "North Decatur Road",
4310
+ "Roswell Road",
4311
+ "Virginia Avenue NE",
4312
+ "West Paces Ferry Road"
4313
+ ];
4314
+ var deterministicAddressLine2 = (index) => {
4315
+ const houseNumber = 200 + index * 11;
4316
+ const streetIndex = index % HOME_STREET_NAMES.length;
4317
+ return `${houseNumber} ${HOME_STREET_NAMES[streetIndex]}`;
4318
+ };
4319
+ var HOME_POSTAL_CODES = [
4320
+ "30306",
4321
+ "30307",
4322
+ "30324",
4323
+ "30329",
4324
+ "30033",
4325
+ "30030",
4326
+ "30342",
4327
+ "30327",
4328
+ "30319",
4329
+ "30305"
4330
+ ];
4331
+ var deterministicPostalCode = (index) => HOME_POSTAL_CODES[index % HOME_POSTAL_CODES.length];
4332
+ var deterministicPrimaryPayor2 = (index) => {
4333
+ const bucket = index % 10;
4334
+ if (bucket <= 3) {
4335
+ return PRIMARY_PAYOR_OPTIONS2[bucket % 4];
4336
+ }
4337
+ if (bucket <= 6) {
4338
+ return PRIMARY_PAYOR_OPTIONS2[4];
4339
+ }
4340
+ return PRIMARY_PAYOR_OPTIONS2[5 + (bucket - 7) % 2];
4341
+ };
4342
+ var hasSecondaryCoverage2 = (index) => {
4343
+ return index % 5 < 2;
4344
+ };
4345
+ var hasQmbStatus2 = (index) => {
4346
+ return index % 2 === 0;
4347
+ };
4348
+ var isHospicePatient2 = (index) => {
4349
+ return index % 5 === 0;
4350
+ };
4351
+ var deterministicVisitCadenceDays = (index) => HOME_HEALTH_VISIT_CADENCE_OPTIONS[index % HOME_HEALTH_VISIT_CADENCE_OPTIONS.length];
4352
+ var buildIdentifierPair4 = (patientId, roleSuffix) => [
4353
+ demoScenarioIdentifier(ON_SITE_SCENARIO4, roleSuffix),
4354
+ openhiResourceIdentifier({
4355
+ tenantId: ON_SITE_DEMO_TENANT_ID,
4356
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
4357
+ resourceType: "Patient",
4358
+ id: patientId
4359
+ })
4360
+ ];
4361
+ var buildCoverageIdentifierPair2 = (coverageId, roleSuffix) => [
4362
+ demoScenarioIdentifier(ON_SITE_SCENARIO4, roleSuffix),
4363
+ openhiResourceIdentifier({
4364
+ tenantId: ON_SITE_DEMO_TENANT_ID,
4365
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
4366
+ resourceType: "Coverage",
4367
+ id: coverageId
4368
+ })
4369
+ ];
4370
+ var buildHomeHealthPatientResource = (spec) => {
4371
+ const firstNameEntry = PATIENT_FIRST_NAMES2[spec.index % PATIENT_FIRST_NAMES2.length];
4372
+ const lastName = PATIENT_LAST_NAMES2[spec.index * 3 % PATIENT_LAST_NAMES2.length];
4373
+ const fullText = `${firstNameEntry.name} ${lastName}`;
4374
+ const effectiveDate = deterministicEffectiveDate(spec.index);
4375
+ const providerExtension = spec.providerId ? [
4376
+ {
4377
+ url: PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL,
4378
+ valueReference: {
4379
+ reference: `Practitioner/${spec.providerId}`,
4380
+ type: "Practitioner"
4381
+ }
4382
+ }
4383
+ ] : [];
4384
+ const cadenceExtension = typeof spec.visitCadenceDays === "number" ? [
4385
+ {
4386
+ url: HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL,
4387
+ valueInteger: spec.visitCadenceDays
4388
+ }
4389
+ ] : [];
4390
+ const hospiceExtension = isHospicePatient2(spec.index) ? [
4391
+ {
4392
+ url: PATIENT_HOSPICE_STATUS_EXTENSION_URL,
4393
+ extension: [
4394
+ {
4395
+ url: HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL,
4396
+ valueCode: "in_hospice"
4397
+ },
4398
+ {
4399
+ url: HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL,
4400
+ valueDate: effectiveDate
4401
+ }
4402
+ ]
4403
+ }
4404
+ ] : [];
4405
+ return {
4406
+ resourceType: "Patient",
4407
+ id: spec.id,
4408
+ active: true,
4409
+ identifier: buildIdentifierPair4(spec.id, `patient-${spec.id}`),
4410
+ name: [
4411
+ {
4412
+ use: "official",
4413
+ text: fullText,
4414
+ given: [firstNameEntry.name],
4415
+ family: lastName
4416
+ }
4417
+ ],
4418
+ gender: firstNameEntry.gender,
4419
+ birthDate: deterministicBirthDate2(spec.index),
4420
+ telecom: [
4421
+ {
4422
+ system: "phone",
4423
+ value: deterministicPhone2(spec.index),
4424
+ use: "home"
4425
+ },
4426
+ {
4427
+ system: "email",
4428
+ value: deterministicEmail2(firstNameEntry.name, lastName, spec.index),
4429
+ use: "home"
4430
+ }
4431
+ ],
4432
+ address: [
4433
+ {
4434
+ use: "home",
4435
+ line: [deterministicAddressLine2(spec.index)],
4436
+ city: "Atlanta",
4437
+ state: "GA",
4438
+ postalCode: deterministicPostalCode(spec.index),
4439
+ country: "US"
4440
+ }
4441
+ ],
4442
+ extension: [
4443
+ {
4444
+ url: PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL,
4445
+ valueCode: "home"
4446
+ },
4447
+ // No `patient-default-care-location` extension — home-health
4448
+ // patients have no facility Location reference (mirrors the
4449
+ // on-site `buildDefaultCareSettingExtensions` helper, which
4450
+ // only emits the location extension when setting === "facility").
4451
+ ...providerExtension,
4452
+ ...cadenceExtension,
4453
+ ...hospiceExtension
4454
+ ]
4455
+ };
4456
+ };
4457
+ var buildPrimaryCoverageResource2 = (spec) => {
4458
+ const id = `${spec.id}-coverage-primary`;
4459
+ const payor = deterministicPrimaryPayor2(spec.index);
4460
+ const verificationDate = deterministicVerificationDate2(spec.index);
4461
+ const isMedicarePrimary = payor.type === PAYOR_TYPE_MEDICARE;
4462
+ const qmbExtension = isMedicarePrimary && hasQmbStatus2(spec.index) ? [
4463
+ {
4464
+ url: COVERAGE_QMB_STATUS_EXTENSION_URL,
4465
+ extension: [
4466
+ {
4467
+ url: QMB_STATUS_VALUE_SUB_EXTENSION_URL,
4468
+ valueCode: "active"
4469
+ },
4470
+ {
4471
+ url: QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL,
4472
+ valueDate: deterministicEffectiveDate(spec.index)
4473
+ }
4474
+ ]
4475
+ }
4476
+ ] : [];
4477
+ return {
4478
+ resourceType: "Coverage",
4479
+ id,
4480
+ status: "active",
4481
+ identifier: buildCoverageIdentifierPair2(id, `coverage-primary-${spec.id}`),
4482
+ beneficiary: { reference: `Patient/${spec.id}`, type: "Patient" },
4483
+ subscriber: { reference: `Patient/${spec.id}`, type: "Patient" },
4484
+ subscriberId: `MBR-HH-${padIndex2(spec.index)}-PRI`,
4485
+ relationship: { text: "self" },
4486
+ payor: [
4487
+ {
4488
+ display: payor.display
4489
+ }
4490
+ ],
4491
+ type: {
4492
+ coding: [
4493
+ {
4494
+ system: COVERAGE_PAYOR_TYPE_SYSTEM,
4495
+ code: payor.type,
4496
+ display: payor.display
4497
+ }
4498
+ ],
4499
+ text: payor.display
4500
+ },
4501
+ order: 1,
4502
+ extension: [
4503
+ {
4504
+ url: COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
4505
+ valueDateTime: verificationDate
4506
+ },
4507
+ ...qmbExtension
4508
+ ]
4509
+ };
4510
+ };
4511
+ var buildSecondaryCoverageResource2 = (spec) => {
4512
+ if (!hasSecondaryCoverage2(spec.index)) {
4513
+ return void 0;
4514
+ }
4515
+ const id = `${spec.id}-coverage-secondary`;
4516
+ const payor = SECONDARY_PAYOR_OPTIONS2[spec.index % SECONDARY_PAYOR_OPTIONS2.length];
4517
+ const verificationDate = deterministicVerificationDate2(spec.index);
4518
+ return {
4519
+ resourceType: "Coverage",
4520
+ id,
4521
+ status: "active",
4522
+ identifier: buildCoverageIdentifierPair2(
4523
+ id,
4524
+ `coverage-secondary-${spec.id}`
4525
+ ),
4526
+ beneficiary: { reference: `Patient/${spec.id}`, type: "Patient" },
4527
+ subscriber: { reference: `Patient/${spec.id}`, type: "Patient" },
4528
+ subscriberId: `MBR-HH-${padIndex2(spec.index)}-SEC`,
4529
+ relationship: { text: "self" },
4530
+ payor: [
4531
+ {
4532
+ display: payor.display
4533
+ }
4534
+ ],
4535
+ type: {
4536
+ text: payor.display
4537
+ },
4538
+ order: 2,
4539
+ extension: [
4540
+ {
4541
+ url: COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
4542
+ valueDateTime: verificationDate
4543
+ }
4544
+ ]
4545
+ };
4546
+ };
4547
+ var buildAllHomeHealthPatientSpecs = () => {
4548
+ const eligibleDoctors = homeHealthEligibleDoctors();
4549
+ if (eligibleDoctors.length === 0) {
4550
+ throw new Error(
4551
+ "No home-health-eligible doctors found \u2014 cannot seed home-health patients."
4552
+ );
4553
+ }
4554
+ const specs = [];
4555
+ for (let i = 0; i < SCHEDULED_HOME_HEALTH_PATIENTS; i += 1) {
4556
+ const index = i;
4557
+ const providerId = eligibleDoctors[i % eligibleDoctors.length].id;
4558
+ if (!providerId) {
4559
+ throw new Error(
4560
+ "Home-health-eligible doctor is missing an id; cannot seed."
4561
+ );
4562
+ }
4563
+ specs.push({
4564
+ id: `on-site-demo-home-health-patient-${padIndex2(index + 1)}`,
4565
+ index,
4566
+ providerId,
4567
+ visitCadenceDays: deterministicVisitCadenceDays(index)
4568
+ });
4569
+ }
4570
+ for (let i = 0; i < INTAKE_ONLY_HOME_HEALTH_PATIENTS; i += 1) {
4571
+ const index = SCHEDULED_HOME_HEALTH_PATIENTS + i;
4572
+ specs.push({
4573
+ id: `on-site-demo-home-health-patient-${padIndex2(index + 1)}`,
4574
+ index,
4575
+ providerId: void 0,
4576
+ visitCadenceDays: void 0
4577
+ });
4578
+ }
4579
+ return specs;
4580
+ };
4581
+ var cachedSpecs2;
4582
+ var getHomeHealthPatientSpecs = () => {
4583
+ if (!cachedSpecs2) {
4584
+ cachedSpecs2 = buildAllHomeHealthPatientSpecs();
4585
+ }
4586
+ return cachedSpecs2;
4587
+ };
4588
+ var buildOnSiteDemoHomeHealthPatients = () => getHomeHealthPatientSpecs().map(buildHomeHealthPatientResource);
4589
+ var buildOnSiteDemoHomeHealthCoverages = () => {
4590
+ const out = [];
4591
+ for (const spec of getHomeHealthPatientSpecs()) {
4592
+ out.push(buildPrimaryCoverageResource2(spec));
4593
+ const secondary = buildSecondaryCoverageResource2(spec);
4594
+ if (secondary) {
4595
+ out.push(secondary);
4596
+ }
4597
+ }
4598
+ return out;
4599
+ };
4600
+ var onSiteDemoHomeHealthPatientIds = () => getHomeHealthPatientSpecs().map((s) => s.id);
4601
+ var onSiteDemoScheduledHomeHealthPatientIds = () => getHomeHealthPatientSpecs().filter((s) => s.providerId !== void 0).map((s) => s.id);
4602
+ var onSiteDemoIntakeOnlyHomeHealthPatientIds = () => getHomeHealthPatientSpecs().filter((s) => s.providerId === void 0).map((s) => s.id);
4603
+ var findOnSiteDemoHomeHealthPatientProvider = (patientId) => {
4604
+ const spec = getHomeHealthPatientSpecs().find((s) => s.id === patientId);
4605
+ return spec?.providerId;
4606
+ };
4607
+ var findOnSiteDemoHomeHealthPatientVisitCadenceDays = (patientId) => {
4608
+ const spec = getHomeHealthPatientSpecs().find((s) => s.id === patientId);
4609
+ return spec?.visitCadenceDays;
4610
+ };
4611
+
4612
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-encounters.ts
4613
+ var ENCOUNTER_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode";
4614
+ var ENCOUNTER_CLASS_FACILITY = {
4615
+ system: ENCOUNTER_CLASS_SYSTEM,
4616
+ code: "IMP",
4617
+ display: "Facility"
4618
+ };
4619
+ var ENCOUNTER_CLASS_HOME_HEALTH = {
4620
+ system: ENCOUNTER_CLASS_SYSTEM,
4621
+ code: "HH",
4622
+ display: "Home Health"
4623
+ };
4624
+ var LOINC_SYSTEM = "http://loinc.org";
4625
+ var SNOMED_SYSTEM = "http://snomed.info/sct";
4626
+ var CPT_SYSTEM = "http://www.ama-assn.org/go/cpt";
4627
+ var WOUND_EXAM_PANEL_CODE = "39135-9";
4628
+ var WOUND_EXAM_PANEL_DISPLAY = "Wound assessment panel";
4629
+ var WOUND_LENGTH_CODE = "39126-8";
4630
+ var WOUND_WIDTH_CODE = "39125-0";
4631
+ var WOUND_DEPTH_CODE = "39127-6";
4632
+ var WOUND_STATUS_CODE = "72311-4";
4633
+ var CONDITION_CLINICAL_STATUS_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-clinical";
4634
+ var HOME_HEALTH_VISITS_PAST = 4;
4635
+ var WOUND_BEARING_PATIENT_THRESHOLD = 70;
4636
+ var WOUND_PROCEDURE_PATIENT_THRESHOLD = 25;
4637
+ var WOUND_TYPE_OPTIONS = [
4638
+ { code: "421076008", display: "Pressure ulcer" },
4639
+ { code: "402863003", display: "Venous stasis ulcer" },
4640
+ { code: "371087003", display: "Diabetic foot ulcer" },
4641
+ { code: "262528002", display: "Arterial ulcer of lower extremity" },
4642
+ { code: "283682007", display: "Traumatic wound of lower extremity" }
4643
+ ];
4644
+ var WOUND_BODY_SITE_OPTIONS = [
4645
+ { code: "118473006", display: "Left lower limb" },
4646
+ { code: "32153003", display: "Left foot" },
4647
+ { code: "239043009", display: "Left heel" },
4648
+ { code: "61685007", display: "Lower limb" },
4649
+ { code: "118474000", display: "Right lower limb" },
4650
+ { code: "78791008", display: "Right foot" },
4651
+ { code: "239044003", display: "Right heel" }
4652
+ ];
4653
+ var WOUND_DEBRIDEMENT_PRESETS = [
4654
+ { id: "sharp-debridement", display: "Sharp Debridement", cptCode: "97597" },
4655
+ {
4656
+ id: "enzymatic-debridement",
4657
+ display: "Enzymatic Debridement",
4658
+ cptCode: "97602"
4659
+ },
4660
+ { id: "wound-irrigation", display: "Wound Irrigation", cptCode: "97605" },
4661
+ {
4662
+ id: "skin-substitute",
4663
+ display: "Skin Substitute Application",
4664
+ cptCode: "15271"
4665
+ }
4666
+ ];
4667
+ var ON_SITE_SCENARIO5 = "on-site-demo";
4668
+ var padIndex3 = (n) => n.toString().padStart(3, "0");
4669
+ var hashString3 = (input) => {
4670
+ let h = 0;
4671
+ for (let i = 0; i < input.length; i += 1) {
4672
+ h = h * 31 + input.charCodeAt(i) | 0;
4673
+ }
4674
+ return Math.abs(h);
4675
+ };
4676
+ var isWoundBearingPatient = (patientId) => hashString3(`${patientId}:wound-bearing`) % 100 < WOUND_BEARING_PATIENT_THRESHOLD;
4677
+ var getsWoundProcedure = (patientId) => hashString3(`${patientId}:procedure`) % 100 < WOUND_PROCEDURE_PATIENT_THRESHOLD;
4678
+ var getWoundTrajectory = (patientId) => hashString3(`${patientId}:trajectory`) % 5 < 3 ? "healing" : "worsening";
4679
+ var getWoundType = (patientId) => WOUND_TYPE_OPTIONS[hashString3(`${patientId}:type`) % WOUND_TYPE_OPTIONS.length];
4680
+ var getWoundBodySite = (patientId) => WOUND_BODY_SITE_OPTIONS[hashString3(`${patientId}:bodysite`) % WOUND_BODY_SITE_OPTIONS.length];
4681
+ var getWoundProcedurePreset = (patientId) => WOUND_DEBRIDEMENT_PRESETS[hashString3(`${patientId}:cpt`) % WOUND_DEBRIDEMENT_PRESETS.length];
4682
+ var woundConditionIdForPatient = (patientId) => `${patientId}-wound-001`;
4683
+ var buildIdentifierPair5 = (resourceType, resourceId, roleSuffix) => [
4684
+ demoScenarioIdentifier(ON_SITE_SCENARIO5, roleSuffix),
4685
+ openhiResourceIdentifier({
4686
+ tenantId: ON_SITE_DEMO_TENANT_ID,
4687
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
4688
+ resourceType,
4689
+ id: resourceId
4690
+ })
4691
+ ];
4692
+ var mondayOfIsoWeekUtc2 = (referenceIso) => {
4693
+ const ref = new Date(referenceIso);
4694
+ if (Number.isNaN(ref.getTime())) {
4695
+ throw new Error(
4696
+ `mondayOfIsoWeekUtc: invalid reference date "${referenceIso}".`
4697
+ );
4698
+ }
4699
+ const utcDay = ref.getUTCDay() === 0 ? 7 : ref.getUTCDay();
4700
+ const monday = new Date(
4701
+ Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
4702
+ );
4703
+ monday.setUTCDate(monday.getUTCDate() - (utcDay - 1));
4704
+ return monday;
4705
+ };
4706
+ var toIsoZ2 = (d) => d.toISOString();
4707
+ var buildFacilityEncounterSpecs = (referenceIso) => {
4708
+ const anchorMonday = mondayOfIsoWeekUtc2(referenceIso);
4709
+ const out = [];
4710
+ for (const patientId of onSiteDemoScheduledFacilityPatientIds()) {
4711
+ const block = findBlockForPatient(patientId);
4712
+ if (!block) {
4713
+ continue;
4714
+ }
4715
+ const total = BLOCK_OCCURRENCE_WEEKS_PAST;
4716
+ for (let i = 0; i < total; i += 1) {
4717
+ const weekOffset = -(BLOCK_OCCURRENCE_WEEKS_PAST - i);
4718
+ const occurrenceDay = new Date(anchorMonday);
4719
+ occurrenceDay.setUTCDate(
4720
+ occurrenceDay.getUTCDate() + weekOffset * 7 + (block.dayOfWeek - 1)
4721
+ );
4722
+ const start = new Date(occurrenceDay);
4723
+ start.setUTCHours(14, 0, 0, 0);
4724
+ const end = new Date(occurrenceDay);
4725
+ end.setUTCHours(18, 0, 0, 0);
4726
+ const sign = "m";
4727
+ const magnitude = Math.abs(weekOffset).toString().padStart(2, "0");
4728
+ const appointmentId = `${block.id}-w${sign}${magnitude}`;
4729
+ out.push({
4730
+ id: `${patientId}-encounter-${padIndex3(i + 1)}`,
4731
+ patientId,
4732
+ sequence: i + 1,
4733
+ totalEncounters: total,
4734
+ periodStart: toIsoZ2(start),
4735
+ periodEnd: toIsoZ2(end),
4736
+ doctorId: block.doctorId,
4737
+ scribeId: block.scribeId,
4738
+ classCoding: ENCOUNTER_CLASS_FACILITY,
4739
+ facilityId: block.facilityId,
4740
+ appointmentId
4741
+ });
4742
+ }
4743
+ }
4744
+ return out;
4745
+ };
4746
+ var patientToBlockCache;
4747
+ var findBlockForPatient = (patientId) => {
4748
+ if (!patientToBlockCache) {
4749
+ const cache = /* @__PURE__ */ new Map();
4750
+ const scheduledIds = new Set(onSiteDemoScheduledFacilityPatientIds());
4751
+ const blockIds = [
4752
+ "on-site-demo-block-001",
4753
+ "on-site-demo-block-002",
4754
+ "on-site-demo-block-003",
4755
+ "on-site-demo-block-004"
4756
+ ];
4757
+ for (const blockId of blockIds) {
4758
+ const block = findOnSiteDemoBlockTemplate(blockId);
4759
+ if (!block) {
4760
+ continue;
4761
+ }
4762
+ for (const pid of facilityPatientsForBlock(blockId)) {
4763
+ if (scheduledIds.has(pid)) {
4764
+ cache.set(pid, block);
4765
+ }
4766
+ }
4767
+ }
4768
+ patientToBlockCache = cache;
4769
+ }
4770
+ return patientToBlockCache.get(patientId);
4771
+ };
4772
+ var buildHomeHealthEncounterSpecs = (referenceIso) => {
4773
+ const reference = new Date(referenceIso);
4774
+ if (Number.isNaN(reference.getTime())) {
4775
+ throw new Error(
4776
+ `buildHomeHealthEncounterSpecs: invalid reference date "${referenceIso}".`
4777
+ );
4778
+ }
4779
+ const out = [];
4780
+ for (const patientId of onSiteDemoScheduledHomeHealthPatientIds()) {
4781
+ const providerId = findOnSiteDemoHomeHealthPatientProvider(patientId);
4782
+ const cadenceDays = findOnSiteDemoHomeHealthPatientVisitCadenceDays(patientId);
4783
+ if (!providerId || typeof cadenceDays !== "number") {
4784
+ continue;
4785
+ }
4786
+ const total = HOME_HEALTH_VISITS_PAST;
4787
+ for (let i = 0; i < total; i += 1) {
4788
+ const visitsBack = total - i;
4789
+ const visitDay = new Date(reference);
4790
+ visitDay.setUTCDate(visitDay.getUTCDate() - visitsBack * cadenceDays);
4791
+ const start = new Date(visitDay);
4792
+ start.setUTCHours(14, 0, 0, 0);
4793
+ const end = new Date(visitDay);
4794
+ end.setUTCHours(15, 0, 0, 0);
4795
+ out.push({
4796
+ id: `${patientId}-encounter-${padIndex3(i + 1)}`,
4797
+ patientId,
4798
+ sequence: i + 1,
4799
+ totalEncounters: total,
4800
+ periodStart: toIsoZ2(start),
4801
+ periodEnd: toIsoZ2(end),
4802
+ doctorId: providerId,
4803
+ scribeId: void 0,
4804
+ classCoding: ENCOUNTER_CLASS_HOME_HEALTH,
4805
+ facilityId: void 0,
4806
+ appointmentId: void 0
4807
+ });
4808
+ }
4809
+ }
4810
+ return out;
4811
+ };
4812
+ var buildEncounterResource = (spec) => {
4813
+ const participant = [
4814
+ {
4815
+ individual: {
4816
+ reference: `Practitioner/${spec.doctorId}`,
4817
+ type: "Practitioner"
4818
+ }
4819
+ }
4820
+ ];
4821
+ if (spec.scribeId) {
4822
+ participant.push({
4823
+ individual: {
4824
+ reference: `Practitioner/${spec.scribeId}`,
4825
+ type: "Practitioner"
4826
+ }
4827
+ });
4828
+ }
4829
+ const encounter = {
4830
+ resourceType: "Encounter",
4831
+ id: spec.id,
4832
+ identifier: buildIdentifierPair5(
4833
+ "Encounter",
4834
+ spec.id,
4835
+ `encounter-${spec.id}`
4836
+ ),
4837
+ status: "finished",
4838
+ class: { ...spec.classCoding },
4839
+ subject: { reference: `Patient/${spec.patientId}`, type: "Patient" },
4840
+ period: { start: spec.periodStart, end: spec.periodEnd },
4841
+ participant
4842
+ };
4843
+ if (spec.facilityId) {
4844
+ encounter.location = [
4845
+ {
4846
+ location: {
4847
+ reference: `Location/${spec.facilityId}`,
4848
+ type: "Location"
4849
+ }
4850
+ }
4851
+ ];
4852
+ }
4853
+ if (spec.appointmentId) {
4854
+ encounter.appointment = [
4855
+ {
4856
+ reference: `Appointment/${spec.appointmentId}`,
4857
+ type: "Appointment"
4858
+ }
4859
+ ];
4860
+ }
4861
+ return encounter;
4862
+ };
4863
+ var buildWoundConditionResource = (patientId, firstEncounterStart) => {
4864
+ const woundType = getWoundType(patientId);
4865
+ const bodySite = getWoundBodySite(patientId);
4866
+ const id = woundConditionIdForPatient(patientId);
4867
+ return {
4868
+ resourceType: "Condition",
4869
+ id,
4870
+ identifier: buildIdentifierPair5("Condition", id, `wound-${patientId}`),
4871
+ clinicalStatus: {
4872
+ coding: [
4873
+ {
4874
+ system: CONDITION_CLINICAL_STATUS_SYSTEM,
4875
+ code: "active",
4876
+ display: "Active"
4877
+ }
4878
+ ]
4879
+ },
4880
+ category: [{ text: "wound" }],
4881
+ code: {
4882
+ text: woundType.display,
4883
+ coding: [
4884
+ {
4885
+ system: SNOMED_SYSTEM,
4886
+ code: woundType.code,
4887
+ display: woundType.display
4888
+ }
4889
+ ]
4890
+ },
4891
+ bodySite: [
4892
+ {
4893
+ coding: [
4894
+ {
4895
+ system: SNOMED_SYSTEM,
4896
+ code: bodySite.code,
4897
+ display: bodySite.display
4898
+ }
4899
+ ],
4900
+ text: bodySite.display
4901
+ }
4902
+ ],
4903
+ subject: { reference: `Patient/${patientId}`, type: "Patient" },
4904
+ onsetDateTime: firstEncounterStart,
4905
+ recordedDate: firstEncounterStart
4906
+ };
4907
+ };
4908
+ var woundSizeAtSequence = (patientId, sequence, totalEncounters) => {
4909
+ const baseLength = 4 + hashString3(`${patientId}:length`) % 4;
4910
+ const baseWidth = 3 + hashString3(`${patientId}:width`) % 3;
4911
+ const baseDepthTenths = 3 + hashString3(`${patientId}:depth`) % 6;
4912
+ const trajectory = getWoundTrajectory(patientId);
4913
+ const denom = Math.max(1, totalEncounters - 1);
4914
+ const progress = (sequence - 1) / denom;
4915
+ const sign = trajectory === "healing" ? -1 : 1;
4916
+ const shrinkOrGrow = trajectory === "healing" ? 0.4 : 0.3;
4917
+ const length = +(baseLength * (1 + sign * shrinkOrGrow * progress)).toFixed(
4918
+ 1
4919
+ );
4920
+ const width = +(baseWidth * (1 + sign * shrinkOrGrow * progress)).toFixed(1);
4921
+ const depth = +(baseDepthTenths / 10 * (1 + sign * shrinkOrGrow * progress)).toFixed(2);
4922
+ const status = trajectory === "healing" && sequence > 1 ? "improving" : trajectory === "worsening" && sequence > 1 ? "declining" : "stagnant";
4923
+ return { length, width, depth, status };
4924
+ };
4925
+ var buildWoundExamObservation = (patientId, encounterId, sequence, totalEncounters, effectiveDateTime) => {
4926
+ const size = woundSizeAtSequence(patientId, sequence, totalEncounters);
4927
+ const woundConditionId = woundConditionIdForPatient(patientId);
4928
+ const id = `${encounterId}-wound-exam`;
4929
+ return {
4930
+ resourceType: "Observation",
4931
+ id,
4932
+ identifier: buildIdentifierPair5(
4933
+ "Observation",
4934
+ id,
4935
+ `wound-exam-${encounterId}`
4936
+ ),
4937
+ status: "final",
4938
+ code: {
4939
+ coding: [
4940
+ {
4941
+ system: LOINC_SYSTEM,
4942
+ code: WOUND_EXAM_PANEL_CODE,
4943
+ display: WOUND_EXAM_PANEL_DISPLAY
4944
+ }
4945
+ ]
4946
+ },
4947
+ subject: { reference: `Patient/${patientId}`, type: "Patient" },
4948
+ encounter: { reference: `Encounter/${encounterId}`, type: "Encounter" },
4949
+ focus: [
4950
+ {
4951
+ reference: `Condition/${woundConditionId}`,
4952
+ type: "Condition"
4953
+ }
4954
+ ],
4955
+ effectiveDateTime,
4956
+ component: [
4957
+ {
4958
+ code: {
4959
+ coding: [
4960
+ {
4961
+ system: LOINC_SYSTEM,
4962
+ code: WOUND_LENGTH_CODE,
4963
+ display: "Length"
4964
+ }
4965
+ ]
4966
+ },
4967
+ valueQuantity: { value: size.length, unit: "cm" }
4968
+ },
4969
+ {
4970
+ code: {
4971
+ coding: [
4972
+ { system: LOINC_SYSTEM, code: WOUND_WIDTH_CODE, display: "Width" }
4973
+ ]
4974
+ },
4975
+ valueQuantity: { value: size.width, unit: "cm" }
4976
+ },
4977
+ {
4978
+ code: {
4979
+ coding: [
4980
+ { system: LOINC_SYSTEM, code: WOUND_DEPTH_CODE, display: "Depth" }
4981
+ ]
4982
+ },
4983
+ valueQuantity: { value: size.depth, unit: "cm" }
4984
+ },
4985
+ {
4986
+ code: {
4987
+ coding: [
4988
+ {
4989
+ system: LOINC_SYSTEM,
4990
+ code: WOUND_STATUS_CODE,
4991
+ display: "Status"
4992
+ }
4993
+ ]
4994
+ },
4995
+ valueCodeableConcept: {
4996
+ coding: [{ code: size.status, display: size.status }]
4997
+ }
4998
+ }
4999
+ ]
5000
+ };
5001
+ };
5002
+ var buildWoundProcedureResource = (patientId, encounterId, performedDateTime) => {
5003
+ const preset = getWoundProcedurePreset(patientId);
5004
+ const woundConditionId = woundConditionIdForPatient(patientId);
5005
+ const id = `${encounterId}-procedure`;
5006
+ return {
5007
+ resourceType: "Procedure",
5008
+ id,
5009
+ identifier: buildIdentifierPair5(
5010
+ "Procedure",
5011
+ id,
5012
+ `procedure-${encounterId}`
5013
+ ),
5014
+ status: "completed",
5015
+ code: {
5016
+ text: preset.display,
5017
+ coding: [
5018
+ {
5019
+ system: CPT_SYSTEM,
5020
+ code: preset.cptCode,
5021
+ display: preset.display
5022
+ }
5023
+ ]
5024
+ },
5025
+ subject: { reference: `Patient/${patientId}`, type: "Patient" },
5026
+ encounter: { reference: `Encounter/${encounterId}`, type: "Encounter" },
5027
+ reasonReference: [
5028
+ {
5029
+ reference: `Condition/${woundConditionId}`,
5030
+ type: "Condition"
5031
+ }
5032
+ ],
5033
+ performedDateTime
5034
+ };
5035
+ };
5036
+ var encounterSpecsCache = /* @__PURE__ */ new Map();
5037
+ var getAllEncounterSpecs = (referenceIso) => {
5038
+ const cached = encounterSpecsCache.get(referenceIso);
5039
+ if (cached) {
5040
+ return cached;
5041
+ }
5042
+ const all = [
5043
+ ...buildFacilityEncounterSpecs(referenceIso),
5044
+ ...buildHomeHealthEncounterSpecs(referenceIso)
5045
+ ];
5046
+ encounterSpecsCache.set(referenceIso, all);
5047
+ return all;
5048
+ };
5049
+ var __resetOnSiteDemoEncounterCachesForTests = () => {
5050
+ encounterSpecsCache.clear();
5051
+ patientToBlockCache = void 0;
5052
+ };
5053
+ var buildOnSiteDemoEncounters = (referenceIso) => getAllEncounterSpecs(referenceIso).map(buildEncounterResource);
5054
+ var buildOnSiteDemoWoundConditions = (referenceIso) => {
5055
+ const specs = getAllEncounterSpecs(referenceIso);
5056
+ const firstByPatient = /* @__PURE__ */ new Map();
5057
+ for (const spec of specs) {
5058
+ if (!isWoundBearingPatient(spec.patientId)) {
5059
+ continue;
5060
+ }
5061
+ const existing = firstByPatient.get(spec.patientId);
5062
+ if (!existing || spec.periodStart < existing) {
5063
+ firstByPatient.set(spec.patientId, spec.periodStart);
5064
+ }
5065
+ }
5066
+ const out = [];
5067
+ for (const [patientId, firstStart] of firstByPatient.entries()) {
5068
+ out.push(buildWoundConditionResource(patientId, firstStart));
5069
+ }
5070
+ return out;
5071
+ };
5072
+ var buildOnSiteDemoWoundObservations = (referenceIso) => {
5073
+ const specs = getAllEncounterSpecs(referenceIso);
5074
+ const out = [];
5075
+ for (const spec of specs) {
5076
+ if (!isWoundBearingPatient(spec.patientId)) {
5077
+ continue;
5078
+ }
5079
+ out.push(
5080
+ buildWoundExamObservation(
5081
+ spec.patientId,
5082
+ spec.id,
5083
+ spec.sequence,
5084
+ spec.totalEncounters,
5085
+ spec.periodStart
5086
+ )
5087
+ );
5088
+ }
5089
+ return out;
5090
+ };
5091
+ var buildOnSiteDemoWoundProcedures = (referenceIso) => {
5092
+ const specs = getAllEncounterSpecs(referenceIso);
5093
+ const lastByPatient = /* @__PURE__ */ new Map();
5094
+ for (const spec of specs) {
5095
+ if (!isWoundBearingPatient(spec.patientId)) {
5096
+ continue;
5097
+ }
5098
+ if (!getsWoundProcedure(spec.patientId)) {
5099
+ continue;
5100
+ }
5101
+ const existing = lastByPatient.get(spec.patientId);
5102
+ if (!existing || spec.sequence > existing.sequence) {
5103
+ lastByPatient.set(spec.patientId, spec);
5104
+ }
5105
+ }
5106
+ const out = [];
5107
+ for (const spec of lastByPatient.values()) {
5108
+ out.push(
5109
+ buildWoundProcedureResource(spec.patientId, spec.id, spec.periodStart)
5110
+ );
5111
+ }
5112
+ return out;
5113
+ };
5114
+ var onSiteDemoEncounterIds = (referenceIso) => getAllEncounterSpecs(referenceIso).map((s) => s.id);
5115
+ var onSiteDemoEncountersForPatient = (patientId, referenceIso) => getAllEncounterSpecs(referenceIso).filter((s) => s.patientId === patientId).map((s) => s.id);
5116
+ var onSiteDemoEncounterMetadata = (referenceIso) => {
5117
+ const specs = getAllEncounterSpecs(referenceIso);
5118
+ const lastEncounterByPatient = /* @__PURE__ */ new Map();
5119
+ for (const spec of specs) {
5120
+ const existing = lastEncounterByPatient.get(spec.patientId);
5121
+ if (!existing) {
5122
+ lastEncounterByPatient.set(spec.patientId, spec.id);
5123
+ continue;
5124
+ }
5125
+ if (spec.sequence > specs.find((s) => s.id === existing).sequence) {
5126
+ lastEncounterByPatient.set(spec.patientId, spec.id);
5127
+ }
5128
+ }
5129
+ const procedurePatients = new Set(onSiteDemoWoundProcedurePatientIds());
5130
+ return specs.map((spec) => ({
5131
+ id: spec.id,
5132
+ patientId: spec.patientId,
5133
+ sequence: spec.sequence,
5134
+ totalEncounters: spec.totalEncounters,
5135
+ periodStart: spec.periodStart,
5136
+ hasWoundProcedure: procedurePatients.has(spec.patientId) && lastEncounterByPatient.get(spec.patientId) === spec.id
5137
+ }));
5138
+ };
5139
+ var onSiteDemoWoundBearingPatientIds = () => {
5140
+ const out = [];
5141
+ for (const id of onSiteDemoScheduledFacilityPatientIds()) {
5142
+ if (isWoundBearingPatient(id)) {
5143
+ out.push(id);
5144
+ }
5145
+ }
5146
+ for (const id of onSiteDemoScheduledHomeHealthPatientIds()) {
5147
+ if (isWoundBearingPatient(id)) {
5148
+ out.push(id);
5149
+ }
5150
+ }
5151
+ return out;
5152
+ };
5153
+ var onSiteDemoWoundProcedurePatientIds = () => onSiteDemoWoundBearingPatientIds().filter((id) => getsWoundProcedure(id));
5154
+
5155
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-claims.ts
5156
+ var CLAIM_WORKFLOW_STATUS_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/claim-workflow-status";
5157
+ var CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL = "status";
5158
+ var CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL = "lastTransition";
5159
+ var CLAIM_WORKFLOW_STATUS = {
5160
+ SUBMITTED: "submitted",
5161
+ ACCEPTED: "accepted",
5162
+ REJECTED: "rejected",
5163
+ REWORKED: "reworked",
5164
+ RESUBMITTED: "resubmitted"
5165
+ };
5166
+ var PAYMENT_STATUS = {
5167
+ PARTIAL: "partial",
5168
+ FULL: "full",
5169
+ WRITE_OFF: "write-off"
5170
+ };
5171
+ var PAYMENT_STATUS_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/payment-status";
5172
+ var EM_VISIT_CODES = [
5173
+ {
5174
+ code: "99213",
5175
+ display: "Office visit, established patient, low",
5176
+ amount: 110
5177
+ },
5178
+ {
5179
+ code: "99214",
5180
+ display: "Office visit, established patient, moderate",
5181
+ amount: 165
5182
+ },
5183
+ {
5184
+ code: "99215",
5185
+ display: "Office visit, established patient, high",
5186
+ amount: 220
5187
+ }
5188
+ ];
5189
+ var PROCEDURE_CPT_AMOUNTS = {
5190
+ "97597": { display: "Sharp Debridement", amount: 145 },
5191
+ "97602": { display: "Enzymatic Debridement", amount: 95 },
5192
+ "97605": { display: "Wound Irrigation (NPWT)", amount: 175 },
5193
+ "15271": { display: "Skin Substitute Application", amount: 410 }
5194
+ };
5195
+ var ON_SITE_SCENARIO6 = "on-site-demo";
5196
+ var hashString4 = (input) => {
5197
+ let h = 0;
5198
+ for (let i = 0; i < input.length; i += 1) {
5199
+ h = h * 31 + input.charCodeAt(i) | 0;
5200
+ }
5201
+ return Math.abs(h);
5202
+ };
5203
+ var UNBILLED_BUCKET_THRESHOLD = 15;
5204
+ var SUBMITTED_BUCKET_THRESHOLD = 35;
5205
+ var ACCEPTED_BUCKET_THRESHOLD = 80;
5206
+ var REJECTED_BUCKET_THRESHOLD = 90;
5207
+ var REWORKED_BUCKET_THRESHOLD = 100;
5208
+ var isEncounterUnbilled = (encounterId) => hashString4(`${encounterId}:billed`) % 100 < UNBILLED_BUCKET_THRESHOLD;
5209
+ var workflowStatusForEncounter = (encounterId) => {
5210
+ const bucket = hashString4(`${encounterId}:status`) % 100;
5211
+ if (bucket < SUBMITTED_BUCKET_THRESHOLD - UNBILLED_BUCKET_THRESHOLD) {
5212
+ return CLAIM_WORKFLOW_STATUS.SUBMITTED;
5213
+ }
5214
+ if (bucket < ACCEPTED_BUCKET_THRESHOLD - UNBILLED_BUCKET_THRESHOLD) {
5215
+ return CLAIM_WORKFLOW_STATUS.ACCEPTED;
5216
+ }
5217
+ if (bucket < REJECTED_BUCKET_THRESHOLD - UNBILLED_BUCKET_THRESHOLD) {
5218
+ return CLAIM_WORKFLOW_STATUS.REJECTED;
5219
+ }
5220
+ if (bucket < REWORKED_BUCKET_THRESHOLD - UNBILLED_BUCKET_THRESHOLD) {
5221
+ return CLAIM_WORKFLOW_STATUS.REWORKED;
5222
+ }
5223
+ return CLAIM_WORKFLOW_STATUS.RESUBMITTED;
5224
+ };
5225
+ var paymentStatusForEncounter = (encounterId) => {
5226
+ const bucket = hashString4(`${encounterId}:payment`) % 10;
5227
+ if (bucket < 4) {
5228
+ return PAYMENT_STATUS.PARTIAL;
5229
+ }
5230
+ if (bucket < 8) {
5231
+ return PAYMENT_STATUS.FULL;
5232
+ }
5233
+ return PAYMENT_STATUS.WRITE_OFF;
5234
+ };
5235
+ var cachedPrimaryCoverageByPatient;
5236
+ var getPrimaryCoverageByPatient = () => {
5237
+ if (!cachedPrimaryCoverageByPatient) {
5238
+ const map = /* @__PURE__ */ new Map();
5239
+ const allCoverages = [
5240
+ ...buildOnSiteDemoFacilityCoverages(),
5241
+ ...buildOnSiteDemoHomeHealthCoverages()
5242
+ ];
5243
+ for (const cov of allCoverages) {
5244
+ if (cov.order !== 1) {
5245
+ continue;
5246
+ }
5247
+ const ref = cov.beneficiary.reference;
5248
+ if (typeof ref !== "string") {
5249
+ continue;
5250
+ }
5251
+ const patientId = ref.replace(/^Patient\//, "");
5252
+ map.set(patientId, cov);
5253
+ }
5254
+ cachedPrimaryCoverageByPatient = map;
5255
+ }
5256
+ return cachedPrimaryCoverageByPatient;
5257
+ };
5258
+ var __resetOnSiteDemoClaimCachesForTests = () => {
5259
+ cachedPrimaryCoverageByPatient = void 0;
5260
+ };
5261
+ var buildIdentifierPair6 = (resourceType, resourceId, roleSuffix) => [
5262
+ demoScenarioIdentifier(ON_SITE_SCENARIO6, roleSuffix),
5263
+ openhiResourceIdentifier({
5264
+ tenantId: ON_SITE_DEMO_TENANT_ID,
5265
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
5266
+ resourceType,
5267
+ id: resourceId
5268
+ })
5269
+ ];
5270
+ var emCodeForEncounter = (encounterId) => EM_VISIT_CODES[hashString4(`${encounterId}:em`) % EM_VISIT_CODES.length];
5271
+ var cptForProcedureEncounter = (encounterId) => {
5272
+ const cptKeys = Object.keys(PROCEDURE_CPT_AMOUNTS);
5273
+ const code = cptKeys[hashString4(`${encounterId}:procedure-cpt`) % cptKeys.length];
5274
+ const entry = PROCEDURE_CPT_AMOUNTS[code];
5275
+ if (!entry) {
5276
+ return EM_VISIT_CODES[0];
5277
+ }
5278
+ return { code, display: entry.display, amount: entry.amount };
5279
+ };
5280
+ var usdMoney = (amount) => ({
5281
+ value: +amount.toFixed(2),
5282
+ currency: "USD"
5283
+ });
5284
+ var buildClaimResource = (meta, status, primaryCoverageId, insurerDisplay) => {
5285
+ const claimId = `${meta.id}-claim`;
5286
+ const line = meta.hasWoundProcedure ? cptForProcedureEncounter(meta.id) : emCodeForEncounter(meta.id);
5287
+ const total = usdMoney(line.amount);
5288
+ const lastTransition = meta.periodStart;
5289
+ return {
5290
+ resourceType: "Claim",
5291
+ id: claimId,
5292
+ identifier: buildIdentifierPair6("Claim", claimId, `claim-${meta.id}`),
5293
+ status: "active",
5294
+ type: {
5295
+ coding: [
5296
+ {
5297
+ system: "http://terminology.hl7.org/CodeSystem/claim-type",
5298
+ code: "professional",
5299
+ display: "Professional"
5300
+ }
5301
+ ],
5302
+ text: "Professional"
5303
+ },
5304
+ use: "claim",
5305
+ patient: { reference: `Patient/${meta.patientId}`, type: "Patient" },
5306
+ created: meta.periodStart,
5307
+ insurer: { display: insurerDisplay },
5308
+ provider: { reference: `Patient/${meta.patientId}`, type: "Patient" },
5309
+ priority: {
5310
+ coding: [
5311
+ {
5312
+ system: "http://terminology.hl7.org/CodeSystem/processpriority",
5313
+ code: "normal",
5314
+ display: "Normal"
5315
+ }
5316
+ ],
5317
+ text: "Normal"
5318
+ },
5319
+ insurance: [
5320
+ {
5321
+ sequence: 1,
5322
+ focal: true,
5323
+ coverage: {
5324
+ reference: `Coverage/${primaryCoverageId}`,
5325
+ type: "Coverage"
5326
+ }
5327
+ }
5328
+ ],
5329
+ item: [
5330
+ {
5331
+ sequence: 1,
5332
+ productOrService: {
5333
+ coding: [
5334
+ { system: CPT_SYSTEM, code: line.code, display: line.display }
5335
+ ],
5336
+ text: line.display
5337
+ },
5338
+ servicedDate: meta.periodStart.slice(0, 10),
5339
+ unitPrice: total,
5340
+ net: total,
5341
+ encounter: [{ reference: `Encounter/${meta.id}`, type: "Encounter" }]
5342
+ }
5343
+ ],
5344
+ total,
5345
+ extension: [
5346
+ {
5347
+ url: CLAIM_WORKFLOW_STATUS_EXTENSION_URL,
5348
+ extension: [
5349
+ {
5350
+ url: CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL,
5351
+ valueCode: status
5352
+ },
5353
+ {
5354
+ url: CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL,
5355
+ valueDateTime: lastTransition
5356
+ }
5357
+ ]
5358
+ }
5359
+ ]
5360
+ };
5361
+ };
5362
+ var buildPaymentNoticeResource = (meta, status, claimId, totalCharged, insurerDisplay) => {
5363
+ const paymentId = `${meta.id}-payment`;
5364
+ const charged = totalCharged.value ?? 0;
5365
+ let paid;
5366
+ if (status === PAYMENT_STATUS.FULL) {
5367
+ paid = charged;
5368
+ } else if (status === PAYMENT_STATUS.PARTIAL) {
5369
+ const fraction = 0.4 + hashString4(`${meta.id}:partial`) % 31 / 100;
5370
+ paid = +(charged * fraction).toFixed(2);
5371
+ } else {
5372
+ paid = 0;
5373
+ }
5374
+ return {
5375
+ resourceType: "PaymentNotice",
5376
+ id: paymentId,
5377
+ identifier: buildIdentifierPair6(
5378
+ "PaymentNotice",
5379
+ paymentId,
5380
+ `payment-${meta.id}`
5381
+ ),
5382
+ status: "active",
5383
+ request: { reference: `Claim/${claimId}`, type: "Claim" },
5384
+ created: meta.periodStart,
5385
+ // FHIR R4 PaymentNotice.payment is Reference(PaymentReconciliation).
5386
+ // Demo seeding does not produce PaymentReconciliation resources;
5387
+ // we point at the Claim so the reference is at least resolvable on
5388
+ // read paths. The `request` field above is the FHIR-correct link
5389
+ // from PaymentNotice back to the originating Claim.
5390
+ payment: { reference: `Claim/${claimId}`, type: "Claim" },
5391
+ paymentDate: meta.periodStart.slice(0, 10),
5392
+ recipient: { display: insurerDisplay },
5393
+ amount: usdMoney(paid),
5394
+ paymentStatus: {
5395
+ coding: [
5396
+ {
5397
+ system: PAYMENT_STATUS_SYSTEM,
5398
+ code: status,
5399
+ display: status
5400
+ }
5401
+ ],
5402
+ text: status
5403
+ }
5404
+ };
5405
+ };
5406
+ var insurerDisplayForCoverage = (cov) => {
5407
+ const payor = cov.payor?.[0];
5408
+ if (payor && typeof payor.display === "string" && payor.display.length > 0) {
5409
+ return payor.display;
5410
+ }
5411
+ if (typeof cov.type?.text === "string" && cov.type.text.length > 0) {
5412
+ return cov.type.text;
5413
+ }
5414
+ return "Unknown Insurer";
5415
+ };
5416
+ var buildOnSiteDemoClaims = (referenceIso) => {
5417
+ const primaryByPatient = getPrimaryCoverageByPatient();
5418
+ const out = [];
5419
+ for (const meta of onSiteDemoEncounterMetadata(referenceIso)) {
5420
+ if (isEncounterUnbilled(meta.id)) {
5421
+ continue;
5422
+ }
5423
+ const coverage = primaryByPatient.get(meta.patientId);
5424
+ if (!coverage || !coverage.id) {
5425
+ continue;
5426
+ }
5427
+ const status = workflowStatusForEncounter(meta.id);
5428
+ out.push(
5429
+ buildClaimResource(
5430
+ meta,
5431
+ status,
5432
+ coverage.id,
5433
+ insurerDisplayForCoverage(coverage)
5434
+ )
5435
+ );
5436
+ }
5437
+ return out;
5438
+ };
5439
+ var buildOnSiteDemoPaymentNotices = (referenceIso) => {
5440
+ const primaryByPatient = getPrimaryCoverageByPatient();
5441
+ const out = [];
5442
+ for (const meta of onSiteDemoEncounterMetadata(referenceIso)) {
5443
+ if (isEncounterUnbilled(meta.id)) {
5444
+ continue;
5445
+ }
5446
+ const status = workflowStatusForEncounter(meta.id);
5447
+ if (status !== CLAIM_WORKFLOW_STATUS.ACCEPTED) {
5448
+ continue;
5449
+ }
5450
+ const coverage = primaryByPatient.get(meta.patientId);
5451
+ if (!coverage || !coverage.id) {
5452
+ continue;
5453
+ }
5454
+ const paymentStatus = paymentStatusForEncounter(meta.id);
5455
+ const line = meta.hasWoundProcedure ? cptForProcedureEncounter(meta.id) : emCodeForEncounter(meta.id);
5456
+ const total = usdMoney(line.amount);
5457
+ const claimId = `${meta.id}-claim`;
5458
+ out.push(
5459
+ buildPaymentNoticeResource(
5460
+ meta,
5461
+ paymentStatus,
5462
+ claimId,
5463
+ total,
5464
+ insurerDisplayForCoverage(coverage)
5465
+ )
5466
+ );
5467
+ }
5468
+ return out;
5469
+ };
5470
+ var onSiteDemoClaimIds = (referenceIso) => buildOnSiteDemoClaims(referenceIso).map((c) => c.id ?? "");
5471
+ var onSiteDemoPaymentNoticeIds = (referenceIso) => buildOnSiteDemoPaymentNotices(referenceIso).map((p) => p.id ?? "");
5472
+ var onSiteDemoUnbilledEncounterIds = (referenceIso) => onSiteDemoEncounterMetadata(referenceIso).filter((m) => isEncounterUnbilled(m.id)).map((m) => m.id);
5473
+ var onSiteDemoBilledEncounterIds = (referenceIso) => onSiteDemoEncounterMetadata(referenceIso).filter((m) => !isEncounterUnbilled(m.id)).map((m) => m.id);
5474
+
5475
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-directory.ts
5476
+ var ON_SITE_SCENARIO7 = "on-site-demo";
5477
+ var FHIR_ORGANIZATION_TYPE_SYSTEM = "http://terminology.hl7.org/CodeSystem/organization-type";
5478
+ var ON_SITE_DIRECTORY_CATEGORY_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/directory-category";
5479
+ var DME_SUPPLIER_CATEGORY_CODE = "dme-supplier";
5480
+ var INSURANCE_PAYOR_CATEGORY_CODE = "insurance-payor";
5481
+ var INSURANCE_PAYOR_PLAN_TYPE_SYSTEM = "https://on-site-medical.app/fhir/CodeSystem/payor-plan-type";
5482
+ var PAYOR_PLAN_TYPE_COMMERCIAL = "commercial";
5483
+ var PAYOR_PLAN_TYPE_MEDICARE = "medicare";
5484
+ var PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE = "medicare-advantage";
5485
+ var PRACTITIONER_CREDENTIALING_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/practitioner-credentialing";
5486
+ var PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL = "state";
5487
+ var PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL = "status";
5488
+ var CREDENTIALING_STATUS = {
5489
+ ACTIVE: "active",
5490
+ SUSPENDED: "suspended",
5491
+ EXPIRED: "expired"
5492
+ };
5493
+ var STATE_MEDICAL_LICENSE_SYSTEM = "https://on-site-medical.app/fhir/sid/state-medical-license";
5494
+ var DME_SUPPLIER_SPECS = [
5495
+ {
5496
+ id: "on-site-demo-dme-supplier-001",
5497
+ name: "Apria Healthcare",
5498
+ phone: "+18004554111",
5499
+ email: "orders@apria.on-site-demo.example.com",
5500
+ addressLine: "12230 El Camino Real",
5501
+ addressCity: "San Diego",
5502
+ addressState: "CA",
5503
+ addressPostalCode: "92130",
5504
+ contactName: "Marcus Whitfield",
5505
+ contactPhone: "+18004554112",
5506
+ contactEmail: "m.whitfield@apria.on-site-demo.example.com"
5507
+ },
5508
+ {
5509
+ id: "on-site-demo-dme-supplier-002",
5510
+ name: "Lincare Holdings",
5511
+ phone: "+17275301700",
5512
+ email: "intake@lincare.on-site-demo.example.com",
5513
+ addressLine: "19387 US Highway 19 North",
5514
+ addressCity: "Clearwater",
5515
+ addressState: "FL",
5516
+ addressPostalCode: "33764",
5517
+ contactName: "Rachel Donovan",
5518
+ contactPhone: "+17275301701",
5519
+ contactEmail: "r.donovan@lincare.on-site-demo.example.com"
5520
+ },
5521
+ {
5522
+ id: "on-site-demo-dme-supplier-003",
5523
+ name: "AdaptHealth",
5524
+ phone: "+16104840700",
5525
+ email: "referrals@adapthealth.on-site-demo.example.com",
5526
+ addressLine: "220 West Germantown Pike",
5527
+ addressCity: "Plymouth Meeting",
5528
+ addressState: "PA",
5529
+ addressPostalCode: "19462",
5530
+ contactName: "Brian Calloway",
5531
+ contactPhone: "+16104840701",
5532
+ contactEmail: "b.calloway@adapthealth.on-site-demo.example.com"
5533
+ },
5534
+ {
5535
+ id: "on-site-demo-dme-supplier-004",
5536
+ name: "Rotech Healthcare",
5537
+ phone: "+14072629230",
5538
+ email: "support@rotech.on-site-demo.example.com",
5539
+ addressLine: "3600 Vineland Road",
5540
+ addressCity: "Orlando",
5541
+ addressState: "FL",
5542
+ addressPostalCode: "32811",
5543
+ contactName: "Elena Marsh",
5544
+ contactPhone: "+14072629231",
5545
+ contactEmail: "e.marsh@rotech.on-site-demo.example.com"
5546
+ },
5547
+ {
5548
+ id: "on-site-demo-dme-supplier-005",
5549
+ name: "Byram Healthcare",
5550
+ phone: "+18004220606",
5551
+ email: "orders@byram.on-site-demo.example.com",
5552
+ addressLine: "120 Bloomingdale Road",
5553
+ addressCity: "White Plains",
5554
+ addressState: "NY",
5555
+ addressPostalCode: "10605",
5556
+ contactName: "Thomas Pritchard",
5557
+ contactPhone: "+18004220607",
5558
+ contactEmail: "t.pritchard@byram.on-site-demo.example.com"
5559
+ },
5560
+ {
5561
+ id: "on-site-demo-dme-supplier-006",
5562
+ name: "Medline Industries",
5563
+ phone: "+18476434400",
5564
+ email: "wound-care@medline.on-site-demo.example.com",
5565
+ addressLine: "Three Lakes Drive",
5566
+ addressCity: "Northfield",
5567
+ addressState: "IL",
5568
+ addressPostalCode: "60093",
5569
+ contactName: "Jacqueline Vance",
5570
+ contactPhone: "+18476434401",
5571
+ contactEmail: "j.vance@medline.on-site-demo.example.com"
5572
+ },
5573
+ {
5574
+ id: "on-site-demo-dme-supplier-007",
5575
+ name: "McKesson Medical-Surgical",
5576
+ phone: "+18044703300",
5577
+ email: "service@mckesson-ms.on-site-demo.example.com",
5578
+ addressLine: "9954 Mayland Drive",
5579
+ addressCity: "Richmond",
5580
+ addressState: "VA",
5581
+ addressPostalCode: "23233",
5582
+ contactName: "Andre Holloway",
5583
+ contactPhone: "+18044703301",
5584
+ contactEmail: "a.holloway@mckesson-ms.on-site-demo.example.com"
5585
+ },
5586
+ {
5587
+ id: "on-site-demo-dme-supplier-008",
5588
+ name: "Cardinal Health at-Home Solutions",
5589
+ phone: "+16147573030",
5590
+ email: "home@cardinal.on-site-demo.example.com",
5591
+ addressLine: "7000 Cardinal Place",
5592
+ addressCity: "Dublin",
5593
+ addressState: "OH",
5594
+ addressPostalCode: "43017",
5595
+ contactName: "Naomi Sutherland",
5596
+ contactPhone: "+16147573031",
5597
+ contactEmail: "n.sutherland@cardinal.on-site-demo.example.com"
5598
+ },
5599
+ {
5600
+ id: "on-site-demo-dme-supplier-009",
5601
+ name: "Edgepark Medical Supplies",
5602
+ phone: "+18003217828",
5603
+ email: "orders@edgepark.on-site-demo.example.com",
5604
+ addressLine: "1810 Summit Commerce Park",
5605
+ addressCity: "Twinsburg",
5606
+ addressState: "OH",
5607
+ addressPostalCode: "44087",
5608
+ contactName: "Derek Ashford",
5609
+ contactPhone: "+18003217829",
5610
+ contactEmail: "d.ashford@edgepark.on-site-demo.example.com"
5611
+ },
5612
+ {
5613
+ id: "on-site-demo-dme-supplier-010",
5614
+ name: "Numotion",
5615
+ phone: "+18006240498",
5616
+ email: "intake@numotion.on-site-demo.example.com",
5617
+ addressLine: "5117 W Terrace Drive",
5618
+ addressCity: "Brentwood",
5619
+ addressState: "TN",
5620
+ addressPostalCode: "37027",
5621
+ contactName: "Sienna Lockhart",
5622
+ contactPhone: "+18006240499",
5623
+ contactEmail: "s.lockhart@numotion.on-site-demo.example.com"
5624
+ },
5625
+ {
5626
+ id: "on-site-demo-dme-supplier-011",
5627
+ name: "Pride Mobility",
5628
+ phone: "+18008003636",
5629
+ email: "service@pridemobility.on-site-demo.example.com",
5630
+ addressLine: "182 Susquehanna Avenue",
5631
+ addressCity: "Exeter",
5632
+ addressState: "PA",
5633
+ addressPostalCode: "18643",
5634
+ contactName: "Vincent Marlowe",
5635
+ contactPhone: "+18008003637",
5636
+ contactEmail: "v.marlowe@pridemobility.on-site-demo.example.com"
5637
+ },
5638
+ {
5639
+ id: "on-site-demo-dme-supplier-012",
5640
+ name: "Hollister Wound Care",
5641
+ phone: "+18003234060",
5642
+ email: "wound@hollister.on-site-demo.example.com",
5643
+ addressLine: "2000 Hollister Drive",
5644
+ addressCity: "Libertyville",
5645
+ addressState: "IL",
5646
+ addressPostalCode: "60048",
5647
+ contactName: "Priscilla Hawthorne",
5648
+ contactPhone: "+18003234061",
5649
+ contactEmail: "p.hawthorne@hollister.on-site-demo.example.com"
5650
+ },
5651
+ {
5652
+ id: "on-site-demo-dme-supplier-013",
5653
+ name: "Smith & Nephew Advanced Wound Management",
5654
+ phone: "+18008765556",
5655
+ email: "wound@smith-nephew.on-site-demo.example.com",
5656
+ addressLine: "5600 Clearfork Main Street",
5657
+ addressCity: "Fort Worth",
5658
+ addressState: "TX",
5659
+ addressPostalCode: "76109",
5660
+ contactName: "Gregory Eastland",
5661
+ contactPhone: "+18008765557",
5662
+ contactEmail: "g.eastland@smith-nephew.on-site-demo.example.com"
5663
+ }
5664
+ ];
5665
+ var INSURANCE_PAYOR_SPECS = [
5666
+ {
5667
+ id: "on-site-demo-insurance-payor-001",
5668
+ name: "Aetna",
5669
+ planType: PAYOR_PLAN_TYPE_COMMERCIAL,
5670
+ phone: "+18008721414",
5671
+ email: "provider-services@aetna.on-site-demo.example.com",
5672
+ addressLine: "151 Farmington Avenue",
5673
+ addressCity: "Hartford",
5674
+ addressState: "CT",
5675
+ addressPostalCode: "06156",
5676
+ contactName: "Stephanie Wakefield",
5677
+ contactPhone: "+18008721415",
5678
+ contactEmail: "s.wakefield@aetna.on-site-demo.example.com"
5679
+ },
5680
+ {
5681
+ id: "on-site-demo-insurance-payor-002",
5682
+ name: "Cigna Healthcare",
5683
+ planType: PAYOR_PLAN_TYPE_COMMERCIAL,
5684
+ phone: "+18002442488",
5685
+ email: "provider-services@cigna.on-site-demo.example.com",
5686
+ addressLine: "900 Cottage Grove Road",
5687
+ addressCity: "Bloomfield",
5688
+ addressState: "CT",
5689
+ addressPostalCode: "06002",
5690
+ contactName: "Howard Greenberg",
5691
+ contactPhone: "+18002442489",
5692
+ contactEmail: "h.greenberg@cigna.on-site-demo.example.com"
5693
+ },
5694
+ {
5695
+ id: "on-site-demo-insurance-payor-003",
5696
+ name: "UnitedHealthcare",
5697
+ planType: PAYOR_PLAN_TYPE_COMMERCIAL,
5698
+ phone: "+18778425539",
5699
+ email: "provider-services@uhc.on-site-demo.example.com",
5700
+ addressLine: "9900 Bren Road East",
5701
+ addressCity: "Minnetonka",
5702
+ addressState: "MN",
5703
+ addressPostalCode: "55343",
5704
+ contactName: "Cassandra Bellamy",
5705
+ contactPhone: "+18778425540",
5706
+ contactEmail: "c.bellamy@uhc.on-site-demo.example.com"
5707
+ },
5708
+ {
5709
+ id: "on-site-demo-insurance-payor-004",
5710
+ name: "Anthem Blue Cross Blue Shield",
5711
+ planType: PAYOR_PLAN_TYPE_COMMERCIAL,
5712
+ phone: "+18004504000",
5713
+ email: "provider-services@anthem.on-site-demo.example.com",
5714
+ addressLine: "220 Virginia Avenue",
5715
+ addressCity: "Indianapolis",
5716
+ addressState: "IN",
5717
+ addressPostalCode: "46204",
5718
+ contactName: "Maurice Pendleton",
5719
+ contactPhone: "+18004504001",
5720
+ contactEmail: "m.pendleton@anthem.on-site-demo.example.com"
5721
+ },
5722
+ {
5723
+ id: "on-site-demo-insurance-payor-005",
5724
+ name: "CMS \u2014 Medicare",
5725
+ planType: PAYOR_PLAN_TYPE_MEDICARE,
5726
+ phone: "+18006334227",
5727
+ email: "provider-services@cms.on-site-demo.example.com",
5728
+ addressLine: "7500 Security Boulevard",
5729
+ addressCity: "Baltimore",
5730
+ addressState: "MD",
5731
+ addressPostalCode: "21244",
5732
+ contactName: "Theresa Kavanagh",
5733
+ contactPhone: "+18006334228",
5734
+ contactEmail: "t.kavanagh@cms.on-site-demo.example.com"
5735
+ },
5736
+ {
5737
+ id: "on-site-demo-insurance-payor-006",
5738
+ name: "Humana Medicare Advantage",
5739
+ planType: PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE,
5740
+ phone: "+18004574708",
5741
+ email: "provider-services@humana.on-site-demo.example.com",
5742
+ addressLine: "500 West Main Street",
5743
+ addressCity: "Louisville",
5744
+ addressState: "KY",
5745
+ addressPostalCode: "40202",
5746
+ contactName: "Lawrence Whitmore",
5747
+ contactPhone: "+18004574709",
5748
+ contactEmail: "l.whitmore@humana.on-site-demo.example.com"
5749
+ },
5750
+ {
5751
+ id: "on-site-demo-insurance-payor-007",
5752
+ name: "Wellcare by Centene",
5753
+ planType: PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE,
5754
+ phone: "+18886353224",
5755
+ email: "provider-services@wellcare.on-site-demo.example.com",
5756
+ addressLine: "8735 Henderson Road",
5757
+ addressCity: "Tampa",
5758
+ addressState: "FL",
5759
+ addressPostalCode: "33634",
5760
+ contactName: "Yolanda Caldwell",
5761
+ contactPhone: "+18886353225",
5762
+ contactEmail: "y.caldwell@wellcare.on-site-demo.example.com"
5763
+ },
5764
+ {
5765
+ id: "on-site-demo-insurance-payor-008",
5766
+ name: "Kaiser Permanente",
5767
+ planType: PAYOR_PLAN_TYPE_COMMERCIAL,
5768
+ phone: "+18004646000",
5769
+ email: "provider-services@kaiser.on-site-demo.example.com",
5770
+ addressLine: "1 Kaiser Plaza",
5771
+ addressCity: "Oakland",
5772
+ addressState: "CA",
5773
+ addressPostalCode: "94612",
5774
+ contactName: "Bradford Tennyson",
5775
+ contactPhone: "+18004646001",
5776
+ contactEmail: "b.tennyson@kaiser.on-site-demo.example.com"
5777
+ }
3135
5778
  ];
3136
- var DEMO_TENANT_SPECS = [
5779
+ var buildOrganizationIdentifierPair = (organizationId, roleSuffix) => [
5780
+ demoScenarioIdentifier(ON_SITE_SCENARIO7, roleSuffix),
5781
+ openhiResourceIdentifier({
5782
+ tenantId: ON_SITE_DEMO_TENANT_ID,
5783
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
5784
+ resourceType: "Organization",
5785
+ id: organizationId
5786
+ })
5787
+ ];
5788
+ var buildDmeSupplierResource = (spec) => ({
5789
+ resourceType: "Organization",
5790
+ id: spec.id,
5791
+ active: true,
5792
+ identifier: buildOrganizationIdentifierPair(
5793
+ spec.id,
5794
+ `dme-supplier-${spec.id}`
5795
+ ),
5796
+ name: spec.name,
5797
+ type: [
5798
+ {
5799
+ coding: [
5800
+ {
5801
+ system: FHIR_ORGANIZATION_TYPE_SYSTEM,
5802
+ code: "prov",
5803
+ display: "Healthcare Provider"
5804
+ },
5805
+ {
5806
+ system: ON_SITE_DIRECTORY_CATEGORY_SYSTEM,
5807
+ code: DME_SUPPLIER_CATEGORY_CODE,
5808
+ display: "DME Supplier"
5809
+ }
5810
+ ],
5811
+ text: "DME Supplier"
5812
+ }
5813
+ ],
5814
+ telecom: [
5815
+ { system: "phone", value: spec.phone, use: "work" },
5816
+ { system: "email", value: spec.email, use: "work" }
5817
+ ],
5818
+ address: [
5819
+ {
5820
+ use: "work",
5821
+ line: [spec.addressLine],
5822
+ city: spec.addressCity,
5823
+ state: spec.addressState,
5824
+ postalCode: spec.addressPostalCode,
5825
+ country: "US"
5826
+ }
5827
+ ],
5828
+ contact: [
5829
+ {
5830
+ purpose: { text: "Primary Contact" },
5831
+ name: {
5832
+ text: spec.contactName,
5833
+ given: [spec.contactName.split(" ")[0] ?? spec.contactName],
5834
+ family: spec.contactName.split(" ").slice(-1)[0] ?? spec.contactName
5835
+ },
5836
+ telecom: [
5837
+ { system: "phone", value: spec.contactPhone, use: "work" },
5838
+ { system: "email", value: spec.contactEmail, use: "work" }
5839
+ ]
5840
+ }
5841
+ ]
5842
+ });
5843
+ var planTypeDisplayLabel = (planType) => {
5844
+ if (planType === PAYOR_PLAN_TYPE_COMMERCIAL) {
5845
+ return "Commercial";
5846
+ }
5847
+ if (planType === PAYOR_PLAN_TYPE_MEDICARE) {
5848
+ return "Medicare";
5849
+ }
5850
+ return "Medicare Advantage";
5851
+ };
5852
+ var buildInsurancePayorResource = (spec) => ({
5853
+ resourceType: "Organization",
5854
+ id: spec.id,
5855
+ active: true,
5856
+ identifier: buildOrganizationIdentifierPair(
5857
+ spec.id,
5858
+ `insurance-payor-${spec.id}`
5859
+ ),
5860
+ name: spec.name,
5861
+ type: [
5862
+ {
5863
+ coding: [
5864
+ {
5865
+ system: FHIR_ORGANIZATION_TYPE_SYSTEM,
5866
+ code: "pay",
5867
+ display: "Payer"
5868
+ },
5869
+ {
5870
+ system: ON_SITE_DIRECTORY_CATEGORY_SYSTEM,
5871
+ code: INSURANCE_PAYOR_CATEGORY_CODE,
5872
+ display: "Insurance Payor"
5873
+ },
5874
+ {
5875
+ system: INSURANCE_PAYOR_PLAN_TYPE_SYSTEM,
5876
+ code: spec.planType,
5877
+ display: planTypeDisplayLabel(spec.planType)
5878
+ }
5879
+ ],
5880
+ text: planTypeDisplayLabel(spec.planType)
5881
+ }
5882
+ ],
5883
+ telecom: [
5884
+ { system: "phone", value: spec.phone, use: "work" },
5885
+ { system: "email", value: spec.email, use: "work" }
5886
+ ],
5887
+ address: [
5888
+ {
5889
+ use: "work",
5890
+ line: [spec.addressLine],
5891
+ city: spec.addressCity,
5892
+ state: spec.addressState,
5893
+ postalCode: spec.addressPostalCode,
5894
+ country: "US"
5895
+ }
5896
+ ],
5897
+ contact: [
5898
+ {
5899
+ purpose: { text: "Provider Services" },
5900
+ name: {
5901
+ text: spec.contactName,
5902
+ given: [spec.contactName.split(" ")[0] ?? spec.contactName],
5903
+ family: spec.contactName.split(" ").slice(-1)[0] ?? spec.contactName
5904
+ },
5905
+ telecom: [
5906
+ { system: "phone", value: spec.contactPhone, use: "work" },
5907
+ { system: "email", value: spec.contactEmail, use: "work" }
5908
+ ]
5909
+ }
5910
+ ]
5911
+ });
5912
+ var ON_SITE_DEMO_DME_SUPPLIERS = DME_SUPPLIER_SPECS.map(buildDmeSupplierResource);
5913
+ var ON_SITE_DEMO_INSURANCE_PAYORS = INSURANCE_PAYOR_SPECS.map(buildInsurancePayorResource);
5914
+ var onSiteDemoDmeSupplierIds = () => DME_SUPPLIER_SPECS.map((s) => s.id);
5915
+ var onSiteDemoInsurancePayorIds = () => INSURANCE_PAYOR_SPECS.map((s) => s.id);
5916
+ var ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS = [...ON_SITE_DEMO_DME_SUPPLIERS, ...ON_SITE_DEMO_INSURANCE_PAYORS];
5917
+ var PRACTITIONER_CREDENTIALING_BY_DOCTOR = {
5918
+ "on-site-demo-doctor-001": [
5919
+ {
5920
+ state: "GA",
5921
+ stateBoardDisplay: "Georgia Composite Medical Board",
5922
+ licenseNumber: "GA-MD-082431",
5923
+ issued: "2014-06-12",
5924
+ expires: "2027-06-30",
5925
+ status: CREDENTIALING_STATUS.ACTIVE
5926
+ },
5927
+ {
5928
+ state: "AL",
5929
+ stateBoardDisplay: "Alabama Board of Medical Examiners",
5930
+ licenseNumber: "AL-MD-MD031298",
5931
+ issued: "2016-04-02",
5932
+ expires: "2026-12-31",
5933
+ status: CREDENTIALING_STATUS.ACTIVE
5934
+ },
5935
+ {
5936
+ state: "TN",
5937
+ stateBoardDisplay: "Tennessee Board of Medical Examiners",
5938
+ licenseNumber: "TN-MD-MD51227",
5939
+ issued: "2017-09-21",
5940
+ expires: "2026-09-30",
5941
+ status: CREDENTIALING_STATUS.ACTIVE
5942
+ }
5943
+ ],
5944
+ "on-site-demo-doctor-002": [
5945
+ {
5946
+ state: "GA",
5947
+ stateBoardDisplay: "Georgia Composite Medical Board",
5948
+ licenseNumber: "GA-MD-076120",
5949
+ issued: "2012-08-04",
5950
+ expires: "2027-08-31",
5951
+ status: CREDENTIALING_STATUS.ACTIVE
5952
+ },
5953
+ {
5954
+ state: "FL",
5955
+ stateBoardDisplay: "Florida Board of Medicine",
5956
+ licenseNumber: "FL-MD-ME128443",
5957
+ issued: "2018-02-18",
5958
+ expires: "2026-02-28",
5959
+ status: CREDENTIALING_STATUS.ACTIVE
5960
+ }
5961
+ ],
5962
+ "on-site-demo-doctor-003": [
5963
+ {
5964
+ state: "GA",
5965
+ stateBoardDisplay: "Georgia Composite Medical Board",
5966
+ licenseNumber: "GA-MD-091047",
5967
+ issued: "2015-11-22",
5968
+ expires: "2027-11-30",
5969
+ status: CREDENTIALING_STATUS.ACTIVE
5970
+ },
5971
+ {
5972
+ state: "SC",
5973
+ stateBoardDisplay: "South Carolina Board of Medical Examiners",
5974
+ licenseNumber: "SC-MD-32788",
5975
+ issued: "2019-05-10",
5976
+ expires: "2027-05-31",
5977
+ status: CREDENTIALING_STATUS.ACTIVE
5978
+ }
5979
+ ],
5980
+ "on-site-demo-doctor-004": [
5981
+ {
5982
+ state: "GA",
5983
+ stateBoardDisplay: "Georgia Composite Medical Board",
5984
+ licenseNumber: "GA-MD-064118",
5985
+ issued: "2009-07-14",
5986
+ expires: "2027-07-31",
5987
+ status: CREDENTIALING_STATUS.ACTIVE
5988
+ },
5989
+ {
5990
+ state: "NC",
5991
+ stateBoardDisplay: "North Carolina Medical Board",
5992
+ licenseNumber: "NC-MD-2014-00892",
5993
+ issued: "2014-03-08",
5994
+ expires: "2027-03-31",
5995
+ status: CREDENTIALING_STATUS.ACTIVE
5996
+ }
5997
+ ],
5998
+ "on-site-demo-doctor-005": [
5999
+ {
6000
+ state: "GA",
6001
+ stateBoardDisplay: "Georgia Composite Medical Board",
6002
+ licenseNumber: "GA-MD-098712",
6003
+ issued: "2017-01-19",
6004
+ expires: "2027-01-31",
6005
+ status: CREDENTIALING_STATUS.ACTIVE
6006
+ },
6007
+ {
6008
+ state: "AL",
6009
+ stateBoardDisplay: "Alabama Board of Medical Examiners",
6010
+ licenseNumber: "AL-MD-MD040115",
6011
+ issued: "2020-06-30",
6012
+ expires: "2026-06-30",
6013
+ status: CREDENTIALING_STATUS.ACTIVE
6014
+ }
6015
+ ],
6016
+ "on-site-demo-doctor-006": [
6017
+ {
6018
+ state: "GA",
6019
+ stateBoardDisplay: "Georgia Composite Medical Board",
6020
+ licenseNumber: "GA-MD-052901",
6021
+ issued: "2004-09-02",
6022
+ expires: "2027-09-30",
6023
+ status: CREDENTIALING_STATUS.ACTIVE
6024
+ },
6025
+ {
6026
+ state: "TN",
6027
+ stateBoardDisplay: "Tennessee Board of Medical Examiners",
6028
+ licenseNumber: "TN-MD-MD43091",
6029
+ issued: "2011-05-15",
6030
+ expires: "2027-05-31",
6031
+ status: CREDENTIALING_STATUS.ACTIVE
6032
+ }
6033
+ ],
6034
+ "on-site-demo-doctor-007": [
6035
+ {
6036
+ state: "GA",
6037
+ stateBoardDisplay: "Georgia Composite Medical Board",
6038
+ licenseNumber: "GA-MD-073445",
6039
+ issued: "2013-04-27",
6040
+ expires: "2027-04-30",
6041
+ status: CREDENTIALING_STATUS.ACTIVE
6042
+ },
6043
+ {
6044
+ state: "FL",
6045
+ stateBoardDisplay: "Florida Board of Medicine",
6046
+ licenseNumber: "FL-MD-ME119001",
6047
+ issued: "2015-12-12",
6048
+ expires: "2026-12-31",
6049
+ status: CREDENTIALING_STATUS.SUSPENDED
6050
+ }
6051
+ ],
6052
+ "on-site-demo-doctor-008": [
6053
+ {
6054
+ state: "GA",
6055
+ stateBoardDisplay: "Georgia Composite Medical Board",
6056
+ licenseNumber: "GA-MD-101203",
6057
+ issued: "2018-08-09",
6058
+ expires: "2027-08-31",
6059
+ status: CREDENTIALING_STATUS.ACTIVE
6060
+ },
6061
+ {
6062
+ state: "SC",
6063
+ stateBoardDisplay: "South Carolina Board of Medical Examiners",
6064
+ licenseNumber: "SC-MD-35112",
6065
+ issued: "2021-02-01",
6066
+ expires: "2027-02-28",
6067
+ status: CREDENTIALING_STATUS.ACTIVE
6068
+ }
6069
+ ],
6070
+ "on-site-demo-doctor-009": [
6071
+ {
6072
+ state: "GA",
6073
+ stateBoardDisplay: "Georgia Composite Medical Board",
6074
+ licenseNumber: "GA-MD-061887",
6075
+ issued: "2010-11-30",
6076
+ expires: "2026-11-30",
6077
+ status: CREDENTIALING_STATUS.ACTIVE
6078
+ },
6079
+ {
6080
+ state: "TN",
6081
+ stateBoardDisplay: "Tennessee Board of Medical Examiners",
6082
+ licenseNumber: "TN-MD-MD38712",
6083
+ issued: "2012-06-04",
6084
+ expires: "2024-06-30",
6085
+ status: CREDENTIALING_STATUS.EXPIRED
6086
+ }
6087
+ ],
6088
+ "on-site-demo-doctor-010": [
6089
+ {
6090
+ state: "GA",
6091
+ stateBoardDisplay: "Georgia Composite Medical Board",
6092
+ licenseNumber: "GA-MD-108901",
6093
+ issued: "2020-03-15",
6094
+ expires: "2027-03-31",
6095
+ status: CREDENTIALING_STATUS.ACTIVE
6096
+ }
6097
+ ]
6098
+ };
6099
+ var practitionerCredentialingForDoctor = (practitionerId) => PRACTITIONER_CREDENTIALING_BY_DOCTOR[practitionerId] ?? [];
6100
+ var practitionerCredentialingForState = (practitionerId, stateCode) => practitionerCredentialingForDoctor(practitionerId).find(
6101
+ (entry) => entry.state === stateCode
6102
+ );
6103
+ var buildCredentialingQualifications = (practitionerId) => practitionerCredentialingForDoctor(practitionerId).map((cred) => ({
6104
+ identifier: [
6105
+ {
6106
+ system: STATE_MEDICAL_LICENSE_SYSTEM,
6107
+ value: cred.licenseNumber
6108
+ }
6109
+ ],
6110
+ code: {
6111
+ text: "Medical License"
6112
+ },
6113
+ period: {
6114
+ start: cred.issued,
6115
+ end: cred.expires
6116
+ },
6117
+ issuer: {
6118
+ display: cred.stateBoardDisplay
6119
+ },
6120
+ extension: [
6121
+ {
6122
+ url: PRACTITIONER_CREDENTIALING_EXTENSION_URL,
6123
+ extension: [
6124
+ {
6125
+ url: PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL,
6126
+ valueCode: cred.state
6127
+ },
6128
+ {
6129
+ url: PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL,
6130
+ valueCode: cred.status
6131
+ }
6132
+ ]
6133
+ }
6134
+ ]
6135
+ }));
6136
+
6137
+ // src/workflows/control-plane/seed-demo-data/on-site-demo-fixtures.ts
6138
+ var US_NPI_SYSTEM = "http://hl7.org/fhir/sid/us-npi";
6139
+ var HOME_HEALTH_ELIGIBLE_EXTENSION_URL = "https://on-site-medical.app/fhir/StructureDefinition/home-health-eligible";
6140
+ var PRACTITIONER_ROLE_PHYSICIAN = "Physician";
6141
+ var PRACTITIONER_ROLE_SCRIBE = "Scribe";
6142
+ var ON_SITE_STAFF_ID_SYSTEM = "https://on-site-medical.app/fhir/sid/staff-id";
6143
+ var DOCTOR_SPECS = [
3137
6144
  {
3138
- scenario: "placeholder",
3139
- tenantId: PLACEHOLDER_TENANT_ID,
3140
- tenantName: "OpenHI Placeholder Tenant",
3141
- workspaces: [
3142
- {
3143
- id: PLACEHOLDER_WORKSPACE_ID,
3144
- name: "OpenHI Placeholder Workspace",
3145
- roleSuffix: "workspace"
3146
- }
3147
- ]
6145
+ id: "on-site-demo-doctor-001",
6146
+ firstName: "Sarah",
6147
+ lastName: "Patel",
6148
+ suffix: "MD",
6149
+ gender: "female",
6150
+ birthDate: "1978-03-14",
6151
+ phone: "+14045550101",
6152
+ email: "sarah.patel@on-site-demo.example.com",
6153
+ npi: "1003000001",
6154
+ addressLine: "120 Peachtree Street NE",
6155
+ addressCity: "Atlanta",
6156
+ addressState: "GA",
6157
+ addressPostalCode: "30303",
6158
+ homeHealthEligible: true
3148
6159
  },
3149
6160
  {
3150
- scenario: "demo-wound-care",
3151
- tenantId: "demo-wound-care-tenant",
3152
- tenantName: "Cedarbrook Wound Healing Institute",
3153
- workspaces: [
3154
- {
3155
- id: "demo-wound-care-workspace",
3156
- name: "Cedarbrook Outpatient Wound Clinic",
3157
- roleSuffix: "workspace"
3158
- }
3159
- ]
6161
+ id: "on-site-demo-doctor-002",
6162
+ firstName: "Michael",
6163
+ lastName: "Brennan",
6164
+ suffix: "DO",
6165
+ gender: "male",
6166
+ birthDate: "1972-08-22",
6167
+ phone: "+14045550102",
6168
+ email: "michael.brennan@on-site-demo.example.com",
6169
+ npi: "1003000002",
6170
+ addressLine: "300 Ponce de Leon Avenue",
6171
+ addressCity: "Atlanta",
6172
+ addressState: "GA",
6173
+ addressPostalCode: "30308",
6174
+ homeHealthEligible: true
3160
6175
  },
3161
6176
  {
3162
- scenario: "demo-primary-care",
3163
- tenantId: "demo-primary-care-tenant",
3164
- tenantName: "Maple Ridge Family Medicine",
3165
- workspaces: [
3166
- {
3167
- id: "demo-primary-care-workspace",
3168
- name: "Maple Ridge Main Street Office",
3169
- roleSuffix: "workspace"
3170
- }
3171
- ]
6177
+ id: "on-site-demo-doctor-003",
6178
+ firstName: "Linda",
6179
+ lastName: "Nguyen",
6180
+ suffix: "MD",
6181
+ gender: "female",
6182
+ birthDate: "1981-11-05",
6183
+ phone: "+14045550103",
6184
+ email: "linda.nguyen@on-site-demo.example.com",
6185
+ npi: "1003000003",
6186
+ addressLine: "75 Piedmont Avenue",
6187
+ addressCity: "Atlanta",
6188
+ addressState: "GA",
6189
+ addressPostalCode: "30303",
6190
+ homeHealthEligible: true
3172
6191
  },
3173
6192
  {
3174
- scenario: "demo-mixed",
3175
- tenantId: "demo-mixed-tenant",
3176
- tenantName: "Northbridge Health Network",
3177
- workspaces: [
6193
+ id: "on-site-demo-doctor-004",
6194
+ firstName: "James",
6195
+ lastName: "Ortiz",
6196
+ suffix: "MD",
6197
+ gender: "male",
6198
+ birthDate: "1969-04-30",
6199
+ phone: "+14045550104",
6200
+ email: "james.ortiz@on-site-demo.example.com",
6201
+ npi: "1003000004",
6202
+ addressLine: "1825 Howell Mill Road",
6203
+ addressCity: "Atlanta",
6204
+ addressState: "GA",
6205
+ addressPostalCode: "30318",
6206
+ homeHealthEligible: true
6207
+ },
6208
+ {
6209
+ id: "on-site-demo-doctor-005",
6210
+ firstName: "Olivia",
6211
+ lastName: "Carter",
6212
+ suffix: "MD",
6213
+ gender: "female",
6214
+ birthDate: "1985-07-19",
6215
+ phone: "+14045550105",
6216
+ email: "olivia.carter@on-site-demo.example.com",
6217
+ npi: "1003000005",
6218
+ addressLine: "999 Peachtree Street NE",
6219
+ addressCity: "Atlanta",
6220
+ addressState: "GA",
6221
+ addressPostalCode: "30309",
6222
+ homeHealthEligible: true
6223
+ },
6224
+ {
6225
+ id: "on-site-demo-doctor-006",
6226
+ firstName: "David",
6227
+ lastName: "Sullivan",
6228
+ suffix: "MD",
6229
+ gender: "male",
6230
+ birthDate: "1965-12-02",
6231
+ phone: "+14045550106",
6232
+ email: "david.sullivan@on-site-demo.example.com",
6233
+ npi: "1003000006",
6234
+ addressLine: "550 Pharr Road",
6235
+ addressCity: "Atlanta",
6236
+ addressState: "GA",
6237
+ addressPostalCode: "30305",
6238
+ homeHealthEligible: false
6239
+ },
6240
+ {
6241
+ id: "on-site-demo-doctor-007",
6242
+ firstName: "Maria",
6243
+ lastName: "Hernandez",
6244
+ suffix: "MD",
6245
+ gender: "female",
6246
+ birthDate: "1976-06-11",
6247
+ phone: "+14045550107",
6248
+ email: "maria.hernandez@on-site-demo.example.com",
6249
+ npi: "1003000007",
6250
+ addressLine: "2200 Northside Drive NW",
6251
+ addressCity: "Atlanta",
6252
+ addressState: "GA",
6253
+ addressPostalCode: "30318",
6254
+ homeHealthEligible: false
6255
+ },
6256
+ {
6257
+ id: "on-site-demo-doctor-008",
6258
+ firstName: "Robert",
6259
+ lastName: "Kim",
6260
+ suffix: "DO",
6261
+ gender: "male",
6262
+ birthDate: "1983-02-27",
6263
+ phone: "+14045550108",
6264
+ email: "robert.kim@on-site-demo.example.com",
6265
+ npi: "1003000008",
6266
+ addressLine: "400 West Peachtree Street",
6267
+ addressCity: "Atlanta",
6268
+ addressState: "GA",
6269
+ addressPostalCode: "30308",
6270
+ homeHealthEligible: false
6271
+ },
6272
+ {
6273
+ id: "on-site-demo-doctor-009",
6274
+ firstName: "Jennifer",
6275
+ lastName: "Williams",
6276
+ suffix: "MD",
6277
+ gender: "female",
6278
+ birthDate: "1970-10-16",
6279
+ phone: "+14045550109",
6280
+ email: "jennifer.williams@on-site-demo.example.com",
6281
+ npi: "1003000009",
6282
+ addressLine: "1364 Clifton Road NE",
6283
+ addressCity: "Atlanta",
6284
+ addressState: "GA",
6285
+ addressPostalCode: "30322",
6286
+ homeHealthEligible: false
6287
+ },
6288
+ {
6289
+ id: "on-site-demo-doctor-010",
6290
+ firstName: "Thomas",
6291
+ lastName: "Anderson",
6292
+ suffix: "MD",
6293
+ gender: "male",
6294
+ birthDate: "1988-09-08",
6295
+ phone: "+14045550110",
6296
+ email: "thomas.anderson@on-site-demo.example.com",
6297
+ npi: "1003000010",
6298
+ addressLine: "1900 The Exchange SE",
6299
+ addressCity: "Atlanta",
6300
+ addressState: "GA",
6301
+ addressPostalCode: "30339",
6302
+ homeHealthEligible: false
6303
+ }
6304
+ ];
6305
+ var SCRIBE_SPECS = [
6306
+ {
6307
+ id: "on-site-demo-scribe-001",
6308
+ firstName: "Emily",
6309
+ lastName: "Reed",
6310
+ gender: "female",
6311
+ birthDate: "1995-01-23",
6312
+ phone: "+14045550201",
6313
+ email: "emily.reed@on-site-demo.example.com",
6314
+ staffId: "SCR-0001",
6315
+ addressLine: "240 Edgewood Avenue SE",
6316
+ addressCity: "Atlanta",
6317
+ addressState: "GA",
6318
+ addressPostalCode: "30303"
6319
+ },
6320
+ {
6321
+ id: "on-site-demo-scribe-002",
6322
+ firstName: "Daniel",
6323
+ lastName: "Foster",
6324
+ gender: "male",
6325
+ birthDate: "1993-05-17",
6326
+ phone: "+14045550202",
6327
+ email: "daniel.foster@on-site-demo.example.com",
6328
+ staffId: "SCR-0002",
6329
+ addressLine: "780 Boulevard SE",
6330
+ addressCity: "Atlanta",
6331
+ addressState: "GA",
6332
+ addressPostalCode: "30312"
6333
+ },
6334
+ {
6335
+ id: "on-site-demo-scribe-003",
6336
+ firstName: "Ashley",
6337
+ lastName: "Garrett",
6338
+ gender: "female",
6339
+ birthDate: "1997-11-29",
6340
+ phone: "+14045550203",
6341
+ email: "ashley.garrett@on-site-demo.example.com",
6342
+ staffId: "SCR-0003",
6343
+ addressLine: "55 Allen Plaza",
6344
+ addressCity: "Atlanta",
6345
+ addressState: "GA",
6346
+ addressPostalCode: "30308"
6347
+ },
6348
+ {
6349
+ id: "on-site-demo-scribe-004",
6350
+ firstName: "Brandon",
6351
+ lastName: "Murray",
6352
+ gender: "male",
6353
+ birthDate: "1991-07-04",
6354
+ phone: "+14045550204",
6355
+ email: "brandon.murray@on-site-demo.example.com",
6356
+ staffId: "SCR-0004",
6357
+ addressLine: "1100 Spring Street NW",
6358
+ addressCity: "Atlanta",
6359
+ addressState: "GA",
6360
+ addressPostalCode: "30309"
6361
+ },
6362
+ {
6363
+ id: "on-site-demo-scribe-005",
6364
+ firstName: "Sofia",
6365
+ lastName: "Bennett",
6366
+ gender: "female",
6367
+ birthDate: "1999-03-12",
6368
+ phone: "+14045550205",
6369
+ email: "sofia.bennett@on-site-demo.example.com",
6370
+ staffId: "SCR-0005",
6371
+ addressLine: "165 Courtland Street NE",
6372
+ addressCity: "Atlanta",
6373
+ addressState: "GA",
6374
+ addressPostalCode: "30303"
6375
+ }
6376
+ ];
6377
+ var ON_SITE_SCENARIO8 = "on-site-demo";
6378
+ var buildIdentifierPair7 = (practitionerId, roleSuffix) => [
6379
+ demoScenarioIdentifier(ON_SITE_SCENARIO8, roleSuffix),
6380
+ openhiResourceIdentifier({
6381
+ tenantId: ON_SITE_DEMO_TENANT_ID,
6382
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
6383
+ resourceType: "Practitioner",
6384
+ id: practitionerId
6385
+ })
6386
+ ];
6387
+ var buildDoctorResource = (spec) => {
6388
+ const fullText = `${spec.firstName} ${spec.lastName}${spec.suffix ? `, ${spec.suffix}` : ""}`;
6389
+ const baseIdentifiers = buildIdentifierPair7(
6390
+ spec.id,
6391
+ `practitioner-${spec.id}`
6392
+ );
6393
+ return {
6394
+ resourceType: "Practitioner",
6395
+ id: spec.id,
6396
+ active: true,
6397
+ identifier: [
6398
+ ...baseIdentifiers ?? [],
3178
6399
  {
3179
- id: "demo-mixed-workspace-wound-care",
3180
- name: "Northbridge Wound Care Center",
3181
- roleSuffix: "workspace-wound-care"
6400
+ system: US_NPI_SYSTEM,
6401
+ value: spec.npi
6402
+ }
6403
+ ],
6404
+ name: [
6405
+ {
6406
+ use: "official",
6407
+ text: fullText,
6408
+ given: [spec.firstName],
6409
+ family: spec.lastName,
6410
+ prefix: ["Dr."],
6411
+ ...spec.suffix ? { suffix: [spec.suffix] } : {}
6412
+ }
6413
+ ],
6414
+ gender: spec.gender,
6415
+ birthDate: spec.birthDate,
6416
+ telecom: [
6417
+ { system: "phone", value: spec.phone, use: "work" },
6418
+ { system: "email", value: spec.email, use: "work" }
6419
+ ],
6420
+ address: [
6421
+ {
6422
+ use: "work",
6423
+ line: [spec.addressLine],
6424
+ city: spec.addressCity,
6425
+ state: spec.addressState,
6426
+ postalCode: spec.addressPostalCode,
6427
+ country: "US"
6428
+ }
6429
+ ],
6430
+ qualification: [
6431
+ {
6432
+ code: {
6433
+ text: PRACTITIONER_ROLE_PHYSICIAN
6434
+ }
3182
6435
  },
6436
+ // Per-state credentialing entries appended after the role
6437
+ // label (#1308). Each on-site doctor carries 1-3 state
6438
+ // licenses with status / period / issuer fields populated
6439
+ // for the directory UI's credentialing column.
6440
+ ...buildCredentialingQualifications(spec.id)
6441
+ ],
6442
+ ...spec.homeHealthEligible ? {
6443
+ extension: [
6444
+ {
6445
+ url: HOME_HEALTH_ELIGIBLE_EXTENSION_URL,
6446
+ valueBoolean: true
6447
+ }
6448
+ ]
6449
+ } : {}
6450
+ };
6451
+ };
6452
+ var buildScribeResource = (spec) => {
6453
+ const fullText = `${spec.firstName} ${spec.lastName}`;
6454
+ const baseIdentifiers = buildIdentifierPair7(
6455
+ spec.id,
6456
+ `practitioner-${spec.id}`
6457
+ );
6458
+ return {
6459
+ resourceType: "Practitioner",
6460
+ id: spec.id,
6461
+ active: true,
6462
+ identifier: [
6463
+ ...baseIdentifiers ?? [],
3183
6464
  {
3184
- id: "demo-mixed-workspace-primary-care",
3185
- name: "Northbridge Family Practice",
3186
- roleSuffix: "workspace-primary-care"
6465
+ system: ON_SITE_STAFF_ID_SYSTEM,
6466
+ value: spec.staffId
6467
+ }
6468
+ ],
6469
+ name: [
6470
+ {
6471
+ use: "official",
6472
+ text: fullText,
6473
+ given: [spec.firstName],
6474
+ family: spec.lastName
6475
+ }
6476
+ ],
6477
+ gender: spec.gender,
6478
+ birthDate: spec.birthDate,
6479
+ telecom: [
6480
+ { system: "phone", value: spec.phone, use: "work" },
6481
+ { system: "email", value: spec.email, use: "work" }
6482
+ ],
6483
+ address: [
6484
+ {
6485
+ use: "work",
6486
+ line: [spec.addressLine],
6487
+ city: spec.addressCity,
6488
+ state: spec.addressState,
6489
+ postalCode: spec.addressPostalCode,
6490
+ country: "US"
6491
+ }
6492
+ ],
6493
+ qualification: [
6494
+ {
6495
+ code: {
6496
+ text: PRACTITIONER_ROLE_SCRIBE
6497
+ }
3187
6498
  }
3188
6499
  ]
3189
- }
3190
- ];
3191
- var demoMembershipId = (devUserId, tenantId) => `demo-membership-${devUserId}-${tenantId}`;
3192
- var demoRoleAssignmentId = (devUserId, tenantId, roleCode) => `demo-roleassignment-${devUserId}-${tenantId}-${roleCode}`;
3193
- var demoScenarioIdentifier = (scenario, roleSuffix) => ({
3194
- system: DEMO_URN_SYSTEM,
3195
- value: `${scenario}:${roleSuffix}`
3196
- });
3197
- var openhiResourceIdentifier = (params) => ({
3198
- use: "unversioned",
3199
- system: OPENHI_RESOURCE_URN_SYSTEM,
3200
- value: `urn:ohi:${params.tenantId}:${params.workspaceId}:${params.resourceType}:${params.id}`
3201
- });
3202
- var demoRolesForUserInTenant = (_user, _tenantId) => {
3203
- void _user;
3204
- void _tenantId;
3205
- return [import_types.PLATFORM_ROLE_CODE.TENANT_ADMIN];
6500
+ };
6501
+ };
6502
+ var ON_SITE_DEMO_DOCTORS = DOCTOR_SPECS.map(buildDoctorResource);
6503
+ var ON_SITE_DEMO_SCRIBES = SCRIBE_SPECS.map(buildScribeResource);
6504
+ var ON_SITE_DEMO_DOCTOR_IDS = DOCTOR_SPECS.map(
6505
+ (d) => d.id
6506
+ );
6507
+ var ON_SITE_DEMO_SCRIBE_IDS = SCRIBE_SPECS.map(
6508
+ (s) => s.id
6509
+ );
6510
+ var homeHealthEligibleDoctors = () => ON_SITE_DEMO_DOCTORS.filter(
6511
+ (p) => (p.extension ?? []).some(
6512
+ (ext) => ext.url === HOME_HEALTH_ELIGIBLE_EXTENSION_URL && ext.valueBoolean === true
6513
+ )
6514
+ );
6515
+ var ON_SITE_DEMO_FIXTURES = {
6516
+ tenantId: ON_SITE_DEMO_TENANT_ID,
6517
+ workspaceId: ON_SITE_DEMO_WORKSPACE_ID,
6518
+ scenario: ON_SITE_SCENARIO8,
6519
+ // Patients + Coverages are materialised lazily via the
6520
+ // `buildPatients` / `buildCoverages` hooks below. Module-level
6521
+ // arrays would force a TDZ on the cross-module imports between
6522
+ // `on-site-demo-fixtures.ts`, `on-site-demo-blocks.ts`, and
6523
+ // `on-site-demo-facility-patients.ts`.
6524
+ patients: [],
6525
+ practitioners: [...ON_SITE_DEMO_DOCTORS, ...ON_SITE_DEMO_SCRIBES],
6526
+ observations: [],
6527
+ encounters: [],
6528
+ accounts: [],
6529
+ locations: [...ON_SITE_DEMO_FACILITIES],
6530
+ organizations: [...ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS],
6531
+ buildPatients: () => [
6532
+ ...buildOnSiteDemoFacilityPatients(),
6533
+ ...buildOnSiteDemoHomeHealthPatients()
6534
+ ],
6535
+ buildCoverages: () => [
6536
+ ...buildOnSiteDemoFacilityCoverages(),
6537
+ ...buildOnSiteDemoHomeHealthCoverages()
6538
+ ],
6539
+ buildAppointments: (baseContext) => buildOnSiteDemoBlockAppointments(
6540
+ baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()
6541
+ ),
6542
+ buildConditions: (baseContext) => buildOnSiteDemoWoundConditions(
6543
+ baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()
6544
+ ),
6545
+ buildEncounters: (baseContext) => buildOnSiteDemoEncounters(baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()),
6546
+ buildObservations: (baseContext) => buildOnSiteDemoWoundObservations(
6547
+ baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()
6548
+ ),
6549
+ buildProcedures: (baseContext) => buildOnSiteDemoWoundProcedures(
6550
+ baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()
6551
+ ),
6552
+ buildClaims: (baseContext) => buildOnSiteDemoClaims(baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString()),
6553
+ buildPaymentNotices: (baseContext) => buildOnSiteDemoPaymentNotices(baseContext.date ?? (/* @__PURE__ */ new Date()).toISOString())
3206
6554
  };
3207
6555
 
3208
6556
  // src/workflows/control-plane/seed-demo-data/data-plane-fixtures.ts
@@ -3572,6 +6920,10 @@ var buildPrimaryCareFixtures = (scenario, tenantId, workspaceId, idPrefix) => ({
3572
6920
  ]
3573
6921
  });
3574
6922
  var DEMO_DATA_PLANE_FIXTURES = [
6923
+ // On-site-medical UAT demo workspace — practitioners only (issue
6924
+ // #1302). Patients, encounters, and other data-plane resources for
6925
+ // this tenant land in later tickets.
6926
+ ON_SITE_DEMO_FIXTURES,
3575
6927
  buildWoundCareFixtures(
3576
6928
  "demo-wound-care",
3577
6929
  "demo-wound-care-tenant",
@@ -6489,18 +9841,42 @@ var import_node_zlib = require("zlib");
6489
9841
  // src/data/operations/data/account/account-create-operation.ts
6490
9842
  var import_ulid = require("ulid");
6491
9843
 
6492
- // src/data/operations/data/encounter/encounter-create-operation.ts
9844
+ // src/data/operations/data/appointment/appointment-create-operation.ts
6493
9845
  var import_ulid2 = require("ulid");
6494
9846
 
6495
- // src/data/operations/data/observation/observation-create-operation.ts
9847
+ // src/data/operations/data/claim/claim-create-operation.ts
6496
9848
  var import_ulid3 = require("ulid");
6497
9849
 
6498
- // src/data/operations/data/patient/patient-create-operation.ts
9850
+ // src/data/operations/data/condition/condition-create-operation.ts
6499
9851
  var import_ulid4 = require("ulid");
6500
9852
 
6501
- // src/data/operations/data/practitioner/practitioner-create-operation.ts
9853
+ // src/data/operations/data/coverage/coverage-create-operation.ts
6502
9854
  var import_ulid5 = require("ulid");
6503
9855
 
9856
+ // src/data/operations/data/encounter/encounter-create-operation.ts
9857
+ var import_ulid6 = require("ulid");
9858
+
9859
+ // src/data/operations/data/location/location-create-operation.ts
9860
+ var import_ulid7 = require("ulid");
9861
+
9862
+ // src/data/operations/data/observation/observation-create-operation.ts
9863
+ var import_ulid8 = require("ulid");
9864
+
9865
+ // src/data/operations/data/organization/organization-create-operation.ts
9866
+ var import_ulid9 = require("ulid");
9867
+
9868
+ // src/data/operations/data/patient/patient-create-operation.ts
9869
+ var import_ulid10 = require("ulid");
9870
+
9871
+ // src/data/operations/data/paymentnotice/paymentnotice-create-operation.ts
9872
+ var import_ulid11 = require("ulid");
9873
+
9874
+ // src/data/operations/data/practitioner/practitioner-create-operation.ts
9875
+ var import_ulid12 = require("ulid");
9876
+
9877
+ // src/data/operations/data/procedure/procedure-create-operation.ts
9878
+ var import_ulid13 = require("ulid");
9879
+
6504
9880
  // src/workflows/control-plane/seed-demo-data/seed-demo-data.handler.ts
6505
9881
  var SEED_DEMO_DATA_USER_POOL_ID_ENV_VAR = "SEED_DEMO_DATA_USER_POOL_ID";
6506
9882
 
@@ -8644,10 +12020,23 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8644
12020
  // Annotate the CommonJS export names for ESM import in node:
8645
12021
  0 && (module.exports = {
8646
12022
  ADMIN_DOMAIN_PREFIX,
12023
+ BLOCK_OCCURRENCES_PER_TEMPLATE,
12024
+ BLOCK_OCCURRENCE_WEEKS_FUTURE,
12025
+ BLOCK_OCCURRENCE_WEEKS_PAST,
8647
12026
  BRIDGED_STATUSES,
12027
+ CLAIM_WORKFLOW_STATUS,
12028
+ CLAIM_WORKFLOW_STATUS_EXTENSION_URL,
12029
+ CLAIM_WORKFLOW_STATUS_LAST_TRANSITION_SUB_EXTENSION_URL,
12030
+ CLAIM_WORKFLOW_STATUS_VALUE_SUB_EXTENSION_URL,
8648
12031
  CLOUDFORMATION_EVENT_SOURCE,
8649
12032
  CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE,
12033
+ CONDITION_CLINICAL_STATUS_SYSTEM,
8650
12034
  CONTROL_EVENT_BUS_NAME_ENV_VAR,
12035
+ COVERAGE_PAYOR_TYPE_SYSTEM,
12036
+ COVERAGE_QMB_STATUS_EXTENSION_URL,
12037
+ COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
12038
+ CPT_SYSTEM,
12039
+ CREDENTIALING_STATUS,
8651
12040
  ChildHostedZone,
8652
12041
  CognitoUserPool,
8653
12042
  CognitoUserPoolClient,
@@ -8669,13 +12058,48 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8669
12058
  DEMO_URN_SYSTEM,
8670
12059
  DEV_CORS_ALLOW_ORIGINS,
8671
12060
  DEV_USERS,
12061
+ DIRECTOR_OF_NURSING_EMAIL_EXTENSION_URL,
12062
+ DIRECTOR_OF_NURSING_EXTENSION_URL,
12063
+ DIRECTOR_OF_NURSING_NAME_EXTENSION_URL,
12064
+ DIRECTOR_OF_NURSING_PHONE_EXTENSION_URL,
12065
+ DME_SUPPLIER_CATEGORY_CODE,
8672
12066
  DataEventBus,
8673
12067
  DataStoreHistoricalArchive,
8674
12068
  DataStorePostgresReplica,
8675
12069
  DiscoverableStringParameter,
8676
12070
  DynamoDbDataStore,
12071
+ ENCOUNTER_CLASS_FACILITY,
12072
+ ENCOUNTER_CLASS_HOME_HEALTH,
12073
+ ENCOUNTER_CLASS_SYSTEM,
12074
+ FHIR_ORGANIZATION_TYPE_SYSTEM,
12075
+ HOME_HEALTH_ELIGIBLE_EXTENSION_URL,
12076
+ HOME_HEALTH_VISITS_PAST,
12077
+ HOME_HEALTH_VISIT_CADENCE_DAYS_EXTENSION_URL,
12078
+ HOME_HEALTH_VISIT_CADENCE_OPTIONS,
12079
+ HOSPICE_EFFECTIVE_DATE_SUB_EXTENSION_URL,
12080
+ HOSPICE_STATUS_VALUE_SUB_EXTENSION_URL,
12081
+ INSURANCE_PAYOR_CATEGORY_CODE,
12082
+ INSURANCE_PAYOR_PLAN_TYPE_SYSTEM,
8677
12083
  LOCALHOST_OAUTH_CALLBACK_URLS,
8678
12084
  LOCALHOST_OAUTH_LOGOUT_URLS,
12085
+ LOINC_SYSTEM,
12086
+ ON_SITE_APPOINTMENT_TYPE_SYSTEM,
12087
+ ON_SITE_DEMO_BLOCK_CAPACITY_EXTENSION_URL,
12088
+ ON_SITE_DEMO_BLOCK_TEMPLATE_IDS,
12089
+ ON_SITE_DEMO_DIRECTORY_ORGANIZATIONS,
12090
+ ON_SITE_DEMO_DME_SUPPLIERS,
12091
+ ON_SITE_DEMO_DOCTORS,
12092
+ ON_SITE_DEMO_DOCTOR_IDS,
12093
+ ON_SITE_DEMO_FACILITIES,
12094
+ ON_SITE_DEMO_FACILITY_IDS,
12095
+ ON_SITE_DEMO_FIXTURES,
12096
+ ON_SITE_DEMO_INSURANCE_PAYORS,
12097
+ ON_SITE_DEMO_SCRIBES,
12098
+ ON_SITE_DEMO_SCRIBE_IDS,
12099
+ ON_SITE_DEMO_TENANT_ID,
12100
+ ON_SITE_DEMO_WORKSPACE_ID,
12101
+ ON_SITE_DIRECTORY_CATEGORY_SYSTEM,
12102
+ ON_SITE_STAFF_ID_SYSTEM,
8679
12103
  OPENHI_REPO_TAG_KEY_ENV_VAR,
8680
12104
  OPENHI_RESOURCE_URN_SYSTEM,
8681
12105
  OPENHI_TAG_KEY_PREFIX_ENV_VAR,
@@ -8701,6 +12125,21 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8701
12125
  OpsEventBus,
8702
12126
  OwningDeleteCascadeLambdas,
8703
12127
  OwningDeleteCascadeWorkflow,
12128
+ PATIENT_ASSIGNED_BLOCK_TEMPLATE_EXTENSION_URL,
12129
+ PATIENT_ASSIGNED_HOME_HEALTH_PROVIDER_EXTENSION_URL,
12130
+ PATIENT_DEFAULT_CARE_LOCATION_EXTENSION_URL,
12131
+ PATIENT_DEFAULT_CARE_SETTING_EXTENSION_URL,
12132
+ PATIENT_HOSPICE_STATUS_EXTENSION_URL,
12133
+ PATIENT_RESIDENCY_ADMISSION_DATE_EXTENSION_URL,
12134
+ PATIENT_RESIDENCY_ROOM_EXTENSION_URL,
12135
+ PAYMENT_STATUS,
12136
+ PAYMENT_STATUS_SYSTEM,
12137
+ PAYOR_PLAN_TYPE_COMMERCIAL,
12138
+ PAYOR_PLAN_TYPE_MEDICARE,
12139
+ PAYOR_PLAN_TYPE_MEDICARE_ADVANTAGE,
12140
+ PAYOR_TYPE_COMMERCIAL,
12141
+ PAYOR_TYPE_MEDICARE,
12142
+ PAYOR_TYPE_MEDICARE_ADVANTAGE,
8704
12143
  PER_BRANCH_PREVIEW_PREFIX,
8705
12144
  PLACEHOLDER_TENANT_ID,
8706
12145
  PLACEHOLDER_WORKSPACE_ID,
@@ -8709,6 +12148,11 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8709
12148
  POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME,
8710
12149
  POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME,
8711
12150
  POSTGRES_REPLICA_SECRET_ARN_SSM_NAME,
12151
+ PRACTITIONER_CREDENTIALING_EXTENSION_URL,
12152
+ PRACTITIONER_CREDENTIALING_STATE_SUB_EXTENSION_URL,
12153
+ PRACTITIONER_CREDENTIALING_STATUS_SUB_EXTENSION_URL,
12154
+ PRACTITIONER_ROLE_PHYSICIAN,
12155
+ PRACTITIONER_ROLE_SCRIBE,
8712
12156
  PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE,
8713
12157
  PerBranchHostname,
8714
12158
  PlatformDeployBridge,
@@ -8718,6 +12162,8 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8718
12162
  PostConfirmationLambda,
8719
12163
  PreTokenGenerationLambda,
8720
12164
  ProvisionDefaultWorkspaceLambda,
12165
+ QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL,
12166
+ QMB_STATUS_VALUE_SUB_EXTENSION_URL,
8721
12167
  RENAMABLE_ENTITY_TYPE,
8722
12168
  RENAME_CASCADE_CONSUMER_NAME,
8723
12169
  RENAME_CASCADE_DEFAULT_CONCURRENCY,
@@ -8736,7 +12182,9 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8736
12182
  SEED_SYSTEM_DATA_ACTOR_SYSTEM,
8737
12183
  SEED_SYSTEM_DATA_CONSUMER_NAME,
8738
12184
  SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR,
12185
+ SNOMED_SYSTEM,
8739
12186
  SSM_PARAM_NAME_FULL_DOMAIN,
12187
+ STATE_MEDICAL_LICENSE_SYSTEM,
8740
12188
  STATIC_HOSTING_SERVICE_TYPE,
8741
12189
  SeedDemoDataLambda,
8742
12190
  SeedDemoDataWorkflow,
@@ -8744,22 +12192,70 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
8744
12192
  SeedSystemDataWorkflow,
8745
12193
  StaticContent,
8746
12194
  StaticHosting,
12195
+ TOTAL_HOME_HEALTH_PATIENTS,
8747
12196
  USER_ONBOARDING_EVENT_SOURCE,
12197
+ US_NPI_SYSTEM,
8748
12198
  UserOnboardingWorkflow,
12199
+ WOUND_DEPTH_CODE,
12200
+ WOUND_EXAM_PANEL_CODE,
12201
+ WOUND_EXAM_PANEL_DISPLAY,
12202
+ WOUND_LENGTH_CODE,
12203
+ WOUND_STATUS_CODE,
12204
+ WOUND_WIDTH_CODE,
8749
12205
  WorkflowDedupConsumerNameInvalidError,
8750
12206
  WorkflowDedupTable,
8751
12207
  WorkflowDedupTableDuplicateError,
12208
+ __resetOnSiteDemoClaimCachesForTests,
12209
+ __resetOnSiteDemoEncounterCachesForTests,
12210
+ buildCredentialingQualifications,
8752
12211
  buildFhirCurrentResourceChangeDetail,
12212
+ buildOnSiteDemoBlockAppointments,
12213
+ buildOnSiteDemoClaims,
12214
+ buildOnSiteDemoEncounters,
12215
+ buildOnSiteDemoFacilityCoverages,
12216
+ buildOnSiteDemoFacilityPatients,
12217
+ buildOnSiteDemoHomeHealthCoverages,
12218
+ buildOnSiteDemoHomeHealthPatients,
12219
+ buildOnSiteDemoPaymentNotices,
12220
+ buildOnSiteDemoWoundConditions,
12221
+ buildOnSiteDemoWoundObservations,
12222
+ buildOnSiteDemoWoundProcedures,
8753
12223
  buildProvisionDefaultWorkspaceRequestedDetail,
8754
12224
  computeBranchHash,
8755
12225
  demoMembershipId,
8756
12226
  demoRoleAssignmentId,
8757
12227
  demoRolesForUserInTenant,
8758
12228
  demoScenarioIdentifier,
12229
+ facilityPatientsForBlock,
12230
+ findOnSiteDemoBlockTemplate,
12231
+ findOnSiteDemoFacilityPatientBlock,
12232
+ findOnSiteDemoHomeHealthPatientProvider,
12233
+ findOnSiteDemoHomeHealthPatientVisitCadenceDays,
8759
12234
  getDynamoDbDataStoreTableName,
8760
12235
  getPostgresReplicaSchemaName,
8761
12236
  getWorkflowDedupTableName,
12237
+ homeHealthEligibleDoctors,
12238
+ onSiteDemoBilledEncounterIds,
12239
+ onSiteDemoClaimIds,
12240
+ onSiteDemoDmeSupplierIds,
12241
+ onSiteDemoEncounterIds,
12242
+ onSiteDemoEncounterMetadata,
12243
+ onSiteDemoEncountersForPatient,
12244
+ onSiteDemoFacilityPatientIds,
12245
+ onSiteDemoHomeHealthPatientIds,
12246
+ onSiteDemoInsurancePayorIds,
12247
+ onSiteDemoIntakeOnlyFacilityPatientIds,
12248
+ onSiteDemoIntakeOnlyHomeHealthPatientIds,
12249
+ onSiteDemoPaymentNoticeIds,
12250
+ onSiteDemoScheduledFacilityPatientIds,
12251
+ onSiteDemoScheduledHomeHealthPatientIds,
12252
+ onSiteDemoUnbilledEncounterIds,
12253
+ onSiteDemoWoundBearingPatientIds,
12254
+ onSiteDemoWoundProcedurePatientIds,
8762
12255
  openHiTagKey,
8763
- openhiResourceIdentifier
12256
+ openhiResourceIdentifier,
12257
+ practitionerCredentialingForDoctor,
12258
+ practitionerCredentialingForState,
12259
+ woundConditionIdForPatient
8764
12260
  });
8765
12261
  //# sourceMappingURL=index.js.map