emuhealth 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -0
- package/THIRD_PARTY_NOTICES.md +15 -6
- package/dist/api.d.ts +1 -1
- package/dist/api.js +533 -15
- package/dist/api.js.map +1 -1
- package/dist/{chunk-RNX62IMQ.js → chunk-N3OXS25N.js} +534 -16
- package/dist/chunk-N3OXS25N.js.map +1 -0
- package/dist/dist-2AQ4NEIG.js +5444 -0
- package/dist/dist-2AQ4NEIG.js.map +1 -0
- package/dist/{dist-UKXOY2NR.js → dist-2EW6JQLR.js} +3 -1
- package/dist/dist-2EW6JQLR.js.map +1 -0
- package/dist/dist-2YZQBLX2.js +2605 -0
- package/dist/dist-2YZQBLX2.js.map +1 -0
- package/dist/dist-6GBOXHHG.js +2479 -0
- package/dist/dist-6GBOXHHG.js.map +1 -0
- package/dist/dist-BGTZW3FR.js +2170 -0
- package/dist/dist-BGTZW3FR.js.map +1 -0
- package/dist/dist-CKAIZSL3.js +6372 -0
- package/dist/dist-CKAIZSL3.js.map +1 -0
- package/dist/{dist-IJ7LRDHX.js → dist-CUGOQPIQ.js} +3 -1
- package/dist/{dist-IJ7LRDHX.js.map → dist-CUGOQPIQ.js.map} +1 -1
- package/dist/dist-DGVBWEYK.js +987 -0
- package/dist/dist-DGVBWEYK.js.map +1 -0
- package/dist/dist-F4OEZZBR.js +2656 -0
- package/dist/dist-F4OEZZBR.js.map +1 -0
- package/dist/dist-G4ZKPBOD.js +5618 -0
- package/dist/dist-G4ZKPBOD.js.map +1 -0
- package/dist/dist-GRGMAU6B.js +5852 -0
- package/dist/dist-GRGMAU6B.js.map +1 -0
- package/dist/{dist-6TPEFTAK.js → dist-HR2HAQAU.js} +3 -1
- package/dist/dist-HR2HAQAU.js.map +1 -0
- package/dist/{dist-EPYBRSJC.js → dist-ID2YPHQQ.js} +637 -87
- package/dist/dist-ID2YPHQQ.js.map +1 -0
- package/dist/dist-ID3HOBV6.js +2724 -0
- package/dist/dist-ID3HOBV6.js.map +1 -0
- package/dist/dist-IMZOZNB5.js +2626 -0
- package/dist/dist-IMZOZNB5.js.map +1 -0
- package/dist/dist-LHSWVR7A.js +2235 -0
- package/dist/dist-LHSWVR7A.js.map +1 -0
- package/dist/{dist-KQGIGONJ.js → dist-LIZK46HR.js} +3 -1
- package/dist/dist-LIZK46HR.js.map +1 -0
- package/dist/dist-LZGD67E4.js +666 -0
- package/dist/dist-LZGD67E4.js.map +1 -0
- package/dist/{dist-6OM56NLC.js → dist-M67TDUXQ.js} +3 -1
- package/dist/dist-M67TDUXQ.js.map +1 -0
- package/dist/{dist-4CPLP2NQ.js → dist-MZT7NDSQ.js} +3 -1
- package/dist/dist-MZT7NDSQ.js.map +1 -0
- package/dist/dist-NIYFNDR5.js +2224 -0
- package/dist/dist-NIYFNDR5.js.map +1 -0
- package/dist/dist-NZYMC7MC.js +6894 -0
- package/dist/dist-NZYMC7MC.js.map +1 -0
- package/dist/dist-OXKMJ5KL.js +5475 -0
- package/dist/dist-OXKMJ5KL.js.map +1 -0
- package/dist/dist-P6AKEZX2.js +963 -0
- package/dist/dist-P6AKEZX2.js.map +1 -0
- package/dist/{dist-QUEHZ2IC.js → dist-R5KFITO6.js} +3 -1
- package/dist/dist-R5KFITO6.js.map +1 -0
- package/dist/{dist-TOCHFEDO.js → dist-RQOZSYQG.js} +9 -2
- package/dist/dist-RQOZSYQG.js.map +1 -0
- package/dist/dist-RSDUQY6D.js +801 -0
- package/dist/dist-RSDUQY6D.js.map +1 -0
- package/dist/{dist-RWIGUWMG.js → dist-S5QMZUHL.js} +3 -1
- package/dist/dist-S5QMZUHL.js.map +1 -0
- package/dist/{dist-AZA2TRAN.js → dist-SYNUHPGD.js} +3 -1
- package/dist/dist-SYNUHPGD.js.map +1 -0
- package/dist/dist-U4GQRGQO.js +557 -0
- package/dist/dist-U4GQRGQO.js.map +1 -0
- package/dist/{dist-DWUKLYZG.js → dist-VWE6VC5Q.js} +3 -1
- package/dist/dist-VWE6VC5Q.js.map +1 -0
- package/dist/{dist-UFXXFP3R.js → dist-WQ3WATIG.js} +3 -1
- package/dist/dist-WQ3WATIG.js.map +1 -0
- package/dist/dist-WSHMJF6J.js +6403 -0
- package/dist/dist-WSHMJF6J.js.map +1 -0
- package/dist/dist-YC3GSNFQ.js +6545 -0
- package/dist/dist-YC3GSNFQ.js.map +1 -0
- package/dist/{dist-DVBHDPLP.js → dist-YUXZ2AZV.js} +3 -1
- package/dist/dist-YUXZ2AZV.js.map +1 -0
- package/dist/dist-YYYAIE7M.js +1070 -0
- package/dist/dist-YYYAIE7M.js.map +1 -0
- package/dist/dist-ZTZM5RRL.js +1025 -0
- package/dist/dist-ZTZM5RRL.js.map +1 -0
- package/dist/index.js +167 -2
- package/dist/index.js.map +1 -1
- package/dist/project-worker.js +1 -1
- package/package.json +29 -6
- package/dist/chunk-RNX62IMQ.js.map +0 -1
- package/dist/dist-4CPLP2NQ.js.map +0 -1
- package/dist/dist-6OM56NLC.js.map +0 -1
- package/dist/dist-6TPEFTAK.js.map +0 -1
- package/dist/dist-AZA2TRAN.js.map +0 -1
- package/dist/dist-DVBHDPLP.js.map +0 -1
- package/dist/dist-DWUKLYZG.js.map +0 -1
- package/dist/dist-EPYBRSJC.js.map +0 -1
- package/dist/dist-KQGIGONJ.js.map +0 -1
- package/dist/dist-QUEHZ2IC.js.map +0 -1
- package/dist/dist-RWIGUWMG.js.map +0 -1
- package/dist/dist-TOCHFEDO.js.map +0 -1
- package/dist/dist-UFXXFP3R.js.map +0 -1
- package/dist/dist-UKXOY2NR.js.map +0 -1
package/README.md
CHANGED
|
@@ -38,6 +38,29 @@ All services listen on IPv4 loopback (`127.0.0.1`) by default. No config file ne
|
|
|
38
38
|
Health and life science services use a fixed range starting at `http://localhost:4100`. Each health service keeps its port no matter which other services run or how many upstream services exist.
|
|
39
39
|
|
|
40
40
|
- **FHIR R4** on `http://localhost:4100` (create, read, update, JSON Patch, delete, versioning, `_history`, search, batch and transaction Bundles, and a CapabilityStatement at `/metadata`, `Patient/$everything`, Bulk Data `$export` with NDJSON output; starts with 5 generated synthetic patients; SMART App Launch with patient and practitioner pickers, an EHR launch simulator, PKCE, SMART Backend Services with `private_key_jwt`, and scope and patient enforcement for presented tokens; terminology fixtures with `CodeSystem/$lookup` and `$validate-code`; browse it at `/_inspector`)
|
|
41
|
+
- **Epic** on `http://localhost:4101` (the FHIR R4 server under Epic's `/api/FHIR/R4` base, OAuth 2.0 at `/oauth2/authorize` and `/oauth2/token` with SMART App Launch and Backend Services, `__epic.dstu2.patient` in token responses, Epic's informational OperationOutcome on empty searches, and Schedules and Slots with `Appointment/$find` and `Appointment/$book`)
|
|
42
|
+
- **openFDA** on `http://localhost:4102` (`/drug/label.json`, `/drug/event.json`, and `/drug/enforcement.json`, `/device/enforcement.json`, `/food/enforcement.json` recalls with the openFDA query language: `search` with fields, phrases, `.exact`, ranges, `AND`/`OR`/`NOT`, plus `sort`, `count`, `limit`, and `skip`; synthetic labels, adverse event reports, and recalls; browse them at `/_inspector`)
|
|
43
|
+
- **RxNav** on `http://localhost:4103` (the RxNorm REST API under `/REST`: `rxcui`, `drugs`, `properties`, `related`, `allrelated`, `ndcs`, `approximateTerm`, `spellingsuggestions`, and `displaynames`, with or without `.json`, over a verified RxNorm subset plus concepts you add; browse it at `/_inspector`)
|
|
44
|
+
- **ClinicalTrials.gov** on `http://localhost:4104` (API v2 under `/api/v2`: `/studies` with `query.*`, `filter.overallStatus`, `filter.ids`, `filter.advanced` `AREA[]` clauses, `sort`, `fields`, `pageSize`, `pageToken`, and `countTotal`, plus `/studies/{nctId}`, `/version`, and `/stats/size`; synthetic studies with `NCT99` ids; browse them at `/_inspector`)
|
|
45
|
+
- **NCBI E-utilities** on `http://localhost:4105` (`/entrez/eutils/einfo`, `esearch` with field tags, `AND`/`OR`/`NOT`, date ranges, paging, and `usehistory`, `esummary`, `efetch` with PubMed XML and abstract text, and `elink` between Gene and PubMed, in JSON or XML; synthetic PubMed articles and a small set of real human genes; browse them at `/_inspector`)
|
|
46
|
+
- **NPPES NPI Registry** on `http://localhost:4106` (`/api/?version=2.1` with `number`, `enumeration_type`, names and organization names with `*` wildcards, `taxonomy_description`, `city`, `state`, `postal_code`, `limit`, and `skip`, and the registry's `Errors` responses; synthetic providers whose NPIs have valid check digits but start with 0, so they never match a real provider; browse them at `/_inspector`)
|
|
47
|
+
- **Benchling** on `http://localhost:4107` (API v2 under `/api/v2` with an API key as the Basic auth username or a client credentials token: DNA and AA sequences with filters, `nextToken` paging, create, update, archive, and registration through `registries/{id}:register-entities` and `tasks`, notebook `entries`, `assay-results` with schemas, `events`, and Svix-signed webhooks; a synthetic tenant; browse it at `/_inspector`)
|
|
48
|
+
- **REDCap** on `http://localhost:4108` (`POST /api/` with a token and `content`: `version`, `project`, `metadata`, `instrument`, `exportFieldNames`, and `record` export with `records`, `fields`, `forms`, `filterLogic`, labels, and flat or EAV output, import with validation against the data dictionary, and delete, in JSON, CSV, or XML; a synthetic project; browse it at `/_inspector`)
|
|
49
|
+
- **Oracle Health (Cerner)** on `http://localhost:4109` (the FHIR R4 server under the Millennium tenant path `/r4/5e7e0000-0000-4000-8000-000000000001`, provider and patient persona OAuth endpoints under `/tenants/{tenant}/protocols/oauth2/profiles/smart-v1`, system accounts with `client_credentials` and a client secret, `tenant` and `username` in token responses, and Millennium's required search parameters)
|
|
50
|
+
- **athenahealth** on `http://localhost:4110` (OAuth client credentials at `/oauth2/v1/token`, the proprietary REST API under `/v1/{practiceid}` for departments, providers, patients, chart problems, allergies, medications, and vitals, and open and booked appointments with booking and cancellation, plus FHIR R4 under `/fhir/r4` with `ah-practice`, all over the same synthetic records)
|
|
51
|
+
- **CMS Blue Button 2.0** on `http://localhost:4111` (patient access OAuth at `/v2/o/authorize/` and `/v2/o/token/` with a beneficiary picker, `/v2/connect/userinfo`, and the read-only FHIR R4 API at `/v2/fhir` with Patient, Coverage for Parts A, B, and D, and ExplanationOfBenefit claims for synthetic Medicare beneficiaries)
|
|
52
|
+
- **CDS Hooks** on `http://localhost:4112` (a simulated EHR that reads your CDS service's discovery document and fires `patient-view`, `order-sign`, `order-select`, or `encounter-start` with a signed JWT, context, prefetch, and a FHIR token from its own synthetic FHIR server, then checks the cards against the CDS Hooks rules; plus sample CDS services at `/cds-services`; fire hooks from `/_inspector`)
|
|
53
|
+
- **Redox** on `http://localhost:4113` (API key and OAuth authentication, `POST /endpoint` for Redox JSON data models such as PatientSearch, ClinicalSummary, PatientAdmin, Scheduling, and Results with Redox's `Meta.Errors`, and EHR events delivered to your destinations with the `verification-token` header and Redox's challenge handshake, over synthetic records)
|
|
54
|
+
- **AWS HealthLake** on `http://localhost:4114` (the HealthLake control plane for FHIR datastores and import and export jobs, and a FHIR R4 data plane per datastore at `/datastore/{id}/r4`, with real SigV4 signature checks so the AWS SDKs and CLI work against it; starts with one datastore preloaded with synthetic data)
|
|
55
|
+
- **Google Cloud Healthcare API** on `http://localhost:4115` (datasets and FHIR stores under `/v1/projects/{project}/locations/{location}`, with long-running operations and Google error shapes, and a FHIR R4 API per store that honors `enableUpdateCreate`; starts with a preloaded synthetic FHIR store)
|
|
56
|
+
- **Azure Health Data Services** on `http://localhost:4116` (FHIR services per workspace at `/{workspace}-{fhirservice}`, each a full FHIR R4 server, behind Entra ID Bearer tokens that are verified against the emuhealth Microsoft emulator, or any issuer, when `azurehealth.entra` is set; starts with `synthetic-fhir`, preloaded)
|
|
57
|
+
- **Stedi** on `http://localhost:4117` (the 2024-04-01 JSON clearinghouse APIs: eligibility (270/271) with 271-style benefits, professional claims (837P) that are adjudicated at once, claim status (276/277), 835 ERA reports, transactions, and payers, with synthetic payers and members)
|
|
58
|
+
- **Availity** on `http://localhost:4118` (OAuth client credentials, the payer list and configurations, asynchronous Coverages (270/271) and Claim Statuses (276/277) that you poll until `statusCode` 4, Service Reviews (278), and the Demo plan's `X-Api-Mock-Scenario-ID` scenarios, with synthetic payers, members, and claims)
|
|
59
|
+
- **Dexcom** on `http://localhost:4119` (OAuth 2.0 at `/v2/oauth2/login` and `/v2/oauth2/token`, and API v3 estimated glucose values every 5 minutes, events, devices, alerts, calibrations, and data range for synthetic G7 users)
|
|
60
|
+
- **Fitbit** on `http://localhost:4120` (OAuth 2.0 with a consent page, and the Web API for profile, daily activity and time series, heart rate with intraday data, sleep stages, and weight, with Fitbit's scopes, error envelope, and rate limit headers, for synthetic users)
|
|
61
|
+
- **Oura** on `http://localhost:4121` (OAuth 2.0 with a consent page, and API v2 `/v2/usercollection` documents: personal info, daily sleep, activity, readiness, and SpO2 with contributors and scores, sleep periods, and heart rate, with `next_token` paging and scope checks, for synthetic users)
|
|
62
|
+
- **Withings** on `http://localhost:4122` (OAuth 2.0 with a consent page and `requesttoken`, Measure `getmeas` for weight, blood pressure, heart pulse, and SpO2, `getactivity`, Sleep `getsummary`, `getdevice`, and Notify subscriptions that call your callback URL, with Withings' status codes in HTTP 200 responses, for synthetic users)
|
|
63
|
+
- **Terra** on `http://localhost:4123` (widget sessions and a connect page that link synthetic users to providers such as Fitbit, Oura, Withings, and Dexcom, normalized daily, sleep, activity, and body data returned inline or sent to your webhook, and `terra-signature` signed auth, deauth, and data events)
|
|
41
64
|
|
|
42
65
|
Stripe webhooks configured with a secret include a `Stripe-Signature` header signed over the timestamp and raw request body.
|
|
43
66
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -42,8 +42,9 @@ SOFTWARE.
|
|
|
42
42
|
|
|
43
43
|
The emuhealth synthetic data generator in
|
|
44
44
|
`packages/@emuhealth/fhir-core/src/generator.ts` uses a small number of codes from
|
|
45
|
-
the following code systems to make generated records realistic
|
|
46
|
-
|
|
45
|
+
the following code systems to make generated records realistic, and the RxNav
|
|
46
|
+
emulator in `packages/@emuhealth/rxnav` serves the same small RxNorm subset. No
|
|
47
|
+
full code system is redistributed.
|
|
47
48
|
|
|
48
49
|
### LOINC
|
|
49
50
|
|
|
@@ -60,8 +61,16 @@ Medicine (NLM), National Institutes of Health, Department of Health and Human
|
|
|
60
61
|
Services; NLM is not responsible for the product and does not endorse or
|
|
61
62
|
recommend this or any other product.
|
|
62
63
|
|
|
63
|
-
### ICD-10-CM and
|
|
64
|
+
### ICD-10-CM, ICD-10-PCS, CVX, and CDC Race and Ethnicity
|
|
64
65
|
|
|
65
|
-
ICD-10-CM codes are published by the National Center for Health Statistics
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
ICD-10-CM codes are published by the National Center for Health Statistics,
|
|
67
|
+
ICD-10-PCS codes by the Centers for Medicare & Medicaid Services, and CVX codes
|
|
68
|
+
and the Race and Ethnicity code set by the Centers for Disease Control and
|
|
69
|
+
Prevention. All are U.S. government works in the public domain.
|
|
70
|
+
|
|
71
|
+
### NCBI Gene
|
|
72
|
+
|
|
73
|
+
The E-utilities emulator in `packages/@emuhealth/ncbi` includes the ids, symbols,
|
|
74
|
+
names, and chromosomal locations of ten human genes as published by the National
|
|
75
|
+
Center for Biotechnology Information (NCBI), a U.S. government work in the public
|
|
76
|
+
domain. The gene summaries were written for emuhealth.
|
package/dist/api.d.ts
CHANGED
|
@@ -249,7 +249,7 @@ declare function defineConfig<Definitions extends Record<string, EmulatorDefinit
|
|
|
249
249
|
tokens?: EmulateConfig["tokens"];
|
|
250
250
|
}): typeof config;
|
|
251
251
|
|
|
252
|
-
declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir"];
|
|
252
|
+
declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir", "epic", "openfda", "rxnav", "clinicaltrials", "ncbi", "nppes", "benchling", "redcap", "cerner", "athena", "bluebutton", "cdshooks", "redox", "healthlake", "gcphealthcare", "azurehealth", "stedi", "availity", "dexcom", "fitbit", "oura", "withings", "terra"];
|
|
253
253
|
type HealthServiceName = (typeof HEALTH_SERVICE_NAME_LIST)[number];
|
|
254
254
|
|
|
255
255
|
declare const SERVICE_NAME_LIST: readonly ["vercel", "github", "google", "slack", "apple", "microsoft", "okta", "aws", "resend", "stripe", "mongoatlas", "clerk", "linear", "twilio"];
|