From e07ac7aaf4e5ec15fede02fca684a539b4a04dd5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:43:29 -0400 Subject: [PATCH] Deployment of 2024-09-12 (#15855) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix copy * update PDF * update timestamp * testing re enabling file download * add some logging to e2e test run * increase timeout * 15607 remove non catchall hl7 to fhir mappings (#15733) * test uploading trace * Generating a version.json file with the current short commit id and pu… (#15789) * Generating a version.json file with the current short commit id and putting it in with the Azure resources * Update up-receiver-migration-validate-test-data.md (#15604) Improvements to the Migration - Validate Test Data template: - Updated the default labels - Added space for STLT name - Added Slack post reminder in the Acceptance criteria * Oo/oslynn/15664/update rest transport for oracle rln etor nbs results (#15721) * Update REST Transport to allow ApiKey for Oracle-RLN to read from vault * Update REST Transport to allow ApiKey for Oracle-RLN to read from vault * Update REST Transport to allow ApiKey for Oracle-RLN to read from vault * Update REST Transport to allow Oracle-RLN to read apiKey from the vault * Update REST Transport to allow Oracle-RLN to read apiKey from the vault * Fixed RestTransport Integration Test * Wasn't working in Staging or on Arnej's machine, so changed to be generating the file in the aureFunctionsDir (#15802) * Engagement/jessica/15406 cli download report (#15675) * Created an API that downloads files from a specified environment and optionally (unless it is prod) removes PII * slightly cleaner tracing * console added * needed to ignore console * test sort method * simply skip test if mocked * invert truthiness * Bump actions/setup-java in /.github/actions/build-backend (#15817) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.2.2 to 4.3.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/6a0805fcefea3d4657a47ac4c165951e33482018...2dfa2011c5b2a0f1489bf9e433881c92c1631f88) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/setup-java from 4.2.2 to 4.3.0 (#15818) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.2.2 to 4.3.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/6a0805fcefea3d4657a47ac4c165951e33482018...2dfa2011c5b2a0f1489bf9e433881c92c1631f88) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/setup-java in /.github/actions/build-submissions (#15816) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.2.2 to 4.3.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/6a0805fcefea3d4657a47ac4c165951e33482018...2dfa2011c5b2a0f1489bf9e433881c92c1631f88) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump bridgecrewio/checkov-action from 12.2864.0 to 12.2867.0 (#15819) Bumps [bridgecrewio/checkov-action](https://github.com/bridgecrewio/checkov-action) from 12.2864.0 to 12.2867.0. - [Release notes](https://github.com/bridgecrewio/checkov-action/releases) - [Commits](https://github.com/bridgecrewio/checkov-action/compare/c9421864e014ef6b8acfa35d0bf3c7e52c13ab10...64296236994261f657e33a40ddbeb06a4b8e9747) --- updated-dependencies: - dependency-name: bridgecrewio/checkov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * update dates * 15262 - Receiver Status smoke tests (#15785) * 15262 - Fixed smoke tests * Created receiver-status-page-user-flow.spec.ts and made tests as sanity checks. Moved spec files into correct folders. * Fixed linting * Fixed path * Fixed path * Removed commented code * Fixed spacing issues * Fixed spacing issues * Fixed spacing issues * Fixed failing tests * Fixed failing tests * Added check if using mock * Added check if using mock * Add Receive step to UP (#15621) * add QueueMessage to shared module as interface * add azure table update to fhir converter * add tracking for no report * add BlobUtils * rename function to parsePrimeRouterQueueMessage * cast to specific queue message in up steps * remove tableAccess * fix fhirconverter tests * fix so headers is deserialized * add flyway script tup update report_file * update flyway script * update TopicConverter to accept null topic * move from convert step to receive function * inital setup for receive step * add event and fhirenginerunresult return * move all processing over to FHIRReceiver * working code * complete unit tests * complete integration tests * remove unnecessary test * fix SubmissionControllerTest * delete files * delete files * fix integration test * change to doReceive * remove unneeded mock * mock action logger error * lint format * print error in test * stacktrace to string * use stackTraceToString() * print stacktrace * pass metadata into report creation * review fixup * changed assert * update from review * fixup based on new plan to parse messages * fix some lint in QueueMessage * add fields to submission table and change name * replace SubmissionsEntity * update receiver integration tests * add elrReceiveQueueName * filterHeaders toMap and serialize message * fix sub controller int test * add azure event checks to integration tests * add documentation to MimeFormat.kt * create TableAccess and update tests * review fixup * remove space * test fixup * add azure event for action logger errors * trackExternalInputReport to blobinfo property * fix tests * update SubmissionTableService * no need to clear mocks * table client * fix integration tests! * gettableclient catch with retry * document * add reset and rename SubmissionEntity * multi threading test win * comment fixup * file from merge * move thread test over to different file * rename val and add asserts for report_file * remove piiRemoved.fhir * Engagement/nj prework (#15529) * Fixed New Jersey's suppress OBX-18 * Added NJ pre-work * Updated receiving facilities. * create documentation for hl7-fhir transforms (#15670) * create documentation for hl7-fhir transforms * update documentation for hl7-fhir transforms * update documentation formatting for hl7-fhir transforms * update documentation for null vs empty * Bump the react-router group across 1 directory with 2 updates (#15627) Bumps the react-router group with 2 updates in the /frontend-react directory: [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) and [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). Updates `react-router` from 6.25.1 to 6.26.1 - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router@6.26.1/packages/react-router) Updates `react-router-dom` from 6.25.1 to 6.26.1 - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.26.1/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router dependency-type: direct:production update-type: version-update:semver-minor dependency-group: react-router - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor dependency-group: react-router ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: etanb * Bump lint-staged from 15.2.9 to 15.2.10 in /frontend-react (#15780) Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.9 to 15.2.10. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.9...v15.2.10) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump the applicationinsights group in /frontend-react with 2 updates (#15778) Bumps the applicationinsights group in /frontend-react with 2 updates: [@microsoft/applicationinsights-react-js](https://github.com/microsoft/applicationinsights-react-js) and [@microsoft/applicationinsights-web](https://github.com/microsoft/ApplicationInsights-JS). Updates `@microsoft/applicationinsights-react-js` from 17.3.1 to 17.3.2 - [Release notes](https://github.com/microsoft/applicationinsights-react-js/releases) - [Changelog](https://github.com/microsoft/applicationinsights-react-js/blob/main/RELEASES.md) - [Commits](https://github.com/microsoft/applicationinsights-react-js/compare/17.3.1...17.3.2) Updates `@microsoft/applicationinsights-web` from 3.3.1 to 3.3.2 - [Release notes](https://github.com/microsoft/ApplicationInsights-JS/releases) - [Changelog](https://github.com/microsoft/ApplicationInsights-JS/blob/main/RELEASES.md) - [Commits](https://github.com/microsoft/ApplicationInsights-JS/commits) --- updated-dependencies: - dependency-name: "@microsoft/applicationinsights-react-js" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: applicationinsights - dependency-name: "@microsoft/applicationinsights-web" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: applicationinsights ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @types/sanitize-html from 2.11.0 to 2.13.0 in /frontend-react (#15683) Bumps [@types/sanitize-html](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/sanitize-html) from 2.11.0 to 2.13.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/sanitize-html) --- updated-dependencies: - dependency-name: "@types/sanitize-html" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump the testing-library group across 1 directory with 2 updates (#15739) Bumps the testing-library group with 2 updates in the /frontend-react directory: [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) and [@testing-library/react](https://github.com/testing-library/react-testing-library). Updates `@testing-library/jest-dom` from 6.4.8 to 6.5.0 - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.8...v6.5.0) Updates `@testing-library/react` from 16.0.0 to 16.0.1 - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/react-testing-library/compare/v16.0.0...v16.0.1) --- updated-dependencies: - dependency-name: "@testing-library/jest-dom" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: testing-library - dependency-name: "@testing-library/react" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: testing-library ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump axios from 1.7.5 to 1.7.7 in /frontend-react (#15741) Bumps [axios](https://github.com/axios/axios) from 1.7.5 to 1.7.7. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.5...v1.7.7) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump jsdom from 24.1.1 to 25.0.0 in /frontend-react (#15744) Bumps [jsdom](https://github.com/jsdom/jsdom) from 24.1.1 to 25.0.0. - [Release notes](https://github.com/jsdom/jsdom/releases) - [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md) - [Commits](https://github.com/jsdom/jsdom/compare/24.1.1...25.0.0) --- updated-dependencies: - dependency-name: jsdom dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @trussworks/react-uswds from 9.0.0 to 9.1.0 in /frontend-react (#15745) Bumps [@trussworks/react-uswds](https://github.com/trussworks/react-uswds) from 9.0.0 to 9.1.0. - [Release notes](https://github.com/trussworks/react-uswds/releases) - [Changelog](https://github.com/trussworks/react-uswds/blob/main/CHANGELOG.md) - [Commits](https://github.com/trussworks/react-uswds/compare/9.0.0...9.1.0) --- updated-dependencies: - dependency-name: "@trussworks/react-uswds" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump tsx from 4.17.0 to 4.19.0 in /frontend-react (#15746) Bumps [tsx](https://github.com/privatenumber/tsx) from 4.17.0 to 4.19.0. - [Release notes](https://github.com/privatenumber/tsx/releases) - [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs) - [Commits](https://github.com/privatenumber/tsx/compare/v4.17.0...v4.19.0) --- updated-dependencies: - dependency-name: tsx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Experience/15262/receiver status smoke (#15824) * 15262 - Fixed smoke tests * Created receiver-status-page-user-flow.spec.ts and made tests as sanity checks. Moved spec files into correct folders. * Fixed linting * Fixed path * Fixed path * Removed commented code * Fixed spacing issues * Fixed spacing issues * Fixed spacing issues * Fixed failing tests * Fixed failing tests * Added check if using mock * Added check if using mock * Fixing receiver name failing test * Skipped tests until filters have been fixed per #15737 * Bump @types/react from 18.3.3 to 18.3.5 in /frontend-react (#15747) Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.3 to 18.3.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump sass from 1.77.8 to 1.78.0 in /frontend-react (#15779) Bumps [sass](https://github.com/sass/dart-sass) from 1.77.8 to 1.78.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.77.8...1.78.0) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump postcss from 8.4.41 to 8.4.45 in /frontend-react (#15782) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.41 to 8.4.45. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.41...8.4.45) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump the vite group across 1 directory with 2 updates (#15799) Bumps the vite group with 2 updates in the /frontend-react directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and [vite-plugin-checker](https://github.com/fi3ework/vite-plugin-checker). Updates `vite` from 5.3.4 to 5.4.3 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.4.3/packages/vite) Updates `vite-plugin-checker` from 0.7.2 to 0.8.0 - [Release notes](https://github.com/fi3ework/vite-plugin-checker/releases) - [Changelog](https://github.com/fi3ework/vite-plugin-checker/blob/main/CHANGELOG.md) - [Commits](https://github.com/fi3ework/vite-plugin-checker/compare/vite-plugin-checker@0.7.2...vite-plugin-checker@0.8.0) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vite - dependency-name: vite-plugin-checker dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vite ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @playwright/test in /frontend-react in the playwright group (#15807) Bumps the playwright group in /frontend-react with 1 update: [@playwright/test](https://github.com/microsoft/playwright). Updates `@playwright/test` from 1.46.1 to 1.47.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.46.1...v1.47.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: playwright ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * disable smoke tests for receiver status temporarily (#15836) * Engagement/jessica/15541 cli add code to condition (#15803) * Added code to condition to the fhirdata cli tool * added schema that handles converting unwanted conditions to notes acccording to MARS (#15764) * Bump the react-query group across 1 directory with 2 updates (#15838) Bumps the react-query group with 2 updates in the /frontend-react directory: [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) and [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools). Updates `@tanstack/react-query` from 5.51.23 to 5.55.4 - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.55.4/packages/react-query) Updates `@tanstack/react-query-devtools` from 5.51.23 to 5.55.4 - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.55.4/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: react-query - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: react-query ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joseph Andersen <12385932+jpandersen87@users.noreply.github.com> * Bump express from 4.19.2 to 4.20.0 in /frontend-react (#15837) Bumps [express](https://github.com/expressjs/express) from 4.19.2 to 4.20.0. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0) --- updated-dependencies: - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @okta/okta-signin-widget in /frontend-react in the okta group (#15809) Bumps the okta group in /frontend-react with 1 update: [@okta/okta-signin-widget](https://github.com/okta/okta-signin-widget). Updates `@okta/okta-signin-widget` from 7.21.2 to 7.23.0 - [Release notes](https://github.com/okta/okta-signin-widget/releases) - [Changelog](https://github.com/okta/okta-signin-widget/blob/master/webpack.release.config.js) - [Commits](https://github.com/okta/okta-signin-widget/compare/okta-signin-widget-7.21.2...okta-signin-widget-7.23.0) --- updated-dependencies: - dependency-name: "@okta/okta-signin-widget" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: okta ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump the vitest group in /frontend-react with 3 updates (#15457) Bumps the vitest group in /frontend-react with 3 updates: [@vitest/coverage-istanbul](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-istanbul), [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest). Updates `@vitest/coverage-istanbul` from 2.0.4 to 2.0.5 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v2.0.5/packages/coverage-istanbul) Updates `@vitest/ui` from 2.0.4 to 2.0.5 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v2.0.5/packages/ui) Updates `vitest` from 2.0.4 to 2.0.5 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v2.0.5/packages/vitest) --- updated-dependencies: - dependency-name: "@vitest/coverage-istanbul" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest - dependency-name: "@vitest/ui" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest - dependency-name: vitest dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joseph Andersen <12385932+jpandersen87@users.noreply.github.com> * Bump bridgecrewio/checkov-action from 12.2867.0 to 12.2869.0 (#15845) Bumps [bridgecrewio/checkov-action](https://github.com/bridgecrewio/checkov-action) from 12.2867.0 to 12.2869.0. - [Release notes](https://github.com/bridgecrewio/checkov-action/releases) - [Commits](https://github.com/bridgecrewio/checkov-action/compare/64296236994261f657e33a40ddbeb06a4b8e9747...08a0f072354cdd9c009ce7c5c6174491834cec08) --- updated-dependencies: - dependency-name: bridgecrewio/checkov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Engagement/jessica/15405 cleanup deidentification enrichment (#15821) * Changed where the files used and produced by the remove pii test live as well as delete the output file after the test runs * Engagement/jessica/15540 fhirdata specify receiver (#15800) * Added the ability to specify the receiver settings for the fhirdata command * Made the receiver schema optional if the receiver is specified. * Checking the receiver for their format and using it. if applicable. Applying enrichment schemas across the board if a receiver is specified and has them * Engagement/jessica/15406 download report cleanup (#15847) * Capturing the report not existing error so that we can return a pretty one. Fixing a condition in the pii removal yml. Returning a prettier body for a report * Bump chromaui/action from 11.7.1 to 11.8.0 (#15848) Bumps [chromaui/action](https://github.com/chromaui/action) from 11.7.1 to 11.8.0. - [Release notes](https://github.com/chromaui/action/releases) - [Commits](https://github.com/chromaui/action/compare/b984808b772126a9f44b2b7737b131b68a2ede32...95f238da20415287a1a877fecec79290ad2a7e0c) --- updated-dependencies: - dependency-name: chromaui/action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * #15217 - Implement smoke test user flow for Last Mile Failures (#15843) * #15217 - Implement smoke test user flow for Last Mile Failures * Fixed linting issues * Fixed linting issues --------- Signed-off-by: dependabot[bot] Co-authored-by: etanb Co-authored-by: Jack Wang Co-authored-by: Angela DeGolier <39102333+adegolier@users.noreply.github.com> Co-authored-by: chris-kuryak <117934818+chris-kuryak@users.noreply.github.com> Co-authored-by: OTT SATHNGAM Co-authored-by: JessicaWNava <119880261+JessicaWNava@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: etanb Co-authored-by: Penelope Lischer <102491809+penny-lischer@users.noreply.github.com> Co-authored-by: Brick Green <86254221+brick-green@users.noreply.github.com> Co-authored-by: victor-chaparro <117938212+victor-chaparro@users.noreply.github.com> Co-authored-by: James Gilmore <109554461+GilmoreA6@users.noreply.github.com> Co-authored-by: Joseph Andersen <12385932+jpandersen87@users.noreply.github.com> Co-authored-by: lucero-v <165824244+lucero-v@users.noreply.github.com> --- .environment/gitleaks/gitleaks-config.toml | 2 + ...p-receiver-migration-validate-test-data.md | 17 +- .github/actions/build-backend/action.yml | 2 +- .github/actions/build-submissions/action.yml | 2 +- .github/workflows/build_hub.yml | 4 +- .github/workflows/frontend_chromatic_main.yml | 2 +- .github/workflows/frontend_ci.yml | 2 +- .github/workflows/snyk.yml | 2 +- .github/workflows/sonarcloud.yml | 2 +- .github/workflows/validate_terraform.yml | 2 +- .gitignore | 1 + .../authenticated/admin/receiver-status.ts | 196 +- .../pages/authenticated/last-mile-failures.ts | 59 + .../last-mile-failures-page.spec.ts | 6 +- .../{ => admin}/message-details-page.spec.ts | 16 +- .../message-id-search-page.spec.ts | 10 +- .../organization-settings-page.spec.ts | 60 +- .../admin/receiver-status-page.spec.ts | 208 +- .../daily-data-page-user-flow.spec.ts | 17 +- .../last-mile-failures-page-user-flow.spec.ts | 98 + .../receiver-status-page-user-flow.spec.ts | 339 ++ frontend-react/package.json | 50 +- .../ReportStream-Programmers-Guide-v4.5.pdf | Bin 495911 -> 0 bytes .../ReportStream-Programmers-Guide-v4.6.pdf | Bin 0 -> 356968 bytes .../ResponsesFromReportStream.mdx | 8 +- .../documentation/SamplePayloadsAndOutput.mdx | 2 +- .../getting-started/GettingStarted.mdx | 2 +- frontend-react/src/content/site.json | 2 +- frontend-react/yarn.lock | 792 +-- prime-router/build.gradle.kts | 18 +- prime-router/docs/api/reports.yml | 30 + .../Using-an-apple-silicon-mac.md | 4 +- .../fhir-to-hl7-transforms.md | 180 + .../adding-conformance-profile.md | 2 +- .../docs/universal-pipeline/README.md | 4 +- .../v251/hl7/datatypes/CE/CodeableConcept.yml | 112 - .../hl7/datatypes/CNE/CodeableConcept.yml | 175 - .../v251/hl7/datatypes/CNN/CNNExtension.yml | 70 - .../v251/hl7/datatypes/CNN/Practitioner.yml | 98 - .../v251/hl7/datatypes/CQ/Quantity.yml | 28 - .../v251/hl7/datatypes/CWE/Annotation.yml | 19 - .../hl7/datatypes/CWE/CodeableConcept.yml | 127 - .../v251/hl7/datatypes/CWE/Organization.yml | 60 - .../v251/hl7/datatypes/CX/CXExtension.yml | 46 - .../v251/hl7/datatypes/CX/Identifier.yml | 222 - .../hl7/datatypes/CX/RelatedPerson-mother.yml | 13 - .../v251/hl7/datatypes/DLD/Location.yml | 25 - .../v251/hl7/datatypes/DR/Period.yml | 51 - .../v251/hl7/datatypes/ED/Attachment.yml | 36 - .../v251/hl7/datatypes/ED/EDExtension.yml | 53 - .../EI/Identifier-DefaultAssigner.yml | 50 - .../datatypes/EI/Identifier-Organization.yml | 21 - .../v251/hl7/datatypes/EI/Identifier.yml | 92 - .../v251/hl7/datatypes/EI/Organization.yml | 47 - .../v251/hl7/datatypes/EIP/EI/ExtensionEI.yml | 60 - .../Identifier-FillerAssignedIdentifier.yml | 81 - .../Identifier-PlacerAssignedIdentifier.yml | 82 - .../FN/ExtensionHumanName-family.yml | 51 - .../HD/ExtensionAssigningAuthority.yml | 74 - .../v251/hl7/datatypes/HD/ExtensionHD.yml | 55 - .../HD/Identifier/IdentifierNamespaceId.yml | 15 - .../HD/Identifier/IdentifierUniversalId.yml | 19 - .../v251/hl7/datatypes/HD/Location.yml | 74 - .../v251/hl7/datatypes/HD/Organization.yml | 91 - .../v251/hl7/datatypes/ID/CodeableConcept.yml | 22 - .../ID/CodeableConceptUniversalid.yml | 15 - .../v251/hl7/datatypes/MOC/Extension.yml | 46 - .../v251/hl7/datatypes/MSG/Coding.yml | 24 - .../v251/hl7/datatypes/NDL/HD/Location.yml | 68 - .../v251/hl7/datatypes/NDL/IS/Location.yml | 66 - .../v251/hl7/datatypes/NDL/NDLExtension.yml | 22 - .../hl7/datatypes/NDL/PractitionerRole.yml | 147 - .../datatypes/v251/hl7/datatypes/NR/Range.yml | 17 - .../v251/hl7/datatypes/PL/Location.yml | 292 -- .../v251/hl7/datatypes/PL/LocationBranch1.yml | 182 - .../v251/hl7/datatypes/PL/LocationBranch2.yml | 151 - .../v251/hl7/datatypes/PL/LocationBranch3.yml | 110 - .../v251/hl7/datatypes/PL/LocationBranch4.yml | 82 - .../v251/hl7/datatypes/PL/LocationBranch5.yml | 46 - .../datatypes/v251/hl7/datatypes/PT/Meta.yml | 37 - .../v251/hl7/datatypes/SN/ExtensionSN.yml | 58 - .../v251/hl7/datatypes/SN/Quantity.yml | 74 - .../datatypes/v251/hl7/datatypes/SN/Range.yml | 106 - .../datatypes/v251/hl7/datatypes/SN/Ratio.yml | 106 - .../v251/hl7/datatypes/XAD/Address.yml | 135 - .../v251/hl7/datatypes/XAD/SADExtension.yml | 46 - .../v251/hl7/datatypes/XAD/XADExtension.yml | 104 - .../v251/hl7/datatypes/XCN/Practitioner.yml | 228 - .../v251/hl7/datatypes/XCN/XCNExtension.yml | 177 - .../v251/hl7/datatypes/XON/Organization.yml | 194 - .../v251/hl7/datatypes/XON/XONExtension.yml | 34 - .../v251/hl7/datatypes/XPN/HumanName.yml | 99 - .../v251/hl7/datatypes/XPN/XPNExtension.yml | 110 - .../v251/hl7/datatypes/XTN/ContactPoint.yml | 233 - .../v251/hl7/datatypes/XTN/XTNExtension.yml | 81 - .../metadata/HL7/v251-elr/config.properties | 5 - .../HL7/v251-elr/fhir/resourcemapping.yml | 23 - .../hl7/codesystem/CodingSystemMapping.yml | 4538 ----------------- .../hl7/codesystem/ExtensionUrlMapping.yml | 331 -- .../hl7/datatypes/CQ_ELR/Quantity.yml | 34 - .../hl7/datatypes/CWE_ELR/Annotation.yml | 19 - .../hl7/datatypes/CWE_ELR/CodeableConcept.yml | 192 - .../v251-elr/hl7/datatypes/CWE_ELR/Coding.yml | 33 - .../hl7/datatypes/CWE_ELR/Organization.yml | 60 - .../hl7/datatypes/CWE_ELR/Quantity.yml | 46 - .../hl7/datatypes/PL_ELR/Location.yml | 292 -- .../hl7/datatypes/PL_ELR/LocationBranch1.yml | 182 - .../hl7/datatypes/PL_ELR/LocationBranch2.yml | 151 - .../hl7/datatypes/PL_ELR/LocationBranch3.yml | 110 - .../hl7/datatypes/PL_ELR/LocationBranch4.yml | 82 - .../hl7/datatypes/PL_ELR/LocationBranch5.yml | 46 - .../hl7/datatypes/PRL_ELR/Extension.yml | 46 - .../hl7/datatypes/XPN_ELR/HumanName.yml | 102 - .../hl7/datatypes/XPN_ELR/XPNExtension.yml | 121 - .../ExtensionHierarchicDesignator.yml | 69 - .../v251-elr/hl7/extension/ExtensionMeta.yml | 74 - .../HL7/v251-elr/hl7/message/ORU_R01.yml | 99 - .../HL7/v251-elr/hl7/resource/Common.yml | 4 - .../hl7/segments/MSH/MSHExtension.yml | 119 - .../hl7/segments/MSH/MessageHeader.yml | 116 - .../hl7/segments/MSH/Provenance-Source.yml | 78 - .../MSH/Provenance-Transformation.yml | 46 - .../segments/MSH/ReportStreamOrganization.yml | 32 - .../segments/MSH/datatypes/HD/Destination.yml | 85 - .../hl7/segments/MSH/datatypes/HD/Source.yml | 139 - .../hl7/segments/MSH/segments/SFT/Source.yml | 77 - .../hl7/segments/NK1/NK1Extension.yml | 21 - .../hl7/segments/NK1/RelatedPerson.yml | 155 - .../v251-elr/hl7/segments/NTE/Annotation.yml | 44 - .../HL7/v251-elr/hl7/segments/OBX/Device.yml | 13 - .../hl7/segments/OBX/OBXExtension.yml | 115 - .../v251-elr/hl7/segments/OBX/Observation.yml | 503 -- .../hl7/segments/OBX/PractitionerRole.yml | 36 - .../hl7/segments/ORC/DiagnosticReport.yml | 264 - .../hl7/segments/ORC/OBRExtension.yml | 340 -- .../hl7/segments/ORC/ORCExtension.yml | 235 - .../hl7/segments/ORC/PractitionerRole.yml | 40 - .../hl7/segments/ORC/ServiceRequest.yml | 322 -- .../v251-elr/hl7/segments/ORC/Specimen.yml | 62 - .../hl7/segments/PID/PD1Extension.yml | 215 - .../hl7/segments/PID/PIDExtension.yml | 87 - .../HL7/v251-elr/hl7/segments/PID/Patient.yml | 577 --- .../hl7/segments/PID/Provenance-Patient.yml | 63 - .../v251-elr/hl7/segments/PV1/Encounter.yml | 509 -- .../hl7/segments/PV1/PV1Extension.yml | 190 - .../hl7/segments/PV1/PV2Extension.yml | 59 - .../HL7/v251-elr/hl7/segments/SFT/Device.yml | 110 - .../hl7/segments/SPM/EIP/Specimen.yml | 28 - .../hl7/segments/SPM/SPMExtension.yml | 237 - .../v251-elr/hl7/segments/SPM/Specimen.yml | 232 - prime-router/settings/STLTs/NJ/nj-doh.yml | 110 + .../settings/STLTs/Oracle/oracle-rln.yml | 22 +- .../src/main/kotlin/ActionMessages.kt | 1 + prime-router/src/main/kotlin/JOOQBindings.kt | 13 +- prime-router/src/main/kotlin/MimeFormat.kt | 50 +- prime-router/src/main/kotlin/Report.kt | 16 +- .../src/main/kotlin/SubmissionReceiver.kt | 40 +- .../src/main/kotlin/azure/ActionHistory.kt | 10 +- .../src/main/kotlin/azure/BlobAccess.kt | 43 +- prime-router/src/main/kotlin/azure/Event.kt | 10 +- .../src/main/kotlin/azure/ProcessFunction.kt | 2 +- .../src/main/kotlin/azure/QueueAccess.kt | 2 +- .../src/main/kotlin/azure/ReportFunction.kt | 74 + .../src/main/kotlin/azure/RequestFunction.kt | 2 + .../src/main/kotlin/azure/SendFunction.kt | 2 +- .../kotlin/azure/SubmissionTableService.kt | 104 + .../src/main/kotlin/azure/TableAccess.kt | 123 + .../kotlin/azure/ValidateSchemasFunctions.kt | 4 +- .../src/main/kotlin/azure/WorkflowEngine.kt | 6 +- .../kotlin/azure/batch/CovidBatchFunction.kt | 2 +- .../azure/batch/UniversalBatchFunction.kt | 2 +- .../event/ReportStreamEventBuilder.kt | 6 +- .../event/ReportStreamEventData.kt | 1 + .../event/ReportStreamEventService.kt | 48 +- .../main/kotlin/cli/ConvertFileCommands.kt | 2 + .../src/main/kotlin/cli/PIIRemovalCommands.kt | 51 +- .../main/kotlin/cli/ProcessFhirCommands.kt | 202 +- .../src/main/kotlin/cli/SettingCommands.kt | 16 +- .../src/main/kotlin/cli/tests/BasicTests.kt | 2 +- .../main/kotlin/cli/tests/RemovePIITest.kt | 15 +- .../cli/tests/SyncTranslationSchemasTest.kt | 6 +- .../src/main/kotlin/common/AzureHttpUtils.kt | 26 + .../src/main/kotlin/common/Environment.kt | 2 +- .../src/main/kotlin/common/piiremoved.json | 1930 +++++++ .../src/main/kotlin/common/piithere.json | 1930 +++++++ .../kotlin/fhirengine/azure/FHIRFunctions.kt | 42 +- .../kotlin/fhirengine/engine/FHIRConverter.kt | 35 +- .../engine/FHIRDestinationFilter.kt | 8 +- .../kotlin/fhirengine/engine/FHIREngine.kt | 9 + .../kotlin/fhirengine/engine/FHIRReceiver.kt | 378 ++ .../fhirengine/engine/FHIRReceiverFilter.kt | 6 +- .../fhirengine/engine/FHIRTranslator.kt | 45 +- .../kotlin/fhirengine/engine/MessageType.kt | 64 + ...eMessage.kt => PrimeRouterQueueMessage.kt} | 123 +- .../translation/hl7/FhirTransformer.kt | 2 +- .../main/kotlin/transport/RESTTransport.kt | 1 + .../clitests/compare-test-files}/fakePII.fhir | 0 .../common/remove-pii-address.yml | 3 +- .../common/remove-pii-name.yml | 3 +- .../common/remove-pii-telecom.yml | 2 +- .../common/suppress-device-information.yml | 27 + .../unwanted-conditions-to-notes.yml | 42 + .../STLTs/NJ/NJ-receiver-transform.yml | 59 + .../STLTs/Test/test-receiver-transform.yml | 15 + .../test/kotlin/SubmissionReceiverTests.kt | 2 +- .../test/kotlin/azure/ActionHistoryTests.kt | 20 +- .../src/test/kotlin/azure/BlobAccessTests.kt | 9 +- .../src/test/kotlin/azure/EventTest.kt | 18 +- .../test/kotlin/azure/ReportFunctionTests.kt | 137 + .../test/kotlin/azure/WorkflowEngineTests.kt | 4 +- .../common/UniversalPipelineTestUtils.kt | 16 + .../azure/FHIRConverterIntegrationTests.kt | 44 +- .../FHIRDestinationFilterIntegrationTests.kt | 11 +- .../FHIRReceiverFilterIntegrationTests.kt | 15 +- .../azure/FHIRReceiverIntegrationTests.kt | 872 ++++ .../azure/FHIRTranslatorIntegrationTests.kt | 5 +- .../SubmissionTableServiceIntegrationTests.kt | 107 + .../fhirengine/engine/FHIRReceiverTests.kt | 273 + .../fhirengine/engine/FhirConverterTests.kt | 82 +- .../engine/FhirDestinationFilterTests.kt | 8 +- .../engine/FhirReceiverFilterTests.kt | 29 +- .../fhirengine/engine/FhirTranslatorTests.kt | 6 +- .../v251/CNNtoPractitionerTests.kt | 17 - .../v251/CWEtoCodeableConceptTests.kt | 105 - .../v251/NDLtoPractitionerRoleTests.kt | 17 - .../v251/XADtoAddressTests.kt | 17 - .../v251/XTNToContactPointTests.kt | 17 - .../v251elr/CQELRtoQuantityTest.kt | 17 - .../v251elr/CWEELRtoCodeableConceptTests.kt | 160 - .../v251elr/ORUR01ELRFullTest.kt | 17 - .../v251elr/PRLELRtoServiceRequestTest.kt | 17 - .../v251elr/XPNELRtoHumanNameTests.kt | 17 - .../RESTTransportIntegrationTests.kt | 58 + .../mars_unwanted_condition_to_notes.fhir | 1 + .../mars_unwanted_condition_to_notes.hl7 | 15 + .../FHIR_to_HL7/sample_NJ_20240719-0001.fhir | 1 + .../FHIR_to_HL7/sample_NJ_20240719-0001.hl7 | 14 + .../v251-elr/cq/cq-to-quantity.fhir | 259 - .../v251-elr/cq/cq-to-quantity.hl7 | 4 - .../CWE-to-CodeableConcept.csv | 25 - .../cwe-10-test-value-cwe8.fhir | 143 - .../cwe-10-test-value-cwe8.hl7 | 2 - .../cwe-11-test-value-cwe9.fhir | 137 - .../cwe-11-test-value-cwe9.hl7 | 2 - .../cwe-12-test-value-cwe10.fhir | 143 - .../cwe-12-test-value-cwe10.hl7 | 2 - .../cwe-13-test-value-cwe11.fhir | 143 - .../cwe-13-test-value-cwe11.hl7 | 2 - .../cwe-14-test-value-cwe12.fhir | 146 - .../cwe-14-test-value-cwe12.hl7 | 2 - .../cwe-15-test-value-cwe13.fhir | 143 - .../cwe-15-test-value-cwe13.hl7 | 2 - .../cwe-16-test-value-cwe14.fhir | 140 - .../cwe-16-test-value-cwe14.hl7 | 2 - .../cwe-3-test-value-cwe1.fhir | 143 - .../cwe-3-test-value-cwe1.hl7 | 2 - .../cwe-4-test-value-cwe2.fhir | 143 - .../cwe-4-test-value-cwe2.hl7 | 2 - .../cwe-5-test-value-cwe3.fhir | 146 - .../cwe-5-test-value-cwe3.hl7 | 2 - .../cwe-6-test-value-cwe4.fhir | 143 - .../cwe-6-test-value-cwe4.hl7 | 2 - .../cwe-7-test-value-cwe5.fhir | 143 - .../cwe-7-test-value-cwe5.hl7 | 2 - .../cwe-8-test-value-cwe6.fhir | 146 - .../cwe-8-test-value-cwe6.hl7 | 2 - .../cwe-9-test-value-cwe7.fhir | 143 - .../cwe-9-test-value-cwe7.hl7 | 2 - .../v251-elr/orur01/oru_r01-full.fhir | 3206 ------------ .../v251-elr/orur01/oru_r01-full.hl7 | 23 - .../v251-elr/prl/prl-to-servicerequest.fhir | 234 - .../v251-elr/prl/prl-to-servicerequest.hl7 | 3 - ...anname-xpn12-13-populated-xpn10-empty.fhir | 254 - ...manname-xpn12-13-populated-xpn10-empty.hl7 | 3 - .../v251/cnn/cnn-to-Practitioner.csv | 14 - .../v251/cnn/cnn-to-Practitioner.fhir | 235 - .../v251/cnn/cnn-to-Practitioner.hl7 | 3 - .../cwe-10-test-value-cwe8.fhir | 150 - .../cwe-10-test-value-cwe8.hl7 | 2 - .../cwe-11-test-value-cwe9.fhir | 144 - .../cwe-11-test-value-cwe9.hl7 | 2 - .../cwe-3-test-value-cwe1.fhir | 150 - .../cwe-3-test-value-cwe1.hl7 | 2 - .../cwe-4-test-value-cwe2.fhir | 150 - .../cwe-4-test-value-cwe2.hl7 | 2 - .../cwe-5-test-value-cwe3.fhir | 153 - .../cwe-5-test-value-cwe3.hl7 | 2 - .../cwe-6-test-value-cwe4.fhir | 150 - .../cwe-6-test-value-cwe4.hl7 | 2 - .../cwe-7-test-value-cwe5.fhir | 150 - .../cwe-7-test-value-cwe5.hl7 | 2 - .../cwe-8-test-value-cwe6.fhir | 153 - .../cwe-8-test-value-cwe6.hl7 | 2 - .../cwe-9-test-value-cwe7.fhir | 150 - .../cwe-9-test-value-cwe7.hl7 | 2 - .../v251/ndl/NDL-to-PractitionerRole.csv | 42 - .../v251/ndl/NDL-to-PractitionerRole.fhir | 432 -- .../v251/ndl/NDL-to-PractitionerRole.hl7 | 3 - .../v251/xad/xad-to-address.fhir | 292 -- .../v251/xad/xad-to-address.hl7 | 3 - .../v251/xtn/xtn-to-contact-point.fhir | 279 - .../v251/xtn/xtn-to-contact-point.hl7 | 2 - .../datatests/translation-test-config.csv | 4 +- .../resources/settings/organizations.yml | 110 + prime-router/upload_swaggerui.sh | 2 +- .../prime/reportstream/shared/BlobUtils.kt | 29 + .../prime/reportstream/shared/QueueMessage.kt | 196 + .../prime/reportstream/shared/Submission.kt | 52 + ...vedEvent.kt => SubmissionReceivedEvent.kt} | 2 +- .../submissions/config/AzureConfig.kt | 12 +- .../controllers/SubmissionController.kt | 44 +- .../src/main/resources/application.properties | 4 +- .../SubmissionControllerIntegrationTest.kt | 35 +- .../test/kotlin/SubmissionControllerTest.kt | 30 +- 314 files changed, 9129 insertions(+), 27000 deletions(-) rename frontend-react/e2e/spec/all/authenticated/{ => admin}/last-mile-failures-page.spec.ts (95%) rename frontend-react/e2e/spec/all/authenticated/{ => admin}/message-details-page.spec.ts (93%) rename frontend-react/e2e/spec/all/authenticated/{ => admin}/message-id-search-page.spec.ts (94%) rename frontend-react/e2e/spec/all/authenticated/{ => admin}/organization-settings-page.spec.ts (81%) create mode 100644 frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts create mode 100644 frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts delete mode 100644 frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf create mode 100644 frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf create mode 100644 prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml delete mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/config.properties delete mode 100644 prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml delete mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml create mode 100644 prime-router/settings/STLTs/NJ/nj-doh.yml create mode 100644 prime-router/src/main/kotlin/azure/SubmissionTableService.kt create mode 100644 prime-router/src/main/kotlin/azure/TableAccess.kt create mode 100644 prime-router/src/main/kotlin/common/piiremoved.json create mode 100644 prime-router/src/main/kotlin/common/piithere.json create mode 100644 prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt create mode 100644 prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt rename prime-router/src/main/kotlin/fhirengine/engine/{QueueMessage.kt => PrimeRouterQueueMessage.kt} (51%) rename prime-router/src/main/{kotlin/cli/tests => resources/clitests/compare-test-files}/fakePII.fhir (100%) create mode 100644 prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml create mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml create mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml create mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml create mode 100644 prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt create mode 100644 prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt create mode 100644 prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt delete mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt create mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 create mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt create mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt create mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt rename submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/{ReportReceivedEvent.kt => SubmissionReceivedEvent.kt} (90%) diff --git a/.environment/gitleaks/gitleaks-config.toml b/.environment/gitleaks/gitleaks-config.toml index d95d877f4b8..da0f618980d 100644 --- a/.environment/gitleaks/gitleaks-config.toml +++ b/.environment/gitleaks/gitleaks-config.toml @@ -203,6 +203,8 @@ title = "PRIME ReportStream Gitleaks Configuration" 'authority\", \"extension\"', # FHIR extension URL also shows up in normal FHIR test data 'ApiKeyCredential\(\"flexion\"', 'authType: \"two-legged\"', + '\"apiKey\"', + 'api-key\" to \"oracle123\"', 'Authorization-Type: \"username/password\"', 'cdctiautomated_sa' ] diff --git a/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md b/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md index 3398b3d7086..f5c769eddcc 100644 --- a/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md +++ b/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md @@ -2,10 +2,11 @@ name: UP Migrating Receiver - Validate Test Data about: This is the fourth step in migrating a STLT to the UP title: "[name of STLT] - UP Migration - Validate Test Data" -labels: onboarding-ops, receiver +labels: onboarding-ops, receiver, engineering, needs-refinement assignees: '' --- +[STLT] = name of STLT ### User Story: As a developer, I want the [STLT] to validate test messages in staging, so that they can receive data in the format they expect. @@ -27,4 +28,16 @@ As a developer, I want the [STLT] to validate test messages in staging, so that ### Acceptance Criteria - [ ] Created and sent data using Simple Report -- [ ] Confirmed with STLT that data passes validation +- [ ] Confirmed with STLT that data passes validation +- [ ] When finished, tag Mikaelah, Chris, and Glenn in a slack post stating: +> [STLT] "Testing in Staging" is complete and will be moving on to "Monitor in Production" +> +> Connection Type: [REST, SFTP, SOAP, etc] +> +> Conditions tested: [List of Conditions] +> +> Positives set up to receive: [List of Conditions] +> +> Negatives set up to receive: [List of Conditions] +> +> Format receiving: [HL7 or FHIR] diff --git a/.github/actions/build-backend/action.yml b/.github/actions/build-backend/action.yml index 7f2f489d485..a2aa9e2200f 100644 --- a/.github/actions/build-backend/action.yml +++ b/.github/actions/build-backend/action.yml @@ -33,7 +33,7 @@ runs: sudo rm -rf /usr/local/lib/android - name: Set up JDK 17 - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 with: java-version: "17" distribution: "temurin" diff --git a/.github/actions/build-submissions/action.yml b/.github/actions/build-submissions/action.yml index f189ce652f6..15904917752 100644 --- a/.github/actions/build-submissions/action.yml +++ b/.github/actions/build-submissions/action.yml @@ -33,7 +33,7 @@ runs: sudo rm -rf /usr/local/lib/android - name: Set up JDK 17 - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/build_hub.yml b/.github/workflows/build_hub.yml index b8a33cfc331..3774600f35e 100644 --- a/.github/workflows/build_hub.yml +++ b/.github/workflows/build_hub.yml @@ -80,8 +80,8 @@ jobs: ./gradlew :prime-router:primeCLI --args='validate-yaml --type Organizations --file settings/organizations.yml --dir settings/STLTs' ./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToFhirTransform --dir src/main/resources/metadata/fhir_transforms' ./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToHL7Mapping --dir src/main/resources/metadata/hl7_mapping' - ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message' - ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message metadata/HL7/v251-elr/hl7/codesystem metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/v251-elr/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml metadata/HL7/v251-elr/hl7/resource/Common.yml' + ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message' + ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml' - name: Check for Uncommited Schema Docs id: check_changes diff --git a/.github/workflows/frontend_chromatic_main.yml b/.github/workflows/frontend_chromatic_main.yml index 6302c480225..b6d051404f6 100644 --- a/.github/workflows/frontend_chromatic_main.yml +++ b/.github/workflows/frontend_chromatic_main.yml @@ -32,7 +32,7 @@ jobs: run: yarn install --immutable - name: Run Chromatic - uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 + uses: chromaui/action@95f238da20415287a1a877fecec79290ad2a7e0c with: workingDir: frontend-react token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/frontend_ci.yml b/.github/workflows/frontend_ci.yml index dc05dc522e0..328ec171966 100644 --- a/.github/workflows/frontend_ci.yml +++ b/.github/workflows/frontend_ci.yml @@ -247,7 +247,7 @@ jobs: - name: Run Chromatic id: chromatic - uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 + uses: chromaui/action@95f238da20415287a1a877fecec79290ad2a7e0c with: workingDir: frontend-react token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/snyk.yml b/.github/workflows/snyk.yml index 555553c1bcd..064c19860e7 100644 --- a/.github/workflows/snyk.yml +++ b/.github/workflows/snyk.yml @@ -35,7 +35,7 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - uses: snyk/actions/setup@b98d498629f1c368650224d6d212bf7dfa89e4bf - name: Set up JDK 17 to generate backend coverage stats - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 29ae17f7afc..c6e54cb4ff9 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -62,7 +62,7 @@ jobs: - name: Set up JDK 17 if: steps.changed-files-yaml.outputs.backend_any_changed == 'true' || steps.branch-name.outputs.is_default == 'true' - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/validate_terraform.yml b/.github/workflows/validate_terraform.yml index 07e6b3068bd..310178f7101 100644 --- a/.github/workflows/validate_terraform.yml +++ b/.github/workflows/validate_terraform.yml @@ -48,7 +48,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - name: Run Checkov action - uses: bridgecrewio/checkov-action@c9421864e014ef6b8acfa35d0bf3c7e52c13ab10 + uses: bridgecrewio/checkov-action@08a0f072354cdd9c009ce7c5c6174491834cec08 with: directory: operations/app/terraform skip_check: CKV_AZURE_139,CKV_AZURE_137,CKV_AZURE_103,CKV_AZURE_104,CKV_AZURE_102,CKV_AZURE_130,CKV_AZURE_121,CKV_AZURE_67,CKV_AZURE_56,CKV_AZURE_17,CKV_AZURE_63,CKV_AZURE_18,CKV_AZURE_88,CKV_AZURE_65,CKV_AZURE_13,CKV_AZURE_66,CKV_AZURE_33,CKV_AZURE_35,CKV_AZURE_36,CKV_AZURE_98,CKV2_AZURE_1,CKV2_AZURE_15,CKV2_AZURE_21,CKV_AZURE_213,CKV_AZURE_59,CKV2_AZURE_33,CKV2_AZURE_32,CKV2_AZURE_28,CKV_AZURE_206,CKV_AZURE_42,CKV_AZURE_110,CKV_AZURE_109,CKV_AZURE_166,CKV2_AZURE_38,CKV2_AZURE_40,CKV2_AZURE_41,CKV_AZURE_235 diff --git a/.gitignore b/.gitignore index c361e158a19..71f2e182cf9 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ hs_err_pid* **/build/** **/log/** **/dependency-reduced-pom.xml +**/version.json # Frontend build output **/node_modules/** diff --git a/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts b/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts index a937092350c..2f0673d9892 100644 --- a/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts +++ b/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts @@ -1,11 +1,14 @@ import { expect, Locator } from "@playwright/test"; import { endOfDay, format, startOfDay, subDays } from "date-fns"; +import type { RSOrganizationSettings } from "../../../../src/config/endpoints/settings"; import { RSReceiverStatus } from "../../../../src/hooks/api/UseReceiversConnectionStatus/UseReceiversConnectionStatus"; import { createStatusTimePeriodData, SUCCESS_RATE_CLASSNAME_MAP, + SuccessRate, } from "../../../../src/pages/admin/receiver-dashboard/utils"; -import { DatePair, dateShortFormat } from "../../../../src/utils/DateTimeUtils"; +import { DatePair, dateShortFormat, durationFormatShort } from "../../../../src/utils/DateTimeUtils"; +import { formatDate } from "../../../../src/utils/misc"; import { createMockGetReceiverStatus } from "../../../mocks/receiverStatus"; import { BasePage, BasePageTestArgs, type ResponseHandlerEntry, type RouteHandlerFulfillEntry } from "../../BasePage"; @@ -310,8 +313,7 @@ export class AdminReceiverStatusPage extends BasePage { if (!isRequestAwaitedBool) return undefined as void; const req = await p; - const reqUrl = req ? new URL(req.url()) : undefined; - return reqUrl; + return req ? new URL(req.url()) : undefined; } async updateFilterDateRange(start: Date, end: Date, inputMethod: "textbox" | "calendar" = "textbox") { @@ -400,7 +402,7 @@ export class AdminReceiverStatusPage extends BasePage { return a[0] !== b[0] && a[1] !== b[1]; } - async testReceiverStatusDisplay() { + async testReceiverStatusDisplay(isSmoke = false) { const [startDate, endDate] = this.filterFormInputs.dateRange.value; const statusRows = this.receiverStatusRowsLocator; await expect(statusRows).toHaveCount(new Set(this.receiverStatus?.map((r) => r.receiverId)).size); @@ -444,6 +446,192 @@ export class AdminReceiverStatusPage extends BasePage { await expect(sliceEle).toHaveClass(expectedClass); } } + + if (isSmoke && i === 0) { + break; + } + } + + return true; + } + + async testReceiverName() { + const { organizationName, receiverName, successRate } = + this.timePeriodData[1]; + + const receiversStatusRows = this.receiverStatusRowsLocator; + const expectedReceiverStatusRow = receiversStatusRows.nthCustom(0); + const expectedReceiverStatusRowTitle = + this.getExpectedReceiverStatusRowTitle( + organizationName, + receiverName, + successRate, + ); + + await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length); + + await this.updateFilters({ + receiverName, + }); + + await expect(receiversStatusRows).toHaveCount(1); + await expect(expectedReceiverStatusRow).toBeVisible(); + await expect(expectedReceiverStatusRow.title).toHaveText(expectedReceiverStatusRowTitle); + + await this.resetFilters(); + + await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length); + + return true; + } + + async testReceiverMessage() { + // get first entry's result from all-fail receiver's first day -> third time period + const receiverI = 0; + const dayI = 0; + const timePeriodI = 2; + const entryI = 0; + const {days} = this.timePeriodData[receiverI]; + const {connectionCheckResult} = days[dayI].timePeriods[timePeriodI].entries[entryI]; + + const receiversStatusRows = this.receiverStatusRowsLocator; + + await this.updateFilters({ + resultMessage: connectionCheckResult, + }); + + for (const [i, {days}] of this.timePeriodData.entries()) { + const isRowExpected = i === receiverI; + const row = receiversStatusRows.nthCustom(i); + + for (const [i, {timePeriods}] of days.entries()) { + const isDayExpected = isRowExpected && i === dayI; + const rowDay = row.days.nthCustom(i); + + for (const [i] of timePeriods.entries()) { + const isTimePeriodExpected = isDayExpected && i === timePeriodI; + const expectedClass = !isTimePeriodExpected + ? /success-result-hidden/ + : /^((?!success-result-hidden).)*$/; + const rowDayTimePeriod = rowDay.timePeriods.nth(i); + + await expect(rowDayTimePeriod).toBeVisible(); + await expect(rowDayTimePeriod).toHaveClass(expectedClass); + } + } + } + + await this.resetFilters(); + + await this.testReceiverStatusDisplay(); + + return true; + } + + async testReceiverOrgLinks(isSmoke = false) { + const rows = this.receiverStatusRowsLocator; + + for (const [i, { organizationName }] of this.timePeriodData.entries()) { + const row = rows.nthCustom(i); + + const link = row.title.getByRole("link", { name: organizationName, exact: true }).first(); + const expectedUrl = this.getExpectedStatusOrganizationUrl(i); + await expect(link).toBeVisible(); + const p = this.page.route( + `/api/settings/organizations/${organizationName}`, + (route) => + route.fulfill({ + json: { + description: "fake", + filters: [], + name: organizationName, + jurisdiction: "fake", + version: 0, + createdAt: "", + createdBy: "", + } satisfies RSOrganizationSettings, + }), + ); + await link.click(); + await expect(this.page).toHaveURL(expectedUrl); + await p; + await this.page.goBack(); + + if (isSmoke && i === 0) { + break; + } + } + + return true; + } + + async testReceiverTimePeriodModals(isSmoke = false) { + const overlay = this.filterFormInputs.dateRange.modalOverlay; + + for (const [i, { days }] of this.timePeriodData.entries()) { + const { days: daysLoc } = this.receiverStatusRowsLocator.nthCustom(i); + + for (const [dayI, day] of days.entries()) { + for (const [i, { successRateType, entries }] of day.timePeriods.entries()) { + // only first entry in time period is currently displayed + const { + organizationName, + organizationId, + receiverId, + receiverName, + connectionCheckSuccessful, + connectionCheckStartedAt, + connectionCheckCompletedAt, + connectionCheckResult, + } = entries[0] ?? {}; + const sliceEle = daysLoc.nthCustom(dayI).timePeriods.nth(i); + + const isModalExpectedVisible = successRateType !== SuccessRate.UNDEFINED; + + await sliceEle.click({ force: true }); + await expect(overlay).toBeAttached({ + attached: isModalExpectedVisible, + }); + + if (isModalExpectedVisible) { + const expectedResultText = connectionCheckSuccessful ? "success" : "failed"; + const expectedModalText = `Results for connection verification checkOrg:${organizationName} (id: ${organizationId})Receiver:${receiverName} (id: ${receiverId})Result:${expectedResultText}Started At:${formatDate(connectionCheckStartedAt)}${connectionCheckStartedAt.toISOString()}Time to complete:${durationFormatShort(connectionCheckCompletedAt, connectionCheckStartedAt)}Result message:${connectionCheckResult}`; + + await expect(overlay).toBeVisible(); + await expect(overlay).toHaveText(expectedModalText); + + await overlay.press("Escape"); + } + } + } + + if (isSmoke && i === 0) { + break; + } + } + + return true; + } + + async testReceiverLinks(isSmoke = false) { + const rows = this.receiverStatusRowsLocator; + + for (const [i, { receiverName }] of this.timePeriodData.entries()) { + const row = rows.nthCustom(i); + + const link = row.title.getByRole("link", { + name: receiverName, + }); + await expect(link).toBeVisible(); + await link.click(); + await expect(this.page).toHaveURL( + this.getExpectedStatusReceiverUrl(i), + ); + await this.page.goBack(); + + if (isSmoke && i === 0) { + break; + } } return true; diff --git a/frontend-react/e2e/pages/authenticated/last-mile-failures.ts b/frontend-react/e2e/pages/authenticated/last-mile-failures.ts index ab8e38e5f92..bfc8c1bccea 100644 --- a/frontend-react/e2e/pages/authenticated/last-mile-failures.ts +++ b/frontend-react/e2e/pages/authenticated/last-mile-failures.ts @@ -1,3 +1,6 @@ +import { expect, Locator } from "@playwright/test"; +import { startOfDay, subDays } from "date-fns"; +import { tableRows } from "../../helpers/utils"; import { MOCK_GET_RESEND, MOCK_GET_SEND_FAILURES } from "../../mocks/lastMilefailures"; import { BasePage, BasePageTestArgs, RouteHandlerFulfillEntry } from "../BasePage"; @@ -6,6 +9,16 @@ export class LastMileFailuresPage extends BasePage { static readonly API_GET_SEND_FAILURES = "/api/adm/getsendfailures?days_to_show=15"; static readonly API_GET_RESEND = "/api/adm/getresend?days_to_show=15"; + readonly filterFormInputs: { + filter: { + input: Locator; + }, + daysToShow: { + input: Locator; + button: Locator + } + }; + constructor(testArgs: BasePageTestArgs) { super( { @@ -19,8 +32,20 @@ export class LastMileFailuresPage extends BasePage { ); this.addMockRouteHandlers([this.createMockGetSendFailuresHandler(), this.createMockGetResendHandler()]); + this.filterFormInputs = { + filter: { + input: this.page.locator("#input_filter") + }, + daysToShow: { + input: this.page.locator("#days_to_show"), + button: this.page.getByRole("button", { + name: "Refresh", + }), + } + } } + createMockGetSendFailuresHandler(): RouteHandlerFulfillEntry { return [ LastMileFailuresPage.API_GET_SEND_FAILURES, @@ -42,4 +67,38 @@ export class LastMileFailuresPage extends BasePage { }, ]; } + + async tableColumnDateTimeInRange( + daysToShow: number, + ) { + let datesInRange = true; + const rowCount = await tableRows(this.page).count(); + const now = new Date(); + const targetFrom = startOfDay(subDays(now, daysToShow)); + + for (let i = 0; i < rowCount; i++) { + const columnValue = await tableRows(this.page).nth(i).locator("td").nth(0).innerText(); + const columnDate = new Date(columnValue); + + if (!(columnDate >= targetFrom)) { + datesInRange = false; + break; + } + } + return datesInRange; + } + + async testReportId( + reportId: string, + ) { + const rowCount = await tableRows(this.page).count(); + + for (let i = 0; i < rowCount; i++) { + const columnValue = await tableRows(this.page).nth(i).locator("td").nth(1).innerText(); + + expect(reportId).toEqual(columnValue); + } + + return true; + } } diff --git a/frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts similarity index 95% rename from frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts index df8503376bb..ba01d3812c2 100644 --- a/frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts @@ -1,6 +1,6 @@ -import { tableRows } from "../../../helpers/utils"; -import { LastMileFailuresPage } from "../../../pages/authenticated/last-mile-failures"; -import { test as baseTest, expect } from "../../../test"; +import { tableRows } from "../../../../helpers/utils"; +import { LastMileFailuresPage } from "../../../../pages/authenticated/last-mile-failures"; +import { test as baseTest, expect } from "../../../../test"; export interface LastMileFailuresPageFixtures { lastMileFailuresPage: LastMileFailuresPage; diff --git a/frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts similarity index 93% rename from frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts index 916b14b1096..2a101640d8c 100644 --- a/frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts @@ -1,12 +1,12 @@ import fs from "node:fs"; -import { parseFileLocation } from "../../../../src/utils/misc"; -import { tableRows } from "../../../helpers/utils"; -import { MOCK_GET_MESSAGE } from "../../../mocks/messages"; -import { MessageDetailsPage } from "../../../pages/authenticated/message-details"; -import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search"; -import { mockGetHistoryReportResponse } from "../../../pages/authenticated/report-details"; - -import { test as baseTest, expect } from "../../../test"; +import { parseFileLocation } from "../../../../../src/utils/misc"; +import { tableRows } from "../../../../helpers/utils"; +import { MOCK_GET_MESSAGE } from "../../../../mocks/messages"; +import { MessageDetailsPage } from "../../../../pages/authenticated/message-details"; +import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search"; +import { mockGetHistoryReportResponse } from "../../../../pages/authenticated/report-details"; + +import { test as baseTest, expect } from "../../../../test"; export interface MessageDetailsPageFixtures { messageDetailsPage: MessageDetailsPage; diff --git a/frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts similarity index 94% rename from frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts index 9de8e807739..2ac84973da4 100644 --- a/frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts @@ -1,9 +1,9 @@ -import { noData, tableRows } from "../../../helpers/utils"; -import { MOCK_GET_MESSAGES } from "../../../mocks/messages"; -import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search"; -import { openReportIdDetailPage } from "../../../pages/authenticated/submission-history"; +import { noData, tableRows } from "../../../../helpers/utils"; +import { MOCK_GET_MESSAGES } from "../../../../mocks/messages"; +import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search"; +import { openReportIdDetailPage } from "../../../../pages/authenticated/submission-history"; -import { test as baseTest, expect } from "../../../test"; +import { test as baseTest, expect } from "../../../../test"; export interface MessageIDSearchPageFixtures { messageIDSearchPage: MessageIDSearchPage; diff --git a/frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts similarity index 81% rename from frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts index 83ce97b9e2a..ee9773e664c 100644 --- a/frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts @@ -1,10 +1,10 @@ -import { expect } from "@playwright/test"; -import { readFileSync } from "node:fs"; -import { join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { MOCK_GET_ORGANIZATION_SETTINGS_LIST } from "../../../mocks/organizations"; -import { OrganizationPage } from "../../../pages/authenticated/organization"; -import { test as baseTest } from "../../../test"; +import {expect} from "@playwright/test"; +import {readFileSync} from "node:fs"; +import {join} from "node:path"; +import {fileURLToPath} from "node:url"; +import {MOCK_GET_ORGANIZATION_SETTINGS_LIST} from "../../../../mocks/organizations"; +import {OrganizationPage} from "../../../../pages/authenticated/organization"; +import {test as baseTest} from "../../../../test"; const __dirname = fileURLToPath(import.meta.url); @@ -43,35 +43,35 @@ const test = baseTest.extend({ test.describe("Admin Organization Settings Page", () => { test.describe("not authenticated", () => { - test("redirects to login", async ({ organizationPage }) => { + test("redirects to login", async ({organizationPage}) => { await expect(organizationPage.page).toHaveURL("/login"); }); }); test.describe("authenticated receiver", () => { - test.use({ storageState: "e2e/.auth/receiver.json" }); - test("returns Page Not Found", async ({ organizationPage }) => { + test.use({storageState: "e2e/.auth/receiver.json"}); + test("returns Page Not Found", async ({organizationPage}) => { await expect(organizationPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated sender", () => { - test.use({ storageState: "e2e/.auth/sender.json" }); - test("returns Page Not Found", async ({ organizationPage }) => { + test.use({storageState: "e2e/.auth/sender.json"}); + test("returns Page Not Found", async ({organizationPage}) => { await expect(organizationPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated admin", () => { - test.use({ storageState: "e2e/.auth/admin.json" }); + test.use({storageState: "e2e/.auth/admin.json"}); test.describe("Header", () => { - test("has correct title + heading", async ({ organizationPage }) => { + test("has correct title + heading", async ({organizationPage}) => { await organizationPage.testHeader(); }); }); - test("If there is an error, the error is shown on the page", async ({ organizationPage }) => { + test("If there is an error, the error is shown on the page", async ({organizationPage}) => { organizationPage.mockError = true; await organizationPage.reload(); await expect(organizationPage.page.getByText("there was an error")).toBeVisible(); @@ -79,8 +79,8 @@ test.describe("Admin Organization Settings Page", () => { test.describe("When there is no error", () => { test("nav contains the 'Admin tools' dropdown with 'Organization Settings' option", async ({ - organizationPage, - }) => { + organizationPage, + }) => { const navItems = organizationPage.page.locator(".usa-nav li"); await expect(navItems).toContainText(["Admin tools"]); @@ -96,12 +96,12 @@ test.describe("Admin Organization Settings Page", () => { await expect(organizationPage.page).toHaveURL("/admin/settings"); }); - test("Has correct title", async ({ organizationPage }) => { + test("Has correct title", async ({organizationPage}) => { await expect(organizationPage.page).toHaveURL(/settings/); await expect(organizationPage.page).toHaveTitle(/Admin-Organizations/); }); - test("Displays data", async ({ organizationPage }) => { + test("Displays data", async ({organizationPage}) => { // Heading with result length await expect( organizationPage.page.getByRole("heading", { @@ -122,12 +122,12 @@ test.describe("Admin Organization Settings Page", () => { const cols = await row.getByRole("cell").allTextContents(); expect(cols).toHaveLength(colHeaders.length); - const { description, jurisdiction, name, stateCode } = + const {description, jurisdiction, name, stateCode} = i === 0 ? MOCK_GET_ORGANIZATION_SETTINGS_LIST[0] : (MOCK_GET_ORGANIZATION_SETTINGS_LIST.find((i) => i.name === cols[0]) ?? { - name: "INVALID", - }); + name: "INVALID", + }); // if first row, we expect column headers. else, the data row matching id (name) // SetEdit is text of buttons in button column const expectedColContents = @@ -141,7 +141,7 @@ test.describe("Admin Organization Settings Page", () => { } }); - test("Create new organization navigation works", async ({ organizationPage }) => { + test("Create new organization navigation works", async ({organizationPage}) => { const link = organizationPage.page.getByRole("link", { name: "Create New Organization", }); @@ -155,7 +155,7 @@ test.describe("Admin Organization Settings Page", () => { expect(organizationPage.page.url()).toContain(expectedUrl); }); - test("Save CSV button downloads a file", async ({ organizationPage }) => { + test("Save CSV button downloads a file", async ({organizationPage}) => { const downloadProm = organizationPage.page.waitForEvent("download"); const saveButton = organizationPage.page.getByRole("button", { name: "Save List to CSV", @@ -165,7 +165,7 @@ test.describe("Admin Organization Settings Page", () => { await saveButton.click(); const download = await downloadProm; - const expectedFile = readFileSync(join(__dirname, "../../../../mocks/prime-orgs.csv"), { + const expectedFile = readFileSync(join(__dirname, "../../../../../mocks/prime-orgs.csv"), { encoding: "utf-8", }); const stream = await download.createReadStream(); @@ -174,9 +174,9 @@ test.describe("Admin Organization Settings Page", () => { expect(download.suggestedFilename()).toBe("prime-orgs.csv"); }); - test("Filtering works", async ({ organizationPage }) => { + test("Filtering works", async ({organizationPage}) => { const table = organizationPage.page.getByRole("table"); - const { description, name, jurisdiction, stateCode } = MOCK_GET_ORGANIZATION_SETTINGS_LIST[2]; + const {description, name, jurisdiction, stateCode} = MOCK_GET_ORGANIZATION_SETTINGS_LIST[2]; const filterBox = organizationPage.page.getByRole("textbox", { name: "Filter:", }); @@ -201,7 +201,7 @@ test.describe("Admin Organization Settings Page", () => { } }); - test('Clicking "Set" updates link label', async ({ organizationPage }) => { + test('Clicking "Set" updates link label', async ({organizationPage}) => { const firstDataRow = organizationPage.page.getByRole("table").getByRole("row").nth(1); const firstDataRowName = (await firstDataRow.getByRole("cell").nth(0).textContent()) ?? "INVALID"; const setButton = firstDataRow.getByRole("button", { @@ -218,7 +218,7 @@ test.describe("Admin Organization Settings Page", () => { await expect(orgLink).toHaveAttribute("href", "/admin/settings"); }); - test("Edit navigation works", async ({ organizationPage }) => { + test("Edit navigation works", async ({organizationPage}) => { const firstDataRow = organizationPage.page.getByRole("table").getByRole("row").nth(1); const firstDataRowName = await firstDataRow.getByRole("cell").nth(0).textContent(); const expectedUrl = `/admin/orgsettings/org/${firstDataRowName}`; @@ -237,7 +237,7 @@ test.describe("Admin Organization Settings Page", () => { }); test.describe("Footer", () => { - test("has footer and explicit scroll to footer and scroll to top", async ({ organizationPage }) => { + test("has footer and explicit scroll to footer and scroll to top", async ({organizationPage}) => { await organizationPage.testFooter(); }); }); diff --git a/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts index f8f92d2615b..edba29a56c0 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts @@ -1,10 +1,6 @@ -import { addDays, endOfDay, startOfDay, subDays } from "date-fns"; -import type { RSOrganizationSettings } from "../../../../../src/config/endpoints/settings"; -import { SuccessRate } from "../../../../../src/pages/admin/receiver-dashboard/utils"; -import { durationFormatShort } from "../../../../../src/utils/DateTimeUtils"; -import { formatDate } from "../../../../../src/utils/misc"; -import { AdminReceiverStatusPage } from "../../../../pages/authenticated/admin/receiver-status"; -import { test as baseTest, expect, logins } from "../../../../test"; +import {addDays, endOfDay, startOfDay, subDays} from "date-fns"; +import {AdminReceiverStatusPage} from "../../../../pages/authenticated/admin/receiver-status"; +import {test as baseTest, expect, logins} from "../../../../test"; export interface AdminReceiverStatusPageFixtures { adminReceiverStatusPage: AdminReceiverStatusPage; @@ -42,29 +38,29 @@ const test = baseTest.extend({ test.describe("Admin Receiver Status Page", () => { test.describe("not authenticated", () => { - test("redirects to login", async ({ adminReceiverStatusPage }) => { + test("redirects to login", async ({adminReceiverStatusPage}) => { await expect(adminReceiverStatusPage.page).toHaveURL("/login"); }); }); test.describe("authenticated receiver", () => { - test.use({ storageState: logins.receiver.path }); - test("returns Page Not Found", async ({ adminReceiverStatusPage }) => { + test.use({storageState: logins.receiver.path}); + test("returns Page Not Found", async ({adminReceiverStatusPage}) => { await expect(adminReceiverStatusPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated sender", () => { - test.use({ storageState: logins.sender.path }); - test("returns Page Not Found", async ({ adminReceiverStatusPage }) => { + test.use({storageState: logins.sender.path}); + test("returns Page Not Found", async ({adminReceiverStatusPage}) => { await expect(adminReceiverStatusPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated admin", () => { - test.use({ storageState: logins.admin.path }); + test.use({storageState: logins.admin.path}); - test("If there is an error, the error is shown on the page", async ({ adminReceiverStatusPage }) => { + test("If there is an error, the error is shown on the page", async ({adminReceiverStatusPage}) => { adminReceiverStatusPage.mockError = true; await adminReceiverStatusPage.reload(); @@ -74,10 +70,7 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Header", () => { test( "has correct title + heading", - { - tag: "@smoke", - }, - async ({ adminReceiverStatusPage }) => { + async ({adminReceiverStatusPage}) => { await adminReceiverStatusPage.testHeader(); }, ); @@ -87,12 +80,9 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Displays correctly", () => { test.describe( "filters", - { - tag: "@smoke", - }, () => { - test("date range", async ({ adminReceiverStatusPage }) => { - const { button, label, modalOverlay, valueDisplay } = + test("date range", async ({adminReceiverStatusPage}) => { + const {button, label, modalOverlay, valueDisplay} = adminReceiverStatusPage.filterFormInputs.dateRange; await expect(label).toBeVisible(); await expect(button).toBeVisible(); @@ -100,8 +90,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(modalOverlay).toBeHidden(); }); - test("receiver name", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + test("receiver name", async ({adminReceiverStatusPage}) => { + const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = adminReceiverStatusPage.filterFormInputs.receiverName; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -113,8 +103,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(tooltip).toHaveText(expectedTooltipText); }); - test("results message", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + test("results message", async ({adminReceiverStatusPage}) => { + const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = adminReceiverStatusPage.filterFormInputs.resultMessage; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -126,8 +116,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(tooltip).toHaveText(expectedTooltipText); }); - test("success type", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + test("success type", async ({adminReceiverStatusPage}) => { + const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = adminReceiverStatusPage.filterFormInputs.successType; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -143,7 +133,7 @@ test.describe("Admin Receiver Status Page", () => { // Failures here indicate potential misalignment of playwright/browser timezone test.describe("receiver statuses", () => { - test("time periods", async ({ adminReceiverStatusPage }) => { + test("time periods", async ({adminReceiverStatusPage}) => { const result = await adminReceiverStatusPage.testReceiverStatusDisplay(); expect(result).toBe(true); }); @@ -152,8 +142,8 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Footer", () => { test("has footer and explicit scroll to footer and scroll to top", async ({ - adminReceiverStatusPage, - }) => { + adminReceiverStatusPage, + }) => { await adminReceiverStatusPage.testFooter(); }); }); @@ -162,12 +152,9 @@ test.describe("Admin Receiver Status Page", () => { test.describe("filters", () => { test.describe( "date range", - { - tag: "@smoke", - }, () => { - test("works through calendar", async ({ adminReceiverStatusPage }) => { - const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; + test("works through calendar", async ({adminReceiverStatusPage}) => { + const {valueDisplay} = adminReceiverStatusPage.filterFormInputs.dateRange; const now = new Date(); const targetFrom = startOfDay(subDays(now, 3)); const targetTo = addDays(endOfDay(now), 1); @@ -188,8 +175,8 @@ test.describe("Admin Receiver Status Page", () => { }); }); - test("works through textboxes", async ({ adminReceiverStatusPage }) => { - const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; + test("works through textboxes", async ({adminReceiverStatusPage}) => { + const {valueDisplay} = adminReceiverStatusPage.filterFormInputs.dateRange; await expect(adminReceiverStatusPage.receiverStatusRowsLocator).not.toHaveCount(0); const now = new Date(); const targetFrom = startOfDay(subDays(now, 3)); @@ -242,48 +229,12 @@ test.describe("Admin Receiver Status Page", () => { await expect(receiversStatusRows).toHaveCount(adminReceiverStatusPage.timePeriodData.length); }); - test("result message", async ({ adminReceiverStatusPage }) => { - // get first entry's result from all-fail receiver's first day -> third time period - const receiverI = 0; - const dayI = 0; - const timePeriodI = 2; - const entryI = 0; - const { days } = adminReceiverStatusPage.timePeriodData[receiverI]; - const { connectionCheckResult } = days[dayI].timePeriods[timePeriodI].entries[entryI]; - - const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; - - await adminReceiverStatusPage.updateFilters({ - resultMessage: connectionCheckResult, - }); - - for (const [i, { days }] of adminReceiverStatusPage.timePeriodData.entries()) { - const isRowExpected = i === receiverI; - const row = receiversStatusRows.nthCustom(i); - - for (const [i, { timePeriods }] of days.entries()) { - const isDayExpected = isRowExpected && i === dayI; - const rowDay = row.days.nthCustom(i); - - for (const [i] of timePeriods.entries()) { - const isTimePeriodExpected = isDayExpected && i === timePeriodI; - const expectedClass = !isTimePeriodExpected - ? /success-result-hidden/ - : /^((?!success-result-hidden).)*$/; - const rowDayTimePeriod = rowDay.timePeriods.nth(i); - - await expect(rowDayTimePeriod).toBeVisible(); - await expect(rowDayTimePeriod).toHaveClass(expectedClass); - } - } - } - - await adminReceiverStatusPage.resetFilters(); - - await adminReceiverStatusPage.testReceiverStatusDisplay(); + test("result message", async ({adminReceiverStatusPage}) => { + const result = await adminReceiverStatusPage.testReceiverMessage(); + expect(result).toBe(true); }); - test("success type", async ({ adminReceiverStatusPage }) => { + test("success type", async ({adminReceiverStatusPage}) => { const [failRow, , mixedRow] = adminReceiverStatusPage.timePeriodData; const failRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( failRow.organizationName, @@ -321,7 +272,7 @@ test.describe("Admin Receiver Status Page", () => { test.describe("receiver statuses", () => { test.describe("date range length changes", () => { - test("increases", async ({ adminReceiverStatusPage }) => { + test("increases", async ({adminReceiverStatusPage}) => { const rows = adminReceiverStatusPage.receiverStatusRowsLocator; const days = rows.nthCustom(0).days; await expect(rows).not.toHaveCount(0); @@ -336,7 +287,7 @@ test.describe("Admin Receiver Status Page", () => { await expect(days).toHaveCount(4); }); - test("decreases", async ({ adminReceiverStatusPage }) => { + test("decreases", async ({adminReceiverStatusPage}) => { const rows = adminReceiverStatusPage.receiverStatusRowsLocator; const days = rows.nthCustom(0).days; await expect(rows).not.toHaveCount(0); @@ -352,96 +303,19 @@ test.describe("Admin Receiver Status Page", () => { }); }); - test("time period modals", async ({ adminReceiverStatusPage }) => { - const overlay = adminReceiverStatusPage.filterFormInputs.dateRange.modalOverlay; - for (const [i, { days }] of adminReceiverStatusPage.timePeriodData.entries()) { - const { days: daysLoc } = adminReceiverStatusPage.receiverStatusRowsLocator.nthCustom(i); - - for (const [dayI, day] of days.entries()) { - for (const [i, { successRateType, entries }] of day.timePeriods.entries()) { - // only first entry in time period is currently displayed - const { - organizationName, - organizationId, - receiverId, - receiverName, - connectionCheckSuccessful, - connectionCheckStartedAt, - connectionCheckCompletedAt, - connectionCheckResult, - } = entries[0] ?? {}; - const sliceEle = daysLoc.nthCustom(dayI).timePeriods.nth(i); - - const isModalExpectedVisible = successRateType !== SuccessRate.UNDEFINED; - - await sliceEle.click({ force: true }); - await expect(overlay).toBeAttached({ - attached: isModalExpectedVisible, - }); - - if (isModalExpectedVisible) { - const expectedResultText = connectionCheckSuccessful ? "success" : "failed"; - const expectedModalText = `Results for connection verification checkOrg:${organizationName} (id: ${organizationId})Receiver:${receiverName} (id: ${receiverId})Result:${expectedResultText}Started At:${formatDate(connectionCheckStartedAt)}${connectionCheckStartedAt.toISOString()}Time to complete:${durationFormatShort(connectionCheckCompletedAt, connectionCheckStartedAt)}Result message:${connectionCheckResult}`; - - await expect(overlay).toBeVisible(); - await expect(overlay).toHaveText(expectedModalText); - - await overlay.press("Escape"); - } - } - } - } + test("time period modals", async ({adminReceiverStatusPage}) => { + const result = await adminReceiverStatusPage.testReceiverTimePeriodModals(); + expect(result).toBe(true); }); - test("receiver org links", async ({ adminReceiverStatusPage }) => { - const rows = adminReceiverStatusPage.receiverStatusRowsLocator; - - for (const [i, { organizationName }] of adminReceiverStatusPage.timePeriodData.entries()) { - const row = rows.nthCustom(i); - - const link = row.title.getByRole("link", { - name: organizationName, - }); - const expectedUrl = adminReceiverStatusPage.getExpectedStatusOrganizationUrl(i); - await expect(link).toBeVisible(); - const p = adminReceiverStatusPage.page.route( - `api/settings/organizations/${organizationName}`, - (route) => - route.fulfill({ - json: { - description: "fake", - filters: [], - name: organizationName, - jurisdiction: "fake", - version: 0, - createdAt: "", - createdBy: "", - } satisfies RSOrganizationSettings, - }), - ); - await link.click(); - await expect(adminReceiverStatusPage.page).toHaveURL(expectedUrl); - await p; - await adminReceiverStatusPage.page.goBack(); - } + test("receiver org links", async ({adminReceiverStatusPage}) => { + const result = await adminReceiverStatusPage.testReceiverOrgLinks(); + expect(result).toBe(true); }); - test("receiver links", async ({ adminReceiverStatusPage }) => { - const rows = adminReceiverStatusPage.receiverStatusRowsLocator; - - for (const [i, { receiverName }] of adminReceiverStatusPage.timePeriodData.entries()) { - const row = rows.nthCustom(i); - - const link = row.title.getByRole("link", { - name: receiverName, - }); - await expect(link).toBeVisible(); - await link.click(); - await expect(adminReceiverStatusPage.page).toHaveURL( - adminReceiverStatusPage.getExpectedStatusReceiverUrl(i), - ); - await adminReceiverStatusPage.page.goBack(); - } + test("receiver links", async ({adminReceiverStatusPage}) => { + const result = await adminReceiverStatusPage.testReceiverLinks(); + expect(result).toBe(true); }); }); }); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts index 5950c5a4314..c39aaff902e 100644 --- a/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts +++ b/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts @@ -74,7 +74,8 @@ const SMOKE_RECEIVERS = [TEST_ORG_UP_RECEIVER_UP, TEST_ORG_CP_RECEIVER_CP, TEST_ test.describe( "Daily Data page - user flow smoke tests", { - tag: "@smoke", + // TODO: Investigate Daily Data page - user flow smoke tests › admin user › ignore org - FULL_ELR receiver › filter › on 'Apply' › clears 'Report ID' + //tag: "@smoke", }, () => { test.describe("admin user", () => { @@ -206,7 +207,7 @@ test.describe( ); }); - test("clears 'Report ID'", async ({ dailyDataPage }) => { + test.skip("clears 'Report ID'", async ({ dailyDataPage }) => { // Search by Report ID const reportId = await tableDataCellValue(dailyDataPage.page, 0, 0); await searchInput(dailyDataPage.page).fill(reportId); @@ -373,11 +374,13 @@ test.describe( await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); }); - test.skip("downloads the file", async ({ dailyDataPage }) => { - await setDate(dailyDataPage.page, "#start-date", 14); - await setDate(dailyDataPage.page, "#end-date", 0); - - await applyButton(dailyDataPage.page).click(); + test("downloads the file", async ({ dailyDataPage, isMockDisabled }) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'downloads the file' test"); + // Sort by File available until, but they're in ASCENDING order + await dailyDataPage.page.getByRole("button", { name: "File available until" }).click(); + await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); + // Sort by File available until again, to get the absolute latest result + await dailyDataPage.page.getByRole("button", { name: "File available until" }).click(); await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); const downloadProm = dailyDataPage.page.waitForEvent("download"); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts new file mode 100644 index 00000000000..e1a09504f79 --- /dev/null +++ b/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts @@ -0,0 +1,98 @@ +import { tableRows } from "../../../helpers/utils"; +import { LastMileFailuresPage } from "../../../pages/authenticated/last-mile-failures"; +import { test as baseTest, expect } from "../../../test"; + +export interface LastMileFailuresPageFixtures { + lastMileFailuresPage: LastMileFailuresPage; +} + +const test = baseTest.extend({ + lastMileFailuresPage: async ( + { + page: _page, + isMockDisabled, + adminLogin, + senderLogin, + receiverLogin, + storageState, + frontendWarningsLogPath, + isFrontendWarningsLog, + }, + use, + ) => { + const page = new LastMileFailuresPage({ + page: _page, + isMockDisabled, + adminLogin, + senderLogin, + receiverLogin, + storageState, + frontendWarningsLogPath, + isFrontendWarningsLog, + }); + await page.goto(); + await use(page); + }, +}); + +test.describe("Last Mile Failure page", + { + tag: "@smoke", + }, () => { + test.describe("admin user", () => { + test.use({ storageState: "e2e/.auth/admin.json" }); + + test.describe("'Filter'", () => { + test("table has expected data when filtering by 'ReportId'", async ({ lastMileFailuresPage }) => { + const reportId = await tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(1).innerText(); + await lastMileFailuresPage.filterFormInputs.filter.input.fill(reportId); + const isReportIdReturned = await lastMileFailuresPage.testReportId( + reportId, + ); + expect(isReportIdReturned).toBe(true); + }); + }); + + test.describe("'Days to show' filter", () => { + test.beforeEach(async ({ lastMileFailuresPage }) => { + await lastMileFailuresPage.filterFormInputs.daysToShow.input.fill("200"); + await lastMileFailuresPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); + }); + + test("table has correct headers", async ({ lastMileFailuresPage }) => { + await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(0)).toHaveText(/Failed At/); + await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(1)).toHaveText(/ReportId/); + await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(2)).toHaveText(/Receiver/); + }); + + test("table column 'Failed At' has expected data", async ({ lastMileFailuresPage, isMockDisabled }) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, test"); + const areDatesInRange = await lastMileFailuresPage.tableColumnDateTimeInRange( + 200, + ); + expect(areDatesInRange).toBe(true); + }); + }); + + test("table column 'ReportId' will open a modal with report details", async ({ lastMileFailuresPage }) => { + const reportId = tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(1); + const reportIdCell = await reportId.innerText(); + await reportId.click(); + + const modal = lastMileFailuresPage.page.getByTestId("modalWindow").nth(0); + await expect(modal).toContainText(`Report ID:${reportIdCell}`); + }); + + test("table column 'Receiver' will open receiver edit page", async ({ lastMileFailuresPage, isMockDisabled }) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, skipping test"); + const receiver = tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(2); + const receiverCell = await receiver.getByRole("link").innerText(); + await receiver.click(); + + await expect(lastMileFailuresPage.page).toHaveURL( + `/admin/orgreceiversettings/org/${receiverCell}/receiver//action/edit`, + ); + }); + }); + }, +); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts new file mode 100644 index 00000000000..8cb59f03528 --- /dev/null +++ b/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts @@ -0,0 +1,339 @@ +import { addDays, endOfDay, startOfDay, subDays } from "date-fns"; +import { AdminReceiverStatusPage } from "../../../pages/authenticated/admin/receiver-status"; +import { test as baseTest, expect, logins } from "../../../test"; + +export interface AdminReceiverStatusPageFixtures { + adminReceiverStatusPage: AdminReceiverStatusPage; +} + +const test = baseTest.extend({ + adminReceiverStatusPage: async ( + { + page: _page, + isMockDisabled, + adminLogin, + senderLogin, + receiverLogin, + storageState, + frontendWarningsLogPath, + isFrontendWarningsLog, + }, + use, + ) => { + const page = new AdminReceiverStatusPage({ + page: _page, + isMockDisabled, + adminLogin, + senderLogin, + receiverLogin, + storageState, + isFrontendWarningsLog, + frontendWarningsLogPath, + isTestOrg: true, + }); + await page.goto(); + await use(page); + }, +}); + +test.describe("Admin Receiver Status Page", + { + // TODO: Investigate Admin Receiver Status Page › functions correctly › receiver statuses › time period modals + // tag: "@smoke", + }, () => { + test.use({ storageState: logins.admin.path }); + test.describe("displays correctly", () => { + test.describe("header", () => { + test( + "has correct title + heading", + async ({ adminReceiverStatusPage }) => { + await adminReceiverStatusPage.testHeader(); + }, + ); + }); + + test.describe( + "filters", + () => { + test("date range", async ({ adminReceiverStatusPage }) => { + const { button, label, modalOverlay, valueDisplay } = + adminReceiverStatusPage.filterFormInputs.dateRange; + await expect(label).toBeVisible(); + await expect(button).toBeVisible(); + await expect(valueDisplay).toHaveText(adminReceiverStatusPage.expectedDateRangeLabelText); + await expect(modalOverlay).toBeHidden(); + }); + + test("receiver name", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + adminReceiverStatusPage.filterFormInputs.receiverName; + await expect(label).toBeVisible(); + await expect(input).toBeVisible(); + await expect(input).toHaveValue(expectedDefaultValue); + + await expect(tooltip).toBeHidden(); + await input.hover(); + await expect(tooltip).toBeVisible(); + await expect(tooltip).toHaveText(expectedTooltipText); + }); + + test("results message", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + adminReceiverStatusPage.filterFormInputs.resultMessage; + await expect(label).toBeVisible(); + await expect(input).toBeVisible(); + await expect(input).toHaveValue(expectedDefaultValue); + + await expect(tooltip).toBeHidden(); + await input.hover(); + await expect(tooltip).toBeVisible(); + await expect(tooltip).toHaveText(expectedTooltipText); + }); + + test("success type", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = + adminReceiverStatusPage.filterFormInputs.successType; + await expect(label).toBeVisible(); + await expect(input).toBeVisible(); + await expect(input).toHaveValue(expectedDefaultValue); + + await expect(tooltip).toBeHidden(); + await input.hover(); + await expect(tooltip).toBeVisible(); + await expect(tooltip).toHaveText(expectedTooltipText); + }); + }, + ); + + // Failures here indicate potential misalignment of playwright/browser timezone + test.describe("receiver statuses", () => { + test("time periods", async ({ adminReceiverStatusPage }) => { + const result = await adminReceiverStatusPage.testReceiverStatusDisplay(true); + expect(result).toBe(true); + }); + }); + + test.describe("has footer", () => { + test("has footer and explicit scroll to footer and scroll to top", + async ({ + adminReceiverStatusPage, + }) => { + await adminReceiverStatusPage.testFooter(); + }); + }); + }); + + test.describe("functions correctly", () => { + test.describe("filters", () => { + test.describe( + "date range", + () => { + test("works through calendar", async ({ adminReceiverStatusPage }) => { + const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; + const now = new Date(); + const targetFrom = startOfDay(subDays(now, 3)); + const targetTo = addDays(endOfDay(now), 1); + + const reqUrl = await adminReceiverStatusPage.updateFilters({ + dateRange: { + value: [targetFrom, targetTo], + }, + }); + expect(reqUrl).toBeDefined(); + + await expect(valueDisplay).toHaveText( + adminReceiverStatusPage.expectedDateRangeLabelText, + ); + expect(Object.fromEntries(reqUrl!.searchParams.entries())).toMatchObject({ + start_date: targetFrom.toISOString(), + end_date: targetTo.toISOString(), + }); + }); + + test("works through textboxes", async ({ adminReceiverStatusPage }) => { + const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; + await expect(adminReceiverStatusPage.receiverStatusRowsLocator).not.toHaveCount(0); + const now = new Date(); + const targetFrom = startOfDay(subDays(now, 3)); + const targetTo = addDays(endOfDay(now), 1); + + const reqUrl = await adminReceiverStatusPage.updateFilters({ + dateRange: { + value: [targetFrom, targetTo], + }, + }); + + expect(reqUrl).toBeDefined(); + + await expect(valueDisplay).toHaveText( + adminReceiverStatusPage.expectedDateRangeLabelText, + ); + expect(Object.fromEntries(reqUrl!.searchParams.entries())).toMatchObject({ + start_date: targetFrom.toISOString(), + end_date: targetTo.toISOString(), + }); + }); + }, + ); + + // TODO: revisit after filters have been fixed per ticket #15737 + test.skip("receiver name", async ({adminReceiverStatusPage, isMockDisabled}) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'receiver name' test"); + const {organizationName, receiverName, successRate} = + adminReceiverStatusPage.timePeriodData[1]; + + const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; + const defaultReceiversStatusRowsCount = await receiversStatusRows.count(); + const expectedReceiverStatusRow = receiversStatusRows.nthCustom(0); + const expectedReceiverStatusRowTitle = + adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( + organizationName, + receiverName, + successRate, + ); + + expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); + + await adminReceiverStatusPage.updateFilters({ + receiverName, + }); + + const receiversStatusRowsCount = await receiversStatusRows.count(); + expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); + await expect(expectedReceiverStatusRow).toBeVisible(); + await expect(expectedReceiverStatusRow.title).toHaveText(expectedReceiverStatusRowTitle); + + await adminReceiverStatusPage.resetFilters(); + + expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); + }); + + test.skip("result message", async ({adminReceiverStatusPage, isMockDisabled}) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'result message' test"); + // get first entry's result from all-fail receiver's first day -> third time period + const receiverI = 0; + const dayI = 0; + const timePeriodI = 2; + const entryI = 0; + const {days} = adminReceiverStatusPage.timePeriodData[receiverI]; + const {connectionCheckResult} = days[dayI].timePeriods[timePeriodI].entries[entryI]; + + const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; + + await adminReceiverStatusPage.updateFilters({ + resultMessage: connectionCheckResult, + }); + + for (const [i, {days}] of adminReceiverStatusPage.timePeriodData.entries()) { + const row = receiversStatusRows.nthCustom(i); + + for (const [i, {timePeriods}] of days.entries()) { + const rowDay = row.days.nthCustom(i); + + for (const [i] of timePeriods.entries()) { + const rowDayTimePeriod = rowDay.timePeriods.nth(i); + + await expect(rowDayTimePeriod).toHaveClass(/success-result-hidden/); + } + } + } + + await adminReceiverStatusPage.resetFilters(); + + // TODO: revisit after filters have been fixed per ticket #15737 + // await adminReceiverStatusPage.testReceiverStatusDisplay(); + }); + + test.skip("success type", async ({ adminReceiverStatusPage, isMockDisabled }) => { + test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'success type' test"); + const [failRow, ,] = adminReceiverStatusPage.timePeriodData; + const failRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( + failRow.organizationName, + failRow.receiverName, + failRow.successRate, + ); + // const mixedRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( + // mixedRow.organizationName, + // mixedRow.receiverName, + // mixedRow.successRate, + // ); + + const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; + const defaultReceiversStatusRowsCount = await receiversStatusRows.count(); + const expectedRow = receiversStatusRows.nthCustom(0); + + expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); + + await adminReceiverStatusPage.updateFilters({ + successType: "ALL_FAILURE", + }); + let receiversStatusRowsCount = await receiversStatusRows.count(); + + expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); + await expect(expectedRow.title).toHaveText(failRowTitle); + + await adminReceiverStatusPage.updateFilters({ + successType: "MIXED_SUCCESS", + }); + receiversStatusRowsCount = await receiversStatusRows.count(); + expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); + // TODO: revisit after filters have been fixed per ticket #15737 + // await expect(expectedRow.title).toHaveText(mixedRowTitle); + + // await adminReceiverStatusPage.resetFilters(); + // receiversStatusRowsCount = await receiversStatusRows.count(); + // + // expect(receiversStatusRowsCount).toBe(defaultReceiversStatusRowsCount); + }); + }); + + test.describe("receiver statuses", () => { + test.describe("date range length changes", () => { + test("increases", async ({ adminReceiverStatusPage }) => { + const rows = adminReceiverStatusPage.receiverStatusRowsLocator; + const days = rows.nthCustom(0).days; + await expect(rows).not.toHaveCount(0); + const now = new Date(); + const targetFrom = startOfDay(subDays(now, 3)); + const targetTo = endOfDay(now); + await adminReceiverStatusPage.updateFilters({ + dateRange: { + value: [targetFrom, targetTo], + }, + }); + await expect(days).toHaveCount(4); + }); + + test("decreases", async ({ adminReceiverStatusPage }) => { + const rows = adminReceiverStatusPage.receiverStatusRowsLocator; + const days = rows.nthCustom(0).days; + await expect(rows).not.toHaveCount(0); + const now = new Date(); + const targetFrom = startOfDay(subDays(now, 1)); + const targetTo = endOfDay(now); + await adminReceiverStatusPage.updateFilters({ + dateRange: { + value: [targetFrom, targetTo], + }, + }); + await expect(days).toHaveCount(2); + }); + }); + + test.skip("time period modals", async ({ adminReceiverStatusPage }) => { + const result = await adminReceiverStatusPage.testReceiverTimePeriodModals(true); + expect(result).toBe(true); + }); + + test("receiver org links", async ({ adminReceiverStatusPage }) => { + const result = await adminReceiverStatusPage.testReceiverOrgLinks(true); + expect(result).toBe(true); + }); + + test("receiver links", async ({ adminReceiverStatusPage }) => { + const result = await adminReceiverStatusPage.testReceiverLinks(true); + expect(result).toBe(true); + }); + }); + }); + }); diff --git a/frontend-react/package.json b/frontend-react/package.json index 620f0fe9663..74e016d89d4 100644 --- a/frontend-react/package.json +++ b/frontend-react/package.json @@ -5,16 +5,16 @@ "type": "module", "npmClient": "yarn", "dependencies": { - "@microsoft/applicationinsights-react-js": "^17.3.1", - "@microsoft/applicationinsights-web": "^3.3.1", + "@microsoft/applicationinsights-react-js": "^17.3.2", + "@microsoft/applicationinsights-web": "^3.3.2", "@okta/okta-react": "^6.9.0", - "@okta/okta-signin-widget": "^7.21.2", + "@okta/okta-signin-widget": "^7.23.0", "@rest-hooks/rest": "^3.0.3", - "@tanstack/react-query": "^5.51.23", - "@tanstack/react-query-devtools": "^5.51.23", - "@trussworks/react-uswds": "^9.0.0", + "@tanstack/react-query": "^5.55.4", + "@tanstack/react-query-devtools": "^5.55.4", + "@trussworks/react-uswds": "^9.1.0", "@uswds/uswds": "3.7.1", - "axios": "^1.7.5", + "axios": "^1.7.7", "classnames": "^2.5.1", "date-fns": "^3.6.0", "date-fns-tz": "^3.1.3", @@ -32,15 +32,15 @@ "react-loader-spinner": "^6.1.6", "react-markdown": "^9.0.1", "react-query-kit": "^3.3.0", - "react-router": "^6.25.1", - "react-router-dom": "^6.25.1", + "react-router": "^6.26.1", + "react-router-dom": "^6.26.1", "react-scroll-sync": "^0.11.2", "react-toastify": "^10.0.5", "rehype-raw": "^7.0.0", "rehype-slug": "^5.1.0", "rest-hooks": "^6.1.7", "sanitize-html": "^2.13.0", - "tsx": "^4.17.0", + "tsx": "^4.19.0", "use-deep-compare-effect": "^1.8.1", "uuid": "^10.0.0", "web-vitals": "^3.4.0" @@ -111,7 +111,7 @@ "devDependencies": { "@mdx-js/react": "^3.0.1", "@mdx-js/rollup": "^3.0.1", - "@playwright/test": "^1.46.1", + "@playwright/test": "^1.47.0", "@rest-hooks/test": "^7.3.1", "@storybook/addon-a11y": "^8.2.9", "@storybook/addon-actions": "^8.2.9", @@ -127,8 +127,8 @@ "@storybook/testing-library": "^0.2.2", "@storybook/theming": "^8.2.9", "@testing-library/dom": "^10.4.0", - "@testing-library/jest-dom": "^6.4.8", - "@testing-library/react": "^16.0.0", + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^14.5.2", "@types/dompurify": "^3.0.5", "@types/dotenv-flow": "^3.3.3", @@ -138,16 +138,16 @@ "@types/lodash": "^4.17.7", "@types/mdx": "^2.0.13", "@types/node": "^20.12.5", - "@types/react": "18.3.3", + "@types/react": "18.3.5", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", "@types/react-scroll-sync": "^0.9.0", - "@types/sanitize-html": "^2.11.0", + "@types/sanitize-html": "^2.13.0", "@typescript-eslint/eslint-plugin": "^7.17.0", "@typescript-eslint/parser": "^7.17.0", "@vitejs/plugin-react": "^4.3.1", - "@vitest/coverage-istanbul": "^2.0.4", - "@vitest/ui": "^2.0.4", + "@vitest/coverage-istanbul": "^2.0.5", + "@vitest/ui": "^2.0.5", "autoprefixer": "^10.4.20", "browserslist": "^4.23.3", "browserslist-useragent-regexp": "^4.1.3", @@ -168,34 +168,34 @@ "eslint-plugin-testing-library": "^6.3.0", "eslint-plugin-vitest": "^0.5.4", "husky": "^9.1.5", - "jsdom": "^24.1.1", - "lint-staged": "^15.2.9", + "jsdom": "^25.0.0", + "lint-staged": "^15.2.10", "mockdate": "^3.0.5", "msw": "^2.3.5", "msw-storybook-addon": "beta", "npm-run-all": "^4.1.5", "otpauth": "^9.3.2", "patch-package": "^8.0.0", - "postcss": "^8.4.41", + "postcss": "^8.4.45", "prettier": "^3.3.3", "react-error-boundary": "^4.0.13", "remark-frontmatter": "^5.0.0", "remark-mdx-frontmatter": "^5.0.0", "remark-mdx-toc": "^0.3.1", - "sass": "^1.77.8", + "sass": "^1.78.0", "storybook": "^8.2.9", "storybook-addon-remix-react-router": "^3.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.3", "typescript": "^5.5.4", "undici": "^6.19.8", - "vite": "^5.3.4", - "vite-plugin-checker": "^0.7.2", + "vite": "^5.4.3", + "vite-plugin-checker": "^0.8.0", "vite-plugin-svgr": "^4.2.0", - "vitest": "^2.0.4" + "vitest": "^2.0.5" }, "resolutions": { - "@types/react": "18.3.3" + "@types/react": "18.3.5" }, "engines": { "node": "^20.15" diff --git a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf deleted file mode 100644 index b3e0b02b6f143b943959187243e0fd395841bd8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495911 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

1M1TjGoD~Wt)9oeyKDQ2T|16NM+$Yt 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 z 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

G!{M!GK?&EpL9fdetUO0(O0LAnUTVPVG(bdMaH` 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

7CuP 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

233u$3h$K9m7hA5FboYg)?5d;M(O7Fe{$7 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

ZeZ3+S;10Qg1iv)57zLisuH6dINAM0Xb|G7lTdp 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 responds to each API call with a response (JSON formatted) about the disposition of your data.

-

Last updated: 6/24/24

+

Last updated: 9/9/24

*** @@ -52,11 +52,9 @@ Example ReportStream response to an async submission: } ``` -ReportStream features a History Details API that can be later queried to obtain the actual destinations and relevant detail. -If you’d like to use this API, let the ReportStream team know, and we’ll provide you with additional information about requirements -for Okta authentication. +ReportStream features a History Details API that can be later queried to obtain the actual destinations and relevant detail using your existing private/public key pair. -The request is made with the submissionId in the earlier example.: +The request is made with the submissionId in the earlier example: ``` https://prime.cdc.gov/api/history/simple_report/submissions/1588 diff --git a/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx b/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx index 9c8c69d4cc3..de160a051be 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx @@ -16,7 +16,7 @@ import site from "../../../site.json"; # Sample payloads and output -

Last updated: 6/24/24

+

Last updated: 9/9/24

*** diff --git a/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx b/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx index 3ee2e505c05..bdc0f1fc993 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx @@ -24,7 +24,7 @@ import Sidenav from "../Sidenav.mdx"; Examples in this guide use curl commands for simplicity with the assumption you’ll be coding these calls into your sending system. You can also use a program like Postman to test submissions. -

**Last updated:** 6/24/24

+

**Last updated:** 9/9/24

*** diff --git a/frontend-react/src/content/site.json b/frontend-react/src/content/site.json index 38654e3249a..77485c73e4d 100644 --- a/frontend-react/src/content/site.json +++ b/frontend-react/src/content/site.json @@ -48,7 +48,7 @@ "path": "/assets/csv/ReportStream-StandardCSV-ExampleData-20220509.csv" }, "programmersGuidePdf": { - "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf" + "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf" }, "exampleHl7": { "path": "/assets/hl7/Example-hl7-file.hl7" diff --git a/frontend-react/yarn.lock b/frontend-react/yarn.lock index 8c9e38e5ff8..262a13d07be 100644 --- a/frontend-react/yarn.lock +++ b/frontend-react/yarn.lock @@ -2164,118 +2164,118 @@ __metadata: languageName: node linkType: hard -"@microsoft/applicationinsights-analytics-js@npm:3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-analytics-js@npm:3.3.1" +"@microsoft/applicationinsights-analytics-js@npm:3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-analytics-js@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: e5c34f3cbafdd81a2e5ff87922d3b80754b41dccc50359ee407b4af70cba8e4ed57476f12a87364c7fbef33953ffe9bacdaf70c0e03eeb2a4fc3f447cb39f7ab + tslib: ">= 1.0.0" + checksum: f36f555b4d8937a63014ef28f5c09cf5e7c9f35f2e10a702edb926ba135c7b71eefd796d15400b1841f99e3625879580608081b50cb031264566a29ad4b94492 languageName: node linkType: hard -"@microsoft/applicationinsights-cfgsync-js@npm:3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-cfgsync-js@npm:3.3.1" +"@microsoft/applicationinsights-cfgsync-js@npm:3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-cfgsync-js@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: eab8ba79732bceeba93f5888006a23321e33cf46c9c30c77ab325782f1e0b3621c9851ac6a7d0813398ff16a62833b6812fd0caccdb36760700f34fdaf09f463 + tslib: ">= 1.0.0" + checksum: 81709fd0f4a15fc465bb22857e996a7474a8e49ddf9d2fe8cd7651c7d6dfdd3fe6b226f79ca334c73dbfb9df1fbd33602fe401a6daf56ccbd1c41b153b51a334 languageName: node linkType: hard -"@microsoft/applicationinsights-channel-js@npm:3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-channel-js@npm:3.3.1" +"@microsoft/applicationinsights-channel-js@npm:3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-channel-js@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: 880bec408d65620e1585996a1f78119114ed14e12fa81277f9c70799065d7f4471a1e771c498b3ff0cee009edd3559412ac45eb73099168092d013bf49481cdc + tslib: ">= 1.0.0" + checksum: af2d5703c9beb9d20ebb87c277b028b3a0a90e0c135d37ad21697a963504066914cfc3160be35b58570c75d40dddc23b4cc85f708a9936c102bea79801b35936 languageName: node linkType: hard -"@microsoft/applicationinsights-common@npm:3.3.1, @microsoft/applicationinsights-common@npm:^3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-common@npm:3.3.1" +"@microsoft/applicationinsights-common@npm:3.3.2, @microsoft/applicationinsights-common@npm:^3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-common@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: 3d2762807812f3dacc4675bce8ecad529d41d4990f4be3e1123047797bfcd42d8fa69b551ae722fbc5e1d42feb3ac62a17ca0f9cb047ff219154072aa5050c23 + tslib: ">= 1.0.0" + checksum: ae459e7301244251a7e9a3e3cd51715848bfabf1fdcfe269d8bed19eb6d92819b3cf915be0423215e8c676a650b2c48e167e6870860ac70540e7a137654b1a64 languageName: node linkType: hard -"@microsoft/applicationinsights-core-js@npm:3.3.1, @microsoft/applicationinsights-core-js@npm:^3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-core-js@npm:3.3.1" +"@microsoft/applicationinsights-core-js@npm:3.3.2, @microsoft/applicationinsights-core-js@npm:^3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-core-js@npm:3.3.2" dependencies: "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: e51dca60df15e576321c1a9aeea70357d7eb29b3ed08c5f361a3919f5100fa4736b8778397ee0995c2683f988d38fc7e45b6b0943cda1e799cbffb852477624f + tslib: ">= 1.0.0" + checksum: f3cedb3e79d4e5ceac42ee3cf089dc7810fed734901d2108cdfa47375a3c7d26ff282c535909a4bd87761ed0e623310c8c0e87c4142de32ab129161eff4eb53e languageName: node linkType: hard -"@microsoft/applicationinsights-dependencies-js@npm:3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-dependencies-js@npm:3.3.1" +"@microsoft/applicationinsights-dependencies-js@npm:3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-dependencies-js@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: 30cf9882fa3b8fff62b6dd1a1ac27f00b466eac4a22394c284761a56f799857ba1711f1acec33168c1872f42938068a18de9b74c323460fc96d82e72792acadd + tslib: ">= 1.0.0" + checksum: fa915a95b8be6c675c72de5e4435ebd9f8c03bfad0ff4daa2980d7d2ccf4b0592a12bcbfcfa8b95a01349334deaf11c1cea8a9ea0ac2df8c53c8b754726aeef8 languageName: node linkType: hard -"@microsoft/applicationinsights-properties-js@npm:3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-properties-js@npm:3.3.1" +"@microsoft/applicationinsights-properties-js@npm:3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-properties-js@npm:3.3.2" dependencies: - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: 5a229fe7920101d2ff118a2e3c3d83b22cb11ba21b86ddcdf46a37f93d4f62dd2ee08a109ff49d3aaa5b922c5b793677b171035d642c8be6421be7e3bb214ae8 + tslib: ">= 1.0.0" + checksum: 0ba90bcfd91311763d6d2046da62efe6654d77b33d49bb1ff1141f4bd0ac204fddd73afa42abd805a979ff4d9d64c5429b3ff0a1f15d699ebc8bee34656b6998 languageName: node linkType: hard -"@microsoft/applicationinsights-react-js@npm:^17.3.1": - version: 17.3.1 - resolution: "@microsoft/applicationinsights-react-js@npm:17.3.1" +"@microsoft/applicationinsights-react-js@npm:^17.3.2": + version: 17.3.2 + resolution: "@microsoft/applicationinsights-react-js@npm:17.3.2" dependencies: - "@microsoft/applicationinsights-common": ^3.3.1 - "@microsoft/applicationinsights-core-js": ^3.3.1 + "@microsoft/applicationinsights-common": ^3.3.2 + "@microsoft/applicationinsights-core-js": ^3.3.2 "@microsoft/applicationinsights-shims": ^3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" @@ -2283,7 +2283,7 @@ __metadata: history: ">= 4.10.1" react: ">= 17.0.1" tslib: "*" - checksum: 954b2fb18d0b0e2d78f082236a42f2b9b830e1c4b251c9328ef633ff0561db34a17c6e958c68b534c5c5cc2393466a96d737d8d7c8497f222d763f1276d016e9 + checksum: b5c128c5c1fcf46b64ca15184f9ced77bc83ff3e93255acce7ae8a13fc4ed83e6422c4d5181825fb90a9c0f476f1a89cf540af346f5dd1266c8937e2e873a012 languageName: node linkType: hard @@ -2296,24 +2296,24 @@ __metadata: languageName: node linkType: hard -"@microsoft/applicationinsights-web@npm:^3.3.1": - version: 3.3.1 - resolution: "@microsoft/applicationinsights-web@npm:3.3.1" - dependencies: - "@microsoft/applicationinsights-analytics-js": 3.3.1 - "@microsoft/applicationinsights-cfgsync-js": 3.3.1 - "@microsoft/applicationinsights-channel-js": 3.3.1 - "@microsoft/applicationinsights-common": 3.3.1 - "@microsoft/applicationinsights-core-js": 3.3.1 - "@microsoft/applicationinsights-dependencies-js": 3.3.1 - "@microsoft/applicationinsights-properties-js": 3.3.1 +"@microsoft/applicationinsights-web@npm:^3.3.2": + version: 3.3.2 + resolution: "@microsoft/applicationinsights-web@npm:3.3.2" + dependencies: + "@microsoft/applicationinsights-analytics-js": 3.3.2 + "@microsoft/applicationinsights-cfgsync-js": 3.3.2 + "@microsoft/applicationinsights-channel-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-dependencies-js": 3.3.2 + "@microsoft/applicationinsights-properties-js": 3.3.2 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: "*" - checksum: 3371f4b5f2e278ab2bd320a23687abf94587004a751b509c3704e55d638fa6a8c8b42d8bdaac93de4ae94c4be00b655dac4151665c253042260b7bd63d00bd38 + tslib: ">= 1.0.0" + checksum: fd96bf7509179a73c0e49a6d1fe8fd330e529d7a9b0fa00c3f022a34f5c4e6220aa2cead83596c8f3482b6aa44ef28c28e10a8ad6f3118ffb893f6de28b4c73b languageName: node linkType: hard @@ -2399,9 +2399,9 @@ __metadata: languageName: node linkType: hard -"@okta/okta-auth-js@npm:^7.7.0": - version: 7.7.0 - resolution: "@okta/okta-auth-js@npm:7.7.0" +"@okta/okta-auth-js@npm:^7.8.0": + version: 7.8.0 + resolution: "@okta/okta-auth-js@npm:7.8.0" dependencies: "@babel/runtime": ^7.12.5 "@peculiar/webcrypto": ^1.4.0 @@ -2419,7 +2419,7 @@ __metadata: tiny-emitter: 1.1.0 webcrypto-shim: ^0.1.5 xhr2: 0.1.3 - checksum: 86f091db8131694aa373dc36400dd6a89160cd0efd695c98459bae83a6c68fe615b9fa9083b96ec301c321b7e7efc93a20a5bd9ca43da8117b26be2ba398c492 + checksum: faeac22381a46784381e3757c1f5193bb7dc821ea39fdd5d58952dc744cf0a64788e979aa3ce4a2551dd29f6b49e9e7eda756bafc3737386ec4c6d2b3277582c languageName: node linkType: hard @@ -2438,11 +2438,11 @@ __metadata: languageName: node linkType: hard -"@okta/okta-signin-widget@npm:^7.21.2": - version: 7.21.2 - resolution: "@okta/okta-signin-widget@npm:7.21.2" +"@okta/okta-signin-widget@npm:^7.23.0": + version: 7.23.0 + resolution: "@okta/okta-signin-widget@npm:7.23.0" dependencies: - "@okta/okta-auth-js": ^7.7.0 + "@okta/okta-auth-js": ^7.8.0 "@sindresorhus/to-milliseconds": ^1.0.0 "@types/backbone": ^1.4.15 "@types/eslint-scope": ^3.7.3 @@ -2464,7 +2464,7 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: ac78f2055248aff5d09a50bbe086023cc1aee0b6c10f84e80eeac2488dfbd6e5647b10abb8b65b60a80c754159d50c828ae11a6769e255df588fc7b8b681fd19 + checksum: 5b55d5fc39412778505d262810ab3a87c2bf557a55a59e4f041f77393b6344e35a96477603a40e80cae325f0bd534aa61c95f0b154b659e647b35e55346d4b90 languageName: node linkType: hard @@ -2532,14 +2532,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.46.1": - version: 1.46.1 - resolution: "@playwright/test@npm:1.46.1" +"@playwright/test@npm:^1.47.0": + version: 1.47.0 + resolution: "@playwright/test@npm:1.47.0" dependencies: - playwright: 1.46.1 + playwright: 1.47.0 bin: playwright: cli.js - checksum: 180d90c6421ee6a8c00a1ae65d91d5f69767e2de95c3f5582ac2bdf3a388e621fdd3ee00ecb7836db427bb0d4cee58111c14f133cb62150357d8e4f43e3e2295 + checksum: 4f5a921c57d2577c64b0bc03d4b97937a6f853eee6afb58f2fc8fb140147b7f33800afe490c9ba3af515d5feb104f65319663931ec1ee75e10f001c1d69b138c languageName: node linkType: hard @@ -2550,10 +2550,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.18.0": - version: 1.18.0 - resolution: "@remix-run/router@npm:1.18.0" - checksum: dad8e8cbd3b44503c89de0fc5d8f92954d04c00bf36b42a18ae8b03fe0783742a99d0cae36f2962db38e2bdba3d40259105202c69620943e88f81711ceeb8fe4 +"@remix-run/router@npm:1.19.1": + version: 1.19.1 + resolution: "@remix-run/router@npm:1.19.1" + checksum: ebe4474ba0c1046093976b48a4eb4e39bd2f47368aacea21400126d72e133d2cfbfb50254cf1bde0b66dacdf0344452f743049d1595a22e86130668f60112376 languageName: node linkType: hard @@ -2663,6 +2663,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-android-arm64@npm:4.13.0" @@ -2670,6 +2677,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm64@npm:4.21.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.13.0" @@ -2677,6 +2691,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-darwin-x64@npm:4.13.0" @@ -2684,6 +2705,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0" @@ -2691,6 +2719,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.13.0" @@ -2698,6 +2740,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.13.0" @@ -2705,6 +2754,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0" @@ -2712,6 +2775,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.13.0" @@ -2719,6 +2796,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.13.0" @@ -2726,6 +2810,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.13.0" @@ -2733,6 +2824,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.13.0" @@ -2740,6 +2838,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.13.0" @@ -2747,6 +2852,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@selderee/plugin-htmlparser2@npm:^0.11.0": version: 0.11.0 resolution: "@selderee/plugin-htmlparser2@npm:0.11.0" @@ -3399,40 +3511,40 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.51.21": - version: 5.51.21 - resolution: "@tanstack/query-core@npm:5.51.21" - checksum: a602e70bfbfa1fa28333be8c1b9ac9c9b97937b236d3997a757079ae04086fe59c2688cb6406fd82dcf9ef07f73e7a4ba1d373040f6cad340e1f64bceafe0e07 +"@tanstack/query-core@npm:5.55.4": + version: 5.55.4 + resolution: "@tanstack/query-core@npm:5.55.4" + checksum: f20fc8dbd7484b38aa010bd51a381f185691589373ebb41b9fe22c24492d8537a9eaaf6bf273cb781f2dfd65021f4fc984d4104a92a34c911df706b2bd1bdb8c languageName: node linkType: hard -"@tanstack/query-devtools@npm:5.51.16": - version: 5.51.16 - resolution: "@tanstack/query-devtools@npm:5.51.16" - checksum: 77ffcfc693b32d640144ccdcc51da3d7ecd7ac43ae0d1665465da701fce77f90c606fc6863ecf34ab375d0ce3c3dab5b4c9c66c889e4d35fa6bd1decf7f8a096 +"@tanstack/query-devtools@npm:5.55.1": + version: 5.55.1 + resolution: "@tanstack/query-devtools@npm:5.55.1" + checksum: f1a4fba14f512b3250536703e2363712ac942ffb7712aa694988b8df75c04b52f0ac75fcf90c85abb6974ef422e64ad27f9e0ff07a06854ae02ba1ce4cbdd1d1 languageName: node linkType: hard -"@tanstack/react-query-devtools@npm:^5.51.23": - version: 5.51.23 - resolution: "@tanstack/react-query-devtools@npm:5.51.23" +"@tanstack/react-query-devtools@npm:^5.55.4": + version: 5.55.4 + resolution: "@tanstack/react-query-devtools@npm:5.55.4" dependencies: - "@tanstack/query-devtools": 5.51.16 + "@tanstack/query-devtools": 5.55.1 peerDependencies: - "@tanstack/react-query": ^5.51.23 + "@tanstack/react-query": ^5.55.4 react: ^18 || ^19 - checksum: 4551cf800ff0fa83174130b885f68dacbddd451d4a68b4b6652e55be7a9989a0c27a21f2acab9c144e29cf86d927736514ac5b1fc648225ac3b40d7c478e0035 + checksum: 264f70d5b1796d2e2e73fc177c21fcb298e345e0e6be82d242722f31e19e04c9908614d63ae5095027c8b81804f4a3b74a73805a8f2471e239b988ea74f4c44f languageName: node linkType: hard -"@tanstack/react-query@npm:^5.51.23": - version: 5.51.23 - resolution: "@tanstack/react-query@npm:5.51.23" +"@tanstack/react-query@npm:^5.55.4": + version: 5.55.4 + resolution: "@tanstack/react-query@npm:5.55.4" dependencies: - "@tanstack/query-core": 5.51.21 + "@tanstack/query-core": 5.55.4 peerDependencies: - react: ^18.0.0 - checksum: d1d8131232430635923694befff9bdabc8d18ca2392789456a28191020d489671577e02ee5b0107e0064fea981c74c99cea3077a4e34cc1ac7438175bd50effe + react: ^18 || ^19 + checksum: 26e4ecc0950f2d9a1c0d527dbe736827ae63bcb12e688b442083507235a48abf3bf9fc247ee730820b0d1af242d7b516ed9de02568a4867b7867c2dd23de3664 languageName: node linkType: hard @@ -3517,19 +3629,18 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.4.8": - version: 6.4.8 - resolution: "@testing-library/jest-dom@npm:6.4.8" +"@testing-library/jest-dom@npm:^6.5.0": + version: 6.5.0 + resolution: "@testing-library/jest-dom@npm:6.5.0" dependencies: "@adobe/css-tools": ^4.4.0 - "@babel/runtime": ^7.9.2 aria-query: ^5.0.0 chalk: ^3.0.0 css.escape: ^1.5.1 dom-accessibility-api: ^0.6.3 lodash: ^4.17.21 redent: ^3.0.0 - checksum: b601688950e522557c2c6bbc0f026ae31a10583577c8a557814b0eb33648fe82afc06299f3cdb79ff0c5076fd1a6106f3d76e2ca0dde6f7ee0555e63008fbd72 + checksum: c2d14103ebe3358852ec527ff7512f64207a39932b2f7b6dff7e73ba91296b01a71bad9a9584b6ee010681380a906c1740af50470adc6db660e1c7585d012ebf languageName: node linkType: hard @@ -3555,9 +3666,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^16.0.0": - version: 16.0.0 - resolution: "@testing-library/react@npm:16.0.0" +"@testing-library/react@npm:^16.0.1": + version: 16.0.1 + resolution: "@testing-library/react@npm:16.0.1" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: @@ -3571,7 +3682,7 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 45a35f0b5f34b5a7f4dcefdd3f1d202d5421692e5cc7a491c9bc71e6ed9dd5872a182b80b4dfefb4a56d9c1df35e50f6fa2917bcf657cc26b4bc0d2259df0027 + checksum: 1837db473ea018cf2b5d0cbfffb7a30d0d759e5a7f23aad431441c77bcc3d2533250cd003a61878fd908267df47404cedcb5914f12d79e413002c659652b37fd languageName: node linkType: hard @@ -3591,15 +3702,15 @@ __metadata: languageName: node linkType: hard -"@trussworks/react-uswds@npm:^9.0.0": - version: 9.0.0 - resolution: "@trussworks/react-uswds@npm:9.0.0" +"@trussworks/react-uswds@npm:^9.1.0": + version: 9.1.0 + resolution: "@trussworks/react-uswds@npm:9.1.0" peerDependencies: "@uswds/uswds": ^3.7.1 focus-trap-react: ^10.2.3 react: ^16.x || ^17.x || ^18.x react-dom: ^16.x || ^17.x || ^18.x - checksum: 2e2d310c69a6dc2e92d48830537ad1873b45a4f0cfab81ccfa180ec2cae55c4b61153397c4956295dfd2cdad7b8a5156b69eb3c5464b0bba213fc386564c4993 + checksum: 907613e6bc42d7b304f69e52556ab78b0df86adcb24453cf9616805786e5940a3dbdd55bf6f03270c41dd672cfda1a4fdb9331ff64dd8c7beeecaa578771783c languageName: node linkType: hard @@ -4093,13 +4204,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:18.3.3": - version: 18.3.3 - resolution: "@types/react@npm:18.3.3" +"@types/react@npm:18.3.5": + version: 18.3.5 + resolution: "@types/react@npm:18.3.5" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: c63d6a78163244e2022b01ef79b0baec4fe4da3475dc4a90bb8accefad35ef0c43560fd0312e5974f92a0f1108aa4d669ac72d73d66396aa060ea03b5d2e3873 + checksum: 63d2ff473b348c902b68c20be55d2c5124d078c4336c2d1778f316c27789ed596657e8e714022ce14fb24994b0960fc64c913e629bb0bf85815355b0c31eb46b languageName: node linkType: hard @@ -4110,12 +4221,12 @@ __metadata: languageName: node linkType: hard -"@types/sanitize-html@npm:^2.11.0": - version: 2.11.0 - resolution: "@types/sanitize-html@npm:2.11.0" +"@types/sanitize-html@npm:^2.13.0": + version: 2.13.0 + resolution: "@types/sanitize-html@npm:2.13.0" dependencies: htmlparser2: ^8.0.0 - checksum: a901d55d31cd946a7fce0130cc7cf6bcf56602af9c87291be77d8149c60e7afc47c83ca74c67c2d84e6ba029fe9bbd6f14f89a8cb30fbd185766eebc5722c251 + checksum: a32c67bdf86048efa8ee5cdc1a68351758bae888956010eea58e694c1f9fc580632d1ce0478d31984559e0b03282d130ffe3e87479838c8da92cf1ac06626edc languageName: node linkType: hard @@ -4498,9 +4609,9 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-istanbul@npm:^2.0.4": - version: 2.0.4 - resolution: "@vitest/coverage-istanbul@npm:2.0.4" +"@vitest/coverage-istanbul@npm:^2.0.5": + version: 2.0.5 + resolution: "@vitest/coverage-istanbul@npm:2.0.5" dependencies: "@istanbuljs/schema": ^0.1.3 debug: ^4.3.5 @@ -4513,8 +4624,8 @@ __metadata: test-exclude: ^7.0.1 tinyrainbow: ^1.2.0 peerDependencies: - vitest: 2.0.4 - checksum: 4438e918427c5970a57978c3bb958c7c40d9e866960ebc0a3427846617befa37098430255525721a7845786ce44ee181e131ee5c02ce557d950d17fbf4bce612 + vitest: 2.0.5 + checksum: 641e8169d8ca67f1d8cf9d9acf603aa0a23f2066898e542d0fd119f8ae84afb32f0c67dafefd478899f8cd41e2091aa5641042e33b80ad456a7341bec5bc8eeb languageName: node linkType: hard @@ -4529,45 +4640,45 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:2.0.4": - version: 2.0.4 - resolution: "@vitest/expect@npm:2.0.4" +"@vitest/expect@npm:2.0.5": + version: 2.0.5 + resolution: "@vitest/expect@npm:2.0.5" dependencies: - "@vitest/spy": 2.0.4 - "@vitest/utils": 2.0.4 + "@vitest/spy": 2.0.5 + "@vitest/utils": 2.0.5 chai: ^5.1.1 tinyrainbow: ^1.2.0 - checksum: 6841da3ffa58572c24b3720c84bade5b7293d60905b17b3e2ea28fcecb7c18592851fe84538bfc9995ab3b7681cd3e0fc6913512390ae1564d3fb1de8d9edad8 + checksum: 0c65eb24c2fd9ef5735d1e65dc8fee59936e6cab1d6ab24a95e014b8337be5598242fceae4e8ec2974e2ae70a30c1906ad41208bf6de6cdf2043594cdb65e627 languageName: node linkType: hard -"@vitest/pretty-format@npm:2.0.4, @vitest/pretty-format@npm:^2.0.4": - version: 2.0.4 - resolution: "@vitest/pretty-format@npm:2.0.4" +"@vitest/pretty-format@npm:2.0.5, @vitest/pretty-format@npm:^2.0.5": + version: 2.0.5 + resolution: "@vitest/pretty-format@npm:2.0.5" dependencies: tinyrainbow: ^1.2.0 - checksum: a0dbfea5a1379aa1b69ee208116bd88e39edccb7e2f71be56f85868495217b2d8c0284ecba81a6f66f8e78a6d50b9f2c2fc3f3bc2114e909b7b43b96fdee7042 + checksum: d60346001180e5bb3c53be4b4d0b6d9352648b066641d5aba7b97d7c97a8e252dc934204d58818330262a65f07127455fc5f3b5f7e3647c60f6ff302a725733b languageName: node linkType: hard -"@vitest/runner@npm:2.0.4": - version: 2.0.4 - resolution: "@vitest/runner@npm:2.0.4" +"@vitest/runner@npm:2.0.5": + version: 2.0.5 + resolution: "@vitest/runner@npm:2.0.5" dependencies: - "@vitest/utils": 2.0.4 + "@vitest/utils": 2.0.5 pathe: ^1.1.2 - checksum: 313030973a80766de9bed1ed6f4342c5320d9b9dfcf97bc8d61899a41a916e8f5d2aa2ab727023372ad057ca5f95daae3820535f1124e0651814ce7045883414 + checksum: 4d6c23ea77ada83d70cb8cfd20b17cd0b9a375bc70b95466acee822734e203952931319abf167abcdba33dca415affed71d98d3f7212e1812dbf81e540fae4a4 languageName: node linkType: hard -"@vitest/snapshot@npm:2.0.4": - version: 2.0.4 - resolution: "@vitest/snapshot@npm:2.0.4" +"@vitest/snapshot@npm:2.0.5": + version: 2.0.5 + resolution: "@vitest/snapshot@npm:2.0.5" dependencies: - "@vitest/pretty-format": 2.0.4 + "@vitest/pretty-format": 2.0.5 magic-string: ^0.30.10 pathe: ^1.1.2 - checksum: af9bd9da387dca25c13d6b8323d9e574ce3be19b7965ef26c427394e07ca7c7d291d3d52e65c90cf2bcafbfe673a70d362c526597150fe4407d5c13f9cf47412 + checksum: 468d040106aa186a63ff3a86ce6bf333d52de83a2d906dc8c7c5c63406f2ecb46850ac5d69f5838a15764094946963962fa963d64c62a1a8a127ba20496fa3f1 languageName: node linkType: hard @@ -4580,20 +4691,20 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:2.0.4": - version: 2.0.4 - resolution: "@vitest/spy@npm:2.0.4" +"@vitest/spy@npm:2.0.5": + version: 2.0.5 + resolution: "@vitest/spy@npm:2.0.5" dependencies: tinyspy: ^3.0.0 - checksum: 097cef445965e4145993f0436007116f5c56da6e02d51f9c7f18c56fb9ae05c045c627b75a34609b4f39901f2f8e9acf54dae94b490db3c4b1656c0e4fbf5847 + checksum: a010dec99146832a2586c639fccf533b194482f6f25ffb2d64367598a4e77d094aedd3d82cdb55fc1a3971649577a039513ccf8dc1571492e5982482c530c7b9 languageName: node linkType: hard -"@vitest/ui@npm:^2.0.4": - version: 2.0.4 - resolution: "@vitest/ui@npm:2.0.4" +"@vitest/ui@npm:^2.0.5": + version: 2.0.5 + resolution: "@vitest/ui@npm:2.0.5" dependencies: - "@vitest/utils": 2.0.4 + "@vitest/utils": 2.0.5 fast-glob: ^3.3.2 fflate: ^0.8.2 flatted: ^3.3.1 @@ -4601,8 +4712,8 @@ __metadata: sirv: ^2.0.4 tinyrainbow: ^1.2.0 peerDependencies: - vitest: 2.0.4 - checksum: 60a9db849662de4fac8109afc02616b235880751432d22b4b9e9a75f75bde1062ecb311ebc7aecb3d47924168a6ed19997deaa2ccf734906316ff108bd102da7 + vitest: 2.0.5 + checksum: a1c0e5484279189e0e0d2b93809932a6fa971224b1677f069d8071c2b953853a11b01eb56009f51ca7a53e61d51f0f1d0a688ba06166533c868f43f41bf96673 languageName: node linkType: hard @@ -4618,15 +4729,15 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:2.0.4": - version: 2.0.4 - resolution: "@vitest/utils@npm:2.0.4" +"@vitest/utils@npm:2.0.5": + version: 2.0.5 + resolution: "@vitest/utils@npm:2.0.5" dependencies: - "@vitest/pretty-format": 2.0.4 + "@vitest/pretty-format": 2.0.5 estree-walker: ^3.0.3 loupe: ^3.1.1 tinyrainbow: ^1.2.0 - checksum: 1f6ce4d80403750e1ed3669de746327cd6626c3a80ba9e30613653521e4c9126d7db5b4ea764a644eb7e933f9fef218816515181deb746c5ed6988c5ea9dde0d + checksum: 6867556dd7e376437e454b96c7e596ec16e141fb00b002b6ce435611ab3d9d1e3f38ebf48b1fc49f4c97f9754ed37abb602de8bf122f4ac0de621a4dbe0a314e languageName: node linkType: hard @@ -5153,14 +5264,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.7.5": - version: 1.7.5 - resolution: "axios@npm:1.7.5" +"axios@npm:^1.7.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 2859fe01437cf133eee35571abc1d4b5224bb13e530e66cb3581ca226e170541dd5eef9f46abb41592cee0a2f54930c9e4978354e0cf1064748fc20d9a05e9d5 + checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe languageName: node linkType: hard @@ -5257,9 +5368,9 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.2": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" dependencies: bytes: 3.1.2 content-type: ~1.0.5 @@ -5269,11 +5380,11 @@ __metadata: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d languageName: node linkType: hard @@ -6549,6 +6660,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -7524,41 +7642,41 @@ __metadata: linkType: hard "express@npm:^4.19.2": - version: 4.19.2 - resolution: "express@npm:4.19.2" + version: 4.20.0 + resolution: "express@npm:4.20.0" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: ~1.0.4 cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 etag: ~1.8.1 finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: ~2.0.7 qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 + checksum: faa11bffa16be97b26d9f38187e569378c01cad0b92fbd02094fb4e35a224dc5177cc9cc6849141702da80d2d8cbe857c60a7e622e8106695405dc27e38fb3ee languageName: node linkType: hard @@ -9413,9 +9531,9 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^24.1.1": - version: 24.1.1 - resolution: "jsdom@npm:24.1.1" +"jsdom@npm:^25.0.0": + version: 25.0.0 + resolution: "jsdom@npm:25.0.0" dependencies: cssstyle: ^4.0.1 data-urls: ^5.0.0 @@ -9443,7 +9561,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: c3f3c9c8f6ac4ce308de6f005980d0f3da4d504686a0fc20c59760f1e3be714d48adf3d31f8d3a352d8adb4961e6cfebfc6b6c3c9841408cf6e7f8c0cd4dcdc4 + checksum: aa7dc92333f7694c3ddd61685b640f743a61e5e638fcc9c24156e63dc432ab36dbe90137d608c82a3f84d9e05f70c903a38f9e34d6cca1a74469fad4c93f76c2 languageName: node linkType: hard @@ -9661,9 +9779,9 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:^15.2.9": - version: 15.2.9 - resolution: "lint-staged@npm:15.2.9" +"lint-staged@npm:^15.2.10": + version: 15.2.10 + resolution: "lint-staged@npm:15.2.10" dependencies: chalk: ~5.3.0 commander: ~12.1.0 @@ -9671,13 +9789,13 @@ __metadata: execa: ~8.0.1 lilconfig: ~3.1.2 listr2: ~8.2.4 - micromatch: ~4.0.7 + micromatch: ~4.0.8 pidtree: ~0.6.0 string-argv: ~0.3.2 yaml: ~2.5.0 bin: lint-staged: bin/lint-staged.js - checksum: 7f804c24d0374b48d26f11a051342141b84c9954f77225bab5ae221b1e4d47a72f722f39b13169267592c28b2614ad39f9722fd86bc4cdfdf93e8601ff66b0e1 + checksum: 7ab255b848478ca47c6b94aad0e7a3cfe5ba48ae1fb353cfa86635741333b83b1fd793d7cac6d44bf0388ad087d7e0250c7ec0a8ebece63fbcf7a8d175279809 languageName: node linkType: hard @@ -10182,10 +10300,10 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 languageName: node linkType: hard @@ -10566,7 +10684,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:~4.0.7": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:~4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -11544,10 +11662,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce +"path-to-regexp@npm:0.1.10": + version: 0.1.10 + resolution: "path-to-regexp@npm:0.1.10" + checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c languageName: node linkType: hard @@ -11691,27 +11809,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.46.1": - version: 1.46.1 - resolution: "playwright-core@npm:1.46.1" +"playwright-core@npm:1.47.0": + version: 1.47.0 + resolution: "playwright-core@npm:1.47.0" bin: playwright-core: cli.js - checksum: 99a03f97d76af02b0565aa09758eb03427e13497ef7e9e9044fd1184a5f050e7545a517dd7ad8988a68b3ea76e2ba0d411f81e410b1cb29f5ac9161c49689822 + checksum: 64c6adae3ba76cd9f05e6569b1350a6e6990fd8236bb17d1f241b49bea68592a4f4390adb38863d2ee8ef5124e9cb77ff50b9076f8ef3a0890b2a37f87fb842a languageName: node linkType: hard -"playwright@npm:1.46.1": - version: 1.46.1 - resolution: "playwright@npm:1.46.1" +"playwright@npm:1.47.0": + version: 1.47.0 + resolution: "playwright@npm:1.47.0" dependencies: fsevents: 2.3.2 - playwright-core: 1.46.1 + playwright-core: 1.47.0 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 9e721cb27f919cd92ea8c7461f4a8e97e32eade9da036baa4747f483549e33a8d77585f51e228d6639a1e28a76b0c1d59ca0a05dbd07aa3cfe427be7aaeb9ec8 + checksum: e055fee751035f306a636267d0e080f08d4a523a6c1e3ebb01c91c18838c29bb9165ec3e63eb706798886fa2715f272dec908a7e2e1abcd7a55984688dbac2db languageName: node linkType: hard @@ -11749,7 +11867,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.38, postcss@npm:^8.4.39": +"postcss@npm:^8.3.11, postcss@npm:^8.4.38": version: 8.4.39 resolution: "postcss@npm:8.4.39" dependencies: @@ -11760,14 +11878,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.41": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" +"postcss@npm:^8.4.43, postcss@npm:^8.4.45": + version: 8.4.45 + resolution: "postcss@npm:8.4.45" dependencies: nanoid: ^3.3.7 picocolors: ^1.0.1 source-map-js: ^1.2.0 - checksum: f865894929eb0f7fc2263811cc853c13b1c75103028b3f4f26df777e27b201f1abe21cb4aa4c2e901c80a04f6fb325ee22979688fe55a70e2ea82b0a517d3b6f + checksum: 3223cdad4a9392c0b334ee3ee7e4e8041c631cb6160609cef83c18d2b2580e931dd8068ab13cc6000c1a254d57492ac6c38717efc397c5dcc9756d06bc9c44f3 languageName: node linkType: hard @@ -11926,6 +12044,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: ^1.0.6 + checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -12057,11 +12184,11 @@ __metadata: dependencies: "@mdx-js/react": ^3.0.1 "@mdx-js/rollup": ^3.0.1 - "@microsoft/applicationinsights-react-js": ^17.3.1 - "@microsoft/applicationinsights-web": ^3.3.1 + "@microsoft/applicationinsights-react-js": ^17.3.2 + "@microsoft/applicationinsights-web": ^3.3.2 "@okta/okta-react": ^6.9.0 - "@okta/okta-signin-widget": ^7.21.2 - "@playwright/test": ^1.46.1 + "@okta/okta-signin-widget": ^7.23.0 + "@playwright/test": ^1.47.0 "@rest-hooks/rest": ^3.0.3 "@rest-hooks/test": ^7.3.1 "@storybook/addon-a11y": ^8.2.9 @@ -12077,13 +12204,13 @@ __metadata: "@storybook/react-vite": ^8.2.9 "@storybook/testing-library": ^0.2.2 "@storybook/theming": ^8.2.9 - "@tanstack/react-query": ^5.51.23 - "@tanstack/react-query-devtools": ^5.51.23 + "@tanstack/react-query": ^5.55.4 + "@tanstack/react-query-devtools": ^5.55.4 "@testing-library/dom": ^10.4.0 - "@testing-library/jest-dom": ^6.4.8 - "@testing-library/react": ^16.0.0 + "@testing-library/jest-dom": ^6.5.0 + "@testing-library/react": ^16.0.1 "@testing-library/user-event": ^14.5.2 - "@trussworks/react-uswds": ^9.0.0 + "@trussworks/react-uswds": ^9.1.0 "@types/dompurify": ^3.0.5 "@types/dotenv-flow": ^3.3.3 "@types/downloadjs": ^1.4.6 @@ -12092,19 +12219,19 @@ __metadata: "@types/lodash": ^4.17.7 "@types/mdx": ^2.0.13 "@types/node": ^20.12.5 - "@types/react": 18.3.3 + "@types/react": 18.3.5 "@types/react-dom": ^18.3.0 "@types/react-router-dom": ^5.3.3 "@types/react-scroll-sync": ^0.9.0 - "@types/sanitize-html": ^2.11.0 + "@types/sanitize-html": ^2.13.0 "@typescript-eslint/eslint-plugin": ^7.17.0 "@typescript-eslint/parser": ^7.17.0 "@uswds/uswds": 3.7.1 "@vitejs/plugin-react": ^4.3.1 - "@vitest/coverage-istanbul": ^2.0.4 - "@vitest/ui": ^2.0.4 + "@vitest/coverage-istanbul": ^2.0.5 + "@vitest/ui": ^2.0.5 autoprefixer: ^10.4.20 - axios: ^1.7.5 + axios: ^1.7.7 browserslist: ^4.23.3 browserslist-useragent-regexp: ^4.1.3 chromatic: ^11.7.1 @@ -12133,8 +12260,8 @@ __metadata: history: ^5.3.0 html-to-text: ^9.0.5 husky: ^9.1.5 - jsdom: ^24.1.1 - lint-staged: ^15.2.9 + jsdom: ^25.0.0 + lint-staged: ^15.2.10 lodash: ^4.17.21 mockdate: ^3.0.5 msw: ^2.3.5 @@ -12142,7 +12269,7 @@ __metadata: npm-run-all: ^4.1.5 otpauth: ^9.3.2 patch-package: ^8.0.0 - postcss: ^8.4.41 + postcss: ^8.4.45 prettier: ^3.3.3 react: ^18.3.1 react-dom: ^18.3.1 @@ -12152,8 +12279,8 @@ __metadata: react-loader-spinner: ^6.1.6 react-markdown: ^9.0.1 react-query-kit: ^3.3.0 - react-router: ^6.25.1 - react-router-dom: ^6.25.1 + react-router: ^6.26.1 + react-router-dom: ^6.26.1 react-scroll-sync: ^0.11.2 react-toastify: ^10.0.5 rehype-raw: ^7.0.0 @@ -12163,20 +12290,20 @@ __metadata: remark-mdx-toc: ^0.3.1 rest-hooks: ^6.1.7 sanitize-html: ^2.13.0 - sass: ^1.77.8 + sass: ^1.78.0 storybook: ^8.2.9 storybook-addon-remix-react-router: ^3.0.0 ts-node: ^10.9.2 tslib: ^2.6.3 - tsx: ^4.17.0 + tsx: ^4.19.0 typescript: ^5.5.4 undici: ^6.19.8 use-deep-compare-effect: ^1.8.1 uuid: ^10.0.0 - vite: ^5.3.4 - vite-plugin-checker: ^0.7.2 + vite: ^5.4.3 + vite-plugin-checker: ^0.8.0 vite-plugin-svgr: ^4.2.0 - vitest: ^2.0.4 + vitest: ^2.0.5 web-vitals: ^3.4.0 languageName: unknown linkType: soft @@ -12294,27 +12421,27 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.25.1": - version: 6.25.1 - resolution: "react-router-dom@npm:6.25.1" +"react-router-dom@npm:^6.26.1": + version: 6.26.1 + resolution: "react-router-dom@npm:6.26.1" dependencies: - "@remix-run/router": 1.18.0 - react-router: 6.25.1 + "@remix-run/router": 1.19.1 + react-router: 6.26.1 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: fac768bc02cc0f39f5c1f022c8e7323ce9ffcc9b8e80456b51a70ff765854444cb4e6cdbf7d4132064a8fcbeeabeb82b8802614fbe66d8cbe7408e23ee33d789 + checksum: e393ab62e3239585d44d598e6bc8cc138ac8353f3dc46262680c6ad83dea35773662ada2f1c353921a05c37d1f369c0a2cb097848a6210689e9b6076550c7de0 languageName: node linkType: hard -"react-router@npm:6.25.1, react-router@npm:^6.25.1": - version: 6.25.1 - resolution: "react-router@npm:6.25.1" +"react-router@npm:6.26.1, react-router@npm:^6.26.1": + version: 6.26.1 + resolution: "react-router@npm:6.26.1" dependencies: - "@remix-run/router": 1.18.0 + "@remix-run/router": 1.19.1 peerDependencies: react: ">=16.8" - checksum: 2abbab5ecc5d1210f70980571326fd1956da3898b78bfcce6229e346e658dd42ec75bea1caea6aa45607ef677e442f3241dc3fb839293f276fa4bd466870aadd + checksum: 810949febc1bf2a6f8dd65f4c0532a2413d0532df462b3e78891aec81dca5a088d387b32c9922cde52bd9770f32263590993cab2383c94ddc1cdb50a20fd7adc languageName: node linkType: hard @@ -12875,6 +13002,69 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.21.2 + resolution: "rollup@npm:4.21.2" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.21.2 + "@rollup/rollup-android-arm64": 4.21.2 + "@rollup/rollup-darwin-arm64": 4.21.2 + "@rollup/rollup-darwin-x64": 4.21.2 + "@rollup/rollup-linux-arm-gnueabihf": 4.21.2 + "@rollup/rollup-linux-arm-musleabihf": 4.21.2 + "@rollup/rollup-linux-arm64-gnu": 4.21.2 + "@rollup/rollup-linux-arm64-musl": 4.21.2 + "@rollup/rollup-linux-powerpc64le-gnu": 4.21.2 + "@rollup/rollup-linux-riscv64-gnu": 4.21.2 + "@rollup/rollup-linux-s390x-gnu": 4.21.2 + "@rollup/rollup-linux-x64-gnu": 4.21.2 + "@rollup/rollup-linux-x64-musl": 4.21.2 + "@rollup/rollup-win32-arm64-msvc": 4.21.2 + "@rollup/rollup-win32-ia32-msvc": 4.21.2 + "@rollup/rollup-win32-x64-msvc": 4.21.2 + "@types/estree": 1.0.5 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: ac83ca15495dd00d6b910e87e7f5f2c480d36977471ec11e3d207089e0aa207d34fc9bd0270f7804b268a7f7473d3bc6b65bccf474fbd1d1826a70bde2741894 + languageName: node + linkType: hard + "rrweb-cssom@npm:^0.6.0": version: 0.6.0 resolution: "rrweb-cssom@npm:0.6.0" @@ -12956,16 +13146,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:^1.77.8": - version: 1.77.8 - resolution: "sass@npm:1.77.8" +"sass@npm:^1.78.0": + version: 1.78.0 + resolution: "sass@npm:1.78.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 6b5dce17faa1bd1e349b4825bf7f76559a32f3f95d789cd2847623c88ee9635e1485d3458532a05fa5b9134cfbce79a4bad3f13dc63c2433632347674db0abae + checksum: ea856bd224c85d831a5800195750c2dd008d101771d071dbaca886c47fe4f131c30c328755d7a974ad944ba5b3aafa7a9f6010952da306436dcebddb41580e1c languageName: node linkType: hard @@ -13053,15 +13243,36 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f + languageName: node + linkType: hard + +"serve-static@npm:1.16.0": + version: 1.16.0 + resolution: "serve-static@npm:1.16.0" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + checksum: a479dfe7e9fa7e8cb3ceccb0d944a3c72bb8f88d78472e30989f58fe15a92cfc909ab05a5c7cda2d1a6aa2663ab503ad1e2f40653740346e53e72b3ba41b6951 languageName: node linkType: hard @@ -14090,9 +14301,9 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.17.0": - version: 4.17.0 - resolution: "tsx@npm:4.17.0" +"tsx@npm:^4.19.0": + version: 4.19.0 + resolution: "tsx@npm:4.19.0" dependencies: esbuild: ~0.23.0 fsevents: ~2.3.3 @@ -14102,7 +14313,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: 36fb12cef74b177d11601f04aa1b768e7ce74ad0c4d8983a6050c6e19657a30362b07ac84ac5796fd1923b51904e801b42d26768a563a6139b310f8ffb0f08b1 + checksum: 950e502265d3af1d3a95dc155ecba6bc4feaf0ec38fd5e94777c5e090b5d5ac47eda7c93f8cb97c31782b65a6ff889a851dd07340f4f0e9de45259a5d7592ff3 languageName: node linkType: hard @@ -14717,9 +14928,9 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:2.0.4": - version: 2.0.4 - resolution: "vite-node@npm:2.0.4" +"vite-node@npm:2.0.5": + version: 2.0.5 + resolution: "vite-node@npm:2.0.5" dependencies: cac: ^6.7.14 debug: ^4.3.5 @@ -14728,13 +14939,13 @@ __metadata: vite: ^5.0.0 bin: vite-node: vite-node.mjs - checksum: 1e40f2a6eb977fdb77a56b4cb71de0c329b9214bff9db2bedca6186626d70a70e2f3878acad3311e28d718b97e804de3e6795aab846bcb74ea66d4cba5ff48cd + checksum: 30071f1cd3d3b78fd52726d66d18d81b63b321dee70d03c259db959a72f46dce2d71f12a85eaf503497f562ce11fea51197a74888d5892d3c7f3ad0ef093ec25 languageName: node linkType: hard -"vite-plugin-checker@npm:^0.7.2": - version: 0.7.2 - resolution: "vite-plugin-checker@npm:0.7.2" +"vite-plugin-checker@npm:^0.8.0": + version: 0.8.0 + resolution: "vite-plugin-checker@npm:0.8.0" dependencies: "@babel/code-frame": ^7.12.13 ansi-escapes: ^4.3.0 @@ -14760,7 +14971,7 @@ __metadata: vite: ">=2.0.0" vls: "*" vti: "*" - vue-tsc: ">=2.0.0" + vue-tsc: ~2.1.6 peerDependenciesMeta: "@biomejs/biome": optional: true @@ -14780,7 +14991,7 @@ __metadata: optional: true vue-tsc: optional: true - checksum: 91e15bfa9d259cb69cca0590e45e3fc36214918634ec3f5fc413f30277b0b2e9f08a60009d7d1a8e01562f23b0c4a2cb34aedccf9453270c4e4599afd6fa036a + checksum: f7a21be71256efe4e835a3945760e2ac220d5f8f3353b7df10fe02396d2e92a0e15226816843748b9fb1f5aca3ed1d588eba1070de08dee57e43fec4e3ceb8ae languageName: node linkType: hard @@ -14837,19 +15048,20 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.3.4": - version: 5.3.4 - resolution: "vite@npm:5.3.4" +"vite@npm:^5.4.3": + version: 5.4.3 + resolution: "vite@npm:5.4.3" dependencies: esbuild: ^0.21.3 fsevents: ~2.3.3 - postcss: ^8.4.39 - rollup: ^4.13.0 + postcss: ^8.4.43 + rollup: ^4.20.0 peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" lightningcss: ^1.21.0 sass: "*" + sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -14865,6 +15077,8 @@ __metadata: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -14873,21 +15087,21 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 2dfbab98daf91b86b3d3e535add1d6a982f7087df62f8f4bc219f3ae91a97f38c04683a32ba2457618e804fa93380090ddda5b0c9823a94bdcb53d6044b04732 + checksum: 3a28bcb09345030d2dba41b93b6b8a3aac8f19a9336c50e7e5f5e30931fbb16193cdd97814c5c0d1b5ade3b3e763b329eb881ea5cfe6e422c669d21a304f3295 languageName: node linkType: hard -"vitest@npm:^2.0.4": - version: 2.0.4 - resolution: "vitest@npm:2.0.4" +"vitest@npm:^2.0.5": + version: 2.0.5 + resolution: "vitest@npm:2.0.5" dependencies: "@ampproject/remapping": ^2.3.0 - "@vitest/expect": 2.0.4 - "@vitest/pretty-format": ^2.0.4 - "@vitest/runner": 2.0.4 - "@vitest/snapshot": 2.0.4 - "@vitest/spy": 2.0.4 - "@vitest/utils": 2.0.4 + "@vitest/expect": 2.0.5 + "@vitest/pretty-format": ^2.0.5 + "@vitest/runner": 2.0.5 + "@vitest/snapshot": 2.0.5 + "@vitest/spy": 2.0.5 + "@vitest/utils": 2.0.5 chai: ^5.1.1 debug: ^4.3.5 execa: ^8.0.1 @@ -14898,13 +15112,13 @@ __metadata: tinypool: ^1.0.0 tinyrainbow: ^1.2.0 vite: ^5.0.0 - vite-node: 2.0.4 + vite-node: 2.0.5 why-is-node-running: ^2.3.0 peerDependencies: "@edge-runtime/vm": "*" "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 2.0.4 - "@vitest/ui": 2.0.4 + "@vitest/browser": 2.0.5 + "@vitest/ui": 2.0.5 happy-dom: "*" jsdom: "*" peerDependenciesMeta: @@ -14922,7 +15136,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: d00015d1518e297283fc939dc2d30e95258bda65cae9146e82380c87ac0cafd8bb892882516a4940d628afc835fc20e55c8be30f30c8bcaba93e20568dbb3744 + checksum: 4709e7678d89f957d9bd8e4dd2f99734857df03e22d38d9c3986a75f608205572b73c2faaf059ed41a2dccbc5c65f6717bf66594d6459cf2e57ab175be9aebc1 languageName: node linkType: hard diff --git a/prime-router/build.gradle.kts b/prime-router/build.gradle.kts index f470edb4efa..90a5971f314 100644 --- a/prime-router/build.gradle.kts +++ b/prime-router/build.gradle.kts @@ -23,7 +23,9 @@ import org.apache.commons.io.FilenameUtils import org.apache.tools.ant.filters.ReplaceTokens import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jooq.meta.jaxb.ForcedType +import java.io.ByteArrayOutputStream import java.io.FileInputStream +import java.nio.charset.StandardCharsets import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.Properties @@ -99,7 +101,8 @@ val reportsApiEndpointHost = ( val devAzureConnectString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=" + "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=" + - "http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + "http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + + "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" val env = mutableMapOf( "AzureWebJobsStorage" to devAzureConnectString, @@ -497,9 +500,22 @@ tasks.azureFunctionsPackage { finalizedBy("copyAzureScripts") } +tasks.register("generateVersionFile") { + doLast { + val stdout = ByteArrayOutputStream() + exec { + commandLine("git", "rev-parse", "--short", "HEAD") + standardOutput = stdout + } + val currentCommit = stdout.toString(StandardCharsets.UTF_8).trim() + File(buildDir, "$azureFunctionsDir/$azureAppName/version.json").writeText("{\"commitId\": \"$currentCommit\"}") + } +} + val azureResourcesTmpDir = File(buildDir, "$azureFunctionsDir-resources/$azureAppName") val azureResourcesFinalDir = File(buildDir, "$azureFunctionsDir/$azureAppName") tasks.register("gatherAzureResources") { + dependsOn("generateVersionFile") from("./") into(azureResourcesTmpDir) include("metadata/**/*.yml") diff --git a/prime-router/docs/api/reports.yml b/prime-router/docs/api/reports.yml index e3475f53e21..2a860227aa8 100644 --- a/prime-router/docs/api/reports.yml +++ b/prime-router/docs/api/reports.yml @@ -118,6 +118,36 @@ paths: $ref: '#/components/schemas/Report' '500': description: Internal Server Error + /reports/download: + get: + summary: Downloads a message based on the report id + security: + - OAuth2: [ system_admin ] + parameters: + - in: query + name: reportId + description: The report id to look for to download. + schema: + type: string + required: true + example: e491f4fb-f2c5-4473-8db2-206ea04991e8 + - in: query + name: removePII + description: Boolean that determines if PII will be removed from the message. If missing will default to true. + Required to be true if prod env. + required: false + schema: + type: boolean + example: true + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Report' + '500': + description: Internal Server Error # Building components: schemas: diff --git a/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md b/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md index 448d9454a2e..4b839860dfd 100644 --- a/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md +++ b/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md @@ -59,8 +59,8 @@ Here's a list of environment variables that are used at the time of writing this CREDENTIAL_STORAGE_METHOD=HASHICORP_VAULT VAULT_TOKEN= VAULT_API_ADDR=http://localhost:8200 -AzureWebJobsStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" -PartnerStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" +AzureWebJobsStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" +PartnerStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" POSTGRES_USER=prime POSTGRES_PASSWORD=changeIT! POSTGRES_URL=jdbc:postgresql://localhost:5432/prime_data_hub diff --git a/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md b/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md new file mode 100644 index 00000000000..9d22507f9ef --- /dev/null +++ b/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md @@ -0,0 +1,180 @@ +This file documents the types of transforms currently being used by Engagement. This document does not recommend any particular method of acheiving the needed transformations or purport to show best practices. This is simply to document how things have been accomplished so far. + +## Types of FHIR->HL7 transforms currently used + +Default value in field - Default a static value into a single field or subfield +```yaml + - name: ak-receiving-application + value: [ '"AKDOH"' ] + hl7Spec: [ 'MSH-5-1' ] +``` + +Replace value in single field/subfield with empty string +```yaml + - name: ak-ordering-provider-id-number + value: [ '""' ] + hl7Spec: [ '/PATIENT_RESULT/ORDER_OBSERVATION/OBR-16-1' ] +``` + +Replace value in multiple fields/subfields with empty string +```yaml + - name: remove-hl7-fields + value: [ '""' ] + hl7Spec: [ 'MSH-19-1' , 'MSH-19-2' , 'MSH-19-3' , '%{ORC}-2-1' , '%{ORC}-2-2' , '%{ORC}-2-3' , '%{ORC}-2-4' , '%{ORC}-4-1' , '%{ORC}-4-2' , '%{ORC}-4-3' , '%{ORC}-4-4' , '%{OBR}-2-1' , '%{OBR}-2-2' , '%{OBR}-2-3' , '%{OBR}-2-4' ] +``` + +Modify value - Change the format of a value in a single field or subfield +```yaml +- name: obx-value-dtm-dt + condition: '%context.extension(%`rsext-obx-observation`).extension.where(url = "OBX.2").value = "DT"' + value: [ '%resource.value.extension(%`rsext-hl7v2-date-time`).value.toString().replace("-","")' ] + hl7Spec: [ '%{hl7OBXField}-5' ] +``` + +Modify value based on valueset - Correlate a set of values to another set of values +```yaml + - name: ak-patient-ethnicity-identifier-code + value: + - 'Bundle.entry.resource.ofType(Patient).extension(%`rsext-ethnic-group`).value.coding[0].code' + hl7Spec: [ '/PATIENT_RESULT/PATIENT/PID-22-1' ] + valueSet: + values: + H: 2135-2 + N: 2186-5 +``` + +Use customFhirFunction to correlate FHir valuesets with HL7 valuesets +```yaml + - name: ak-patient-race-coding-system + resource: 'Bundle.entry.resource.ofType(Patient).extension("http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd").value.coding' + condition: '%resource.code.exists()' + value: [ '%resource.system.getCodingSystemMapping()' ] + hl7Spec: [ '/PATIENT_RESULT/PATIENT/PID-10-3' ] +``` + +Override base mappings to prevent certain segments/fields from being mapped to outbound HL7 +```yaml + - name: obx-equipment-instance-identifier + condition: 'false' +``` + +Override base mappings to prevent a field in specific datatype from being mapped to outbound hl7 +```yaml + - name: xtn-extension-value + resource: '%resource.extension(%`rsext-xtn-contact-point`)' + schema: classpath:/metadata/hl7_mapping/receivers/Common/remove-xtn-1/XTNExtension.yml +``` +```yaml +elements: + + - name: xtn-2-telecom-use-code + value: [ '%resource.extension("XTN.2").value' ] + hl7Spec: [ '%{hl7TelecomPath}-2' ] + + - name: xtn-3-telecom-equipment-type + value: [ '%resource.extension("XTN.3").value' ] + hl7Spec: [ '%{hl7TelecomPath}-3' ] + + - name: xtn-4-communication-address + value: [ '%resource.extension("XTN.4").value' ] + hl7Spec: [ '%{hl7TelecomPath}-4' ] + + - name: xtn-7-local-number + value: [ '%resource.extension("XTN.7").value' ] + hl7Spec: [ '%{hl7TelecomPath}-7' ] + + - name: xtn-9-any-text + value: [ '%resource.extension("XTN.9").value' ] + hl7Spec: [ '%{hl7TelecomPath}-9' ] + + - name: xtn-12-unformatted-telephone-number + value: [ '%resource.extension("XTN.12").value' ] + hl7Spec: [ '%{hl7TelecomPath}-12' ] +``` + +Override base mappings to create segments/fields in a specific format/ordering +```yaml + - name: ca-order-observations + resource: 'Bundle.entry.resource.ofType(DiagnosticReport)' + condition: '%resource.count() > 0' + schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-order-observation.yml + resourceIndex: orderIndex +``` +```yaml +constants: + hl7Order: '/PATIENT_RESULT/ORDER_OBSERVATION(%{orderIndex})' + diagnostic: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex]' + service: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex].basedOn.resolve()' + specimen: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex].specimen.resolve()' +elements: + - name: ca-observation-result + resource: '%resource.result.resolve()' + schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-observation-result.yml + resourceIndex: resultIndex +``` +```yaml +constants: + hl7ObservationPath: '/PATIENT_RESULT/ORDER_OBSERVATION(%{orderIndex})/OBSERVATION(%{resultIndex})' + rsext: '"https://reportstream.cdc.gov/fhir/StructureDefinition/"' + observation: '%diagnostic.result[%resultIndex].resolve()' +elements: + + # California requirement: Move all regular notes and AOE questions between last OBX segment and SPM + # as NTE segments + # To do that we have to compare the Observation index against the Observation count + # to make sure is the last OBX segment and only add notes and AOE questions to that segment + - name: ca-order-observation-note + resource: '%diagnostic.result.resolve().note.text.split(''\n'') | %service.note.text.split(''\n'') | %service.supportingInfo.resolve()' + condition: >- + (Bundle.entry.resource.ofType(Observation).note.exists() or %service.note.exists() or %service.supportingInfo.exists()) + and (%diagnostic.result.count() - 1) = %resultIndex + schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-order-note.yml + resourceIndex: noteIndex + constants: + hl7NotePath: '%{hl7ObservationPath}' +``` +```yaml +elements: + - name: aoe-note + condition: '%resource is Observation' + schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-aoe-note.yml + + - name: note + condition: '%resource is string' + schema: classpath:/metadata/hl7_mapping/datatypes/annotation/NTE.yml + constants: + noteDetails: '%resource.note' +``` +```yaml +constants: + caAoeNteFieldPath: '%{hl7NotePath}/NTE(%{noteIndex})' + commentCondition: '%resource.code.coding.code.exists() and %resource.code.text.exists()' +elements: + - name: aoe-note-id + value: [ '%noteIndex + 1' ] + hl7Spec: [ '%{caAoeNteFieldPath}-1' ] + + - name: aoe-note-source + value: + - '"L"' + hl7Spec: [ '%{caAoeNteFieldPath}-2' ] + + - name: aoe-note-comment-datetime + condition: '%resource.value.exists() and %resource.value is dateTime and %commentCondition' + value: [ '%resource.code.coding.code + " " + %resource.code.text + ": " + %resource.value.toString()' ] + hl7Spec: [ '%{caAoeNteFieldPath}-3' ] + + - name: aoe-note-comment-string + condition: '%resource.value.exists() and %resource.value is string and %commentCondition' + value: [ '%resource.code.coding.code + " " + %resource.code.text + ": " + %resource.value' ] + hl7Spec: [ '%{caAoeNteFieldPath}-3' ] + + - name: aoe-note-comment-cwe + condition: '%resource.value.exists() and %resource.value is CodeableConcept and %commentCondition' + value: [ '%resource.code.coding.code + + " " + %resource.code.text + + ": " + %resource.value.coding.display + + " " + %resource.value.coding.code + + " " + %resource.value.coding.system.getCodingSystemMapping()' ] + hl7Spec: [ '%{caAoeNteFieldPath}-3' ] +``` diff --git a/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md b/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md index 6e5744e5d11..8198868c336 100644 --- a/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md +++ b/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md @@ -107,7 +107,7 @@ v251. That presents the opportunity for reuse. 1. Review existing data type mappings located in `prime-router/metadata/HL7/datatypes/` for reuse 2. Add folder to `prime-router/metadata/HL7/` with a name indicating the new conformance profile -3. Copy folder `fhir` from `prime-router/metadata/HL7/v251-elr` and add to your new mapping folder. +3. Copy folder `fhir` from `prime-router/metadata/HL7/catchall` and add to your new mapping folder. 4. Create folder `hl7` in your new mapping folder with the following sub-folders: - "message" - **required** - within that, add a yml file named with the HL7 message type (ex ORU_R01, ORM_O01, ADT_A01, etc.) diff --git a/prime-router/docs/universal-pipeline/README.md b/prime-router/docs/universal-pipeline/README.md index 2a8e775e2dd..f854ccff2d4 100644 --- a/prime-router/docs/universal-pipeline/README.md +++ b/prime-router/docs/universal-pipeline/README.md @@ -104,8 +104,8 @@ In the Convert case above, `messagesToSend` is a list of `FHIRConvertMessage` ob messagesToSend.add( FhirConvertMessage( report.id, - blobInfo.blobUrl, - BlobAccess.digestToString(blobInfo.digest), + blobInfo.blobUrl, + BlobUtils.digestToString(blobInfo.digest), message.blobSubFolderName, message.topic ) diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml deleted file mode 100644 index 36421f3188a..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml +++ /dev/null @@ -1,112 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - generateList: true - expressionType: nested - vars: - code: String, CE.1 - display: String, CE.2 - system: SYSTEM_URL, CE.3 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CE.1 - display: - type: String - expressionType: HL7Spec - valueOf: CE.2 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CE.3 - extension_ce-coding: - generateList: true - condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: ce-coding - valueString: - value: coding - extension_ce-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CE.3 - expressionsMap: - url: - type: SYSTEM_URL - value: ce-coding-system - valueString: - value: $coding-system - -coding_alt: - generateList: true - expressionType: nested - vars: - altCode: String, CE.4 - altDisplay: String, CE.5 - altSystem: SYSTEM_URL, CE.6 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CE.4 - display: - type: String - expressionType: HL7Spec - valueOf: CE.5 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CE.6 - extension_ce-coding: - condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: ce-coding - valueString: - value: alt-coding - extension_ce-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CE.6 - expressionsMap: - url: - type: SYSTEM_URL - value: ce-coding-system - valueString: - value: $coding-system - -extension: - generateList: true - expressionType: nested - expressions: - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml deleted file mode 100644 index 1250b162be6..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml +++ /dev/null @@ -1,175 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - generateList: true - expressionType: nested - vars: - code: String, CNE.1 - display: String, CNE.2 - system: SYSTEM_URL, CNE.3 - version: String, CNE.7 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CNE.1 - display: - type: String - expressionType: HL7Spec - valueOf: CNE.2 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CNE.3 - version: - type: String - expressionType: HL7Spec - valueOf: CNE.7 - extension_CNE-coding: - condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: CNE-coding - valueString: - value: coding - extension_CNE-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CNE.3 - expressionsMap: - url: - type: SYSTEM_URL - value: CNE-coding-system - valueString: - value: $coding-system - -coding_alt: - generateList: true - expressionType: nested - vars: - altCode: String, CNE.4 - altDisplay: String, CNE.5 - altSystem: SYSTEM_URL, CNE.6 - altVersion: String, CNE.8 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CNE.4 - display: - type: String - expressionType: HL7Spec - valueOf: CNE.5 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CNE.6 - version: - type: String - expressionType: HL7Spec - valueOf: CNE.8 - extension_CNE-coding: - condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: CNE-coding - valueString: - value: alt-coding - extension_CNE-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CNE.6 - expressionsMap: - url: - type: SYSTEM_URL - value: CNE-coding-system - valueString: - value: $coding-system - -coding_secondary-alt: - generateList: true - expressionType: nested - vars: - secondaryAltCode: String, CWE.10 - secondaryAltDisplay: String, CWE.11 - secondaryAltSystem: SYSTEM_URL, CWE.12 - secondaryAltVersion: String, CWE.13 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.10 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.11 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.12 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.13 - extension_cne-coding: - condition: $secondaryAltCode NOT_NULL || $secondaryAltDisplay NOT_NULL || $secondaryAltSystem NOT_NULL || $secondaryAltVersion NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cne-coding - valueString: - value: secondary-alt-coding - extension_cne-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.12 - expressionsMap: - url: - type: SYSTEM_URL - value: cne-coding-system - valueString: - value: $coding-system - -text: - type: STRING - expressionType: HL7Spec - valueOf: CNE.9 - -extension: - generateList: true - expressionType: nested - expressions: - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml deleted file mode 100644 index 9942d500ee9..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml +++ /dev/null @@ -1,70 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - valueOf: cnn-practitioner - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - cnn3: STRING_ALL, CNN.3 - condition: $cnn3 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: CNN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.3 - - expressionType: nested - vars: - cnn4: STRING_ALL, CNN.4 - condition: $cnn4 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: CNN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.4 - - expressionType: nested - vars: - cnn5: STRING_ALL, CNN.5 - condition: $cnn5 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: CNN.5 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.5 - - expressionType: nested - vars: - cnn7: STRING_ALL, CNN.7 - condition: $cnn7 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: CNN.7 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.7 - - expressionType: nested - vars: - cnn8: STRING_ALL, CNN.8 - condition: $cnn8 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: CNN.8 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.8 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml deleted file mode 100644 index ff3e1ac127a..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml +++ /dev/null @@ -1,98 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Practitioner - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: nested - expressionsMap: - value: - type: STRING - valueOf: CNN.1 - expressionType: HL7Spec - extension_assigningAuthority: - generateList: true - expressionType: nested - vars: - cnn9: CNN.9 - cnn10: CNN.10 - cnn11: CNN.11 - condition: $cnn9 NOT_NULL || $cnn10 NOT_NULL || $cnn11 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - valueOf: assigning-authority - extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: namespace-id - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.9 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: universal-id - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CNN.10 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: universal-id-type - valueCode: - type: STRING - expressionType: HL7Spec - valueOf: CNN.11 - -name: - expressionType: nested - expressionsMap: - family: - type: STRING - valueOf: CNN.2 - expressionType: HL7Spec - given: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: CNN.3 - type: STRING - - expressionType: HL7Spec - valueOf: CNN.4 - type: STRING - suffix: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: CNN.5 - type: STRING - - expressionType: HL7Spec - valueOf: CNN.7 - type: STRING - prefix: - type: STRING - valueOf: CNN.6 - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: resource - valueOf: datatypes/CNN/CNNExtension diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml deleted file mode 100644 index 9237b917fb0..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml +++ /dev/null @@ -1,28 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: BIG_DECIMAL - expressionType: HL7Spec - valueOf: CQ.1 - -unit: - expressionType: nested - expressions: - - type: STRING - expressionType: HL7Spec - valueOf: CQ.2.2 - -extension: - condition: $cq2 NOT_NULL - generateList: true - expressionType: nested - vars: - cq2: STRING_ALL, CQ.2 - expressionsMap: - url: - type: SYSTEM_URL - value: 'cq-units' - valueCodeableConcept: - valueOf: datatypes/CE/CodeableConcept - expressionType: resource - specs: CQ.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml deleted file mode 100644 index 5738d74bbd2..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml +++ /dev/null @@ -1,19 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -text: - type: STRING_ALL - valueOf: CWE - generateList: true - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: 'cwe-annotation' - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml deleted file mode 100644 index 76dd3c2546b..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml +++ /dev/null @@ -1,127 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - generateList: true - expressionType: nested - vars: - code: String, CWE.1 - display: String, CWE.2 - system: SYSTEM_URL, CWE.3 - version: String, CWE.7 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.1 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.2 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.3 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.7 - extension_cwe-coding: - condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding - valueString: - value: coding - extension_cwe-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.3 - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding-system - valueString: - value: $coding-system - -coding_alt: - generateList: true - expressionType: nested - vars: - altCode: String, CWE.4 - altDisplay: String, CWE.5 - altSystem: SYSTEM_URL, CWE.6 - altVersion: String, CWE.8 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.4 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.5 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.6 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.8 - extension_cwe-coding: - condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding - valueString: - value: alt-coding - extension_cwe-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.6 - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding-system - valueString: - value: $coding-system - -text: - type: STRING - expressionType: HL7Spec - valueOf: CWE.9 - -extension: - generateList: true - expressionType: nested - expressions: - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml deleted file mode 100644 index 53e69b95630..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml +++ /dev/null @@ -1,60 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: CWE.1 - system: - type: STRING - expressionType: HL7Spec - valueOf: CWE.3 - -name: - type: STRING - expressionType: HL7Spec - valueOf: CWE.2 | CWE.9 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-organization - valueCodeableConcept: - expressionType: resource - valueOf: datatypes/CWE/CodeableConcept - specs: $BASE_VALUE - - generateList: true - expressionType: nested - condition: $cweOrganizationHL7Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $cweOrganizationHL7Field - - generateList: true - expressionType: nested - condition: $cweOrganizationHL7Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $cweOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml deleted file mode 100644 index 9eb5c811fe1..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: cx-identifier - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $cx5 NOT_NULL - vars: - cx5: CX.5 - expressionsMap: - url: - type: STRING - value: CX.5 - valueString: - type: STRING - valueOf: $cx5 - expressionType: HL7Spec - - expressionType: nested - vars: - cx9: STRING_ALL, CX.9 - condition: $cx9 NOT_NULL - expressionsMap: - url: - type: STRING - value: CX.9 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: CX.9 - - expressionType: nested - vars: - cx10: STRING_ALL, CX.10 - condition: $cx10 NOT_NULL - expressionsMap: - url: - type: STRING - value: CX.10 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: CX.10 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml deleted file mode 100644 index ec5604f1241..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml +++ /dev/null @@ -1,222 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Identifier - -value: - type: STRING - valueOf: CX.1 - expressionType: HL7Spec - -# Checking if HD is an Organization or a System by looking at the ID type. -# If ID type is null or ID type is not ISO or UUID, treat as organization. -# Otherwise, treat as system. -assigner_1: - vars: - cx43: String, CX.4.3 - cx4: STRING_ALL, CX.4 - condition: $cx43 NULL && $cx4 NOT_NULL - valueOf: datatypes/HD/Organization - expressionType: reference - specs: CX.4 - -assigner_2: - vars: - cx43: String, CX.4.3 - condition: $cx43 NOT_NULL && $cx43 NOT_EQUALS ISO && $cx43 NOT_EQUALS UUID - valueOf: datatypes/HD/Organization - expressionType: reference - specs: CX.4 - -system: - vars: - cx41: String, CX.4.1 - cx42: String, CX.4.2 - cx43: String, CX.4.3 - condition: $cx43 EQUALS ISO || $cx43 EQUALS UUID - expressionType: nested - expressions: - - condition: $cx41 NOT_NULL - type: STRING - valueOf: $cx41 - - condition: $cx41 NULL && $cx43 EQUALS ISO - constants: - prefix: "urn:oid:" - vars: - systemURI: $prefix + CX.4.2 - type: STRING - valueOf: $systemURI - - condition: $cx41 NULL && $cx43 EQUALS UUID - constants: - prefix: "urn:uuid:" - vars: - systemURI: $prefix + CX.4.2 - type: STRING - valueOf: $systemURI -_system: - vars: - cx41: String, CX.4.1 - cx42: String, CX.4.2 - cx43: String, CX.4.3 - condition: $cx43 EQUALS ISO || $cx43 EQUALS UUID - expressionType: nested - expressionsMap: - extension_1-namespace-id: - generateList: true - expressionType: nested - condition: $cx41 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - type: STRING - valueOf: $cx41 - expressionType: HL7Spec - extension_2-universal-id: - generateList: true - expressionType: nested - condition: $cx42 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - type: STRING - valueOf: $cx42 - expressionType: HL7Spec - extension_3-universal-id-type: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - type: STRING - valueOf: $cx43 - expressionType: HL7Spec - -type: - expressionType: nested - vars: - code: $code | CX.5 - system: $system - condition: $code NOT_NULL || $system NOT_NULL - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: $code - system: - type: STRING - valueOf: $system - text: - type: STRING - condition: $CXIdentifierText NOT_NULL - valueOf: $CXIdentifierText - -period: - vars: - startDate: CX.7 - endDate: CX.8 - condition: $startDate NOT_NULL || $endDate NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" - expressionType: JEXL - _start: - expressionType: nested - condition: $startDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $startDate - expressionType: HL7Spec - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" - expressionType: JEXL - _end: - expressionType: nested - condition: $endDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $endDate - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: identifier-check-digit - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CX.2 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: naming-system-check-digit - valueString: - type: STRING - expressionType: HL7Spec - valueOf: CX.3 - - expressionType: nested - condition: $cx6 NOT_NULL - vars: - cx6: CX.6 - expressionsMap: - url: - type: SYSTEM_URL - value: assigning-facility - valueReference: - valueOf: datatypes/HD/Organization - expressionType: reference - specs: CX.6 - - expressionType: resource - valueOf: datatypes/CX/CXExtension - - generateList: true - expressionType: nested - condition: $CXIdentifierField NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $CXIdentifierField - - generateList: true - expressionType: nested - condition: $CXIdentifierComponent NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $CXIdentifierComponent diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml deleted file mode 100644 index 3d1da98f2f4..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml +++ /dev/null @@ -1,13 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: RelatedPerson - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: resource - specs: CX - valueOf: datatypes/CX/Identifier \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml deleted file mode 100644 index f207f43e245..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml +++ /dev/null @@ -1,25 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -type: - type: STRING - valueOf: DLD.1 - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: dld2-effective-date - valueString: - valueOf: DLD.2 - type: STRING - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml deleted file mode 100644 index 378bd28002b..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml +++ /dev/null @@ -1,51 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -start: - condition: $dateTimeIn NOT_NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: DR.1 -_start: - expressionType: nested - vars: - dr1: DR.1 - condition: $dr1 NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: DR.1 - expressionType: HL7Spec - -end: - condition: $dateTimeIn NOT_NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: DR.2 -_end: - expressionType: nested - condition: $dr2 NOT_NULL - vars: - dr2: DR.2 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: DR.2 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml deleted file mode 100644 index 40286edae49..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml +++ /dev/null @@ -1,36 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: resource - valueOf: datatypes/ED/EDExtension - - expressionType: nested - vars: - ed2: STRING_ALL, ED.2 - ed3: STRING_ALL, ED.3 - condition: $ed3 NULL && $ed2 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: alternate-codes - valueCodeableConcept: - valueOf: datatypes/ID/CodeableConcept - specs: ED.2 - expressionType: resource - - -contentType: - valueOf: ED.3 - type: STRING - expressionType: HL7Spec - -data: - vars: - ed4: STRING, ED.4 - condition: $ed4 EQUALS Base64 - valueOf: ED.5 - type: STRING - expressionType: HL7Spec - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml deleted file mode 100644 index 6b3e2057fe1..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml +++ /dev/null @@ -1,53 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: ed-attachment - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: resource - valueOf: datatypes/HD/ExtensionHD - specs: ED.1 - constants: - extensionUrl: ED.1 - isStringUrl: true - - expressionType: nested - vars: - ed2: STRING_ALL, ED.2 - ed3: STRING_ALL, ED.3 - condition: $ed3 NOT_NULL && $ed2 NOT_NULL - expressionsMap: - url: - type: STRING - value: ED.2 - valueCodeableConcept: - valueOf: datatypes/ID/CodeableConcept - specs: ED.2 - expressionType: resource - - expressionType: nested - vars: - ed4: STRING, ED.4 - condition: $ed4 NOT_NULL - expressionsMap: - url: - type: STRING - value: ED.4 - valueString: - valueOf: ED.4 - expressionType: HL7Spec - type: STRING - - expressionType: nested - vars: - ed5: STRING, ED.5 - condition: $ed5 NOT_NULL - expressionsMap: - url: - type: STRING - value: ED.5 - valueString: - valueOf: ED.5 - expressionType: HL7Spec - type: STRING \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml deleted file mode 100644 index 1948f302ead..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml +++ /dev/null @@ -1,50 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - expressionType: HL7Spec - type: STRING - valueOf: EI.1 - -assigner: - valueOf: datatypes/HD/Organization - expressionType: reference - specs: $eiAssigningOrganization - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.2 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.3 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.4 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: ei-assigner-organization-type - valueString: - valueOf: 'organization' \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml deleted file mode 100644 index 7298b64f8c3..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml +++ /dev/null @@ -1,21 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - expressionType: HL7Spec - type: STRING - valueOf: EI.1 - -assigner: - expressionType: reference - valueOf: datatypes/EI/Organization - specs: $BASE_VALUE - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: ei-assigner-organization-type - valueString: - valueOf: 'default' \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml deleted file mode 100644 index a130f73960c..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml +++ /dev/null @@ -1,92 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: STRING - valueOf: EI.1 - expressionType: HL7Spec - -type: - condition: $code NOT_NULL || $system NOT_NULL - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: $code - system: - type: STRING - valueOf: $system - -extension_1-assigning-authority: - generateList: true - expressionType: nested - vars: - ei2: EI.2 - ei3: EI.3 - ei4: EI.4 - expressionsMap: - url: - type: SYSTEM_URL - valueOf: assigning-authority - extension_url: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $ei2 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - valueOf: namespace-id - valueString: - type: STRING - expressionType: HL7Spec - valueOf: $ei2 - - expressionType: nested - condition: $ei3 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - valueOf: universal-id - valueString: - type: STRING - expressionType: HL7Spec - valueOf: $ei3 - - expressionType: nested - condition: $ei4 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - valueOf: universal-id-type - valueCode: - type: STRING - expressionType: HL7Spec - valueOf: $ei4 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml deleted file mode 100644 index 069148e051b..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml +++ /dev/null @@ -1,47 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: EI.2 - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: EI.2 - - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: EI.3 - type: - expressionType: resource - specs: EI.4 - valueOf: datatypes/ID/CodeableConcept - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: "EI.3,EI.4" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml deleted file mode 100644 index 90525e16bc8..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml +++ /dev/null @@ -1,60 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - valueOf: $extensionUrl - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - ei1: STRING, EI.1 - condition: $ei1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: entity-identifier - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.1 - - vars: - ei2: STRING, EI.2 - condition: $ei2 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.2 - - vars: - ei3: STRING, EI.3 - condition: $ei3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.3 - - vars: - ei4: STRING, EI.4 - condition: $ei4 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EI.4 - - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml deleted file mode 100644 index 3360abc1ee8..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml +++ /dev/null @@ -1,81 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: STRING - valueOf: EIP.2.1 - expressionType: HL7Spec - -type: - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "FGN" - system: - type: STRING - valueOf: "http://terminology.hl7.org/CodeSystem/v2-0203" - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.2.2 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.2.3 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.2.4 - - vars: - eip1: STRING_ALL, EIP.1 - extensionUrl: $backupExtension - condition: $eip1 NOT_NULL - expressionType: resource - valueOf: datatypes/EIP/EI/ExtensionEI - specs: EIP.1 - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml deleted file mode 100644 index 73c32876cd4..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml +++ /dev/null @@ -1,82 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: STRING - valueOf: EIP.1.1 - expressionType: HL7Spec - -type: - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "PGN" - system: - type: STRING - valueOf: "http://terminology.hl7.org/CodeSystem/v2-0203" - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.1.2 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.1.3 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: EIP.1.4 - - vars: - eip2: STRING_ALL, EIP.2 - extensionUrl: $backupExtension - condition: $eip2 NOT_NULL - generateList: true - expressionType: resource - valueOf: datatypes/EIP/EI/ExtensionEI - specs: EIP.2 - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml deleted file mode 100644 index 0216dc917ec..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml +++ /dev/null @@ -1,51 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -extension: - generateList: true - expressionType: nested - vars: - fn2: String, FN.2 - fn3: String, FN.3 - fn4: String, FN.4 - fn5: String, FN.5 - expressions: - - expressionType: nested - condition: $fn2 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-own-prefix - valueString: - type: STRING - valueOf: FN.2 - expressionType: HL7Spec - - expressionType: nested - condition: $fn3 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-own-name - valueString: - type: STRING - valueOf: FN.3 - expressionType: HL7Spec - - expressionType: nested - condition: $fn4 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-partner-prefix - valueString: - type: STRING - valueOf: FN.4 - expressionType: HL7Spec - - expressionType: nested - condition: $fn5 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-partner-name - valueString: - type: STRING - valueOf: FN.5 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml deleted file mode 100644 index d5fc7cd9d8a..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml +++ /dev/null @@ -1,74 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: 'assigning-authority' - -extension_1-namespaceId: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - type: STRING - valueOf: HD.1 - expressionType: HL7Spec - -extension_2-universalId: - generateList: true - condition: $universalIdType EQUALS ISO || $universalIdType EQUALS UUID - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - type: String - valueOf: HD.2 - expressionType: HL7Spec - vars: - universalIdType: String, HD.3 - -extension_3-universalIdType: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueCode: - type: STRING - valueOf: HD.3 - expressionType: HL7Spec - -extension_4-universalIdUnknownType: - condition: $universalIdType NOT_EQUALS ISO && $universalIdType NOT_EQUALS UUID - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-unknown-type - valueCode: - type: STRING - valueOf: HD.2 - expressionType: HL7Spec - vars: - universalIdType: String, HD.3 - -extension_5-universalIdUnknownType: - condition: $universalIdType NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-unknown-type - valueCode: - type: STRING - valueOf: HD.2 - expressionType: HL7Spec - vars: - universalIdType: String, HD.3 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml deleted file mode 100644 index 931f9f88e8d..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml +++ /dev/null @@ -1,55 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - expressionType: nested - expressions: - - type: SYSTEM_URL - condition: $isStringUrl NULL - valueOf: $extensionUrl - - type: STRING - condition: $isStringUrl NOT_NULL - valueOf: $extensionUrl - - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - hd1: STRING, HD.1 - condition: $hd1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - type: STRING - valueOf: HD.1 - expressionType: HL7Spec - - vars: - hd2: STRING, HD.2 - condition: $hd2 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - type: STRING - valueOf: HD.2 - expressionType: HL7Spec - - vars: - hd3: STRING, HD.3 - condition: $hd3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - type: STRING - valueOf: HD.3 - expressionType: HL7Spec - - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml deleted file mode 100644 index b7834cb80d8..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml +++ /dev/null @@ -1,15 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: STRING - expressionType: HL7Spec - valueOf: HD.1 -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: HD.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml deleted file mode 100644 index 2d060644c46..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml +++ /dev/null @@ -1,19 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: STRING - expressionType: HL7Spec - valueOf: HD.2 -type: - expressionType: resource - specs: HD.3 - valueOf: datatypes/ID/CodeableConcept -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: "HD.2,HD.3" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml deleted file mode 100644 index 3fc98dddbfb..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml +++ /dev/null @@ -1,74 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -name: - valueOf: HD.1 - type: STRING - expressionType: HL7Spec - -identifier_1: - expressionType: nested - generateList: true - vars: - universalId: String, HD.3 - expressionsMap: - value_1: - condition: $universalId EQUALS ISO || $universalId EQUALS UUID - type: STRING - expressionType: HL7Spec - valueOf: HD.2 - -extension_1-unknownUniversalIdType: - condition: $universalId NOT_EQUALS ISO && $universalId NOT_EQUALS UUID - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-unknown-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: HD.2 - vars: - universalId: STRING, HD.3 - -extension_2-unknownUniversalIdType: - condition: $universalId NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-unknown-type - valueString: - expressionType: HL7Spec - type: STRING - valueOf: HD.2 - vars: - universalId: STRING, HD.3 - -extension_3-universalIdType: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueCode: - expressionType: HL7Spec - type: STRING - valueOf: HD.3 - -physicalType: - valueOf: datatype/CodeableConcept_var - expressionType: resource - constants: - code: si - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml deleted file mode 100644 index a1c24c51fce..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml +++ /dev/null @@ -1,91 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier_1: - condition: $hd1 NOT_NULL - vars: - hd1: String, HD.1 - expressionType: nested - generateList: true - expressionsMap: - value_1: - type: STRING - expressionType: HL7Spec - valueOf: HD.1 - extension_1-namespaceId: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: HD.1 - -identifier_2: - condition: $hd2 NOT_NULL - expressionType: nested - generateList: true - vars: - hd3: String, HD.3 - hd2: String, HD.2 - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: HD.2 - type: - valueOf: datatypes/ID/CodeableConceptUniversalid - generateList: true - expressionType: resource - specs: HD.3 - system: - condition: $hd3 EQUALS ISO || $hd3 EQUALS UUID - type: STRING - valueOf: "urn:ietf:rfc:3986" - extension_1-universalId: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: "HD.2,HD.3" - -address: - condition: $organizationCountry NOT_NULL - valueOf: datatypes/XAD/Address - expressionType: resource - generateList: true - vars: - country: $organizationCountry - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $hdOrganizationHL7Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hdOrganizationHL7Field - - expressionType: nested - condition: $hdOrganizationHL7Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hdOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml deleted file mode 100644 index 4b574d46ca6..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml +++ /dev/null @@ -1,22 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - condition: $BASE_VALUE NOT_NULL - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - code: - expressionType: HL7Spec - type: STRING - valueOf: $BASE_VALUE - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: codeable-concept-id - valueBoolean: - valueOf: "true" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml deleted file mode 100644 index 00490717b2b..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml +++ /dev/null @@ -1,15 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - code: - expressionType: HL7Spec - type: STRING - valueOf: $BASE_VALUE - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v2-0301" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml deleted file mode 100644 index 5ef51c9c0d3..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: STRING - valueOf: $mocExtensionName - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - moc1: STRING_ALL, MOC.1 - condition: $moc1 NOT_NULL - expressionsMap: - url: - type: STRING - value: moc-1-1-monetary-amount - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MOC.1.1 - - expressionType: nested - vars: - moc1: STRING_ALL, MOC.1 - condition: $moc1 NOT_NULL - expressionsMap: - url: - type: STRING - value: moc-1-2-monetary-denomination - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MOC.1.2 - - expressionType: nested - vars: - moc2: STRING_ALL, MOC.2 - condition: $moc2 NOT_NULL - expressionsMap: - url: - type: STRING - value: moc-2-charge-code - valueCodeableConcept: - valueOf: datatypes/CE/CodeableConcept - expressionType: resource - specs: MOC.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml deleted file mode 100644 index 8199ee3d799..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml +++ /dev/null @@ -1,24 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -display: - type: STRING - vars: - msg1: MSG.1 - msg2: MSG.2 - msg3: MSG.3 - msgDisplay: MSG.1 + $caret + MSG.2 + $caret + MSG.3 - constants: - caret: "^" - valueOf: $msgDisplay - -code: - type: STRING - expressionType: HL7Spec - valueOf: MSG.2 - -system: - vars: - msg2: MSG.2 - condition: $msg2 NOT_NULL - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v2-0003" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml deleted file mode 100644 index d49f3d48cc1..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml +++ /dev/null @@ -1,68 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: nested - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: $BASE_VALUE - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: $BASE_VALUE - -status: - valueOf: $ndlLocationStatus - type: STRING - expressionType: HL7Spec - -mode: - value: 'instance' - type: STRING - -physicalType: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - code: - condition: $physicalTypeCode NOT_EQUALS poc - type: STRING - valueOf: $physicalTypeCode - _code: - condition: $physicalTypeCode EQUALS poc - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - -partOf: - valueOf: datatype/Reference - expressionType: resource - specs: $Location - condition: $refLocation EQUALS $partOfId - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier.value[0].value","String") - - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml deleted file mode 100644 index 95237101b75..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml +++ /dev/null @@ -1,66 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - expressionsMap: - value: - type: STRING - valueOf: IS - expressionType: HL7Spec - -status: - valueOf: $ndlLocationStatus - type: STRING - expressionType: HL7Spec - -mode: - value: 'instance' - type: STRING - -physicalType: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - code: - condition: $physicalTypeCode NOT_EQUALS poc - type: STRING - valueOf: $physicalTypeCode - _code: - condition: $physicalTypeCode EQUALS poc - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - -partOf: - valueOf: datatype/Reference - expressionType: resource - specs: $Location - condition: $refLocation EQUALS $partOfId - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier.value[0].value","String") - - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml deleted file mode 100644 index 9908f03b282..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml +++ /dev/null @@ -1,22 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - valueOf: ndl-practitioner-role - -extension: - vars: - ndl9: NDL.9 - expressionType: nested - generateList: true - expressions: - - expressionType: nested - condition: $ndl9 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: NDL.9 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: NDL.9 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml deleted file mode 100644 index a70671f2b88..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml +++ /dev/null @@ -1,147 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: PractitionerRole - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -practitioner: - valueOf: datatypes/CNN/Practitioner - expressionType: reference - specs: NDL.1 - -period: - vars: - startDate: NDL.2 - endDate: NDL.3 - condition: $startDate NOT_NULL || $endDate NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" - expressionType: JEXL - _start: - expressionType: nested - condition: $startDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $startDate - expressionType: HL7Spec - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" - expressionType: JEXL - _end: - expressionType: nested - condition: $endDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $endDate - expressionType: HL7Spec - -location: - generateList: true - expressionType: nested - expressions: - - valueOf: datatypes/NDL/HD/Location - condition: $ndl7 NOT_NULL - expressionType: reference - specs: NDL.7 - vars: - ndlLocationStatus: NDL.8 - ndl7: NDL.7 - constants: - physicalTypeCode: "si" - - valueOf: datatypes/NDL/IS/Location - condition: $ndl10 NOT_NULL - expressionType: reference - specs: NDL.10 - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") - partOfId: NLD.7.1 - ndlLocationStatus: NDL.8 - ndl10: NDL.10 - constants: - physicalTypeCode: "bu" - - valueOf: datatypes/NDL/IS/Location - condition: $ndl4 NOT_NULL - expressionType: reference - specs: NDL.4 - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") - partOfId: NLD.10 - ndlLocationStatus: NDL.8 - ndl4: NDL.4 - constants: - physicalTypeCode: "poc" - - valueOf: datatypes/NDL/IS/Location - condition: $ndl11 NOT_NULL - expressionType: reference - specs: NDL.11 - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") - partOfId: NLD.4 - ndlLocationStatus: NDL.8 - ndl11: NDL.11 - constants: - physicalTypeCode: "lvl" - - valueOf: datatypes/NDL/IS/Location - condition: $ndl5 NOT_NULL - expressionType: reference - specs: NDL.5 - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") - partOfId: NLD.4 - ndlLocationStatus: NDL.8 - ndl5: NDL.5 - constants: - physicalTypeCode: "ro" - - valueOf: datatypes/NDL/IS/Location - condition: $ndl6 NOT_NULL - expressionType: reference - specs: NDL.6 - vars: - refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") - partOfId: NLD.5 - ndlLocationStatus: NDL.8 - ndl6: NDL.6 - constants: - physicalTypeCode: "bd" - - -extension: - generateList: true - expressionType: nested - condition: $performerParticipationType NOT_NULL - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: event-performerFunction - valueCodeableConcept: - valueOf: datatype/CodeableConcept_var - expressionType: resource - vars: - code: $performerParticipationType - constants: - system: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - - expressionType: resource - valueOf: datatypes/NDL/NDLExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml deleted file mode 100644 index aa68365fc9d..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml +++ /dev/null @@ -1,17 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -low: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: NR.1 -high: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: NR.2 - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml deleted file mode 100644 index ea6e86567c4..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml +++ /dev/null @@ -1,292 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - pl10: STRING_ALL, PL.10 - pl11: STRING_ALL, PL.11 - expressions: - - expressionType: nested - generateList: true - condition: $pl3 NOT_NULL - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.3 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.3 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.2 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.2 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - -physicalType: - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bd" - system: - valueOf: $system - condition: $pl3 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "ro" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl3 NOT_NuLL || $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl2 NOT_NULL - valueOf: datatypes/PL/LocationBranch1 #PL2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NOT_NULL #PL1 - valueOf: datatypes/PL/LocationBranch2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - valueOf: datatypes/PL/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - valueOf: datatypes/PL/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - valueOf: datatypes/PL/LocationBranch5 - specs: $BASE_VALUE - -status: - expressionType: HL7Spec - valueOf: PL.5 - type: STRING - -mode: - value: "instance" - -description: - type: STRING - expressionType: HL7Spec - valueOf: PL.9 - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: pl6-person-location-type - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PL.6 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml deleted file mode 100644 index f2bbcd73bd3..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml +++ /dev/null @@ -1,182 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl2 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.2 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.2 - - expressionType: nested - condition: $pl2 NULL && $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl2: STRING, PL.2 - pl1: STRING, PL.1 - pl8: STRING, PL.8 - pl7: STRING, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "ro" - system: - valueOf: $system - condition: $pl2 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - system: - type: STRING - valueOf: $system - condition: $pl2 NULL && $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl1 NOT_NULL #PL1 - valueOf: datatypes/PL/LocationBranch2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NOT_NULL #PL8 - valueOf: datatypes/PL/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml deleted file mode 100644 index af152d5c8be..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml +++ /dev/null @@ -1,151 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: nested - condition: $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - condition: $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl8 NOT_NULL #PL8 - valueOf: datatypes/PL/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl8 NULL && $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml deleted file mode 100644 index 9803743ebd6..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml +++ /dev/null @@ -1,110 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml deleted file mode 100644 index a991717d78f..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml +++ /dev/null @@ -1,82 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl4 NOT_NULL - valueOf: datatypes/PL/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml deleted file mode 100644 index e7a3953d1ab..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - -physicalType: - expressionType: nested - vars: - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl4 NOT_NULL - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml deleted file mode 100644 index 1d6d14698e3..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -tag: - generateList: true - expressionType: nested - vars: - pt1: STRING, PT.1 - pt2: STRING, PT.2 - condition: $pt1 NOT_NULL || $pt2 NOT_NULL - expressions: - - expressionType: nested - condition: $pt1 NOT_NULL - expressionsMap: - code: - valueOf: PT.1 - expressionType: HL7Spec - type: STRING - system: - value: "http://terminology.hl7.org/CodeSystem/v2-0103" - - expressionType: nested - condition: $pt2 NOT_NULL - expressionsMap: - code: - valueOf: PT.2 - type: STRING - expressionType: HL7Spec - system: - value: "http://terminology.hl7.org/CodeSystem/v2-0207" - -# Currently used to capture MSH.8 -security: - expressionType: nested - generateList: true - expressionsMap: - code: - type: STRING - valueOf: $metaSecurity diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml deleted file mode 100644 index c97ee8bf8be..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml +++ /dev/null @@ -1,58 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: obx-5-value-sn - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - sn1: STRING, SN.1 - condition: $sn1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.1 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.1 - - vars: - sn2: STRING, SN.2 - condition: $sn2 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.2 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.2 - - vars: - sn3: STRING, SN.3 - condition: $sn3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.3 - - vars: - sn4: STRING, SN.4 - condition: $sn4 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.4 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml deleted file mode 100644 index 1162dab6f0f..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml +++ /dev/null @@ -1,74 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -comparator: - type: STRING - expressionType: HL7Spec - valueOf: SN.1 - -value: - type: STRING - expressionType: HL7Spec - valueOf: SN.2 - -code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWEQuantityUnits.1 - vars: - identifier: CWEQuantityUnits.1 - nameOfCodingSystem: CWEQuantityUnits.3 - -unit: - expressionType: nested - vars: - identifier: CWEQuantityUnits.1 - text: CWEQuantityUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWEQuantityUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWEQuantityUnits.2 - expressionType: HL7Spec - -system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWEQuantityUnits.3 - vars: - identifier: CWEQuantityUnits.1 - nameOfCodingSystem: CWEQuantityUnits.3 - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - sn3: STRING, SN.3 - condition: $sn3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.3 - - vars: - sn4: STRING, SN.4 - condition: $sn4 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.4 - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml deleted file mode 100644 index bf401e617cb..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml +++ /dev/null @@ -1,106 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -low: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: SN.2 - code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.1 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - unit: - expressionType: nested - vars: - identifier: CWERangeUnits.1 - text: CWERangeUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWERangeUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWERangeUnits.2 - expressionType: HL7Spec - system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.3 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - -high: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: SN.4 - code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.1 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - unit: - expressionType: nested - vars: - identifier: CWERangeUnits.1 - text: CWERangeUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWERangeUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWERangeUnits.2 - expressionType: HL7Spec - system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.3 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - -extension: - expressionType: nested - generateList: true - expressions: - - vars: - sn1: STRING, SN.1 - condition: $sn1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.1 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.1 - - vars: - sn3: STRING, SN.3 - condition: $sn3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.3 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml deleted file mode 100644 index d68936327d5..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml +++ /dev/null @@ -1,106 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -numerator: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: SN.2 - code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.1 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - unit: - expressionType: nested - vars: - identifier: CWERangeUnits.1 - text: CWERangeUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWERangeUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWERangeUnits.2 - expressionType: HL7Spec - system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.3 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - -denominator: - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: SN.4 - code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.1 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - unit: - expressionType: nested - vars: - identifier: CWERangeUnits.1 - text: CWERangeUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWERangeUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWERangeUnits.2 - expressionType: HL7Spec - system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWERangeUnits.3 - vars: - identifier: CWERangeUnits.1 - nameOfCodingSystem: CWERangeUnits.3 - -extension: - expressionType: nested - generateList: true - expressions: - - vars: - sn1: STRING, SN.1 - condition: $sn1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.1 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.1 - - vars: - sn3: STRING, SN.3 - condition: $sn3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: SN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SN.3 diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml deleted file mode 100644 index 1b641e215d3..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml +++ /dev/null @@ -1,135 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -line: - expressionType: nested - generateList: true - expressions: - - type: STRING - expressionType: HL7Spec - valueOf: XAD.1.1 - - type: STRING - expressionType: HL7Spec - valueOf: XAD.1.2 - - type: STRING - expressionType: HL7Spec - valueOf: XAD.1.3 - - type: STRING - expressionType: HL7Spec - valueOf: XAD.2 - - type: STRING - expressionType: HL7Spec - valueOf: XAD.19 - -city: - type: STRING - expressionType: HL7Spec - valueOf: XAD.3 - -state: - type: STRING - expressionType: HL7Spec - valueOf: XAD.4 - -postalCode: - type: STRING - expressionType: HL7Spec - valueOf: XAD.5 - -country: - type: STRING - expressionType: HL7Spec - valueOf: $country | XAD.6 - -type: - vars: - xad7: String, XAD.7 - condition: $xad7 EQUALS M || $xad7 EQUALS SH - type: STRING - expressionType: JEXL - valueOf: 'GeneralUtils.getFhirAddressType(xad7)' - -use: - vars: - xad7: String, XAD.7 - condition: $xad7 EQUALS BA || $xad7 EQUALS BI || $xad7 EQUALS C || $xad7 EQUALS B || $xad7 EQUALS H || $xad7 EQUALS O - type: STRING - valueOf: 'GeneralUtils.getFhirAddressUse(xad7)' - expressionType: JEXL - - - -district: - type: STRING - valueOf: XAD.9 - expressionType: HL7Spec - -# XAD.12 is deprecated so the schema favors using XAD.13/14 if either are populated -period: - vars: - xad13: String, XAD.13 - xad14: String, XAD.14 - condition: $xad13 NOT_NULL || $xad14 NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" - expressionType: JEXL - vars: - periodStart: XAD.13 - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" - expressionType: JEXL - vars: - periodEnd: XAD.14 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - xad10: STRING_ALL, XAD.10 - condition: $xad10 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: iso21090-ADXP-censusTract - valueCode: - type: STRING - expressionType: HL7Spec - valueOf: XAD.10 - - vars: - xad7: String, XAD.7 - condition: $xad7 EQUALS HV - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: iso21090-AD-use - valueCode: - type: STRING - valueOf: XAD.7 - expressionType: HL7Spec - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component - - expressionType: resource - valueOf: datatypes/XAD/XADExtension - diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml deleted file mode 100644 index fe1872fd7db..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: sad-address-line - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - sad1: STRING, SAD.1 - condition: $sad1 NOT_NULL - expressionsMap: - url: - type: STRING - value: SAD.1 - valueString: - type: STRING - valueOf: SAD.1 - expressionType: HL7Spec - - expressionType: nested - vars: - sad2: STRING, SAD.2 - condition: $sad2 NOT_NULL - expressionsMap: - url: - type: STRING - value: SAD.2 - valueString: - type: STRING - valueOf: SAD.2 - expressionType: HL7Spec - - expressionType: nested - vars: - sad3: STRING, SAD.3 - condition: $sad3 NOT_NULL - expressionsMap: - url: - type: STRING - value: SAD.3 - valueString: - type: STRING - valueOf: SAD.3 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml deleted file mode 100644 index 8944f77d87c..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml +++ /dev/null @@ -1,104 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -# This extension stores HL7 fields that are either not mapped to FHIR -# or become ambiguous when mapped -# URL: https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address - -url: - type: SYSTEM_URL - value: xad-address - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: resource - vars: - xad1: STRING_ALL, XAD.1 - condition: $xad1 NOT_NULL - valueOf: datatypes/XAD/SADExtension - specs: XAD.1 - - expressionType: nested - vars: - xad2: STRING_ALL, XAD.2 - condition: $xad2 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.2 - valueString: - type: STRING - valueOf: XAD.2 - expressionType: HL7Spec - - expressionType: nested - vars: - xad6: STRING_ALL, XAD.6 - condition: $xad6 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.6 - valueString: - type: STRING - valueOf: XAD.6 - expressionType: HL7Spec - - expressionType: nested - vars: - xad7: STRING_ALL, XAD.7 - condition: $xad7 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.7 - valueCode: - type: STRING - valueOf: XAD.7 - expressionType: HL7Spec - - expressionType: nested - vars: - xad8: STRING_ALL, XAD.8 - condition: $xad8 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.8 - valueString: - type: STRING - valueOf: XAD.8 - expressionType: HL7Spec - - expressionType: nested - vars: - xad11: STRING_ALL, XAD.11 - condition: $xad11 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.11 - valueCode: - type: STRING - valueOf: XAD.11 - expressionType: HL7Spec - - expressionType: nested - vars: - xad13: STRING, XAD.13 - condition: $xad13 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.13 - valueString: - type: STRING - valueOf: XAD.13 - expressionType: HL7Spec - - expressionType: nested - vars: - xad14: XAD.14 - condition: $xad14 NOT_NULL - expressionsMap: - url: - type: STRING - value: XAD.14 - valueString: - type: STRING - valueOf: XAD.14 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml deleted file mode 100644 index 908743312c2..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml +++ /dev/null @@ -1,228 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Practitioner - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: nested - vars: - xcnhd1: String, XCN.9.1 - xcnhd2: String, XCN.9.2 - xcnhd3: String, XCN.9.3 - xcn9: STRING_ALL, XCN.9 - xcn11: String, XCN.11 - xcn12: String, XCN.12 - xcn13: String, XCN.13 - xcn14: STRING_ALL, XCN.14 - expressionsMap: - value: - type: STRING - valueOf: XCN.1 - expressionType: HL7Spec - # Checking if HD is an Organization or a System by looking at the ID type. - # If ID type is null or ID type is not ISO or UUID, treat as organization. - # Otherwise, treat as system. - assigner_1: - condition: $xcn9 NOT_NULL && $xcnhd3 NULL - valueOf: datatypes/HD/Organization - expressionType: reference - specs: XCN.9 - assigner_2: - condition: $xcn9 NOT_NULL && $xcnhd3 NOT_NULL && $xcnhd3 NOT_EQUALS ISO && $xcnhd3 NOT_EQUALS UUID - valueOf: datatypes/HD/Organization - expressionType: reference - specs: XCN.9 - system: - expressionType: nested - condition: $xcnhd3 EQUALS ISO || $xcnhd3 EQUALS UUID - expressions: - - condition: $xcnhd1 NOT_NULL - expressionType: HL7Spec - type: STRING - valueOf: XCN.9.1 - - condition: $xcnhd1 NULL && $xcnhd3 EQUALS ISO - expressionType: HL7Spec - type: STRING - constants: - prefix: "urn:oid:" - vars: - join: $prefix + $xcnhd2 - valueOf: $join - - condition: $xcnhd1 NULL && $xcnhd3 EQUALS UUID - expressionType: HL7Spec - type: STRING - constants: - prefix: "urn:uuid:" - vars: - join: $prefix + $xcnhd2 - valueOf: $join - type: - condition: $xcn13 NOT_NULL - expressionType: resource - specs: XCN.13 - valueOf: datatypes/ID/CodeableConcept - extension_1-checkDigit: - condition: $xcn11 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: identifier-check-digit - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.11 - extension_2-checkDigitScheme: - condition: $xcn12 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: naming-system-check-digit - valueCode: - valueOf: XCN.12 - type: STRING - expressionType: HL7Spec - extension_3-assigningFacility: - generateList: true - expressionType: nested - condition: $xcn14 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: assigning-facility - valueReference: - valueOf: datatypes/HD/Location - expressionType: reference - specs: XCN.14 - -name: - expressionType: nested - expressionsMap: - family: - type: STRING - valueOf: XCN.2.1 - expressionType: HL7Spec - _family: - expressionType: resource - valueOf: datatypes/FN/ExtensionHumanName-family - specs: XCN.2 - given: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XCN.3 - type: STRING - - expressionType: HL7Spec - valueOf: XCN.4 - type: STRING - suffix: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XCN.5 - type: STRING - - expressionType: HL7Spec - valueOf: XCN.21 - type: STRING - prefix: - type: STRING - valueOf: XCN.6 - expressionType: HL7Spec - use: - type: NAME_USE - valueOf: XCN.10 - expressionType: HL7Spec - # This needs to use variables because the message parses this field using NULLDT since it is deprecated which means that - # the values do not get correctly loaded and will not be mapped over correctly using a spec. - period_1: - vars: - xcn19: String, XCN.19 - xcn20: String, XCN.20 - start: String, XCN.17.1 - end: String, XCN.17.2 - condition: $xcn19 NULL && $xcn20 NULL - expressionType: resource - valueOf: datatypes/DR/Period - # XCN.17 is deprecated so the schema favors using XCN.19/20 if either are populated - period_2: - vars: - xcn19: String, XCN.19 - xcn20: String, XCN.20 - condition: $xcn19 NOT_NULL || $xcn20 NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" - expressionType: JEXL - vars: - periodStart: XCN.19 - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" - expressionType: JEXL - vars: - periodEnd: XCN.20 - extension_AssemblyOrder: - expressionType: nested - generateList: true - vars: - xcn18: String, XCN.18 - condition: $xcn18 NOT_NULL - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-assembly-order - valueCode: - type: STRING - valueOf: XCN.18 - expressionType: HL7Spec - -address: - condition: $XADAddress NOT_NULL - valueOf: datatypes/XAD/Address - expressionType: resource - specs: $XADAddress - generateList: true - -extension: - vars: - xcn9: STRING_ALL, XCN.9 - generateList: true - expressionType: nested - expressions: - - expressionType: resource - condition: $xcn9 NOT_NULL - valueOf: datatypes/HD/ExtensionAssigningAuthority - specs: XCN.9 - - expressionType: resource - valueOf: datatypes/XCN/XCNExtension - - generateList: true - expressionType: nested - condition: $XCNHL7Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $XCNHL7Field - - generateList: true - expressionType: nested - condition: $XCNHL7Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $XCNHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml deleted file mode 100644 index b56456496df..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml +++ /dev/null @@ -1,177 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: xcn-practitioner - -extension: - expressionType: nested - generateList: true - vars: - xcn3: String, XCN.3 - xcn4: String, XCN.4 - xcn5: String, XCN.5 - xcn8: STRING_ALL, XCN.8 - xcn10: String, XCN.10 - xcn15: String, XCN.12 - xcn16: STRING_ALL, XCN.16 - xcn17: STRING_ALL, XCN.17 - xcn19: String, XCN.19 - xcn20: String, XCN.20 - xcn21: String, XCN.21 - xcn22: STRING_ALL, XCN.22 - xcn23: STRING_ALL, XCN.23 - expressions: - - expressionType: nested - condition: $xcn3 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.3 - - expressionType: nested - condition: $xcn4 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.4 - - expressionType: nested - condition: $xcn5 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.5 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.5 - - expressionType: nested - condition: $xcn8 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.8 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: XCN.8 - - expressionType: nested - condition: $xcn10 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.10 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.10 - - expressionType: nested - condition: $xcn15 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.15 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.15 - - expressionType: nested - condition: $xcn16 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.16 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: XCN.16 - - expressionType: nested - vars: - start: XCN.17.1 - end: XCN.17.2 - condition: $start NOT_NULL || $end NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.17 - extension_1-start: - generateList: true - expressionType: nested - condition: $start NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.17.1 - valueString: - type: STRING - valueOf: $start - expressionType: HL7Spec - extension_2-end: - generateList: true - expressionType: nested - condition: $end NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.17.2 - valueString: - type: STRING - valueOf: $end - expressionType: HL7Spec - - expressionType: nested - condition: $xcn19 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.19 - valueString: - type: STRING - valueOf: $xcn19 - expressionType: HL7Spec - - expressionType: nested - condition: $xcn20 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.20 - valueString: - type: STRING - valueOf: $xcn20 - expressionType: HL7Spec - - expressionType: nested - condition: $xcn21 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XCN.21 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XCN.21 - - expressionType: nested - condition: $xcn22 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.22 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: XCN.22 - - expressionType: nested - condition: $xcn23 NOT_NULL - expressionsMap: - url: - type: STRING - value: XCN.23 - valueCodeableConcept: - valueOf: datatypes/CWE/CodeableConcept - expressionType: resource - specs: XCN.23 diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml deleted file mode 100644 index 05ca223a0e0..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml +++ /dev/null @@ -1,194 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -name: - type: STRING - valueOf: XON.1 - expressionType: HL7Spec - -identifier: - expressionType: nested - vars: - xon3: XON.3 - xon4: XON.4 - xon5: XON.5 - xon6: XON.6 - xon7: XON.7 - xon8: XON.8 - xon10: String, XON.10 - expressionsMap: - value_1: - condition: $xon10 NULL - type: STRING - expressionType: HL7Spec - valueOf: XON.3 - value_2: - condition: $xon10 NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: XON.10 - type: - condition: $xon7 NOT_NULL - valueOf: datatype/CodeableConcept_var - expressionType: resource - vars: - code: String, XON.7 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - extension_1-checkDigitSchema: - condition: $xon5 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: naming-system-check-digit - valueCode: - valueOf: XON.5 - type: STRING - expressionType: HL7Spec - extension_2-checkDigit: - condition: $xon4 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: identifier-check-digit - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XON.4 - extension_3-assigningAuthority: - condition: $xon6 NOT_NULL - generateList: true - expressionType: resource - valueOf: datatypes/HD/ExtensionAssigningAuthority - specs: XON.6 - extension_4-location: - condition: $xon8 NOT_NULL - generateList: true - expressionType: nested - vars: - xon8: String, XON.8 - expressionsMap: - url: - type: SYSTEM_URL - value: identifier-location - valueReference: - expressionType: reference - valueOf: datatypes/HD/Location - specs: XON.8 - -address: - condition: $XADAddress NOT_NULL - valueOf: datatypes/XAD/Address - expressionType: resource - specs: $XADAddress - -telecom: - expressionType: resource - condition: $XTNTelecom NOT_NULL - valueOf: datatypes/XTN/ContactPoint - generateList: true - specs: $XTNTelecom * - -contact: - expressionType: nested - generateList: true - expressionsMap: - name: - condition: $XPNContactName NOT_NULL - expressionType: resource - generateList: true - specs: $XPNHumanName * - valueOf: datatypes/XPN/HumanName - telecom: - condition: $XPNContactTelecom NOT_NULL - valueOf: datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: $XPNContactTelecom * - address: - condition: $XADContactAddress NOT_NULL - valueOf: datatypes/XAD/Address - generateList: true - expressionType: resource - specs: $XADContactAddress * - -extension: - expressionType: nested - generateList: true - expressions: - - condition: $xon2 NOT_NULL - expressionType: nested - vars: - xon2: XON.2 - expressionsMap: - url: - type: SYSTEM_URL - value: organization-name-type - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XON.2 - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component - - condition: $xon9 NOT_NULL - expressionType: nested - vars: - xon9: String, XON.9 - expressionsMap: - url: - type: SYSTEM_URL - value: name-representation-code - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XON.9 - - expressionType: resource - valueOf: datatypes/XON/XONExtension - - generateList: true - expressionType: nested - condition: $XONHL7Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $XONHL7Field - - generateList: true - expressionType: nested - condition: $XONHL7Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $XONHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml deleted file mode 100644 index 37c71015f39..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml +++ /dev/null @@ -1,34 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: xon-organization - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - xon3: STRING_ALL, XON.3 - condition: $xon3 NOT_NULL - expressionsMap: - url: - type: STRING - value: XON.3 - valueString: - expressionType: HL7Spec - type: STRING - valueOf: XON.3 - - expressionType: nested - vars: - xon10: STRING_ALL, XON.10 - condition: $xon10 NOT_NULL - expressionsMap: - url: - type: STRING - value: XON.10 - valueString: - expressionType: HL7Spec - type: STRING - valueOf: XON.10 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml deleted file mode 100644 index 9e30b26712e..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml +++ /dev/null @@ -1,99 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: HumanName - -family: - type: STRING - valueOf: XPN.1.1 - expressionType: HL7Spec -_family: - expressionType: resource - valueOf: datatypes/FN/ExtensionHumanName-family - specs: XPN.1 - -given: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XPN.2 - type: STRING - - expressionType: HL7Spec - valueOf: XPN.3 - type: STRING -suffix: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XPN.4 - type: STRING - - expressionType: HL7Spec - valueOf: XPN.14 - type: STRING -prefix: - type: STRING - valueOf: XPN.5 - expressionType: HL7Spec -use: - type: NAME_USE - valueOf: XPN.7 - expressionType: HL7Spec - -extension_AssemblyOrder: - vars: - xpn11: String, XPN.11 - condition: $xpn11 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-assembly-order - valueCode: - type: STRING - valueOf: XPN.11 - expressionType: HL7Spec - -# XPN.10 is deprecated so the schema favors using XPN.12/13 if either are populated -period_2: - vars: - xpn12: String, XPN.12 - xpn13: String, XPN.13 - condition: $xpn12 NOT_NULL || $xpn13 NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" - expressionType: JEXL - vars: - periodStart: XPN.12 - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" - expressionType: JEXL - vars: - periodEnd: XPN.13 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component - - expressionType: resource - valueOf: datatypes/XPN/XPNExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml deleted file mode 100644 index be88228b014..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml +++ /dev/null @@ -1,110 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - valueOf: xpn-human-name - -extension: - vars: - xpn2: String, XPN.2 - xpn3: String, XPN.3 - xpn4: String, XPN.4 - xpn7: String, XPN.7 - xpn8: String, XPN.8 - xpn9: STRING_ALL, XPN.9 - xpn12: String, XPN.12 - xpn13: String, XPN.13 - xpn14: String, XPN.14 - expressionType: nested - generateList: true - expressions: - - expressionType: nested - condition: $xpn2 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.2 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.2 - - expressionType: nested - condition: $xpn3 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.3 - - expressionType: nested - condition: $xpn4 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.4 - - expressionType: nested - condition: $xpn7 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.7 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.7 - - expressionType: nested - condition: $xpn8 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.8 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.8 - - expressionType: nested - condition: $xpn9 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.9 - valueCodeableConcept: - valueOf: datatypes/CE/CodeableConcept - expressionType: resource - specs: XPN.9 - - expressionType: nested - condition: $xpn12 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.12 - valueString: - type: STRING - valueOf: $xpn12 - expressionType: HL7Spec - - expressionType: nested - condition: $xpn13 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.13 - valueString: - type: STRING - valueOf: $xpn13 - expressionType: HL7Spec - - expressionType: nested - condition: $xpn14 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.14 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.14 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml deleted file mode 100644 index 1fa5982ce89..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml +++ /dev/null @@ -1,233 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - expressionType: nested - vars: - telEquipType: String, XTN.3 - commAddress: String, XTN.4 - unformattedTelNum: String, XTN.12 - expressions: - - condition: $telEquipType EQUALS Internet || $telEquipType EQUALS X.400 - valueOf: $commAddress - - condition: $telEquipType NOT_EQUALS Internet && $telEquipType NOT_EQUALS X.400 && $unformattedTelNum NOT_NULL - valueOf: $unformattedTelNum - - condition: $telEquipType NULL && $unformattedTelNum NOT_NULL - valueOf: $unformattedTelNum - -#mapping from HL7 Concept Map: TelecomUseCode -#https://docs.google.com/spreadsheets/d/1EE3a5UIGXLi8wMDr49fWTEVx8QS2GFqYgitE3vLOQTQ/edit#gid=0 -use_1: - condition: $xtnUse EQUALS PRN && $useCode NULL - type: STRING - value: "home" - vars: - xtnUse: String, XTN.2 - -use_2: - condition: $xtnUse EQUALS WPN && $useCode NULL - type: STRING - value: "work" - vars: - xtnUse: String, XTN.2 - -use_3: - condition: $xtnUse EQUALS BPN && $useCode NULL - type: STRING - value: "mobile" - vars: - xtnUse: String, XTN.2 - -use_4: - condition: $useCode NOT_NULL - type: STRING - value: $useCode - -#mapping from HL7 Concept Map: TelecomEquipmentType -#https://docs.google.com/spreadsheets/d/1FhoR5oxEWdHmpR5S0_wYPstdy1lwv7rL-JWJu_DE_Vs/edit#gid=0 -system_1: - # CP maps to "mobile" but that is not a valid option for system - condition: $equipType EQUALS PH || $equipType EQUALS CP - type: STRING - valueOf: "phone" - vars: - equipType: String, XTN.3 - -system_2: - condition: $equipType EQUALS FX - type: STRING - valueOf: "fax" - vars: - equipType: String, XTN.3 - -system_3: - condition: $equipType EQUALS Internet || $equipType EQUALS X.400 - type: STRING - valueOf: "email" - vars: - equipType: String, XTN.3 - -system_4: - condition: $equipType EQUALS BP - type: STRING - valueOf: "pager" - vars: - equipType: String, XTN.3 - -system_5: - condition: $equipType EQUALS MD || $equipType EQUALS SAT || $equipType EQUALS TDD || $equipType EQUALS TTY - type: STRING - valueOf: "other" - vars: - equipType: String, XTN.3 - -system_6: - condition: $telEquipType NULL && $commAddress NOT_NULL - valueOf: "email" - vars: - telEquipType: String, XTN.3 - commAddress: String, XTN.4 - -system_7: - condition: $telEquipType NULL && $commAddress NULL - expressionType: nested - vars: - telEquipType: String, XTN.3 - commAddress: String, XTN.4 - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: "data-absent-reason" - valueCode: - value: unknown - -period: - vars: - startDate: XTN.13 - endDate: XTN.14 - condition: $startDate NOT_NULL || $endDate NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" - expressionType: JEXL - _start: - expressionType: nested - condition: $startDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $startDate - expressionType: HL7Spec - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" - expressionType: JEXL - _end: - expressionType: nested - condition: $endDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $endDate - expressionType: HL7Spec - -rank: - type: POSITIVEINT - valueOf: XTN.18 - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressions: - - condition: $countryCode NOT_NULL - expressionType: nested - vars: - countryCode: String, XTN.5 - expressionsMap: - url: - type: SYSTEM_URL - value: contactpoint-country - valueString: - value: $countryCode - - condition: $areaCode NOT_NULL - expressionType: nested - vars: - areaCode: String, XTN.6 - expressionsMap: - url: - type: SYSTEM_URL - value: contactpoint-area - valueString: - value: $areaCode - - condition: $telEquipType NOT_EQUALS Internet && $telEquipType NOT_EQUALS X.400 && $contactPointLocal NOT_NULL - expressionType: nested - vars: - telEquipType: String, XTN.3 - contactPointLocal: String, XTN.7 - expressionsMap: - url: - type: SYSTEM_URL - value: contactpoint-local - valueString: - value: $contactPointLocal - - condition: $telEquipType NULL && $contactPointLocal NOT_NULL - expressionType: nested - vars: - telEquipType: String, XTN.3 - contactPointLocal: String, XTN.7 - expressionsMap: - url: - type: SYSTEM_URL - value: contactpoint-local - valueString: - value: $contactPointLocal - - condition: $numExt NOT_NULL - expressionType: nested - vars: - numExt: String, XTN.8 - expressionsMap: - url: - type: SYSTEM_URL - value: contactpoint-extension - valueString: - value: $numExt - - expressionType: resource - valueOf: datatypes/XTN/XTNExtension - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml deleted file mode 100644 index 660874eead5..00000000000 --- a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml +++ /dev/null @@ -1,81 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: xtn-contact-point - -extension: - generateList: true - expressionType: nested - expressions: - - condition: $xtn2 NOT_NULL - expressionType: nested - vars: - xtn2: String, XTN.2 - expressionsMap: - url: - type: STRING - value: XTN.2 - valueString: - value: $xtn2 - - condition: $xtn3 NOT_NULL - expressionType: nested - vars: - xtn3: String, XTN.3 - expressionsMap: - url: - type: STRING - value: XTN.3 - valueString: - value: $xtn3 - - condition: $xtn4 NOT_NULL - expressionType: nested - vars: - xtn4: String, XTN.4 - expressionsMap: - url: - type: STRING - value: XTN.4 - valueString: - value: $xtn4 - - condition: $xtn7 NOT_NULL - expressionType: nested - vars: - xtn7: String, XTN.7 - expressionsMap: - url: - type: STRING - value: XTN.7 - valueString: - value: $xtn7 - - condition: $xtn9 NOT_NULL - expressionType: nested - vars: - xtn9: String, XTN.9 - expressionsMap: - url: - type: STRING - value: XTN.9 - valueString: - type: STRING - valueOf: $xtn9 - - condition: $xtn11 NOT_NULL - expressionType: nested - vars: - xtn11: String, XTN.11 - expressionsMap: - url: - type: STRING - value: XTN.11 - valueString: - value: $xtn11 - - condition: $xtn12 NOT_NULL - expressionType: nested - vars: - xtn12: String, XTN.12 - expressionsMap: - url: - type: STRING - value: XTN.12 - valueString: - value: $xtn12 diff --git a/prime-router/metadata/HL7/v251-elr/config.properties b/prime-router/metadata/HL7/v251-elr/config.properties deleted file mode 100644 index 9362725bdf4..00000000000 --- a/prime-router/metadata/HL7/v251-elr/config.properties +++ /dev/null @@ -1,5 +0,0 @@ -base.path.resource=./metadata/HL7/v251-elr -supported.hl7.messages=ORU_R01,ORM_O01 -default.zoneid=+00:00 -additional.conceptmap.file= -additional.resources.location=./metadata/HL7/datatypes/v251 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml b/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml deleted file mode 100644 index 6c73f0434b7..00000000000 --- a/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml +++ /dev/null @@ -1,23 +0,0 @@ -Patient: org.hl7.fhir.r4.model.Patient -Encounter: org.hl7.fhir.r4.model.Encounter -Observation: org.hl7.fhir.r4.model.Observation -AllergyIntolerance: org.hl7.fhir.r4.model.AllergyIntolerance -Condition: org.hl7.fhir.r4.model.Condition -Practitioner: org.hl7.fhir.r4.model.Practitioner -PractitionerRole: org.hl7.fhir.r4.model.PractitionerRole -DiagnosticReport: org.hl7.fhir.r4.model.DiagnosticReport -Immunization: org.hl7.fhir.r4.model.Immunization -Organization: org.hl7.fhir.r4.model.Organization -MessageHeader: org.hl7.fhir.r4.model.MessageHeader -Medication: org.hl7.fhir.r4.model.Medication -Specimen: org.hl7.fhir.r4.model.Specimen -Procedure: org.hl7.fhir.r4.model.Procedure -DocumentReference: org.hl7.fhir.r4.model.DocumentReference -ServiceRequest: org.hl7.fhir.r4.model.ServiceRequest -MedicationRequest: org.hl7.fhir.r4.model.MedicationRequest -Device: org.hl7.fhir.r4.model.Device -Coverage: org.hl7.fhir.r4.model.Coverage -RelatedPerson: org.hl7.fhir.r4.model.RelatedPerson -Provenance: org.hl7.fhir.r4.model.Provenance -Location: org.hl7.fhir.r4.model.Location -EpisodeOfCare: org.hl7.fhir.r4.model.EpisodeOfCare \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml deleted file mode 100644 index 08270014ad8..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml +++ /dev/null @@ -1,4538 +0,0 @@ -# Coding System for values from https://www.hl7.org/fhir/v2/0396/index.html ---- - -- id: "ACR" - description: "American College of Radiology finding codes" - url: "http://terminology.hl7.org/CodeSystem/ACR" - oid: "urn:oid:2.16.840.1.113883.6.76" -- id: "ART" - description: "WHO Adverse Reaction Terms" - url: "http://terminology.hl7.org/CodeSystem/art" - oid: "urn:oid:2.16.840.1.113883.6.74" -- id: "AS4" - description: "ASTM E1238/ E1467 Universal" - url: "http://terminology.hl7.org/CodeSystem/AS4" - oid: "urn:oid:2.16.840.1.113883.6.30" -- id: "AS4E" - description: "AS4 Neurophysiology Codes" - url: "http://terminology.hl7.org/CodeSystem/AS4E" - oid: "urn:oid:2.16.840.1.113883.6.78" - -- id: "C5" - description: "CPT-5" - url: "http://terminology.hl7.org/CodeSystem/C5" - oid: "urn:oid:2.16.840.1.113883.6.82" -- id: "CAS" - description: "Chemical abstract codes" - url: "http://terminology.hl7.org/CodeSystem/CAS" - oid: "urn:oid:2.16.840.1.113883.6.61" -- id: "CCC" - description: "Clinical Care Classification system" - url: "http://terminology.hl7.org/CodeSystem/CCC" - oid: "urn:oid:2.16.840.1.113883.6.236" -- id: "CD2" - description: "American Dental Association's Current Dental Terminology 2 (CDT-2) codes." - url: "http://terminology.hl7.org/CodeSystem/CD2" - oid: "urn:oid:2.16.840.1.113883.6.13" -- id: "CDCA" - description: "CDC Analyte Codes" - url: "http://terminology.hl7.org/CodeSystem/CDCA" - oid: "urn:oid:2.16.840.1.113883.6.57" -- id: "CDCM" - description: "CDC Methods/Instruments Codes" - url: "http://terminology.hl7.org/CodeSystem/CDCM" - oid: "urn:oid:2.16.840.1.113883.6.58" -- id: "CDS" - description: "CDC Surveillance" - url: "http://terminology.hl7.org/CodeSystem/CDS" - oid: "urn:oid:2.16.840.1.113883.6.79" -- id: "CE" - description: "CEN ECG diagnostic codes" - url: "http://terminology.hl7.org/CodeSystem/CE" - oid: "urn:oid:2.16.840.1.113883.6.80" -- id: "CLP" - description: "CLIP" - url: "http://terminology.hl7.org/CodeSystem/CLP" - oid: "urn:oid:2.16.840.1.113883.6.81" -- id: "CPTM" - description: "CPT Modifier Code" - url: "http://www.ama-assn.org/go/cpt" - oid: "urn:oid:2.16.840.1.113883.6.12" -- id: "CST" - description: "COSTART" - url: "http://terminology.hl7.org/CodeSystem/CST" - oid: "urn:oid:2.16.840.1.113883.6.62" -- id: "CVX" - description: "CDC Vaccine Codes" - url: "http://hl7.org/fhir/sid/cvx" - oid: "urn:oid:2.16.840.1.113883.6.59" -- id: "DCM" - description: "DICOM Controlled Terminology" - url: "http://dicom.nema.org/resources/ontology/DCM" - oid: "urn:oid:1.2.840.10008.2.16.4" -- id: "E" - description: "EUCLIDES" - url: "http://terminology.hl7.org/CodeSystem/euclides" - oid: "urn:oid:2.16.840.1.113883.6.34" -- id: "E5" - description: "Euclides quantity codes" - url: "http://terminology.hl7.org/CodeSystem/E5" - oid: "urn:oid:2.16.840.1.113883.6.35" -- id: "E6" - description: "Euclides Lab method codes" - url: "http://terminology.hl7.org/CodeSystem/E6" - oid: "urn:oid:2.16.840.1.113883.6.36" -- id: "E7" - description: "Euclides Lab equipment codes" - url: "http://terminology.hl7.org/CodeSystem/E7" - oid: "urn:oid:2.16.840.1.113883.6.37" -- id: "ENZC" - description: "Enzyme Codes" - url: "http://terminology.hl7.org/CodeSystem/ENZC" - oid: "urn:oid:2.16.840.1.113883.6.33" -- id: "FDDC" - description: "First DataBank Drug Codes" - url: "http://terminology.hl7.org/CodeSystem/FDDC" - oid: "urn:oid:2.16.840.1.113883.6.64" -- id: "FDDX" - description: "First DataBank Diagnostic Codes" - url: "http://terminology.hl7.org/CodeSystem/FDDX" - oid: "urn:oid:2.16.840.1.113883.6.63" -- id: "FDK" - description: "FDA K10" - url: "http://terminology.hl7.org/CodeSystem/fdk" - oid: "urn:oid:2.16.840.1.113883.6.38" - -- id: "HB" - description: "HIBCC" - url: "http://terminology.hl7.org/CodeSystem/hibccHIN" - oid: "urn:oid:2.16.840.1.113883.6.40" -- id: "HCPCS" - description: "The Healthcare Common Procedure Coding System (HCPCS)" - url: "http://terminology.hl7.org/CodeSystem/HCPCS" - oid: "urn:oid:2.16.840.1.113883.6.14" -- id: "HHC" - description: "Home Health Care" - url: "http://terminology.hl7.org/CodeSystem/hhcc" - oid: "urn:oid:2.16.840.1.113883.6.17" -- id: "hi" - description: "Health Outcomes" - url: "http://terminology.hl7.org/CodeSystem/hi" - oid: "urn:oid:2.16.840.1.113883.6.39" -- id: "HPC" - description: "CMS (formerly HCFA )Procedure Codes (HCPCS)" - url: "http://terminology.hl7.org/CodeSystem/HCPCS" - oid: "urn:oid:2.16.840.1.113883.6.14" -- id: "I10" - description: "ICD-10" - # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system - url: "http://hl7.org/fhir/sid/icd-10-cm" - oid: "urn:oid:2.16.840.1.113883.6.3" -- id: "ICD-10" - description: "ICD-10" - # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system - url: "http://hl7.org/fhir/sid/icd-10-cm" - oid: "urn:oid:2.16.840.1.113883.6.3" -- id: "I10P" - description: "ICD-10 Procedure Codes" - url: "http://www.cms.gov/Medicare/Coding/ICD10" - oid: "urn:oid:2.16.840.1.113883.6.4" -- id: "I9" - description: "ICD9" - url: "http://terminology.hl7.org/CodeSystem/icd9" - oid: "urn:oid:2.16.840.1.113883.6.42" -- id: "ICD-9" - description: "ICD9" - url: "http://terminology.hl7.org/CodeSystem/icd9" - oid: "urn:oid:2.16.840.1.113883.6.42" -- id: "I9C" - description: "ICD-9CM" - url: "http://terminology.hl7.org/CodeSystem/icd9cm" - oid: "urn:oid:2.16.840.1.113883.6.2" -- id: "I9CDX" - description: "ICD-9CM Diagnosis codes" - url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-diagnosiscodes" - oid: "urn:oid:2.16.840.1.113883.6.103" -- id: "I9CP" - description: "ICD-9CM Procedure codes" - url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-procedurecodes" - oid: "urn:oid:2.16.840.1.113883.6.104" -- id: "IBT" - description: "ISBT" - url: "http://terminology.hl7.org/CodeSystem/ib" - oid: "urn:oid:2.16.840.1.113883.6.18" - -- id: "ICD10CA" - description: "ICD-10 Canada" - url: "http://hl7.org/fhir/sid/icd-10-ca" - oid: "urn:oid:2.16.840.1.113883.6.94" -- id: "ICD10GM2007" - description: "ICD 10 Germany v2007" - url: "http://terminology.hl7.org/CodeSystem/dmdICD10" - oid: "urn:oid:2.16.840.1.113883.6.3.3" -- id: "ICD10GM2008" - description: "ICD 10 Germany v2008" - url: "http://terminology.hl7.org/CodeSystem/dmdICD10" - oid: "urn:oid:2.16.840.1.113883.6.3.3" -- id: "ICDO" - description: "International Classification of Diseases for Oncology" - url: "http://terminology.hl7.org/CodeSystem/icd-o" - oid: "urn:oid:2.16.840.1.113883.6.43" -- id: "ICS" - description: "ICCS" - url: "http://terminology.hl7.org/CodeSystem/ics" - oid: "urn:oid:2.16.840.1.113883.6.41" -- id: "ICSD" - description: "International Classification of Sleep Disorders" - url: "http://terminology.hl7.org/CodeSystem/ICSD" - oid: "urn:oid:2.16.840.1.113883.6.45" - -- id: "IUPC" - description: "IUPAC/IFCC Component Codes" - url: "http://terminology.hl7.org/CodeSystem/IUPC" - oid: "urn:oid:2.16.840.1.113883.6.47" -- id: "IUPP" - description: "IUPAC/IFCC Property Codes" - url: "http://terminology.hl7.org/CodeSystem/IUPP" - oid: "urn:oid:2.16.840.1.113883.6.46" - -- id: "JC8" - description: "Japanese Chemistry" - url: "http://terminology.hl7.org/CodeSystem/JC8" - oid: "urn:oid:2.16.840.1.113883.6.48" - -- id: "LN" - description: "Logical Observation Identifier Names and Codes (LOINC)" - url: "http://loinc.org" - oid: "urn:oid:2.16.840.1.113883.6.1" -- id: "L" - description: "Local general code" - url: "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" -- id: "MDC" - description: "Medical Device Communication" - url: "urn:iso:std:iso:11073:10101" - oid: "urn:oid:2.16.840.1.113883.6.24" -- id: "MDDX" - description: "Medispan Diagnostic Codes" - url: "http://terminology.hl7.org/CodeSystem/MDDX" - oid: "urn:oid:2.16.840.1.113883.6.65" -- id: "MEDC" - description: "Medical Economics Drug Codes" - url: "http://terminology.hl7.org/CodeSystem/MEDC" - oid: "urn:oid:2.16.840.1.113883.6.67" - -- id: "MEDX" - description: "Medical Economics Diagnostic Codes" - url: "http://terminology.hl7.org/CodeSystem/MEDX" - oid: "urn:oid:2.16.840.1.113883.6.66" -- id: "MGPI" - description: "Medispan GPI" - url: "http://terminology.hl7.org/CodeSystem/MGPI" - oid: "urn:oid:2.16.840.1.113883.6.68" -- id: "MVX" - description: "CDC Vaccine Manufacturer Codes" - url: "http://terminology.hl7.org/CodeSystem/MVX" - oid: "urn:oid:2.16.840.1.113883.6.60" -- id: "NDA" - description: "NANDA" - url: "http://www.nanda.org/" - oid: "urn:oid:2.16.840.1.113883.6.20" -- id: "NDC" - description: "National drug codes" - url: "http://hl7.org/fhir/sid/ndc" - oid: "urn:oid:2.16.840.1.113883.6.69" -- id: "NIC" - description: "Nursing Interventions Classification" - url: "https://nursing.uiowa.edu/cncce/nursing-interventions-classification-overview" - oid: "urn:oid:2.16.840.1.113883.6.15" - -- id: "OHA" - description: "Omaha System" - url: "http://terminology.hl7.org/CodeSystem/oms" - oid: "urn:oid:2.16.840.1.113883.6.98" - -- id: "POS" - description: "POS Codes" - url: "http://terminology.hl7.org/CodeSystem/POS" - oid: "urn:oid:2.16.840.1.113883.6.50" - -- id: "SCT" - description: "SNOMED Clinical Terms" - url: "http://snomed.info/sct" - oid: "urn:oid:2.16.840.1.113883.6.96" - -- id: "SDM" - description: "SNOMED-DICOM Microglossary" - url: "http://terminology.hl7.org/CodeSystem/SDM" - oid: "urn:oid:2.16.840.1.113883.6.53" -- id: "SNM" - description: "Systemized Nomenclature in Medicine (SNOMED)" - url: "http://terminology.hl7.org/CodeSystem/snm" - oid: "urn:oid:2.16.840.1.113883.6.5" -- id: "SNM3" - description: "SNOMED International" - url: "http://terminology.hl7.org/CodeSystem/SNM3" - oid: "urn:oid:2.16.840.1.113883.6.51" -- id: "SNT" - description: "SNOMED topology codes (anatomic sites)" - url: "http://terminology.hl7.org/CodeSystem/SNT" - oid: "urn:oid:2.16.840.1.113883.6.52" - -- id: "UC" - description: "UCDS" - url: "http://terminology.hl7.org/CodeSystem/UC" - oid: "urn:oid:2.16.840.1.113883.6.54" -- id: "UCUM" - description: "UCUM code set for units of measure(from Regenstrief)" - url: "http://unitsofmeasure.org" - oid: "urn:oid:2.16.840.1.113883.6.8" -- id: "UMD" - description: "MDNS" - url: "http://terminology.hl7.org/CodeSystem/UMD" - oid: "urn:oid:2.16.840.1.113883.6.75" -- id: "UML" - description: "Unified Medical Language" - url: "http://terminology.hl7.org/CodeSystem/UML" - oid: "urn:oid:2.16.840.1.113883.6.56" -- id: "UPC" - description: "Universal Product Code" - url: "http://terminology.hl7.org/CodeSystem/UPC" - oid: "urn:oid:2.16.840.1.113883.6.55" -- id: "W4" - description: "WHO rec\\# code with ASTM extension" - url: "http://terminology.hl7.org/CodeSystem/W4" - oid: "urn:oid:2.16.840.1.113883.6.72" - -- id: "PHOccupationCDCCensus2010" - description: "Occupation CDC Census 2010" - url: "http://terminology.hl7.org/CodeSystem/PHOccupationCDCCensus2010" - oid: "urn:oid:2.16.840.1.114222.4.5.314" -- id: "v3-ManagedParticipationStatus" - description: "ManagedParticipationStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-ManagedParticipationStatus" - oid: "urn:oid:2.16.840.1.113883.5.1062" -- id: "v2-0280" - description: "referralPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0280" - oid: "urn:oid:2.16.840.1.113883.18.173" -- id: "NHSNProcedureCategory" - description: "NHSN Procedure Category" - url: "http://terminology.hl7.org/CodeSystem/NHSNProcedureCategory" - oid: "urn:oid:2.16.840.1.113883.6.271" -- id: "v2-0003" - description: "eventType" - url: "http://terminology.hl7.org/CodeSystem/v2-0003" - oid: "urn:oid:2.16.840.1.113883.18.4" -- id: "special-values" - description: "SpecialValues" - url: "http://terminology.hl7.org/CodeSystem/special-values" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1049" -- id: "communication-not-done-reason" - description: "CommunicationNotDoneReason" - url: "http://terminology.hl7.org/CodeSystem/communication-not-done-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1077" -- id: "v2-0146" - description: "amountType" - url: "http://terminology.hl7.org/CodeSystem/v2-0146" - oid: "urn:oid:2.16.840.1.113883.18.67" -- id: "v2-0516" - description: "errorSeverity" - url: "http://terminology.hl7.org/CodeSystem/v2-0516" - oid: "urn:oid:2.16.840.1.113883.18.337" -- id: "v2-0238" - description: "eventSeriousness" - url: "http://terminology.hl7.org/CodeSystem/v2-0238" - oid: "urn:oid:2.16.840.1.113883.18.137" -- id: "v2-0392" - description: "matchReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0392" - oid: "urn:oid:2.16.840.1.113883.18.243" -- id: "medicationrequest-course-of-therapy" - description: "MedicationRequest Course of Therapy Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1327" -- id: "audit-event-outcome" - description: "AuditEventOutcome" - url: "http://terminology.hl7.org/CodeSystem/audit-event-outcome" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "v2-0404" - description: "languageProficiency" - url: "http://terminology.hl7.org/CodeSystem/v2-0404" - oid: "urn:oid:2.16.840.1.113883.18.253" -- id: "v2-0384" - description: "substanceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0384" - oid: "urn:oid:2.16.840.1.113883.18.237" -- id: "benefit-type" - description: "Benefit Type Codes" - url: "http://terminology.hl7.org/CodeSystem/benefit-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1176" -- id: "claim-type" - description: "Claim Type Codes" - url: "http://terminology.hl7.org/CodeSystem/claim-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1156" -- id: "catalogType" - description: "CatalogType" - url: "http://terminology.hl7.org/CodeSystem/catalogType" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1288" -- id: "practitioner-role" - description: "Practitioner role" - url: "http://terminology.hl7.org/CodeSystem/practitioner-role" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1132" -- id: "v2-0107" - description: "deferredResponseType" - url: "http://terminology.hl7.org/CodeSystem/v2-0107" - oid: "urn:oid:2.16.840.1.113883.18.44" -- id: "DEEDS210" - description: "DEEDS2.10" - url: "http://terminology.hl7.org/CodeSystem/DEEDS210" - oid: "urn:oid:2.16.840.1.113883.6.102.2.10" -- id: "v2-0557" - description: "payeeType" - url: "http://terminology.hl7.org/CodeSystem/v2-0557" - oid: "urn:oid:2.16.840.1.113883.18.361" -- id: "v2-0279" - description: "allowSubstitution" - url: "http://terminology.hl7.org/CodeSystem/v2-0279" - oid: "urn:oid:2.16.840.1.113883.18.172" -- id: "reaction-event-certainty" - description: "AllergyIntoleranceCertainty" - url: "http://terminology.hl7.org/CodeSystem/reaction-event-certainty" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1276" -- id: "v3-AcknowledgementCondition" - description: "AcknowledgementCondition" - url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementCondition" - oid: "urn:oid:2.16.840.1.113883.5.1050" -- id: "v2-0916" - description: "relevantClincialInformation" - url: "http://terminology.hl7.org/CodeSystem/v2-0916" - oid: "urn:oid:2.16.840.1.113883.18.422" -- id: "v2-0445" - description: "identityReliability" - url: "http://terminology.hl7.org/CodeSystem/v2-0445" - oid: "urn:oid:2.16.840.1.113883.18.285" -- id: "v2-0500" - description: "consentDisclosureLevel" - url: "http://terminology.hl7.org/CodeSystem/v2-0500" - oid: "urn:oid:2.16.840.1.113883.18.324" -- id: "v2-0150" - description: "certificationPatientType" - url: "http://terminology.hl7.org/CodeSystem/v2-0150" - oid: "urn:oid:2.16.840.1.113883.18.71" -- id: "X12.3" - description: "X12.3 Data Elementary Dictionary" - url: "http://terminology.hl7.org/CodeSystem/X12.3" - oid: "urn:oid:2.16.840.1.113883.6.255" -- id: "allerg-intol-substance-exp-risk" - description: "AllergyIntoleranceSubstanceExposureRisk" - url: "http://terminology.hl7.org/CodeSystem/allerg-intol-substance-exp-risk" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1275" -- id: "v2-0717" - description: "accessRestrictionValue" - url: "http://terminology.hl7.org/CodeSystem/v2-0717" - oid: "urn:oid:2.16.840.1.113883.18.388" -- id: "diagnosis-role" - description: null - url: "http://terminology.hl7.org/CodeSystem/diagnosis-role" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1054" -- id: "v2-0202" - description: "telecommunicationEquipmentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0202" - oid: "urn:oid:2.16.840.1.113883.18.107" -- id: "sic" - description: "US Census Bureau" - url: "http://terminology.hl7.org/CodeSystem/sic" - oid: "urn:oid:2.16.840.1.113883.6.232" -- id: "dicomMDLTY" - description: "DICOM modality codes" - url: "http://terminology.hl7.org/CodeSystem/dicomMDLTY" - oid: "urn:oid:2.16.840.1.113883.6.31" -- id: "v3-AddressPartType" - description: "AddressPartType" - url: "http://terminology.hl7.org/CodeSystem/v3-AddressPartType" - oid: "urn:oid:2.16.840.1.113883.5.16" -- id: "v3-DataOperation" - description: "DataOperation" - url: "http://terminology.hl7.org/CodeSystem/v3-DataOperation" - oid: "urn:oid:2.16.840.1.113883.5.1123" -- id: "GCDF" - description: "GCDF" - url: "http://terminology.hl7.org/CodeSystem/GCDF" - oid: "urn:oid:2.16.840.1.113883.4.79" -- id: "v2-0255" - description: "durationCategories" - url: "http://terminology.hl7.org/CodeSystem/v2-0255" - oid: "urn:oid:2.16.840.1.113883.18.150" -- id: "v3-ActRelationshipJoin" - description: "ActRelationshipJoin" - url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipJoin" - oid: "urn:oid:2.16.840.1.113883.5.12" -- id: "v3-EntityNameUse" - description: "EntityNameUse" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNameUse" - oid: "urn:oid:2.16.840.1.113883.5.45" -- id: "medication-usage-admin-location" - description: "MedicationUsage Administration Location Codes" - url: "http://terminology.hl7.org/CodeSystem/medication-usage-admin-location" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "v2-0469" - description: "packagingStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0469" - oid: "urn:oid:2.16.840.1.113883.18.298" -- id: "v2-0193" - description: "amountClass" - url: "http://terminology.hl7.org/CodeSystem/v2-0193" - oid: "urn:oid:2.16.840.1.113883.18.103" -- id: "location-physical-type" - description: "Location type" - url: "http://terminology.hl7.org/CodeSystem/location-physical-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1108" -- id: "FDBHICCode" - description: "FDB HIC Code" - url: "http://terminology.hl7.org/CodeSystem/FDBHICCode" - oid: "urn:oid:2.16.840.1.113883.3.84" -- id: "v2-0243" - description: "identityMayBeDivulged" - url: "http://terminology.hl7.org/CodeSystem/v2-0243" - oid: "urn:oid:2.16.840.1.113883.18.142" -- id: "v3-VaccineType" - description: "VaccineType" - url: "http://terminology.hl7.org/CodeSystem/v3-VaccineType" - oid: "urn:oid:2.16.840.1.113883.5.145" -- id: "v2-0490" - description: "specimenRejectReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0490" - oid: "urn:oid:2.16.840.1.113883.18.314" -- id: "subscription-channel-type" - description: "SubscriptionChannel Type Codes" - url: "http://terminology.hl7.org/CodeSystem/subscription-channel-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1432" -- id: "v2-0185" - description: "preferredMethodOfContact" - url: "http://terminology.hl7.org/CodeSystem/v2-0185" - oid: "urn:oid:2.16.840.1.113883.18.98" -- id: "v2-0351" - description: "nubc-OccurrenceSpan-cs" - url: "http://terminology.hl7.org/CodeSystem/v2-0351" - oid: "urn:oid:2.16.840.1.113883.6.301.8" -- id: "DEEDS416" - description: "DEEDS416" - url: "http://terminology.hl7.org/CodeSystem/DEEDS416" - oid: "urn:oid:2.16.840.1.113883.6.102.4.16" -- id: "v3-hl7PublishingDomain" - description: "HL7PublishingDomain" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingDomain" - oid: "urn:oid:2.16.840.1.113883.5.1136" -- id: "v2-0214" - description: "specialProgram" - url: "http://terminology.hl7.org/CodeSystem/v2-0214" - oid: "urn:oid:2.16.840.1.113883.18.118" -- id: "v3-ObservationCategory" - description: "ObservationCategory" - url: "http://terminology.hl7.org/CodeSystem/v3-ObservationCategory" - oid: "urn:oid:2.16.840.1.113883.4.642.1.222" -- id: "v2-0428" - description: "incidentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0428" - oid: "urn:oid:2.16.840.1.113883.18.269" -- id: "dicomqry" - description: "DICOM Query Label" - url: "http://terminology.hl7.org/CodeSystem/dicomqry" - oid: "urn:oid:2.16.840.1.113883.6.32" -- id: "v3-ParameterizedDataType" - description: "ParameterizedDataType" - url: "http://terminology.hl7.org/CodeSystem/v3-ParameterizedDataType" - oid: "urn:oid:2.16.840.1.113883.5.87" -- id: "externalCodeSystems" - description: "HL7 Registered External Coding Systems" - url: "http://terminology.hl7.org/CodeSystem/externalCodeSystems" - oid: "urn:oid:2.16.840.1.113883.6" -- id: "device-status-reason" - description: "FHIRDeviceStatusReason" - url: "http://terminology.hl7.org/CodeSystem/device-status-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1082" -- id: "resource-security-category" - description: "ResourceSecurityCategory" - url: "http://terminology.hl7.org/CodeSystem/resource-security-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1404" -- id: "v2-0263" - description: "levelOfCare" - url: "http://terminology.hl7.org/CodeSystem/v2-0263" - oid: "urn:oid:2.16.840.1.113883.18.158" -- id: "media-category" - description: "Digital Media Category" - url: "http://terminology.hl7.org/CodeSystem/media-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.326" -- id: "W1-W2" - description: "WHO rec# drug codes" - url: "http://terminology.hl7.org/CodeSystem/W1-W2" - oid: "urn:oid:2.16.840.1.113883.6.71" -- id: "v2-0326" - description: "visitIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0326" - oid: "urn:oid:2.16.840.1.113883.18.199" -- id: "v2-0776" - description: "itemStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0776" - oid: "urn:oid:2.16.840.1.113883.18.402" -- id: "v3-brazilianProcedureCodesSUS" - description: "Brazilian Procedure Codes SUS" - url: "http://terminology.hl7.org/CodeSystem/v3-brazilianProcedureCodesSUS" - oid: "urn:oid:2.16.840.1.113883.2.21.10" -- id: "v3-HealthcareProviderTaxonomyHIPAA" - description: "Healthcare Provider Taxonomy HIPAA" - url: "http://terminology.hl7.org/CodeSystem/v3-HealthcareProviderTaxonomyHIPAA" - oid: "urn:oid:2.16.840.1.113883.5.53" -- id: "triggerEventID" - description: "Trigger Event ID" - url: "http://terminology.hl7.org/CodeSystem/triggerEventID" - oid: "urn:oid:2.16.840.1.113883.1.18" -- id: "v2-0234" - description: "reportTiming" - url: "http://terminology.hl7.org/CodeSystem/v2-0234" - oid: "urn:oid:2.16.840.1.113883.18.133" -- id: "v2-0371" - description: "additivePreservative" - url: "http://terminology.hl7.org/CodeSystem/v2-0371" - oid: "urn:oid:2.16.840.1.113883.18.229" -- id: "multum" - description: "Multum Lexicon" - url: "http://terminology.hl7.org/CodeSystem/multum" - oid: "urn:oid:2.16.840.1.113883.6.27" -- id: "v2-0388" - description: "processingType" - url: "http://terminology.hl7.org/CodeSystem/v2-0388" - oid: "urn:oid:2.16.840.1.113883.18.239" -- id: "composite-measure-scoring" - description: "CompositeMeasureScoring" - url: "http://terminology.hl7.org/CodeSystem/composite-measure-scoring" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1235" -- id: "v2-0367" - description: "alertLevel" - url: "http://terminology.hl7.org/CodeSystem/v2-0367" - oid: "urn:oid:2.16.840.1.113883.18.225" -- id: "contractaction" - description: "Contract Action Codes" - url: "http://terminology.hl7.org/CodeSystem/contractaction" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1202" -- id: "v3-nuccProviderCodes" - description: "NUCC Health Care Provider Taxonomy" - url: "http://terminology.hl7.org/CodeSystem/v3-nuccProviderCodes" - oid: "urn:oid:2.16.840.1.113883.6.101" -- id: "service-type" - description: "Service type" - url: "http://terminology.hl7.org/CodeSystem/service-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1145" -- id: "v3-Currency" - description: "Currency" - url: "http://terminology.hl7.org/CodeSystem/v3-Currency" - oid: "urn:oid:2.16.840.1.113883.5.1058" -- id: "ICD-9CM-procedurecodes" - description: "National Center for Health Statistics" - url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-procedurecodes" - oid: "urn:oid:2.16.840.1.113883.6.104" -- id: "v3-hl7ITSType" - description: "HL7ITSType" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7ITSType" - oid: "urn:oid:2.16.840.1.113883.5.1135" -- id: "v3-MdfHmdRowType" - description: "MdfHmdRowType" - url: "http://terminology.hl7.org/CodeSystem/v3-MdfHmdRowType" - oid: "urn:oid:2.16.840.1.113883.5.76" -- id: "v2-0625" - description: "itemStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0625" - oid: "urn:oid:2.16.840.1.113883.18.377" -- id: "v3-RoleClass" - description: "RoleClass" - url: "http://terminology.hl7.org/CodeSystem/v3-RoleClass" - oid: "urn:oid:2.16.840.1.113883.5.110" -- id: "v3-AcknowledgementType" - description: "AcknowledgementType" - url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementType" - oid: "urn:oid:2.16.840.1.113883.5.18" -- id: "v2-0275" - description: "documentStorageStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0275" - oid: "urn:oid:2.16.840.1.113883.18.168" -- id: "iso639-3" - description: "ISO 639-3 Language Codes Alpha 3" - url: "http://terminology.hl7.org/CodeSystem/iso639-3" - oid: "urn:oid:1.0.639.3" -- id: "v2-0330" - description: "marketingBasis" - url: "http://terminology.hl7.org/CodeSystem/v2-0330" - oid: "urn:oid:2.16.840.1.113883.18.201" -- id: "medicationrequest-category" - description: "MedicationRequest Category Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationrequest-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1323" -- id: "v2-0127" - description: "allergenType" - url: "http://terminology.hl7.org/CodeSystem/v2-0127" - oid: "urn:oid:2.16.840.1.113883.18.54" -- id: "v3-IdentifierReliability" - description: "IdentifierReliability" - url: "http://terminology.hl7.org/CodeSystem/v3-IdentifierReliability" - oid: "urn:oid:2.16.840.1.113883.5.1117" -- id: "v2-0062" - description: "eventReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0062" - oid: "urn:oid:2.16.840.1.113883.18.23" -- id: "v2-0432" - description: "admissionLevelOfCare" - url: "http://terminology.hl7.org/CodeSystem/v2-0432" - oid: "urn:oid:2.16.840.1.113883.18.273" -- id: "epsg-ca" - description: "European Petroleum Survey Group Geodetic Parameter Dataset Coordinate Axis" - url: "http://terminology.hl7.org/CodeSystem/epsg-ca" - oid: "urn:oid:2.16.840.1.113883.6.279" -- id: "expansion-parameter-source" - description: "ExpansionParameterSource" - url: "http://terminology.hl7.org/CodeSystem/expansion-parameter-source" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1279" -- id: "v2-0520" - description: "messageWaitingPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0520" - oid: "urn:oid:2.16.840.1.113883.18.340" -- id: "v2-0170" - description: "derivedSpecimen" - url: "http://terminology.hl7.org/CodeSystem/v2-0170" - oid: "urn:oid:2.16.840.1.113883.18.88" -- id: "appointment-cancellation-reason" - description: "Appointment cancellation reason" - url: "http://terminology.hl7.org/CodeSystem/appointment-cancellation-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1382" -- id: "v2-0936" - description: "observationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0936" - oid: "urn:oid:2.16.840.1.113883.18.439" -- id: "testscript-profile-destination-types" - description: "Test script profile destination type" - url: "http://terminology.hl7.org/CodeSystem/testscript-profile-destination-types" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1197" -- id: "v2-0465" - description: "name-addressRepresentation" - url: "http://terminology.hl7.org/CodeSystem/v2-0465" - oid: "urn:oid:2.16.840.1.113883.18.295" -- id: "v3-PersonDisabilityType" - description: "PersonDisabilityType" - url: "http://terminology.hl7.org/CodeSystem/v3-PersonDisabilityType" - oid: "urn:oid:2.16.840.1.113883.5.93" -- id: "icd9" - description: "ICD9" - url: "http://terminology.hl7.org/CodeSystem/icd9" - oid: "urn:oid:2.16.840.1.113883.6.42" -- id: "v2-0166" - description: "rxComponentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0166" - oid: "urn:oid:2.16.840.1.113883.18.84" -- id: "v2-0536" - description: "certificateStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0536" - oid: "urn:oid:2.16.840.1.113883.18.350" -- id: "v2-0473" - description: "formularyStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0473" - oid: "urn:oid:2.16.840.1.113883.18.301" -- id: "v2-0189" - description: "ethnicGroup" - url: "http://terminology.hl7.org/CodeSystem/v2-0189" - oid: "urn:oid:2.16.840.1.113883.18.100" -- id: "HL70189" - description: "ethnicGroup" - url: "http://terminology.hl7.org/CodeSystem/v2-0189" - oid: "urn:oid:2.16.840.1.113883.18.100" -- id: "v2-0920" - description: "preferredSpecimen-AttributeStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0920" - oid: "urn:oid:2.16.840.1.113883.18.426" -- id: "benefit-unit" - description: "Unit Type Codes" - url: "http://terminology.hl7.org/CodeSystem/benefit-unit" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1178" -- id: "DEEDS508" - description: "DEEDS508" - url: "http://terminology.hl7.org/CodeSystem/DEEDS508" - oid: "urn:oid:2.16.840.1.113883.6.102.5.8" -- id: "v2-0561" - description: "product-servicesClarification" - url: "http://terminology.hl7.org/CodeSystem/v2-0561" - oid: "urn:oid:2.16.840.1.113883.18.364" -- id: "v2-0131" - description: "contactRole2" - url: "http://terminology.hl7.org/CodeSystem/v2-0131" - oid: "urn:oid:2.16.840.1.113883.18.58" -- id: "v3-HL7ContextConductionStyle" - description: "HL7ContextConductionStyle" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7ContextConductionStyle" - oid: "urn:oid:2.16.840.1.113883.5.1129" -- id: "NHSNSSIAnatomicSite" - description: "NHSN SSI Anatomic Site" - url: "http://terminology.hl7.org/CodeSystem/NHSNSSIAnatomicSite" - oid: "urn:oid:2.16.840.1.113883.6.272" -- id: "v2-0424" - description: "gestationCategory" - url: "http://terminology.hl7.org/CodeSystem/v2-0424" - oid: "urn:oid:2.16.840.1.113883.18.265" -- id: "v3-TelecommunicationAddressUse" - description: "TelecommunicationAddressUse" - url: "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationAddressUse" - oid: "urn:oid:2.16.840.1.113883.5.1011" -- id: "v2-0074" - description: "diagnosticServiceSectionId" - url: "http://terminology.hl7.org/CodeSystem/v2-0074" - oid: "urn:oid:2.16.840.1.113883.18.29" -- id: "whoARTfl" - description: "WHO Adverse Reaction Terms foreign language translations" - url: "http://terminology.hl7.org/CodeSystem/whoARTfl" - oid: "urn:oid:2.16.840.1.113883.6.230" -- id: "v3-loinc" - description: "Logical Observation Identifiers, Names and Codes (LOINC)" - url: "http://loinc.org" - oid: "urn:oid:2.16.840.1.113883.6.1" -- id: "research-study-reason-stopped" - description: "ResearchStudyReasonStopped" - url: "http://terminology.hl7.org/CodeSystem/research-study-reason-stopped" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1249" -- id: "v2-0560" - description: "Quantity Units" - url: "http://terminology.hl7.org/CodeSystem/v2-0560" - oid: "urn:oid:2.16.840.1.113883.18.455" -- id: "v2-0130" - description: "visitUserCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0130" - oid: "urn:oid:2.16.840.1.113883.18.56" -- id: "v3-ConceptProperty" - description: "HL7 Value Set and Coded Concept Property Codes" - url: "http://terminology.hl7.org/CodeSystem/v3-ConceptProperty" - oid: "urn:oid:2.16.840.1.113883.5.1087" -- id: "nciVersionOfNDF-RT" - description: "NCI Version of NDF-RT" - url: "http://terminology.hl7.org/CodeSystem/nciVersionOfNDF-RT" - oid: "urn:oid:2.16.840.1.113883.3.26.1.5" -- id: "v3-iso4217-HL7" - description: "ISO 4217 Currency code, HL7 use" - url: "http://terminology.hl7.org/CodeSystem/v3-iso4217-HL7" - oid: "urn:oid:2.16.840.1.113883.6.9" -- id: "v2-0425" - description: "newbornType" - url: "http://terminology.hl7.org/CodeSystem/v2-0425" - oid: "urn:oid:2.16.840.1.113883.18.266" -- id: "MDRSPA" - description: "MedDRA Spanish" - url: "http://terminology.hl7.org/CodeSystem/MDRSPA" - oid: "urn:oid:2.16.840.1.113883.6.163.6" -- id: "nmds" - description: "Nursing Minimum Data Set" - url: "http://terminology.hl7.org/CodeSystem/nmds" - oid: "urn:oid:2.16.840.1.113883.6.87" -- id: "v3-ActRelationshipType" - description: "ActRelationshipType" - url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipType" - oid: "urn:oid:2.16.840.1.113883.5.1002" -- id: "v3-QueryRequestLimit" - description: "QueryRequestLimit" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryRequestLimit" - oid: "urn:oid:2.16.840.1.113883.5.1112" -- id: "v3-sctemp" - description: "pan-Canadian Temporary Codes" - url: "https://fhir.infoway-inforoute.ca/CodeSystem/sctemp" - oid: "urn:oid:2.16.840.1.113883.2.20.5.2" -- id: "v2-0167" - description: "substitutionStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0167" - oid: "urn:oid:2.16.840.1.113883.18.85" -- id: "v2-0472" - description: "tqConjunctionId" - url: "http://terminology.hl7.org/CodeSystem/v2-0472" - oid: "urn:oid:2.16.840.1.113883.18.300" -- id: "v2-0921" - description: "certificationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0921" - oid: "urn:oid:2.16.840.1.113883.18.427" -- id: "coverage-class" - description: "Coverage Class Codes" - url: "http://terminology.hl7.org/CodeSystem/coverage-class" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1147" -- id: "v2-0258" - description: "relationshipModifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0258" - oid: "urn:oid:2.16.840.1.113883.18.153" -- id: "mth-icpc2-icd10-7B" - description: "ICPC2-ICD10 Thesaurus, 7-bit" - url: "http://terminology.hl7.org/CodeSystem/mth-icpc2-icd10-7B" - oid: "urn:oid:2.16.840.1.113883.6.142.2" -- id: "NHSNHipReplacement" - description: "NHSN Hip Replacement" - url: "http://terminology.hl7.org/CodeSystem/NHSNHipReplacement" - oid: "urn:oid:2.16.840.1.113883.6.263" -- id: "v2-0937" - description: "observationSubtype" - url: "http://terminology.hl7.org/CodeSystem/v2-0937" - oid: "urn:oid:2.16.840.1.113883.18.440" -- id: "v3-AmericanIndianAlaskaNativeLanguages" - description: "AmericanIndianAlaskaNativeLanguages" - url: "http://terminology.hl7.org/CodeSystem/v3-AmericanIndianAlaskaNativeLanguages" - oid: "urn:oid:2.16.840.1.113883.5.1054" -- id: "v2-0034" - description: "siteAdministered" - url: "http://terminology.hl7.org/CodeSystem/v2-0034" - oid: "urn:oid:2.16.840.1.113883.18.17" -- id: "measure-scoring" - description: "MeasureScoring" - url: "http://terminology.hl7.org/CodeSystem/measure-scoring" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1232" -- id: "audit-event-type" - description: "Audit Event ID" - url: "http://terminology.hl7.org/CodeSystem/audit-event-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1136" -- id: "adjudication" - description: "Adjudication Value Codes" - url: "http://terminology.hl7.org/CodeSystem/adjudication" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1171" -- id: "v2-0126" - description: "quantityLimitedRequest" - url: "http://terminology.hl7.org/CodeSystem/v2-0126" - oid: "urn:oid:2.16.840.1.113883.18.53" -- id: "v3-QueryPriority" - description: "QueryPriority" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryPriority" - oid: "urn:oid:2.16.840.1.113883.5.102" -- id: "v2-0063" - description: "relationship" - url: "http://terminology.hl7.org/CodeSystem/v2-0063" - oid: "urn:oid:2.16.840.1.113883.18.24" -- id: "v2-0433" - description: "precaution" - url: "http://terminology.hl7.org/CodeSystem/v2-0433" - oid: "urn:oid:2.16.840.1.113883.18.274" -- id: "v3-CalendarCycle" - description: "Calendar Cycle Codes" - url: "http://terminology.hl7.org/CodeSystem/v3-CalendarCycle" - oid: "urn:oid:2.16.840.1.113883.5.9" -- id: "v2-0761" - description: "drgProcedureDeterminationStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0761" - oid: "urn:oid:2.16.840.1.113883.18.400" -- id: "iso639-2" - description: "ISO 639-2: Codes for the representation of names of languages -- Part 2:\ - \ Alpha-3 code" - url: "http://terminology.hl7.org/CodeSystem/iso639-2" - oid: "urn:oid:1.0.639.2" -- id: "v2-0331" - description: "facilityType" - url: "http://terminology.hl7.org/CodeSystem/v2-0331" - oid: "urn:oid:2.16.840.1.113883.18.202" -- id: "SCDHEC-GISSpatialAccuracyTiers" - description: "SCDHEC GIS Spatial Accuracy Tiers" - url: "http://terminology.hl7.org/CodeSystem/SCDHEC-GISSpatialAccuracyTiers" - oid: "urn:oid:2.16.840.1.113883.6.241" -- id: "v3-URLScheme" - description: "Universal Resource Locator Scheme" - url: "http://terminology.hl7.org/CodeSystem/v3-URLScheme" - oid: "urn:oid:2.16.840.1.113883.5.143" -- id: "v2-0223" - description: "livingDependency2" - url: "http://terminology.hl7.org/CodeSystem/v2-0223" - oid: "urn:oid:2.16.840.1.113883.18.124" -- id: "codesystem-altcode-kind" - description: "AlternativeCodeKind" - url: "http://terminology.hl7.org/CodeSystem/codesystem-altcode-kind" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1284" -- id: "service-provision-conditions" - description: "ServiceProvisionConditions" - url: "http://terminology.hl7.org/CodeSystem/service-provision-conditions" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1143" -- id: "v2-0389" - description: "analyteRepeatStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0389" - oid: "urn:oid:2.16.840.1.113883.18.240" -- id: "v2-0366" - description: "local-remoteControlState" - url: "http://terminology.hl7.org/CodeSystem/v2-0366" - oid: "urn:oid:2.16.840.1.113883.18.224" -- id: "v3-icpc2E" - description: "International Classification of Primary Care, second edition (1998)" - url: "http://hl7.org/fhir/sid/icpc-2" - oid: "urn:oid:2.16.840.1.113883.6.139" -- id: "v3-ActRelationshipCheckpoint" - description: "ActRelationshipCheckpoint" - url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipCheckpoint" - oid: "urn:oid:2.16.840.1.113883.5.10" -- id: "guide-parameter-code" - description: "GuideParameterCode" - url: "http://terminology.hl7.org/CodeSystem/guide-parameter-code" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1421" -- id: "v3-GenderStatus" - description: "GenderStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-GenderStatus" - oid: "urn:oid:2.16.840.1.113883.5.51" -- id: "discharge-disposition" - description: "Discharge disposition" - url: "http://terminology.hl7.org/CodeSystem/discharge-disposition" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1093" -- id: "whoPOR" - description: "WHO Adverse Reaction Terms Portuguese" - url: "http://terminology.hl7.org/CodeSystem/whoPOR" - oid: "urn:oid:2.16.840.1.113883.6.230.3" -- id: "v2-0235" - description: "reportSource" - url: "http://terminology.hl7.org/CodeSystem/v2-0235" - oid: "urn:oid:2.16.840.1.113883.18.134" -- id: "extra-security-role-type" - description: null - url: "http://terminology.hl7.org/CodeSystem/extra-security-role-type" - oid: null -- id: "v2-0370" - description: "containerStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0370" - oid: "urn:oid:2.16.840.1.113883.18.228" -- id: "v2-0409" - description: "applicationChangeType" - url: "http://terminology.hl7.org/CodeSystem/v2-0409" - oid: "urn:oid:2.16.840.1.113883.18.255" -- id: "plan-definition-type" - description: "PlanDefinitionType" - url: "http://terminology.hl7.org/CodeSystem/plan-definition-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1245" -- id: "v3-EntityHandling" - description: "EntityHandling" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityHandling" - oid: "urn:oid:2.16.840.1.113883.5.42" -- id: "usage-context-type" - description: "UsageContextType" - url: "http://terminology.hl7.org/CodeSystem/usage-context-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1068" -- id: "v2-0262" - description: "privacyLevel" - url: "http://terminology.hl7.org/CodeSystem/v2-0262" - oid: "urn:oid:2.16.840.1.113883.18.157" -- id: "container-cap" - description: "ContainerCap" - url: "http://terminology.hl7.org/CodeSystem/container-cap" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1258" -- id: "icd10" - description: "ICD-10" - # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system - url: "http://hl7.org/fhir/sid/icd-10-cm" - oid: "urn:oid:2.16.840.1.113883.6.3" -- id: "soc" - description: "Standard Occupation Code" - url: "http://terminology.hl7.org/CodeSystem/soc" - oid: "urn:oid:2.16.840.1.113883.6.243" -- id: "question-max-occurs" - description: "MaxOccurs" - url: "http://terminology.hl7.org/CodeSystem/question-max-occurs" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1272" -- id: "v2-0429" - description: "productionClass" - url: "http://terminology.hl7.org/CodeSystem/v2-0429" - oid: "urn:oid:2.16.840.1.113883.18.270" -- id: "forms-codes" - description: "Form Codes" - url: "http://terminology.hl7.org/CodeSystem/forms-codes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1052" -- id: "icpc2-icd10-DUT" - description: "ICPC2-ICD10ENG Thesaurus, Dutch Translation" - url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-DUT" - oid: "urn:oid:2.16.840.1.113883.6.142.1" -- id: "v2-0350" - description: "nubc-OccurrenceCode-cs" - url: "http://terminology.hl7.org/CodeSystem/v2-0350" - oid: "urn:oid:2.16.840.1.113883.6.301.7" -- id: "v3-Country" - description: "Country" - url: "http://terminology.hl7.org/CodeSystem/v3-Country" - oid: "urn:oid:2.16.840.1.113883.5.28" -- id: "v3-TimingEvent" - description: "TimingEvent" - url: "http://terminology.hl7.org/CodeSystem/v3-TimingEvent" - oid: "urn:oid:2.16.840.1.113883.5.139" -- id: "v3-MapRelationship" - description: "MapRelationship" - url: "http://terminology.hl7.org/CodeSystem/v3-MapRelationship" - oid: "urn:oid:2.16.840.1.113883.5.67" -- id: "v2-0215" - description: "publicity" - url: "http://terminology.hl7.org/CodeSystem/v2-0215" - oid: "urn:oid:2.16.840.1.113883.18.119" -- id: "v2-0491" - description: "specimenQuality" - url: "http://terminology.hl7.org/CodeSystem/v2-0491" - oid: "urn:oid:2.16.840.1.113883.18.315" -- id: "v2-0868" - description: "telecommunicationExpirationReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0868" - oid: "urn:oid:2.16.840.1.113883.18.409" -- id: "payment-type" - description: "Payment Type Codes" - url: "http://terminology.hl7.org/CodeSystem/payment-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1186" -- id: "MDRAE" - description: "MedDRA Am Engl" - url: "http://terminology.hl7.org/CodeSystem/MDRAE" - oid: "urn:oid:2.16.840.1.113883.6.163.1" -- id: "risk-probability" - description: "Risk Probability" - url: "http://terminology.hl7.org/CodeSystem/risk-probability" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1133" -- id: "v2-0757" - description: "drgStatusRespirationMinutes" - url: "http://terminology.hl7.org/CodeSystem/v2-0757" - oid: "urn:oid:2.16.840.1.113883.18.398" -- id: "v2-0242" - description: "primaryObserverQualification" - url: "http://terminology.hl7.org/CodeSystem/v2-0242" - oid: "urn:oid:2.16.840.1.113883.18.141" -- id: "MDRFRE" - description: "MedDRA French" - url: "http://terminology.hl7.org/CodeSystem/MDRFRE" - oid: "urn:oid:2.16.840.1.113883.6.163.3" -- id: "v2-0487" - description: "specimenType" - url: "http://terminology.hl7.org/CodeSystem/v2-0487" - oid: "urn:oid:2.16.840.1.113883.18.311" -- id: "v3-WC" - description: "WHO ATC" - url: "http://www.whocc.no/atc" - oid: "urn:oid:2.16.840.1.113883.6.73" -- id: "v2-0038" - description: "orderStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0038" - oid: "urn:oid:2.16.840.1.113883.18.18" -- id: "v2-0468" - description: "paymentAdjustmentInformation" - url: "http://terminology.hl7.org/CodeSystem/v2-0468" - oid: "urn:oid:2.16.840.1.113883.18.297" -- id: "v3-PaymentTerms" - description: "PaymentTerms" - url: "http://terminology.hl7.org/CodeSystem/v3-PaymentTerms" - oid: "urn:oid:2.16.840.1.113883.5.91" -- id: "v2-0311" - description: "jobStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0311" - oid: "urn:oid:2.16.840.1.113883.18.189" -- id: "v3-CodeSystem" - description: "CodeSystem" - url: "http://terminology.hl7.org/CodeSystem/v3-CodeSystem" - oid: "urn:oid:2.16.840.1.113883.5.22" -- id: "diet" - description: "Diet" - url: "http://terminology.hl7.org/CodeSystem/diet" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1091" -- id: "admit-source" - description: "Admit source" - url: "http://terminology.hl7.org/CodeSystem/admit-source" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1092" -- id: "v2-0254" - description: "kindOfQuantity" - url: "http://terminology.hl7.org/CodeSystem/v2-0254" - oid: "urn:oid:2.16.840.1.113883.18.149" -- id: "v3-EncounterReferralSource" - description: "EncounterReferralSource" - url: "http://terminology.hl7.org/CodeSystem/v3-EncounterReferralSource" - oid: "urn:oid:2.16.840.1.113883.5.39" -- id: "v2-0080" - description: "natureOfAbnormalTesting" - url: "http://terminology.hl7.org/CodeSystem/v2-0080" - oid: "urn:oid:2.16.840.1.113883.18.32" -- id: "v3-RoleCode" - description: "RoleCode" - url: "http://terminology.hl7.org/CodeSystem/v3-RoleCode" - oid: "urn:oid:2.16.840.1.113883.5.111" -- id: "service-referral-method" - description: "ReferralMethod" - url: "http://terminology.hl7.org/CodeSystem/service-referral-method" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1142" -- id: "goal-category" - description: "Goal category" - url: "http://terminology.hl7.org/CodeSystem/goal-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1097" -- id: "v2-0203" - description: "identifierType" - url: "http://terminology.hl7.org/CodeSystem/v2-0203" - oid: "urn:oid:2.16.840.1.113883.18.108" -- id: "v2-0653" - description: "dateFormat" - url: "http://terminology.hl7.org/CodeSystem/v2-0653" - oid: "urn:oid:2.16.840.1.113883.18.381" -- id: "v3-QueryParameterValue" - description: "QueryParameterValue" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryParameterValue" - oid: "urn:oid:2.16.840.1.113883.5.1096" -- id: "medicationrequest-admin-location" - description: "Medication request administration location codes" - url: "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "v2-0917" - description: "bolusType" - url: "http://terminology.hl7.org/CodeSystem/v2-0917" - oid: "urn:oid:2.16.840.1.113883.18.423" -- id: "v2-0444" - description: "nameAssemblyOrder" - url: "http://terminology.hl7.org/CodeSystem/v2-0444" - oid: "urn:oid:2.16.840.1.113883.18.284" -- id: "v2-0501" - description: "consentNon-disclosureReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0501" - oid: "urn:oid:2.16.840.1.113883.18.325" -- id: "v2-0278" - description: "fillerStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0278" - oid: "urn:oid:2.16.840.1.113883.18.171" -- id: "v3-TableCellVerticalAlign" - description: "TableCellVerticalAlign" - url: "http://terminology.hl7.org/CodeSystem/v3-TableCellVerticalAlign" - oid: "urn:oid:2.16.840.1.113883.5.133" -- id: "dose-rate-type" - description: "DoseAndRateType" - url: "http://terminology.hl7.org/CodeSystem/dose-rate-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1069" -- id: "v2-0940" - description: "limitationTypeCode" - url: "http://terminology.hl7.org/CodeSystem/v2-0940" - oid: "urn:oid:2.16.840.1.113883.18.443" -- id: "v2-4000" - description: "name-addressRepresentation" - url: "http://terminology.hl7.org/CodeSystem/v2-4000" - oid: "urn:oid:2.16.840.1.113883.18.436" -- id: "icpc-FIN" - description: "International Classification of Primary Care 1993 Finnish" - url: "http://terminology.hl7.org/CodeSystem/icpc-FIN" - oid: "urn:oid:2.16.840.1.113883.6.138.4" -- id: "v2-0106" - description: "queryResponseFormat" - url: "http://terminology.hl7.org/CodeSystem/v2-0106" - oid: "urn:oid:2.16.840.1.113883.18.43" -- id: "v2-0556" - description: "benefitGroup" - url: "http://terminology.hl7.org/CodeSystem/v2-0556" - oid: "urn:oid:2.16.840.1.113883.18.360" -- id: "naics" - description: "North American Industry Classification System" - url: "http://terminology.hl7.org/CodeSystem/naics" - oid: "urn:oid:2.16.840.1.113883.6.85" -- id: "recommendation-strength" - description: "StrengthOfRecommendationRating" - url: "http://terminology.hl7.org/CodeSystem/recommendation-strength" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1268" -- id: "v3-LanguageAbilityProficiency" - description: "LanguageAbilityProficiency" - url: "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityProficiency" - oid: "urn:oid:2.16.840.1.113883.5.61" -- id: "icpc2E-DUT" - description: "ICPC2E, Dutch Translation" - url: "http://terminology.hl7.org/CodeSystem/icpc2E-DUT" - oid: "urn:oid:2.16.840.1.113883.6.139.2" -- id: "v2-0540" - description: "inactiveReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0540" - oid: "urn:oid:2.16.840.1.113883.18.352" -- id: "v3-cpt-4" - description: "CPT-4" - url: "http://www.ama-assn.org/go/cpt" - oid: "urn:oid:2.16.840.1.113883.6.12" -- id: "v3-ucum" - description: "Unified Code for Units of Measure (UCUM)" - url: "http://unitsofmeasure.org" - oid: "urn:oid:2.16.840.1.113883.6.8" -- id: "ex-paymenttype" - description: "Example Payment Type Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-paymenttype" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1181" -- id: "substance-category" - description: "Substance Category Codes" - url: "http://terminology.hl7.org/CodeSystem/substance-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1138" -- id: "v2-0239" - description: "eventExpected" - url: "http://terminology.hl7.org/CodeSystem/v2-0239" - oid: "urn:oid:2.16.840.1.113883.18.138" -- id: "v2-0669" - description: "loadStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0669" - oid: "urn:oid:2.16.840.1.113883.18.385" -- id: "v3-ActReason" - description: "ActReason" - url: "http://terminology.hl7.org/CodeSystem/v3-ActReason" - oid: "urn:oid:2.16.840.1.113883.5.8" -- id: "v2-0393" - description: "matchAlgorithms" - url: "http://terminology.hl7.org/CodeSystem/v2-0393" - oid: "urn:oid:2.16.840.1.113883.18.244" -- id: "parameter-group" - description: "DeviceDefinitionParameterGroup" - url: "http://terminology.hl7.org/CodeSystem/parameter-group" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1264" -- id: "v3-hc-DIN" - description: "Health Canada Drug Id Number" - url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-3" - oid: "urn:oid:2.16.840.1.113883.5.1105" -- id: "v2-0002" - description: "maritalStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0002" - oid: "urn:oid:2.16.840.1.113883.18.179" -- id: "v3-dbSNP" - description: "Genetic Sequence polymorphism database" - url: "http://www.ncbi.nlm.nih.gov/projects/SNP" - oid: "urn:oid:2.16.840.1.113883.6.284" -- id: "v2-0147" - description: "policyType" - url: "http://terminology.hl7.org/CodeSystem/v2-0147" - oid: "urn:oid:2.16.840.1.113883.18.68" -- id: "v2-0517" - description: "informInstructions" - url: "http://terminology.hl7.org/CodeSystem/v2-0517" - oid: "urn:oid:2.16.840.1.113883.18.338" -- id: "consentaction" - description: "Consent Action Codes" - url: "http://terminology.hl7.org/CodeSystem/consentaction" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1227" -- id: "v2-0281" - description: "referralType" - url: "http://terminology.hl7.org/CodeSystem/v2-0281" - oid: "urn:oid:2.16.840.1.113883.18.174" -- id: "v2-0009" - description: "ambulatoryStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0009" - oid: "urn:oid:2.16.840.1.113883.18.11" -- id: "flag-category" - description: "Flag Category" - url: "http://terminology.hl7.org/CodeSystem/flag-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1071" -- id: "v3-CommunicationFunctionType" - description: "CommunicationFunctionType" - url: "http://terminology.hl7.org/CodeSystem/v3-CommunicationFunctionType" - oid: "urn:oid:2.16.840.1.113883.5.1056" -- id: "v2-0265" - description: "specialtyType" - url: "http://terminology.hl7.org/CodeSystem/v2-0265" - oid: "urn:oid:2.16.840.1.113883.18.159" -- id: "contractsubtypecodes" - description: "Contract Subtype Codes" - url: "http://terminology.hl7.org/CodeSystem/contractsubtypecodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1198" -- id: "v2-0818" - description: "package" - url: "http://terminology.hl7.org/CodeSystem/v2-0818" - oid: "urn:oid:2.16.840.1.113883.18.407" -- id: "v3-TransmissionRelationshipTypeCode" - description: "TransmissionRelationshipTypeCode" - url: "http://terminology.hl7.org/CodeSystem/v3-TransmissionRelationshipTypeCode" - oid: "urn:oid:2.16.840.1.113883.5.1111" -- id: "v2-0398" - description: "continuationStyle" - url: "http://terminology.hl7.org/CodeSystem/v2-0398" - oid: "urn:oid:2.16.840.1.113883.18.249" -- id: "v2-0232" - description: "insuranceCompanyContactReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0232" - oid: "urn:oid:2.16.840.1.113883.18.132" -- id: "v3-EntityNameUseR2" - description: "EntityNameUseR2" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNameUseR2" - oid: "urn:oid:2.16.840.1.113883.5.1120" -- id: "v2-0377" - description: "environmentalFactors" - url: "http://terminology.hl7.org/CodeSystem/v2-0377" - oid: "urn:oid:2.16.840.1.113883.18.235" -- id: "v2-0418" - description: "procedurePriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0418" - oid: "urn:oid:2.16.840.1.113883.18.260" -- id: "v2-0048" - description: "whatSubjectFilter" - url: "http://terminology.hl7.org/CodeSystem/v2-0048" - oid: "urn:oid:2.16.840.1.113883.18.20" -- id: "USCOC" - description: "US Census Occupation Code" - url: "http://terminology.hl7.org/CodeSystem/USCOC" - oid: "urn:oid:2.16.840.1.113883.6.240" -- id: "consentverification" - description: "Consent Vefication Codes" - url: "http://terminology.hl7.org/CodeSystem/consentverification" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" - -- id: "v3-ActUSPrivacyLaw" - description: "ActUSPrivacyLaw" - url: "http://terminology.hl7.org/CodeSystem/v3-ActUSPrivacyLaw" - oid: "urn:oid:2.16.840.1.113883.5.1138" -- id: "v3-Ethnicity" - description: "Ethnicity" - url: "http://terminology.hl7.org/CodeSystem/v3-Ethnicity" - oid: "urn:oid:2.16.840.1.113883.5.50" -- id: "v2-0224" - description: "transportArranged" - url: "http://terminology.hl7.org/CodeSystem/v2-0224" - oid: "urn:oid:2.16.840.1.113883.18.125" -- id: "v2-0731" - description: "drgDiagnosisDeterminationStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0731" - oid: "urn:oid:2.16.840.1.113883.18.392" -- id: "v3-CodeSystemType" - description: "HL7 Code System Type" - url: "http://terminology.hl7.org/CodeSystem/v3-CodeSystemType" - oid: "urn:oid:2.16.840.1.113883.5.1085" -- id: "v3-ActCode" - description: "ActCode" - url: "http://terminology.hl7.org/CodeSystem/v3-ActCode" - oid: "urn:oid:2.16.840.1.113883.5.4" -- id: "v2-0273" - description: "documentAvailabilityStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0273" - oid: "urn:oid:2.16.840.1.113883.18.167" -- id: "icpc-FRE" - description: "International Classification of Primary Care 1993 French" - url: "http://terminology.hl7.org/CodeSystem/icpc-FRE" - oid: "urn:oid:2.16.840.1.113883.6.138.5" -- id: "claim-exception" - description: "Exception Codes" - url: "http://terminology.hl7.org/CodeSystem/claim-exception" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1162" -- id: "immunization-recommendation-status" - description: "Immunization Recommendation Status Codes" - url: "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1104" -- id: "v2-0336" - description: "referralReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0336" - oid: "urn:oid:2.16.840.1.113883.18.206" -- id: "v2-0121" - description: "responseFlag" - url: "http://terminology.hl7.org/CodeSystem/v2-0121" - oid: "urn:oid:2.16.840.1.113883.18.49" -- id: "med-admin-perform-function" - description: "MedicationAdministration Performer Function Codes" - url: "http://terminology.hl7.org/CodeSystem/med-admin-perform-function" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1112" -- id: "v2-0571" - description: "invoiceProcessingResultsStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0571" - oid: "urn:oid:2.16.840.1.113883.18.371" -- id: "v3-HL7StandardVersionCode" - description: "HL7StandardVersionCode" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7StandardVersionCode" - oid: "urn:oid:2.16.840.1.113883.5.1097" -- id: "characteristic-method" - description: "CharacteristicMethod" - url: "http://terminology.hl7.org/CodeSystem/characteristic-method" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1453" -- id: "v2-0434" - description: "patientCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0434" - oid: "urn:oid:2.16.840.1.113883.18.275" -- id: "v2-0208" - description: "queryResponseStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0208" - oid: "urn:oid:2.16.840.1.113883.18.113" -- id: "medicationknowledge-status" - description: "MedicationKnowledge Status Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1336" -- id: "v3-GTSAbbreviation" - description: "GTSAbbreviation" - url: "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation" - oid: "urn:oid:2.16.840.1.113883.5.1022" -- id: "basic-resource-type" - description: "Basic Resource Types" - url: "http://terminology.hl7.org/CodeSystem/basic-resource-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1072" -- id: "v3-RoleLinkType" - description: "RoleLinkType" - url: "http://terminology.hl7.org/CodeSystem/v3-RoleLinkType" - oid: "urn:oid:2.16.840.1.113883.5.107" -- id: "v2-0033" - description: "route" - url: "http://terminology.hl7.org/CodeSystem/v2-0033" - oid: "urn:oid:2.16.840.1.113883.18.16" -- id: "consentpolicycodes" - description: "Consent PolicyRule Codes" - url: "http://terminology.hl7.org/CodeSystem/consentpolicycodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1229" -- id: "v3-ExposureMode" - description: "ExposureMode" - url: "http://terminology.hl7.org/CodeSystem/v3-ExposureMode" - oid: "urn:oid:2.16.840.1.113883.5.1113" -- id: "v3-ada-snodent" - description: "Systematized Nomenclature of Dentistry (SNODENT)" - url: "http://www.ada.org/snodent" - oid: "urn:oid:2.16.840.1.113883.3.3150" -- id: "v3-hgvs" - description: "Human Genome Variation Society nomenclature" - url: "http://varnomen.hgvs.org" - oid: "urn:oid:2.16.840.1.113883.6.282" -- id: "v2-0160" - description: "trayType" - url: "http://terminology.hl7.org/CodeSystem/v2-0160" - oid: "urn:oid:2.16.840.1.113883.18.78" -- id: "v2-0530" - description: "organization-Agency-Department" - url: "http://terminology.hl7.org/CodeSystem/v2-0530" - oid: "urn:oid:2.16.840.1.113883.18.346" -- id: "v2-0926" - description: "phlebotomyStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0926" - oid: "urn:oid:2.16.840.1.113883.18.432" -- id: "participant-type" - description: "Participant type" - url: "http://terminology.hl7.org/CodeSystem/participant-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1089" -- id: "v2-0475" - description: "chargeTypeReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0475" - oid: "urn:oid:2.16.840.1.113883.18.303" -- id: "v3-ModifyIndicator" - description: "ModifyIndicator" - url: "http://terminology.hl7.org/CodeSystem/v3-ModifyIndicator" - oid: "urn:oid:2.16.840.1.113883.5.81" -- id: "paymentstatus" - description: "Payment Status Codes" - url: "http://terminology.hl7.org/CodeSystem/paymentstatus" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1187" -- id: "v2-0834" - description: "mimeTypes" - url: "http://terminology.hl7.org/CodeSystem/v2-0834" - oid: "urn:oid:2.16.840.1.113883.18.408" -- id: "v2-0137" - description: "mailClaimParty" - url: "http://terminology.hl7.org/CodeSystem/v2-0137" - oid: "urn:oid:2.16.840.1.113883.18.61" -- id: "v2-0422" - description: "triageType" - url: "http://terminology.hl7.org/CodeSystem/v2-0422" - oid: "urn:oid:2.16.840.1.113883.18.263" -- id: "v3-ConceptGenerality" - description: "ConceptGenerality" - url: "http://terminology.hl7.org/CodeSystem/v3-ConceptGenerality" - oid: "urn:oid:2.16.840.1.113883.5.24" -- id: "v2-0971" - description: "onlineVerificationResultErrorCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0971" - oid: "urn:oid:2.16.840.1.113883.18.454" -- id: "NHSNOccasionOfDetection" - description: "NHSN Occasion Of Detection" - url: "http://terminology.hl7.org/CodeSystem/NHSNOccasionOfDetection" - oid: "urn:oid:2.16.840.1.113883.6.273" -- id: "v2-0269" - description: "chargeOnIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0269" - oid: "urn:oid:2.16.840.1.113883.18.162" -- id: "v2-0793" - description: "rulingAct" - url: "http://terminology.hl7.org/CodeSystem/v2-0793" - oid: "urn:oid:2.16.840.1.113883.18.405" -- id: "measure-population" - description: "MeasurePopulationType" - url: "http://terminology.hl7.org/CodeSystem/measure-population" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1231" -- id: "v2-0286" - description: "providerRole" - url: "http://terminology.hl7.org/CodeSystem/v2-0286" - oid: "urn:oid:2.16.840.1.113883.18.178" -- id: "whoGER" - description: "WHO Adverse Reaction Terms German" - url: "http://terminology.hl7.org/CodeSystem/whoGER" - oid: "urn:oid:2.16.840.1.113883.6.230.2" -- id: "v2-0906" - description: "actpriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0906" - oid: "urn:oid:2.16.840.1.113883.18.417" -- id: "program" - description: "Program" - url: "http://terminology.hl7.org/CodeSystem/program" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1384" -- id: "HL70005" - description: "PH_RaceAndEthnicity_CDC" - url: "http://terminology.hl7.org/CodeSystem/v3-Race" - oid: "urn:oid:2.16.840.1.113883.6.238" -- id: "v2-0005" - description: "PH_RaceAndEthnicity_CDC" - url: "http://terminology.hl7.org/CodeSystem/v2-0005" - oid: "urn:oid:2.16.840.1.113883.6.238" -- id: "adjudication-error" - description: "Adjudication Error Codes" - url: "http://terminology.hl7.org/CodeSystem/adjudication-error" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1053" -- id: "v3-MDFAttributeType" - description: "MDFAttributeType" - url: "http://terminology.hl7.org/CodeSystem/v3-MDFAttributeType" - oid: "urn:oid:2.16.840.1.113883.5.74" -- id: "v2-0140" - description: "militaryService" - url: "http://terminology.hl7.org/CodeSystem/v2-0140" - oid: "urn:oid:2.16.840.1.113883.18.62" -- id: "v2-0510" - description: "bloodProductDispenseStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0510" - oid: "urn:oid:2.16.840.1.113883.18.333" -- id: "v3-SubstitutionCondition" - description: "SubstitutionCondition" - url: "http://terminology.hl7.org/CodeSystem/v3-SubstitutionCondition" - oid: "urn:oid:2.16.840.1.113883.5.1071" -- id: "v3-iso3166-2" - description: "ISO 3166 Part 2 Country Subdivision Codes" - url: "urn:iso:std:iso:3166:-2" - oid: "urn:oid:1.0.3166.2" -- id: "conceptdomains" - description: "Concept Domains" - url: "http://terminology.hl7.org/CodeSystem/conceptdomains" - oid: null -- id: "v2-0394" - description: "responseModality" - url: "http://terminology.hl7.org/CodeSystem/v2-0394" - oid: "urn:oid:2.16.840.1.113883.18.245" -- id: "medicationdispense-performer-function" - description: "MedicationDispense Performer Function Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationdispense-performer-function" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1319" -- id: "v2-0402" - description: "schoolType" - url: "http://terminology.hl7.org/CodeSystem/v2-0402" - oid: "urn:oid:2.16.840.1.113883.18.251" -- id: "v2-0052" - description: "diagnosisType" - url: "http://terminology.hl7.org/CodeSystem/v2-0052" - oid: "urn:oid:2.16.840.1.113883.18.21" -- id: "v2-0951" - description: "reasonForStudy" - url: "http://terminology.hl7.org/CodeSystem/v2-0951" - oid: "urn:oid:2.16.840.1.113883.18.451" -- id: "v2-0547" - description: "jurisdictionalBreadth" - url: "http://terminology.hl7.org/CodeSystem/v2-0547" - oid: "urn:oid:2.16.840.1.113883.18.354" -- id: "v2-0228" - description: "diagnosisClassification" - url: "http://terminology.hl7.org/CodeSystem/v2-0228" - oid: "urn:oid:2.16.840.1.113883.18.128" -- id: "ex-payee-resource-type" - description: "ClaimPayeeResourceType" - url: "http://terminology.hl7.org/CodeSystem/ex-payee-resource-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1164" -- id: "v3-scpqual" - description: "pan-Canadian Provider Qualification Types" - url: "https://fhir.infoway-inforoute.ca/CodeSystem/scpqual" - oid: "urn:oid:2.16.840.1.113883.2.20.5.4" -- id: "contract-content-derivative" - description: "Contract Content Derivation Codes" - url: "http://terminology.hl7.org/CodeSystem/contract-content-derivative" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1204" -- id: "v3-EntityNamePartType" - description: "EntityNamePartType" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartType" - oid: "urn:oid:2.16.840.1.113883.5.44" -- id: "icpc2-icd10-THSRS" - description: "ICPC2-ICD10 Thesaurus" - url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-THSRS" - oid: "urn:oid:2.16.840.1.113883.6.142" -- id: "icpc-ITA" - description: "International Classification of Primary Care 1993 Italian" - url: "http://terminology.hl7.org/CodeSystem/icpc-ITA" - oid: "urn:oid:2.16.840.1.113883.6.138.9" -- id: "icpc-SPA" - description: "International Classification of Primary Care 1993 Spanish" - url: "http://terminology.hl7.org/CodeSystem/icpc-SPA" - oid: "urn:oid:2.16.840.1.113883.6.138.12" -- id: "icpc-ENG" - description: "International Classification of Primary Care 1993 (English)" - url: "http://terminology.hl7.org/CodeSystem/icpc-ENG" - oid: "urn:oid:2.16.840.1.113883.6.138.14" -- id: "definition-topic" - description: "DefinitionTopic" - url: "http://terminology.hl7.org/CodeSystem/definition-topic" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1244" -- id: "v2-0290" - description: "mimeBase64EncodingCharacters" - url: "http://terminology.hl7.org/CodeSystem/v2-0290" - oid: "urn:oid:2.16.840.1.113883.18.180" -- id: "v3-CodingRationale" - description: "CodingRationale" - url: "http://terminology.hl7.org/CodeSystem/v3-CodingRationale" - oid: "urn:oid:2.16.840.1.113883.5.1074" -- id: "v2-0443" - description: "providerRole" - url: "http://terminology.hl7.org/CodeSystem/v2-0443" - oid: "urn:oid:2.16.840.1.113883.18.283" -- id: "v3-ProcessingID" - description: "ProcessingID" - url: "http://terminology.hl7.org/CodeSystem/v3-ProcessingID" - oid: "urn:oid:2.16.840.1.113883.5.100" -- id: "v2-0506" - description: "serviceRequestRelationship" - url: "http://terminology.hl7.org/CodeSystem/v2-0506" - oid: "urn:oid:2.16.840.1.113883.18.330" -- id: "v2-0156" - description: "whichDate-timeQualifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0156" - oid: "urn:oid:2.16.840.1.113883.18.74" -- id: "history-absent-reason" - description: "FamilyHistoryAbsentReason" - url: "http://terminology.hl7.org/CodeSystem/history-absent-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1094" -- id: "v3-EntityNamePartQualifier" - description: "EntityNamePartQualifier" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifier" - oid: "urn:oid:2.16.840.1.113883.5.43" - -- id: "icd10PCS" - description: "ICD-10 Procedure Codes" - url: "http://www.cms.gov/Medicare/Coding/ICD10" - oid: "urn:oid:2.16.840.1.113883.6.4" -- id: "v2-0204" - description: "organizationalNameType" - url: "http://terminology.hl7.org/CodeSystem/v2-0204" - oid: "urn:oid:2.16.840.1.113883.18.109" -- id: "adverse-event-severity" - description: "AdverseEventSeverity" - url: "http://terminology.hl7.org/CodeSystem/adverse-event-severity" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1256" -- id: "v3-ActClass" - description: "ActClass" - url: "http://terminology.hl7.org/CodeSystem/v3-ActClass" - oid: "urn:oid:2.16.840.1.113883.5.6" -- id: "v2-0438" - description: "allergyClinicalStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0438" - oid: "urn:oid:2.16.840.1.113883.18.279" -- id: "v3-refSeq" - description: "Gene Reference Sequence Collection" - url: "http://www.ncbi.nlm.nih.gov/refseq" - oid: "urn:oid:2.16.840.1.113883.6.280" -- id: "modifiers" - description: "Modifier type Codes" - url: "http://terminology.hl7.org/CodeSystem/modifiers" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1151" -- id: "v2-0316" - description: "organDonorCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0316" - oid: "urn:oid:2.16.840.1.113883.18.192" -- id: "v2-0253" - description: "indirectExposureMechanism" - url: "http://terminology.hl7.org/CodeSystem/v2-0253" - oid: "urn:oid:2.16.840.1.113883.18.148" -- id: "v2-0480" - description: "pharmacyOrderTypes" - url: "http://terminology.hl7.org/CodeSystem/v2-0480" - oid: "urn:oid:2.16.840.1.113883.18.306" -- id: "implantStatus" - description: "Implant Status" - url: "http://terminology.hl7.org/CodeSystem/implantStatus" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1283" -- id: "v3-DocumentStorage" - description: "DocumentStorage" - url: "http://terminology.hl7.org/CodeSystem/v3-DocumentStorage" - oid: "urn:oid:2.16.840.1.113883.5.34" -- id: "v2-0615" - description: "userAuthenticationCredentialType" - url: "http://terminology.hl7.org/CodeSystem/v2-0615" - oid: "urn:oid:2.16.840.1.113883.18.373" -- id: "v2-0496" - description: "consentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0496" - oid: "urn:oid:2.16.840.1.113883.18.320" -- id: "v2-0183" - description: "active-inactive" - url: "http://terminology.hl7.org/CodeSystem/v2-0183" - oid: "urn:oid:2.16.840.1.113883.18.97" -- id: "match-grade" - description: "MatchGrade" - url: "http://terminology.hl7.org/CodeSystem/match-grade" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1289" -- id: "list-order" - description: "List Order Codes" - url: "http://terminology.hl7.org/CodeSystem/list-order" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1107" -- id: "v3-ProcessingMode" - description: "ProcessingMode" - url: "http://terminology.hl7.org/CodeSystem/v3-ProcessingMode" - oid: "urn:oid:2.16.840.1.113883.5.101" -- id: "icpc2E-P-AUS" - description: "ICPC2P 1998 Plus Austral Mod" - url: "http://terminology.hl7.org/CodeSystem/icpc2E-P-AUS" - oid: "urn:oid:2.16.840.1.113883.6.140.2" -- id: "v2-0357" - description: "messageErrorCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0357" - oid: "urn:oid:2.16.840.1.113883.18.217" -- id: "v2-0642" - description: "reorderTheory" - url: "http://terminology.hl7.org/CodeSystem/v2-0642" - oid: "urn:oid:2.16.840.1.113883.18.379" -- id: "icd10CM" - description: "International Classification of Diseases, 10th Revision, Clinical Modification\ - \ (ICD-10-CM)" - url: "http://hl7.org/fhir/sid/icd-10-cm" - oid: "urn:oid:2.16.840.1.113883.6.90" -- id: "ICD-10-CM" - description: "International Classification of Diseases, 10th Revision, Clinical Modification\ - \ (ICD-10-CM)" - url: "http://hl7.org/fhir/sid/icd-10-cm" - oid: "urn:oid:2.16.840.1.113883.6.90" -- id: "observation-category" - description: "Observation Category Codes" - url: "http://terminology.hl7.org/CodeSystem/observation-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1125" -- id: "v2-0091" - description: "queryPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0091" - oid: "urn:oid:2.16.840.1.113883.18.35" -- id: "testscript-profile-origin-types" - description: "Test script profile origin type" - url: "http://terminology.hl7.org/CodeSystem/testscript-profile-origin-types" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1196" -- id: "v3-AddressUse" - description: "AddressUse" - url: "http://terminology.hl7.org/CodeSystem/v3-AddressUse" - oid: "urn:oid:2.16.840.1.113883.5.1119" -- id: "immunization-subpotent-reason" - description: "Immunization Subpotent Reason" - url: "http://terminology.hl7.org/CodeSystem/immunization-subpotent-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1098" -- id: "measure-improvement-notation" - description: "MeasureImprovementNotation" - url: "http://terminology.hl7.org/CodeSystem/measure-improvement-notation" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1395" -- id: "v2-0356" - description: "alternateCharacterSetHandlingScheme" - url: "http://terminology.hl7.org/CodeSystem/v2-0356" - oid: "urn:oid:2.16.840.1.113883.18.216" -- id: "v2-0213" - description: "purgeStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0213" - oid: "urn:oid:2.16.840.1.113883.18.117" -- id: "v2-0497" - description: "consentMode" - url: "http://terminology.hl7.org/CodeSystem/v2-0497" - oid: "urn:oid:2.16.840.1.113883.18.321" -- id: "v2-0478" - description: "formularyStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0478" - oid: "urn:oid:2.16.840.1.113883.18.305" -- id: "v2-0881" - description: "roleExecutingPhysician" - url: "http://terminology.hl7.org/CodeSystem/v2-0881" - oid: "urn:oid:2.16.840.1.113883.18.411" -- id: "v2-0301" - description: "universalIdType" - url: "http://terminology.hl7.org/CodeSystem/v2-0301" - oid: "urn:oid:2.16.840.1.113883.18.186" -- id: "applicability" - description: "Benefit cost applicability" - url: "http://terminology.hl7.org/CodeSystem/applicability" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "audit-entity-type" - description: "Audit event entity type" - url: "http://terminology.hl7.org/CodeSystem/audit-entity-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1134" -- id: "v3-ResponseMode" - description: "ResponseMode" - url: "http://terminology.hl7.org/CodeSystem/v3-ResponseMode" - oid: "urn:oid:2.16.840.1.113883.5.1126" -- id: "research-study-objective-type" - description: "ResearchStudyObjectiveType" - url: "http://terminology.hl7.org/CodeSystem/research-study-objective-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1248" -- id: "v3-AcknowledgementDetailType" - description: "AcknowledgementDetailType" - url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailType" - oid: "urn:oid:2.16.840.1.113883.5.1082" -- id: "operation-outcome" - description: "Operation Outcome Codes" - url: "http://terminology.hl7.org/CodeSystem/operation-outcome" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1127" -- id: "v3-QueryStatusCode" - description: "QueryStatusCode" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryStatusCode" - oid: "urn:oid:2.16.840.1.113883.5.103" -- id: "v2-0317" - description: "annotations" - url: "http://terminology.hl7.org/CodeSystem/v2-0317" - oid: "urn:oid:2.16.840.1.113883.18.193" -- id: "expansion-processing-rule" - description: "ExpansionProcessingRule" - url: "http://terminology.hl7.org/CodeSystem/expansion-processing-rule" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1281" -- id: "v2-0252" - description: "causalityObservations" - url: "http://terminology.hl7.org/CodeSystem/v2-0252" - oid: "urn:oid:2.16.840.1.113883.18.147" -- id: "mdr" - description: "MedDRA" - url: "http://terminology.hl7.org/CodeSystem/mdr" - oid: "urn:oid:2.16.840.1.113883.6.163" -- id: "v3-ActRelationshipSubset" - description: "ActRelationshipSubset" - url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSubset" - oid: "urn:oid:2.16.840.1.113883.5.1099" -- id: "VHA" - description: "US Department of Veterans Affairs" - url: "http://terminology.hl7.org/CodeSystem/VHA" - oid: "urn:oid:2.16.840.1.113883.6.233" -- id: "v3-hl7ApprovalStatus" - description: "HL7ApprovalStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7ApprovalStatus" - oid: "urn:oid:2.16.840.1.113883.5.1130" -- id: "v2-0069" - description: "hospitalService" - url: "http://terminology.hl7.org/CodeSystem/v2-0069" - oid: "urn:oid:2.16.840.1.113883.18.27" -- id: "DEEDS407" - description: "DEEDS407" - url: "http://terminology.hl7.org/CodeSystem/DEEDS407" - oid: "urn:oid:2.16.840.1.113883.6.102.4.7" -- id: "hl7TermMaintInfra" - description: "HL7 Terminology Maintenance Infrastructure Vocabulary" - url: "http://terminology.hl7.org/CodeSystem/hl7TermMaintInfra" - oid: null -- id: "hsloc" - description: "Healthcare Service Location" - url: "http://terminology.hl7.org/CodeSystem/hsloc" - oid: "urn:oid:2.16.840.1.113883.6.259" -- id: "v3-PostalAddressUse" - description: "PostalAddressUse" - url: "http://terminology.hl7.org/CodeSystem/v3-PostalAddressUse" - oid: "urn:oid:2.16.840.1.113883.5.1012" -- id: "v2-0205" - description: "priceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0205" - oid: "urn:oid:2.16.840.1.113883.18.110" -- id: "contactentity-type" - description: "Contact entity type" - url: "http://terminology.hl7.org/CodeSystem/contactentity-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1129" -- id: "v2-0442" - description: "locationServiceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0442" - oid: "urn:oid:2.16.840.1.113883.18.282" -- id: "v2-0012" - description: "stockLocation" - url: "http://terminology.hl7.org/CodeSystem/v2-0012" - oid: "urn:oid:2.16.840.1.113883.18.12" -- id: "study-type" - description: "StatisticStudyType" - url: "http://terminology.hl7.org/CodeSystem/study-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1350" -- id: "v3-EncounterAccident" - description: "EncounterAccident" - url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAccident" - oid: "urn:oid:2.16.840.1.113883.5.36" -- id: "umls" - description: "Unified Medical Language System" - url: "http://terminology.hl7.org/CodeSystem/umls" - oid: "urn:oid:2.16.840.1.113883.6.86" -- id: "v2-0507" - description: "observationResultHandling" - url: "http://terminology.hl7.org/CodeSystem/v2-0507" - oid: "urn:oid:2.16.840.1.113883.18.331" -- id: "v2-0157" - description: "whichDate-timeStatusQualifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0157" - oid: "urn:oid:2.16.840.1.113883.18.75" -- id: "adverse-event-category" - description: "AdverseEventCategory" - url: "http://terminology.hl7.org/CodeSystem/adverse-event-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1251" -- id: "v2-0291" - description: "subtypeOfReferencedData" - url: "http://terminology.hl7.org/CodeSystem/v2-0291" - oid: "urn:oid:2.16.840.1.113883.18.181" -- id: "composition-altcode-kind" - description: "AlternativeCodeKind" - url: "http://terminology.hl7.org/CodeSystem/composition-altcode-kind" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1406" -- id: "v3-TargetAwareness" - description: "TargetAwareness" - url: "http://terminology.hl7.org/CodeSystem/v3-TargetAwareness" - oid: "urn:oid:2.16.840.1.113883.5.137" -- id: "v3-ActExposureLevelCode" - description: "ActExposureLevelCode" - url: "http://terminology.hl7.org/CodeSystem/v3-ActExposureLevelCode" - oid: "urn:oid:2.16.840.1.113883.5.1114" -- id: "list-example-use-codes" - description: "Example Use Codes for List" - url: "http://terminology.hl7.org/CodeSystem/list-example-use-codes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1105" -- id: "v2-0946" - description: "supplierType" - url: "http://terminology.hl7.org/CodeSystem/v2-0946" - oid: "urn:oid:2.16.840.1.113883.18.446" -- id: "v2-0415" - description: "drgTransferType" - url: "http://terminology.hl7.org/CodeSystem/v2-0415" - oid: "urn:oid:2.16.840.1.113883.18.257" -- id: "v2-0100" - description: "invocationEvent" - url: "http://terminology.hl7.org/CodeSystem/v2-0100" - oid: "urn:oid:2.16.840.1.113883.18.38" -- id: "v3-fda-FFRN" - description: "Food and Drug Administration Food Facility Registration Numbers" - url: "http://terminology.hl7.org/CodeSystem/v3-fda-FFRN" - oid: "urn:oid:2.16.840.1.113883.3.24.6.1" -- id: "v2-0550" - description: "bodyParts" - url: "http://terminology.hl7.org/CodeSystem/v2-0550" - oid: "urn:oid:2.16.840.1.113883.18.356" -- id: "ex-serviceplace" - description: "Example Service Place Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-serviceplace" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1157" -- id: "measure-data-usage" - description: "MeasureDataUsage" - url: "http://terminology.hl7.org/CodeSystem/measure-data-usage" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1234" -- id: "NHSNInfectionType" - description: "NHSN Infection Type" - url: "http://terminology.hl7.org/CodeSystem/NHSNInfectionType" - oid: "urn:oid:2.16.840.1.113883.6.268" -- id: "v2-0383" - description: "substanceStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0383" - oid: "urn:oid:2.16.840.1.113883.18.236" -- id: "medication-admin-location" - description: "MedicationAdministration Location Codes" - url: "http://terminology.hl7.org/CodeSystem/medication-admin-location" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "condition-category" - description: "Condition Category Codes" - url: "http://terminology.hl7.org/CodeSystem/condition-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1073" -- id: "v2-0403" - description: "languageAbility" - url: "http://terminology.hl7.org/CodeSystem/v2-0403" - oid: "urn:oid:2.16.840.1.113883.18.252" -- id: "v3-hl7PublishingSection" - description: "HL7PublishingSection" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSection" - oid: "urn:oid:2.16.840.1.113883.5.1133" -- id: "v2-0950" - description: "orderStatusModifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0950" - oid: "urn:oid:2.16.840.1.113883.18.450" -- id: "ex-USCLS" - description: "USCLS Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-USCLS" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1153" -- id: "reason-medication-given" - description: "Reason Medication Given Codes" - url: "http://terminology.hl7.org/CodeSystem/reason-medication-given" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1110" -- id: "v2-0116" - description: "bedStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0116" - oid: "urn:oid:2.16.840.1.113883.18.47" -- id: "epsg-crs" - description: "European Petroleum Survey Group Geodetic Parameter Dataset Coordinate Reference\ - \ System" - url: "http://terminology.hl7.org/CodeSystem/epsg-crs" - oid: "urn:oid:2.16.840.1.113883.6.278" -- id: "coverage-copay-type" - description: "Coverage Copay Type Codes" - url: "http://terminology.hl7.org/CodeSystem/coverage-copay-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1149" -- id: "v2-0395" - description: "modifyIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0395" - oid: "urn:oid:2.16.840.1.113883.18.246" -- id: "v2-0907" - description: "confidentiality" - url: "http://terminology.hl7.org/CodeSystem/v2-0907" - oid: "urn:oid:2.16.840.1.113883.18.418" -- id: "immunization-evaluation-dose-status" - description: "Immunization Evaluation Dose Status codes" - url: "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1102" -- id: "v3-Dentition" - description: "Dentition" - url: "http://terminology.hl7.org/CodeSystem/v3-Dentition" - oid: "urn:oid:2.16.840.1.113883.5.1080" -- id: "v2-0004" - description: "patientClass" - url: "http://terminology.hl7.org/CodeSystem/v2-0004" - oid: "urn:oid:2.16.840.1.113883.18.5" -- id: "v2-0511" - description: "bpObservationStatusCodesInterpretation" - url: "http://terminology.hl7.org/CodeSystem/v2-0511" - oid: "urn:oid:2.16.840.1.113883.18.334" -- id: "v3-EntityDeterminer" - description: "EntityDeterminer" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityDeterminer" - oid: "urn:oid:2.16.840.1.113883.5.30" -- id: "v2-0268" - description: "override" - url: "http://terminology.hl7.org/CodeSystem/v2-0268" - oid: "urn:oid:2.16.840.1.113883.18.161" -- id: "push-type-available" - description: "Push-type-available" - url: "http://terminology.hl7.org/CodeSystem/push-type-available" - oid: "urn:oid:2.16.840.1.113883.4.642.1.899" -- id: "v3-EditStatus" - description: "EditStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-EditStatus" - oid: "urn:oid:2.16.840.1.113883.5.35" -- id: "v3-ActSite" - description: "ActSite" - url: "http://terminology.hl7.org/CodeSystem/v3-ActSite" - oid: "urn:oid:2.16.840.1.113883.5.1052" -- id: "v2-0287" - description: "problem-goalAction" - url: "http://terminology.hl7.org/CodeSystem/v2-0287" - oid: "urn:oid:2.16.840.1.113883.18.3" -- id: "v3-TableCellScope" - description: "TableCellScope" - url: "http://terminology.hl7.org/CodeSystem/v3-TableCellScope" - oid: "urn:oid:2.16.840.1.113883.5.132" -- id: "ib" - description: "ISBT" - url: "http://terminology.hl7.org/CodeSystem/ib" - oid: "urn:oid:2.16.840.1.113883.6.18" -- id: "primary-source-type" - description: "Primary-source-type" - url: "http://terminology.hl7.org/CodeSystem/primary-source-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.893" -- id: "v3-Charset" - description: "Charset" - url: "http://terminology.hl7.org/CodeSystem/v3-Charset" - oid: "urn:oid:2.16.840.1.113883.5.21" -- id: "v2-0566" - description: "bloodUnitType" - url: "http://terminology.hl7.org/CodeSystem/v2-0566" - oid: "urn:oid:2.16.840.1.113883.18.368" -- id: "v2-0423" - description: "caseCategory" - url: "http://terminology.hl7.org/CodeSystem/v2-0423" - oid: "urn:oid:2.16.840.1.113883.18.264" -- id: "validation-type" - description: "Validation-type" - url: "http://terminology.hl7.org/CodeSystem/validation-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.887" -- id: "icd9cm" - description: "ICD-9CM" - url: "http://terminology.hl7.org/CodeSystem/icd9cm" - oid: "urn:oid:2.16.840.1.113883.6.2" -- id: "v2-0970" - description: "onlineVerificationResult" - url: "http://terminology.hl7.org/CodeSystem/v2-0970" - oid: "urn:oid:2.16.840.1.113883.18.453" -- id: "condition-state" - description: "ConditionState" - url: "http://terminology.hl7.org/CodeSystem/condition-state" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1287" -- id: "communication-topic" - description: "CommunicationTopic" - url: "http://terminology.hl7.org/CodeSystem/communication-topic" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1078" -- id: "v3-ISO3166-3retired" - description: "ISO 3166 Numeric country Codes" - url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-3retired" - oid: "urn:oid:2.16.3" -- id: "v2-0618" - description: "protection" - url: "http://terminology.hl7.org/CodeSystem/v2-0618" - oid: "urn:oid:2.16.840.1.113883.18.376" -- id: "v2-0248" - description: "productSource" - url: "http://terminology.hl7.org/CodeSystem/v2-0248" - oid: "urn:oid:2.16.840.1.113883.18.144" -- id: "v2-0161" - description: "allowSubstitution" - url: "http://terminology.hl7.org/CodeSystem/v2-0161" - oid: "urn:oid:2.16.840.1.113883.18.79" -- id: "v2-0927" - description: "armStick" - url: "http://terminology.hl7.org/CodeSystem/v2-0927" - oid: "urn:oid:2.16.840.1.113883.18.433" -- id: "ahfs" - description: "AHFS Pharmacologic-Therapeutic Classification" - url: "http://terminology.hl7.org/CodeSystem/ahfs" - oid: "urn:oid:2.16.840.1.113883.6.234" -- id: "name-assembly-order" - description: "HumanNameAssemblyOrder" - url: "http://terminology.hl7.org/CodeSystem/name-assembly-order" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1266" -- id: "v3-HL7ConformanceInclusion" - description: "HL7ConformanceInclusion" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7ConformanceInclusion" - oid: "urn:oid:2.16.840.1.113883.5.55" -- id: "v2-0474" - description: "organizationUnitType" - url: "http://terminology.hl7.org/CodeSystem/v2-0474" - oid: "urn:oid:2.16.840.1.113883.18.302" -- id: "MSH" - description: "MeSH" - url: "http://terminology.hl7.org/CodeSystem/MSH" - oid: "urn:oid:2.16.840.1.113883.6.177" -- id: "v3-snomed-CT" - description: "SNOMED\_CT International Edition" - url: "http://snomed.info/sct" - oid: "urn:oid:2.16.840.1.113883.6.96" -- id: "v3-EntityRisk" - description: "EntityRisk" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityRisk" - oid: "urn:oid:2.16.840.1.113883.5.46" -- id: "DEEDS519" - description: "DEEDS519" - url: "http://terminology.hl7.org/CodeSystem/DEEDS519" - oid: "urn:oid:2.16.840.1.113883.6.102.5.19" -- id: "v2-0527" - description: "calendarAlignment" - url: "http://terminology.hl7.org/CodeSystem/v2-0527" - oid: "urn:oid:2.16.840.1.113883.18.343" -- id: "v2-0177" - description: "confidentialityCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0177" - oid: "urn:oid:2.16.840.1.113883.18.92" -- id: "medicationknowledge-package-type" - description: "MedicationKnowledge Package Type Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-package-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1340" -- id: "v2-0659" - description: "lotControl" - url: "http://terminology.hl7.org/CodeSystem/v2-0659" - oid: "urn:oid:2.16.840.1.113883.18.383" -- id: "v2-0209" - description: "relationalOperator" - url: "http://terminology.hl7.org/CodeSystem/v2-0209" - oid: "urn:oid:2.16.840.1.113883.18.114" -- id: "v3-HL7UpdateMode" - description: "HL7UpdateMode" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7UpdateMode" - oid: "urn:oid:2.16.840.1.113883.5.57" -- id: "v2-0570" - description: "paymentMethod" - url: "http://terminology.hl7.org/CodeSystem/v2-0570" - oid: "urn:oid:2.16.840.1.113883.18.370" -- id: "v2-0065" - description: "specimenAction" - url: "http://terminology.hl7.org/CodeSystem/v2-0065" - oid: "urn:oid:2.16.840.1.113883.18.25" -- id: "v2-0435" - description: "advanceDirective" - url: "http://terminology.hl7.org/CodeSystem/v2-0435" - oid: "urn:oid:2.16.840.1.113883.18.276" -- id: "v2-0272" - description: "documentConfidentialityStatus2" - url: "http://terminology.hl7.org/CodeSystem/v2-0272" - oid: "urn:oid:2.16.840.1.113883.18.166" -- id: "v2-0337" - description: "certificationStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0337" - oid: "urn:oid:2.16.840.1.113883.18.207" -- id: "icpc-HUN" - description: "International Classification of Primary Care 1993 Hungarian" - url: "http://terminology.hl7.org/CodeSystem/icpc-HUN" - oid: "urn:oid:2.16.840.1.113883.6.138.8" -- id: "v2-0225" - description: "escortRequired" - url: "http://terminology.hl7.org/CodeSystem/v2-0225" - oid: "urn:oid:2.16.840.1.113883.18.126" -- id: "v2-0360" - description: "degreeLicenseCertificate" - url: "http://terminology.hl7.org/CodeSystem/v2-0360" - oid: "urn:oid:2.16.840.1.113883.18.220" -- id: "v3-ndc" - description: "National drug codes" - url: "http://hl7.org/fhir/sid/ndc" - oid: "urn:oid:2.16.840.1.113883.6.69" -- id: "DEEDS427" - description: "DEEDS427" - url: "http://terminology.hl7.org/CodeSystem/DEEDS427" - oid: "urn:oid:2.16.840.1.113883.6.102.4.27" -- id: "immunization-funding-source" - description: "Immunization Funding Source" - url: "http://terminology.hl7.org/CodeSystem/immunization-funding-source" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1100" -- id: "v3-lrg" - description: "Locus Reference Genomic Sequences (LRG)" - url: "http://www.lrg-sequence.org" - oid: "urn:oid:2.16.840.1.113883.6.283" -- id: "synthesis-type" - description: "StatisticSynthesisType" - url: "http://terminology.hl7.org/CodeSystem/synthesis-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1348" -- id: "v3-MdfRmimRowType" - description: "MdfRmimRowType" - url: "http://terminology.hl7.org/CodeSystem/v3-MdfRmimRowType" - oid: "urn:oid:2.16.840.1.113883.5.77" -- id: "opinions" - description: "Online Product Identification Number Index of Nova Scotia" - url: "http://terminology.hl7.org/CodeSystem/opinions" - oid: "urn:oid:2.16.840.1.113883.5.1102" -- id: "v3-SetOperator" - description: "SetOperator" - url: "http://terminology.hl7.org/CodeSystem/v3-SetOperator" - oid: "urn:oid:2.16.840.1.113883.5.1069" -- id: "ex-providerqualification" - description: "Example Provider Qualification Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-providerqualification" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1160" -- id: "atc" - description: "American Type Culture Collection" - url: "http://www.whocc.no/atc" - oid: "urn:oid:2.16.840.1.113883.6.77" -- id: "v3-ActMood" - description: "ActMood" - url: "http://terminology.hl7.org/CodeSystem/v3-ActMood" - oid: "urn:oid:2.16.840.1.113883.5.1001" -- id: "v3-EntityStatus" - description: "EntityStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityStatus" - oid: "urn:oid:2.16.840.1.113883.5.1061" -- id: "ex-diagnosisrelatedgroup" - description: "Example Diagnosis Related Group Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-diagnosisrelatedgroup" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1166" -- id: "v3-ResponseLevel" - description: "ResponseLevel" - url: "http://terminology.hl7.org/CodeSystem/v3-ResponseLevel" - oid: "urn:oid:2.16.840.1.113883.5.108" -- id: "v2-0376" - description: "specialHandling" - url: "http://terminology.hl7.org/CodeSystem/v2-0376" - oid: "urn:oid:2.16.840.1.113883.18.234" -- id: "v3-mime" - description: "MIME" - url: "http://www.iana.org/assignments/media-types" - oid: "urn:oid:2.16.840.1.113883.6.10" -- id: "rcV2" - description: "The Read Codes Version 2" - url: "http://terminology.hl7.org/CodeSystem/rcV2" - oid: "urn:oid:2.16.840.1.113883.6.29" -- id: "v3-hl7VoteResolution" - description: "HL7VoteResolution" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7VoteResolution" - oid: "urn:oid:2.16.840.1.113883.5.1131" -- id: "v2-0634" - description: "itemImportance" - url: "http://terminology.hl7.org/CodeSystem/v2-0634" - oid: "urn:oid:2.16.840.1.113883.18.378" -- id: "v2-0321" - description: "dispenseMethod" - url: "http://terminology.hl7.org/CodeSystem/v2-0321" - oid: "urn:oid:2.16.840.1.113883.18.194" -- id: "v3-hc-npn" - description: "Health Canada Natural Product Number" - url: "http://hl7.org/fhir/sid/ca-hc-npn" - oid: "urn:oid:2.16.840.1.113883.5.1107" -- id: "v2-0008" - description: "acknowledgmentCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0008" - oid: "urn:oid:2.16.840.1.113883.18.10" -- id: "v2-0359" - description: "diagnosisPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0359" - oid: "urn:oid:2.16.840.1.113883.18.218" -- id: "v3-fda-FCE" - description: "Food and Drug Administration Food Canning Establishments" - url: "http://terminology.hl7.org/CodeSystem/v3-fda-FCE" - oid: "urn:oid:2.16.840.1.113883.3.24.6.2" -- id: "statistic-type" - description: "StatisticStatisticType" - url: "http://terminology.hl7.org/CodeSystem/statistic-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1411" -- id: "v2-0070" - description: "specimenSourceCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0070" - oid: "urn:oid:2.16.840.1.113883.18.28" -- id: "v3-orderableDrugForm" - description: "Orderable Drug Form" - url: "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm" - oid: "urn:oid:2.16.840.1.113883.5.85" -- id: "v2-0565" - description: "providerAdjustmentReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0565" - oid: "urn:oid:2.16.840.1.113883.18.367" -- id: "PHIndustryCDCCensus2010" - description: "Industry CDC Census 2010" - url: "http://terminology.hl7.org/CodeSystem/PHIndustryCDCCensus2010" - oid: "urn:oid:2.16.840.1.114222.4.5.315" -- id: "v2-0135" - description: "assignmentOfBenefits" - url: "http://terminology.hl7.org/CodeSystem/v2-0135" - oid: "urn:oid:2.16.840.1.113883.18.60" -- id: "coverage-selfpay" - description: "Coverage SelfPay Codes" - url: "http://terminology.hl7.org/CodeSystem/coverage-selfpay" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1148" -- id: "immunization-program-eligibility" - description: "Immunization Program Eligibility" - url: "http://terminology.hl7.org/CodeSystem/immunization-program-eligibility" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1099" -- id: "v2-0027" - description: "priority" - url: "http://terminology.hl7.org/CodeSystem/v2-0027" - oid: "urn:oid:2.16.840.1.113883.18.15" -- id: "v3-VocabularyDomainQualifier" - description: "VocabularyDomainQualifier" - url: "http://terminology.hl7.org/CodeSystem/v3-VocabularyDomainQualifier" - oid: "urn:oid:2.16.840.1.113883.5.147" -- id: "v2-0477" - description: "controlledSubstanceSchedule" - url: "http://terminology.hl7.org/CodeSystem/v2-0477" - oid: "urn:oid:2.16.840.1.113883.18.304" -- id: "v3-LocalMarkupIgnore" - description: "LocalMarkupIgnore" - url: "http://terminology.hl7.org/CodeSystem/v3-LocalMarkupIgnore" - oid: "urn:oid:2.16.840.1.113883.5.65" -- id: "v2-0924" - description: "cumulativeDosageLimitUom" - url: "http://terminology.hl7.org/CodeSystem/v2-0924" - oid: "urn:oid:2.16.840.1.113883.18.430" -- id: "HL70162" - description: "routeOfAdministration" - url: "http://terminology.hl7.org/CodeSystem/v2-0162" - oid: "urn:oid:2.16.840.1.113883.18.80" -- id: "v2-0162" - description: "routeOfAdministration" - url: "http://terminology.hl7.org/CodeSystem/v2-0162" - oid: "urn:oid:2.16.840.1.113883.18.80" -- id: "v3-ContentProcessingMode" - description: "ContentProcessingMode" - url: "http://terminology.hl7.org/CodeSystem/v3-ContentProcessingMode" - oid: "urn:oid:2.16.840.1.113883.5.1110" -- id: "v2-0498" - description: "consentStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0498" - oid: "urn:oid:2.16.840.1.113883.18.322" -- id: "v2-0532" - description: "expandedYes-NoIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0532" - oid: "urn:oid:2.16.840.1.113883.18.347" -- id: "rejection-criteria" - description: "RejectionCriterion" - url: "http://terminology.hl7.org/CodeSystem/rejection-criteria" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1260" -- id: "v3-ConceptCodeRelationship" - description: "Possible Concept Code Relationships" - url: "http://terminology.hl7.org/CodeSystem/v3-ConceptCodeRelationship" - oid: "urn:oid:2.16.840.1.113883.5.1088" -- id: "contract-data-meaning" - description: "ContractDataMeaning" - url: "http://terminology.hl7.org/CodeSystem/contract-data-meaning" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1205" -- id: "communication-category" - description: "CommunicationCategory" - url: "http://terminology.hl7.org/CodeSystem/communication-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1076" -- id: "v2-0524" - description: "sequenceCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0524" - oid: "urn:oid:2.16.840.1.113883.18.342" -- id: "v2-0174" - description: "natureOfServiceTestObservation" - url: "http://terminology.hl7.org/CodeSystem/v2-0174" - oid: "urn:oid:2.16.840.1.113883.18.90" -- id: "DEEDS408" - description: "DEEDS408" - url: "http://terminology.hl7.org/CodeSystem/DEEDS408" - oid: "urn:oid:2.16.840.1.113883.6.102.4.8" -- id: "supplyrequest-reason" - description: "SupplyRequestReason" - url: "http://terminology.hl7.org/CodeSystem/supplyrequest-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1193" -- id: "v2-0066" - description: "employmentStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0066" - oid: "urn:oid:2.16.840.1.113883.18.26" -- id: "v2-0436" - description: "sensitivityToCausativeAgent" - url: "http://terminology.hl7.org/CodeSystem/v2-0436" - oid: "urn:oid:2.16.840.1.113883.18.277" -- id: "v2-0123" - description: "resultStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0123" - oid: "urn:oid:2.16.840.1.113883.18.51" -- id: "v2-0334" - description: "disabilityInformationRelationship" - url: "http://terminology.hl7.org/CodeSystem/v2-0334" - oid: "urn:oid:2.16.840.1.113883.18.204" -- id: "GTIN" - description: "GTIN Global Trade Item Number" - url: "https://www.gs1.org/gtin" - oid: "urn:oid:1.3.160" -- id: "v3-ParticipationFunction" - description: "ParticipationFunction" - url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationFunction" - oid: "urn:oid:2.16.840.1.113883.5.88" -- id: "v3-TableRules" - description: "TableRules" - url: "http://terminology.hl7.org/CodeSystem/v3-TableRules" - oid: "urn:oid:2.16.840.1.113883.5.136" -- id: "v2-0271" - description: "documentCompletionStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0271" - oid: "urn:oid:2.16.840.1.113883.18.164" -- id: "iso639-1ret" - description: "ISO 639-1 Alpha-2 Language Codes" - url: "http://terminology.hl7.org/CodeSystem/iso639-1ret" - oid: "urn:oid:2.16.840.1.113883.6.99" -- id: "v2-0158" - description: "date-timeSelectionQualifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0158" - oid: "urn:oid:2.16.840.1.113883.18.76" -- id: "v2-0508" - description: "bloodProductProcessingRequirements" - url: "http://terminology.hl7.org/CodeSystem/v2-0508" - oid: "urn:oid:2.16.840.1.113883.18.332" -- id: "allergyintolerance-clinical" - description: "AllergyIntolerance Clinical Status Codes" - url: "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1373" -- id: "v3-DCM" - description: "DICOM Controlled Terminology" - url: "http://dicom.nema.org/medical/dicom" - oid: "urn:oid:1.2.840.10008.2.16.4" -- id: "DEEDS424" - description: "DEEDS424" - url: "http://terminology.hl7.org/CodeSystem/DEEDS424" - oid: "urn:oid:2.16.840.1.113883.6.102.4.24" -- id: "MDREX" - description: "MedDRA expanded" - url: "http://terminology.hl7.org/CodeSystem/MDREX" - oid: "urn:oid:2.16.840.1.113883.6.164" -- id: "definition-status" - description: "DefinitionStatus" - url: "http://terminology.hl7.org/CodeSystem/definition-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1070" -- id: "read-Codes" - description: "Read Classification" - url: "http://terminology.hl7.org/CodeSystem/read-Codes" - oid: "urn:oid:2.16.840.1.113883.6.6" -- id: "v2-0949" - description: "orderControlCodeReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0949" - oid: "urn:oid:2.16.840.1.113883.18.449" - -- id: "v2-0375" - description: "artificialBlood" - url: "http://terminology.hl7.org/CodeSystem/v2-0375" - oid: "urn:oid:2.16.840.1.113883.18.233" -- id: "v2-0230" - description: "procedureFunctionalType" - url: "http://terminology.hl7.org/CodeSystem/v2-0230" - oid: "urn:oid:2.16.840.1.113883.18.130" -- id: "rcFB" - description: "The Read Codes Four Byte Set:" - url: "http://terminology.hl7.org/CodeSystem/rcFB" - oid: "urn:oid:2.16.840.1.113883.6.28" -- id: "v2-0119" - description: "orderControlCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0119" - oid: "urn:oid:2.16.840.1.113883.18.48" -- id: "v3-AcknowledgementDetailCode" - description: "AcknowledgementDetailCode" - url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailCode" - oid: "urn:oid:2.16.840.1.113883.5.1100" -- id: "v2-0322" - description: "completionStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0322" - oid: "urn:oid:2.16.840.1.113883.18.195" -- id: "v2-0267" - description: "daysOfTheWeek" - url: "http://terminology.hl7.org/CodeSystem/v2-0267" - oid: "urn:oid:2.16.840.1.113883.18.160" -- id: "object-role" - description: "AuditEventEntityRole" - url: "http://terminology.hl7.org/CodeSystem/object-role" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1135" -- id: "v3-CompressionAlgorithm" - description: "CompressionAlgorithm" - url: "http://terminology.hl7.org/CodeSystem/v3-CompressionAlgorithm" - oid: "urn:oid:2.16.840.1.113883.5.1009" -- id: "directness" - description: "EvidenceDirectness" - url: "http://terminology.hl7.org/CodeSystem/directness" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1459" -- id: "DEEDS" - description: "DEEDS vocabularies" - url: "http://terminology.hl7.org/CodeSystem/DEEDS" - oid: "urn:oid:2.16.840.1.113883.6.102" -- id: "v3-Calendar" - description: "Calendar" - url: "http://terminology.hl7.org/CodeSystem/v3-Calendar" - oid: "urn:oid:2.16.840.1.113883.5.1055" -- id: "v2-0569" - description: "adjustmentAction" - url: "http://terminology.hl7.org/CodeSystem/v2-0569" - oid: "urn:oid:2.16.840.1.113883.18.369" -- id: "v3-EncounterSpecialCourtesy" - description: "EncounterSpecialCourtesy" - url: "http://terminology.hl7.org/CodeSystem/v3-EncounterSpecialCourtesy" - oid: "urn:oid:2.16.840.1.113883.5.40" -- id: "episodeofcare-type" - description: "Episode of care type" - url: "http://terminology.hl7.org/CodeSystem/episodeofcare-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1189" -- id: "v2-0210" - description: "relationalConjunction" - url: "http://terminology.hl7.org/CodeSystem/v2-0210" - oid: "urn:oid:2.16.840.1.113883.18.115" -- id: "DEEDS412" - description: "DEEDS412" - url: "http://terminology.hl7.org/CodeSystem/DEEDS412" - oid: "urn:oid:2.16.840.1.113883.6.102.4.12" -- id: "v2-0355" - description: "primaryKeyValueType" - url: "http://terminology.hl7.org/CodeSystem/v2-0355" - oid: "urn:oid:2.16.840.1.113883.18.215" -- id: "v2-0882" - description: "medicalRoleExecutingPhysician" - url: "http://terminology.hl7.org/CodeSystem/v2-0882" - oid: "urn:oid:2.16.840.1.113883.18.412" -- id: "choice-list-orientation" - description: "ChoiceListOrientation" - url: "http://terminology.hl7.org/CodeSystem/choice-list-orientation" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1273" -- id: "v2-0181" - description: "mfnRecord-levelErrorReturn" - url: "http://terminology.hl7.org/CodeSystem/v2-0181" - oid: "urn:oid:2.16.840.1.113883.18.96" -- id: "icpc-DUT" - description: "International Classification of Primary Care 1993 Dutch" - url: "http://terminology.hl7.org/CodeSystem/icpc-DUT" - oid: "urn:oid:2.16.840.1.113883.6.138.3" -- id: "v2-0494" - description: "specimenChildRole" - url: "http://terminology.hl7.org/CodeSystem/v2-0494" - oid: "urn:oid:2.16.840.1.113883.18.318" -- id: "v2-0247" - description: "statusOfEvaluation" - url: "http://terminology.hl7.org/CodeSystem/v2-0247" - oid: "urn:oid:2.16.840.1.113883.18.143" -- id: "goal-priority" - description: "Goal priority" - url: "http://terminology.hl7.org/CodeSystem/goal-priority" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1096" -- id: "v2-0617" - description: "addressUsage" - url: "http://terminology.hl7.org/CodeSystem/v2-0617" - oid: "urn:oid:2.16.840.1.113883.18.375" -- id: "v3-ActStatus" - description: "ActStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-ActStatus" - oid: "urn:oid:2.16.840.1.113883.5.14" -- id: "state-change-reason" - description: "StateChangeReason" - url: "http://terminology.hl7.org/CodeSystem/state-change-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "observation-statistics" - description: "StatisticsCode" - url: "http://terminology.hl7.org/CodeSystem/observation-statistics" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1126" -- id: "v2-0894" - description: "sideOfBody" - url: "http://terminology.hl7.org/CodeSystem/v2-0894" - oid: "urn:oid:2.16.840.1.113883.18.413" -- id: "DCL" - description: "DICOM Class Label" - url: "http://terminology.hl7.org/CodeSystem/DCL" - oid: "urn:oid:2.16.840.1.113883.6.83" -- id: "v2-0178" - description: "file-levelEvent" - url: "http://terminology.hl7.org/CodeSystem/v2-0178" - oid: "urn:oid:2.16.840.1.113883.18.93" -- id: "v2-0482" - description: "orderType" - url: "http://terminology.hl7.org/CodeSystem/v2-0482" - oid: "urn:oid:2.16.840.1.113883.18.307" -- id: "MDRGER" - description: "MedDRA German" - url: "http://terminology.hl7.org/CodeSystem/MDRGER" - oid: "urn:oid:2.16.840.1.113883.6.163.4" -- id: "v2-0528" - description: "eventRelatedPeriod" - url: "http://terminology.hl7.org/CodeSystem/v2-0528" - oid: "urn:oid:2.16.840.1.113883.18.344" -- id: "v2-0251" - description: "actionTakenInResponseToTheEvent" - url: "http://terminology.hl7.org/CodeSystem/v2-0251" - oid: "urn:oid:2.16.840.1.113883.18.146" -- id: "ex-benefitcategory" - description: "Benefit Category Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-benefitcategory" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1175" -- id: "ICD10dut" - description: "ICD10, Dutch Translation" - url: "http://hl7.org/fhir/sid/icd-10-nl" - oid: "urn:oid:2.16.840.1.113883.6.3.2" -- id: "v2-0085" - description: "observationResultStatusCodesInterpretation" - url: "http://terminology.hl7.org/CodeSystem/v2-0085" - oid: "urn:oid:2.16.840.1.113883.18.34" -- id: "v2-0206" - description: "segmentAction" - url: "http://terminology.hl7.org/CodeSystem/v2-0206" - oid: "urn:oid:2.16.840.1.113883.18.111" -- id: "contract-type" - description: "Contract Type Codes" - url: "http://terminology.hl7.org/CodeSystem/contract-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1330" -- id: "MDREA" - description: "MedDRA Am Engl expanded" - url: "http://terminology.hl7.org/CodeSystem/MDREA" - oid: "urn:oid:2.16.840.1.113883.6.164.1" -- id: "NHSNKneeReplacement" - description: "NHSN KneeR eplacement" - url: "http://terminology.hl7.org/CodeSystem/NHSNKneeReplacement" - oid: "urn:oid:2.16.840.1.113883.6.264" -- id: "PHOccupationalDataForHealthODH" - description: "Occupational Data for Health (ODH)" - url: "http://terminology.hl7.org/CodeSystem/PHOccupationalDataForHealthODH" - oid: "urn:oid:2.16.840.1.114222.4.5.327" -- id: "payment-adjustment-reason" - description: "Payment Adjustment Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/payment-adjustment-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1173" -- id: "v2-0504" - description: "sequenceCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0504" - oid: "urn:oid:2.16.840.1.113883.18.328" -- id: "v3-hc-AIGC" - description: "Active Ingredient Group Code" - url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-2" - oid: "urn:oid:2.16.840.1.113883.5.1104" -- id: "v2-0912" - description: "participation" - url: "http://terminology.hl7.org/CodeSystem/v2-0912" - oid: "urn:oid:2.16.840.1.113883.18.420" -- id: "v2-0441" - description: "immunizationRegistryStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0441" - oid: "urn:oid:2.16.840.1.113883.18.281" -- id: "hl7-work-group" - description: "HL7Workgroup" - url: "http://terminology.hl7.org/CodeSystem/hl7-work-group" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1277" -- id: "contracttermtypecodes" - description: "Contract Term Type Codes" - url: "http://terminology.hl7.org/CodeSystem/contracttermtypecodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1199" -- id: "NHSNSpinalFusionLevel" - description: "NHSN Spinal Fusion Level" - url: "http://terminology.hl7.org/CodeSystem/NHSNSpinalFusionLevel" - oid: "urn:oid:2.16.840.1.113883.6.269" -- id: "v3-AdministrativeGender" - description: "AdministrativeGender" - url: "http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender" - oid: "urn:oid:2.16.840.1.113883.5.1" -- id: "v2-0292" - description: "PH_VaccinesAdministered" - url: "http://terminology.hl7.org/ValueSet/v2-0292" - oid: "urn:oid:2.16.840.1.114222.4.11.934" -- id: "endpoint-payload-type" - description: "Endpoint Payload Type" - url: "http://terminology.hl7.org/CodeSystem/endpoint-payload-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1139" -- id: "contractsignertypecodes" - description: "Contract Signer Type Codes" - url: "http://terminology.hl7.org/CodeSystem/contractsignertypecodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1201" - -- id: "v2-0103" - description: "processingId" - url: "http://terminology.hl7.org/CodeSystem/v2-0103" - oid: "urn:oid:2.16.840.1.113883.18.40" -- id: "v2-0553" - description: "invoiceControl" - url: "http://terminology.hl7.org/CodeSystem/v2-0553" - oid: "urn:oid:2.16.840.1.113883.18.357" -- id: "utg-concept-properties" - description: "UTG Specific Concept Properties" - url: "http://terminology.hl7.org/CodeSystem/utg-concept-properties" - oid: null -- id: "NHSNSummaryData" - description: "NHSN Summary Data" - url: "http://terminology.hl7.org/CodeSystem/NHSNSummaryData" - oid: "urn:oid:2.16.840.1.113883.6.270" -- id: "v2-0416" - description: "procedureDrgType" - url: "http://terminology.hl7.org/CodeSystem/v2-0416" - oid: "urn:oid:2.16.840.1.113883.18.258" -- id: "cpnum" - description: "Gold Standard's Clinical Pharmacology Monograph Number" - url: "http://terminology.hl7.org/CodeSystem/cpnum" - oid: "urn:oid:2.16.840.1.113883.4.81" -- id: "v2-0945" - description: "auto-DilutionType" - url: "http://terminology.hl7.org/CodeSystem/v2-0945" - oid: "urn:oid:2.16.840.1.113883.18.445" -- id: "v3-RelationshipConjunction" - description: "RelationshipConjunction" - url: "http://terminology.hl7.org/CodeSystem/v3-RelationshipConjunction" - oid: "urn:oid:2.16.840.1.113883.5.106" -- id: "validation-status" - description: "Validation-status" - url: "http://terminology.hl7.org/CodeSystem/validation-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.895" -- id: "v3-ProbabilityDistributionType" - description: "ProbabilityDistributionType" - url: "http://terminology.hl7.org/CodeSystem/v3-ProbabilityDistributionType" - oid: "urn:oid:2.16.840.1.113883.5.1020" -- id: "subscriber-relationship" - description: "SubscriberPolicyholder Relationship Codes" - url: "http://terminology.hl7.org/CodeSystem/subscriber-relationship" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1386" -- id: "v3-MaterialType" - description: "MaterialType" - url: "http://terminology.hl7.org/CodeSystem/v3-MaterialType" - oid: "urn:oid:2.16.840.1.113883.5.73" -- id: "v3-TableFrame" - description: "TableFrame" - url: "http://terminology.hl7.org/CodeSystem/v3-TableFrame" - oid: "urn:oid:2.16.840.1.113883.5.134" -- id: "icpc-POR" - description: "International Classification of Primary Care 1993 Portuguese" - url: "http://terminology.hl7.org/CodeSystem/icpc-POR" - oid: "urn:oid:2.16.840.1.113883.6.138.11" -- id: "iso3166-1edition2alpha2" - description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Alpha-2" - url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2alpha2" - oid: "urn:oid:1.0.3166.1.2.2" -- id: "ex-programcode" - description: "Example Program Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-programcode" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1161" - -- id: "v2-0396" - description: "codingSystem" - url: "http://terminology.hl7.org/CodeSystem/v2-0396" - oid: "urn:oid:2.16.840.1.113883.18.247" -- id: "measure-type" - description: "MeasureType" - url: "http://terminology.hl7.org/CodeSystem/measure-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1233" -- id: "subscription-tag" - description: "SubscriptionTag" - url: "http://terminology.hl7.org/CodeSystem/subscription-tag" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1141" -- id: "v3-TelecommunicationCapabilities" - description: "TelecommunicationCapabilities" - url: "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationCapabilities" - oid: "urn:oid:2.16.840.1.113883.5.1118" -- id: "v2-0142" - description: "militaryStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0142" - oid: "urn:oid:2.16.840.1.113883.18.64" -- id: "v2-0007" - description: "admissionType" - url: "http://terminology.hl7.org/CodeSystem/v2-0007" - oid: "urn:oid:2.16.840.1.113883.18.9" -- id: "v3-icpc" - description: "International Classification of Primary Care, 1993 edition" - url: "http://hl7.org/fhir/sid/icpc-1" - oid: "urn:oid:2.16.840.1.113883.6.138" -- id: "v2-0457" - description: "overallClaimDisposition" - url: "http://terminology.hl7.org/CodeSystem/v2-0457" - oid: "urn:oid:2.16.840.1.113883.18.292" -- id: "v3-RoleStatus" - description: "RoleStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-RoleStatus" - oid: "urn:oid:2.16.840.1.113883.5.1068" -- id: "v2-0904" - description: "securityCheckScheme" - url: "http://terminology.hl7.org/CodeSystem/v2-0904" - oid: "urn:oid:2.16.840.1.113883.18.415" -- id: "v2-0284" - description: "referralCategory" - url: "http://terminology.hl7.org/CodeSystem/v2-0284" - oid: "urn:oid:2.16.840.1.113883.18.177" -- id: "action-type" - description: "ActionType" - url: "http://terminology.hl7.org/CodeSystem/action-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1246" -- id: "questionnaire-usage-mode" - description: "QuestionnaireItemUsageMode" - url: "http://terminology.hl7.org/CodeSystem/questionnaire-usage-mode" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1274" -- id: "v2-0790" - description: "approvingRegulatoryAgency" - url: "http://terminology.hl7.org/CodeSystem/v2-0790" - oid: "urn:oid:2.16.840.1.113883.18.404" -- id: "v3-LivingArrangement" - description: "LivingArrangement" - url: "http://terminology.hl7.org/CodeSystem/v3-LivingArrangement" - oid: "urn:oid:2.16.840.1.113883.5.63" -- id: "v2-0513" - description: "bloodProductTransfusion-dispositionStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0513" - oid: "urn:oid:2.16.840.1.113883.18.335" -- id: "attribute-estimate-type" - description: "StatisticAttribute Estimate Type" - url: "http://terminology.hl7.org/CodeSystem/attribute-estimate-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1413" -- id: "v2-0006" - description: "religion2" - url: "http://terminology.hl7.org/CodeSystem/v2-0006" - oid: "urn:oid:2.16.840.1.113883.18.8" -- id: "v2-0456" - description: "nubc-ServiceLineRevenue-cs" - url: "http://terminology.hl7.org/CodeSystem/v2-0456" - oid: "urn:oid:2.16.840.1.113883.6.301.3" -- id: "missingtoothreason" - description: "Missing Tooth Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/missingtoothreason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1150" -- id: "organization-type" - description: "Organization type" - url: "http://terminology.hl7.org/CodeSystem/organization-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1128" -- id: "v2-0905" - description: "shipmentStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0905" - oid: "urn:oid:2.16.840.1.113883.18.416" -- id: "iso3166-1edition2alpha3" - description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Alpha-3" - url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2alpha3" - oid: "urn:oid:1.0.3166.1.2.3" -- id: "NCIT" - description: "NCI Thesaurus" - url: "http://ncithesaurus-stage.nci.nih.gov" - oid: "urn:oid:2.16.840.1.113883.3.26.1.1" -- id: "v3-nciThesaurus" - description: "NCI Thesaurus" - url: "http://ncithesaurus-stage.nci.nih.gov" - oid: "urn:oid:2.16.840.1.113883.3.26.1.1" -- id: "v3-MessageWaitingPriority" - description: "MessageWaitingPriority" - url: "http://terminology.hl7.org/CodeSystem/v3-MessageWaitingPriority" - oid: "urn:oid:2.16.840.1.113883.5.1083" -- id: "v2-0682" - description: "deviceStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0682" - oid: "urn:oid:2.16.840.1.113883.18.386" -- id: "research-subject-state" - description: "ResearchSubjectState" - url: "http://terminology.hl7.org/CodeSystem/research-subject-state" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "v2-0728" - description: "cclValue" - url: "http://terminology.hl7.org/CodeSystem/v2-0728" - oid: "urn:oid:2.16.840.1.113883.18.391" -- id: "v2-0397" - description: "sequencing" - url: "http://terminology.hl7.org/CodeSystem/v2-0397" - oid: "urn:oid:2.16.840.1.113883.18.248" -- id: "subscription-status-at-event" - description: "SubscriptionStatusAtEvent" - url: "http://terminology.hl7.org/CodeSystem/subscription-status-at-event" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1465" -- id: "research-study-phase" - description: "ResearchStudyPhase" - url: "http://terminology.hl7.org/CodeSystem/research-study-phase" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1247" -- id: "v2-0544" - description: "containerCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0544" - oid: "urn:oid:2.16.840.1.113883.18.353" -- id: "v3-LocalRemoteControlState" - description: "LocalRemoteControlState" - url: "http://terminology.hl7.org/CodeSystem/v3-LocalRemoteControlState" - oid: "urn:oid:2.16.840.1.113883.5.66" -- id: "ex-diagnosis-on-admission" - description: "Example Diagnosis on Admission Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1170" -- id: "v2-0401" - description: "governmentReimbursementProgram" - url: "http://terminology.hl7.org/CodeSystem/v2-0401" - oid: "urn:oid:2.16.840.1.113883.18.250" -- id: "encounter-type" - description: "Encounter type" - url: "http://terminology.hl7.org/CodeSystem/encounter-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1088" -- id: "icnp" - description: "International Classification for Nursing Practice" - url: "http://terminology.hl7.org/CodeSystem/icnp" - oid: "urn:oid:2.16.840.1.113883.6.97" -- id: "euclides" - description: "EUCLIDES" - url: "http://terminology.hl7.org/CodeSystem/euclides" - oid: "urn:oid:2.16.840.1.113883.6.34" -- id: "csaid" - description: "CAN/CSA-Z795-96" - url: "http://terminology.hl7.org/CodeSystem/csaid" - oid: "urn:oid:2.16.840.1.113883.6.235" -- id: "v3-ContainerSeparator" - description: "ContainerSeparator" - url: "http://terminology.hl7.org/CodeSystem/v3-ContainerSeparator" - oid: "urn:oid:2.16.840.1.113883.5.27" -- id: "ex-revenue-center" - description: "Example Revenue Center Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-revenue-center" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1168" -- id: "v3-ParticipationMode" - description: "ParticipationMode" - url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationMode" - oid: "urn:oid:2.16.840.1.113883.5.1064" -- id: "mthicpc2E-AE" - description: "ICPC2E Am Engl (Metathesaurus)" - url: "http://terminology.hl7.org/CodeSystem/mthicpc2E-AE" - oid: "urn:oid:2.16.840.1.113883.6.139.3" -- id: "endpoint-connection-type" - description: "Endpoint Connection Type" - url: "http://terminology.hl7.org/CodeSystem/endpoint-connection-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1140" -- id: "v2-0102" - description: "delayedAcknowledgmentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0102" - oid: "urn:oid:2.16.840.1.113883.18.39" -- id: "fipspub92" - description: "FIPS_SOC" - url: "http://terminology.hl7.org/CodeSystem/fipspub92" - oid: "urn:oid:2.16.840.1.113883.6.91" -- id: "v3-ActInvoiceElementModifier" - description: "ActInvoiceElementModifier" - url: "http://terminology.hl7.org/CodeSystem/v3-ActInvoiceElementModifier" - oid: "urn:oid:2.16.840.1.113883.5.1051" -- id: "v2-0417" - description: "tissueType" - url: "http://terminology.hl7.org/CodeSystem/v2-0417" - oid: "urn:oid:2.16.840.1.113883.18.259" -- id: "verificationresult-communication-method" - description: "VerificationResult Communication Method" - url: "http://terminology.hl7.org/CodeSystem/verificationresult-communication-method" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1402" -- id: "v2-0339" - description: "advancedBeneficiaryNotice" - url: "http://terminology.hl7.org/CodeSystem/v2-0339" - oid: "urn:oid:2.16.840.1.113883.18.209" -- id: "hhcc" - description: "Home Health Care" - url: "http://terminology.hl7.org/CodeSystem/hhcc" - oid: "urn:oid:2.16.840.1.113883.6.17" -- id: "icpc2E-P" - description: "ICPC2E 1998 Plus" - url: "http://terminology.hl7.org/CodeSystem/icpc2E-P" - oid: "urn:oid:2.16.840.1.113883.6.140" -- id: "v2-0505" - description: "cyclicEntryExitIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0505" - oid: "urn:oid:2.16.840.1.113883.18.329" -- id: "v2-0155" - description: "accept-applicationAcknowledgmentConditions" - url: "http://terminology.hl7.org/CodeSystem/v2-0155" - oid: "urn:oid:2.16.840.1.113883.18.73" -- id: "v2-0440" - description: "dataTypes" - url: "http://terminology.hl7.org/CodeSystem/v2-0440" - oid: "urn:oid:2.16.840.1.113883.18.280" - -- id: "v2-0207" - description: "processingMode" - url: "http://terminology.hl7.org/CodeSystem/v2-0207" - oid: "urn:oid:2.16.840.1.113883.18.112" -- id: "v2-0657" - description: "deviceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0657" - oid: "urn:oid:2.16.840.1.113883.18.382" -- id: "IC2" - description: "ICHPPC-2" - url: "http://terminology.hl7.org/CodeSystem/IC2" - oid: "urn:oid:2.16.840.1.113883.6.44" -- id: "DEEDS405" - description: "DEEDS405" - url: "http://terminology.hl7.org/CodeSystem/DEEDS405" - oid: "urn:oid:2.16.840.1.113883.6.102.4.5" -- id: "coverageeligibilityresponse-ex-auth-support" - description: "CoverageEligibilityResponse Auth Support Codes" - url: "http://terminology.hl7.org/CodeSystem/coverageeligibilityresponse-ex-auth-support" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1394" -- id: "v3-OrganizationNameType" - description: "OrganizationNameType" - url: "http://terminology.hl7.org/CodeSystem/v3-OrganizationNameType" - oid: "urn:oid:2.16.840.1.113883.5.1016" -- id: "v2-0250" - description: "relatednessAssessment" - url: "http://terminology.hl7.org/CodeSystem/v2-0250" - oid: "urn:oid:2.16.840.1.113883.18.145" -- id: "v2-0315" - description: "livingWillCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0315" - oid: "urn:oid:2.16.840.1.113883.18.190" -- id: "v3-hl7PublishingSubSection" - description: "HL7PublishingSubSection" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSubSection" - oid: "urn:oid:2.16.840.1.113883.5.1134" -- id: "v2-0895" - description: "nubc-PresentOnAdmission-cs" - url: "http://terminology.hl7.org/CodeSystem/v2-0895" - oid: "urn:oid:2.16.840.1.113883.6.301.11" -- id: "v2-0179" - description: "responseLevel" - url: "http://terminology.hl7.org/CodeSystem/v2-0179" - oid: "urn:oid:2.16.840.1.113883.18.94" -- id: "v2-0483" - description: "authorizationMode" - url: "http://terminology.hl7.org/CodeSystem/v2-0483" - oid: "urn:oid:2.16.840.1.113883.18.308" -- id: "v2-0529" - description: "precision" - url: "http://terminology.hl7.org/CodeSystem/v2-0529" - oid: "urn:oid:2.16.840.1.113883.18.345" -- id: "v3-MaterialForm" - description: "MaterialForm" - url: "http://terminology.hl7.org/CodeSystem/v3-MaterialForm" - oid: "urn:oid:2.16.840.1.113883.5.1127" -- id: "definition-use" - description: "Structure Definition Use Codes / Keywords" - url: "http://terminology.hl7.org/CodeSystem/definition-use" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1191" -- id: "v2-0616" - description: "addressExpirationReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0616" - oid: "urn:oid:2.16.840.1.113883.18.374" -- id: "v3-PeriodicIntervalOfTimeAbbreviation" - description: "PeriodicIntervalOfTimeAbbreviation" - url: "http://terminology.hl7.org/CodeSystem/v3-PeriodicIntervalOfTimeAbbreviation" - oid: "urn:oid:2.16.840.1.113883.5.1021" -- id: "certainty-subcomponent-type" - description: "StatisticCertaintySubcomponentType" - url: "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1360" -- id: "v2-0180" - description: "masterfileActionCode" - url: "http://terminology.hl7.org/CodeSystem/v2-0180" - oid: "urn:oid:2.16.840.1.113883.18.95" -- id: "v2-0495" - description: "bodySiteModifier" - url: "http://terminology.hl7.org/CodeSystem/v2-0495" - oid: "urn:oid:2.16.840.1.113883.18.319" -- id: "v2-0211" - description: "alternateCharacterSets" - url: "http://terminology.hl7.org/CodeSystem/v2-0211" - oid: "urn:oid:2.16.840.1.113883.18.116" -- id: "v2-0354" - description: "messageStructure" - url: "http://terminology.hl7.org/CodeSystem/v2-0354" - oid: "urn:oid:2.16.840.1.113883.18.214" -- id: "v3-hgnc" - description: "HUGO Gene Nomenclature" - url: "http://www.genenames.org" - oid: "urn:oid:2.16.840.1.113883.6.281" -- id: "v2-0092" - description: "re-admissionIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0092" - oid: "urn:oid:2.16.840.1.113883.18.36" -- id: "url" - description: "URL" - url: "http://terminology.hl7.org/CodeSystem/url" - oid: "urn:oid:2.16.840.1.113883.6.11" -- id: "nubc-UB92" - description: "National Uniform Billing Council, UB 92" - url: "http://terminology.hl7.org/CodeSystem/nubc-UB92" - oid: "urn:oid:2.16.840.1.113883.6.21" -- id: "adverse-event-seriousness" - description: "AdverseEventSeriousness" - url: "http://terminology.hl7.org/CodeSystem/adverse-event-seriousness" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1253" -- id: "v2-0909" - description: "patientResultsReleaseCategorizationScheme" - url: "http://terminology.hl7.org/CodeSystem/v2-0909" - oid: "urn:oid:2.16.840.1.113883.18.419" -- id: "v2-0323" - description: "actionCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0323" - oid: "urn:oid:2.16.840.1.113883.18.196" -- id: "icpc2E-P-AE" - description: "ICPC2E 1998 Plus Am Engl" - url: "http://terminology.hl7.org/CodeSystem/icpc2E-P-AE" - oid: "urn:oid:2.16.840.1.113883.6.140.1" -- id: "v3-Race" - description: "Race" - url: "http://terminology.hl7.org/CodeSystem/v3-Race" - oid: "urn:oid:2.16.840.1.113883.5.104" -- id: "v3-Sequencing" - description: "Sequencing" - url: "http://terminology.hl7.org/CodeSystem/v3-Sequencing" - oid: "urn:oid:2.16.840.1.113883.5.113" -- id: "MTHMDRSPA" - description: "MTH MedDRA Spanish" - url: "http://terminology.hl7.org/CodeSystem/MTHMDRSPA" - oid: "urn:oid:2.16.840.1.113883.6.165" -- id: "v2-0548" - description: "signatorysRelationshipToSubject" - url: "http://terminology.hl7.org/CodeSystem/v2-0548" - oid: "urn:oid:2.16.840.1.113883.18.355" -- id: "benefit-network" - description: "Network Type Codes" - url: "http://terminology.hl7.org/CodeSystem/benefit-network" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1177" -- id: "v2-0374" - description: "systemInducedContaminants" - url: "http://terminology.hl7.org/CodeSystem/v2-0374" - oid: "urn:oid:2.16.840.1.113883.18.232" -- id: "consentcategorycodes" - description: "Consent Category Codes" - url: "http://terminology.hl7.org/CodeSystem/consentcategorycodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1226" -- id: "v3-SpecimenType" - description: "SpecimenType" - url: "http://terminology.hl7.org/CodeSystem/v3-SpecimenType" - oid: "urn:oid:2.16.840.1.113883.5.129" -- id: "v3-ContainerCap" - description: "ContainerCap" - url: "http://terminology.hl7.org/CodeSystem/v3-ContainerCap" - oid: "urn:oid:2.16.840.1.113883.5.26" -- id: "v2-0231" - description: "studentStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0231" - oid: "urn:oid:2.16.840.1.113883.18.131" -- id: "metabolicSyndrome" - description: "METABOLIC SYNDROME" - url: "http://terminology.hl7.org/CodeSystem/metabolicSyndrome" - oid: "urn:oid:2.16.840.1.113883.6.249" -- id: "v3-ISO3166-1retired" - description: "ISO 3166 2 Character Country Codes" - url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-1retired" - oid: "urn:oid:2.16.1" -- id: "supply-item-type" - description: "Supply Item Type" - url: "http://terminology.hl7.org/CodeSystem/supply-item-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1194" -- id: "GMDN" - description: "Global Medical Device Nomenclature" - url: "http://terminology.hl7.org/CodeSystem/GMDN" - oid: "urn:oid:2.16.840.1.113883.6.276" -- id: "failure-action" - description: "Failure-action" - url: "http://terminology.hl7.org/CodeSystem/failure-action" - oid: "urn:oid:2.16.840.1.113883.4.642.1.891" -- id: "v2-0948" - description: "v2CS-relationshipType" - url: "http://terminology.hl7.org/CodeSystem/v2-0948" - oid: "urn:oid:2.16.840.1.113883.18.448" -- id: "cdcNHSN" - description: "CDC - National Healthcare Safety Network (NHSN) code system" - url: "http://terminology.hl7.org/CodeSystem/cdcNHSN" - oid: "urn:oid:2.16.840.1.113883.6.277" -- id: "variant-state" - description: "sequenceStatus" - url: "http://terminology.hl7.org/CodeSystem/variant-state" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1085" -- id: "HL70227" - description: "PH_ManufacturersOfVaccinesMVX_CDC_NIP" - url: "http://terminology.hl7.org/CodeSystem/v2-0227" - oid: "urn:oid:2.16.840.1.113883.12.227" -- id: "v2-0227" - description: "PH_ManufacturersOfVaccinesMVX_CDC_NIP" - url: "http://terminology.hl7.org/CodeSystem/v2-0227" - oid: "urn:oid:2.16.840.1.113883.12.227" -- id: "encounter-subject-status" - description: "Encounter subject status" - url: "http://terminology.hl7.org/CodeSystem/encounter-subject-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1420" -- id: "v3-NullFlavor" - description: "NullFlavor" - url: "http://terminology.hl7.org/CodeSystem/v3-NullFlavor" - oid: "urn:oid:2.16.840.1.113883.5.1008" -- id: "v2-0159" - description: "dietCodeSpecificationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0159" - oid: "urn:oid:2.16.840.1.113883.18.77" -- id: "v3-hc-AIGN" - description: "Active Ingredient Group Number" - url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-4" - oid: "urn:oid:2.16.840.1.113883.5.1106" -- id: "dicom-audit-lifecycle" - description: null - url: "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle" - oid: null -- id: "ex-claimsubtype" - description: "Example Claim SubType Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-claimsubtype" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1158" -- id: "activity-definition-category" - description: "ActivityDefinitionCategory" - url: "http://terminology.hl7.org/CodeSystem/activity-definition-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1243" -- id: "v2-0335" - description: "repeatPattern" - url: "http://terminology.hl7.org/CodeSystem/v2-0335" - oid: "urn:oid:2.16.840.1.113883.18.205" -- id: "medicationrequest-status-reason" - description: "MedicationRequest Status Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationrequest-status-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1325" -- id: "icd-o-3" - description: "International Classification of Diseases for Oncology, version 3." - url: "http://terminology.hl7.org/CodeSystem/icd-o-3" - oid: "urn:oid:2.16.840.1.113883.6.43.1" -- id: "v2-0270" - description: "documentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0270" - oid: "urn:oid:2.16.840.1.113883.18.163" -- id: "v2-0437" - description: "alertDevice" - url: "http://terminology.hl7.org/CodeSystem/v2-0437" - oid: "urn:oid:2.16.840.1.113883.18.278" -- id: "conformance-expectation" - description: "ConformanceExpectation" - url: "http://terminology.hl7.org/CodeSystem/conformance-expectation" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1271" -- id: "v3-EmployeeJobClass" - description: "EmployeeJobClass" - url: "http://terminology.hl7.org/CodeSystem/v3-EmployeeJobClass" - oid: "urn:oid:2.16.840.1.113883.5.1059" -- id: "v2-0122" - description: "chargeType" - url: "http://terminology.hl7.org/CodeSystem/v2-0122" - oid: "urn:oid:2.16.840.1.113883.18.50" -- id: "v2-0572" - description: "taxStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0572" - oid: "urn:oid:2.16.840.1.113883.18.372" -- id: "entformula-additive" - description: "Enteral Formula Additive Type Code" - url: "http://terminology.hl7.org/CodeSystem/entformula-additive" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1123" -- id: "adverse-event-causality-method" - description: "AdverseEventCausalityMethod" - url: "http://terminology.hl7.org/CodeSystem/adverse-event-causality-method" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1255" -- id: "v2-0933" - description: "intendedProcedureType" - url: "http://terminology.hl7.org/CodeSystem/v2-0933" - oid: "urn:oid:2.16.840.1.113883.18.434" -- id: "icpc-SWE" - description: "International Classification of Primary Care 1993 Swedish" - url: "http://terminology.hl7.org/CodeSystem/icpc-SWE" - oid: "urn:oid:2.16.840.1.113883.6.138.13" -- id: "message-reasons-encounter" - description: "Example Message Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/message-reasons-encounter" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1122" -- id: "v2-0175" - description: "masterFileIdentifierCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0175" - oid: "urn:oid:2.16.840.1.113883.18.91" -- id: "goal-acceptance-status" - description: "GoalAcceptanceStatus" - url: "http://terminology.hl7.org/CodeSystem/goal-acceptance-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1270" -- id: "v2-0749" - description: "drgGroupingStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0749" - oid: "urn:oid:2.16.840.1.113883.18.396" -- id: "v2-0925" - description: "phlebotomyIssue" - url: "http://terminology.hl7.org/CodeSystem/v2-0925" - oid: "urn:oid:2.16.840.1.113883.18.431" -- id: "HL70163" - description: "bodySite" - url: "http://terminology.hl7.org/CodeSystem/v2-0163" - oid: "urn:oid:2.16.840.1.113883.18.81" -- id: "v2-0163" - description: "bodySite" - url: "http://terminology.hl7.org/CodeSystem/v2-0163" - oid: "urn:oid:2.16.840.1.113883.18.81" -- id: "v2-0499" - description: "consentBypassReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0499" - oid: "urn:oid:2.16.840.1.113883.18.323" -- id: "medicationknowledge-characteristic" - description: "MedicationKnowledge Characteristic Codes" - url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-characteristic" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1338" -- id: "NHSNVocabulary" - description: "NHSN HAI Vocabulary" - url: "http://terminology.hl7.org/CodeSystem/NHSNVocabulary" - oid: "urn:oid:2.16.840.1.113883.6.274" - -- id: "v2-0421" - description: "severityOfIllness" - url: "http://terminology.hl7.org/CodeSystem/v2-0421" - oid: "urn:oid:2.16.840.1.113883.18.262" -- id: "v2-0564" - description: "adjustmentCategory" - url: "http://terminology.hl7.org/CodeSystem/v2-0564" - oid: "urn:oid:2.16.840.1.113883.18.366" -- id: "camncvs" - description: "CAMNCVS" - url: "http://terminology.hl7.org/CodeSystem/camncvs" - oid: "urn:oid:2.16.840.1.113883.6.19" -- id: "GCRT" - description: "GCRT" - url: "http://terminology.hl7.org/CodeSystem/GCRT" - oid: "urn:oid:2.16.840.1.113883.4.80" -- id: "v3-EntityNamePartTypeR2" - description: "EntityNamePartTypeR2" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartTypeR2" - oid: "urn:oid:2.16.840.1.113883.5.1121" -- id: "v3-EntityCode" - description: "EntityCode" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityCode" - oid: "urn:oid:2.16.840.1.113883.5.1060" -- id: "v2-0216" - description: "patientStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0216" - oid: "urn:oid:2.16.840.1.113883.18.120" -- id: "testscript-operation-codes" - description: "Test script operation code" - url: "http://terminology.hl7.org/CodeSystem/testscript-operation-codes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1195" -- id: "v2-0353" - description: "cweStatuses" - url: "http://terminology.hl7.org/CodeSystem/v2-0353" - oid: "urn:oid:2.16.840.1.113883.18.213" -- id: "DEEDS414" - description: "DEEDS414" - url: "http://terminology.hl7.org/CodeSystem/DEEDS414" - oid: "urn:oid:2.16.840.1.113883.6.102.4.14" -- id: "EPSG-GeodeticParameterDataset" - description: "EPSG Geodetic Parameter Dataset" - url: "http://terminology.hl7.org/CodeSystem/EPSG-GeodeticParameterDataset" - oid: "urn:oid:2.16.840.1.113883.6.242" -- id: "v2-0187" - description: "providerBilling" - url: "http://terminology.hl7.org/CodeSystem/v2-0187" - oid: "urn:oid:2.16.840.1.113883.18.99" - -- id: "adverse-event-causality-assess" - description: "AdverseEventCausalityAssessment" - url: "http://terminology.hl7.org/CodeSystem/adverse-event-causality-assess" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1254" -- id: "v2-0538" - description: "institutionRelationshipType" - url: "http://terminology.hl7.org/CodeSystem/v2-0538" - oid: "urn:oid:2.16.840.1.113883.18.351" -- id: "v2-0168" - description: "processingPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0168" - oid: "urn:oid:2.16.840.1.113883.18.86" -- id: "NHSNBSIRiskFactors" - description: "NHSN BSI Risk Factors" - url: "http://terminology.hl7.org/CodeSystem/NHSNBSIRiskFactors" - oid: "urn:oid:2.16.840.1.113883.6.266" -- id: "v2-0492" - description: "specimenAppropriateness" - url: "http://terminology.hl7.org/CodeSystem/v2-0492" - oid: "urn:oid:2.16.840.1.113883.18.316" -- id: "v3-scptype" - description: "pan-Canadian Provider Types" - url: "https://fhir.infoway-inforoute.ca/CodeSystem/scptype" - oid: "urn:oid:2.16.840.1.113883.2.20.5.3" -- id: "v3-ParticipationSignature" - description: "ParticipationSignature" - url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationSignature" - oid: "urn:oid:2.16.840.1.113883.5.89" -- id: "v2-0241" - description: "patientOutcome" - url: "http://terminology.hl7.org/CodeSystem/v2-0241" - oid: "urn:oid:2.16.840.1.113883.18.140" -- id: "DEEDS506" - description: "DEEDS506" - url: "http://terminology.hl7.org/CodeSystem/DEEDS506" - oid: "urn:oid:2.16.840.1.113883.6.102.5.6" -- id: "smart-capabilities" - description: "SmartCapabilities" - url: "http://terminology.hl7.org/CodeSystem/smart-capabilities" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1265" -- id: "CDARUS" - description: "CDA_RUS" - url: "http://terminology.hl7.org/CodeSystem/CDARUS" - oid: "urn:oid:2.16.840.1.113883.6.239" -- id: "IETF1766" - description: "IETF RFC 1766" - url: "http://terminology.hl7.org/CodeSystem/IETF1766" - oid: "urn:oid:2.16.840.1.113883.6.84" -- id: "v2-0938" - description: "collectionEvent" - url: "http://terminology.hl7.org/CodeSystem/v2-0938" - oid: "urn:oid:2.16.840.1.113883.18.441" -- id: "v3-ContextControl" - description: "ContextControl" - url: "http://terminology.hl7.org/CodeSystem/v3-ContextControl" - oid: "urn:oid:2.16.840.1.113883.5.1057" -- id: "hibccHIN" - description: "HIBCC" - url: "http://terminology.hl7.org/CodeSystem/hibccHIN" - oid: "urn:oid:2.16.840.1.113883.6.40" -- id: "v2-0191" - description: "typeOfReferencedData" - url: "http://terminology.hl7.org/CodeSystem/v2-0191" - oid: "urn:oid:2.16.840.1.113883.18.102" -- id: "v2-0484" - description: "dispenseType" - url: "http://terminology.hl7.org/CodeSystem/v2-0484" - oid: "urn:oid:2.16.840.1.113883.18.309" -- id: "v3-ParticipationType" - description: "ParticipationType" - url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - oid: "urn:oid:2.16.840.1.113883.5.90" -- id: "resource-type-link" - description: "PayeeResourceType" - url: "http://terminology.hl7.org/CodeSystem/resource-type-link" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1180" -- id: "ex-relatedclaimrelationship" - description: "Example Related Claim Relationship Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1159" -- id: "v2-0257" - description: "natureOfChallenge" - url: "http://terminology.hl7.org/CodeSystem/v2-0257" - oid: "urn:oid:2.16.840.1.113883.18.152" -- id: "research-study-prim-purp-type" - description: "ResearchStudyPrimaryPurposeType" - url: "http://terminology.hl7.org/CodeSystem/research-study-prim-purp-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1250" -- id: "v2-0742" - description: "drgStatusFinancialCalculation" - url: "http://terminology.hl7.org/CodeSystem/v2-0742" - oid: "urn:oid:2.16.840.1.113883.18.395" -- id: "v3-ActPriority" - description: "ActPriority" - url: "http://terminology.hl7.org/CodeSystem/v3-ActPriority" - oid: "urn:oid:2.16.840.1.113883.5.7" -- id: "v3-ResponseModality" - description: "ResponseModality" - url: "http://terminology.hl7.org/CodeSystem/v3-ResponseModality" - oid: "urn:oid:2.16.840.1.113883.5.109" -- id: "claimcareteamrole" - description: "Claim Care Team Role Codes" - url: "http://terminology.hl7.org/CodeSystem/claimcareteamrole" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1165" -- id: "v2-0083" - description: "outlierType" - url: "http://terminology.hl7.org/CodeSystem/v2-0083" - oid: "urn:oid:2.16.840.1.113883.18.33" -- id: "v3-EducationLevel" - description: "Education Level" - url: "http://terminology.hl7.org/CodeSystem/v3-EducationLevel" - oid: "urn:oid:2.16.840.1.113883.5.1077" -- id: "v2-0200" - description: "nameType2" - url: "http://terminology.hl7.org/CodeSystem/v2-0200" - oid: "urn:oid:2.16.840.1.113883.18.105" -- id: "DEEDS402" - description: "DEEDS402" - url: "http://terminology.hl7.org/CodeSystem/DEEDS402" - oid: "urn:oid:2.16.840.1.113883.6.102.4.2" -- id: "contractactorrole" - description: "Contract Actor Role Codes" - url: "http://terminology.hl7.org/CodeSystem/contractactorrole" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1203" -- id: "v2-0502" - description: "non-subjectConsenterReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0502" - oid: "urn:oid:2.16.840.1.113883.18.326" -- id: "v3-mediaType" - description: "Media Type" - url: "http://terminology.hl7.org/CodeSystem/v3-mediaType" - oid: "urn:oid:2.16.840.1.113883.5.79" -- id: "v2-0017" - description: "transactionType" - url: "http://terminology.hl7.org/CodeSystem/v2-0017" - oid: "urn:oid:2.16.840.1.113883.18.13" -- id: "v2-0914" - description: "rootCause" - url: "http://terminology.hl7.org/CodeSystem/v2-0914" - oid: "urn:oid:2.16.840.1.113883.18.421" -- id: "v3-ActRelationshipSplit" - description: "ActRelationshipSplit" - url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSplit" - oid: "urn:oid:2.16.840.1.113883.5.13" -- id: "v2-0294" - description: "timeSelectionCriteriaParameterClass" - url: "http://terminology.hl7.org/CodeSystem/v2-0294" - oid: "urn:oid:2.16.840.1.113883.18.183" -- id: "standards-status" - description: "StandardsStatus" - url: "http://terminology.hl7.org/CodeSystem/standards-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1366" -- id: "adjudication-reason" - description: "Adjudication Reason Codes" - url: "http://terminology.hl7.org/CodeSystem/adjudication-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1172" -- id: "abcCodes" - description: "ABCcodes" - url: "http://terminology.hl7.org/CodeSystem/abcCodes" - oid: "urn:oid:2.16.840.1.113883.6.25" -- id: "v3-ISO3166-2retired" - description: "ISO 3166 3 Character Country Codes" - url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-2retired" - oid: "urn:oid:2.16.2" -- id: "v2-0105" - description: "sourceOfComment" - url: "http://terminology.hl7.org/CodeSystem/v2-0105" - oid: "urn:oid:2.16.840.1.113883.18.42" -- id: "v2-0555" - description: "invoiceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0555" - oid: "urn:oid:2.16.840.1.113883.18.359" -- id: "nmmds" - description: "Nursing Management Minimum Data Set" - url: "http://terminology.hl7.org/CodeSystem/nmmds" - oid: "urn:oid:2.16.840.1.113883.6.23" -- id: "v2-0806" - description: "sterilizationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0806" - oid: "urn:oid:2.16.840.1.113883.18.406" -- id: "iso-21089-lifecycle" - description: null - url: "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle" - oid: null -- id: "icpc-NOR" - description: "International Classification of Primary Care 1993 Norwegian" - url: "http://terminology.hl7.org/CodeSystem/icpc-NOR" - oid: "urn:oid:2.16.840.1.113883.6.138.10" -- id: "v3-styleType" - description: "Style Type" - url: "http://terminology.hl7.org/CodeSystem/v3-styleType" - oid: "urn:oid:2.16.840.1.113883.5.1095" -- id: "v2-0739" - description: "drgStatusPatient" - url: "http://terminology.hl7.org/CodeSystem/v2-0739" - oid: "urn:oid:2.16.840.1.113883.18.394" -- id: "condition-ver-status" - description: "ConditionVerificationStatus" - url: "http://terminology.hl7.org/CodeSystem/condition-ver-status" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1075" -- id: "USZIPCODES" - description: "United States Postal Service" - url: "http://terminology.hl7.org/CodeSystem/USZIPCODES" - oid: "urn:oid:2.16.840.1.113883.6.231" -- id: "v2-0369" - description: "specimenRole" - url: "http://terminology.hl7.org/CodeSystem/v2-0369" - oid: "urn:oid:2.16.840.1.113883.18.227" -- id: "icpc-DAN" - description: "International Classification of Primary Care 1993 Danish" - url: "http://terminology.hl7.org/CodeSystem/icpc-DAN" - oid: "urn:oid:2.16.840.1.113883.6.138.2" -- id: "v2-0406" - description: "organizationUnitType" - url: "http://terminology.hl7.org/CodeSystem/v2-0406" - oid: "urn:oid:2.16.840.1.113883.18.254" -- id: "variable-role" - description: "EvidenceVariableRole" - url: "http://terminology.hl7.org/CodeSystem/variable-role" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1457" -- id: "v3-ObservationValue" - description: "ObservationValue" - url: "http://terminology.hl7.org/CodeSystem/v3-ObservationValue" - oid: "urn:oid:2.16.840.1.113883.5.1063" -- id: "ex-procedure-type" - description: "Example Procedure Type Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-procedure-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1388" -- id: "NHSNSSILocationType" - description: "NHSN SSI Location Type" - url: "http://terminology.hl7.org/CodeSystem/NHSNSSILocationType" - oid: "urn:oid:2.16.840.1.113883.6.265" -- id: "v3-hl7Realm" - description: "HL7Realm" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7Realm" - oid: "urn:oid:2.16.840.1.113883.5.1124" -- id: "icd10ae" - description: "ICD-10 American English" - url: "http://terminology.hl7.org/CodeSystem/icd10ae" - oid: "urn:oid:2.16.840.1.113883.6.3.1" -- id: "v2-0144" - description: "eligibilitySource" - url: "http://terminology.hl7.org/CodeSystem/v2-0144" - oid: "urn:oid:2.16.840.1.113883.18.65" -- id: "v3-substanceAdminSubstitution" - description: "Substance Admin Substitution" - url: "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution" - oid: "urn:oid:2.16.840.1.113883.5.1070" -- id: "v2-0514" - description: "transfusionAdverseReaction" - url: "http://terminology.hl7.org/CodeSystem/v2-0514" - oid: "urn:oid:2.16.840.1.113883.18.336" -- id: "standardBillingUnit" - description: "Standard Billing Unit" - url: "http://terminology.hl7.org/CodeSystem/standardBillingUnit" - oid: "urn:oid:2.16.840.1.113883.2.13" -- id: "v2-0001" - description: "administrativeSex" - url: "http://terminology.hl7.org/CodeSystem/v2-0001" - oid: "urn:oid:2.16.840.1.113883.18.2" -- id: "validation-process" - description: "Validation-process" - url: "http://terminology.hl7.org/CodeSystem/validation-process" - oid: "urn:oid:2.16.840.1.113883.4.642.1.889" -- id: "v2-0778" - description: "itemType" - url: "http://terminology.hl7.org/CodeSystem/v2-0778" - oid: "urn:oid:2.16.840.1.113883.18.403" -- id: "v2-0282" - description: "referralDisposition" - url: "http://terminology.hl7.org/CodeSystem/v2-0282" - oid: "urn:oid:2.16.840.1.113883.18.175" -- id: "v3-ObservationInterpretation" - description: "ObservationInterpretation" - url: "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" - oid: "urn:oid:2.16.840.1.113883.5.83" -- id: "pclocd" - description: "pan-Canadian LOINC Observation Code Database" - url: "https://fhir.infoway-inforoute.ca/CodeSystem/pCLOCD" - oid: "urn:oid:2.16.840.1.113883.2.20.5.1" -- id: "condition-clinical" - description: "Condition Clinical Status Codes" - url: "http://terminology.hl7.org/CodeSystem/condition-clinical" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1074" -- id: "DEEDS418" - description: "DEEDS418" - url: "http://terminology.hl7.org/CodeSystem/DEEDS418" - oid: "urn:oid:2.16.840.1.113883.6.102.4.18" -- id: "can-push-updates" - description: "Can-push-updates" - url: "http://terminology.hl7.org/CodeSystem/can-push-updates" - oid: "urn:oid:2.16.840.1.113883.4.642.1.897" -- id: "goal-achievement" - description: "Goal achievement status" - url: "http://terminology.hl7.org/CodeSystem/goal-achievement" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1375" -- id: "v2-0426" - description: "bloodProduct" - url: "http://terminology.hl7.org/CodeSystem/v2-0426" - oid: "urn:oid:2.16.840.1.113883.18.267" -- id: "v2-0076" - description: "messageType" - url: "http://terminology.hl7.org/CodeSystem/v2-0076" - oid: "urn:oid:2.16.840.1.113883.18.30" -- id: "deeds-old" - description: "DEEDS(old)" - url: "http://terminology.hl7.org/CodeSystem/deeds-old" - oid: "urn:oid:2.16.840.1.113883.6.89" -- id: "v3-hl7CMETAttribution" - description: "HL7CMETAttribution" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7CMETAttribution" - oid: "urn:oid:2.16.840.1.113883.5.1132" -- id: "research-subject-state-type" - description: "ResearchSubjectStateType" - url: "http://terminology.hl7.org/CodeSystem/research-subject-state-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "evidence-quality" - description: "QualityOfEvidenceRating" - url: "http://terminology.hl7.org/CodeSystem/evidence-quality" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1267" -- id: "claiminformationcategory" - description: "Claim Information Category Codes" - url: "http://terminology.hl7.org/CodeSystem/claiminformationcategory" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1163" -- id: "v2-0133" - description: "procedurePractitionerIdentifierCodeType" - url: "http://terminology.hl7.org/CodeSystem/v2-0133" - oid: "urn:oid:2.16.840.1.113883.18.59" -- id: "v3-VaccineManufacturer" - description: "VaccineManufacturer" - url: "http://terminology.hl7.org/CodeSystem/v3-VaccineManufacturer" - oid: "urn:oid:2.16.840.1.113883.5.144" -- id: "v2-tables" - description: "V2 Table List" - url: "http://terminology.hl7.org/CodeSystem/v2-tables" - oid: null -- id: "v2-0922" - description: "certificationCategory" - url: "http://terminology.hl7.org/CodeSystem/v2-0922" - oid: "urn:oid:2.16.840.1.113883.18.428" -- id: "v3-TribalEntityUS" - description: "TribalEntityUS" - url: "http://terminology.hl7.org/CodeSystem/v3-TribalEntityUS" - oid: "urn:oid:2.16.840.1.113883.5.140" -- id: "immunization-evaluation-dose-status-reason" - description: "Immunization Evaluation Dose Status Reason codes" - url: "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1103" -- id: "v2-0164" - description: "administrationDevice" - url: "http://terminology.hl7.org/CodeSystem/v2-0164" - oid: "urn:oid:2.16.840.1.113883.18.82" -- id: "v2-0534" - description: "clergyNotificationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0534" - oid: "urn:oid:2.16.840.1.113883.18.348" -- id: "allergyintolerance-verification" - description: "AllergyIntolerance Verification Status" - url: "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1371" -- id: "noc" - description: "NOC" - url: "http://terminology.hl7.org/CodeSystem/noc" - oid: "urn:oid:2.16.840.1.113883.6.16" -- id: "library-type" - description: "LibraryType" - url: "http://terminology.hl7.org/CodeSystem/library-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1230" -- id: "fundsreserve" - description: "Funds Reservation Codes" - url: "http://terminology.hl7.org/CodeSystem/fundsreserve" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1051" -- id: "v3-IdentifierScope" - description: "IdentifierScope" - url: "http://terminology.hl7.org/CodeSystem/v3-IdentifierScope" - oid: "urn:oid:2.16.840.1.113883.5.1116" -- id: "v2-0871" - description: "supplyRisk" - url: "http://terminology.hl7.org/CodeSystem/v2-0871" - oid: "urn:oid:2.16.840.1.113883.18.410" -- id: "v3-rxNorm" - description: "RxNorm" - url: "http://www.nlm.nih.gov/research/umls/rxnorm" - oid: "urn:oid:2.16.840.1.113883.6.88" -- id: "financialtaskcode" - description: "Financial Task Codes" - url: "http://terminology.hl7.org/CodeSystem/financialtaskcode" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1390" -- id: "v2-0488" - description: "specimenCollectionMethod" - url: "http://terminology.hl7.org/CodeSystem/v2-0488" - oid: "urn:oid:2.16.840.1.113883.18.312" -- id: "iso21000-6-2004E-RDD" - description: "ISO/IEC 21000-6:2004(E) Rights Data Dictionary" - url: "http://terminology.hl7.org/CodeSystem/iso21000-6-2004E-RDD" - oid: "urn:oid:1.0.21000.6" -- id: "v3-cci" - description: "Canadian Classification of Health Interventions" - url: "http://cihi.ca/fhir/CodeSystem/cihi-cci" - oid: "urn:oid:2.16.840.1.113883.6.95" -- id: "certainty-subcomponent-rating" - description: "StatisticCertaintySubcomponentRating" - url: "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-rating" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1362" -- id: "ex-coverage-financial-exception" - description: "Example Coverage Financial Exception Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-coverage-financial-exception" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1329" -- id: "v3-mdc" - description: "ISO 11073-10101 Health informatics - Point-of-care" - url: "urn:iso:std:iso:11073:10101" - oid: "urn:oid:2.16.840.1.113883.6.24" -- id: "v2-0430" - description: "arrivalMode" - url: "http://terminology.hl7.org/CodeSystem/v2-0430" - oid: "urn:oid:2.16.840.1.113883.18.271" -- id: "v3-RouteOfAdministration" - description: "RouteOfAdministration" - url: "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration" - oid: "urn:oid:2.16.840.1.113883.5.112" -- id: "iso639-1" - description: "ISO 639-1: Codes for the representation of names of languages -- Part 1:\ - \ Alpha-2 code" - url: "http://terminology.hl7.org/CodeSystem/iso639-1" - oid: "urn:oid:1.0.639.1" -- id: "v2-0298" - description: "cpRangeType" - url: "http://terminology.hl7.org/CodeSystem/v2-0298" - oid: "urn:oid:2.16.840.1.113883.18.184" -- id: "v2-0332" - description: "sourceType" - url: "http://terminology.hl7.org/CodeSystem/v2-0332" - oid: "urn:oid:2.16.840.1.113883.18.203" -- id: "v2-0277" - description: "appointmentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0277" - oid: "urn:oid:2.16.840.1.113883.18.170" -- id: "security-source-type" - description: "Audit Event Source Type" - url: "http://terminology.hl7.org/CodeSystem/security-source-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1137" -- id: "v3-ietf3066" - description: "Tags for the Identification of Languages" - url: "urn:ietf:bcp:47" - oid: "urn:oid:2.16.840.1.113883.6.121" -- id: "v2-0918" - description: "pcaType" - url: "http://terminology.hl7.org/CodeSystem/v2-0918" - oid: "urn:oid:2.16.840.1.113883.18.424" -- id: "chargeitem-billingcodes" - description: "ChargeItemCode" - url: "http://terminology.hl7.org/CodeSystem/chargeitem-billingcodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1257" -- id: "DEEDS422" - description: "DEEDS422" - url: "http://terminology.hl7.org/CodeSystem/DEEDS422" - oid: "urn:oid:2.16.840.1.113883.6.102.4.22" -- id: "v2-0365" - description: "equipmentState" - url: "http://terminology.hl7.org/CodeSystem/v2-0365" - oid: "urn:oid:2.16.840.1.113883.18.223" -- id: "v2-0220" - description: "livingArrangement" - url: "http://terminology.hl7.org/CodeSystem/v2-0220" - oid: "urn:oid:2.16.840.1.113883.18.122" -- id: "v2-0559" - description: "product-serviceStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0559" - oid: "urn:oid:2.16.840.1.113883.18.363" -- id: "v2-0109" - description: "reportPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0109" - oid: "urn:oid:2.16.840.1.113883.18.46" -- id: "v3-Confidentiality" - description: "Confidentiality" - url: "http://terminology.hl7.org/CodeSystem/v3-Confidentiality" - oid: "urn:oid:2.16.840.1.113883.5.25" -- id: "referencerange-meaning" - description: "Observation Reference Range Meaning Codes" - url: "http://terminology.hl7.org/CodeSystem/referencerange-meaning" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1124" -- id: "v2-0373" - description: "treatment" - url: "http://terminology.hl7.org/CodeSystem/v2-0373" - oid: "urn:oid:2.16.840.1.113883.18.231" -- id: "mth-icpc2-icd10-AE" - description: "ICPC2-ICD10 Thesaurus, Am Engl" - url: "http://terminology.hl7.org/CodeSystem/mth-icpc2-icd10-AE" - oid: "urn:oid:2.16.840.1.113883.6.142.3" -- id: "NHSNSpinalFusionApproach" - description: "NHSN Spinal Fusion Approach" - url: "http://terminology.hl7.org/CodeSystem/NHSNSpinalFusionApproach" - oid: "urn:oid:2.16.840.1.113883.6.262" -- id: "v2-0236" - description: "eventReportedTo" - url: "http://terminology.hl7.org/CodeSystem/v2-0236" - oid: "urn:oid:2.16.840.1.113883.18.135" -- id: "ex-visionprescriptionproduct" - description: "Example Vision Prescription Product Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-visionprescriptionproduct" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1188" -- id: "need" - description: "Need" - url: "http://terminology.hl7.org/CodeSystem/need" - oid: "urn:oid:2.16.840.1.113883.4.642.1.883" -- id: "naaccrCodes" - description: "NAACCR" - url: "http://terminology.hl7.org/CodeSystem/naaccrCodes" - oid: "urn:oid:2.16.840.1.113883.6.7" -- id: "icpc-BAQ" - description: "International Classification of Primary Care 1993 Basque" - url: "http://terminology.hl7.org/CodeSystem/icpc-BAQ" - oid: "urn:oid:2.16.840.1.113883.6.138.1" -- id: "v2-0324" - description: "locationCharacteristic" - url: "http://terminology.hl7.org/CodeSystem/v2-0324" - oid: "urn:oid:2.16.840.1.113883.18.197" -- id: "v3-TableCellHorizontalAlign" - description: "TableCellHorizontalAlign" - url: "http://terminology.hl7.org/CodeSystem/v3-TableCellHorizontalAlign" - oid: "urn:oid:2.16.840.1.113883.5.131" -- id: "nddf" - description: "National Drug Data File" - url: "http://terminology.hl7.org/CodeSystem/nddf" - oid: "urn:oid:2.16.840.1.113883.6.208" -- id: "iso639-2ret" - description: "ISO 639-2 Alpha-3 Language Codes" - url: "http://terminology.hl7.org/CodeSystem/iso639-2ret" - oid: "urn:oid:2.16.840.1.113883.6.100" -- id: "v3-hl7ITSVersionCode" - description: "HL7 ITS Version Code" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7ITSVersionCode" - oid: "urn:oid:2.16.840.1.113883.5.1092" -- id: "v2-0261" - description: "locationEquipment" - url: "http://terminology.hl7.org/CodeSystem/v2-0261" - oid: "urn:oid:2.16.840.1.113883.18.156" -- id: "v2-0518" - description: "overrideType" - url: "http://terminology.hl7.org/CodeSystem/v2-0518" - oid: "urn:oid:2.16.840.1.113883.18.339" -- id: "v2-0148" - description: "moneyOrPercentageIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0148" - oid: "urn:oid:2.16.840.1.113883.18.69" -- id: "v3-DeviceAlertLevel" - description: "DeviceAlertLevel" - url: "http://terminology.hl7.org/CodeSystem/v3-DeviceAlertLevel" - oid: "urn:oid:2.16.840.1.113883.5.31" -- id: "NHSNLCBIPathways" - description: "NHSN LCBI Pathways" - url: "http://terminology.hl7.org/CodeSystem/NHSNLCBIPathways" - oid: "urn:oid:2.16.840.1.113883.6.267" -- id: "icpc-GER" - description: "International Classification of Primary Care 1993 German" - url: "http://terminology.hl7.org/CodeSystem/icpc-GER" - oid: "urn:oid:2.16.840.1.113883.6.138.6" -- id: "v2-0149" - description: "dayType" - url: "http://terminology.hl7.org/CodeSystem/v2-0149" - oid: "urn:oid:2.16.840.1.113883.18.70" -- id: "v3-QueryQuantityUnit" - description: "QueryQuantityUnit" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryQuantityUnit" - oid: "urn:oid:2.16.840.1.113883.5.1066" -- id: "v2-0325" - description: "locationRelationship" - url: "http://terminology.hl7.org/CodeSystem/v2-0325" - oid: "urn:oid:2.16.840.1.113883.18.198" -- id: "v3-ReligiousAffiliation" - description: "Religious Affiliation" - url: "http://terminology.hl7.org/CodeSystem/v3-ReligiousAffiliation" - oid: "urn:oid:2.16.840.1.113883.5.1076" -- id: "v2-0260" - description: "patientLocationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0260" - oid: "urn:oid:2.16.840.1.113883.18.155" -- id: "ex-tooth" - description: "Oral Site Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-tooth" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1152" -- id: "v3-CalendarType" - description: "CalendarType" - url: "http://terminology.hl7.org/CodeSystem/v3-CalendarType" - oid: "urn:oid:2.16.840.1.113883.5.1017" -- id: "chromosome-human" - description: "chromosome-human" - url: "http://terminology.hl7.org/CodeSystem/chromosome-human" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1086" -- id: "immunization-origin" - description: "Immunization Origin Codes" - url: "http://terminology.hl7.org/CodeSystem/immunization-origin" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1101" -- id: "v2-0372" - description: "specimenComponent" - url: "http://terminology.hl7.org/CodeSystem/v2-0372" - oid: "urn:oid:2.16.840.1.113883.18.230" -- id: "v2-0667" - description: "deviceDataState" - url: "http://terminology.hl7.org/CodeSystem/v2-0667" - oid: "urn:oid:2.16.840.1.113883.18.384" -- id: "iso3166-1edition2" - description: "ISO 3166 Part 1 Country Codes, 2nd Edition" - url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2" - oid: "urn:oid:1.0.3166.1.2" -- id: "v2-0237" - description: "eventQualification" - url: "http://terminology.hl7.org/CodeSystem/v2-0237" - oid: "urn:oid:2.16.840.1.113883.18.136" -- id: "FDI-surface" - description: "Surface Codes" - url: "http://terminology.hl7.org/CodeSystem/FDI-surface" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1154" -- id: "contracttermsubtypecodes" - description: "Contract Term Subtype Codes" - url: "http://terminology.hl7.org/CodeSystem/contracttermsubtypecodes" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1200" -- id: "handling-condition" - description: "HandlingConditionSet" - url: "http://terminology.hl7.org/CodeSystem/handling-condition" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1259" -- id: "v2-0558" - description: "payeeRelationshipToInvoice" - url: "http://terminology.hl7.org/CodeSystem/v2-0558" - oid: "urn:oid:2.16.840.1.113883.18.362" -- id: "v2-0108" - description: "queryResultsLevel" - url: "http://terminology.hl7.org/CodeSystem/v2-0108" - oid: "urn:oid:2.16.840.1.113883.18.45" -- id: "v3-IntegrityCheckAlgorithm" - description: "IntegrityCheckAlgorithm" - url: "http://terminology.hl7.org/CodeSystem/v3-IntegrityCheckAlgorithm" - oid: "urn:oid:2.16.840.1.113883.5.1010" -- id: "v2-0364" - description: "commentType" - url: "http://terminology.hl7.org/CodeSystem/v2-0364" - oid: "urn:oid:2.16.840.1.113883.18.222" -- id: "v2-0734" - description: "grouperStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0734" - oid: "urn:oid:2.16.840.1.113883.18.393" -- id: "v3-hc-AIC" - description: "Active Ingredient Code" - url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-1" - oid: "urn:oid:2.16.840.1.113883.5.1103" -- id: "copy-number-event" - description: "CopyNumberEvent" - url: "http://terminology.hl7.org/CodeSystem/copy-number-event" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1087" -- id: "ex-diagnosistype" - description: "Example Diagnosis Type Codes" - url: "http://terminology.hl7.org/CodeSystem/ex-diagnosistype" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1167" -- id: "whoSPA" - description: "WHO Adverse Reaction Terms Spanish" - url: "http://terminology.hl7.org/CodeSystem/whoSPA" - oid: "urn:oid:2.16.840.1.113883.6.230.4" -- id: "v2-0919" - description: "exclusiveTest" - url: "http://terminology.hl7.org/CodeSystem/v2-0919" - oid: "urn:oid:2.16.840.1.113883.18.425" -- id: "ICD-9DualCoding" - description: "ICD-9 Dual Coding" - url: "http://terminology.hl7.org/CodeSystem/ICD-9DualCoding" - oid: "urn:oid:2.16.840.1.113883.6.261" -- id: "v3-LanguageAbilityMode" - description: "LanguageAbilityMode" - url: "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode" - oid: "urn:oid:2.16.840.1.113883.5.60" -- id: "MDRDUT" - description: "MedDRA Dutch" - url: "http://terminology.hl7.org/CodeSystem/MDRDUT" - oid: "urn:oid:2.16.840.1.113883.6.163.2" -- id: "nutrition-intake-category" - description: "Nutrition intake category codes" - url: "http://terminology.hl7.org/CodeSystem/nutrition-intake-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1431" -- id: "icpc-HEB" - description: "International Classification of Primary Care 1993 Hebrew" - url: "http://terminology.hl7.org/CodeSystem/icpc-HEB" - oid: "urn:oid:2.16.840.1.113883.6.138.7" -- id: "v2-0763" - description: "drgProcedureRelevance" - url: "http://terminology.hl7.org/CodeSystem/v2-0763" - oid: "urn:oid:2.16.840.1.113883.18.401" -- id: "v2-0299" - description: "encoding" - url: "http://terminology.hl7.org/CodeSystem/v2-0299" - oid: "urn:oid:2.16.840.1.113883.18.185" -- id: "v2-0276" - description: "appointmentReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0276" - oid: "urn:oid:2.16.840.1.113883.18.169" -- id: "financialtaskinputtype" - description: "Financial Task Input Type Codes" - url: "http://terminology.hl7.org/CodeSystem/financialtaskinputtype" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1392" -- id: "goal-relationship-type" - description: "GoalRelationshipType" - url: "http://terminology.hl7.org/CodeSystem/goal-relationship-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1269" -- id: "MDRPOR" - description: "MedDRA Portuguese" - url: "http://terminology.hl7.org/CodeSystem/MDRPOR" - oid: "urn:oid:2.16.840.1.113883.6.163.5" -- id: "v3-HL7CommitteeIDInRIM" - description: "HL7CommitteeIDInRIM" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7CommitteeIDInRIM" - oid: "urn:oid:2.16.840.1.113883.5.54" -- id: "research-subject-milestone" - description: "ResearchSubjectMilestone" - url: "http://terminology.hl7.org/CodeSystem/research-subject-milestone" - oid: "urn:oid:2.16.840.1.113883.4.642.1.0" -- id: "v2-0061" - description: "checkDigitScheme" - url: "http://terminology.hl7.org/CodeSystem/v2-0061" - oid: "urn:oid:2.16.840.1.113883.18.22" -- id: "v2-0431" - description: "recreationalDrugType" - url: "http://terminology.hl7.org/CodeSystem/v2-0431" - oid: "urn:oid:2.16.840.1.113883.18.272" -- id: "v2-0124" - description: "transportationMode" - url: "http://terminology.hl7.org/CodeSystem/v2-0124" - oid: "urn:oid:2.16.840.1.113883.18.52" -- id: "encounter-special-arrangements" - description: "Special arrangements" - url: "http://terminology.hl7.org/CodeSystem/encounter-special-arrangements" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1090" -- id: "v3-EquipmentAlertLevel" - description: "EquipmentAlertLevel" - url: "http://terminology.hl7.org/CodeSystem/v3-EquipmentAlertLevel" - oid: "urn:oid:2.16.840.1.113883.5.49" -- id: "v2-0466" - description: "ambulatoryPaymentClassification" - url: "http://terminology.hl7.org/CodeSystem/v2-0466" - oid: "urn:oid:2.16.840.1.113883.18.296" -- id: "v2-0935" - description: "processInterruptionReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0935" - oid: "urn:oid:2.16.840.1.113883.18.435" -- id: "v2-0523" - description: "computationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0523" - oid: "urn:oid:2.16.840.1.113883.18.341" -- id: "medcin" - description: "MEDCIN" - url: "http://terminology.hl7.org/CodeSystem/medcin" - oid: "urn:oid:2.16.840.1.113883.6.26" -- id: "v2-0173" - description: "coordinationOfBenefits" - url: "http://terminology.hl7.org/CodeSystem/v2-0173" - oid: "urn:oid:2.16.840.1.113883.18.89" -- id: "v2-0489" - description: "risks" - url: "http://terminology.hl7.org/CodeSystem/v2-0489" - oid: "urn:oid:2.16.840.1.113883.18.313" -- id: "v3-HtmlLinkType" - description: "HtmlLinkType" - url: "http://terminology.hl7.org/CodeSystem/v3-HtmlLinkType" - oid: "urn:oid:2.16.840.1.113883.5.58" -- id: "service-category" - description: "Service category" - url: "http://terminology.hl7.org/CodeSystem/service-category" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1144" -- id: "v3-HL7DefinedRoseProperty" - description: "HL7DefinedRoseProperty" - url: "http://terminology.hl7.org/CodeSystem/v3-HL7DefinedRoseProperty" - oid: "urn:oid:2.16.840.1.113883.5.56" -- id: "v2-0923" - description: "processInterruption" - url: "http://terminology.hl7.org/CodeSystem/v2-0923" - oid: "urn:oid:2.16.840.1.113883.18.429" -- id: "v3-hl7V3Conformance" - description: "HL7V3Conformance" - url: "http://terminology.hl7.org/CodeSystem/v3-hl7V3Conformance" - oid: "urn:oid:2.16.840.1.113883.5.1125" -- id: "subscription-error" - description: "Subscription Error Codes" - url: "http://terminology.hl7.org/CodeSystem/subscription-error" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1438" -- id: "v2-0470" - description: "reimbursementType" - url: "http://terminology.hl7.org/CodeSystem/v2-0470" - oid: "urn:oid:2.16.840.1.113883.18.299" -- id: "v2-0165" - description: "administrationMethod" - url: "http://terminology.hl7.org/CodeSystem/v2-0165" - oid: "urn:oid:2.16.840.1.113883.18.83" -- id: "iso3166-1edition2numeric" - description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Numeric" - url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2numeric" - oid: "urn:oid:1.0.3166.1.2.1" -- id: "v2-0535" - description: "signatureType" - url: "http://terminology.hl7.org/CodeSystem/v2-0535" - oid: "urn:oid:2.16.840.1.113883.18.349" -- id: "v2-0759" - description: "drgstatusAdmission" - url: "http://terminology.hl7.org/CodeSystem/v2-0759" - oid: "urn:oid:2.16.840.1.113883.18.399" -- id: "v2-0078" - description: "HL7-defined code system of concepts which specify a categorical assessment of an observation value." - url: "http://terminology.hl7.org/CodeSystem/v2-0078" - oid: null -- id: "v2-0309" - description: "coverageType" - url: "http://terminology.hl7.org/CodeSystem/v2-0309" - oid: "urn:oid:2.16.840.1.113883.18.188" -- id: "v2-0427" - description: "riskManagementIncident" - url: "http://terminology.hl7.org/CodeSystem/v2-0427" - oid: "urn:oid:2.16.840.1.113883.18.268" -- id: "v2-0562" - description: "processingConsideration" - url: "http://terminology.hl7.org/CodeSystem/v2-0562" - oid: "urn:oid:2.16.840.1.113883.18.365" -- id: "v2-0098" - description: "typeOfAgreement" - url: "http://terminology.hl7.org/CodeSystem/v2-0098" - oid: "urn:oid:2.16.840.1.113883.18.37" -- id: "v3-MessageCondition" - description: "MessageCondition" - url: "http://terminology.hl7.org/CodeSystem/v3-MessageCondition" - oid: "urn:oid:2.16.840.1.113883.5.80" -- id: "payeetype" - description: null - url: "http://terminology.hl7.org/CodeSystem/payeetype" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1050" -- id: "v3-QueryResponse" - description: "QueryResponse" - url: "http://terminology.hl7.org/CodeSystem/v3-QueryResponse" - oid: "urn:oid:2.16.840.1.113883.5.1067" -- id: "v2-0283" - description: "referralStatus" - url: "http://terminology.hl7.org/CodeSystem/v2-0283" - oid: "urn:oid:2.16.840.1.113883.18.176" -- id: "v3-RelationalOperator" - description: "RelationalOperator" - url: "http://terminology.hl7.org/CodeSystem/v3-RelationalOperator" - oid: "urn:oid:2.16.840.1.113883.5.105" -- id: "CDCREC" - description: "RaceAndEthnicityCDC" - url: "http://hl7.org/fhir/us/core/CodeSystem-cdcrec.html" - oid: "urn:oid:2.16.840.1.113883.6.238" -- id: "PHRaceAndEthnicityCDC" - description: "PH_RaceAndEthnicity_CDC" - url: "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC" - oid: "urn:oid:2.16.840.1.113883.6.238" -- id: "v2-0329" - description: "quantityMethod" - url: "http://terminology.hl7.org/CodeSystem/v2-0329" - oid: "urn:oid:2.16.840.1.113883.18.200" -- id: "usEPAsrs" - description: "US EPA Substance Registry System" - url: "http://terminology.hl7.org/CodeSystem/usEPAsrs" - oid: "urn:oid:2.16.840.1.113883.6.275" -- id: "v2-0145" - description: "roomType" - url: "http://terminology.hl7.org/CodeSystem/v2-0145" - oid: "urn:oid:2.16.840.1.113883.18.66" -- id: "v3-RoleLinkStatus" - description: "RoleLinkStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-RoleLinkStatus" - oid: "urn:oid:2.16.840.1.113883.5.1137" -- id: "v2-0450" - description: "eventType" - url: "http://terminology.hl7.org/CodeSystem/v2-0450" - oid: "urn:oid:2.16.840.1.113883.18.286" -- id: "v3-MdfHmdMetSourceType" - description: "MdfHmdMetSourceType" - url: "http://terminology.hl7.org/CodeSystem/v3-MdfHmdMetSourceType" - oid: "urn:oid:2.16.840.1.113883.5.75" - -- id: "v2-0391" - description: "segmentGroup" - url: "http://terminology.hl7.org/CodeSystem/v2-0391" - oid: "urn:oid:2.16.840.1.113883.18.242" -- id: "v3-ObservationMethod" - description: "ObservationMethod" - url: "http://terminology.hl7.org/CodeSystem/v3-ObservationMethod" - oid: "urn:oid:2.16.840.1.113883.5.84" -- id: "v2-0368" - description: "remoteControlCommand" - url: "http://terminology.hl7.org/CodeSystem/v2-0368" - oid: "urn:oid:2.16.840.1.113883.18.226" -- id: "v3-PatientImportance" - description: "PatientImportance" - url: "http://terminology.hl7.org/CodeSystem/v3-PatientImportance" - oid: "urn:oid:2.16.840.1.113883.5.1075" -- id: "v2-0387" - description: "commandResponse" - url: "http://terminology.hl7.org/CodeSystem/v2-0387" - oid: "urn:oid:2.16.840.1.113883.18.238" -- id: "icpc2-icd10-ENG" - description: "ICPC2-ICD10 Thesaurus (English)" - url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-ENG" - oid: "urn:oid:2.16.840.1.113883.6.142.4" -- id: "insurance-plan-type" - description: "Insurance plan type" - url: "http://terminology.hl7.org/CodeSystem/insurance-plan-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1261" -- id: "ICD-9CM-diagnosiscodes" - description: "National Center for Health Statistics" - url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-diagnosiscodes" - oid: "urn:oid:2.16.840.1.113883.6.103" -- id: "v3-EntityClass" - description: "EntityClass" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityClass" - oid: "urn:oid:2.16.840.1.113883.5.41" -- id: "v2-0104" - description: "versionId" - url: "http://terminology.hl7.org/CodeSystem/v2-0104" - oid: "urn:oid:2.16.840.1.113883.18.41" -- id: "v2-0554" - description: "invoiceReason" - url: "http://terminology.hl7.org/CodeSystem/v2-0554" - oid: "urn:oid:2.16.840.1.113883.18.358" -- id: "v3-EntityNamePartQualifierR2" - description: "EntityNamePartQualifierR2" - url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifierR2" - oid: "urn:oid:2.16.840.1.113883.5.1122" -- id: "v2-0942" - description: "equipmentStateIndicator" - url: "http://terminology.hl7.org/CodeSystem/v2-0942" - oid: "urn:oid:2.16.840.1.113883.18.444" -- id: "mddid" - description: "MDDID" - url: "http://terminology.hl7.org/CodeSystem/mddid" - oid: "urn:oid:2.16.840.1.113883.6.253" -- id: "provenance-participant-type" - description: "Provenance participant type" - url: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1131" -- id: "v2-0503" - description: "sequenceResultsFlag" - url: "http://terminology.hl7.org/CodeSystem/v2-0503" - oid: "urn:oid:2.16.840.1.113883.18.327" -- id: "v3-DataType" - description: "DataType" - url: "http://terminology.hl7.org/CodeSystem/v3-DataType" - oid: "urn:oid:2.16.840.1.113883.5.1007" -- id: "benefit-term" - description: "Benefit Term Codes" - url: "http://terminology.hl7.org/CodeSystem/benefit-term" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1179" -- id: "whoFRE" - description: "WHO Adverse Reaction Terms French" - url: "http://terminology.hl7.org/CodeSystem/whoFRE" - oid: "urn:oid:2.16.840.1.113883.6.230.1" -- id: "certainty-rating" - description: "StatisticCertaintyRating" - url: "http://terminology.hl7.org/CodeSystem/certainty-rating" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1415" -- id: "icpc2E-ENG" - description: "International Classification of Primary Care, second edition, English" - url: "http://terminology.hl7.org/CodeSystem/icpc2E-ENG" - oid: "urn:oid:2.16.840.1.113883.6.139.1" -- id: "v2-0201" - description: "telecommunicationUse" - url: "http://terminology.hl7.org/CodeSystem/v2-0201" - oid: "urn:oid:2.16.840.1.113883.18.106" -- id: "v2-0651" - description: "laborCalculationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0651" - oid: "urn:oid:2.16.840.1.113883.18.380" -- id: "v3-WorkClassificationODH" - description: "Work Classification (Occupational Data for Health)" - url: "http://terminology.hl7.org/CodeSystem/v3-WorkClassificationODH" - oid: "urn:oid:2.16.840.1.113883.5.1139" -- id: "v2-0344" - description: "patientsRelationshipToInsured" - url: "http://terminology.hl7.org/CodeSystem/v2-0344" - oid: "urn:oid:2.16.840.1.113883.18.210" -- id: "common-tags" - description: "Common Tags" - url: "http://terminology.hl7.org/CodeSystem/common-tags" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1067" -- id: "v3-EncounterAcuity" - description: "Encounter Acuity" - url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAcuity" - oid: "urn:oid:2.16.840.1.113883.5.1084" -- id: "list-empty-reason" - description: "List Empty Reasons" - url: "http://terminology.hl7.org/CodeSystem/list-empty-reason" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1106" -- id: "iso4217" - description: "ISO 4217 Currency Codes" - url: "http://terminology.hl7.org/CodeSystem/iso4217" - oid: "urn:oid:1.0.4217" -- id: "v2-0128" - description: "allergySeverity" - url: "http://terminology.hl7.org/CodeSystem/v2-0128" - oid: "urn:oid:2.16.840.1.113883.18.55" -- id: "v2-0256" - description: "timeDelayPostChallenge" - url: "http://terminology.hl7.org/CodeSystem/v2-0256" - oid: "urn:oid:2.16.840.1.113883.18.151" -- id: "v3-MaritalStatus" - description: "MaritalStatus" - url: "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus" - oid: "urn:oid:2.16.840.1.113883.5.2" -- id: "v2-0939" - description: "communicationLocation" - url: "http://terminology.hl7.org/CodeSystem/v2-0939" - oid: "urn:oid:2.16.840.1.113883.18.442" -- id: "ICD-10DualCoding" - description: "ICD-10 Dual Coding" - url: "http://terminology.hl7.org/CodeSystem/ICD-10DualCoding" - oid: "urn:oid:2.16.840.1.113883.6.260" -- id: "v2-0190" - description: "addressType" - url: "http://terminology.hl7.org/CodeSystem/v2-0190" - oid: "urn:oid:2.16.840.1.113883.18.101" -- id: "v2-0485" - description: "extendedPriorityCodes" - url: "http://terminology.hl7.org/CodeSystem/v2-0485" - oid: "urn:oid:2.16.840.1.113883.18.310" -- id: "pnds" - description: "Perioperative Nursing Data Set" - url: "http://terminology.hl7.org/CodeSystem/pnds" - oid: "urn:oid:2.16.840.1.113883.6.22" -- id: "consentscope" - description: "Consent Scope Codes" - url: "http://terminology.hl7.org/CodeSystem/consentscope" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1228" -- id: "v3-EncounterAdmissionSource" - description: "EncounterAdmissionSource" - url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAdmissionSource" - oid: "urn:oid:2.16.840.1.113883.5.37" -- id: "v2-0240" - description: "eventConsequence" - url: "http://terminology.hl7.org/CodeSystem/v2-0240" - oid: "urn:oid:2.16.840.1.113883.18.139" -- id: "v3-ConceptStatus" - description: "HL7 Coded Concept Status" - url: "http://terminology.hl7.org/CodeSystem/v3-ConceptStatus" - oid: "urn:oid:2.16.840.1.113883.5.1086" -- id: "v2-0305" - description: "personLocationType" - url: "http://terminology.hl7.org/CodeSystem/v2-0305" - oid: "urn:oid:2.16.840.1.113883.18.187" -- id: "v2-0755" - description: "drgstatusWeightAtBirth" - url: "http://terminology.hl7.org/CodeSystem/v2-0755" - oid: "urn:oid:2.16.840.1.113883.18.397" -- id: "processpriority" - description: "Process Priority Codes" - url: "http://terminology.hl7.org/CodeSystem/processpriority" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1155" -- id: "v3-ActUncertainty" - description: "ActUncertainty" - url: "http://terminology.hl7.org/CodeSystem/v3-ActUncertainty" - oid: "urn:oid:2.16.840.1.113883.5.1053" -- id: "v3-DocumentCompletion" - description: "DocumentCompletion" - url: "http://terminology.hl7.org/CodeSystem/v3-DocumentCompletion" - oid: "urn:oid:2.16.840.1.113883.5.33" -- id: "v2-0169" - description: "reportingPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0169" - oid: "urn:oid:2.16.840.1.113883.18.87" -- id: "v2-0493" - description: "specimenCondition" - url: "http://terminology.hl7.org/CodeSystem/v2-0493" - oid: "urn:oid:2.16.840.1.113883.18.317" -- id: "v3-MDFSubjectAreaPrefix" - description: "MDFSubjectAreaPrefix" - url: "http://terminology.hl7.org/CodeSystem/v3-MDFSubjectAreaPrefix" - oid: "urn:oid:2.16.840.1.113883.5.78" -- id: "v2-0217" - description: "visitPriority" - url: "http://terminology.hl7.org/CodeSystem/v2-0217" - oid: "urn:oid:2.16.840.1.113883.18.121" -- id: "oms" - description: "Omaha System" - url: "http://terminology.hl7.org/CodeSystem/oms" - oid: "urn:oid:2.16.840.1.113883.6.98" -- id: "v2-0702" - description: "cycleType" - url: "http://terminology.hl7.org/CodeSystem/v2-0702" - oid: "urn:oid:2.16.840.1.113883.18.387" -- id: "DEEDS415" - description: "DEEDS415" - url: "http://terminology.hl7.org/CodeSystem/DEEDS415" - oid: "urn:oid:2.16.840.1.113883.6.102.4.15" -- id: "supply-kind" - description: "Supply Type" - url: "http://terminology.hl7.org/CodeSystem/supply-kind" - oid: "urn:oid:2.16.840.1.113883.4.642.1.1192" -- id: "SS" - description: "United States Social Security Number" - url: "http://hl7.org/fhir/sid/us-ssn" - oid: "urn:oid:2.16.840.1.113883.4.1" -- id: "MCD" - description: "United States Medicare Number" - url: "http://hl7.org/fhir/sid/us-medicare" - oid: "urn:oid:2.16.840.1.113883.4.572" -- id: "MCR" - description: "United States Medicare Number" - url: "http://hl7.org/fhir/sid/us-medicare" - oid: "urn:oid:2.16.840.1.113883.4.572" - -- id: "MBI" - description: "Medicare Beneficiary Identifier" - url: "http://hl7.org/fhir/sid/us-mbi" - oid: "urn:oid:2.16.840.1.113883.4.927" -- id: "NPI" - description: "United States National Provider Identifier" - url: "http://hl7.org/fhir/sid/us-npi" - oid: "urn:oid:2.16.840.1.113883.4.6" -- id: "AllLanguages" - description: "languages" - url: "http://hl7.org/fhir/ValueSet/all-languages" - oid: "urn:oid:2.16.840.1.113883.4.642.3.21" - - # next two are different id notations for the same table. -- id: "HL70064" - description: "Financial Class (HL7)" - url: "https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.12.64#" - oid: "urn:oid:2.16.840.1.113883.12.64" -- id: "V2-0064" - description: "Financial Class (HL7)" - url: "https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.12.64#" - oid: "urn:oid:2.16.840.1.113883.12.64" - - # source-record-type-system -- id: "source-record-type-system" - url: "http://terminology.hl7.org/CodeSystem/v2-0076" - # source-event-trigger-system -- id: "source-event-trigger-system" - url: "http://terminology.hl7.org/CodeSystem/v2-0003" -- id: "ConditionClinicalStatus" - url: "http://hl7.org/fhir/ValueSet/condition-clinical" - oid: "urn:oid:2.16.840.1.113883.4.642.3.164" -- id: "ConditionVerificationStatus" - url: "http://hl7.org/fhir/ValueSet/condition-ver-status" - oid: "urn:oid:2.16.840.1.113883.4.642.3.166" - - # encounter extensions -- id: "mode-of-arrival-system" - url: "http://terminology.hl7.org/CodeSystem/v2-0430" -- id: "encounter-modeOfArrival-extension" - url: "http://hl7.org/fhir/StructureDefinition/encounter-modeOfArrival" -- id: "PatientContactRelationship" - description: "The nature of the relationship between the patient and the contact person." - url: "http://hl7.org/fhir/ValueSet/patient-contactrelationship" - oid: "urn:oid:2.16.840.1.113883.4.642.3.1130" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml deleted file mode 100644 index df11edf90d1..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml +++ /dev/null @@ -1,331 +0,0 @@ -## HL7 Extensions - -- id: "mothersMaidenName" - url: "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName" -- id: "birthPlace" - url: "http://hl7.org/fhir/StructureDefinition/patient-birthPlace" -- id: "birthTime" - url: "http://hl7.org/fhir/StructureDefinition/patient-birthTime" -- id: "religion" - url: "http://hl7.org/fhir/StructureDefinition/patient-religion" -- id: "event-performerFunction" - url: "http://hl7.org/fhir/StructureDefinition/event-performerFunction" -- id: "humanname-own-prefix" - url: "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix" -- id: "humanname-own-name" - url: "http://hl7.org/fhir/StructureDefinition/humanname-own-name" -- id: "humanname-partner-prefix" - url: "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix" -- id: "humanname-partner-name" - url: "http://hl7.org/fhir/StructureDefinition/humanname-partner-name" -- id: "humanname-assembly-order" - url: "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order" -- id: "patient-congregation" - url: "http://hl7.org/fhir/StructureDefinition/patient-congregation" -- id: "patient-disability" - url: "http://hl7.org/fhir/StructureDefinition/patient-disability" -- id: "data-absent-reason" - url: "http://hl7.org/fhir/StructureDefinition/data-absent-reason" -- id: "contactpoint-country" - url: "http://hl7.org/fhir/StructureDefinition/contactpoint-country" -- id: "contactpoint-area" - url: "http://hl7.org/fhir/StructureDefinition/contactpoint-area" -- id: "contactpoint-local" - url: "http://hl7.org/fhir/StructureDefinition/contactpoint-local" -- id: "contactpoint-extension" - url: "http://hl7.org/fhir/StructureDefinition/contactpoint-extension" -- id: "patient-citizenship" - url: "http://hl7.org/fhir/StructureDefinition/patient-citizenship" -- id: "patient-nationality" - url: "http://hl7.org/fhir/StructureDefinition/patient-nationality" -- id: "iso21090-AD-use" - url: "http://hl7.org/fhir/StructureDefinition/iso21090-AD-use" -- id: "iso21090-ADXP-censusTract" - url: "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract" -- id: "observation-value-attachment" - url: "https://hl7.org/fhir/R5/StructureDefinition/observation-value-attachment" -- id: "identifier-check-digit" - url: "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit" -- id: "naming-system-check-digit" - url: "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit" -- id: "patient-animal" - url: "http://hl7.org/fhir/StructureDefinition/patient-animal" -- id: "relationship" - url: "https://hl7.org/fhir/StructureDefinition/relationship" - -## Datatypes - -# XON -> Organization -- id: "name-representation-code" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code" -- id: "identifier-location" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location" -- id: "organization-name-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type" -- id: "xon-organization" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization" - -# CX -> Identifier -- id: "assigning-facility" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility" -- id: "cx-identifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier" - -# CE/CWE -> Coding -- id: "coding-system-oid" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid" -- id: "cwe-coding" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding" -- id: "cwe-coding-system" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system" -- id: "ce-coding" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ce-coding" -- id: "ce-coding-system" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ce-coding-system" -- id: "cne-coding" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cne-coding" -- id: "cne-coding-system" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cne-coding-system" -- id: "code" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/code" - -# XTN -> ContactPoint -- id: "xtn-contact-point" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point" - -# CWE -> Annotation -- id: "cwe-annotation" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-annotation" - -# CNN -> Practitioner -- id: "cnn-practitioner" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner" - -# XAD -> Address -- id: "xad-address" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address" -- id: "sad-address-line" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line" - -# XCN -> Practitioner -- id: "xcn-practitioner" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner" - -# XPN -> HumanName -- id: "xpn-human-name" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name" - -# PL -> Location -- id: "pl6-person-location-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pl6-person-location-type" - -# DLD -> Location -- id: "dld2-effective-date" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/dld2-effective-date" - -# CQ -> Quantity -- id: "cq-units" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cq-units" - -# EI -> ExtensionEI -- id: "entity-identifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier" -- id: "placer-assigned-identifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier" -- id: "filler-assigned-identifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier" - -# EI -> Identifier -- id: "ei-assigner-organization-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ei-assigner-organization-type" - -# ID -> CodeableConcept -- id: "codeable-concept-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id" - -# CWE -> Organization -- id: "cwe-organization" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization" - -# ED -> Attachment -- id: "ed-attachment" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ed-attachment" - -## Segments - -# MSH -- id: "encoding-characters" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters" -- id: "character-set" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set" -- id: "msh-message-header" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header" - -# SFT -- id: "software-binary-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id" -- id: "source-software-description" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/source-software-description" -- id: "software-install-date" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date" -- id: "software-vendor-org" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org" - -# PID -> Patient -- id: "last-updated-facility-namespace-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/last-updated-facility-namespace-id" -- id: "ethnic-group" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group" -- id: "veteran-military-status" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/veteran-military-status" -- id: "identity-unknown" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/identity-unknown" -- id: "pid-patient" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient" - -# PD1 -> Patient -- id: "pd1-patient-additional-demographic" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pd1-patient-additional-demographic" -- id: "studentStatus" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/studentStatus" -- id: "livingWill" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/livingWill" - -# NTE -> Patient -- id: "patient-notes" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes" - -# OBX -> Observation -- id: "sub-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sub-id" -- id: "observation-sub-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/observation-sub-type" -- id: "obx-5-value-sn" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn" -- id: "nature-of-abnormal-test" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nature-of-abnormal-test" -- id: "analysis-date-time" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time" -- id: "obx-observation" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation" - -# SPM -> Specimen -- id: "specimen-source-site-modifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/specimen-source-site-modifier" -- id: "spm-specimen" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/spm-specimen" -- id: "reject-reason" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/reject-reason" -- id: "bodySiteModifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/bodySiteModifier" - -# NK1 -> RelatedPerson -- id: "nk1-related-person" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nk1-related-person" -- id: "nk1-15-administrative-sex" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nk1-15-administrative-sex" - -# ORC/OBR -> ServiceRequest/DiagnosticReport -- id: "orc-common-order" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order" -- id: "obr-observation-request" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request" -- id: "status-modifier" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/status-modifier" -- id: "callback-number" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number" -- id: "business-event" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event" - -# PV1/PV2 -> Encounter -- id: "admission-level-of-care" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/admission-level-of-care" -- id: "publicity-code" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/publicity-code" -- id: "estimated-length" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/estimated-length" -- id: "planned-discharge-date" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/planned-discharge-date" -- id: "planned-start-date" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/planned-start-date" -- id: "visit-user-code" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/visit-user-code" -- id: "temporary-location" - url: "https://hl7.org/fhir/StructureDefinition/temporary-location" -- id: "episode-of-care-name" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/episode-of-care-name" -- id: "pv1-patient-visit" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv1-patient-visit" -- id: "pv2-patient-visit-additional-information" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv2-patient-visit-additional-information" -- id: "pv1-2-patient-class" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv1-2-patient-class" -- id: "pv2-visit-description" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv2-visit-description" - -# NTE -> Annotation -- id: "note-source" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source" -# Comment -- id: "note-comment" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment" -# Comment type -- id: "note-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type" - -## Generic - -# internal indicator of sender, usable for filtering -- id: "sender-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sender-id" - -# The following extensions are also used to store in the bundle where particular pieces of -# data should be placed in an HL7 message -- id: "hl7v2Segment" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment" -- id: "hl7v2Field" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field" -- id: "hl7v2Component" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component" - -# Date time as hl7v2 string -# This extension exists because HL7 dates have very little restrictions (i.e. YYYY-MM, YYYY-MM-DD HH, YYYY-MM-DD HH:MM) -# are all valid, but the FHIR specs has much stricter rules. In order to reliably generate the same HL7 message, this extension -# is used to capture what was in the original HL7 message and then exclusively used when mapping FHIR->HL7 -- id: "hl7v2-date-time" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time" - -# These extensions are also used to store the unique identifiers -- id: "assigning-authority" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority" -- id: "namespace-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id" -- id: "universal-id" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id" -- id: "universal-id-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type" -# Unknown Universal ID Type -# This extension is used when mapping specifies only populating the universal-id-type extension for certain values -- id: "universal-id-unknown-type" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-unknown-type" -- id: "location-physical-type-poc" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/location-physical-type-poc" - -## Deprecated - -# TODO: #13288 -- id: "hl7-use" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7-use" -- id: "code-index-name" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/code-index-name" - -## Used by simple report - -# NOTE: this URL is not live, but this is is what simple report sends us -# TODO: #{Ticket to work with SR to clean their FHIR bundle} -- id: "race" - url: "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd" - -# SR Extension used to convey the order effective date -- id: "order-effective-date" - url: "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml deleted file mode 100644 index b7659fa424c..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml +++ /dev/null @@ -1,34 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -value: - type: BIG_DECIMAL - expressionType: HL7Spec - valueOf: CQ.1 - -unit: - expressionType: nested - vars: - cwe_originalText: STRING, CQ.2.9 - expressions: - - condition: $cwe_originalText NULL - type: STRING - expressionType: HL7Spec - valueOf: CQ.2.2 - - condition: $cwe_originalText NOT_NULL - type: STRING - valueOf: $cwe_originalText - -extension: - condition: $cq2 NOT_NULL - generateList: true - expressionType: nested - vars: - cq2: STRING_ALL, CQ.2 - expressionsMap: - url: - type: SYSTEM_URL - value: 'cq-units' - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: CQ.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml deleted file mode 100644 index f8a6292e8b8..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml +++ /dev/null @@ -1,19 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -text: - type: STRING_ALL - valueOf: CWE - generateList: true - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: 'cwe-annotation' - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml deleted file mode 100644 index 983acda6dde..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml +++ /dev/null @@ -1,192 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -coding: - generateList: true - expressionType: nested - vars: - code: String, CWE.1 - display: String, CWE.2 - system: SYSTEM_URL, CWE.3 - version: String, CWE.7 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.1 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.2 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.3 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.7 - extension_cwe-coding: - condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding - valueString: - value: coding - extension_cwe-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.3 - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding-system - valueString: - value: $coding-system - -coding_alt: - generateList: true - expressionType: nested - vars: - altCode: String, CWE.4 - altDisplay: String, CWE.5 - altSystem: SYSTEM_URL, CWE.6 - altVersion: String, CWE.8 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.4 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.5 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.6 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.8 - extension_cwe-coding: - condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding - valueString: - value: alt-coding - extension_cwe-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.6 - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding-system - valueString: - value: $coding-system - -coding_secondary-alt: - generateList: true - expressionType: nested - vars: - secondaryAltCode: String, CWE.10 - secondaryAltDisplay: String, CWE.11 - secondaryAltSystem: SYSTEM_URL, CWE.12 - secondaryAltVersion: String, CWE.13 - expressionsMap: - code: - type: String - expressionType: HL7Spec - valueOf: CWE.10 - display: - type: String - expressionType: HL7Spec - valueOf: CWE.11 - system: - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.12 - version: - type: String - expressionType: HL7Spec - valueOf: CWE.13 - extension_cwe-coding: - condition: $secondaryAltCode NOT_NULL || $secondaryAltDisplay NOT_NULL || $secondaryAltSystem NOT_NULL || $secondaryAltVersion NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding - valueString: - value: secondary-alt-coding - extension_cwe-coding-system: - condition: $coding-system NOT_NULL - generateList: true - expressionType: nested - vars: - coding-system: String, CWE.12 - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-coding-system - valueString: - value: $coding-system - -text: - type: STRING - expressionType: HL7Spec - valueOf: CWE.9 - -extension: - generateList: true - expressionType: nested - expressions: - # codingSystemOID - - generateList: true - expressionType: nested - condition: $codingSystemOID NOT_NULL - vars: - codingSystemOID: String, CWE.14 - expressionsMap: - url: - type: SYSTEM_URL - value: coding-system-oid - valueOid: - type: STRING - valueOf: $oidString - vars: - oidString: $oidUrlPrefix + $codingSystemOID - constants: - oidUrlPrefix: "urn:oid:" - - generateList: true - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - generateList: true - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml deleted file mode 100644 index ab9a62c75ab..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml +++ /dev/null @@ -1,33 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -code: - type: STRING - expressionType: HL7Spec - valueOf: CWE.1 - -display: - type: STRING - expressionType: HL7Spec - valueOf: CWE.2 - -system: - type: STRING - expressionType: HL7Spec - valueOf: CWE.3 - -version: - type: STRING - expressionType: HL7Spec - valueOf: CWE.7 - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: 'cwe-coding' - valueCodeableConcept: - valueOf: ../../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml deleted file mode 100644 index 7c4516f11f7..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml +++ /dev/null @@ -1,60 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: CWE.1 - system: - type: STRING - expressionType: HL7Spec - valueOf: CWE.3 - -name: - type: STRING - expressionType: HL7Spec - valueOf: CWE.2 | CWE.9 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: cwe-organization - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: $BASE_VALUE - - generateList: true - expressionType: nested - condition: $cweOrganizationHL7Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $cweOrganizationHL7Field - - generateList: true - expressionType: nested - condition: $cweOrganizationHL7Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $cweOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml deleted file mode 100644 index 46bfb4911cd..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWE.1 - vars: - identifier: CWE.1 - nameOfCodingSystem: CWE.3 - -unit: - expressionType: nested - vars: - identifier: CWE.1 - text: CWE.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWE.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWE.2 - expressionType: HL7Spec - -system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: SYSTEM_URL - expressionType: HL7Spec - valueOf: CWE.1 - vars: - identifier: CWE.1 - nameOfCodingSystem: CWE.3 - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: 'cwe-quantity' - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml deleted file mode 100644 index ca9a64c3bb7..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml +++ /dev/null @@ -1,292 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - pl10: STRING_ALL, PL.10 - pl11: STRING_ALL, PL.11 - expressions: - - expressionType: nested - generateList: true - condition: $pl3 NOT_NULL - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.3 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.3 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.2 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.2 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - - expressionType: nested - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - expressionType: resource - condition: $pl11 NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization - specs: PL.10 - - expressionType: resource - vars: - eiAssigningOrganization: PL.11 - condition: $pl11 NOT_NULL && $pl10 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner - specs: PL.10 - -physicalType: - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bd" - system: - valueOf: $system - condition: $pl3 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "ro" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl3: STRING_ALL, PL.3 - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl3 NOT_NuLL || $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl2 NOT_NULL - valueOf: datatypes/PL_ELR/LocationBranch1 #PL2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NOT_NULL #PL1 - valueOf: datatypes/PL_ELR/LocationBranch2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - valueOf: datatypes/PL_ELR/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - valueOf: datatypes/PL_ELR/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - valueOf: datatypes/PL_ELR/LocationBranch5 - specs: $BASE_VALUE - -status: - expressionType: HL7Spec - valueOf: PL.5 - type: STRING - -mode: - value: "instance" - -description: - type: STRING - expressionType: HL7Spec - valueOf: PL.9 - -extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: pl6-person-location-type - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PL.6 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml deleted file mode 100644 index 5f3c963748c..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml +++ /dev/null @@ -1,182 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl2 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.2 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.2 - - expressionType: nested - condition: $pl2 NULL && $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl2: STRING, PL.2 - pl1: STRING, PL.1 - pl8: STRING, PL.8 - pl7: STRING, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "ro" - system: - valueOf: $system - condition: $pl2 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - system: - type: STRING - valueOf: $system - condition: $pl2 NULL && $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl2: STRING_ALL, PL.2 - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl1 NOT_NULL #PL1 - valueOf: datatypes/PL_ELR/LocationBranch2 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NOT_NULL #PL8 - valueOf: datatypes/PL_ELR/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL_ELR/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL_ELR/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml deleted file mode 100644 index 5910216e119..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml +++ /dev/null @@ -1,151 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl1 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.1 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.1 - - expressionType: nested - condition: $pl1 NULL && $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - _code: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: location-physical-type-poc - valueString: - value: "poc" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/location-physical-type" - condition: $pl1 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl1: STRING_ALL, PL.1 - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl8 NOT_NULL #PL8 - valueOf: datatypes/PL_ELR/LocationBranch3 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl8 NULL && $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL_ELR/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL_ELR/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml deleted file mode 100644 index df25fb43437..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml +++ /dev/null @@ -1,110 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl8 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.8 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.8 - - expressionType: nested - condition: $pl8 NULL && $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "lvl" - system: - valueOf: $system - condition: $pl8 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl8 NULL && $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl8: STRING_ALL, PL.8 - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl8 NOT_NULL || $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl7 NOT_NULL #PL7 - valueOf: datatypes/PL_ELR/LocationBranch4 - specs: $BASE_VALUE - - expressionType: reference - condition: $pl7 NULL && $pl4 NOT_NULL #PL4 - valueOf: datatypes/PL_ELR/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml deleted file mode 100644 index 562ca527bc5..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml +++ /dev/null @@ -1,82 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl7 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.7 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.7 - - expressionType: nested - condition: $pl7 NULL && $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - - -physicalType: - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "bu" - system: - valueOf: $system - condition: $pl7 NOT_NULL - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl7 NULL && $pl4 NOT_NULL - - -partOf: - expressionType: nested - vars: - pl7: STRING_ALL, PL.7 - pl4: STRING_ALL, PL.4 - condition: $pl7 NOT_NULL - expressions: - - expressionType: reference - condition: $pl4 NOT_NULL - valueOf: datatypes/PL_ELR/LocationBranch5 - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml deleted file mode 100644 index 28a80563c95..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Location - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - generateList: true - expressionType: nested - vars: - pl4: STRING_ALL, PL.4 - expressions: - - expressionType: nested - condition: $pl4 NOT_NULL - generateList: true - expressions: - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId - specs: PL.4 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId - specs: PL.4 - - -physicalType: - expressionType: nested - vars: - pl4: STRING_ALL, PL.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/location-physical-type" - expressions: - - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: "si" - system: - valueOf: $system - condition: $pl4 NOT_NULL - diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml deleted file mode 100644 index 4161e1ac46e..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: STRING - valueOf: $prlExtensionName - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - prl1: STRING_ALL, PRL.1 - condition: $prl1 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: prl-1-parent-observation-identifier - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: PRL.1 - - vars: - prl2: STRING, PRL.2 - condition: $prl2 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: prl-2-parent-observation-sub-identifier - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PRL.2 - - vars: - prl3: STRING, PRL.3 - condition: $prl3 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: prl-3-parent-observation-descriptor - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PRL.3 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml deleted file mode 100644 index b8ff6390f66..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml +++ /dev/null @@ -1,102 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: HumanName - -family: - type: STRING - valueOf: XPN.1.1 - expressionType: HL7Spec -_family: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family - specs: XPN.1 - -given: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XPN.2 - type: STRING - - expressionType: HL7Spec - valueOf: XPN.3 - type: STRING -suffix: - generateList: true - expressionType: nested - expressions: - - expressionType: HL7Spec - valueOf: XPN.4 - type: STRING - - expressionType: HL7Spec - valueOf: XPN.6 - type: STRING - - expressionType: HL7Spec - valueOf: XPN.14 - type: STRING -prefix: - type: STRING - valueOf: XPN.5 - expressionType: HL7Spec -use: - type: NAME_USE - valueOf: XPN.7 - expressionType: HL7Spec - -extension_AssemblyOrder: - vars: - xpn11: String, XPN.11 - condition: $xpn11 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: humanname-assembly-order - valueCode: - type: STRING - valueOf: XPN.11 - expressionType: HL7Spec - -# XPN.10 is deprecated so the schema favors using XPN.12/13 if either are populated -period_2: - vars: - xpn12: String, XPN.12 - xpn13: String, XPN.13 - condition: $xpn12 NOT_NULL || $xpn13 NOT_NULL - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" - expressionType: JEXL - vars: - periodStart: XPN.12 - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" - expressionType: JEXL - vars: - periodEnd: XPN.13 - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - condition: $hl7v2Field NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: $hl7v2Field - - expressionType: nested - condition: $hl7v2Component NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Component - valueString: - type: STRING - valueOf: $hl7v2Component - - expressionType: resource - valueOf: datatypes/XPN_ELR/XPNExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml deleted file mode 100644 index 0ce0896b37c..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml +++ /dev/null @@ -1,121 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - valueOf: xpn-human-name - -extension: - vars: - xpn2: String, XPN.2 - xpn3: String, XPN.3 - xpn4: String, XPN.4 - xpn6: String, XPN.6 - xpn7: String, XPN.7 - xpn8: String, XPN.8 - xpn9: STRING_ALL, XPN.9 - xpn12: String, XPN.12 - xpn13: String, XPN.13 - xpn14: String, XPN.14 - expressionType: nested - generateList: true - expressions: - - expressionType: nested - condition: $xpn2 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.2 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.2 - - expressionType: nested - condition: $xpn3 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.3 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.3 - - expressionType: nested - condition: $xpn4 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.4 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.4 - - expressionType: nested - condition: $xpn6 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.6 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.6 - - expressionType: nested - condition: $xpn7 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.7 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.7 - - expressionType: nested - condition: $xpn8 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.8 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.8 - - expressionType: nested - condition: $xpn9 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.9 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: XPN.9 - - expressionType: nested - condition: $xpn12 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.12 - valueString: - type: STRING - valueOf: $xpn12 - expressionType: HL7Spec - - expressionType: nested - condition: $xpn13 NOT_NULL - expressionsMap: - url: - type: STRING - value: XPN.13 - valueString: - type: STRING - valueOf: $xpn13 - expressionType: HL7Spec - - expressionType: nested - condition: $xpn14 NOT_NULL - expressionsMap: - url: - type: STRING - valueOf: XPN.14 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: XPN.14 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml deleted file mode 100644 index d463f931b52..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml +++ /dev/null @@ -1,69 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - condition: $urlValue NOT_NULL - type: SYSTEM_URL - valueOf: $urlValue - -extension_1-namespaceId: - condition: $value NOT_NULL - generateList: true - valueOf: extension/Extension - expressionType: resource - vars: - value: String, HD.1 - constants: - KEY_NAME_SUFFIX: String - urlValue: namespace-id - -extension_2-universalIdISO: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $idStr NOT_NULL && $universalIdType EQUALS ISO - vars: - idStr: String, HD.2 - value: $urlPrefix + HD.2 - universalIdType: String, HD.3 - constants: - urlPrefix: "urn:oid:" - KEY_NAME_SUFFIX: Oid - urlValue: universal-id - -extension_3-universalIdUUID: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $idStr NOT_NULL && $universalIdType EQUALS UUID - vars: - idStr: String, HD.2 - value: $urlPrefix + HD.2 - universalIdType: String, HD.3 - constants: - urlPrefix: "urn:uuid:" - KEY_NAME_SUFFIX: Uuid - urlValue: universal-id - -extension_4-universalIdNullType: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $value NOT_NULL && $universalIdType NULL - vars: - value: String, HD.2 - universalIdType: String, HD.3 - constants: - KEY_NAME_SUFFIX: String - urlValue: universal-id - -extension_5-universalIdUnknownType: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $value NOT_NULL && $universalIdType NOT_EQUALS ISO && $universalIdType NOT_EQUALS UUID - vars: - value: String, HD.2 - universalIdType: String, HD.3 - constants: - KEY_NAME_SUFFIX: String - urlValue: universal-id diff --git a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml deleted file mode 100644 index 89f4dff7db3..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml +++ /dev/null @@ -1,74 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -security: - condition: $code NOT_NULL - valueOf: datatype/Coding - expressionType: resource - vars: - code: MSH.8 - display: MSH.8 - -tag_1: - condition: $code NOT_NULL - valueOf: datatype/Coding - generateList: true - expressionType: resource - vars: - code: MSH.11.1 - constants: - system: v2-0103 - -tag_2: - condition: $code NOT_NULL - valueOf: datatype/Coding - generateList: true - expressionType: resource - vars: - code: MSH.11.2 - constants: - system: v2-0207 - -extension_1: - generateList: true - valueOf: extension/Extension - expressionType: resource - vars: - value: String, MSH.12.1 - constants: - KEY_NAME_SUFFIX: String - urlValue: source-data-model-version - -# Patient las update facility universal ID -extension_2: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $idStr NOT_NULL && $systemStr EQUALS ISO - vars: - idStr: String, PID.34.2 - value: $oidUrlPrefix + PID.34.2 - systemStr: String, PID.34.3 - constants: - oidUrlPrefix: "urn:oid:" - KEY_NAME_SUFFIX: Oid - urlValue: last-updated-facility-universal-id - -# Patient las update facility namespace -extension_3: - generateList: true - valueOf: extension/Extension - expressionType: resource - condition: $value NOT_NULL - vars: - value: String, PID.34.1 - constants: - KEY_NAME_SUFFIX: String - urlValue: last-updated-facility-namespace-id - -# Patient last updated -lastUpdated: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: PID.33 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml b/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml deleted file mode 100644 index cfe8c0da75e..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml +++ /dev/null @@ -1,99 +0,0 @@ -# $schema: ./../../../../json_schema/fhir/hl7-to-fhir-mapping-message-template.json - -resources: - - - resourceName: MessageHeader - segment: MSH - resourcePath: segments/MSH/MessageHeader - repeats: false - isReferenced: true - - - resourceName: Provenance - segment: MSH - resourcePath: segments/MSH/Provenance-Source - - - resourceName: Provenance - segment: MSH - resourcePath: segments/MSH/Provenance-Transformation - - - resourceName: Patient - segment: .PID - group: PATIENT_RESULT.PATIENT - resourcePath: segments/PID/Patient - isReferenced: true - additionalSegments: - - .PD1 - - MSH - - .NTE - - .NK1 - - - resourceName: Provenance - group: PATIENT_RESULT.PATIENT - segment: .PID - resourcePath: segments/PID/Provenance-Patient - - - resourceName: RelatedPerson - segment: .NK1 - group: PATIENT_RESULT.PATIENT - resourcePath: segments/NK1/RelatedPerson - isReferenced: false - repeats: true - - - resourceName: Encounter - segment: .VISIT.PV1 - group: PATIENT_RESULT.PATIENT - resourcePath: segments/PV1/Encounter - isReferenced: true - additionalSegments: - - .PATIENT.VISIT.PV2 - - MSH - - - resourceName: Observation - segment: .ORDER_OBSERVATION.OBSERVATION.OBX - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/OBX/Observation - repeats: true - isReferenced: true - additionalSegments: - - .OBSERVATION.NTE - - .SPECIMEN.SPM - - - resourceName: SpecimenSource - segment: .OBR - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/ORC/Specimen - isReferenced: true - repeats: true - - - resourceName: Specimen - segment: .SPECIMEN.SPM - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/SPM/Specimen - repeats: true - isReferenced: true - - # PATIENT_RESULT.ORDER_OBSERVATION.SPECIMEN.SPECIMEN_OBSERVATION.OBX provides access for v2.7 - # PATIENT_RESULT.ORDER_OBSERVATION.SPECIMEN.OBX provides access for v2.5.1 - - resourceName: SpecimenObservation - segment: .SPECIMEN.SPECIMEN_OBSERVATION.OBX - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/OBX/Observation - repeats: true - - - resourceName: ServiceRequest - segment: .OBR - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/ORC/ServiceRequest - repeats: true - isReferenced: true - additionalSegments: - - .NTE - - .ORC - - - resourceName: DiagnosticReport - segment: .OBR - group: PATIENT_RESULT.ORDER_OBSERVATION - resourcePath: segments/ORC/DiagnosticReport - repeats: true - additionalSegments: - - .ORC diff --git a/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml b/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml deleted file mode 100644 index 0589b715d7d..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml +++ /dev/null @@ -1,4 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -# This file exists to override what is provided in the hl7v2-converter library -# as there are no common elements currently that should get added to every FHIR resource \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml deleted file mode 100644 index ac46be1bfe7..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml +++ /dev/null @@ -1,119 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: msh-message-header - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - vars: - msh7: MSH.7 - condition: $msh7 NOT_NULL - expressionsMap: - url: - type: STRING - value: MSH.7 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MSH.7 - - expressionType: nested - vars: - msh10: MSH.10 - condition: $msh10 NOT_NULL - expressionsMap: - url: - type: STRING - value: MSH.10 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MSH.10 - - expressionType: nested - vars: - msh13: MSH.13 - condition: $msh13 NOT_NULL - expressionsMap: - url: - type: STRING - value: MSH.13 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MSH.13 - - expressionType: nested - vars: - msh14: MSH.14 - condition: $msh14 NOT_NULL - expressionsMap: - url: - type: STRING - value: MSH.14 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MSH.14 - - condition: $msh15 NOT_NULL - expressionType: nested - vars: - msh15: MSH.15 - expressionsMap: - url: - type: STRING - value: MSH.15 - valueString: - valueOf: MSH.15 - expressionType: HL7Spec - type: STRING - - condition: $msh16 NOT_NULL - expressionType: nested - vars: - msh16: MSH.16 - expressionsMap: - url: - type: STRING - value: MSH.16 - valueString: - type: STRING - valueOf: MSH.16 - expressionType: HL7Spec - - vars: - msh19: STRING_ALL, MSH.19 - condition: $msh19 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: MSH.19 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: MSH.19 - - vars: - msh20: MSH.20 - condition: $msh20 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: MSH.20 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: MSH.20 - - expressionType: nested - vars: - $msh21: STRING_ALL, MSH.21 - condition: $msh21 NOT_NULL - generateList: true - specs: MSH.21 * - expressionsMap: - url: - type: STRING - value: MSH.21 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml deleted file mode 100644 index 98a4383c669..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml +++ /dev/null @@ -1,116 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: MessageHeader - -id: - type: NAMED_UUID - valueOf: MSH.10 - expressionType: HL7Spec - -eventCoding: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/MSG/Coding - specs: MSH.9 - required: true - -meta: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/PT/Meta - specs: MSH.11 - vars: - metaSecurity: STRING, MSH.8 - -source: - expressionType: nested - vars: - msh3: STRING_ALL, MSH.3 - expressions: - - constants: - messageHeaderSourceField: MSH.3 - condition: $msh3 NOT_NULL - valueOf: segments/MSH/datatypes/HD/Source - expressionType: resource - specs: MSH.3 - -sender: - condition: $msh4 NOT_NULL || $organizationCountry NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - expressionType: reference - generateList: true - specs: MSH.4 - vars: - organizationCountry: MSH.17 - msh4: STRING_ALL, MSH.4 - -destination: - vars: - msh6: MSH.6 - msh5: STRING_ALL, MSH.5 - expressionType: nested - generateList: true - expressions: - - constants: - messageHeaderDestinationField: MSH.5 - condition: $msh5 NOT_NULL - expressionType: resource - valueOf: segments/MSH/datatypes/HD/Destination - specs: MSH.5 - - expressionType: nested - condition: $msh6 NOT_NULL && $msh5 NULL - constants: - hdOrganizationHL7Field: MSH.6 - expressionsMap: - receiver: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - specs: MSH.6 - -language: - vars: - cwe1: MSH.19.1 - expressionType: nested - expressions: - - condition: $cwe1 NOT_NULL - valueOf: MSH.19.1 - type: STRING - expressionType: HL7Spec - - condition: $cwe1 NULL - valueOf: MSH.19.4 - type: STRING - expressionType: HL7Spec - -# MSH.10 is captured in Bundle.Identifier -# MSH.12 is hardcoded to 2.5.1 -extension_messageHeader: - generateList: true - expressionType: nested - expressions: - - condition: $msh2 NOT_NULL && $msh2 EQUALS_STRING ^~\&# - expressionType: nested - vars: - msh2: String, MSH.2 - expressionsMap: - url: - type: SYSTEM_URL - value: encoding-characters - valueString: - type: STRING - valueOf: MSH.2 - expressionType: HL7Spec - - condition: $msh18 NOT_NULL - expressionType: nested - vars: - msh18: STRING_ALL, MSH.18 - specs: MSH.18 * - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: character-set - valueString: - generateList: true - type: STRING - valueOf: $BASE_VALUE - expressionType: HL7Spec - - expressionType: resource - valueOf: segments/MSH/MSHExtension diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml deleted file mode 100644 index 5fa2ff64eba..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml +++ /dev/null @@ -1,78 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Provenance -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -target: - valueOf: datatype/Reference - generateList: true - expressionType: resource - specs: $MessageHeader - -agent: - expressionType: nested - generateList: true - vars: - msh4: STRING_ALL, MSH.4 - expressions: - - condition: $msh4 NOT_NULL - expressionType: nested - expressionsMap: - type: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "author" - system: - type: SYSTEM_URL - valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" - who: - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - expressionType: reference - specs: MSH.4 - -recorded: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: MSH.7 - -activity: - expressionType: nested - constants: - caret: "^" - vars: - msg1: String, MSH.9.1 - msg2: String, MSH.9.2 - msg3: String, MSH.9.3 - expressionsMap: - coding: - expressionType: nested - vars: - displayValue: $msg1 + $caret + $msg2 + $caret + $msg3 - expressionsMap: - display: - type: STRING - valueOf: $displayValue - -entity: - condition: $sft NOT_NULL - vars: - sft: SFT - expressionType: nested - expressionsMap: - what: - expressionType: reference - valueOf: segments/SFT/Device - specs: SFT - role: - type: STRING - value: "source" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml deleted file mode 100644 index 7bc6d2a3f7b..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml +++ /dev/null @@ -1,46 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Provenance -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -activity: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "v2-FHIR transformation" - -recorded: - type: STRING - valueOf: "GeneralUtils.getCurrentDateTimeUsingZoneId(ZONEID)" - expressionType: JEXL - -policy: - type: SYSTEM_URL - valueOf: "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" - -agent: - expressionType: nested - generateList: true - expressionsMap: - type: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "assembler" - system: - type: SYSTEM_URL - valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" - who: - valueOf: segments/MSH/ReportStreamOrganization - expressionType: reference diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml deleted file mode 100644 index 792dc695f38..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml +++ /dev/null @@ -1,32 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Organization - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier_1: - expressionType: nested - generateList: true - expressionsMap: - value_1: - type: STRING - valueOf: "CDC PRIME - Atlanta" - -identifier_2: - expressionType: nested - generateList: true - expressionsMap: - value: - type: STRING - valueOf: "2.16.840.1.114222.4.1.237821" - type: - valueOf: ../../datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid - generateList: true - expressionType: resource - specs: "ISO" - system: - type: STRING - valueOf: "urn:ietf:rfc:3986" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml deleted file mode 100644 index 94dc8e4e998..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml +++ /dev/null @@ -1,85 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -name: - type: STRING - expressionType: HL7Spec - valueOf: HD.1 - -endpoint: - vars: - hd2: STRING, HD.2 - hd3: STRING, HD.3 - constants: - oidUrlPrefix: "urn:oid:" - uuidUrlPrefix: "urn:uuid:" - expressionType: nested - expressions: - - condition: $hd2 NOT_NULL && $hd3 EQUALS ISO - vars: - endpointValue: $oidUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - - condition: $hd2 NOT_NULL && $hd3 EQUALS UUID - vars: - endpointValue: $uuidUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - -_endpoint: - vars: - hd3: STRING, HD.3 - expressionType: nested - condition: $hd3 NULL - expressionsMap: - extension: - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: data-absent-reason - valueCode: - value: "unknown" - -receiver: - vars: - msh6: MSH.6 - expressionType: nested - expressions: - - condition: $msh6 NOT_NULL - expressionType: reference - specs: $msh6 - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - constants: - hdOrganizationHL7Field: MSH.6 - - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - type: STRING - valueOf: HD.2 - expressionType: HL7Spec - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - type: STRING - valueOf: HD.3 - expressionType: HL7Spec - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: $messageHeaderDestinationField \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml deleted file mode 100644 index 69b36aff412..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml +++ /dev/null @@ -1,139 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -# Only populate name if HD.2 is not populated or it is populated and -# HD.3 is not ISO, UUID, DNS, URI -name: - vars: - hd1: STRING, HD.1 - hd2: STRING, HD.2 - hd3: STRING, HD.3 - constants: - dash: "-" - colon: ":" - expressionType: nested - expressions: - - condition: $hd2 NULL - type: STRING - valueOf: HD.1 - expressionType: HL7Spec - - condition: $hd2 NOT_NULL - expressionType: nested - vars: - nameValue: $hd1 + $dash + $hd3 + $colon + $hd2 - expressions: - - condition: $hd3 NOT_EQUALS ISO && $hd3 NOT_EQUALS UUID && $hd3 NOT_EQUALS DNS && $hd3 NOT_EQUALS URI - type: STRING - value: $nameValue - -endpoint: - vars: - hd2: STRING, HD.2 - hd3: STRING, HD.3 - constants: - oidUrlPrefix: "urn:oid:" - uuidUrlPrefix: "urn:uuid:" - dnsUrlPrefix: "urn:dns:" - uriUrlPrefix: "urn:uri:" - expressionType: nested - expressions: - - condition: $hd2 NOT_NULL && $hd3 EQUALS ISO - vars: - endpointValue: $oidUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - - condition: $hd2 NOT_NULL && $hd3 EQUALS UUID - vars: - endpointValue: $uuidUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - - condition: $hd2 NOT_NULL && $hd3 EQUALS DNS - vars: - endpointValue: $dnsUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - - condition: $hd2 NOT_NULL && $hd3 EQUALS URI - vars: - endpointValue: $uriUrlPrefix + $hd2 - type: STRING - valueOf: $endpointValue - -_endpoint: - vars: - hd3: STRING, HD.3 - expressionType: nested - expressions: - - expressionType: nested - condition: $hd3 NULL - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: data-absent-reason - valueCode: - value: "unknown" - - expressionType: nested - condition: $hd3 NOT_EQUALS ISO && $hd3 NOT_EQUALS UUID && $hd3 NOT_EQUALS DNS && $hd3 NOT_EQUALS URI - expressionsMap: - extension: - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: data-absent-reason - valueCode: - value: "unknown" - - -software: - expressionType: HL7Spec - type: STRING - valueOf: SFT.3 - -version: - expressionType: HL7Spec - type: STRING - valueOf: SFT.2 - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: namespace-id - valueString: - type: STRING - valueOf: HD.1 - expressionType: HL7Spec - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id - valueString: - type: STRING - valueOf: HD.2 - expressionType: HL7Spec - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: universal-id-type - valueString: - type: STRING - valueOf: HD.3 - expressionType: HL7Spec - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - valueOf: $messageHeaderSourceField - type: STRING diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml deleted file mode 100644 index 15d0404410d..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml +++ /dev/null @@ -1,77 +0,0 @@ -# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -_endpoint: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: data-absent-reason - valueCode: - value: "unknown" - -software: - expressionType: HL7Spec - type: STRING - valueOf: SFT.3 - -version: - expressionType: HL7Spec - type: STRING - valueOf: SFT.2 - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - vars: - sft4: STRING, SFT.4 - condition: $sft4 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: software-binary-id - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SFT.4 - - vars: - sft5: STRING, SFT.5 - condition: $sft5 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: source-software-description - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SFT.5 - - expressionType: nested - vars: - sft6: STRING, SFT.6 - condition: $sft6 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: software-install-date - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SFT.6 - - expressionType: nested - vars: - sft1: STRING_ALL, SFT.1 - condition: $sft1 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: software-vendor-org - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference - specs: SFT.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml deleted file mode 100644 index 171d63a8b49..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml +++ /dev/null @@ -1,21 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: nk1-related-person - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - generateList: true - condition: $nk1-13 NOT_NULL - specs: NK1.13 * - expressionsMap: - url: - type: STRING - value: NK1.13 - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml deleted file mode 100644 index 8fdfaaaf634..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml +++ /dev/null @@ -1,155 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: RelatedPerson - -# Not implementing NK1.6: not in mapping, not in NIST -# Not implementing NK1.7: not in mapping, not in NIST -# Not implementing NK1.8: not in mapping, not in NIST -# Not implementing NK1.9: not in mapping, not in NIST -# Not implementing NK1.10: not in mapping, not in NIST -# Not implementing NK1.11: not in mapping, not in NIST -# Not implementing NK1.12: not in mapping, not in NIST -# Not implementing NK1.14: not in mapping, not in NIST -# Not implementing NK1.15: not in mapping, not in NIST -# Not implementing NK1.16: not in mapping, not in NIST -# Not implementing NK1.17: not in mapping, not in NIST -# Not implementing NK1.18: not in mapping, not in NIST -# Not implementing NK1.19: not in mapping, not in NIST -# Not implementing NK1.21: not in mapping, not in NIST -# Not implementing NK1.22: not in mapping, not in NIST -# Not implementing NK1.23: not in mapping, not in NIST -# Not implementing NK1.24: not in mapping, not in NIST -# Not implementing NK1.25: not in mapping, not in NIST -# Not implementing NK1.26: not in mapping, not in NIST -# Not implementing NK1.27: not in mapping, not in NIST -# Not implementing NK1.28: not in mapping, not in NIST -# Not implementing NK1.29: not in mapping, not in NIST -# Not implementing NK1.33: not in mapping, not in NIST -# Not implementing NK1.34: not in mapping, not in NIST -# Not implementing NK1.35: not in mapping, not in NIST -# Not implementing NK1.36: not in mapping, not in NIST -# Not implementing NK1.37: not in mapping, not in NIST -# Not implementing NK1.38: not in mapping, not in NIST -# Not implementing NK1.39: not in mapping, not in NIST -# Not implementing NK1.40: not in mapping, not in NIST -# Not implementing NK1.41: not in mapping, not in NIST - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -patient: - valueOf: datatype/Reference - expressionType: resource - specs: $Patient - useGroup: true - -name: - expressionType: nested - generateList: true - expressions: - - valueOf: datatypes/XPN_ELR/HumanName - expressionType: resource - condition: $nk1-2 NOT_NULL - generateList: true - vars: - nk1-2: NK1.2 - specs: NK1.2 * - constants: - hl7v2Field: "NK1.2" - - valueOf: datatypes/XPN_ELR/HumanName - expressionType: resource - condition: $nk1-30 NOT_NULL - generateList: true - vars: - nk1-30: NK1.30 - specs: NK1.30 * - constants: - hl7v2Field: "NK1.30" - -relationship: - expressionType: nested - generateList: true - expressions: - - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - condition: $nk1-3 NOT_NULL - vars: - nk1-3: NK1.3 - specs: NK1.3 - constants: - hl7v2Field: "NK1.3" - -address: - expressionType: nested - generateList: true - expressions: - - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - generateList: true - expressionType: resource - condition: $nk1-4 NOT_NULL - vars: - nk1-4: NK1.4 - specs: NK1.4 * - constants: - hl7v2Field: "NK1.4" - - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - generateList: true - expressionType: resource - condition: $nk1-32 NOT_NULL - vars: - nk1-32: NK1.32 - specs: NK1.32 * - constants: - hl7v2Field: "NK1.32" - -telecom: - expressionType: nested - generateList: true - expressions: - - condition: $valueIn NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: NK1.5 * - vars: - valueIn: NK1.5 - constants: - hl7v2Field: "NK1.5" - - condition: $valueIn NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: NK1.31 * - vars: - valueIn: NK1.31 - constants: - hl7v2Field: "NK1.31" - -communication: - expressionType: nested - vars: - nk1-20: STRING_ALL, NK1.20 - condition: $nk1-20 NOT_NULL - expressionsMap: - language: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: NK1.20 - -extension: - expressionType: nested - generateList: true - vars: - nk1-13: STRING_ALL, NK1.13 - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: hl7v2Segment - valueString: - valueOf: 'NK1' - - expressionType: resource - valueOf: segments/NK1/NK1Extension \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml deleted file mode 100644 index 9ba009349ce..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml +++ /dev/null @@ -1,44 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -text: - type: STRING - valueOf: NTE.3 - required: true - expressionType: HL7Spec - -extension_1-noteSource: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: note-source - valueId: - valueOf: NTE.2 - expressionType: HL7Spec - type: STRING - -extension_2-noteComment: - generateList: true - expressionType: nested - specs: NTE.3 * - expressionsMap: - url: - type: SYSTEM_URL - value: note-comment - valueId: - valueOf: FT - expressionType: HL7Spec - type: STRING - -extension_3-noteType: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: note-type - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: NTE.4 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml deleted file mode 100644 index 64cb809a99d..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml +++ /dev/null @@ -1,13 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Device - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml deleted file mode 100644 index 527a0cabbdb..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml +++ /dev/null @@ -1,115 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: obx-observation - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - obx2: STRING_ALL, OBX.2 - condition: $obx2 NOT_NULL - expressionsMap: - url: - value: OBX.2 - type: STRING - valueId: - type: STRING - expressionType: HL7Spec - valueOf: OBX.2 - - expressionType: nested - vars: - obx6: STRING_ALL, OBX.6 - condition: $obx6 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBX.6 - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - specs: OBX.6 - expressionType: resource - - expressionType: nested - vars: - obx9: STRING_ALL, OBX.9 - condition: $obx9 NOT_NULL - expressionsMap: - url: - value: OBX.9 - type: STRING - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBX.9 - - expressionType: nested - vars: - obx11: STRING_ALL, OBX.11 - condition: $obx11 NOT_NULL - expressionsMap: - url: - value: OBX.11 - type: STRING - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBX.11 - - expressionType: nested - vars: - obx12: STRING_ALL, OBX.12 - condition: $obx12 NOT_NULL - expressionsMap: - url: - value: OBX.12 - type: STRING - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBX.12 - - expressionType: nested - vars: - obx13: STRING_ALL, OBX.13 - condition: $obx13 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBX.13 - valueString: - type: STRING - expressionType: HL7Spec - specs: OBX.13 - - expressionType: nested - vars: - obx17: STRING_ALL, OBX.17 - condition: $obx17 NOT_NULL - generateList: true - specs: OBX.17 * - expressionsMap: - url: - type: STRING - value: OBX.17 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - - expressionType: nested - vars: - obx18: STRING_ALL, OBX.18 - condition: $obx18 NOT_NULL - generateList: true - specs: OBX.18 * - expressionsMap: - url: - type: STRING - value: OBX.18 - valueReference: - valueOf: segments/OBX/Device - expressionType: reference - - - - - - - diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml deleted file mode 100644 index 76055d029f3..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml +++ /dev/null @@ -1,503 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Observation - -# Not implementing OBX.5 when OBX.2 is RP as the inventory say it still needs to be resolved -# Not implementing OBX.5 when OBX.2 is CF, the type does not exist in NIST and the mapping is wrong in the inventory -# Not implementing OBX.5 when OBX.2 is NA (Numeric Array), the inventory does not specify how that should map to SampledData -# OBX.17 is repeatable but maps to method on Observation which is not, so it's all captured in OBXExtension -# OBX.18 is repeatable but maps to device on Observation which is not, so it's all captured in OBXExtension -# Not implementing OBX.20 not in mapping deprecated in NIST -# Not implementing OBX.21 not in mapping deprecated in NIST -# Not implementing OBX.22 not in mapping deprecated in NIST -# Not implementing OBX.26 not in mapping not in NIST -# Not implementing OBX.27 not in mapping not in NIST -# Not implementing OBX.28 not in mapping not in NIST -# Not implementing OBX.29 not in mapping not in NIST -# Not implementing OBX.30 not in mapping not in NIST -# Not implementing OBX.31 not in mapping not in NIST -# Not implementing OBX.32 not in mapping not in NIST -# Not implementing OBX.33 as it's not in the NIST spec the logic in the inventory cannot be implemented in the library - - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -code: - vars: - obx3: STRING, OBX.3 - condition: $obx3 NOT_NULL - expressionType: resource - valueOf: datatypes/CWE_ELR/CodeableConcept - specs: OBX.3 - -valueString_obx: - vars: - obx2: STRING, OBX.2 - expressionType: nested - expressions: - - condition: $obx2 EQUALS ST || $obx2 EQUALS FT || $obx2 EQUALS TX - type: STRING_ALL - valueOf: OBX.5 - expressionType: HL7Spec - - condition: $obx2 EQUALS VR - vars: - vrValue: OBX.5.1 + $dash + OBX.5.2 - constants: - dash: "-" - type: STRING - valueOf: $vrValue - - condition: $obx2 EQUALS SN && $obx53 EQUALS + - vars: - obx53: STRING, OBX.5.3 - value: OBX.5.1 + $plus + OBX.5.2 + $plus + OBX.5.3 + $plus + OBX.5.4 - constants: - plus: "+" - type: STRING - valueOf: $value - -valueCodeableConcept: - expressionType: nested - vars: - obx2: STRING, OBX.2 - expressions: - - condition: $obx2 EQUALS CNE - valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept - specs: OBX.5 - expressionType: resource - - condition: $obx2 EQUALS CWE - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: OBX.5 - expressionType: resource - - condition: $obx2 EQUALS CE - valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept - specs: OBX.5 - expressionType: resource - - condition: $obx2 EQUALS IS - expressionType: nested - expressionsMap: - coding: - expressionType: nested - generateList: true - expressionsMap: - code: - type: STRING - expressionType: HL7Spec - valueOf: OBX.5 - -valuePeriod: - condition: $obx2 EQUALS DR - valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period - expressionType: resource - specs: OBX.5 - vars: - obx2: STRING, OBX.2 - start: OBX.5.1 - end: OBX.5.2 - dateTimeIn: OBX.5.1 - dateTimeOut: OBX.5.2 - -valueDateTime: - condition: $obx2 EQUALS DT || $obx2 EQUALS DTM - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: OBX.5 - obx2: STRING, OBX.2 -_valueDateTime: - expressionType: nested - condition: $obx2 EQUALS DT || $obx2 EQUALS DTM - vars: - obx5: OBX.5 - obx2: STRING, OBX.2 - expressionsMap: - extension: - condition: $obx5 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: OBX.5 - expressionType: HL7Spec - -valueTime: - condition: $obx2 EQUALS TM - type: STRING - valueOf: OBX.5 - expressionType: HL7Spec - vars: - obx2: STRING, OBX.2 - -_valueTime: - expressionType: nested - condition: $obx2 EQUALS TM - vars: - obx5: OBX.5 - obx2: STRING, OBX.2 - expressionsMap: - extension: - condition: $obx5 NOT_NULL - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: OBX.5 - expressionType: HL7Spec - -valueRange: - vars: - obx2: STRING, OBX.2 - CWERangeUnits: OBX.6 - obx53: STRING, OBX.5.3 - expressionType: nested - specs: OBX.5 - expressions: - - condition: $obx2 EQUALS NR - valueOf: ../../datatypes/v251/hl7/datatypes/NR/Range - expressionType: resource - - condition: $obx2 EQUALS SN && $obx53 EQUALS - - valueOf: ../../datatypes/v251/hl7/datatypes/SN/Range - expressionType: resource - - -valueRatio: - vars: - obx2: STRING, OBX.2 - obx53: STRING, OBX.5.3 - CWERangeUnits: OBX.6 - condition: $obx2 EQUALS SN && ($obx53 EQUALS / || $obx53 EQUALS :) - valueOf: ../../datatypes/v251/hl7/datatypes/SN/Ratio - expressionType: resource - specs: OBX.5 - -valueQuantity: - vars: - obx2: STRING, OBX.2 - CWEQuantityUnits: OBX.6 - obx53: STRING, OBX.5.3 - expressionType: nested - expressions: - - condition: $obx2 EQUALS NM - expressionType: nested - expressionsMap: - value: - type: STRING - expressionType: HL7Spec - valueOf: OBX.5 - code: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWEQuantityUnits.1 - vars: - identifier: CWEQuantityUnits.1 - nameOfCodingSystem: CWEQuantityUnits.3 - unit: - expressionType: nested - vars: - identifier: CWEQuantityUnits.1 - text: CWEQuantityUnits.2 - expressions: - - condition: $text NULL && $identifier NOT_NULL - type: STRING - valueOf: CWEQuantityUnits.1 - expressionType: HL7Spec - - condition: $text NOT_NULL - type: STRING - valueOf: CWEQuantityUnits.2 - expressionType: HL7Spec - system: - condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL - type: STRING - expressionType: HL7Spec - valueOf: CWEQuantityUnits.3 - vars: - identifier: CWEQuantityUnits.1 - nameOfCodingSystem: CWEQuantityUnits.3 - - condition: > - $obx2 EQUALS SN && $obx53 NOT_EQUALS : && $obx53 NOT_EQUALS / && $obx53 NOT_EQUALS - && $obx53 NOT_EQUALS + - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/SN/Quantity - specs: OBX.5 - -referenceRange: - vars: - obx7: STRING_ALL, OBX.7 - condition: $obx7 NOT_NULL - expressionType: nested - generateList: true - expressionsMap: - text: - expressionType: HL7Spec - type: STRING - valueOf: OBX.7 - -interpretation: - vars: - obx8: STRING_ALL, OBX.8 - condition: $obx8 NOT_NULL - generateList: true - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: OBX.8 * - -status: - type: OBSERVATION_STATUS - default: unknown - valueOf: OBX.11 - expressionType: HL7Spec - -dataAbsentReason: - vars: - obx2: STRING, OBX.2 - obx5: STRING, OBX.5 - obx11: STRING, OBX.11 - constants: - system: http://terminology.hl7.org/CodeSystem/data-absent-reason - expressionType: nested - expressions: - - condition: $obx11 EQUALS X - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: cannot-be-obtained - system: - valueOf: $system - - condition: $obx11 EQUALS_STRING N - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: not-asked - system: - valueOf: $system - - condition: $obx2 EQUALS ST && ($obx5 EQUALS_STRING $emptyString || $obx5 NULL) - expressionType: nested - constants: - emptyString: "" - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - valueOf: unknown - system: - valueOf: $system - -effectiveDateTime: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: OBX.14 -_effectiveDateTime: - expressionType: nested - condition: $obx14 NOT_NULL - vars: - obx14: OBX.14 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: OBX.14 - expressionType: HL7Spec - -method: - vars: - obx17: STRING_ALL, OBX.17 - condition: $obx17 NOT_NuLL - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: OBX.17 - -device: - vars: - obx18: STRING_ALL, OBX.18 - condition: $obx18 NOT_NULL - valueOf: segments/OBX/Device - expressionType: reference - specs: OBX.18 - -performer: - generateList: true - expressionType: nested - expressions: - - expressionType: reference - vars: - obx15: STRING_ALL, OBX.15 - condition: $obx15 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/Organization - constants: - cweOrganizationHL7Field: OBX.15 - specs: OBX.15 - - expressionType: reference - generateList: true - specs: OBX.16 * - valueOf: segments/OBX/PractitionerRole - vars: - OBXPractitionerComponent: $BASE_VALUE - obx16: STRING_ALL, OBX.16 - condition: $obx16 NOT_NULL - constants: - OBXPractitionerRoleSystem: "http://terminology.hl7.org/CodeSystem/practitioner-role" - OBXPractitionerRoleCode: "responsibleObserver" - - expressionType: reference - vars: - obx25: STRING_ALL, OBX.25 - OBXPractitionerComponent: OBX.25 - OBXPractitionerRoleOrganization: OBX.23 - OBXPractitionerRoleOrganizationAddress: OBX.24 - condition: $obx25 NOT_NULL - valueOf: segments/OBX/PractitionerRole - constants: - OBXPractitionerRoleSystem: "http://terminology.hl7.org/CodeSystem/v2-0912" - OBXPractitionerRoleCode: "MDIR" - - expressionType: reference - vars: - obx25: STRING_ALL, OBX.25 - obx23: STRING_ALL, obx23 - XADAddress: OBX.24 - condition: $obx25 NULL && ($obx23 NOT_NULL || $XADAddress NOT_NULL) - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - specs: OBX.23 - constants: - XONHL7Field: OBX.25 - -extension: - generateList: true - expressionType: nested - vars: - obx2: STRING, OBX.2 - expressions: - - expressionType: nested - vars: - obx4: STRING,OBX.4 - condition: $obx4 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: sub-id - valueString: - expressionType: HL7Spec - type: STRING - valueOf: OBX.4 - - expressionType: nested - vars: - obx10: STRING_ALL, OBX.10 - condition: $obx10 NOT_NULL - generateList: true - specs: OBX.10 * - expressionsMap: - url: - type: SYSTEM_URL - value: nature-of-abnormal-test - valueId: - valueOf: $BASE_VALUE - expressionType: HL7Spec - type: STRING - - expressionType: nested - vars: - obx19: STRING, OBX.19 - condition: $obx19 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: analysis-date-time - valueDateTime: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: OBX.19 - _valueDateTime: - expressionType: nested - condition: $obx19 NOT_NULL - vars: - obx19: OBX.19 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $obx19 - expressionType: HL7Spec - - expressionType: nested - vars: - obx54: STRING, OBX.5.4 - condition: $obx2 EQUALS ED && $obx54 EQUALS Base64 - expressionsMap: - url: - type: SYSTEM_URL - value: observation-value-attachment - valueAttachment: - valueOf: ../../datatypes/v251/hl7/datatypes/ED/Attachment - expressionType: resource - specs: OBX.5 - - expressionType: resource - condition: $obx2 EQUALS SN - valueOf: ../../datatypes/v251/hl7/datatypes/SN/ExtensionSN - specs: OBX.5 - - expressionType: resource - valueOf: segments/OBX/OBXExtension - - -subject: - valueOf: datatype/Reference - expressionType: resource - specs: $Patient - -encounter: - valueOf: datatype/Reference - expressionType: resource - specs: $Encounter - -# $suppressNote is a constant that can be passed in so that a note is not generated -# This was required when we translate the SPECIMEN.OBX segment so that the created observation -# does not include notes from the OBSERVATION GROUP -# ORDER_OBSERVATION -# NTE -> Should not be included as part of the Observation created from the OBX -# SPECIMEN -# OBX -# See use here: https://github.com/CDCgov/prime-reportstream/blob/813fe6d15e780af3ea88eb61ddfbdf2a8f4462a9/prime-router/metadata/fhir_mapping/hl7/resource/ServiceRequest.yml#L380 -note_observation: - valueOf: segments/NTE/Annotation - condition: $suppressNote NULL - expressionType: resource - generateList: true - specs: NTE - -focus: - valueOf: datatype/Reference - expressionType: resource - specs: $Specimen - useGroup: true diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml deleted file mode 100644 index 5f31cbc9315..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml +++ /dev/null @@ -1,36 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: PractitionerRole - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -practitioner: - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - expressionType: reference - specs: $OBXPractitionerComponent - -organization: - condition: $roleOrg NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference - specs: $OBXPractitionerRoleOrganization - vars: - XADAddress: $OBXPractitionerRoleOrganizationAddress - roleOrg: STRING_ALL, $OBXPractitionerRoleOrganization - -code: - expressionType: nested - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - system: - type: STRING - valueOf: $OBXPractitionerRoleSystem - code: - type: STRING - valueOf: $OBXPractitionerRoleCode \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml deleted file mode 100644 index 9367c7d981b..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml +++ /dev/null @@ -1,264 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: DiagnosticReport - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - expressionType: nested - generateList: true - vars: - obr2: STRING_ALL, OBR.2 - orc2: STRING_ALL, ORC.2 - obr3: STRING_ALL, OBR.3 - orc3: STRING_ALL, ORC.3 - orc4: STRING_ALL, ORC.4 - expressions: - - condition: $orc2 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.2 - constants: - code: "PLAC" - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - hl7v2Field: ORC.2 - - condition: $orc2 NULL && $obr2 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.2 - constants: - code: "PLAC" - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - hl7v2Field: OBR.2 - - condition: $orc3 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.3 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FILL" - display: "Filler Identifier" - - condition: $orc3 NULL && $obr3 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.3 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FILL" - display: "Filler Identifier" - - condition: $orc4 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "PGN" - - condition: $orc4 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FGN" - -code: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: OBR.4 - -effectiveDateTime: - condition: $start NOT_NULL && $end NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: OBR.7 - start: OBR.7 - end: OBR.8 -_effectiveDateTime: - expressionType: nested - condition: $start NOT_NULL && $end NULL - vars: - dateTimeIn: OBR.7 - start: OBR.7 - end: OBR.8 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $dateTimeIn - expressionType: HL7Spec - -effectivePeriod: - condition: $startDate NOT_NULL && $endDate NOT_NULL - vars: - startDate: OBR.7 - endDate: OBR.8 - expressionType: nested - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" - expressionType: JEXL - _start: - expressionType: nested - condition: $startDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $startDate - expressionType: HL7Spec - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" - expressionType: JEXL - _end: - expressionType: nested - condition: $endDate NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $endDate - expressionType: HL7Spec - -issued: - type: STRING - valueOf: 'GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)' - expressionType: JEXL - vars: - dateTimeIn: OBR.22 -_issued: - expressionType: nested - condition: $obr22 NOT_NULL - vars: - obr22: OBR.22 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $obr22 - expressionType: HL7Spec - -category: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/ID/CodeableConcept - specs: OBR.24 - -status: - type: DIAGNOSTIC_REPORT_STATUS - valueOf: OBR.25 - expressionType: HL7Spec - required: true - -resultsInterpreter: - vars: - obr32: STRING_ALL, OBR.32 - condition: $obr32 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole - generateList: true - expressionType: reference - specs: OBR.32 - -performer_1-technician: - valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole - condition: $obr34 NOT_NULL - generateList: true - expressionType: reference - specs: OBR.34 - vars: - obr34: OBR.34 - constants: - performerParticipationType: "SPRF" - -performer_2-transcriptionist: - valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole - condition: $obr35 NOT_NULL - generateList: true - expressionType: reference - specs: OBR.35 - vars: - obr35: OBR.35 - constants: - performerParticipationType: "TRANS" - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - orc16: ORC.16 - condition: $orc16 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: "http://hl7.org/fhir/StructureDefinition/event-statusReason" - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.16 - -encounter: - valueOf: datatype/Reference - expressionType: resource - specs: $Encounter - -subject: - valueOf: datatype/Reference - expressionType: resource - specs: $Patient - -basedOn: - valueOf: datatype/Reference - expressionType: resource - specs: $ServiceRequest - generateList: true - useGroup: true - -specimen: - expressionType: nested - generateList: true - expressions: - - valueOf: datatype/Reference - generateList: true - expressionType: resource - specs: $Specimen - useGroup: true - - valueOf: datatype/Reference - expressionType: resource - specs: $SpecimenSource - useGroup: true - -result: - valueOf: datatype/Reference - generateList: true - expressionType: resource - specs: $Observation - useGroup: true \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml deleted file mode 100644 index d70a7ae30c7..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml +++ /dev/null @@ -1,340 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: obr-observation-request - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - obr2: STRING_ALL, OBR.2 - orc2: STRING_ALL, ORC.2 - condition: $orc2 NOT_NULL && $obr2 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.2 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.2 - - expressionType: nested - vars: - obr3: STRING_ALL, OBR.3 - orc3: STRING_ALL, ORC.3 - condition: $orc3 NOT_NULL && $obr3 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.3 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.3 - - expressionType: nested - vars: - obr10: STRING_ALL, OBR.10 - condition: $obr10 NOT_NULL - specs: OBR.10 * - generateList: true - expressionsMap: - url: - type: STRING - value: OBR.10 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - obr11: STRING, OBR.11 - condition: $obr11 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.11 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBR.11 - - expressionType: nested - vars: - obr12: STRING_ALL, OBR.12 - condition: $obr12 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.12 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: OBR.12 - - expressionType: nested - vars: - obr13: STRING_ALL, OBR.13 - condition: $obr13 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.13 - valueString: - expressionType: HL7Spec - type: STRING - valueOf: OBR.13 - - expressionType: nested - vars: - obr16: STRING_ALL, OBR.16 - condition: $obr16 NOT_NULL - specs: OBR.16 * - generateList: true - expressionsMap: - url: - type: STRING - value: OBR.16 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - condition: $orc14 NOT_NULL && $obr17 NOT_NULL - vars: - orc14: STRING_ALL, ORC.14 - obr17: STRING_ALL, OBR.17 - expressionType: nested - specs: OBR.17 * - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: callback-number - valueContactPoint: - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - expressionType: resource - constants: - hl7v2Field: "OBR.17" - - expressionType: nested - vars: - obr18: OBR.18 - condition: $obr18 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.18 - valueString: - type: STRING - valueOf: OBR.18 - expressionType: HL7Spec - - expressionType: nested - vars: - obr19: OBR.19 - condition: $obr19 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.19 - valueString: - type: STRING - valueOf: OBR.19 - expressionType: HL7Spec - - expressionType: nested - vars: - obr20: OBR.20 - condition: $obr20 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.20 - valueString: - type: STRING - valueOf: OBR.20 - expressionType: HL7Spec - - expressionType: nested - vars: - obr21: OBR.21 - condition: $obr21 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.21 - valueString: - type: STRING - valueOf: OBR.21 - expressionType: HL7Spec - - expressionType: nested - vars: - obr22: OBR.22 - condition: $obr22 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.22 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBR.22 - - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/MOC/Extension - vars: - obr23: STRING_ALL, OBR.23 - condition: $obr23 NOT_NULL - specs: OBR.23 - constants: - mocExtensionName: OBR.23 - - expressionType: nested - vars: - obr24: OBR.24 - condition: $obr24 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.24 - valueId: - type: STRING - expressionType: HL7Spec - valueOf: OBR.24 - - expressionType: nested - vars: - obr25: OBR.25 - condition: $obr25 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.25 - valueId: - type: STRING - expressionType: HL7Spec - valueOf: OBR.25 - - expressionType: resource - vars: - obr26: STRING_ALL, OBR.26 - condition: $obr26 NOT_NULL - valueOf: datatypes/PRL_ELR/Extension - specs: OBR.26 - constants: - prlExtensionName: OBR.26 - - expressionType: nested - vars: - obr28: STRING_ALL, OBR.28 - condition: $obr28 NOT_NULL - specs: OBR.28 * - generateList: true - expressionsMap: - url: - type: STRING - value: OBR.28 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - obr29: STRING_ALL, OBR.29 - condition: $obr29 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.29 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier - expressionType: resource - specs: OBR.29 - constants: - backupExtension: "filler-assigned-identifier" - - expressionType: nested - vars: - obr33: STRING_ALL, OBR.33 - condition: $obr33 NOT_NULL - specs: OBR.33 * - generateList: true - expressionsMap: - url: - type: STRING - value: OBR.33 - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole - expressionType: reference - - expressionType: nested - vars: - obr36: STRING, OBR.36 - condition: $obr36 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.36 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBR.36 - - expressionType: nested - vars: - obr39: STRING_ALL, OBR.39 - condition: $obr39 NOT_NULL - specs: OBR.39 * - generateList: true - expressionsMap: - url: - type: STRING - value: OBR.39 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - - expressionType: nested - vars: - obr44: STRING_ALL, OBR.44 - condition: $obr44 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.44 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept - expressionType: resource - specs: OBR.44 - - expressionType: nested - vars: - obr45: STRING_ALL, OBR.45 - condition: $obr45 NOT_NULL - specs: OBR.45 * - generateList: true - expressionsMap: - url: - type: STRING - value: obr-45-procedure-code-modifier - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept - expressionType: resource - - expressionType: nested - vars: - obr48: STRING_ALL, OBR.48 - condition: $obr48 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.48 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: OBR.48 - - expressionType: nested - vars: - obr49: STRING_ALL, OBR.49 - condition: $obr49 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.49 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: OBR.49 - - expressionType: nested - vars: - obr50: STRING_ALL, OBR.50 - condition: $obr50 NOT_NULL - expressionsMap: - url: - type: STRING - value: OBR.50 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: OBR.50 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml deleted file mode 100644 index 82183edddd6..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml +++ /dev/null @@ -1,235 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: orc-common-order - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - orc5: STRING_ALL, ORC.5 - condition: $orc5 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.5 - valueString: - type: STRING - valueOf: ORC.5 - expressionType: HL7Spec - - expressionType: nested - vars: - orc6: STRING_ALL, ORC.6 - condition: $orc6 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.6 - valueString: - type: STRING - valueOf: ORC.6 - expressionType: HL7Spec - - expressionType: nested - vars: - orc8: STRING_ALL, ORC.8 - condition: $orc8 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.8 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier - expressionType: resource - specs: ORC.8 - constants: - backupExtension: "filler-assigned-identifier" - - expressionType: nested - vars: - orc10: STRING_ALL, ORC.10 - condition: $orc10 NOT_NULL - specs: ORC.10 * - generateList: true - expressionsMap: - url: - type: STRING - value: ORC.10 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - orc11: STRING_ALL, ORC.11 - condition: $orc11 NOT_NULL - specs: ORC.11 * - generateList: true - expressionsMap: - url: - type: STRING - value: ORC.11 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - orc12: STRING_ALL, ORC.12 - condition: $orc12 NOT_NULL - specs: ORC.12 * - generateList: true - expressionsMap: - url: - type: STRING - value: orc-12-ordering-provider - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - orc13: STRING_ALL, ORC.13 - condition: $orc13 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.13 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - specs: ORC.13 - - expressionType: nested - condition: $orc15 NOT_NULL - vars: - orc15: STRING, ORC.15 - expressionsMap: - url: - type: STRING - value: ORC.15 - valueString: - type: STRING - valueOf: ORC.15 - expressionType: HL7Spec - - expressionType: nested - vars: - orc17: ORC.17 - condition: $orc17 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.17 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.17 - - expressionType: nested - vars: - orc17: ORC.18 - condition: $orc17 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.18 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.18 - - expressionType: nested - vars: - orc19: STRING_ALL, ORC.19 - condition: $orc19 NOT_NULL - specs: ORC.19 * - generateList: true - expressionsMap: - url: - type: STRING - value: ORC.19 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - - expressionType: nested - vars: - orc21: STRING_ALL, ORC.21 - condition: $orc21 NOT_NULL - specs: ORC.21 * - generateList: true - expressionsMap: - url: - type: STRING - value: orc-21-ordering-facility-name - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - - expressionType: nested - vars: - orc22: STRING_ALL, ORC.22 - condition: $orc22 NOT_NULL - specs: ORC.22 * - generateList: true - expressionsMap: - url: - type: STRING - value: orc-22-ordering-facility-address - valueAddress: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - - expressionType: nested - vars: - orc24: STRING_ALL, ORC.24 - condition: $orc24 NOT_NULL - specs: ORC.24 * - generateList: true - expressionsMap: - url: - type: STRING - value: orc-24-ordering-provider-address - valueAddress: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - - expressionType: nested - vars: - orc27: ORC.27 - condition: $orc27 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.27 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: ORC.27 - - expressionType: nested - vars: - orc28: ORC.28 - condition: $orc28 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.28 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.28 - - expressionType: nested - vars: - orc30: STRING_ALL, ORC.30 - condition: $orc30 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.30 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept - specs: ORC.30 - - expressionType: nested - vars: - orc31: STRING_ALL, ORC.31 - condition: $orc31 NOT_NULL - expressionsMap: - url: - type: STRING - value: ORC.31 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: ORC.31 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml deleted file mode 100644 index efb00d80959..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml +++ /dev/null @@ -1,40 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: PractitionerRole - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - - -practitioner: - expressionType: nested - vars: - orc12: STRING_ALL, ORC.12 - obr16: STRING_ALL, OBR.16 - expressions: - - expressionType: reference - condition: $orc12 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - specs: ORC.12 - vars: - XADAddress: ORC.24 - constants: - XCNHL7Field: ORC.12 - - expressionType: reference - condition: $orc12 NULL && $obr16 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - specs: OBR.16 - vars: - XADAddress: ORC.24 - constants: - XCNHL7Field: OBR.16 - -organization: - vars: - XADAddress: ORC.22 - XTNTelecom: ORC.23 * - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - specs: ORC.21 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml deleted file mode 100644 index 0e08b9fc9e3..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml +++ /dev/null @@ -1,322 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: ServiceRequest - -# Not Implementing -# ORC.7 not mapped, deprecated in the NIST spec -# ORC.26 not mapped, deprecated in the NIST spec -# ORC.32 not mapped, deprecated in NIST spec -# ORC.34 not mapped, deprecated in NIST spec -# OBR.5 not mapped, deprecated in NIST spec -# OBR.27 not mapped, deprecated in NIST spec -# OBR.30 not mapped, deprecated in NIST spec -# OBR.37 not mapped, deprecated in NIST spec -# OBR.38 not mapped, deprecated in NIST spec -# OBR.40 not mapped, deprecated in NIST spec -# OBR.41 not mapped, deprecated in NIST spec -# OBR.42 not mapped, deprecated in NIST spec -# OBR.43 not mapped, deprecated in NIST spec -# OBR.54 not mapped, not in NIST - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -status: - type: SERVICE_REQUEST_STATUS - default: "unknown" - valueOf: ORC.5 | ORC.1 - expressionType: HL7Spec - -intent: - expressionType: nested - vars: - obr11: STRING, OBR.11 - expressions: - - condition: $obr11 NOT_EQUALS G || $obr11 NOT_EQUALS A - type: STRING - value: "order" - - condition: $obr11 EQUALS A - type: STRING - value: "#add-on#" - - condition: $obr11 EQUALS G - type: STRING - value: "reflex-order" - -identifier: - expressionType: nested - generateList: true - vars: - obr2: STRING_ALL, OBR.2 - orc2: STRING_ALL, ORC.2 - obr3: STRING_ALL, OBR.3 - orc3: STRING_ALL, ORC.3 - orc4: STRING_ALL, ORC.4 - orc33: STRING_ALL, ORC.33 - expressions: - - condition: $orc2 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.2 - constants: - code: "PLAC" - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - display: "Placer Identifier" - hl7v2Field: ORC.2 - - condition: $orc2 NULL && $obr2 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.2 - constants: - code: "PLAC" - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - display: "Placer Identifier" - hl7v2Field: OBR.2 - - condition: $orc3 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.3 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FILL" - display: "Filler Identifier" - hl7v2Field: ORC.3 - - condition: $orc3 NULL && $obr3 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: OBR.3 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FILL" - display: "Filler Identifier" - hl7v2Field: OBR.3 - - condition: $orc4 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "PGN" - hl7v2Field: ORC.4 - - condition: $orc4 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier - expressionType: resource - specs: ORC.4 - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "FGN" - hl7v2Field: ORC.4 - - condition: $orc33 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - expressionType: resource - specs: ORC.33 * - generateList: true - constants: - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - code: "PLAC" - CXIdentifierField: ORC.33 - -code: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: OBR.4 - -authoredOn: - condition: $orderControl EQUALS NW - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: ORC.9 - orderControl: String, ORC.1 -_authoredOn: - expressionType: nested - condition: $orderControl EQUALS NW && $dateTimeIn NOT_NULL - vars: - dateTimeIn: ORC.9 - orderControl: String, ORC.1 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $dateTimeIn - expressionType: HL7Spec - -requester: - expressionType: nested - vars: - orc12: STRING_ALL, ORC.12 - obr16: STRING_ALL, OBR.16 - orc14: STRING_ALL, ORC.14 - obr17: STRING_ALL, OBR.17 - orc21: STRING_ALL, ORC.21 - orc22: STRING_ALL, ORC.22 - orc23: STRING_ALL, ORC.23 - orc24: STRING_ALL, ORC.24 - expressions: - - condition: $orc21 NOT_NULL || $orc22 NOT_NULL || $orc23 NOT_NULL - expressionType: reference - valueOf: segments/ORC/PractitionerRole - - condition: $orc21 NULL && $orc22 NULL && $orc23 NULL - expressionType: nested - expressions: - - expressionType: reference - condition: $orc12 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - specs: ORC.12 - vars: - XADAddress: ORC.24 - constants: - XCNHL7Field: ORC.12 - - expressionType: reference - condition: $orc12 NULL && $obr16 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - specs: OBR.16 - vars: - XADAddress: ORC.24 - constants: - XCNHL7Field: OBR.16 - -_requester: - vars: - orc14: STRING_ALL, ORC.14 - obr17: STRING_ALL, OBR.17 - expressionType: nested - expressions: - - condition: $orc14 NOT_NULL - expressionType: nested - expressionsMap: - extension: - generateList: true - specs: ORC.14 * - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: callback-number - valueContactPoint: - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - expressionType: resource - constants: - hl7v2Field: ORC.14 - - condition: $orc14 NULL && $obr17 NOT_NULL - expressionType: nested - expressionsMap: - extension: - generateList: true - specs: OBR.17 * - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: callback-number - valueContactPoint: - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - expressionType: resource - constants: - hl7v2Field: OBR.17 - -locationCode: - vars: - orc29: STRING_ALL, ORC.29 - condition: $orc29 NOT_NULL - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.29 - -reasonCode: - vars: - obr31: STRING_ALL, OBR.31 - condition: $obr31 NOT_NULL - valueOf: datatypes/CWE_ELR/CodeableConcept - generateList: true - expressionType: resource - specs: OBR.31 - -orderDetail: - generateList: true - expressionType: nested - expressions: - - expressionType: resource - vars: - obr46: STRING_ALL, OBR.46 - condition: $obr46 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: OBR.46 * - generateList: true - constants: - hl7v2Field: OBR.46 - - expressionType: resource - vars: - obr47: STRING_ALL, OBR.47 - condition: $obr47 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: OBR.47 * - generateList: true - constants: - hl7v2Field: OBR.47 - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - vars: - orc1: STRING, ORC.1 - condition: $orc1 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: business-event - valueCode: - type: STRING - expressionType: HL7Spec - valueOf: ORC.1 - - expressionType: nested - vars: - orc9: STRING, ORC.9 - condition: $orc9 NOT_NULL && $orc9 NOT_EQUALS NW - expressionsMap: - url: - type: SYSTEM_URL - value: business-event - valueString: - type: STRING - expressionType: HL7Spec - valueOf: ORC.9 - - expressionType: nested - vars: - orc25: ORC.25 - condition: $orc25 NOT_NULL - expressionsMap: - url: - type: SYSTEM_URL - value: status-modifier - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: ORC.25 - # ORC data - - expressionType: resource - valueOf: segments/ORC/ORCExtension - # OBR Data - - expressionType: resource - valueOf: segments/ORC/OBRExtension - -subject: - valueOf: datatype/Reference - expressionType: resource - specs: $Patient - -note: - valueOf: segments/NTE/Annotation - expressionType: resource - generateList: true - specs: NTE diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml deleted file mode 100644 index 5a7d46505ba..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml +++ /dev/null @@ -1,62 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Specimen -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -collection: - condition: $spm7 NOT_NULL - expressionType: nested - generateList: true - expressionsMap: - collectedPeriod: - condition: $end NOT_NULL - expressionType: nested - vars: - start: OBR.7 - end: OBR.8 - dateTimeIn: OBR.7 - dateTimeOut: OBR.8 - expressions: - - valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period - expressionType: resource - collectedDateTime: - expressionType: nested - vars: - dateTimeIn: OBR.7 - end: OBR.8 - expressions: - - condition: $end NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - collector: - condition: $obr10 NOT_NULL - vars: - obr10: OBR.10 - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - specs: OBR.10 - -note_collectors-comment: - condition: $obr39 NOT_NULL - generateList: true - vars: - obr39: STRING_ALL, OBR.39 - specs: OBR.39 * - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/Annotation - expressionType: resource - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: hl7v2Segment - valueString: - valueOf: 'OBR' \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml deleted file mode 100644 index 308be65fdd4..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml +++ /dev/null @@ -1,215 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: pd1-patient-additional-demographic - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - specs: PD1.1 * - condition: $pd11 NOT_NULL - generateList: true - vars: - pd11: STRING_ALL, PD1.1 - expressionsMap: - url: - type: STRING - value: PD1.1 - valueString: - type: STRING - valueOf: PD1.1 - expressionType: HL7Spec - - expressionType: nested - condition: $pd12 NOT_NULL - specs: PD1.2 - vars: - pd12: STRING_ALL, PD1.2 - expressionsMap: - url: - type: STRING - value: PD1.2 - valueString: - type: STRING - valueOf: PD1.2 - expressionType: HL7Spec - - expressionType: nested - condition: $pd18 NOT_NULL - specs: PD1.8 - vars: - pd18: STRING_ALL, PD1.8 - expressionsMap: - url: - type: STRING - value: PD1.8 - valueString: - type: STRING - valueOf: PD1.8 - expressionType: HL7Spec - - expressionType: nested - condition: $pd19 NOT_NULL - vars: - pd19: STRING_ALL, PD1.9 - expressionsMap: - url: - type: STRING - value: PD1.9 - valueString: - type: STRING - valueOf: PD1.9 - expressionType: HL7Spec - - expressionType: nested - specs: PD1.10 * - condition: $pd110 NOT_NULL - generateList: true - vars: - pd110: STRING_ALL, PD1.10 - expressionsMap: - url: - type: STRING - value: PD1.10 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - expressionType: resource - constants: - CXIdentifierField: PD1.10 - - expressionType: nested - condition: $pd111 NOT_NULL - specs: PD1.11 - vars: - pd111: STRING_ALL, PD1.11 - expressionsMap: - url: - type: STRING - value: PD1.11 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept - expressionType: resource - - expressionType: nested - condition: $pd112 NOT_NULL - vars: - pd112: STRING_ALL, PD1.12 - expressionsMap: - url: - type: STRING - value: PD1.12 - valueString: - type: STRING - valueOf: PD1.12 - expressionType: HL7Spec - - expressionType: nested - condition: $pd113 NOT_NULL - vars: - pd113: STRING_ALL, PD1.13 - expressionsMap: - url: - type: STRING - value: PD1.13 - valueString: - type: STRING - valueOf: PD1.13 - expressionType: HL7Spec - - expressionType: nested - vars: - pd114: STRING_ALL, PD1.14 - condition: $pd114 NOT_NULL - specs: PD1.14 * - generateList: true - expressionsMap: - url: - type: STRING - value: PD1.14 - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference - - expressionType: nested - specs: PD1.15 * - condition: $pd115 NOT_NULL - generateList: true - vars: - pd115: STRING_ALL, PD1.15 - expressionsMap: - url: - type: STRING - value: PD1.15 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept - expressionType: resource - - expressionType: nested - condition: $pd116 NOT_NULL - specs: PD1.16 - vars: - pd116: STRING_ALL, PD1.16 - expressionsMap: - url: - type: STRING - value: PD1.16 - valueString: - type: STRING - valueOf: PD1.16 - expressionType: HL7Spec - - expressionType: nested - condition: $pd117 NOT_NULL - vars: - pd117: STRING_ALL, PD1.17 - expressionsMap: - url: - type: STRING - value: PD1.17 - valueString: - type: STRING - valueOf: PD1.17 - expressionType: HL7Spec - - expressionType: nested - condition: $pd118 NOT_NULL - vars: - pd118: STRING_ALL, PD1.18 - expressionsMap: - url: - type: STRING - value: PD1.18 - valueString: - type: STRING - valueOf: PD1.18 - expressionType: HL7Spec - - expressionType: nested - condition: $pd119 NOT_NULL - specs: PD1.19 - vars: - pd119: STRING_ALL, PD1.19 - expressionsMap: - url: - type: STRING - value: PD1.19 - valueString: - type: STRING - valueOf: PD1.19 - expressionType: HL7Spec - - expressionType: nested - condition: $pd120 NOT_NULL - specs: PD1.20 - vars: - pd120: STRING_ALL, PD1.20 - expressionsMap: - url: - type: STRING - value: PD1.20 - valueString: - type: STRING - valueOf: PD1.20 - expressionType: HL7Spec - - expressionType: nested - condition: $pd121 NOT_NULL - specs: PD1.21 - vars: - pd121: STRING_ALL, PD1.21 - expressionsMap: - url: - type: STRING - value: PD1.21 - valueString: - type: STRING - valueOf: PD1.21 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml deleted file mode 100644 index 27e2a0a2f77..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml +++ /dev/null @@ -1,87 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: pid-patient - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - condition: $pid8 NOT_NULL - vars: - pid8: STRING_ALL, PID.8 - expressionsMap: - url: - type: STRING - value: PID.8 - valueString: - type: STRING - valueOf: PID.8 - expressionType: HL7Spec - - expressionType: nested - specs: PID.18 - condition: $pid18 NOT_NULL - generateList: true - vars: - pid18: STRING_ALL, PID.18 - expressionsMap: - url: - type: STRING - value: PID.18 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - expressionType: resource - constants: - CXIdentifierField: PID.18 - - expressionType: nested - condition: $pid24 NOT_NULL - vars: - pid24: STRING_ALL, PID.24 - expressionsMap: - url: - type: STRING - value: PID.24 - valueString: - type: STRING - valueOf: PID.24 - expressionType: HL7Spec - - expressionType: nested - condition: $pid30 NOT_NULL - vars: - pid30: STRING_ALL, PID.30 - expressionsMap: - url: - type: STRING - value: PID.30 - valueString: - type: STRING - valueOf: PID.30 - expressionType: HL7Spec - - expressionType: nested - specs: PID.32 * - generateList: true - condition: $pid32 NOT_NULL - vars: - pid32: STRING_ALL, PID.32 - expressionsMap: - url: - type: STRING - value: PID.32 - valueString: - type: STRING - valueOf: PID.32 - expressionType: HL7Spec - - expressionType: nested - specs: PID.38 * - condition: $pid38 NOT_NULL - vars: - pid38: STRING_ALL, PID.38 - expressionsMap: - url: - type: STRING - value: PID.38 - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml deleted file mode 100644 index 7ff487fc5ff..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml +++ /dev/null @@ -1,577 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Patient - -# - PID.2 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both fields to -# NULLDT. Thus, this field is not being mapped. -# - PID.4 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both fields to -# NULLDT. Thus, this field is not being mapped. -# - PID.6: The inventory maps the value to a `valueString` extention but `valueHumanName` is available and fully captures -# the values, so it is being used over `valueString` -# - PID.12 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both -# fields to NULLDT. Thus, this field is not being mapped. -# - PID.15 allows repeats in the NIST HL7v2.5.1 specs, however the HAPI models for v2.5.1 and v2.7 do not support -# repetitions in those fields. Thus, any repetitions of the field will be ignored. -# - PID.19 and PID.20 are deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both -# fields to NULLDT. Thus, this field is not being mapped. -# - PID.21: The inventory does not include a FHIR field on patient that this should be mapped to. We have decided to map -# to Patient.link which includes a reference to RelatedPerson - - -# - PD1.4 Deprecated in NIST, set to NullDT in HAPI. Field not mapped - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -contact: - vars: - nk1: NK1 - condition: $nk1 NOT_NULL - expressionType: nested - generateList: true - expressionsMap: - name: - expressionType: resource - generateList: true - specs: NK1.2 * - valueOf: datatypes/XPN_ELR/HumanName - extension: - generateList: true - expressionType: nested - specs: NK1.3 - expressionsMap: - url: - type: SYSTEM_URL - value: relationship - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - address: - condition: $nk14 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - generateList: true - expressionType: resource - specs: NK1.4 * - vars: - nk14: STRING_ALL, NK1.4 - telecom: - expressionType: nested - generateList: true - expressions: - - condition: $nk15 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: NK1.5 * - vars: - nk15: STRING_ALL, NK1.5 - organization: - condition: $XONOrganization NOT_NULL || $XPNContactName NOT_NULL || $XPNContactTelecom NOT_NULL || $XADContactAddress NOT_NULL - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - specs: NK1.13 - vars: - XONOrganization: NK1.13 - XPNContactName: NK1.30 - XPNContactTelecom: NK1.31 - XADContactAddress: NK1.32 - - -identifier: - expressionType: nested - generateList: true - expressions: - - condition: $pid3 NOT_NULL - expressionType: resource - specs: PID.3 * - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - generateList: true - vars: - pid3: STRING_ALL, PID.3 - constants: - CXIdentifierField: PID.3 - -name: - expressionType: nested - generateList: true - expressions: - - condition: $pid5 NOT_NULL - expressionType: resource - generateList: true - specs: PID.5 * - valueOf: datatypes/XPN_ELR/HumanName - vars: - pid5: STRING_ALL, PID.5 - constants: - hl7Use: patient-name - -birthDate: - type: DATE - valueOf: PID.7 - expressionType: HL7Spec - -_birthDate: - condition: $pid7 NOT_NULL - vars: - pid7: PID.7 - dateTimeIn: PID.7, GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID) - isTime: PID.7, GeneralUtils.dateTimeWithZoneId(isTime,ZONEID).length() > 10 - expressionType: nested - expressionsMap: - # this extension is needed to comply with the official HL7v2-to-FHIR mapping - extension_1: - condition: $dateTimeIn NOT_NULL && $isTime EQUALS "true" - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: birthTime - valueDateTime: - valueOf: $dateTimeIn - expressionType: HL7Spec - # this extension is needed to reliably translate back to HL7 from FHIR - extension_2: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $pid7 - expressionType: HL7Spec - -gender: - type: ADMINISTRATIVE_GENDER - valueOf: PID.8 - expressionType: HL7Spec - -address: - condition: $pid11 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address - generateList: true - expressionType: resource - specs: PID.11 * - vars: - pid11: STRING_ALL, PID.11 - -telecom: - expressionType: nested - generateList: true - expressions: - - condition: $pid13 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: PID.13 * - vars: - pid13: STRING_ALL, PID.13 - constants: - useCode: home - - condition: $pid14 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint - generateList: true - expressionType: resource - specs: PID.14 * - vars: - pid14: STRING_ALL, PID.14 - constants: - useCode: work - -communication: - expressionType: nested - condition: $pid15 NOT_NULL - vars: - pid15: STRING_ALL, PID.15 - expressionsMap: - language: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: PID.15 - -maritalStatus: - condition: $pid16 NOT_NULL - vars: - pid16: STRING_ALL, PID.16 - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: PID.16 - -link: - condition: $pid21 NOT_NULL - expressionType: nested - vars: - pid21: STRING_ALL, PID.21 - specs: PID.21 * - generateList: true - expressionsMap: - other: - valueOf: ../../datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother - expressionType: reference - type: - type: STRING - valueOf: "seealso" - -multipleBirthBoolean: - condition: $multipleBirthIndicator NOT_NULL && $birthOrder NULL - type: BOOLEAN - valueOf: PID.24 - expressionType: HL7Spec - vars: - multipleBirthIndicator: PID.24 - birthOrder: PID.25 - -multipleBirthInteger: - condition: $birthOrder NOT_NULL - type: INTEGER - valueOf: PID.25 - expressionType: HL7Spec - vars: - birthOrder: PID.25 - -deceasedBoolean: - condition: $deceasedBool NOT_NULL && $deceasedDateTime NULL - type: BOOLEAN - valueOf: PID.30 - expressionType: HL7Spec - vars: - deceasedBool: PID.30 - deceasedDateTime: PID.29 - -deceasedDateTime: - condition: $dateTimeIn NOT_NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: PID.29 - -_deceasedDateTime: - expressionType: nested - condition: $pid29 NOT_NULL - vars: - pid29: STRING, PID.29 - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: PID.29 - expressionType: HL7Spec - -meta: - expressionType: nested - generateList: true - expressionsMap: - lastUpdated: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: PID.33 - _lastUpdated: - expressionType: nested - condition: $pid33 NOT_NULL - vars: - pid33: STRING, PID.33 - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: PID.33 - expressionType: HL7Spec - extension: - generateList: true - condition: $pid34 NOT_NULL - vars: - pid34: STRING_ALL, PID.34 - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: last-updated-facility-namespace-id - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - expressionType: reference - specs: PID.34 - -generalPractitioner_Organization: - condition: $pd13 NOT_NULL - generateList: true - specs: PD1.3 * - vars: - pd13: STRING_ALL, PD1.3 - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference - -extension: - expressionType: nested - generateList: true - useGroup: true - expressions: - - expressionType: nested - generateList: true - specs: NTE - expressionsMap: - url: - type: SYSTEM_URL - value: patient-notes - valueAnnotation: - valueOf: segments/NTE/Annotation - expressionType: resource - - expressionType: resource - valueOf: segments/PID/PIDExtension - - expressionType: resource - valueOf: segments/PID/PD1Extension - - expressionType: nested - generateList: true - condition: $pid6 NOT_NULL - vars: - pid6: STRING_ALL, PID.6 * - specs: PID.6 * - expressionsMap: - url: - type: SYSTEM_URL - value: mothersMaidenName - valueHumanName: - valueOf: datatypes/XPN_ELR/HumanName - expressionType: resource - - condition: $pid10 NOT_NULL - expressionType: nested - specs: PID.10 * - generateList: true - vars: - pid10: STRING_ALL, PID.10 - expressionsMap: - url: - type: SYSTEM_URL - value: race - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: CWE - - condition: $pid17 NOT_NULL - expressionType: nested - generateList: true - vars: - pid17: STRING_ALL, PID.17 - expressionsMap: - url: - type: SYSTEM_URL - value: religion - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: PID.17 - - condition: $pid22 NOT_NULL - expressionType: nested - generateList: true - vars: - pid22: STRING_ALL, PID.22 - specs: PID.22 * - expressionsMap: - url: - type: SYSTEM_URL - value: ethnic-group - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - - condition: $pid23 NOT_NULL - expressionType: nested - generateList: true - vars: - pid23: STRING_ALL, PID.23 - expressionsMap: - url: - type: SYSTEM_URL - value: birthPlace - valueAddress: - expressionType: nested - generateList: true - expressionsMap: - text: - valueOf: PID.23 - type: STRING - expressionType: HL7Spec - - expressionType: nested - condition: $pid26 NOT_NULL - generateList: true - vars: - pid26: STRING_ALL, PID.26 - constants: - hl7v2Field: PID.26 - expressionsMap: - url: - type: SYSTEM_URL - value: patient-citizenship - extension: - generateList: true - expressionType: nested - specs: PID.26 * - expressionsMap: - url: - type: SYSTEM_URL - value: code - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - - expressionType: nested - condition: $pid39 NOT_NULL - generateList: true - vars: - pid39: STRING_ALL, PID.39 - constants: - hl7v2Field: PID.39 - expressionsMap: - url: - type: SYSTEM_URL - value: patient-citizenship - extension: - generateList: true - expressionType: nested - specs: PID.39 * - expressionsMap: - url: - type: SYSTEM_URL - value: code - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - - condition: $pid27 NOT_NULL - vars: - pid27: STRING_ALL, PID.27 - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: veteran-military-status - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: PID.27 - - condition: $pid31 NOT_NULL - vars: - pid31: STRING_ALL, PID.31 - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: identity-unknown - valueString: - type: STRING - valueOf: PID.31 - expressionType: HL7Spec - - condition: $pid35 NOT_NULL || $pid36 NOT_NULL || $pid37 NOT_NULL - vars: - pid35: STRING_ALL, PID.35 - pid36: STRING_ALL, PID.36 - pid37: STRING, PID.37 - expressionType: nested - generateList: true - constants: - hl7v2Field: PID.35 - expressionsMap: - url: - type: SYSTEM_URL - value: patient-animal - extension: - generateList: true - expressionType: nested - expressions: - - condition: $pid35 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: species - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: PID.35 - - condition: $pid36 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: breed - valueCodeableConcept: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: PID.36 - - condition: $pid37 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: strain - valueString: - type: STRING - valueOf: PID.37 - expressionType: HL7Spec - - condition: $pd15 NOT_NULL - vars: - pd15: STRING_ALL, PD1.5 - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: studentStatus - valueString: - type: STRING - valueOf: PD1.5 - expressionType: HL7Spec - - condition: $pd16 NOT_NULL - vars: - pd16: STRING_ALL, PD1.6 - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: patient-disability - valueString: - type: STRING - valueOf: PD1.6 - expressionType: HL7Spec - - condition: $pd17 NOT_NULL - vars: - pd17: STRING_ALL, PD1.7 - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: livingWill - valueString: - type: STRING - valueOf: PD1.7 - expressionType: HL7Spec - #Mapping inventory for XON[string] - - expressionType: nested - generateList: true - specs: PD1.14 * - expressionsMap: - url: - type: SYSTEM_URL - value: patient-congregation - valueString: - type: STRING - valueOf: XON.1 |XON.10 - expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml deleted file mode 100644 index 0d87d0aa307..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml +++ /dev/null @@ -1,63 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Provenance -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -target: - valueOf: datatype/Reference - generateList: true - expressionType: resource - specs: $Patient - useGroup: true - -recorded: - type: STRING - valueOf: "GeneralUtils.getCurrentDateTimeUsingZoneId(ZONEID)" - expressionType: JEXL - -activity: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "UPDATE" - system: - type: STRING - valueOf: "https://terminology.hl7.org/CodeSystem/v3-DataOperation" - -occurredDateTime: - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: PID.33 - -agent: - expressionType: nested - generateList: true - vars: - msh34: STRING_ALL, PID.34 - condition: $msh34 NOT_NULL - expressionsMap: - type: - expressionType: nested - expressionsMap: - coding: - expressionType: nested - expressionsMap: - code: - type: STRING - valueOf: "performer" - system: - type: SYSTEM_URL - valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" - who: - valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization - expressionType: reference - specs: PID.34 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml deleted file mode 100644 index 3dd7c170849..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml +++ /dev/null @@ -1,509 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Encounter - -# Not mapped because fields are deprecated in NIST and not in the mapping inventory -# PV1.15 -# PV1.21-29 -# PV1.40 -# PV2.2 -# PV2.4-6 -# PV2.14 -# PV2.16-20 -# PV2.24 -# PV2.27 -# PV2.28 -# PV2.30 - 37 -# PV2.39 -# PV2.41-49 -# PV1.20 is not mapped because there is no mapping for the FC datatype - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - - -class: - type: ACT_ENCOUNTER - specs: PV1.2 - expressionType: HL7Spec - -status: - vars: - pv145: STRING, PV1.45 - expressionType: nested - expressions: - - condition: $pv145 NOT_NULL - type: STRING - value: "finished" - - condition: $pv145 NULL - type: ENCOUNTER_STATUS_CODE_FHIR - expressionType: HL7Spec - specs: PV1.2 - -_class: - vars: - pv12: STRING_ALL, PV1.2 - condition: $pv12 NOT_NULL - expressionType: nested - expressionsMap: - extension: - expressionType: nested - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: pv1-2-patient-class - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.2 - -location: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - pv13: String_ALL, PV1.3 - condition: $pv13 NOT_NULL - expressionsMap: - location: - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - expressionType: reference - specs: PV1.3 - status: - expressionType: nested - vars: - pv121: STRING, PV1.2.1 - expressions: - - condition: $pv121 EQUALS P - type: STRING - value: planned - - condition: $pv121 NOT_EQUALS P || $pv121 NULL - type: STRING - value: active - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - value: PV1.3 - - expressionType: nested - vars: - pv16: STRING_ALL, PV1.6 - condition: $pv16 NOT_NULL - expressionsMap: - location: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - specs: PV1.6 - status: - type: STRING - value: completed - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - value: PV1.6 - - expressionType: nested - vars: - pv111: STRING_ALL, PV1.11 - condition: $pv111 NOT_NULL - expressionsMap: - location: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - specs: PV1.11 - status: - type: STRING - value: "active" - extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - value: PV1.11 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: temporary-location - valueBoolean: - type: STRING - value: "true" - - expressionType: nested - vars: - pv142: STRING_ALL, PV1.42 - condition: $pv142 NOT_NULL - expressionsMap: - location: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - specs: PV1.42 - status: - type: STRING - value: "planned" - extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - value: PV1.42 - - expressionType: nested - vars: - pv143: STRING_ALL, PV1.43 - condition: $pv143 NOT_NULL - expressionsMap: - location: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location - specs: PV1.43 - status: - type: STRING - value: "completed" - extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - value: PV1.43 - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: temporary-location - valueBoolean: - type: STRING - value: "true" - -participant: - generateList: true - expressionType: nested - expressions: - - vars: - pv17: STRING_ALL, PV1.7 - condition: $pv17 NOT_NULL - expressionType: nested - constants: - XCNHL7Field: PV1.7 - specs: PV1.7 * - generateList: true - expressionsMap: - individual: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - type: - expressionType: nested - generateList: true - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - value: "ATND" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - display: - type: STRING - value: "attender" - - vars: - pv18: STRING_ALL, PV1.8 - condition: $pv18 NOT_NULL - expressionType: nested - constants: - XCNHL7Field: PV1.8 - specs: PV1.8 * - generateList: true - expressionsMap: - individual: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - type: - expressionType: nested - generateList: true - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - value: "REF" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - text: - type: STRING - value: "referrer" - - vars: - pv19: STRING_ALL, PV1.9 - condition: $pv19 NOT_NULL - expressionType: nested - constants: - XCNHL7Field: PV1.9 - specs: PV1.9 * - generateList: true - expressionsMap: - individual: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - type: - expressionType: nested - generateList: true - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - value: "CON" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - text: - type: STRING - value: "consultant" - - vars: - pv117: STRING_ALL, PV1.17 - condition: $pv117 NOT_NULL - expressionType: nested - constants: - XCNHL7Field: PV1.17 - specs: PV1.17 * - generateList: true - expressionsMap: - individual: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - type: - expressionType: nested - generateList: true - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - value: "ADM" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - text: - type: STRING - value: "admitter" - - vars: - pv152: STRING_ALL, PV1.52 - condition: $pv152 NOT_NULL - expressionType: nested - constants: - XCNHL7Field: PV1.52 - specs: PV1.52 * - generateList: true - expressionsMap: - individual: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner - type: - expressionType: nested - generateList: true - expressionsMap: - coding: - generateList: true - expressionType: nested - expressionsMap: - code: - type: STRING - value: "PART" - system: - type: STRING - value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" - text: - type: STRING - value: "Participation" - -type: - vars: - pv14: PV1.4 - condition: $pv14 NOT_NULL - type: STRING - valueOf: PV1.4 - expressionType: HL7Spec - -hospitalization: - vars: - pv15: STRING_ALL, PV1.5 - pv114: STRING_ALL, PV1.14 - pv136: STRING_ALL, PV1.36 - pv137: STRING_ALL, PV1.37 - pv138: STRING_ALL, PV1.38 - condition: $pv15 NOT_NULL || $pv113 NOT_NULL || $pv114 NOT_NULL || $pv116 NOT_NULL || $pv136 NOT_NULL || $pv137 NOT_NULL || $pv138 NOT_NULL - expressionType: nested - expressionsMap: - preAdmissionIdentifier: - condition: $pv15 NOT_NULL - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - specs: PV1.5 - admitSource: - condition: $pv114 NOT_NULL - type: STRING - valueOf: PV1.14 - expressionType: HL7Spec - dischargeDisposition: - condition: $pv136 NOT_NULL - type: STRING - valueOf: PV1.36 - expressionType: HL7Spec - destination: - condition: $pv137 NOT_NULL - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/DLD/Location - specs: PV1.37 - dietPreference: - condition: $pv138 NOT_NULL - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: PV1.38 - -serviceType: - condition: $pv110 NOT_NULL - vars: - pv110: PV1.10 - type: STRING - valueOf: PV1.10 - expressionType: HL7Spec - -identifier: - expressionType: nested - generateList: true - expressions: - - vars: - pv119: STRING_ALL, PV1.19 - condition: $pv119 NOT_NULL - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - specs: PV1.19 * - generateList: true - constants: - code: "VN" - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - CXIdentifierText: "visit number" - CXIdentifierField: PV1.19 - - vars: - pv150: STRING_ALL, PV1.50 - condition: $pv150 NOT_NULL - expressionType: resource - specs: PV1.50 * - generateList: true - valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier - constants: - CXIdentifierField: PV1.50 - system: "http://terminology.hl7.org/CodeSystem/v2-0203" - -period: - expressionType: nested - vars: - pv144: STRING, PV1.44 - pv145: STRING, PV1.45 - expressionsMap: - start: - valueOf: "GeneralUtils.dateTimeWithZoneId(pv144,ZONEID)" - expressionType: JEXL - _start: - expressionType: nested - condition: $pv144 NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: PV1.44 - expressionType: HL7Spec - end: - valueOf: "GeneralUtils.dateTimeWithZoneId(pv145,ZONEID)" - expressionType: JEXL - _end: - expressionType: nested - condition: $pv145 NOT_NULL - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: PV1.45 - expressionType: HL7Spec - -extension: - generateList: true - expressionType: nested - expressions: - - vars: - pv240: STRING_ALL, PV2.40 - condition: $pv240 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: admission-level-of-care - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - specs: PV2.40 - # # PV1 Data - - expressionType: resource - valueOf: segments/PV1/PV1Extension - # # PV2 Data - - expressionType: resource - valueOf: segments/PV1/PV2Extension - - -subject: - valueOf: datatype/Reference - expressionType: resource - specs: $Patient - - diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml deleted file mode 100644 index 8eb572d4e8f..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml +++ /dev/null @@ -1,190 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: pv1-patient-visit - -extension: - expressionType: nested - generateList: true - expressions: - - vars: - pv112: STRING_ALL, PV1.12 - condition: $pv112 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.12 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.12 - - vars: - pv118: STRING_ALL, PV1.18 - condition: $pv118 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.18 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.18 - - vars: - pv130: STRING_ALL, PV1.30 - condition: $pv130 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.30 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.30 - - vars: - pv131: STRING_ALL, PV1.31 - condition: $pv131 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.31 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.31 - - vars: - pv132: STRING_ALL, PV1.32 - condition: $pv132 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.32 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.32 - - vars: - pv133: STRING_ALL, PV1.33 - condition: $pv133 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.33 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.33 - - vars: - pv134: STRING_ALL, PV1.34 - condition: $pv134 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.34 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.34 - - vars: - pv135: STRING, PV1.35 - condition: $pv135 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.35 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.35 - - vars: - pv139: STRING_ALL, PV1.39 - condition: $pv139 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.39 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.39 - - vars: - pv141: STRING_ALL, PV1.41 - condition: $pv141 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.41 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.41 - - vars: - pv146: STRING_ALL, PV1.46 - condition: $pv146 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.46 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.46 - - vars: - pv147: STRING_ALL, PV1.47 - condition: $pv147 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.47 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.47 - - vars: - pv148: STRING_ALL, PV1.48 - condition: $pv148 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.48 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.48 - - vars: - pv149: STRING_ALL, PV1.49 - condition: $pv149 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.49 - valueDecimal: - type: STRING - expressionType: HL7Spec - valueOf: PV1.49 - - vars: - pv151: STRING_ALL, PV1.51 - condition: $pv151 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV1.51 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV1.51 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml deleted file mode 100644 index 27eeb7705fe..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml +++ /dev/null @@ -1,59 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: pv2-patient-visit-additional-information - -extension: - expressionType: nested - generateList: true - expressions: - - vars: - pv215: STRING_ALL, PV2.15 - condition: $pv215 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV2.15 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV2.15 - - vars: - pv223: STRING_ALL, PV2.23 - condition: $pv223 NOT_NULL - expressionType: nested - specs: PV2.23 * - generateList: true - expressionsMap: - url: - type: STRING - value: PV2.23 - valueReference: - expressionType: reference - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - - vars: - pv226: STRING_ALL, PV2.26 - condition: $pv226 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV2.26 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV2.26 - - vars: - pv229: STRING_ALL, PV2.29 - condition: $pv229 NOT_NULL - expressionType: nested - expressionsMap: - url: - type: STRING - value: PV2.29 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: PV2.29 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml deleted file mode 100644 index d85fdf51b87..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml +++ /dev/null @@ -1,110 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Device - -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -manufacturer: - expressionType: nested - vars: - xon1: SFT.1.1 - xon10: SFT.1.10 - expressions: - - condition: $xon1 NOT_NULL - type: String - expressionType: HL7Spec - valueOf: $xon1 - - condition: $xon1 NULL && $xon10 NOT_NULL - type: String - expressionType: HL7Spec - valueOf: $xon10 - -version: - expressionType: nested - expressionsMap: - value: - condition: $sft2 NOT_NULL - vars: - sft2: SFT.2 - type: String - expressionType: HL7Spec - valueOf: $sft2 - extension: - generateList: true - expressionType: nested - condition: $dateTimeIn NOT_NULL - vars: - dateTimeIn: SFT.6, GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID) - hl7Date: SFT.6 - expressionsMap: - url: - type: SYSTEM_URL - value: software-install-date - valueDateTime: - valueOf: $dateTimeIn - expressionType: HL7Spec - _valueDateTime: - expressionType: nested - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $hl7Date - expressionType: HL7Spec - -deviceName: - expressionType: nested - condition: $sft3 NOT_NULL - vars: - sft3: SFT.3 - expressionsMap: - name: - type: String - expressionType: HL7Spec - valueOf: $sft3 - type: - type: String - value: "manufacturer-name" - -modelNumber: - condition: $sft4 NOT_NULL - vars: - sft4: SFT.4 - type: String - expressionType: HL7Spec - valueOf: $sft4 - -note: - expressionType: nested - condition: $sft5 NOT_NULL - vars: - sft5: SFT.5 - expressionsMap: - text: - type: String - expressionType: HL7Spec - valueOf: $sft5 - -extension: - expressionType: nested - vars: - sft1: STRING_ALL, SFT.1 - condition: $sft1 NOT_NULL - generateList: true - expressionsMap: - url: - type: SYSTEM_URL - value: software-vendor-org - valueReference: - valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization - expressionType: reference - specs: SFT.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml deleted file mode 100644 index a92c289dfcd..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml +++ /dev/null @@ -1,28 +0,0 @@ -# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Specimen -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - vars: - eip1: EIP.1 - eip2: EIP.2 - generateList: true - expressionType: nested - specs: EIP * - expressions: - - condition: $eip1 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier - expressionType: resource - constants: - hl7Use: "specimen-id-placer" - backupExtension: "filler-assigned-identifier" - - condition: $eip2 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier - expressionType: resource - constants: - hl7Use: "specimen-id-filler" - backupExtension: "placer-assigned-identifier" \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml deleted file mode 100644 index 70159907711..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml +++ /dev/null @@ -1,237 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -url: - type: SYSTEM_URL - value: spm-specimen - -extension: - generateList: true - expressionType: nested - expressions: - - expressionType: nested - vars: - spm31: SPM.3.1 - condition: $spm31 NOT_NULL - specs: SPM.3 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.3.1 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier - expressionType: resource - constants: - hl7v2Field: SPM.3 - backupExtension: "filler-assigned-identifier" - - expressionType: nested - vars: - spm32: SPM.3.2 - condition: $spm32 NOT_NULL - specs: SPM.3 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.3.2 - valueIdentifier: - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier - expressionType: resource - constants: - hl7v2Field: SPM.3 - backupExtension: "placer-assigned-identifier" - - expressionType: nested - vars: - spm5: SPM.5 - condition: $spm5 NOT_NULL - specs: SPM.5 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.5 - valueCodeableConcept: - expressionType: resource - valueOf: datatypes/CWE_ELR/CodeableConcept - - expressionType: nested - vars: - spm6: SPM.6 - condition: $spm6 NOT_NULL - specs: SPM.6 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.6 - valueCodeableConcept: - expressionType: resource - valueOf: datatypes/CWE_ELR/CodeableConcept - - expressionType: nested - vars: - spm10: SPM.10 - condition: $spm10 NOT_NULL - specs: SPM.10 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.10 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm11: SPM.11 - condition: $spm11 NOT_NULL - specs: SPM.11 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.11 - valueCodeableConcept: - expressionType: resource - valueOf: datatypes/CWE_ELR/CodeableConcept - - expressionType: nested - vars: - spm13: SPM.13 - condition: $spm13 NOT_NULL - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.13 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SPM.13 - - expressionType: nested - vars: - spm15: SPM.15 - condition: $spm15 NOT_NULL - specs: SPM.15 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.15 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm16: SPM.16 - condition: $spm16 NOT_NULL - specs: SPM.16 * - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.16 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm19: SPM.19 - condition: $spm19 NOT_NULL - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.19 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SPM.19 - - expressionType: nested - vars: - spm20: SPM.20 - condition: $spm20 NOT_NULL - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.20 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SPM.20 - - expressionType: nested - vars: - spm22: SPM.22 - condition: $spm22 NOT_NULL - specs: SPM.22 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.22 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm23: SPM.23 - condition: $spm23 NOT_NULL - specs: SPM.23 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.23 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm25: SPM.25 - condition: $spm25 NOT_NULL - specs: SPM.25 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.25 - valueQuantity: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CQ/Quantity - - expressionType: nested - vars: - spm26: SPM.26 - condition: $spm26 NOT_NULL - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.26 - valueString: - type: STRING - expressionType: HL7Spec - valueOf: SPM.26 - - expressionType: nested - vars: - spm28: SPM.28 - condition: $spm28 NOT_NULL - specs: SPM.28 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.28 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - - expressionType: nested - vars: - spm29: SPM.29 - condition: $spm29 NOT_NULL - specs: SPM.29 - generateList: true - expressionsMap: - url: - type: STRING - value: SPM.29 - valueCodeableConcept: - expressionType: resource - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml deleted file mode 100644 index b01680278a4..00000000000 --- a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml +++ /dev/null @@ -1,232 +0,0 @@ -# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json - -resourceType: Specimen -id: - type: STRING - valueOf: "GeneralUtils.generateResourceId()" - expressionType: JEXL - -identifier: - vars: - spm2: SPM.2 - generateList: true - expressionType: nested - expressions: - - condition: $spm21 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier - expressionType: resource - specs: SPM.2 - vars: - spm21: SPM.2.1 - constants: - hl7v2Component: SPM.2.1 - backupExtension: "filler-assigned-identifier" - - condition: $spm22 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier - expressionType: resource - specs: SPM.2 - vars: - spm22: SPM.2.2 - constants: - hl7v2Component: SPM.2.2 - backupExtension: "placer-assigned-identifier" - -parent: - condition: $spm3 NOT_NULL - valueOf: segments/SPM/EIP/Specimen - expressionType: reference - vars: - spm3: SPM.3 - specs: SPM.3 * - -type: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: SPM.4 - -container: - condition: $spm6 NOT_NULL || $spm27 NOT_NULL - expressionType: nested - generateList: true - vars: - spm6: SPM.6 - spm27: SPM.27 - expressionsMap: - additiveCodeableConcept: - expressionType: nested - expressions: - - condition: $spm6 NOT_NULL - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: SPM.6 * - type: - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - specs: SPM.27 - -collection: - condition: $spm7 NOT_NULL || $spm8 NOT_NULL || $spm9 NOT_NULL || $spm12 NOT_NULL || $spm17 NOT_NULL - expressionType: nested - generateList: true - vars: - spm7: SPM.7 - spm8: SPM.8 - spm9: SPM.9 - spm12: SPM.12 - spm17: SPM.17 - expressionsMap: - method: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: SPM.7 - bodySite: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - specs: SPM.8 - extension: - condition: $spm9 NOT_NULL - expressionType: nested - generateList: true - specs: SPM.9 * - expressionsMap: - url: - type: SYSTEM_URL - value: bodySiteModifier - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - quantity: - valueOf: datatypes/CQ_ELR/Quantity - expressionType: resource - specs: SPM.12 - collectedPeriod: - expressionType: nested - vars: - spm17: SPM.17 - expressions: - - condition: $end NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period - expressionType: resource - specs: SPM.17 - vars: - start: SPM.17.1 - end: SPM.17.2 - dateTimeIn: SPM.17.1 - dateTimeOut: SPM.17.2 - collectedDateTime: - expressionType: nested - expressions: - - condition: $end NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: SPM.17.1 - end: SPM.17.2 - _collectedDateTime: - condition: $dateTimeIn NOT_NULL && $end NULL - expressionType: nested - vars: - dateTimeIn: SPM.17.1 - end: SPM.17.2 - expressionsMap: - extension_1: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $dateTimeIn - expressionType: HL7Spec - -note: - condition: $spm14 NOT_NULL - expressionType: nested - generateList: true - vars: - spm14: STRING_ALL, SPM.14 - specs: SPM.14 * - expressionsMap: - text: - type: STRING - valueOf: ST - expressionType: HL7Spec - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2Field - valueString: - type: STRING - valueOf: SPM.14 - -receivedTime: - condition: $dateTimeIn NOT_NULL - type: STRING - valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" - expressionType: JEXL - vars: - dateTimeIn: SPM.18.1 -_receivedTime: - condition: $dateTimeIn NOT_NULL - expressionType: nested - vars: - dateTimeIn: SPM.18.1 - expressionsMap: - extension: - generateList: true - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - value: hl7v2-date-time - valueString: - type: STRING - valueOf: $dateTimeIn - expressionType: HL7Spec - -status: - type: SPECIMEN_STATUS - valueOf: SPM.20 - expressionType: HL7Spec - -extension: - expressionType: nested - generateList: true - expressions: - - expressionType: nested - expressionsMap: - url: - type: SYSTEM_URL - valueOf: hl7v2Segment - valueString: - valueOf: 'SPM' - - expressionType: resource - valueOf: segments/SPM/SPMExtension - - expressionType: nested - condition: $spm21 NOT_NULL - generateList: true - vars: - spm21: SPM.21 - specs: SPM.21 * - expressionsMap: - url: - type: SYSTEM_URL - value: reject-reason - valueCodeableConcept: - valueOf: datatypes/CWE_ELR/CodeableConcept - expressionType: resource - -condition: - vars: - spm24: SPM.24 - condition: $spm24 NOT_NULL - valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept - expressionType: resource - generateList: true - specs: SPM.24 * diff --git a/prime-router/settings/STLTs/NJ/nj-doh.yml b/prime-router/settings/STLTs/NJ/nj-doh.yml new file mode 100644 index 00000000000..bbd289a2f63 --- /dev/null +++ b/prime-router/settings/STLTs/NJ/nj-doh.yml @@ -0,0 +1,110 @@ +- name: "nj-doh" + description: "New Jersey Department of Health" + jurisdiction: "STATE" + stateCode: "NJ" + countyName: null + filters: null + featureFlags: null + keys: null + senders: [] + receivers: + - name: "full-elr" + organizationName: "nj-doh" + topic: "full-elr" + customerStatus: "active" + translation: ! + schemaName: "azure:/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml" + useTestProcessingMode: false + useBatchHeaders: true + receivingApplicationName: "ELRS" + receivingApplicationOID: "2.16.840.1.113883.3.1299.5.1.6.1" + receivingFacilityName: "NJDOH" + receivingFacilityOID: "2.16.840.1.113883.3.1299" + messageProfileId: null + replaceValue: { } + replaceValueAwithB: { } + reportingFacilityName: null + reportingFacilityId: null + reportingFacilityIdType: null + suppressQstForAoe: false + suppressHl7Fields: null + suppressAoe: false + defaultAoeToUnknown: false + replaceUnicodeWithAscii: false + useBlankInsteadOfUnknown: null + truncateHDNamespaceIds: true + truncateHl7Fields: "OBX-23-1,ORC-12-3,OBR-16-3,OBX-17-1,ORC-12-1,OBR-16-1" + usePid14ForPatientEmail: false + convertTimestampToDateTime: null + cliaForOutOfStateTesting: null + cliaForSender: { } + phoneNumberFormatting: "STANDARD" + suppressNonNPI: false + processingModeCode: null + replaceDiiWithOid: null + applyOTCDefault: false + useOrderingFacilityName: "STANDARD" + valueSetOverrides: { } + nameFormat: "STANDARD" + receivingOrganization: null + convertPositiveDateTimeOffsetToNegative: false + stripInvalidCharsRegex: null + convertDateTimesToReceiverLocalTime: false + useHighPrecisionHeaderDateTimeFormat: false + type: "HL7" + truncationConfig: + truncateHDNamespaceIds: true + truncateHl7Fields: + - "OBX-23-1" + - "ORC-12-3" + - "OBR-16-3" + - "OBX-17-1" + - "ORC-12-1" + - "OBR-16-1" + customLengthHl7Fields: { } + jurisdictionalFilter: + - "(Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state.exists() and Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state = 'NJ') or (Bundle.entry.resource.ofType(Patient).address.state.exists() and Bundle.entry.resource.ofType(Patient).address.state = 'NJ')" + qualityFilter: + # hasOneOf(patient_street, patient_zip_code, patient_phone_number, patient_email) + - "Bundle.entry.resource.ofType(Patient).where(address.line[0].empty() and address.postalCode.empty() and telecom.where(system = 'phone').value.empty() and telecom.where(system = 'email').value.empty()).count() = 0" + # hasOneOf(order_test_date, specimen_collection_date_time, test_result_date) + - "Bundle.entry.resource.ofType(DiagnosticReport).where(basedOn.resolve().extension('https://reportstream.cdc.gov/fhir/StructureDefinition/effective-date').empty() and specimen.resolve().collection.collected.empty() and effective.empty() and issued.empty() and result.resolve().effective.empty()).count() = 0" + # isValidClia(testing_lab_clia) + - "Bundle.entry.resource.ofType(ServiceRequest).performer.resolve().identifier.where(type.coding.code = 'CLIA').value.getIdType() = 'CLIA'" + # hasValidData(patient_last_name, patient_first_name, patient_dob) + - "Bundle.entry.resource.ofType(Patient).where(name.family.empty() or name.given.empty() or birthDate.empty()).count() = 0" + # hasValidData(specimen_type) + - "Bundle.entry.resource.ofType(Specimen).where(type.empty()).count() = 0" + # hasValidData(message_id) + - "Bundle.identifier.value.empty().not()" + # hasValidData(equipment_model_name, test_result) + - "Bundle.entry.resource.ofType(DiagnosticReport).result.resolve().where(method.empty() or value.coding.code.empty()).count() = 0" + routingFilter: [ ] + processingModeFilter: + # matches(processing_mode_code, P) + - "Bundle.entry.resource.ofType(MessageHeader).meta.tag.where(system = 'http://terminology.hl7.org/CodeSystem/v2-0103').code = 'P'" + reverseTheQualityFilter: false + deidentify: false + deidentifiedValue: "" + timing: + operation: "MERGE" + numberPerDay: 1440 + initialTime: "09:40" + timeZone: "EASTERN" + maxReportCount: 100 + whenEmpty: + action: "NONE" + onlyOncePerDay: false + description: "" + transport: ! + type: SFTP + host: sftp + port: 22 + filePath: ./upload + credentialName: DEFAULT-SFTP + conditionFilter: [ ] + mappedConditionFilter: [ ] + externalName: null + enrichmentSchemaNames: ["classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" ] + timeZone: null + dateTimeFormat: "OFFSET" diff --git a/prime-router/settings/STLTs/Oracle/oracle-rln.yml b/prime-router/settings/STLTs/Oracle/oracle-rln.yml index 150e2a1126b..bc6b9639009 100644 --- a/prime-router/settings/STLTs/Oracle/oracle-rln.yml +++ b/prime-router/settings/STLTs/Oracle/oracle-rln.yml @@ -45,9 +45,21 @@ initialTime: "00:00" timeZone: "EASTERN" maxReportCount: 100 + description: "" transport: - type: "SFTP" - host: "172.17.6.20" - port: 22 - filePath: "./upload" - credentialName: null + reportUrl: "https://spaces.erxhubdevcert.cerner.com/etor" + authTokenUrl: "" + encryptionKeyUrl: "" + authType: "apiKey" + tlsKeystore: null + parameters: {} + jwtParams: {} + headers: + Content-Type: "text/plain" + shared-api-key: "From Vault" + authHeaders: {} + type: "REST" + externalName: null + enrichmentSchemaNames: [] + timeZone: null + dateTimeFormat: "OFFSET" diff --git a/prime-router/src/main/kotlin/ActionMessages.kt b/prime-router/src/main/kotlin/ActionMessages.kt index 104c28d480c..407d4006616 100644 --- a/prime-router/src/main/kotlin/ActionMessages.kt +++ b/prime-router/src/main/kotlin/ActionMessages.kt @@ -46,6 +46,7 @@ enum class ErrorCode { INVALID_MSG_VALIDATION, INVALID_MSG_CONVERSION, UNKNOWN, + SETTINGS_NOT_FOUND, } /** diff --git a/prime-router/src/main/kotlin/JOOQBindings.kt b/prime-router/src/main/kotlin/JOOQBindings.kt index a3a3a5b3c97..3acbca6d7db 100644 --- a/prime-router/src/main/kotlin/JOOQBindings.kt +++ b/prime-router/src/main/kotlin/JOOQBindings.kt @@ -84,15 +84,12 @@ class ActionLogDetailBinding : JsonBinding(ActionLogDetail::cla class TopicConverter : Converter { private val mapper = JacksonMapperUtilities.defaultMapper - override fun from(dbObject: String): Topic { - // Can't use Topic.valueOf, since string form and enum name are different - // i.e. `full-elr` vs `FULL_ELR` - return mapper.convertValue(TextNode(dbObject), Topic::class.java) - } + override fun from(dbObject: String?): Topic? = + dbObject?.takeIf { it.isNotBlank() }?.let { + mapper.convertValue(TextNode(it), Topic::class.java) + } - override fun to(topic: Topic): String { - return topic.jsonVal - } + override fun to(topic: Topic?): String? = topic?.jsonVal override fun fromType(): Class { return String::class.java diff --git a/prime-router/src/main/kotlin/MimeFormat.kt b/prime-router/src/main/kotlin/MimeFormat.kt index 34ff99c9bdc..7fe35a9e96c 100644 --- a/prime-router/src/main/kotlin/MimeFormat.kt +++ b/prime-router/src/main/kotlin/MimeFormat.kt @@ -3,17 +3,31 @@ package gov.cdc.prime.router import ca.uhn.fhir.rest.api.Constants.CT_FHIR_NDJSON import ca.uhn.fhir.rest.api.Constants.CT_TEXT_CSV +/** + * Enum class representing different MIME formats used in the system. + * Each format has an associated file extension, MIME type, and a flag indicating whether it's a single item format. + * + * @property ext The file extension associated with the format. + * @property mimeType The MIME type associated with the format. + * @property isSingleItemFormat A flag indicating whether the format is for single item serialization. + */ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFormat: Boolean = false) { INTERNAL("internal.csv", CT_TEXT_CSV), // A format that serializes all elements of a Report.kt (in CSV) - CSV("csv", CT_TEXT_CSV), // A CSV format the follows the csvFields - CSV_SINGLE("csv", CT_TEXT_CSV, true), - HL7("hl7", "application/hl7-v2", true), // HL7 with one result per file - HL7_BATCH("hl7", "application/hl7-v2"), // HL7 with BHS and FHS headers - FHIR("fhir", CT_FHIR_NDJSON), + CSV("csv", CT_TEXT_CSV), // A CSV format that follows the csvFields + CSV_SINGLE("csv", CT_TEXT_CSV, true), // A CSV format for single item serialization + HL7("hl7", "application/hl7-v2", true), // HL7 format with one result per file + HL7_BATCH("hl7", "application/hl7-v2"), // HL7 format with BHS and FHS headers + FHIR("fhir", CT_FHIR_NDJSON), // FHIR format with NDJSON MIME type ; companion object { - // Default to CSV if weird or unknown + /** + * Safely returns the MIME format corresponding to the provided string. + * Defaults to CSV if the string is null or cannot be matched to a known format. + * + * @param formatStr The string representation of the format. + * @return The corresponding MimeFormat, or CSV if the input is invalid. + */ fun safeValueOf(formatStr: String?): MimeFormat = try { valueOf(formatStr ?: "CSV") } catch (e: IllegalArgumentException) { @@ -21,7 +35,11 @@ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFor } /** - * Returns a Format based on the [ext] provided, ignoring case. + * Returns the MIME format based on the provided file extension, ignoring case. + * + * @param ext The file extension. + * @return The corresponding MimeFormat. + * @throws IllegalArgumentException If the extension does not match any known format. */ fun valueOfFromExt(ext: String): MimeFormat = when (ext.lowercase()) { HL7.ext.lowercase() -> HL7 @@ -30,6 +48,24 @@ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFor else -> throw IllegalArgumentException("Unexpected extension $ext.") } + /** + * Returns the MIME format corresponding to the provided string, ignoring case. + * + * @param bodyFormat The string representation of the format. + * @return The corresponding MimeFormat. + */ fun valueOfIgnoreCase(bodyFormat: String): MimeFormat = valueOf(bodyFormat.uppercase()) + + /** + * Returns the MIME format based on the provided MIME type. + * + * @param mimeType The MIME type. + * @return The corresponding MimeFormat. + * @throws IllegalArgumentException If the MIME type does not match any known format. + */ + fun valueOfFromMimeType(mimeType: String): MimeFormat { + return entries.find { it.mimeType == mimeType } + ?: throw IllegalArgumentException("Unexpected MIME type $mimeType.") + } } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/Report.kt b/prime-router/src/main/kotlin/Report.kt index 6408345e774..73fe5cc48bd 100644 --- a/prime-router/src/main/kotlin/Report.kt +++ b/prime-router/src/main/kotlin/Report.kt @@ -350,8 +350,10 @@ class Report : Logging { destination: Receiver? = null, nextAction: TaskAction = TaskAction.process, topic: Topic, + id: UUID = UUID.randomUUID(), + bodyURL: String = "", ) { - this.id = UUID.randomUUID() + this.id = id // UP submissions do not need a schema, but it is required by the database to maintain legacy functionality this.schema = Schema("None", topic) this.sources = sources @@ -365,6 +367,7 @@ class Report : Logging { this.metadata = metadata ?: Metadata.getInstance() this.itemCountBeforeQualFilter = numberOfMessages this.nextAction = nextAction + this.bodyURL = bodyURL } data class ParentItemLineageData(val parentReportId: UUID, val parentReportIndex: Int) @@ -681,11 +684,12 @@ class Report : Logging { // to reliably shuffle against. because shuffling is pseudo-random, it's possible that // with something below a threshold we could end up leaking PII, therefore // ignore the call to shuffle and just fake it - val synthesizeStrategy = if (itemCount < SHUFFLE_THRESHOLD && strategy == SynthesizeStrategy.SHUFFLE) { - SynthesizeStrategy.FAKE - } else { - strategy - } + val synthesizeStrategy = + if (itemCount < SHUFFLE_THRESHOLD && strategy == SynthesizeStrategy.SHUFFLE) { + SynthesizeStrategy.FAKE + } else { + strategy + } // look in the mapping parameter passed in for the current element when (synthesizeStrategy) { // examine the synthesizeStrategy for the field diff --git a/prime-router/src/main/kotlin/SubmissionReceiver.kt b/prime-router/src/main/kotlin/SubmissionReceiver.kt index 2881b35f340..d9cc88a1e5b 100644 --- a/prime-router/src/main/kotlin/SubmissionReceiver.kt +++ b/prime-router/src/main/kotlin/SubmissionReceiver.kt @@ -1,20 +1,17 @@ package gov.cdc.prime.router -import ca.uhn.hl7v2.model.Message +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.azure.ActionHistory -import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.Event import gov.cdc.prime.router.azure.ProcessEvent import gov.cdc.prime.router.azure.ReportWriter import gov.cdc.prime.router.azure.WorkflowEngine import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.fhirengine.engine.FhirConvertQueueMessage -import gov.cdc.prime.router.fhirengine.engine.QueueMessage +import gov.cdc.prime.router.fhirengine.engine.MessageType import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.HL7Reader -import ca.uhn.hl7v2.model.v251.segment.MSH as v251_MSH -import ca.uhn.hl7v2.model.v27.segment.MSH as v27_MSH -import fhirengine.translation.hl7.structures.nistelr251.segment.MSH as NIST_MSH /** * The base class for a 'receiver' type, currently just for COVID or full ELR submissions. This allows us a fan out @@ -295,7 +292,10 @@ class UniversalPipelineReceiver : SubmissionReceiver { // } // check for valid message type - messages.forEachIndexed { idx, element -> checkValidMessageType(element, actionLogs, idx + 1) } + messages.forEachIndexed { + idx, element -> + MessageType.validateMessageType(element, actionLogs, idx + 1) + } } MimeFormat.FHIR -> { @@ -355,7 +355,7 @@ class UniversalPipelineReceiver : SubmissionReceiver { FhirConvertQueueMessage( report.id, blobInfo.blobUrl, - BlobAccess.digestToString(blobInfo.digest), + BlobUtils.digestToString(blobInfo.digest), sender.fullName, sender.topic, sender.schemaName @@ -365,28 +365,4 @@ class UniversalPipelineReceiver : SubmissionReceiver { return report } - - enum class MessageType { - ORU_R01, - ORM_O01, - OML_O21, - } - - /** - * Checks that a [message] is of the supported type(s), and uses the [actionLogs] to add an error - * message for item with index [itemIndex] if it is not. - */ - internal fun checkValidMessageType(message: Message, actionLogs: ActionLogger, itemIndex: Int) { - val messageType = when (val msh = message.get("MSH")) { - is NIST_MSH -> msh.messageType.messageStructure.toString() - is v251_MSH -> msh.messageType.messageStructure.toString() - is v27_MSH -> msh.messageType.messageStructure.toString() - else -> "" - } - - if (!MessageType.values().map { it.toString() }.contains(messageType)) { - actionLogs.getItemLogger(itemIndex) - .error(InvalidHL7Message("Ignoring unsupported HL7 message type $messageType")) - } - } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/ActionHistory.kt b/prime-router/src/main/kotlin/azure/ActionHistory.kt index 60be7928007..de7a0f0a053 100644 --- a/prime-router/src/main/kotlin/azure/ActionHistory.kt +++ b/prime-router/src/main/kotlin/azure/ActionHistory.kt @@ -384,7 +384,7 @@ class ActionHistory( */ fun trackExistingInputReport(reportId: ReportId) { if (isReportAlreadyTracked(reportId)) { - error("Bug: attempt to track history of a report ($reportId) we've already associated with this action") + error("Bug: attempt to track history of a report ($reportId) we've already associated with this action") } val reportFile = ReportFile() reportFile.reportId = reportId @@ -394,9 +394,13 @@ class ActionHistory( /** * Use this to record history info about a new externally submitted report. */ - fun trackExternalInputReport(report: Report, blobInfo: BlobAccess.BlobInfo, payloadName: String? = null) { + fun trackExternalInputReport( + report: Report, + blobInfo: BlobAccess.BlobInfo, + payloadName: String? = null, + ) { if (isReportAlreadyTracked(report.id)) { - error("Bug: attempt to track history of a report ($report.id) we've already associated with this action") + error("Bug: attempt to track history of a report ($report.id) we've already associated with this action") } val reportFile = ReportFile() diff --git a/prime-router/src/main/kotlin/azure/BlobAccess.kt b/prime-router/src/main/kotlin/azure/BlobAccess.kt index 4c76f41520b..8b88fbcf017 100644 --- a/prime-router/src/main/kotlin/azure/BlobAccess.kt +++ b/prime-router/src/main/kotlin/azure/BlobAccess.kt @@ -11,6 +11,8 @@ import com.azure.storage.blob.models.BlobListDetails import com.azure.storage.blob.models.BlobStorageException import com.azure.storage.blob.models.DownloadRetryOptions import com.azure.storage.blob.models.ListBlobsOptions +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.BlobUtils.sha256Digest import gov.cdc.prime.router.BlobStoreTransportType import gov.cdc.prime.router.MimeFormat import gov.cdc.prime.router.Report @@ -24,7 +26,6 @@ import java.io.File import java.net.URL import java.net.URLDecoder import java.nio.charset.Charset -import java.security.MessageDigest import java.time.Duration const val defaultBlobContainerName = "reports" @@ -134,7 +135,7 @@ class BlobAccess() : Logging { companion object : Logging { private const val defaultBlobDownloadRetryVar = "AzureBlobDownloadRetryCount" - private val defaultEnvVar = Environment.get().blobEnvVar + private val defaultEnvVar = Environment.get().storageEnvVar val defaultBlobMetadata by lazy { BlobContainerMetadata.build( defaultBlobContainerName, @@ -322,6 +323,21 @@ class BlobAccess() : Logging { } } + /** + * Download the file associated with a RawSubmission message + */ + fun downloadBlob( + blobUrl: String, + digest: String, + ): String { + val blobContent = downloadBlobAsByteArray(blobUrl) + val localDigest = BlobUtils.digestToString(sha256Digest(blobContent)) + check(digest == localDigest) { + "Downloaded file does not match expected file\n$digest | $localDigest" + } + return String(blobContent) + } + /** * Download the blob at the given [blobUrl] as a ByteArray */ @@ -503,28 +519,5 @@ class BlobAccess() : Logging { containerClient } } - - /** - * Create a hex string style of a digest. - */ - fun digestToString(digest: ByteArray): String { - return digest.joinToString(separator = "", limit = 40) { Integer.toHexString(it.toInt()) } - } - - /** - * Hash a ByteArray [input] with SHA 256 - */ - fun sha256Digest(input: ByteArray): ByteArray { - return hashBytes("SHA-256", input) - } - - /** - * Hash a ByteArray [input] with method [type] - */ - private fun hashBytes(type: String, input: ByteArray): ByteArray { - return MessageDigest - .getInstance(type) - .digest(input) - } } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/Event.kt b/prime-router/src/main/kotlin/azure/Event.kt index 6d326507358..cffcc485973 100644 --- a/prime-router/src/main/kotlin/azure/Event.kt +++ b/prime-router/src/main/kotlin/azure/Event.kt @@ -5,8 +5,8 @@ import gov.cdc.prime.router.Options import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.common.JacksonMapperUtilities import gov.cdc.prime.router.fhirengine.engine.BatchEventQueueMessage +import gov.cdc.prime.router.fhirengine.engine.PrimeRouterQueueMessage import gov.cdc.prime.router.fhirengine.engine.ProcessEventQueueMessage -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.engine.ReportEventQueueMessage import gov.cdc.prime.router.transport.RetryToken import java.time.OffsetDateTime @@ -101,10 +101,8 @@ abstract class Event(val eventAction: EventAction, val at: OffsetDateTime?) { } companion object { - fun parseQueueMessage(event: String): Event { - val message = JacksonMapperUtilities.defaultMapper.readValue(event) - - return when (message) { + fun parsePrimeRouterQueueMessage(event: String): Event { + return when (val message = JacksonMapperUtilities.defaultMapper.readValue(event)) { is ReportEventQueueMessage -> { val at = if (message.at.isNotEmpty()) { OffsetDateTime.parse(message.at) @@ -268,7 +266,7 @@ class BatchEvent( // this should say 'batch' but will break production on deploy if there is anything in the batch queue // when it goes to prod. This value is used only to queue and dequeue message types - // (toQueueMessage, parseQueueMessage) + // (toQueueMessage, parsePrimeRouterQueueMessage) companion object { const val eventType = "receiver" } diff --git a/prime-router/src/main/kotlin/azure/ProcessFunction.kt b/prime-router/src/main/kotlin/azure/ProcessFunction.kt index 76203c7a6f7..eca77db3234 100644 --- a/prime-router/src/main/kotlin/azure/ProcessFunction.kt +++ b/prime-router/src/main/kotlin/azure/ProcessFunction.kt @@ -28,7 +28,7 @@ class ProcessFunction : Logging { try { workflowEngine = WorkflowEngine() - event = Event.parseQueueMessage(message) as ProcessEvent + event = Event.parsePrimeRouterQueueMessage(message) as ProcessEvent if (event.eventAction != Event.EventAction.PROCESS) { logger.error("Process function received a message of the incorrect type: $message") diff --git a/prime-router/src/main/kotlin/azure/QueueAccess.kt b/prime-router/src/main/kotlin/azure/QueueAccess.kt index 4ea96bf8d77..7591d7e0952 100644 --- a/prime-router/src/main/kotlin/azure/QueueAccess.kt +++ b/prime-router/src/main/kotlin/azure/QueueAccess.kt @@ -78,7 +78,7 @@ object QueueAccess { fun receiveMessage(queueName: String): Event { // messageText is deprecated val message = createQueueClient(queueName).receiveMessage().body.toString() - return Event.parseQueueMessage(message) + return Event.parsePrimeRouterQueueMessage(message) } /** diff --git a/prime-router/src/main/kotlin/azure/ReportFunction.kt b/prime-router/src/main/kotlin/azure/ReportFunction.kt index 99168f9f3d9..65c5aaed0aa 100644 --- a/prime-router/src/main/kotlin/azure/ReportFunction.kt +++ b/prime-router/src/main/kotlin/azure/ReportFunction.kt @@ -18,6 +18,7 @@ import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.InvalidParamMessage import gov.cdc.prime.router.InvalidReportMessage import gov.cdc.prime.router.Options +import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Sender import gov.cdc.prime.router.Sender.ProcessingType import gov.cdc.prime.router.SubmissionReceiver @@ -25,18 +26,25 @@ import gov.cdc.prime.router.UniversalPipelineReceiver import gov.cdc.prime.router.azure.BlobAccess.Companion.defaultBlobMetadata import gov.cdc.prime.router.azure.BlobAccess.Companion.getBlobContainer import gov.cdc.prime.router.azure.db.enums.TaskAction +import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile import gov.cdc.prime.router.azure.observability.event.IReportStreamEventService import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties import gov.cdc.prime.router.azure.observability.event.ReportStreamEventService +import gov.cdc.prime.router.cli.PIIRemovalCommands import gov.cdc.prime.router.common.AzureHttpUtils.getSenderIP +import gov.cdc.prime.router.common.Environment import gov.cdc.prime.router.common.JacksonMapperUtilities +import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.azure.SubmissionsFacade import gov.cdc.prime.router.tokens.AuthenticatedClaims import gov.cdc.prime.router.tokens.Scope import gov.cdc.prime.router.tokens.authenticationFailure import gov.cdc.prime.router.tokens.authorizationFailure +import kotlinx.serialization.json.Json import org.apache.logging.log4j.kotlin.Logging +import java.nio.charset.StandardCharsets +import java.util.UUID private const val PROCESSING_TYPE_PARAMETER = "processing" @@ -155,6 +163,72 @@ class ReportFunction( var reportBody: String, ) + /** + * GET report to download + * + * @see ../../../docs/api/reports.yml + */ + @FunctionName("downloadReport") + fun downloadReport( + @HttpTrigger( + name = "downloadReport", + methods = [HttpMethod.GET], + authLevel = AuthorizationLevel.FUNCTION, + route = "reports/download" + ) request: HttpRequestMessage, + ): HttpResponseMessage { + val reportId = request.queryParameters[REPORT_ID_PARAMETER] + val removePIIRaw = request.queryParameters[REMOVE_PII] + var removePII = false + if (removePIIRaw.isNullOrBlank() || removePIIRaw.toBoolean()) { + removePII = true + } + if (reportId.isNullOrBlank()) { + return HttpUtilities.badRequestResponse(request, "Must provide a reportId.") + } + return processDownloadReport( + request, + ReportId.fromString(reportId), + removePII, + Environment.get().envName + ) + } + + fun processDownloadReport( + request: HttpRequestMessage, + reportId: UUID, + removePII: Boolean?, + envName: String, + databaseAccess: DatabaseAccess = DatabaseAccess(), + piiRemovalCommands: PIIRemovalCommands = PIIRemovalCommands(), + ): HttpResponseMessage { + var requestedReport = ReportFile() + try { + requestedReport = databaseAccess.fetchReportFile(reportId) + } catch (e: Exception) { + HttpUtilities.badRequestResponse(request, "The requested report does not exist.") + } + + return if (requestedReport.bodyUrl != null && requestedReport.bodyUrl.toString().lowercase().endsWith("fhir")) { + val contents = BlobAccess.downloadBlobAsByteArray(requestedReport.bodyUrl) + + val content = if (removePII == null || removePII) { + piiRemovalCommands.removePii(FhirTranscoder.decode(contents.toString(Charsets.UTF_8))) + } else { + if (envName == "prod") { + return HttpUtilities.badRequestResponse(request, "Must remove PII for messages from prod.") + } + String(contents, StandardCharsets.UTF_8) + } + + HttpUtilities.okJSONResponse(request, Json.parseToJsonElement(content)) + } else if (requestedReport.bodyUrl == null) { + HttpUtilities.badRequestResponse(request, "The requested report does not exist.") + } else { + HttpUtilities.badRequestResponse(request, "The requested report is not fhir.") + } + } + /** * The Waters API, in memory of Dr. Michael Waters * (The older version of this API is "/api/reports") diff --git a/prime-router/src/main/kotlin/azure/RequestFunction.kt b/prime-router/src/main/kotlin/azure/RequestFunction.kt index 47608913daf..e892befec42 100644 --- a/prime-router/src/main/kotlin/azure/RequestFunction.kt +++ b/prime-router/src/main/kotlin/azure/RequestFunction.kt @@ -23,6 +23,8 @@ const val ALLOW_DUPLICATES_PARAMETER = "allowDuplicate" const val TOPIC_PARAMETER = "topic" const val SCHEMA_PARAMETER = "schema" const val FORMAT_PARAMETER = "format" +const val REPORT_ID_PARAMETER = "reportId" +const val REMOVE_PII = "removePII" /** * Base class for ReportFunction and ValidateFunction diff --git a/prime-router/src/main/kotlin/azure/SendFunction.kt b/prime-router/src/main/kotlin/azure/SendFunction.kt index 686c0ce8105..dc77ddbe883 100644 --- a/prime-router/src/main/kotlin/azure/SendFunction.kt +++ b/prime-router/src/main/kotlin/azure/SendFunction.kt @@ -79,7 +79,7 @@ class SendFunction( @BindingName("NextVisibleTime") nextVisibleTime: Date? = null, @BindingName("InsertionTime") insertionTime: Date? = null, ) { - val event = Event.parseQueueMessage(message) as ReportEvent + val event = Event.parsePrimeRouterQueueMessage(message) as ReportEvent val actionHistory = ActionHistory(TaskAction.send, event.isEmptyBatch) var receiverStatus: CustomerStatus = CustomerStatus.INACTIVE actionHistory.trackActionParams(message) diff --git a/prime-router/src/main/kotlin/azure/SubmissionTableService.kt b/prime-router/src/main/kotlin/azure/SubmissionTableService.kt new file mode 100644 index 00000000000..0dd968afe3e --- /dev/null +++ b/prime-router/src/main/kotlin/azure/SubmissionTableService.kt @@ -0,0 +1,104 @@ +package gov.cdc.prime.router.azure + +import gov.cdc.prime.reportstream.shared.Submission +import org.apache.logging.log4j.kotlin.Logging + +/** + * Service class responsible for handling operations related to the "submission" table in Azure Table Storage. + * + * This service uses the TableAccess singleton to interact with Azure Table Storage for inserting and retrieving + * submissions in the "submission" table. + * + * It allows inserting `Submission` objects as table entities and retrieving them based on the submission ID and status. + */ +class SubmissionTableService private constructor() : Logging { + + companion object { + /** + * The singleton instance of SubmissionTableService, initialized lazily. + * + * This ensures that the instance is created only when it is first accessed, + * providing thread-safe, lazy initialization. + */ + val singletonInstance: SubmissionTableService by lazy { + SubmissionTableService() + } + + fun getInstance(): SubmissionTableService { + return singletonInstance + } + } + + private val tableName = "submission" + + /** + * The `TableAccess` object used to interact with Azure Table Storage. + * + * This is marked as `@Volatile` to ensure thread visibility. It is initialized lazily + * and resettable to allow refreshing the connection if necessary. + */ + private var tableAccess: TableAccess = TableAccess() + + /** + * Resets the `TableAccess` instance used to interact with the "submission" table. + * + * This method ensures thread safety by synchronizing access to `tableAccess`, preventing multiple + * threads from resetting the instance at the same time. + */ + fun reset() { + synchronized(this) { + tableAccess.reset() // Re-initialize the TableAccess client + } + } + + /** + * Inserts a SubmissionEntity into the "submission" table in Azure Table Storage. + * + * Converts the provided `Submission` object into a `TableEntity` and inserts it into the table. + * Logs the outcome of the operation (success or failure). + * + * @param submission The `Submission` object to be inserted into the table. + */ + fun insertSubmission(submission: Submission) { + try { + // Convert Submission to TableEntity and insert into the table + val entity = submission.toTableEntity() + tableAccess.insertEntity(tableName, entity) + logger.info( + "Submission entity insert succeeded: ${submission.submissionId} with status ${submission.status}" + ) + } catch (e: Exception) { + // Log the error if insertion fails + logger.error( + "Submission entity insert failed: ${submission.submissionId} with status ${submission.status}", + e + ) + } + } + + /** + * Retrieves a SubmissionEntity from the "submission" table based on submission ID and status. + * + * Fetches the corresponding table entity from Azure Table Storage using the provided partition key + * (submission ID) and row key (status). If the entity is found, it is converted back into a `Submission` object. + * + * If the entity is not found, or if an error occurs during retrieval, the method returns `null` and logs the error. + * + * @param submissionID The partition key representing the submission ID. + * @param status The row key representing the status of the submission. + * @return The `Submission` object if found, otherwise `null`. + */ + fun getSubmission(submissionID: String, status: String): Submission? = try { + // Retrieve the TableEntity and convert it back to a Submission object if found + val tableEntity = tableAccess.getEntity(tableName, submissionID, status) + if (tableEntity != null) { + Submission.fromTableEntity(tableEntity) + } else { + null + } + } catch (e: Exception) { + // Log the error if retrieval fails and return null + logger.error("Failed to read submission entity: $submissionID with status $status", e) + null + } +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/TableAccess.kt b/prime-router/src/main/kotlin/azure/TableAccess.kt new file mode 100644 index 00000000000..f4c4b50eb0e --- /dev/null +++ b/prime-router/src/main/kotlin/azure/TableAccess.kt @@ -0,0 +1,123 @@ +package gov.cdc.prime.router.azure + +import com.azure.data.tables.TableClient +import com.azure.data.tables.TableServiceClient +import com.azure.data.tables.TableServiceClientBuilder +import com.azure.data.tables.models.TableEntity +import com.azure.data.tables.models.TableServiceException +import gov.cdc.prime.router.common.Environment +import org.apache.logging.log4j.kotlin.Logging + +/** + * Singleton class responsible for providing access to Azure Table Storage services. + * + * This class manages the connection to Azure Table Storage and provides methods to interact with + * individual tables. The connection is established using the environment-specific connection string. + * The TableServiceClient is lazily initialized and can be re-initialized upon failures. + */ +class TableAccess : Logging { + + companion object { + + /** + * The environment variable that stores the connection string. + */ + private val defaultEnvVar = Environment.get().storageEnvVar + + /** + * Retrieves the Azure Storage connection string from environment variables. + * + * @return The connection string for Azure Storage. + */ + fun getConnectionString(): String = System.getenv(defaultEnvVar) + } + + private var tableServiceClient: TableServiceClient = buildClient() + + private fun buildClient(): TableServiceClient { + return TableServiceClientBuilder() + .connectionString(getConnectionString()) + .buildClient() + } + + fun reset() { + tableServiceClient = buildClient() + } + + /** + * Inserts a TableEntity into the specified table. + * + * If the table does not exist, it is created before inserting the entity. + * Logs the success or failure of the operation. + * + * @param tableName The name of the table where the entity will be inserted. + * @param entity The TableEntity to be inserted. + */ + @Synchronized + fun insertEntity(tableName: String, entity: TableEntity) { + try { + val tableClient = getOrCreateTableClient(tableName) + tableClient.createEntity(entity) + logger.info("Entity inserted successfully: ${entity.partitionKey} is ${entity.rowKey}") + } catch (e: TableServiceException) { + // Log the detailed error + logger.error("Failed to insert entity: ${entity.partitionKey} with ${entity.rowKey}", e) + } + } + + /** + * Retrieves a TableEntity from the specified table. + * + * This method fetches a TableEntity based on the given partition key and row key. + * If the table does not exist or an error occurs during the retrieval, the method logs the error and returns null. + * + * @param tableName The name of the table from which to retrieve the entity. + * @param partitionKey The partition key identifying the entity. + * @param rowKey The row key identifying the entity. + * @return The TableEntity if found, or null if an error occurs. + */ + @Synchronized + fun getEntity(tableName: String, partitionKey: String, rowKey: String): TableEntity? { + try { + val tableClient = getTableClient(tableName) + return tableClient?.getEntity(partitionKey, rowKey) + } catch (e: Exception) { + logger.error("Failed to find entity: $partitionKey with $rowKey", e) + return null + } + } + + /** + * Retrieves a TableClient for the specified table if it exists. + * + * This method checks if the table exists. If the table exists, it returns a TableClient for interacting with it. + * If the table does not exist or an error occurs, it logs the error and attempts to retry the operation after reinitializing the client. + * + * @param tableName The name of the table for which the client is needed. + * @return A TableClient for interacting with the specified table, or null if the table does not exist or an error occurs. + */ + private fun getTableClient(tableName: String): TableClient? { + val tableExists = tableServiceClient.listTables().any { it.name == tableName } + return if (tableExists) { + tableServiceClient.getTableClient(tableName) + } else { + null + } + } + + /** + * Retrieves or creates a TableClient for the specified table. + * + * If the table does not exist, it is created, and a TableClient is returned for the newly created table. + * + * @param tableName The name of the table for which the client is needed. + * @return A TableClient for interacting with the specified table. + */ + private fun getOrCreateTableClient(tableName: String): TableClient { + val tableClient = getTableClient(tableName) + return tableClient ?: run { + tableServiceClient.createTable(tableName) + tableServiceClient.getTableClient(tableName) + } + } +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt b/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt index 2eb750bbfbc..1a93cccecaa 100644 --- a/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt +++ b/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt @@ -29,7 +29,7 @@ class ValidateSchemasFunctions : Logging { path = "metadata/fhir_transforms/validating.txt" ) @Suppress("UNUSED_PARAMETER") content: Array, ) { - val blobConnectionString = Environment.get().blobEnvVar + val blobConnectionString = Environment.get().storageEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("metadata", blobConnectionString) validateSchemaChanges(TranslationSchemaManager.SchemaType.FHIR, blobContainerMetadata) @@ -48,7 +48,7 @@ class ValidateSchemasFunctions : Logging { path = "metadata/hl7_mapping/validating.txt" ) @Suppress("UNUSED_PARAMETER") content: Array, ) { - val blobConnectionString = Environment.get().blobEnvVar + val blobConnectionString = Environment.get().storageEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("metadata", blobConnectionString) validateSchemaChanges(TranslationSchemaManager.SchemaType.HL7, blobContainerMetadata) diff --git a/prime-router/src/main/kotlin/azure/WorkflowEngine.kt b/prime-router/src/main/kotlin/azure/WorkflowEngine.kt index e8f8a5c095e..7f79e289a97 100644 --- a/prime-router/src/main/kotlin/azure/WorkflowEngine.kt +++ b/prime-router/src/main/kotlin/azure/WorkflowEngine.kt @@ -198,7 +198,11 @@ class WorkflowEngine( Event.EventAction.RECEIVE ) - actionHistory.trackExternalInputReport(report, blobInfo, payloadName) + actionHistory.trackExternalInputReport( + report, + blobInfo, + payloadName + ) return blobInfo } diff --git a/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt b/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt index 8eb1631e78c..190d279d0d1 100644 --- a/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt +++ b/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt @@ -35,7 +35,7 @@ class CovidBatchFunction( ) { try { logger.trace("CovidBatchFunction starting. Message: $message") - val event = Event.parseQueueMessage(message) as BatchEvent + val event = Event.parsePrimeRouterQueueMessage(message) as BatchEvent if (event.eventAction != Event.EventAction.BATCH) { logger.error("CovidBatchFunction received a $message") return diff --git a/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt b/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt index 40c579a482e..34b13969ac6 100644 --- a/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt +++ b/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt @@ -37,7 +37,7 @@ class UniversalBatchFunction( ) { try { logger.trace("UniversalBatchFunction starting. Message: $message") - val event = Event.parseQueueMessage(message) as BatchEvent + val event = Event.parsePrimeRouterQueueMessage(message) as BatchEvent if (event.eventAction != Event.EventAction.BATCH) { logger.error("UniversalBatchFunction received a $message") return diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt index e309e476e3f..f7ed5a649e3 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt @@ -33,7 +33,7 @@ abstract class AbstractReportStreamEventBuilder( private val name: ReportStreamEventName, private val childReportId: UUID, private val childBodyUrl: String, - private val theTopic: Topic, + private val theTopic: Topic?, private val pipelineStepName: TaskAction, ) : Logging { @@ -119,7 +119,7 @@ open class ReportStreamReportEventBuilder( theName: ReportStreamEventName, childReportId: UUID, childBodyUrl: String, - theTopic: Topic, + theTopic: Topic?, pipelineStepName: TaskAction, ) : AbstractReportStreamEventBuilder( reportEventService, @@ -210,7 +210,7 @@ class ReportStreamReportProcessingErrorEventBuilder( theName: ReportStreamEventName, childReportId: UUID, childBodyUrl: String, - theTopic: Topic, + theTopic: Topic?, pipelineStepName: TaskAction, private val error: String, ) : ReportStreamReportEventBuilder( diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt index 8528915f54d..b527e8a1466 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt @@ -83,6 +83,7 @@ enum class ReportStreamEventName { ITEM_FILTER_FAILED, REPORT_SENT, REPORT_RECEIVED, + REPORT_NOT_RECEIVABLE, ITEM_ROUTED, REPORT_LAST_MILE_FAILURE, REPORT_NOT_PROCESSABLE, diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt index a3964c6f56f..d8c37ac8ddb 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt @@ -1,6 +1,7 @@ package gov.cdc.prime.router.azure.observability.event import gov.cdc.prime.router.Report +import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Topic import gov.cdc.prime.router.azure.DatabaseAccess import gov.cdc.prime.router.azure.db.enums.TaskAction @@ -84,6 +85,25 @@ interface IReportStreamEventService { initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, ) + /** + * Creates a general processing error event. This is not associated with a report or item. + * + * @param eventName the business event value from [ReportStreamEventName] + * @param pipelineStepName the pipeline step that is emitting the event + * @param error the error description + * @param submissionId the report id for the incoming report + * @param bodyUrl the blob url for the incoming report + * @param initializer additional data to initialize the creation of the event. See [AbstractReportStreamEventBuilder] + */ + fun sendSubmissionProcessingError( + eventName: ReportStreamEventName, + pipelineStepName: TaskAction, + error: String, + submissionId: ReportId, + bodyUrl: String, + initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, + ) + /** * Creates an item event from an [Report] * @@ -152,7 +172,7 @@ interface IReportStreamEventService { * Retrieves data about the input and output report for a particular pipeline step * * @param childReportId the id of the ReportFile - * @param childBodyUrl the blob URL for the ouput report + * @param childBodyUrl the blob URL for the output report * @param parentReportId the optional parent report id. A report outputted from the ReportFunction will not have a parent * @param pipelineStepName the pipeline step that is generated the child report * @param topic the [Topic] that the report is in @@ -163,7 +183,7 @@ interface IReportStreamEventService { childBodyUrl: String, parentReportId: UUID?, pipelineStepName: TaskAction, - topic: Topic, + topic: Topic?, ): ReportEventData /** @@ -275,6 +295,28 @@ class ReportStreamEventService( ).send() } + override fun sendSubmissionProcessingError( + eventName: ReportStreamEventName, + pipelineStepName: TaskAction, + error: String, + submissionId: ReportId, + bodyUrl: String, + initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, + ) { + ReportStreamReportProcessingErrorEventBuilder( + this, + azureEventService, + eventName, + submissionId, + bodyUrl, + theTopic = null, + pipelineStepName, + error + ).apply( + initializer + ).send() + } + override fun sendItemEvent( eventName: ReportStreamEventName, childReport: Report, @@ -352,7 +394,7 @@ class ReportStreamEventService( childBodyUrl: String, parentReportId: UUID?, pipelineStepName: TaskAction, - topic: Topic, + topic: Topic?, ): ReportEventData { val submittedReportIds = if (parentReportId != null) { val rootReports = reportService.getRootReports(parentReportId) diff --git a/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt b/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt index 59f1408b7c1..bc3268c59cd 100644 --- a/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt +++ b/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt @@ -74,6 +74,8 @@ class ConvertFileCommands( inputFile.inputStream(), FileSource(inputFile.nameWithoutExtension) ).report + // Throws exception if itemCount is null + checkNotNull(report.itemCount) { "Input file has no items" } val fields = fieldNames.split(",") val rows = mutableListOf>() for (i in 0 until report.itemCount) { diff --git a/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt b/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt index c74cb829cc1..6a9c48aac39 100644 --- a/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt +++ b/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt @@ -1,5 +1,6 @@ package gov.cdc.prime.router.cli +import com.fasterxml.jackson.databind.json.JsonMapper import com.github.ajalt.clikt.core.CliktCommand import com.github.ajalt.clikt.core.CliktError import com.github.ajalt.clikt.parameters.options.option @@ -56,8 +57,16 @@ class PIIRemovalCommands : CliktCommand( if (inputFile.extension.uppercase() != "FHIR") { throw CliktError("File ${inputFile.absolutePath} is not a FHIR file.") } - var bundle = FhirTranscoder.decode(contents) + val bundle = FhirTranscoder.decode(contents) + // Write the output to the screen or a file. + if (outputFile != null) { + outputFile!!.writeText(removePii(bundle), Charsets.UTF_8) + } + echo("Wrote output to ${outputFile!!.absolutePath}") + } + + fun removePii(bundle: Bundle): String { bundle.entry.map { it.resource }.filterIsInstance() .forEach { patient -> patient.name.forEach { name -> @@ -76,16 +85,16 @@ class PIIRemovalCommands : CliktCommand( bundle.entry.map { it.resource }.filterIsInstance() .forEach { organization -> - organization.address.forEach { address -> - address.line = mutableListOf(StringType(getFakeValueForElementCall("STREET"))) - } - organization.telecom.forEach { telecom -> - handleTelecom(telecom) - } - organization.contact.forEach { contact -> - handleOrganizationalContact(contact) + organization.address.forEach { address -> + address.line = mutableListOf(StringType(getFakeValueForElementCall("STREET"))) + } + organization.telecom.forEach { telecom -> + handleTelecom(telecom) + } + organization.contact.forEach { contact -> + handleOrganizationalContact(contact) + } } - } bundle.entry.map { it.resource }.filterIsInstance() .forEach { practitioner -> @@ -103,18 +112,14 @@ class PIIRemovalCommands : CliktCommand( } } - bundle = FhirTransformer("classpath:/metadata/fhir_transforms/common/remove-pii-enrichment.yml").process(bundle) + val bundleAfterTransform = FhirTransformer( + "classpath:/metadata/fhir_transforms/common/remove-pii-enrichment.yml" + ).process(bundle) val jsonObject = JacksonMapperUtilities.defaultMapper - .readValue(FhirTranscoder.encode(bundle), Any::class.java) - var prettyText = JacksonMapperUtilities.defaultMapper.writeValueAsString(jsonObject) - prettyText = replaceIds(bundle, prettyText) - - // Write the output to the screen or a file. - if (outputFile != null) { - outputFile!!.writeText(prettyText, Charsets.UTF_8) - } - echo("Wrote output to ${outputFile!!.absolutePath}") + .readValue(FhirTranscoder.encode(bundleAfterTransform), Any::class.java) + val prettyText = JsonMapper.builder().build().writeValueAsString(jsonObject) + return replaceIds(bundleAfterTransform, prettyText) } /** @@ -185,8 +190,10 @@ class PIIRemovalCommands : CliktCommand( bundle, path ).forEach { resourceId -> - val newIdentifier = getFakeValueForElementCall("UUID") - return prettyText.replace(resourceId.primitiveValue(), newIdentifier, true) + if (resourceId.primitiveValue() != null) { + val newIdentifier = getFakeValueForElementCall("UUID") + return prettyText.replace(resourceId.primitiveValue(), newIdentifier, true) + } } return prettyText } diff --git a/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt b/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt index 95b2ebf85f4..32321a12871 100644 --- a/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt +++ b/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt @@ -18,8 +18,13 @@ import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.CustomTranslationFunctions import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.Hl7Configuration +import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat +import gov.cdc.prime.router.Receiver import gov.cdc.prime.router.azure.BlobAccess +import gov.cdc.prime.router.azure.ConditionStamper +import gov.cdc.prime.router.azure.LookupTableConditionMapper +import gov.cdc.prime.router.cli.CommandUtilities.Companion.abort import gov.cdc.prime.router.cli.helpers.HL7DiffHelper import gov.cdc.prime.router.common.Environment import gov.cdc.prime.router.common.JacksonMapperUtilities @@ -33,6 +38,7 @@ import gov.cdc.prime.router.fhirengine.translation.hl7.utils.CustomContext import gov.cdc.prime.router.fhirengine.translation.hl7.utils.FhirPathUtils import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.HL7Reader +import gov.cdc.prime.router.fhirengine.utils.getObservations import org.hl7.fhir.r4.model.Base import org.hl7.fhir.r4.model.Bundle import org.hl7.fhir.r4.model.Extension @@ -63,7 +69,7 @@ class ProcessFhirCommands : CliktCommand( * The format to output the data. */ private val outputFormat by option("--output-format", help = "output format") - .choice(MimeFormat.HL7.toString(), MimeFormat.FHIR.toString()).required() + .choice(MimeFormat.HL7.toString(), MimeFormat.FHIR.toString()) /** * String of file names @@ -85,6 +91,27 @@ class ProcessFhirCommands : CliktCommand( "-r", "--receiver-schema", help = "Receiver schema location. Required for HL7 output." ) + /** + * Name of the receiver settings to use + */ + private val receiverName by option( + "--receiver-name", help = "Name of the receiver settings to use" + ) + + /** + * Name of the org settings to use + */ + private val orgName by option( + "--org", help = "Name of the org settings to use" + ) + + /** + * Environment that specifies where to get the receiver settings + */ + private val environment by option( + "--receiver-setting-env", help = "Environment that specifies where to get the receiver settings" + ) + /** * Sender schema location */ @@ -103,29 +130,81 @@ class ProcessFhirCommands : CliktCommand( val actionLogger = ActionLogger() // Check on the extension of the file for supported operations val inputFileType = inputFile.extension.uppercase() + val receiver = getReceiver() + when { // HL7 to FHIR conversion - inputFileType == "HL7" && outputFormat == MimeFormat.FHIR.toString() -> { + inputFileType == "HL7" && ( + outputFormat == MimeFormat.FHIR.toString() || + (receiver != null && receiver.format == MimeFormat.FHIR) + ) -> { var fhirMessage = convertHl7ToFhir(contents).first fhirMessage = applyEnrichmentSchemas(fhirMessage) + if (receiver != null && receiver.enrichmentSchemaNames.isNotEmpty()) { + receiver.enrichmentSchemaNames.forEach { currentSchema -> + fhirMessage = FhirTransformer(currentSchema).process(fhirMessage) + } + } outputResult( handleSenderAndReceiverTransforms(fhirMessage), actionLogger ) } // FHIR to HL7 conversion - (inputFileType == "FHIR" || inputFileType == "JSON") && outputFormat == MimeFormat.HL7.toString() -> { - outputResult(convertFhirToHl7(contents)) + (inputFileType == "FHIR" || inputFileType == "JSON") && ( + outputFormat == MimeFormat.HL7.toString() || + (receiver != null && receiver.format == MimeFormat.HL7) + ) -> { + if (receiver == null) { + return outputResult(convertFhirToHl7(contents)) + } + + var bundle = FhirTranscoder.decode(contents) + if (receiver.enrichmentSchemaNames.isNotEmpty()) { + receiver.enrichmentSchemaNames.forEach { currentSchema -> + bundle = FhirTransformer(currentSchema).process(bundle) + } + } + outputResult( + convertFhirToHl7( + FhirTranscoder.encode(bundle), + receiver.translation as Hl7Configuration, + receiver + ) + ) } // FHIR to FHIR conversion - (inputFileType == "FHIR" || inputFileType == "JSON") && outputFormat == MimeFormat.FHIR.toString() -> { - outputResult(convertFhirToFhir(contents), actionLogger) + (inputFileType == "FHIR" || inputFileType == "JSON") && ( + outputFormat == MimeFormat.FHIR.toString() || + (receiver != null && receiver.format == MimeFormat.FHIR) + ) -> { + var bundle = FhirTranscoder.decode(contents) + if (receiver != null) { + if (receiver.enrichmentSchemaNames.isNotEmpty()) { + receiver.enrichmentSchemaNames.forEach { currentSchema -> + bundle = FhirTransformer(currentSchema).process(bundle) + } + } + } + outputResult(convertFhirToFhir(FhirTranscoder.encode(bundle)), actionLogger) } // HL7 to FHIR to HL7 conversion - inputFileType == "HL7" && outputFormat == MimeFormat.HL7.toString() -> { - val (bundle, inputMessage) = convertHl7ToFhir(contents) + inputFileType == "HL7" && ( + outputFormat == MimeFormat.HL7.toString() || + (receiver != null && receiver.format == MimeFormat.HL7) + ) -> { + var (bundle, inputMessage) = convertHl7ToFhir(contents) + + if (receiver != null) { + if (receiver.enrichmentSchemaNames.isNotEmpty()) { + receiver.enrichmentSchemaNames.forEach { currentSchema -> + bundle = FhirTransformer(currentSchema).process(bundle) + } + } + } + val output = convertFhirToHl7(FhirTranscoder.encode(bundle)) outputResult(output) if (diffHl7Output != null) { @@ -140,41 +219,103 @@ class ProcessFhirCommands : CliktCommand( } } + fun getReceiver(): Receiver? { + if (!environment.isNullOrBlank() && !receiverName.isNullOrBlank() && !orgName.isNullOrBlank()) { + if (!outputFormat.isNullOrBlank()) { + throw CliktError( + "Please specify either a receiver OR an output format. Not both." + ) + } + val foundEnvironment = Environment.get(environment!!) + val accessToken = OktaCommand.fetchAccessToken(foundEnvironment.oktaApp) + ?: abort( + "Invalid access token. " + + "Run ./prime login to fetch/refresh your access " + + "token for the $foundEnvironment environment." + ) + val organizations = GetMultipleSettings().getAll( + environment = foundEnvironment, + accessToken = accessToken, + specificOrg = orgName, + exactMatch = true + ) + + val receivers = organizations[0].receivers.filter { receiver -> receiver.name == receiverName } + if (receivers.isNotEmpty()) { + return receivers[0] + } + } else if (outputFormat.isNullOrBlank()) { + throw CliktError( + "Output format is required if the environment, receiver, and org " + + "are not specified. " + ) + } + return null + } + + private val defaultHL7Configuration = Hl7Configuration( + receivingApplicationOID = null, + receivingFacilityOID = null, + messageProfileId = null, + receivingApplicationName = null, + receivingFacilityName = null, + receivingOrganization = null, + ) + /** * Convert a FHIR bundle as a [jsonString] to an HL7 message. * @return an HL7 message */ - private fun convertFhirToHl7(jsonString: String): Message { + private fun convertFhirToHl7( + jsonString: String, + hl7Configuration: Hl7Configuration = defaultHL7Configuration, + receiver: Receiver? = null, + ): Message { var fhirMessage = FhirTranscoder.decode(jsonString) fhirMessage = applyEnrichmentSchemas(fhirMessage) return when { - receiverSchema == null -> + receiverSchema == null && (receiver == null || receiver.schemaName.isBlank()) -> // Receiver schema required because if it's coming out as HL7, it would be getting any transform info // for that from a receiver schema. - throw CliktError(" You must specify a receiver schema using --receiver-schema.") + throw CliktError("You must specify a receiver schema using --receiver-schema.") - else -> { + receiverSchema != null -> { val bundle = applySenderTransforms(fhirMessage) + val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) + fhirMessage.getObservations().forEach { observation -> + stamper.stampObservation(observation) + } FhirToHl7Converter( receiverSchema!!, - BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().blobEnvVar), + BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), context = FhirToHl7Context( CustomFhirPathFunctions(), config = HL7TranslationConfig( - Hl7Configuration( - receivingApplicationOID = null, - receivingFacilityOID = null, - messageProfileId = null, - receivingApplicationName = null, - receivingFacilityName = null, - receivingOrganization = null, - ), - null + hl7Configuration, + receiver ), translationFunctions = CustomTranslationFunctions(), ) ).process(bundle) } + receiver != null && receiver.schemaName.isNotBlank() -> { + val bundle = applySenderTransforms(fhirMessage) + FhirToHl7Converter( + receiver.schemaName, + BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), + context = FhirToHl7Context( + CustomFhirPathFunctions(), + config = HL7TranslationConfig( + hl7Configuration, + receiver + ), + translationFunctions = CustomTranslationFunctions(), + ) + ).process(bundle) + } + else -> { + throw CliktError("Error state reached when trying to apply the transforms.") + } } } @@ -183,6 +324,10 @@ class ProcessFhirCommands : CliktCommand( */ private fun convertFhirToFhir(jsonString: String): Bundle { var fhirMessage = FhirTranscoder.decode(jsonString) + val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) + fhirMessage.getObservations().forEach { observation -> + stamper.stampObservation(observation) + } fhirMessage = applyEnrichmentSchemas(fhirMessage) if (receiverSchema == null && senderSchema == null) { // Must have at least one schema or else why are you doing this @@ -220,10 +365,17 @@ class ProcessFhirCommands : CliktCommand( } val hl7profile = HL7Reader.getMessageProfile(hl7message.toString()) // search hl7 profile map and create translator with config path if found - return when (val configPath = HL7Reader.profileDirectoryMap[hl7profile]) { - null -> Pair(HL7toFhirTranslator(inputSchema).translate(hl7message), hl7message) - else -> Pair(HL7toFhirTranslator(configPath).translate(hl7message), hl7message) + val fhirMessage = when (val configPath = HL7Reader.profileDirectoryMap[hl7profile]) { + null -> HL7toFhirTranslator(inputSchema).translate(hl7message) + else -> HL7toFhirTranslator(configPath).translate(hl7message) } + + val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) + fhirMessage.getObservations().forEach { observation -> + stamper.stampObservation(observation) + } + + return Pair(fhirMessage, hl7message) } /** diff --git a/prime-router/src/main/kotlin/cli/SettingCommands.kt b/prime-router/src/main/kotlin/cli/SettingCommands.kt index 676fb373112..6df51ce8d49 100644 --- a/prime-router/src/main/kotlin/cli/SettingCommands.kt +++ b/prime-router/src/main/kotlin/cli/SettingCommands.kt @@ -1049,12 +1049,22 @@ class GetMultipleSettings : SettingCommand( } } - private fun getAll(environment: Environment, accessToken: String): List { + fun getAll( + environment: Environment, + accessToken: String = oktaAccessToken, + specificOrg: String? = filter, + exactMatch: Boolean = false, + ): List { // get organizations val organizationJson = getMany(environment, accessToken, SettingType.ORGANIZATION, settingName = "") var organizations = jsonMapper.readValue(organizationJson, Array::class.java) - if (filter != null) { - organizations = organizations.filter { it.name.startsWith(filter!!, ignoreCase = true) }.toTypedArray() + if (specificOrg != null) { + if (!exactMatch) { + organizations = + organizations.filter { it.name.startsWith(specificOrg, ignoreCase = true) }.toTypedArray() + } else { + organizations = organizations.filter { it.name.equals(specificOrg, ignoreCase = true) }.toTypedArray() + } } // get senders and receivers per org diff --git a/prime-router/src/main/kotlin/cli/tests/BasicTests.kt b/prime-router/src/main/kotlin/cli/tests/BasicTests.kt index 428e97c2df2..25333e9bc11 100644 --- a/prime-router/src/main/kotlin/cli/tests/BasicTests.kt +++ b/prime-router/src/main/kotlin/cli/tests/BasicTests.kt @@ -205,7 +205,7 @@ class End2EndUniversalPipeline : CoolTest() { expectedResults: List>, ): Boolean { var passed = true - val blobConnectionString = Environment.get().blobEnvVar + val blobConnectionString = Environment.get().storageEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("reports", blobConnectionString) diff --git a/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt b/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt index f8ba88c2d41..ffe7cb3b1bb 100644 --- a/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt +++ b/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt @@ -16,6 +16,8 @@ import org.hl7.fhir.r4.model.ServiceRequest import org.hl7.fhir.r4.model.Specimen import java.io.File import java.nio.file.Paths +import kotlin.io.path.Path +import kotlin.io.path.deleteIfExists class RemovePIITest : CoolTest() { /** @@ -41,9 +43,10 @@ class RemovePIITest : CoolTest() { */ override suspend fun run(environment: Environment, options: CoolTestOptions): Boolean { ugly("Starting remove PII test") - val inputFilePath = Paths.get("").toAbsolutePath().toString() + "/src/main/kotlin/cli/tests/fakePII.fhir" + val inputFilePath = Paths.get("").toAbsolutePath().toString() + + "/src/main/resources/clitests/compare-test-files/fakePII.fhir" val outputFilePath = Paths.get("").toAbsolutePath().toString() + - "/src/main/kotlin/cli/tests/piiRemoved.fhir" + "/src/main/resources/clitests/compare-test-files/piiRemoved.fhir" PIIRemovalCommands().test( "-i $inputFilePath -o $outputFilePath" @@ -56,40 +59,48 @@ class RemovePIITest : CoolTest() { if (!testIdsRemoved(inputBundle, outputContent)) { ugly("Not all IDs removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testPatientPIIRemoved(inputBundle, outputBundle)) { ugly("Not all patient PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testOrganizationPIIRemoved(inputBundle, outputBundle)) { ugly("Not all organization PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testPractitionerPIIRemoved(inputBundle, outputBundle)) { ugly("Not all practitioner PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testServiceRequestPIIRemoved(inputBundle, outputBundle)) { ugly("Not all service request PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testObservationPIIRemoved(inputBundle, outputBundle)) { ugly("Not all observation PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } if (!testSpecimenPIIRemoved(inputBundle, outputBundle)) { ugly("Not all specimen PII removed. Test failed.") + Path(outputFilePath).deleteIfExists() return false } ugly("PII removal test passed") + Path(outputFilePath).deleteIfExists() return true } diff --git a/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt b/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt index 1e752c9f71b..6c40638fb58 100644 --- a/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt +++ b/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt @@ -30,13 +30,15 @@ class SyncTranslationSchemasTest : CoolTest() { private val destinationConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;" + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" + - "BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + "BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + + "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" @Suppress("ktlint:standard:max-line-length") private val sourceConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;" + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" + - "BlobEndpoint=http://localhost:11000/devstoreaccount1;QueueEndpoint=http://localhost:11001/devstoreaccount1;" + "BlobEndpoint=http://localhost:11000/devstoreaccount1;QueueEndpoint=http://localhost:11001/devstoreaccount1;" + + "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" private fun setupCleanState( sourceBlobContainerMetadata: BlobAccess.BlobContainerMetadata, diff --git a/prime-router/src/main/kotlin/common/AzureHttpUtils.kt b/prime-router/src/main/kotlin/common/AzureHttpUtils.kt index ec9e3f89d7e..211fd6a8c4c 100644 --- a/prime-router/src/main/kotlin/common/AzureHttpUtils.kt +++ b/prime-router/src/main/kotlin/common/AzureHttpUtils.kt @@ -3,8 +3,19 @@ package gov.cdc.prime.router.common import com.microsoft.azure.functions.HttpRequestMessage import gov.cdc.prime.router.azure.db.Tables +/** + * Utility object that provides methods for handling Azure HTTP requests. + * This object contains helper functions to extract the sender's IP address + * from HTTP request headers. + */ object AzureHttpUtils { + /** + * Retrieves the sender's IP address from an [HttpRequestMessage]. + * + * @param request The HTTP request message from which to extract the sender's IP address. + * @return The sender's IP address as a [String], or `null` if not found. + */ fun getSenderIP(request: HttpRequestMessage<*>): String? { return ( ( @@ -13,4 +24,19 @@ object AzureHttpUtils { )?.take(Tables.ACTION.SENDER_IP.dataType.length()) ?: request.headers["x-azure-clientip"] ) } + + /** + * Retrieves the sender's IP address from a map of HTTP headers. + * + * @param headers A map of HTTP headers from which to extract the sender's IP address. + * @return The sender's IP address as a [String], or `null` if not found. + */ + fun getSenderIP(headers: Map): String? { + return ( + ( + headers["x-forwarded-for"]?.split(",") + ?.firstOrNull() + )?.take(Tables.ACTION.SENDER_IP.dataType.length()) ?: headers["x-azure-clientip"] + ) + } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/common/Environment.kt b/prime-router/src/main/kotlin/common/Environment.kt index 2ca09e075f0..2cae4d3c817 100644 --- a/prime-router/src/main/kotlin/common/Environment.kt +++ b/prime-router/src/main/kotlin/common/Environment.kt @@ -12,7 +12,7 @@ enum class Environment( val envName: String, val url: URL, val oktaApp: OktaCommand.OktaApp? = null, - val blobEnvVar: String = "AzureWebJobsStorage", + val storageEnvVar: String = "AzureWebJobsStorage", ) { LOCAL( "local", diff --git a/prime-router/src/main/kotlin/common/piiremoved.json b/prime-router/src/main/kotlin/common/piiremoved.json new file mode 100644 index 00000000000..13866b5888f --- /dev/null +++ b/prime-router/src/main/kotlin/common/piiremoved.json @@ -0,0 +1,1930 @@ +{ + "resourceType": { + "isString": true, + "content": "Bundle", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": { + "value": { + "isString": true, + "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "type": { + "isString": true, + "content": "message", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "timestamp": { + "isString": true, + "content": "2023-10-18T22:20:22.347Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "entry": [ + { + "fullUrl": { + "isString": true, + "content": "MessageHeader/c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "MessageHeader", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "meta": { + "tag": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0103", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "T", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Training", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "eventCoding": { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0003", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "R01", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "ORU/ACK - Unsolicited transmission of an observation message", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "destination": [ + { + "name": { + "isString": true, + "content": "PRIME ReportStream", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "endpoint": { + "isString": true, + "content": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "sender": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "source": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueString": { + "isString": true, + "content": "e3d085e", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueInstant": { + "isString": true, + "content": "2023-10-18T21:06:03Z", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueReference": { + "reference": { + "isString": true, + "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "software": { + "isString": true, + "content": "PRIME SimpleReport", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "version": { + "isString": true, + "content": "e3d085e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "endpoint": { + "isString": true, + "content": "https://simplereport.gov", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "focus": [ + { + "reference": { + "isString": true, + "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "DiagnosticReport/e9941fc2-6096-48a6-8b75-15e91dc80ca7", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Provenance", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "recorded": { + "isString": true, + "content": "2023-10-18T22:20:22.347Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "activity": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0003", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "R01", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "ORU/ACK - Unsolicited transmission of an observation message", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "agent": [ + { + "who": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "DiagnosticReport/e9941fc2-6096-48a6-8b75-15e91dc80ca7", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "DiagnosticReport", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "basedOn": [ + { + "reference": { + "isString": true, + "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95941-1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2023-10-18T22:20:22+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "specimen": [ + { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "result": [ + { + "reference": { + "isString": true, + "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Patient", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "extension": [ + { + "url": { + "isString": true, + "content": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "ASKU", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "refused", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0189", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Not Hispanic or Latino", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Not Hispanic or Latino", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "identifier": [ + { + "value": { + "isString": true, + "content": "f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "name": [ + { + "family": { + "isString": true, + "content": " Feil", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "given": [ + { + "isString": true, + "content": "Meghann", + "coerceToInlineType$kotlinx_serialization_json": null + } + ] + } + ], + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12755593677", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "home", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "system": { + "isString": true, + "content": "email", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "AdrienneOlson@gmail.com", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "home", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "gender": { + "isString": true, + "content": "female", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "birthDate": { + "isString": true, + "content": "1968-01-20", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "address": [ + { + "line": [ + { + "isString": true, + "content": "3177 Purdy Hills", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Boonville", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Dallas", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "65704", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "managingOrganization": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Organization", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0301", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "CLIA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "value": { + "isString": true, + "content": "12D3456789", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "name": { + "isString": true, + "content": "Carl Potts", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12779455296", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "system": { + "isString": true, + "content": "email", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "JacquettaShields@gmail.com", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "address": [ + { + "line": [ + { + "isString": true, + "content": "51877 Deckow Freeway", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Chaffee", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Atchison", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "64504", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Practitioner", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "name": [ + { + "family": { + "isString": true, + "content": " II", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "given": [ + { + "isString": true, + "content": "Scottie", + "coerceToInlineType$kotlinx_serialization_json": null + } + ] + } + ], + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12122221722", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "address": [ + { + "line": [ + { + "isString": true, + "content": "781 Freddie Union", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Fair play", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Grundy", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "63742", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Specimen", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "7fc4aee2-c426-4b2b-953c-86c877ff9bd0", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "697989009", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Anterior nares swab", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "receivedTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "collection": { + "collectedDateTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "ServiceRequest", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0119", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "RE", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueDateTime": { + "isString": true, + "content": "2023-10-18T22:20:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "status": { + "isString": true, + "content": "completed", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "intent": { + "isString": true, + "content": "order", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95941-1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "requester": { + "reference": { + "isString": true, + "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "supportingInfo": [ + { + "reference": { + "isString": true, + "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Device", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "00884999048034", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "manufacturer": { + "isString": true, + "content": "Abbott", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "deviceName": [ + { + "name": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "isString": true, + "content": "model-name", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "PractitionerRole", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "practitioner": { + "reference": { + "isString": true, + "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "organization": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Organization", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "name": { + "isString": true, + "content": "SimpleReport", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "85477-8", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Flu A", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1972-09-06T05:50:13.070Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1979-09-18T13:15:22.544Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCoding": { + "code": { + "isString": true, + "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "85478-6", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Flu B", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "2009-02-11T21:43:11.728Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2013-05-28T23:49:42.304Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCoding": { + "code": { + "isString": true, + "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "94500-6", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "COVID-19", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1958-10-15T17:14:24.631Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2020-06-14T10:13:51.979Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95419-8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Has symptoms related to condition of interest", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Has symptoms related to condition of interest", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1950-12-04T07:15:53.646Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2003-04-14T14:47:13.472Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "UNK", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "unknown", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95418-0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Employed in a healthcare setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Employed in a healthcare setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "2009-02-09T19:25:29.132Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2013-01-21T12:13:59.159Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/ValueSet/v2-0136", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "No", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95421-4", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Resides in a congregate care setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Resides in a congregate care setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1961-11-19T07:14:16.093Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2019-10-20T16:00:22.324Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/ValueSet/v2-0136", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "No", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ] +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/common/piithere.json b/prime-router/src/main/kotlin/common/piithere.json new file mode 100644 index 00000000000..0fa1f11ae26 --- /dev/null +++ b/prime-router/src/main/kotlin/common/piithere.json @@ -0,0 +1,1930 @@ +{ + "resourceType": { + "isString": true, + "content": "Bundle", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": { + "value": { + "isString": true, + "content": "ac108756-2162-470c-8a00-a189b3e94a54", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "type": { + "isString": true, + "content": "message", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "timestamp": { + "isString": true, + "content": "2023-10-18T22:20:22.347Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "entry": [ + { + "fullUrl": { + "isString": true, + "content": "MessageHeader/c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "MessageHeader", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "meta": { + "tag": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0103", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "T", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Training", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "eventCoding": { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0003", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "R01", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "ORU/ACK - Unsolicited transmission of an observation message", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "destination": [ + { + "name": { + "isString": true, + "content": "PRIME ReportStream", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "endpoint": { + "isString": true, + "content": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "sender": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "source": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueString": { + "isString": true, + "content": "e3d085e", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueInstant": { + "isString": true, + "content": "2023-10-18T21:06:03Z", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueReference": { + "reference": { + "isString": true, + "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "software": { + "isString": true, + "content": "PRIME SimpleReport", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "version": { + "isString": true, + "content": "e3d085e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "endpoint": { + "isString": true, + "content": "https://simplereport.gov", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "focus": [ + { + "reference": { + "isString": true, + "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "DiagnosticReport/ac108756-2162-470c-8a00-a189b3e94a54", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Provenance", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "cad7f8ea-6bd0-417f-8efd-7154228654e8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "recorded": { + "isString": true, + "content": "2023-10-18T22:20:22.347Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "activity": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0003", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "R01", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "ORU/ACK - Unsolicited transmission of an observation message", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "agent": [ + { + "who": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "DiagnosticReport/ac108756-2162-470c-8a00-a189b3e94a54", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "DiagnosticReport", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "ac108756-2162-470c-8a00-a189b3e94a54", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "ac108756-2162-470c-8a00-a189b3e94a54", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "basedOn": [ + { + "reference": { + "isString": true, + "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95941-1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "2023-10-18T22:20:22+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "specimen": [ + { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "result": [ + { + "reference": { + "isString": true, + "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Patient", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "extension": [ + { + "url": { + "isString": true, + "content": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "ASKU", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "refused", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0189", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Not Hispanic or Latino", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Not Hispanic or Latino", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "identifier": [ + { + "value": { + "isString": true, + "content": "283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "name": [ + { + "family": { + "isString": true, + "content": " I", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "given": [ + { + "isString": true, + "content": "Deane", + "coerceToInlineType$kotlinx_serialization_json": null + } + ] + } + ], + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12124126721", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "home", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "system": { + "isString": true, + "content": "email", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "ChongDenesik@gmail.com", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "home", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "gender": { + "isString": true, + "content": "female", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "birthDate": { + "isString": true, + "content": "2017-01-30", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "address": [ + { + "line": [ + { + "isString": true, + "content": "863 Glady Rue", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Myrtle", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Texas", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "65263", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "managingOrganization": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Organization", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0301", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "CLIA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "value": { + "isString": true, + "content": "12D3456789", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "name": { + "isString": true, + "content": "Carl Potts", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12505245506", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "system": { + "isString": true, + "content": "email", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "MozelleMarksIII@gmail.com", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "address": [ + { + "line": [ + { + "isString": true, + "content": "661 Ondricka Point", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Avilla", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Lawrence", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "64126", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Practitioner", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "name": [ + { + "family": { + "isString": true, + "content": " Graham", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "given": [ + { + "isString": true, + "content": "Ashleigh", + "coerceToInlineType$kotlinx_serialization_json": null + } + ] + } + ], + "telecom": [ + { + "system": { + "isString": true, + "content": "phone", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "value": { + "isString": true, + "content": "12040411872", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "use": { + "isString": true, + "content": "work", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "address": [ + { + "line": [ + { + "isString": true, + "content": "168 Moore Groves", + "coerceToInlineType$kotlinx_serialization_json": null + } + ], + "city": { + "isString": true, + "content": "Rosendale", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "district": { + "isString": true, + "content": "Iron", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "state": { + "isString": true, + "content": "MO", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "postalCode": { + "isString": true, + "content": "64145", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "country": { + "isString": true, + "content": "USA", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Specimen", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "7fc4aee2-c426-4b2b-953c-86c877ff9bd0", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "697989009", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Anterior nares swab", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "receivedTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "collection": { + "collectedDateTime": { + "isString": true, + "content": "2023-10-18T22:05:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "ServiceRequest", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0119", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "RE", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueDateTime": { + "isString": true, + "content": "2023-10-18T22:20:20+00:00", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "status": { + "isString": true, + "content": "completed", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "intent": { + "isString": true, + "content": "order", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95941-1", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "requester": { + "reference": { + "isString": true, + "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "supportingInfo": [ + { + "reference": { + "isString": true, + "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + { + "reference": { + "isString": true, + "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Device", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "value": { + "isString": true, + "content": "00884999048034", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "manufacturer": { + "isString": true, + "content": "Abbott", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "deviceName": [ + { + "name": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "isString": true, + "content": "model-name", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "PractitionerRole", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "2d79a27c-2a8f-4f4c-a913-da434cac0203", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "practitioner": { + "reference": { + "isString": true, + "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "organization": { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Organization", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "07640c5d-87cd-488b-9343-a226c5166539", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "name": { + "isString": true, + "content": "SimpleReport", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "29574070-adfc-4d53-a48f-5ddcc382614e", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "85477-8", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Flu A", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "2003-12-25T07:46:58.110Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1991-08-11T15:05:25.378Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCoding": { + "code": { + "isString": true, + "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "99a3d501-90c1-467b-b4a3-568f5af5178d", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "85478-6", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Flu B", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1996-05-19T23:25:45.871Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1961-11-24T16:11:02.627Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "extension": [ + { + "url": { + "isString": true, + "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCoding": { + "code": { + "isString": true, + "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + ], + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "e7fdd44c-9625-469d-b891-7a7e706680a0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "94500-6", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "COVID-19", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1966-10-31T11:23:28.181Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1971-05-26T06:18:40.872Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "performer": [ + { + "reference": { + "isString": true, + "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://snomed.info/sct", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "260373001", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Detected", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "interpretation": [ + { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v2-0078", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "A", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Abnormal", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + ], + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "method": { + "coding": [ + { + "display": { + "isString": true, + "content": "Alinity m", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "specimen": { + "reference": { + "isString": true, + "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "device": { + "reference": { + "isString": true, + "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "2ddc518f-ee1c-3cf2-8126-de380f388293", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95419-8", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Has symptoms related to condition of interest", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Has symptoms related to condition of interest", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1999-10-19T14:50:51.489Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1981-08-18T12:23:05.985Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "UNK", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "unknown", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "71280434-d4a7-3488-bc8b-5a0b76f71437", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95418-0", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Employed in a healthcare setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Employed in a healthcare setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1967-06-09T22:05:58.750Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1975-10-23T13:33:40.186Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/ValueSet/v2-0136", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "No", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + }, + { + "fullUrl": { + "isString": true, + "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "resource": { + "resourceType": { + "isString": true, + "content": "Observation", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "id": { + "isString": true, + "content": "efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "identifier": [ + { + "use": { + "isString": true, + "content": "official", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "type": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "81959-9", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Public health laboratory ask at order entry panel", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ], + "status": { + "isString": true, + "content": "final", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://loinc.org", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "95421-4", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "Resides in a congregate care setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ], + "text": { + "isString": true, + "content": "Resides in a congregate care setting", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "subject": { + "reference": { + "isString": true, + "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", + "coerceToInlineType$kotlinx_serialization_json": null + } + }, + "effectiveDateTime": { + "isString": true, + "content": "1946-04-06T02:01:36.795Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "issued": { + "isString": true, + "content": "1983-07-07T22:56:38.488Z", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "valueCodeableConcept": { + "coding": [ + { + "system": { + "isString": true, + "content": "http://terminology.hl7.org/ValueSet/v2-0136", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "code": { + "isString": true, + "content": "N", + "coerceToInlineType$kotlinx_serialization_json": null + }, + "display": { + "isString": true, + "content": "No", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + }, + "note": [ + { + "text": { + "isString": true, + "content": "I am some random text", + "coerceToInlineType$kotlinx_serialization_json": null + } + } + ] + } + } + ] +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt b/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt index b4ae24f5c31..3d50e1bf9e9 100644 --- a/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt +++ b/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt @@ -4,6 +4,7 @@ import com.microsoft.azure.functions.annotation.BindingName import com.microsoft.azure.functions.annotation.FunctionName import com.microsoft.azure.functions.annotation.QueueTrigger import com.microsoft.azure.functions.annotation.StorageAccount +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.azure.ActionHistory import gov.cdc.prime.router.azure.DataAccessTransaction @@ -15,10 +16,13 @@ import gov.cdc.prime.router.common.BaseEngine import gov.cdc.prime.router.fhirengine.engine.FHIRConverter import gov.cdc.prime.router.fhirengine.engine.FHIRDestinationFilter import gov.cdc.prime.router.fhirengine.engine.FHIREngine +import gov.cdc.prime.router.fhirengine.engine.FHIRReceiver import gov.cdc.prime.router.fhirengine.engine.FHIRReceiverFilter import gov.cdc.prime.router.fhirengine.engine.FHIRTranslator -import gov.cdc.prime.router.fhirengine.engine.QueueMessage +import gov.cdc.prime.router.fhirengine.engine.FhirReceiveQueueMessage +import gov.cdc.prime.router.fhirengine.engine.PrimeRouterQueueMessage import gov.cdc.prime.router.fhirengine.engine.ReportPipelineMessage +import gov.cdc.prime.router.fhirengine.engine.initializeQueueMessages import org.apache.commons.lang3.StringUtils import org.apache.logging.log4j.kotlin.Logging @@ -29,6 +33,23 @@ class FHIRFunctions( private val queueAccess: QueueAccess = QueueAccess, ) : Logging { + /** + * An azure function for ingesting and recording submissions + */ + @FunctionName("receive-fhir") + @StorageAccount("AzureWebJobsStorage") + fun receive( + @QueueTrigger(name = "message", queueName = QueueMessage.elrReceiveQueueName) + message: String, + // Number of times this message has been dequeued + @BindingName("DequeueCount") dequeueCount: Int = 1, + ) { + logger.info( + "message consumed from elr-fhir-receive queue" + ) + process(message, dequeueCount, FHIRReceiver(), ActionHistory(TaskAction.receive)) + } + /** * An azure function for ingesting full-ELR HL7 data and converting it to FHIR */ @@ -99,7 +120,7 @@ class FHIRFunctions( ) { val messagesToDispatch = runFhirEngine(message, dequeueCount, fhirEngine, actionHistory) messagesToDispatch.forEach { - it.send(queueAccess) + (it as PrimeRouterQueueMessage).send(queueAccess) } } @@ -137,8 +158,23 @@ class FHIRFunctions( logger.debug( "${StringUtils.removeEnd(engineType, "e")}ing message: $message for the $dequeueCount time" ) + // initialize the json types in PrimeRouterQueueMessage + initializeQueueMessages() - return QueueMessage.deserialize(message) as ReportPipelineMessage + return when (val queueMessage = QueueMessage.deserialize(message)) { + is QueueMessage.ReceiveQueueMessage -> { + FhirReceiveQueueMessage( + queueMessage.reportId, + queueMessage.blobURL, + queueMessage.digest, + queueMessage.blobSubFolderName, + queueMessage.headers + ) + } + else -> { + queueMessage as ReportPipelineMessage + } + } } /** diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt index 319e485e2d6..a831daa3b7d 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt @@ -11,6 +11,8 @@ import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.IProcessedItem import fhirengine.engine.ProcessedFHIRItem import fhirengine.engine.ProcessedHL7Item +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogDetail import gov.cdc.prime.router.ActionLogScope import gov.cdc.prime.router.ActionLogger @@ -92,22 +94,19 @@ class FHIRConverter( message: T, actionLogger: ActionLogger, actionHistory: ActionHistory, - ): List { - return when (message) { - is FhirConvertQueueMessage -> { - fhirEngineRunResults(message, message.schemaName, actionLogger, actionHistory) - } - - else -> { - throw RuntimeException( - "Message was not a FhirConvert and cannot be processed: $message" - ) - } + ): List = when (message) { + is FhirConvertQueueMessage -> { + fhirEngineRunResults(message, message.schemaName, actionLogger, actionHistory) + } + else -> { + throw RuntimeException( + "Message was not a FhirConvert and cannot be processed: $message" + ) } } private fun fhirEngineRunResults( - queueMessage: ReportPipelineMessage, + queueMessage: FhirConvertQueueMessage, schemaName: String, actionLogger: ActionLogger, actionHistory: ActionHistory, @@ -262,14 +261,14 @@ class FHIRConverter( ) } - FHIREngineRunResult( + FHIREngineRunResult( routeEvent, report, blobInfo.blobUrl, FhirDestinationFilterQueueMessage( report.id, blobInfo.blobUrl, - BlobAccess.digestToString(blobInfo.digest), + BlobUtils.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic ) @@ -351,12 +350,12 @@ class FHIRConverter( */ internal fun process( format: MimeFormat, - queueMessage: ReportPipelineMessage, + queueMessage: FhirConvertQueueMessage, actionLogger: ActionLogger, routeReportWithInvalidItems: Boolean = true, ): List> { val validator = queueMessage.topic.validator - val rawReport = queueMessage.downloadContent() + val rawReport = BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) return if (rawReport.isBlank()) { actionLogger.error(InvalidReportMessage("Provided raw data is empty.")) emptyList() @@ -646,8 +645,7 @@ class FHIRConverter( * Using this function instead of calling the constructor directly simplifies the process of mocking the * transformer in tests. */ - fun getTransformerFromSchema(schemaName: String): FhirTransformer? { - return if (schemaName.isNotBlank()) { + fun getTransformerFromSchema(schemaName: String): FhirTransformer? = if (schemaName.isNotBlank()) { withLoggingContext(mapOf("schemaName" to schemaName)) { logger.info("Apply a sender transform to the items in the report") } @@ -655,5 +653,4 @@ class FHIRConverter( } else { null } - } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt index d8120485d4b..e834b6feea4 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt @@ -1,6 +1,8 @@ package gov.cdc.prime.router.fhirengine.engine import fhirengine.engine.CustomFhirPathFunctions +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.Metadata @@ -88,7 +90,7 @@ class FHIRDestinationFilter( * [actionHistory] ensures all activities are logged. */ private fun fhirEngineRunResults( - queueMessage: ReportPipelineMessage, + queueMessage: FhirDestinationFilterQueueMessage, actionHistory: ActionHistory, ): List { val contextMap = mapOf( @@ -106,7 +108,7 @@ class FHIRDestinationFilter( val fhirJson = LogMeasuredTime.measureAndLogDurationWithReturnedValue( "Downloaded content from queue message" ) { - queueMessage.downloadContent() + BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) } val bundle = FhirTranscoder.decode(fhirJson) val bodyString = FhirTranscoder.encode(bundle) @@ -207,7 +209,7 @@ class FHIRDestinationFilter( FhirReceiverFilterQueueMessage( report.id, blobInfo.blobUrl, - BlobAccess.digestToString(blobInfo.digest), + BlobUtils.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic, receiver.fullName diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt index e498f806a3c..6ec0e6dabdc 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt @@ -1,5 +1,6 @@ package gov.cdc.prime.router.fhirengine.engine +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.InvalidReportMessage import gov.cdc.prime.router.Metadata @@ -122,6 +123,14 @@ abstract class FHIREngine( // create the correct FHIREngine type for the action being taken return when (taskAction) { + TaskAction.receive -> FHIRReceiver( + metadata ?: Metadata.getInstance(), + settingsProvider!!, + databaseAccess ?: databaseAccessSingleton, + blobAccess ?: BlobAccess(), + azureEventService ?: AzureEventServiceImpl(), + reportService ?: ReportService(), + ) TaskAction.process -> FHIRConverter( metadata ?: Metadata.getInstance(), settingsProvider!!, diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt new file mode 100644 index 00000000000..2a12444e552 --- /dev/null +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt @@ -0,0 +1,378 @@ +package gov.cdc.prime.router.fhirengine.engine + +import ca.uhn.hl7v2.model.Message +import com.microsoft.azure.functions.HttpStatus +import gov.cdc.prime.reportstream.shared.QueueMessage +import gov.cdc.prime.reportstream.shared.Submission +import gov.cdc.prime.router.ActionLogger +import gov.cdc.prime.router.ClientSource +import gov.cdc.prime.router.CustomerStatus +import gov.cdc.prime.router.InvalidParamMessage +import gov.cdc.prime.router.InvalidReportMessage +import gov.cdc.prime.router.Metadata +import gov.cdc.prime.router.MimeFormat +import gov.cdc.prime.router.Options +import gov.cdc.prime.router.Report +import gov.cdc.prime.router.Sender +import gov.cdc.prime.router.SettingsProvider +import gov.cdc.prime.router.azure.ActionHistory +import gov.cdc.prime.router.azure.BlobAccess +import gov.cdc.prime.router.azure.DatabaseAccess +import gov.cdc.prime.router.azure.Event +import gov.cdc.prime.router.azure.ProcessEvent +import gov.cdc.prime.router.azure.SubmissionTableService +import gov.cdc.prime.router.azure.db.Tables +import gov.cdc.prime.router.azure.db.enums.TaskAction +import gov.cdc.prime.router.azure.observability.context.MDCUtils +import gov.cdc.prime.router.azure.observability.context.withLoggingContext +import gov.cdc.prime.router.azure.observability.event.AzureEventService +import gov.cdc.prime.router.azure.observability.event.AzureEventServiceImpl +import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName +import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties +import gov.cdc.prime.router.common.AzureHttpUtils.getSenderIP +import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder +import gov.cdc.prime.router.fhirengine.utils.HL7Reader +import gov.cdc.prime.router.report.ReportService +import org.jooq.Field +import java.time.OffsetDateTime + +/** + * FHIRReceiver is responsible for processing messages from the elr-fhir-receive azure queue + * and storing them for the next step in the pipeline. + * + * @param metadata Mockable metadata instance. + * @param settings Mockable settings provider. + * @param db Mockable database access. + * @param blob Mockable blob storage access. + * @param azureEventService Service for handling Azure events. + * @param reportService Service for handling report-related operations. + * @param submissionTableService Service for inserting to the submission azure storage table. + */ +class FHIRReceiver( + metadata: Metadata = Metadata.getInstance(), + settings: SettingsProvider = this.settingsProviderSingleton, + db: DatabaseAccess = this.databaseAccessSingleton, + blob: BlobAccess = BlobAccess(), + azureEventService: AzureEventService = AzureEventServiceImpl(), + reportService: ReportService = ReportService(), + val submissionTableService: SubmissionTableService = SubmissionTableService.getInstance(), +) : FHIREngine(metadata, settings, db, blob, azureEventService, reportService) { + + override val finishedField: Field = Tables.TASK.PROCESSED_AT + + override val engineType: String = "Receive" + + private val clientIdHeader = "client_id" + private val contentTypeHeader = "content-type" + + /** + * Processes a message of type [QueueMessage]. This message can be in either HL7 or FHIR format and will be placed + * on a queue for further processing. + * + * @param message The incoming message to be logged and processed. + * @param actionLogger Logger to track actions and errors. + * @param actionHistory Tracks the history of actions performed. + * @return A list of results from the FHIR engine run. + */ + override fun doWork( + message: T, + actionLogger: ActionLogger, + actionHistory: ActionHistory, + ): List = when (message) { + is FhirReceiveQueueMessage -> processFhirReceiveQueueMessage(message, actionLogger, actionHistory) + else -> throw RuntimeException("Message was not a FhirReceive and cannot be processed: $message") + } + + /** + * Processes the FHIR receive queue message. + * + * @param queueMessage The queue message containing details about the report. + * @param actionLogger The logger used to track actions and errors. + * @param actionHistory The action history related to receiving the report. + * @return A list of FHIR engine run results. + */ + private fun processFhirReceiveQueueMessage( + queueMessage: FhirReceiveQueueMessage, + actionLogger: ActionLogger, + actionHistory: ActionHistory, + ): List { + val contextMap = createLoggingContextMap(queueMessage, actionHistory) + // Use the logging context for tracing + withLoggingContext(contextMap) { + actionLogger.setReportId(queueMessage.reportId) + val sender = getSender(queueMessage, actionLogger, actionHistory) ?: return emptyList() + + // Process the message if no errors occurred + return handleSuccessfulProcessing(queueMessage, sender, actionLogger, actionHistory) + } + } + + /** + * Creates the logging context map. + * + * @param queueMessage The queue message containing details about the report. + * @param actionHistory The action history related to receiving the report. + * @return The logging context map. + */ + private fun createLoggingContextMap( + queueMessage: FhirReceiveQueueMessage, + actionHistory: ActionHistory, + ): Map = mapOf( + MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, + MDCUtils.MDCProperty.REPORT_ID to queueMessage.reportId, + MDCUtils.MDCProperty.BLOB_URL to queueMessage.blobURL, + ) + + /** + * Retrieves the sender based on the queue message and logs any relevant errors. + * + * @param queueMessage The queue message containing details about the report. + * @param actionLogger The logger used to track actions and errors. + * @param actionHistory The action history related to receiving the report. + * @return The sender, or null if the sender was not found or is inactive. + */ + private fun getSender( + queueMessage: FhirReceiveQueueMessage, + actionLogger: ActionLogger, + actionHistory: ActionHistory, + ): Sender? { + val clientId = queueMessage.headers[clientIdHeader] + val sender = clientId?.takeIf { it.isNotBlank() }?.let { settings.findSender(it) } + + actionHistory.trackActionParams(queueMessage.headers.toString()) + + // Handle case where sender is not found + return if (sender == null) { + // Send an error event + reportEventService.sendSubmissionProcessingError( + ReportStreamEventName.REPORT_NOT_RECEIVABLE, + TaskAction.receive, + "Sender is not found in matching client id: ${queueMessage.headers[clientIdHeader]}.", + queueMessage.reportId, + queueMessage.blobURL + ) { + params( + actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } + .plus( + mapOf( + ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), + ) + ) + ) + } + + // Insert the rejection into the submission table + val submission = + Submission( + queueMessage.reportId.toString(), "Rejected", + queueMessage.blobURL, + "Sender not found matching client_id: ${queueMessage.headers[clientIdHeader]}" + ) + submissionTableService.insertSubmission(submission) + null + } else { + // Handle case where sender is inactive + if (sender.customerStatus == CustomerStatus.INACTIVE) { + // Track the action result and log the error + actionHistory.trackActionResult(HttpStatus.NOT_ACCEPTABLE) + actionLogger.error( + InvalidParamMessage("Sender has customer status INACTIVE: " + queueMessage.headers[clientIdHeader]) + ) + } + + // Track sender information + actionHistory.trackActionSenderInfo(sender.fullName, queueMessage.headers["payloadname"]) + actionHistory.trackActionResult(HttpStatus.CREATED) + sender + } + } + + /** + * Handles successful processing of the queue message. + * + * @param queueMessage The queue message containing details about the report. + * @param sender The sender information. + * @param actionHistory The action history related to receiving the report. + * @return A list of FHIR engine run results. + */ + private fun handleSuccessfulProcessing( + queueMessage: FhirReceiveQueueMessage, + sender: Sender, + actionLogger: ActionLogger, + actionHistory: ActionHistory, + ): List { + // Get content from blob storage and create report + val report = validateSubmissionMessage(sender, actionLogger, queueMessage) ?: return emptyList() + + // Determine the mime format of the message + val mimeFormat = + MimeFormat.valueOfFromMimeType( + queueMessage.headers[contentTypeHeader]?.substringBefore(';') ?: "" + ) + + val blobInfo = BlobAccess.BlobInfo( + mimeFormat, + queueMessage.blobURL, + queueMessage.digest.toByteArray() + ) + + actionHistory.trackExternalInputReport( + report, + blobInfo + ) + + // Send an event indicating the report was received + reportEventService.sendReportEvent( + eventName = ReportStreamEventName.REPORT_RECEIVED, + childReport = report, + pipelineStepName = TaskAction.receive + ) { + params( + listOfNotNull( + ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), + ReportStreamEventProperties.SENDER_NAME to sender.fullName, + ReportStreamEventProperties.FILE_LENGTH to queueMessage.headers["content-length"].toString(), + getSenderIP(queueMessage.headers)?.let { ReportStreamEventProperties.SENDER_IP to it }, + ReportStreamEventProperties.ITEM_FORMAT to mimeFormat + ).toMap() + ) + } + + // Insert the acceptance into the submissions table + val tableEntity = Submission( + queueMessage.reportId.toString(), + "Accepted", + queueMessage.blobURL, + actionLogger.errors.takeIf { it.isNotEmpty() }?.map { it.detail.message }?.toString() + ) + submissionTableService.insertSubmission(tableEntity) + + return if (actionLogger.errors.isNotEmpty()) { + // Send an event indicating the report was received + reportEventService.sendReportProcessingError( + ReportStreamEventName.REPORT_NOT_PROCESSABLE, + report, + TaskAction.receive, + "Submitted report was either empty or could not be parsed." + ) { + params( + actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } + .plus( + mapOf( + ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), + ) + ) + ) + } + emptyList() + } else { + // Create a route event + val routeEvent = ProcessEvent(Event.EventAction.CONVERT, report.id, Options.None, emptyMap(), emptyList()) + + // Return the result of the FHIR engine run + listOf( + FHIREngineRunResult( + routeEvent, + report, + queueMessage.blobURL, + FhirConvertQueueMessage( + report.id, + queueMessage.blobURL, + queueMessage.digest, + queueMessage.blobSubFolderName, + sender.topic, + sender.schemaName + ) + ) + ) + } + } + + private fun validateSubmissionMessage( + sender: Sender, + actionLogger: ActionLogger, + queueMessage: FhirReceiveQueueMessage, + ): Report? { + val rawReport = BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) + return if (rawReport.isBlank()) { + actionLogger.error(InvalidReportMessage("Provided raw data is empty.")) + null + } else { + val report: Report + val sources = listOf(ClientSource(organization = sender.organizationName, client = sender.name)) + + when (sender.format) { + MimeFormat.HL7 -> { + val messages: List = HL7Reader(actionLogger).getMessages(rawReport) + val isBatch: Boolean = HL7Reader(actionLogger).isBatch(rawReport, messages.size) + // create a Report for this incoming HL7 message to use for tracking in the database + + report = Report( + if (isBatch) MimeFormat.HL7_BATCH else MimeFormat.HL7, + sources, + messages.size, + metadata = metadata, + nextAction = TaskAction.convert, + topic = sender.topic, + id = queueMessage.reportId, + bodyURL = queueMessage.blobURL + ) + + // check for valid message type + messages.forEachIndexed { idx, element -> + MessageType.validateMessageType(element, actionLogger, idx + 1) + } + } + + MimeFormat.FHIR -> { + val bundles = FhirTranscoder.getBundles(rawReport, actionLogger) + report = Report( + MimeFormat.FHIR, + sources, + bundles.size, + metadata = metadata, + nextAction = TaskAction.convert, + topic = sender.topic, + id = queueMessage.reportId, + bodyURL = queueMessage.blobURL + ) + } + + else -> { + actionLogger.error(InvalidReportMessage("Unsupported sender format: ${sender.format}")) + reportEventService.sendSubmissionProcessingError( + ReportStreamEventName.REPORT_NOT_PROCESSABLE, + TaskAction.receive, + "Unsupported sender format ${sender.format}.", + queueMessage.reportId, + queueMessage.blobURL + ) { + params( + actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } + .plus( + mapOf( + ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), + ReportStreamEventProperties.SENDER_NAME to sender.fullName, + ReportStreamEventProperties.FILE_LENGTH to queueMessage.headers["content-length"] + .toString(), + ReportStreamEventProperties.SENDER_IP to (getSenderIP(queueMessage.headers) ?: ""), + ReportStreamEventProperties.ITEM_FORMAT to sender.format + ) + ) + ) + } + // Insert the acceptance into the submissions table + val tableEntity = Submission( + queueMessage.reportId.toString(), + "Rejected", + queueMessage.blobURL, + actionLogger.errors.takeIf { it.isNotEmpty() }?.map { it.detail.message }?.toString() + ) + submissionTableService.insertSubmission(tableEntity) + throw IllegalStateException("Unsupported sender format: ${sender.format}") + } + } + report + } + } +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt index eb6313974b0..cc732026df9 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt @@ -2,6 +2,8 @@ package gov.cdc.prime.router.fhirengine.engine import com.fasterxml.jackson.annotation.JsonProperty import fhirengine.engine.CustomFhirPathFunctions +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogDetail import gov.cdc.prime.router.ActionLogScope import gov.cdc.prime.router.ActionLogger @@ -340,7 +342,7 @@ class FHIRReceiverFilter( // download and parse FHIR document val fhirJson = LogMeasuredTime.measureAndLogDurationWithReturnedValue( "Downloaded content from queue message" - ) { queueMessage.downloadContent() } + ) { BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) } val bundle = FhirTranscoder.decode(fhirJson) actionHistory.trackActionReceiverInfo(receiver.organizationName, receiver.name) @@ -389,7 +391,7 @@ class FHIRReceiverFilter( FhirTranslateQueueMessage( report.id, blobInfo.blobUrl, - BlobAccess.digestToString(blobInfo.digest), + BlobUtils.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic, receiver.fullName diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt index 7e31a8a7e50..506c9b2cfd7 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt @@ -6,6 +6,7 @@ import ca.uhn.hl7v2.model.Segment import ca.uhn.hl7v2.util.Terser import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.CustomTranslationFunctions +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.Hl7Configuration @@ -63,18 +64,17 @@ class FHIRTranslator( actionLogger: ActionLogger, actionHistory: ActionHistory, ): List { - message as ReportPipelineMessage - val contextMap = mapOf( - MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, - MDCUtils.MDCProperty.REPORT_ID to message.reportId, - MDCUtils.MDCProperty.TOPIC to message.topic, - MDCUtils.MDCProperty.BLOB_URL to message.blobURL - ) - withLoggingContext(contextMap) { - logger.trace("Starting translate work") - actionHistory.trackExistingInputReport(message.reportId) - when (message) { - is FhirTranslateQueueMessage -> { + when (message) { + is FhirTranslateQueueMessage -> { + val contextMap = mapOf( + MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, + MDCUtils.MDCProperty.REPORT_ID to message.reportId, + MDCUtils.MDCProperty.TOPIC to message.topic, + MDCUtils.MDCProperty.BLOB_URL to message.blobURL + ) + withLoggingContext(contextMap) { + logger.trace("Starting translate work") + actionHistory.trackExistingInputReport(message.reportId) val receiver = settings.findReceiver(message.receiverFullName) ?: throw RuntimeException("Receiver with name ${message.receiverFullName} was not found") actionHistory.trackActionReceiverInfo(receiver.organizationName, receiver.name) @@ -84,13 +84,13 @@ class FHIRTranslator( listOf(sendTranslated(message, receiver, actionHistory)) } } - - else -> { - throw RuntimeException( - "Message was not a FhirTranslateQueueMessage and cannot be " + - "processed by FHIRTranslator: $message" - ) - } + } + else -> { + // Handle the case where casting failed + throw RuntimeException( + "Message was not a FhirTranslateQueueMessage and cannot be " + + "processed by FHIRTranslator: $message" + ) } } } @@ -145,7 +145,10 @@ class FHIRTranslator( actionHistory: ActionHistory, ): FHIREngineRunResult { logger.trace("Preparing to send translated message") - val bodyBytes = getByteArrayFromBundle(receiver, FhirTranscoder.decode(message.downloadContent())) + val bodyBytes = + getByteArrayFromBundle( + receiver, FhirTranscoder.decode(BlobAccess.downloadBlob(message.blobURL, message.digest)) + ) val (report, event, blobInfo) = Report.generateReportAndUploadBlob( Event.EventAction.BATCH, @@ -221,7 +224,7 @@ class FHIRTranslator( val converter = FhirToHl7Converter( receiver.schemaName, - BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().blobEnvVar), + BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), context = FhirToHl7Context(CustomFhirPathFunctions(), config, CustomTranslationFunctions()) ) val hl7Message = converter.process(bundle) diff --git a/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt b/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt new file mode 100644 index 00000000000..7251f9d5460 --- /dev/null +++ b/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt @@ -0,0 +1,64 @@ +package gov.cdc.prime.router.fhirengine.engine + +import ca.uhn.hl7v2.model.Message +import gov.cdc.prime.router.ActionLogger +import gov.cdc.prime.router.InvalidHL7Message +import fhirengine.translation.hl7.structures.nistelr251.segment.MSH as NIST_MSH + +/** + * Class representing a specific HL7 message type. + * + * This class is used to validate that a given HL7 message matches the expected message type. + * + * @property expectedType The HL7 message type this instance represents. + */ +enum class MessageType { + + ORU_R01, + ORM_O01, + OML_O21, + ; + + companion object { + + /** + * Creates a MessageType instance from a string representation. + * + * @param type The string representation of the HL7 message type. + * @return The corresponding MessageType instance, or null if the type is unsupported. + */ + private fun fromString(type: String): MessageType? { + return when (type) { + "ORU_R01" -> ORU_R01 + "ORM_O01" -> ORM_O01 + "OML_O21" -> OML_O21 + else -> null + } + } + + /** + * Validates the type of the given message. + * + * This method retrieves the message type from the message and checks if it matches any of the supported types. + * If the type is unsupported, an error is logged. + * + * @param message The HL7 message to be validated. + * @param actionLogs Logger to record the result of the validation. + * @param itemIndex The index of the item being processed, used for logging. + */ + fun validateMessageType(message: Message, actionLogs: ActionLogger, itemIndex: Int) { + // Determine the message type string from the MSH segment + val messageTypeStr = when (val msh = message.get("MSH")) { + is NIST_MSH -> msh.messageType.messageStructure.toString() + is ca.uhn.hl7v2.model.v251.segment.MSH -> msh.messageType.messageStructure.toString() + is ca.uhn.hl7v2.model.v27.segment.MSH -> msh.messageType.messageStructure.toString() + else -> "" + } + + // Convert the string representation to a MessageType instance and validate it + val messageType = fromString(messageTypeStr) + messageType ?: actionLogs.getItemLogger(itemIndex) + .error(InvalidHL7Message("Ignoring unsupported HL7 message type $messageType")) + } + } +} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt b/prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt similarity index 51% rename from prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt rename to prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt index 032ce14fc5c..6350a676a33 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt @@ -3,24 +3,14 @@ package gov.cdc.prime.router.fhirengine.engine import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo import com.fasterxml.jackson.annotation.JsonTypeName -import com.fasterxml.jackson.databind.DeserializationFeature -import com.fasterxml.jackson.databind.json.JsonMapper -import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator -import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder -import com.fasterxml.jackson.module.kotlin.readValue +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.Options import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Topic -import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.Event import gov.cdc.prime.router.azure.QueueAccess -import java.util.Base64 import java.util.UUID -// This is a size limit dictated by our infrastructure in azure -// https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted -private const val MESSAGE_SIZE_LIMIT = 64 * 1000 - /** * An interface for Messages to be put on an Azure Queue */ @@ -34,84 +24,39 @@ private const val MESSAGE_SIZE_LIMIT = 64 * 1000 JsonSubTypes.Type(ProcessEventQueueMessage::class, name = "process"), JsonSubTypes.Type(ReportEventQueueMessage::class, name = "report") ) -abstract class QueueMessage { - abstract val messageQueueName: String - +abstract class PrimeRouterQueueMessage : QueueMessage { fun send(queueAccess: QueueAccess) { if (this.messageQueueName.isNotEmpty()) { queueAccess.sendMessage(this.messageQueueName, serialize()) } } - - fun serialize(): String { - val bytes = mapper.writeValueAsBytes(this) - check(bytes.size < MESSAGE_SIZE_LIMIT) { "Message is too big for the queue." } - return String(Base64.getEncoder().encode(bytes)) - } - - companion object { - private val ptv = BasicPolymorphicTypeValidator.builder() - .build() - val mapper: JsonMapper = jacksonMapperBuilder() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .polymorphicTypeValidator(ptv) - .activateDefaultTyping(ptv) - .build() - - fun deserialize(s: String): QueueMessage { - return mapper.readValue(s) - } - - const val elrConvertQueueName = "elr-fhir-convert" - const val elrDestinationFilterQueueName = "elr-fhir-destination-filter" - const val elrReceiverFilterQueueName = "elr-fhir-receiver-filter" - const val elrTranslationQueueName = "elr-fhir-translate" - const val elrSendQueueName = "send" - } - - override fun toString(): String { - return mapper.writeValueAsString(this) - } } -interface WithDownloadableReport { - val blobURL: String - val digest: String - - /** - * Download the file associated with a RawSubmission message - */ - fun downloadContent(): String { - val blobContent = BlobAccess.downloadBlobAsByteArray(this.blobURL) - val localDigest = BlobAccess.digestToString(BlobAccess.sha256Digest(blobContent)) - check(this.digest == localDigest) { - "FHIR - Downloaded file does not match expected file\n${this.digest} | $localDigest" - } - return String(blobContent) - } -} +abstract class ReportPipelineMessage : + QueueMessage.ReportInformation, + PrimeRouterQueueMessage() -interface ReportIdentifyingInformation { - val blobSubFolderName: String - val reportId: ReportId - val topic: Topic +@JsonTypeName("receive") +data class FhirReceiveQueueMessage( + override val reportId: ReportId, + override val blobURL: String, + override val digest: String, + override val blobSubFolderName: String, + override val headers: Map = emptyMap(), +) : ReportPipelineMessage(), QueueMessage.ReceiveInformation { + override val messageQueueName = QueueMessage.Companion.elrReceiveQueueName } -abstract class ReportPipelineMessage : - ReportIdentifyingInformation, - WithDownloadableReport, - QueueMessage() - @JsonTypeName("convert") data class FhirConvertQueueMessage( override val reportId: ReportId, override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - override val topic: Topic, - val schemaName: String = "", + var topic: Topic, + var schemaName: String = "", ) : ReportPipelineMessage() { - override val messageQueueName = elrConvertQueueName + override val messageQueueName = QueueMessage.Companion.elrConvertQueueName } @JsonTypeName("destination-filter") @@ -120,9 +65,9 @@ data class FhirDestinationFilterQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - override val topic: Topic, + val topic: Topic, ) : ReportPipelineMessage() { - override val messageQueueName = elrDestinationFilterQueueName + override val messageQueueName = QueueMessage.Companion.elrDestinationFilterQueueName } @JsonTypeName("receiver-filter") @@ -131,10 +76,10 @@ data class FhirReceiverFilterQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - override val topic: Topic, + val topic: Topic, val receiverFullName: String, ) : ReportPipelineMessage() { - override val messageQueueName = elrReceiverFilterQueueName + override val messageQueueName = QueueMessage.Companion.elrReceiverFilterQueueName } @JsonTypeName("translate") @@ -143,13 +88,13 @@ data class FhirTranslateQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - override val topic: Topic, + val topic: Topic, val receiverFullName: String, ) : ReportPipelineMessage() { - override val messageQueueName = elrTranslationQueueName + override val messageQueueName = QueueMessage.Companion.elrTranslationQueueName } -abstract class WithEventAction : QueueMessage() { +abstract class WithEventAction : PrimeRouterQueueMessage() { abstract val eventAction: Event.EventAction } @@ -170,7 +115,7 @@ data class ReportEventQueueMessage( val reportId: UUID, val at: String, ) : WithEventAction() { - override val messageQueueName = elrSendQueueName + override val messageQueueName = QueueMessage.Companion.elrSendQueueName } @JsonTypeName("process") @@ -183,4 +128,22 @@ data class ProcessEventQueueMessage( val at: String, ) : WithEventAction() { override val messageQueueName = "" +} + +// Register submodule subtypes +fun registerPrimeRouterQueueMessageSubtypes() { + QueueMessage.ObjectMapperProvider.registerSubtypes( + FhirConvertQueueMessage::class.java, + FhirDestinationFilterQueueMessage::class.java, + FhirReceiverFilterQueueMessage::class.java, + FhirTranslateQueueMessage::class.java, + BatchEventQueueMessage::class.java, + ProcessEventQueueMessage::class.java, + ReportEventQueueMessage::class.java + ) +} + +// Call this function at the appropriate initialization point +fun initializeQueueMessages() { + registerPrimeRouterQueueMessageSubtypes() } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt b/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt index 8720b3ed611..ecfe4571007 100644 --- a/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt +++ b/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt @@ -36,7 +36,7 @@ class FhirTransformer( schema: String, blobConnectionInfo: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build( "metadata", - Environment.get().blobEnvVar + Environment.get().storageEnvVar ), ) : this( schemaRef = fhirTransformSchemaFromFile(schema, blobConnectionInfo), diff --git a/prime-router/src/main/kotlin/transport/RESTTransport.kt b/prime-router/src/main/kotlin/transport/RESTTransport.kt index 46bc89ce262..7f7f0c8e448 100644 --- a/prime-router/src/main/kotlin/transport/RESTTransport.kt +++ b/prime-router/src/main/kotlin/transport/RESTTransport.kt @@ -113,6 +113,7 @@ class RESTTransport(private val httpClient: HttpClient? = null) : ITransport { if (restTransportInfo.authType == "apiKey") { val apiKeyCredential = credential as UserApiKeyCredential + httpHeaders["shared-api-key"] = apiKeyCredential.apiKey httpHeaders["System_ID"] = apiKeyCredential.user httpHeaders["Key"] = apiKeyCredential.apiKey accessToken = apiKeyCredential.apiKey diff --git a/prime-router/src/main/kotlin/cli/tests/fakePII.fhir b/prime-router/src/main/resources/clitests/compare-test-files/fakePII.fhir similarity index 100% rename from prime-router/src/main/kotlin/cli/tests/fakePII.fhir rename to prime-router/src/main/resources/clitests/compare-test-files/fakePII.fhir diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml index 52117eab502..4f3244f0067 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml @@ -2,8 +2,9 @@ elements: # removing the street address is more complicated because it is a list so we will do this in code - name: pii-removal-street-address2 + condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address").extension.where(url = "XAD.2").empty().not()' value: [ 'getFakeValueForElement("STREET_ADDRESS_2")' ] - bundleProperty: '%resource.extension(%`rsext-xad-address`).extension.where(url = "XAD.2").value' + bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address").extension.where(url = "XAD.2").value' - name: pii-removal-city value: [ 'getFakeValueForElement("CITY",%resource.state)' ] diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml index 4968f5eac5a..546e4581574 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml @@ -6,5 +6,6 @@ elements: # removing a given name is more complicated because it is a list so we will do this in code - name: pii-removal-middle-name + condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name").exists()' value: [ 'getFakeValueForElement("PERSON_GIVEN_NAME")' ] - bundleProperty: '%resource.extension(%`rsext-xpn-human-name`).extension.where(url="XPN.3").value' \ No newline at end of file + bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name").extension("XPN.2").value[x]' \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml index fef6b43d8a6..ce9dc465a8b 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml @@ -2,7 +2,7 @@ elements: - name: pii-removal-phone-area-code condition: "%resource.where(system = 'phone')" value: [ 'getFakeValueForElement("TELEPHONE").substring(0,3)' ] - bundleProperty: '%resource.extension(%`ext-contactpoint-area`).value' + bundleProperty: '%resource.extension(`https://reportstream.cdc.gov/fhir/StructureDefinition/contactpoint-area`).value[x]' - name: pii-removal-local-phone condition: "%resource.where(system = 'phone')" diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml new file mode 100644 index 00000000000..f3d3ffdb557 --- /dev/null +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml @@ -0,0 +1,27 @@ +## Suppresses Device information OBX-18-1,OBX-18-2,OBX-18-3 +elements: + ##OBX-18-1 + - name: suppress-device-name + resource: 'Bundle.entry.resource.ofType(Device).identifier' + value: [ '""' ] + bundleProperty: '%resource.value' + + ##OBX-18-2 + - name: suppess-device-namespace_id + resource: 'Bundle.entry.resource.ofType(Device).identifier' + condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id").exists()' + bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id").value[x]' + value: [ '""' ] + + ##OBX-18-3 + - name: suppress-device-universal-id + resource: 'Bundle.entry.resource.ofType(Device).identifier' + condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id").exists()' + bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id").value[x]' + value: [ '""' ] + + ##OBX-18-3 different mappings + - name: suppress-device-type-id + resource: 'Bundle.entry.resource.ofType(Device).identifier' + bundleProperty: '%resource.type.coding.code' + value: [ '""' ] \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml new file mode 100644 index 00000000000..072c2eb82a4 --- /dev/null +++ b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml @@ -0,0 +1,42 @@ +# $schema: ./../../../../../../../../metadata/json_schema/fhir/fhir-to-hl7-mapping.json + +constants: + commentCondition: '%resource.code.coding.code.exists() and %resource.code.text.exists()' + +elements: + - name: note-id + value: [ '%noteIndex + 1' ] + hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-1' ] + + - name: note-source + value: [ '%resource.extension(%`rsext-note-source`).value' ] + hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-2' ] + + - name: unwanted-condition-source + condition: '%commentCondition' + value: ['"O"'] + hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-2' ] + + - name: unwanted-condition-comment-string + condition: '%commentCondition' + value: [ '"OBX filtered for identifier = " + %resource.code.coding.code + " - " + %resource.code.text + "; value = " + %resource.value.coding.code + " - " + %resource.value.coding.display + ". OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable."' ] + hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-3' ] + + - name: note-comment + condition: '%context.author.exists().not() or (%context.author.exists() and %context.author.is(string).not())' + resource: '%resource.text.union(%resource.extension(%`rsext-note-comment`).tail().value)' + resourceIndex: stIndex + constants: + stField: '%{hl7NotePath}/NTE(%{noteIndex})-3(%{stIndex})' + schema: classpath:/metadata/hl7_mapping/datatypes/annotation/ST.yml + + - name: note-comment-author-string + condition: '%resource.author.exists() and %resource.author.is(string)' + value: [ '%resource.text + " Authored by: " + %resource.author' ] + hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-3' ] + + - name: note-comment-type-identifier + resource: '%resource.extension(%`rsext-note-type`).value' + constants: + cweField: '%{hl7NotePath}/NTE(%{noteIndex})-4' + schema: classpath:/metadata/hl7_mapping/datatypes/codeableConcept/CWE.yml diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml new file mode 100644 index 00000000000..197d135adfb --- /dev/null +++ b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml @@ -0,0 +1,59 @@ +hl7Class: ca.uhn.hl7v2.model.v251.message.ORU_R01 + +extends: classpath:/metadata/hl7_mapping/ORU_R01/ORU_R01-base.yml +elements: + # MSH 3-1 + - name: nj-sending-application-namespace-id + value: [ '"CDC PRIME - Atlanta, Georgia (Dekalb)"' ] + hl7Spec: [ MSH-3-1 ] + + # MSH 3-2 + - name: nj-sending-application-universal-id + value: [ '"2.16.840.1.114222.4.1.237821"' ] + hl7Spec: [ MSH-3-2 ] + + # MSH 3-3 + - name: nj-sending-application-universal-id-type + value: [ '"ISO"' ] + hl7Spec: [ MSH-3-3 ] + + # MSH 4-1 + - name: nj-reporting-facility-name + value: [ '"CDC PRIME"' ] + hl7Spec: [ MSH-4-1 ] + + # MSH 4-2 + - name: nj-reporting-facility-id + value: [ '"11D2030855"' ] + hl7Spec: [ MSH-4-2 ] + + # MSH 4-3 + - name: nj-reporting-facility-id-type + value: [ '"CLIA"' ] + hl7Spec: [ MSH-4-3 ] + + # MSH 5 + - name: nj-receiving-application-namespace-id + value: [ '"ELRS"' ] + hl7Spec: [ MSH-5-1 ] + + - name: nj-receiving-application-universal-id + value: [ '"2.16.840.1.113883.3.1299.5.1.6.1"' ] + hl7Spec: [ MSH-5-2 ] + + - name: nj-receiving-application-universal-id-type + value: [ '"ISO"' ] + hl7Spec: [ MSH-5-3 ] + + # MSH 6 + - name: nj-receiving-facility-namespace-id + value: [ '"NJDOH"' ] + hl7Spec: [ MSH-6-1 ] + + - name: nj-receiving-facility-universal-id + value: [ '"2.16.840.1.113883.3.1299"' ] + hl7Spec: [ MSH-6-2 ] + + - name: nj-receiving-facility-universal-id-type + value: [ '"ISO"' ] + hl7Spec: [ MSH-6-3 ] \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml new file mode 100644 index 00000000000..54f92f330cc --- /dev/null +++ b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml @@ -0,0 +1,15 @@ +hl7Class: ca.uhn.hl7v2.model.v251.message.ORU_R01 + +extends: classpath:/metadata/hl7_mapping/ORU_R01/ORU_R01-base.yml + +elements: + + - name: observation-result-with-aoe + resource: "%resource.result.resolve().where(code.coding.extension('https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code').value.where(code in ('55735004' | '840539006'))) | %resource.basedOn.resolve().supportingInfo.resolve()" + + - name: order-note + resource: "%resource.basedOn.resolve().note | %resource.result.resolve().where(code.coding.extension('https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code').value.where(code in ('55735004' | '840539006')).exists().not())" + schema: classpath:/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml + + + diff --git a/prime-router/src/test/kotlin/SubmissionReceiverTests.kt b/prime-router/src/test/kotlin/SubmissionReceiverTests.kt index 981269d6625..5f3b70619fa 100644 --- a/prime-router/src/test/kotlin/SubmissionReceiverTests.kt +++ b/prime-router/src/test/kotlin/SubmissionReceiverTests.kt @@ -3,6 +3,7 @@ package gov.cdc.prime.router import assertk.assertFailure import assertk.assertThat import assertk.assertions.isInstanceOf +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.azure.ActionHistory import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.DatabaseAccess @@ -11,7 +12,6 @@ import gov.cdc.prime.router.azure.ReportWriter import gov.cdc.prime.router.azure.WorkflowEngine import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.common.BaseEngine -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.serializers.CsvSerializer import gov.cdc.prime.router.serializers.Hl7Serializer import gov.cdc.prime.router.serializers.ReadResult diff --git a/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt b/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt index 93f9f67c299..1d23f1c0356 100644 --- a/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt +++ b/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt @@ -9,6 +9,7 @@ import assertk.assertions.isNotNull import assertk.assertions.isNull import assertk.assertions.isTrue import com.microsoft.azure.functions.HttpMethod +import gov.cdc.prime.reportstream.shared.BlobUtils import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.ClientSource @@ -129,7 +130,11 @@ class ActionHistoryTests { val actionHistory1 = ActionHistory(TaskAction.receive) val blobInfo1 = BlobAccess.BlobInfo(MimeFormat.CSV, "myUrl", byteArrayOf(0x11, 0x22)) val payloadName = "quux" - actionHistory1.trackExternalInputReport(report1, blobInfo1, payloadName) + actionHistory1.trackExternalInputReport( + report1, + blobInfo1, + payloadName + ) assertNotNull(actionHistory1.reportsReceived[report1.id]) val reportFile = actionHistory1.reportsReceived[report1.id]!! assertThat(reportFile.schemaName).isEqualTo("one") @@ -143,7 +148,12 @@ class ActionHistoryTests { assertThat(actionHistory1.action.externalName).isEqualTo(payloadName) // not allowed to track the same report twice. - assertFailure { actionHistory1.trackExternalInputReport(report1, blobInfo1) } + assertFailure { + actionHistory1.trackExternalInputReport( + report1, + blobInfo1 + ) + } } @Test @@ -445,9 +455,10 @@ class ActionHistoryTests { OffsetDateTime.now() ) mockkObject(BlobAccess.Companion) + mockkObject(BlobUtils) val blobUrls = mutableListOf() every { BlobAccess.uploadBlob(capture(blobUrls), any()) } returns "http://blobUrl" - every { BlobAccess.sha256Digest(any()) } returns byteArrayOf() + every { BlobUtils.sha256Digest(any()) } returns byteArrayOf() every { BlobAccess.uploadBody(any(), any(), any(), any(), Event.EventAction.NONE) } answers { callOriginal() } val header = mockk() every { @@ -684,9 +695,10 @@ class ActionHistoryTests { OffsetDateTime.now() ) mockkObject(BlobAccess.Companion) + mockkObject(BlobUtils) val blobUrls = mutableListOf() every { BlobAccess.uploadBlob(capture(blobUrls), any()) } returns "http://blobUrl" - every { BlobAccess.sha256Digest(any()) } returns byteArrayOf() + every { BlobUtils.sha256Digest(any()) } returns byteArrayOf() every { BlobAccess.uploadBody(any(), any(), any(), any(), Event.EventAction.NONE) } answers { callOriginal() } val header = mockk() every { diff --git a/prime-router/src/test/kotlin/azure/BlobAccessTests.kt b/prime-router/src/test/kotlin/azure/BlobAccessTests.kt index 31a90ac3a25..bdda5a8abdd 100644 --- a/prime-router/src/test/kotlin/azure/BlobAccessTests.kt +++ b/prime-router/src/test/kotlin/azure/BlobAccessTests.kt @@ -20,6 +20,7 @@ import com.azure.storage.blob.BlobServiceClientBuilder import com.azure.storage.blob.models.BlobDownloadContentResponse import com.azure.storage.blob.models.BlobDownloadResponse import com.azure.storage.blob.models.BlobItem +import gov.cdc.prime.reportstream.shared.BlobUtils import gov.cdc.prime.router.BlobStoreTransportType import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat @@ -549,14 +550,14 @@ class BlobAccessTests { Event.EventAction.NONE ) } returns - BlobAccess.BlobInfo(report1.bodyFormat, testUrl, BlobAccess.sha256Digest(testBytes)) + BlobAccess.BlobInfo(report1.bodyFormat, testUrl, BlobUtils.sha256Digest(testBytes)) val testBlob = BlobAccess() val result = testBlob.uploadReport(report1, testBytes) assertThat(result.format).isEqualTo(testFormat) assertThat(result.blobUrl).isEqualTo(testUrl) - assertThat(result.digest).isEqualTo(BlobAccess.sha256Digest(testBytes)) + assertThat(result.digest).isEqualTo(BlobUtils.sha256Digest(testBytes)) } @Test @@ -597,7 +598,7 @@ class BlobAccessTests { assertThat(result.format).isEqualTo(testFormat) // test blobUrl is as expected for the EventAction assertThat(result.blobUrl).contains(BlobAccess.directoryForAction(it)) - assertThat(result.digest).isEqualTo(BlobAccess.sha256Digest(testBytes)) + assertThat(result.digest).isEqualTo(BlobUtils.sha256Digest(testBytes)) } } @@ -777,7 +778,7 @@ class BlobAccessTests { @Test fun `test build container metadata`() { - val defaultEnvVar = Environment.get().blobEnvVar + val defaultEnvVar = Environment.get().storageEnvVar val testEnvVar = "testenv" val testContainer = "testcontainer" diff --git a/prime-router/src/test/kotlin/azure/EventTest.kt b/prime-router/src/test/kotlin/azure/EventTest.kt index 63080779d27..58c66f86f45 100644 --- a/prime-router/src/test/kotlin/azure/EventTest.kt +++ b/prime-router/src/test/kotlin/azure/EventTest.kt @@ -12,7 +12,7 @@ class EventTest { fun `test reportEvent encode and decode`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), false) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -20,7 +20,7 @@ class EventTest { fun `test reportEvent encode and decode with time`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), false, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -28,7 +28,7 @@ class EventTest { fun `test reportEvent encode and decode as empty`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), true) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -36,7 +36,7 @@ class EventTest { fun `test reportEvent encode and decode as empty with time`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), true, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -44,7 +44,7 @@ class EventTest { fun `test receiverEvent encode and decode`() { val event = BatchEvent(Event.EventAction.BATCH, "test", false) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -52,7 +52,7 @@ class EventTest { fun `test batchEvent encode and decode with time`() { val event = BatchEvent(Event.EventAction.BATCH, "test", false, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -60,7 +60,7 @@ class EventTest { fun `test batchEvent encode and decode as empty`() { val event = BatchEvent(Event.EventAction.BATCH, "test", true) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -68,7 +68,7 @@ class EventTest { fun `test batchEvent encode and decode as empty with time`() { val event = BatchEvent(Event.EventAction.BATCH, "test", true, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -78,7 +78,7 @@ class EventTest { val reportId = UUID.randomUUID() val event = ProcessEvent(Event.EventAction.PROCESS, reportId, Options.None, emptyMap(), emptyList(), at) val message = event.toQueueMessage() - val returnEvent = Event.parseQueueMessage(message) + val returnEvent = Event.parsePrimeRouterQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } } \ No newline at end of file diff --git a/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt b/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt index 74ed50419a3..c431198cd5f 100644 --- a/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt +++ b/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt @@ -34,6 +34,8 @@ import gov.cdc.prime.router.TopicReceiver import gov.cdc.prime.router.UniversalPipelineSender import gov.cdc.prime.router.azure.BlobAccess.BlobContainerMetadata import gov.cdc.prime.router.azure.db.enums.TaskAction +import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile +import gov.cdc.prime.router.cli.PIIRemovalCommands import gov.cdc.prime.router.history.DetailedSubmissionHistory import gov.cdc.prime.router.history.azure.SubmissionsFacade import gov.cdc.prime.router.serializers.Hl7Serializer @@ -842,4 +844,139 @@ class ReportFunctionTests { ) + "]" ) } + + @Test + fun `No report`() { + val mockDb = mockk() + val reportId = UUID.randomUUID() + every { mockDb.fetchReportFile(reportId, null, null) } throws (IllegalStateException()) + val metadata = UnitTestUtils.simpleMetadata + val settings = FileSettings().loadOrganizations(oneOrganization) + val actionHistory = spyk(ActionHistory(TaskAction.receive)) + val result = ReportFunction( + makeEngine(metadata, settings), + actionHistory + ).processDownloadReport( + MockHttpRequestMessage(), + reportId, + true, + "local", + mockDb + ) + assert(result.status.value() == 400) + } + + @Test + fun `Report found, PII removal`() { + val reportFile = ReportFile() + reportFile.bodyUrl = "fakeurl.fhir" + mockkObject(AuthenticatedClaims) + val mockDb = mockk() + mockkClass(BlobAccess::class) + mockkObject(BlobAccess.Companion) + every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" + val blobConnectionInfo = mockk() + every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" + every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) + val reportId = UUID.randomUUID() + every { mockDb.fetchReportFile(reportId, null, null) } returns reportFile + val piiRemovalCommands = mockkClass(PIIRemovalCommands::class) + every { piiRemovalCommands.removePii(any()) } returns fhirReport + + val metadata = UnitTestUtils.simpleMetadata + val settings = FileSettings().loadOrganizations(oneOrganization) + val actionHistory = spyk(ActionHistory(TaskAction.receive)) + + val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( + MockHttpRequestMessage(), + reportId, + true, + "local", + mockDb, + piiRemovalCommands + ) + + assert(result.body.toString().contains("1667861767830636000.7db38d22-b713-49fc-abfa-2edba9c12347")) + } + + @Test + fun `Report found, asked for no removal on prod`() { + val reportFile = ReportFile() + reportFile.bodyUrl = "fakeurl.fhir" + mockkObject(AuthenticatedClaims) + val mockDb = mockk() + mockkClass(BlobAccess::class) + mockkObject(BlobAccess.Companion) + every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" + val blobConnectionInfo = mockk() + every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" + every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) + every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile + + val metadata = UnitTestUtils.simpleMetadata + val settings = FileSettings().loadOrganizations(oneOrganization) + val actionHistory = spyk(ActionHistory(TaskAction.receive)) + + val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( + MockHttpRequestMessage(), + UUID.randomUUID(), + false, + "prod", + mockDb + ) + + assert(result.status.equals(HttpStatus.BAD_REQUEST)) + } + + @Test + fun `valid access token, report found, no PII removal`() { + val reportFile = ReportFile() + reportFile.bodyUrl = "fakeurl.fhir" + mockkObject(AuthenticatedClaims) + val mockDb = mockk() + mockkClass(BlobAccess::class) + mockkObject(BlobAccess.Companion) + every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" + val blobConnectionInfo = mockk() + every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" + every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) + every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile + + val metadata = UnitTestUtils.simpleMetadata + val settings = FileSettings().loadOrganizations(oneOrganization) + val actionHistory = spyk(ActionHistory(TaskAction.receive)) + + val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( + MockHttpRequestMessage(), + UUID.randomUUID(), + false, + "local", + mockDb + ) + + assert(result.body.toString().contains("1667861767830636000.7db38d22-b713-49fc-abfa-2edba9c12347")) + } + + @Test + fun `valid access token, report found, body URL not FHIR`() { + val reportFile = ReportFile() + reportFile.bodyUrl = "fakeurl.hl7" + mockkObject(AuthenticatedClaims) + val mockDb = mockk() + every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile + + val metadata = UnitTestUtils.simpleMetadata + val settings = FileSettings().loadOrganizations(oneOrganization) + val actionHistory = spyk(ActionHistory(TaskAction.receive)) + + val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( + MockHttpRequestMessage(), + UUID.randomUUID(), + false, + "local", + mockDb + ) + + assert(result.status.equals(HttpStatus.BAD_REQUEST)) + } } \ No newline at end of file diff --git a/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt b/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt index 65967d70739..a3cb73ffe24 100644 --- a/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt +++ b/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt @@ -221,13 +221,13 @@ class WorkflowEngineTests { Event.EventAction.RECEIVE ) }.returns(BlobAccess.BlobInfo(MimeFormat.CSV, "http://anyblob.com", "".toByteArray())) - every { actionHistory.trackExternalInputReport(any(), any()) }.returns(Unit) + every { actionHistory.trackExternalInputReport(any(), any(), any()) }.returns(Unit) val engine = makeEngine(metadata, settings) engine.recordReceivedReport(report1, "body".toByteArray(), sender, actionHistory) verify(exactly = 1) { - actionHistory.trackExternalInputReport(any(), any()) + actionHistory.trackExternalInputReport(any(), any(), any()) BlobAccess.Companion.uploadBody(any(), any(), any(), any(), any()) } confirmVerified(blobMock) diff --git a/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt b/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt index 1d64542a0e4..7a40dd6272b 100644 --- a/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt +++ b/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt @@ -173,6 +173,13 @@ object UniversalPipelineTestUtils { topic = Topic.FULL_ELR, schemaName = "classpath:/metadata/fhir_transforms/senders/test-sender-transform.yml" ) + val csvSenderWithNoTransform = UniversalPipelineSender( + "elr-csv-sender", + "phd", + MimeFormat.CSV, + CustomerStatus.ACTIVE, + topic = Topic.FULL_ELR, + ) val hl7SenderWithNoTransform = UniversalPipelineSender( "hl7-elr-no-transform", "phd", @@ -194,6 +201,12 @@ object UniversalPipelineTestUtils { CustomerStatus.ACTIVE, topic = Topic.FULL_ELR, ) + val fhirSenderWithNoTransformInactive = UniversalPipelineSender( + "fhir-elr-no-transform-inactive", + "phd", + MimeFormat.FHIR, + topic = Topic.FULL_ELR, + ) val fhirSenderWithSendOriginal = UniversalPipelineSender( "fhir-elr-send_original", "phd", @@ -213,8 +226,10 @@ object UniversalPipelineTestUtils { senders = listOf( hl7Sender, fhirSender, + csvSenderWithNoTransform, hl7SenderWithNoTransform, fhirSenderWithNoTransform, + fhirSenderWithNoTransformInactive, senderWithValidation ), receivers = listOf( @@ -260,6 +275,7 @@ object UniversalPipelineTestUtils { assertThat(itemLineages).hasSize(expected) assertThat(itemLineages.map { it.childIndex }).isEqualTo(MutableList(expected) { 1 }) + // itemCount is on the report created by the test. It will not be null. if (parent.itemCount > 1) { assertThat(itemLineages.map { it.parentIndex }).isEqualTo((1..expected).toList()) } else { diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt index 194cf38f3dc..a7e9795e1cf 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt @@ -7,6 +7,8 @@ import assertk.assertions.hasSize import assertk.assertions.isEqualTo import assertk.assertions.isEqualToIgnoringGivenProperties import assertk.assertions.matchesPredicate +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.FileSettings import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat @@ -62,7 +64,6 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRConverter import gov.cdc.prime.router.fhirengine.engine.FhirDestinationFilterQueueMessage -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.DetailedActionLog import gov.cdc.prime.router.metadata.LookupTable @@ -128,18 +129,28 @@ class FHIRConverterIntegrationTests { ) } - private fun generateQueueMessage(report: Report, blobContents: String, sender: Sender): String { + private fun generateQueueMessage( + report: Report, + blobContents: String, + sender: Sender, + headers: Map? = null, + ): String { + val headersString = headers?.entries?.joinToString(separator = ",\n") { (key, value) -> + """"$key": "$value"""" + } ?: "" + return """ - { - "type": "convert", - "reportId": "${report.id}", - "blobURL": "${report.bodyURL}", - "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", - "blobSubFolderName": "${sender.fullName}", - "topic": "${sender.topic.jsonVal}", - "schemaName": "${sender.schemaName}" - } - """.trimIndent() + { + "type": "convert", + "reportId": "${report.id}", + "blobURL": "${report.bodyURL}", + "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", + "blobSubFolderName": "${sender.fullName}", + "topic": "${sender.topic.jsonVal}", + "schemaName": "${sender.schemaName}" + ${if (headersString.isNotEmpty()) ",\n$headersString" else ""} + } + """.trimIndent() } @BeforeEach @@ -298,7 +309,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), + BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), hl7SenderWithNoTransform.fullName, hl7SenderWithNoTransform.topic ) @@ -463,7 +474,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle.toByteArray())), + BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle.toByteArray())), fhirSenderWithNoTransform.fullName, fhirSenderWithNoTransform.topic ) @@ -614,7 +625,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), + BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), senderWithValidation.fullName, senderWithValidation.topic ) @@ -666,6 +677,7 @@ class FHIRConverterIntegrationTests { "phd.marsotc-hl7-sender" ) ) + @Suppress("ktlint:standard:max-line-length") assertThat(event.params).isEqualTo( mapOf( ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, @@ -736,7 +748,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), + BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), hl7Sender.fullName, hl7Sender.topic ) diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt index c34a3f04caa..0d7aa55ebed 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt @@ -8,6 +8,8 @@ import assertk.assertions.isEqualTo import assertk.assertions.isEqualToIgnoringGivenProperties import assertk.assertions.isInstanceOf import assertk.assertions.isNull +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.DeepOrganization @@ -40,7 +42,6 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRDestinationFilter import gov.cdc.prime.router.fhirengine.engine.FhirReceiverFilterQueueMessage -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.db.ReportGraph import gov.cdc.prime.router.metadata.LookupTable @@ -128,7 +129,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { "type": "${action.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "schemaName": "${sender.schemaName}" @@ -226,7 +227,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { FhirReceiverFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(report.blobDigest), + BlobUtils.digestToString(report.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.x" @@ -234,7 +235,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { FhirReceiverFilterQueueMessage( report.reportId, report.bodyUrl, - BlobAccess.digestToString(report.blobDigest), + BlobUtils.digestToString(report.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.y" @@ -317,7 +318,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { val expectedQueueMessage = FhirReceiverFilterQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.x" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt index 6c765de0b73..bc73514cff2 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt @@ -9,6 +9,8 @@ import assertk.assertions.isInstanceOf import assertk.assertions.isNull import assertk.assertions.isZero import assertk.assertions.matchesPredicate +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.ActionLogScope @@ -46,7 +48,6 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRReceiverFilter import gov.cdc.prime.router.fhirengine.engine.FhirTranslateQueueMessage -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.deleteResource import gov.cdc.prime.router.fhirengine.utils.getObservations @@ -227,7 +228,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { "type": "${TaskAction.receiver_filter.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "receiverFullName": "$receiverName" @@ -304,7 +305,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -476,7 +477,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -666,7 +667,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -952,7 +953,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -1027,7 +1028,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobAccess.digestToString(routedReport.blobDigest), + BlobUtils.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, "phd.x" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt new file mode 100644 index 00000000000..763a1f03a7b --- /dev/null +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt @@ -0,0 +1,872 @@ +package gov.cdc.prime.router.fhirengine.azure + +import assertk.assertThat +import assertk.assertions.hasSize +import assertk.assertions.isEmpty +import assertk.assertions.isEqualTo +import assertk.assertions.isEqualToIgnoringGivenProperties +import assertk.assertions.isNull +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.router.FileSettings +import gov.cdc.prime.router.MimeFormat +import gov.cdc.prime.router.Sender +import gov.cdc.prime.router.Topic +import gov.cdc.prime.router.azure.ActionHistory +import gov.cdc.prime.router.azure.BlobAccess +import gov.cdc.prime.router.azure.QueueAccess +import gov.cdc.prime.router.azure.SubmissionTableService +import gov.cdc.prime.router.azure.TableAccess +import gov.cdc.prime.router.azure.WorkflowEngine +import gov.cdc.prime.router.azure.db.Tables +import gov.cdc.prime.router.azure.db.enums.ActionLogType +import gov.cdc.prime.router.azure.db.enums.TaskAction +import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile +import gov.cdc.prime.router.azure.observability.event.LocalAzureEventServiceImpl +import gov.cdc.prime.router.azure.observability.event.ReportEventData +import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName +import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties +import gov.cdc.prime.router.azure.observability.event.ReportStreamReportEvent +import gov.cdc.prime.router.common.TestcontainersUtils +import gov.cdc.prime.router.common.UniversalPipelineTestUtils.csvSenderWithNoTransform +import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fhirSenderWithNoTransform +import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fhirSenderWithNoTransformInactive +import gov.cdc.prime.router.common.UniversalPipelineTestUtils.hl7SenderWithNoTransform +import gov.cdc.prime.router.common.UniversalPipelineTestUtils.universalPipelineOrganization +import gov.cdc.prime.router.common.cleanHL7Record +import gov.cdc.prime.router.common.invalidMalformedFHIRRecord +import gov.cdc.prime.router.common.unparseableHL7Record +import gov.cdc.prime.router.common.validFHIRRecord1 +import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer +import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension +import gov.cdc.prime.router.fhirengine.engine.FHIRReceiver +import gov.cdc.prime.router.history.DetailedActionLog +import gov.cdc.prime.router.history.DetailedReport +import gov.cdc.prime.router.unittest.UnitTestUtils +import io.mockk.clearAllMocks +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.unmockkAll +import io.mockk.verify +import org.jooq.impl.DSL +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.testcontainers.junit.jupiter.Container +import org.testcontainers.junit.jupiter.Testcontainers +import java.time.OffsetDateTime +import java.util.UUID +import kotlin.test.assertNotNull + +@Testcontainers +@ExtendWith(ReportStreamTestDatabaseSetupExtension::class) +class FHIRReceiverIntegrationTests { + + @Container + val azuriteContainer = TestcontainersUtils.createAzuriteContainer( + customImageName = "azurite_fhirreceiverintegration", + customEnv = mapOf( + "AZURITE_ACCOUNTS" to "devstoreaccount1:keydevstoreaccount1" + ) + ) + + private val azureEventService = LocalAzureEventServiceImpl() + private lateinit var submissionTableService: SubmissionTableService + + private fun createFHIRFunctionsInstance(): FHIRFunctions { + val settings = FileSettings().loadOrganizations(universalPipelineOrganization) + val metadata = UnitTestUtils.simpleMetadata + val workflowEngine = WorkflowEngine + .Builder() + .metadata(metadata) + .settingsProvider(settings) + .databaseAccess(ReportStreamTestDatabaseContainer.testDatabaseAccess) + .build() + return FHIRFunctions(workflowEngine, databaseAccess = ReportStreamTestDatabaseContainer.testDatabaseAccess) + } + + private fun createFHIRReceiver(): FHIRReceiver { + val settings = FileSettings().loadOrganizations(universalPipelineOrganization) + val metadata = UnitTestUtils.simpleMetadata + return FHIRReceiver( + metadata, + settings, + ReportStreamTestDatabaseContainer.testDatabaseAccess, + azureEventService = azureEventService, + submissionTableService = submissionTableService + ) + } + + private fun generateReceiveQueueMessage( + reportId: String, + blobURL: String, + blobContents: String, + sender: Sender, + headers: Map, + ): String { + val headersStringMap = headers.entries.joinToString(separator = ",\n") { (key, value) -> + """"$key": "$value"""" + } + val headersString = "[\"java.util.LinkedHashMap\",{$headersStringMap}]" + + return """{"type":"receive-fhir","blobURL":"$blobURL", + "digest":"${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", + "blobSubFolderName":"${sender.fullName}","reportId":"$reportId","headers":$headersString} + """.trimIndent() + } + + @BeforeEach + fun beforeEach() { + clearAllMocks() + mockkObject(QueueAccess) + every { QueueAccess.sendMessage(any(), any()) } returns Unit + mockkObject(BlobAccess) + every { BlobAccess getProperty "defaultBlobMetadata" } returns getBlobContainerMetadata() + mockkObject(BlobAccess.BlobContainerMetadata) + every { BlobAccess.BlobContainerMetadata.build(any(), any()) } returns getBlobContainerMetadata() + + mockkObject(TableAccess) + every { TableAccess.getConnectionString() } returns getConnString() + + submissionTableService = SubmissionTableService.getInstance() + submissionTableService.reset() + } + + @AfterEach + fun afterEach() { + unmockkAll() + } + + private fun getBlobContainerMetadata(): BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata( + "container1", + getConnString() + ) + + private fun getConnString(): String { + @Suppress("ktlint:standard:max-line-length") + return """DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=keydevstoreaccount1;BlobEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10000)}/devstoreaccount1;QueueEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10001)}/devstoreaccount1;TableEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10002)}/devstoreaccount1;""" + } + + @Test + fun `should handle inactive sender gracefully`() { + val receivedReportContents = + listOf(validFHIRRecord1) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/happy-path.fhir", + receivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/fhir+ndjson;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to fhirSenderWithNoTransformInactive.fullName, + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + receivedReportContents, + fhirSenderWithNoTransformInactive, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs.first()).transform { it.detail.message } + .isEqualTo("Sender has customer status INACTIVE: phd.fhir-elr-no-transform-inactive") + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(DetailedReport::class.java) + + assertThat(actionLogs.count()).isEqualTo(1) + assertThat(reportFile.count()).isEqualTo(1) + } + + verify(exactly = 0) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission(reportId.toString(), "Accepted") + + assertNotNull(tableRow) + assertThat(tableRow.detail).isEqualTo( + "[Sender has customer status INACTIVE: phd.fhir-elr-no-transform-inactive]" + ) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, + ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransformInactive.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!).hasSize(1) + val notProcessableEvent = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!.last() as ReportStreamReportEvent + assertThat(notProcessableEvent.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(notProcessableEvent.params).isEqualTo( + mapOf( + ReportStreamEventProperties.PROCESSING_ERROR to + "Submitted report was either empty or could not be parsed.", + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `should handle sender not found gracefully`() { + val submissionMessageContents = validFHIRRecord1 + val submissionBlobUrl = "http://anyblob.com" + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/fhir+ndjson;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to "unknown_sender", + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + submissionBlobUrl, + submissionMessageContents, + fhirSenderWithNoTransformInactive, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs).isEmpty() + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(DetailedReport::class.java) + + assertThat(reportFile).isEmpty() + } + + verify(exactly = 0) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Rejected" + ) + + assertNotNull(tableRow) + assertThat(tableRow.detail).isEqualTo("Sender not found matching client_id: unknown_sender") + assertThat(tableRow.bodyURL).isEqualTo(submissionBlobUrl) + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_RECEIVABLE]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_NOT_RECEIVABLE]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + null, + submissionBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.PROCESSING_ERROR to + "Sender is not found in matching client id: unknown_sender.", + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `should successfully process valid FHIR message`() { + val receivedReportContents = + listOf(validFHIRRecord1) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/happy-path.fhir", + receivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/fhir+ndjson;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to fhirSenderWithNoTransform.fullName, + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + receivedReportContents, + fhirSenderWithNoTransform, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs).isEmpty() + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(ReportFile::class.java) + + assertThat(reportFile).hasSize(1) + reportFile.first().apply { + assertThat(nextAction).isEqualTo(TaskAction.convert) + assertThat(receivingOrg).isEqualTo(null) + assertThat(receivingOrgSvc).isEqualTo(null) + assertThat(schemaName).isEqualTo("None") + assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) + assertThat(bodyFormat).isEqualTo("FHIR") + assertThat(sendingOrg).isEqualTo("phd") + assertThat(sendingOrgClient).isEqualTo("fhir-elr-no-transform") + } + } + + verify(exactly = 1) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Accepted" + ) + + assertNotNull(tableRow) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + assertThat(tableRow.detail).isNull() + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, + ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransform.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `should successfully process valid HL7 message`() { + val receivedReportContents = + listOf(cleanHL7Record) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/happy-path.hl7", + receivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/hl7-v2;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to hl7SenderWithNoTransform.fullName, + "content-length" to "100" + ) + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + receivedReportContents, + hl7SenderWithNoTransform, + headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs).isEmpty() + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(ReportFile::class.java) + + assertThat(reportFile).hasSize(1) + reportFile.first().apply { + assertThat(nextAction).isEqualTo(TaskAction.convert) + assertThat(receivingOrg).isEqualTo(null) + assertThat(receivingOrgSvc).isEqualTo(null) + assertThat(schemaName).isEqualTo("None") + assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) + assertThat(bodyFormat).isEqualTo("HL7") + assertThat(sendingOrg).isEqualTo("phd") + assertThat(sendingOrgClient).isEqualTo("hl7-elr-no-transform") + } + } + + verify(exactly = 1) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Accepted" + ) + + assertNotNull(tableRow) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + assertThat(tableRow.detail).isNull() + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, + ReportStreamEventProperties.SENDER_NAME to hl7SenderWithNoTransform.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `test process invalid FHIR message`() { + val invalidReceivedReportContents = + listOf(invalidMalformedFHIRRecord) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/fail-path.fhir", + invalidReceivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/fhir+ndjson;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to fhirSenderWithNoTransform.fullName, + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + invalidReceivedReportContents, + fhirSenderWithNoTransform, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs.count()).isEqualTo(1) + assertThat(actionLogs.first().detail.message).isEqualTo("1: Unable to parse FHIR data.") + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(ReportFile::class.java) + + assertThat(reportFile).hasSize(1) + reportFile.first().apply { + assertThat(nextAction).isEqualTo(TaskAction.convert) + assertThat(receivingOrg).isEqualTo(null) + assertThat(receivingOrgSvc).isEqualTo(null) + assertThat(schemaName).isEqualTo("None") + assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) + assertThat(bodyFormat).isEqualTo("FHIR") + assertThat(sendingOrg).isEqualTo("phd") + assertThat(sendingOrgClient).isEqualTo("fhir-elr-no-transform") + } + } + + verify(exactly = 0) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Accepted" + ) + + assertNotNull(tableRow) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + assertThat(tableRow.detail).isEqualTo("[1: Unable to parse FHIR data.]") + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, + ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransform.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `test process invalid HL7 message`() { + val invalidReceivedReportContents = + listOf(unparseableHL7Record) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/fail-path.hl7", + invalidReceivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/hl7-v2;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to hl7SenderWithNoTransform.fullName, + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + invalidReceivedReportContents, + hl7SenderWithNoTransform, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs.count()).isEqualTo(2) + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(ReportFile::class.java) + + assertThat(reportFile).hasSize(1) + reportFile.first().apply { + assertThat(nextAction).isEqualTo(TaskAction.convert) + assertThat(receivingOrg).isEqualTo(null) + assertThat(receivingOrgSvc).isEqualTo(null) + assertThat(schemaName).isEqualTo("None") + assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) + assertThat(bodyFormat).isEqualTo("HL7") + assertThat(sendingOrg).isEqualTo("phd") + assertThat(sendingOrgClient).isEqualTo("hl7-elr-no-transform") + } + } + + verify(exactly = 0) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Accepted" + ) + + assertNotNull(tableRow) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + assertThat(tableRow.detail).isEqualTo("[Failed to parse message, Failed to parse message]") + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + Topic.FULL_ELR, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, + ReportStreamEventProperties.SENDER_NAME to hl7SenderWithNoTransform.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() + ) + ) + } + + @Test + fun `test process CSV message`() { + val invalidReceivedReportContents = + listOf(unparseableHL7Record) + .joinToString("\n") + val receiveBlobUrl = BlobAccess.uploadBlob( + "receive/fail-path.hl7", + invalidReceivedReportContents.toByteArray(), + getBlobContainerMetadata() + ) + + val reportId = UUID.randomUUID() + val headers = mapOf( + "content-type" to "application/hl7-v2;test", + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to csvSenderWithNoTransform.fullName, + "content-length" to "100" + ) + + val receiveQueueMessage = generateReceiveQueueMessage( + reportId.toString(), + receiveBlobUrl, + invalidReceivedReportContents, + csvSenderWithNoTransform, + headers = headers + ) + + val fhirFunctions = createFHIRFunctionsInstance() + + var exception: Exception? = null + try { + fhirFunctions.process( + receiveQueueMessage, + 1, + createFHIRReceiver(), + ActionHistory(TaskAction.receive) + ) + } catch (e: Exception) { + exception = e + } + + assertThat(exception!!.javaClass.name).isEqualTo("java.lang.IllegalStateException") + + ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> + val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) + .from(Tables.ACTION_LOG) + .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) + .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) + .fetchInto(DetailedActionLog::class.java) + + assertThat(actionLogs.count()).isEqualTo(0) + + val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) + .from(Tables.REPORT_FILE) + .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) + .fetchInto(ReportFile::class.java) + + assertThat(reportFile).isEmpty() + } + + verify(exactly = 0) { + QueueAccess.sendMessage(any(), any()) + } + + val tableRow = submissionTableService.getSubmission( + reportId.toString(), + "Rejected" + ) + + assertNotNull(tableRow) + assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) + assertThat(tableRow.detail).isEqualTo("[Unsupported sender format: CSV]") + + assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!).hasSize(1) + val event = + azureEventService + .reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!.last() as ReportStreamReportEvent + assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( + ReportEventData( + reportId, + null, + emptyList(), + null, + receiveBlobUrl, + TaskAction.receive, + OffsetDateTime.now() + ), + ReportEventData::timestamp + ) + assertThat(event.params).isEqualTo( + mapOf( + ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.CSV, + ReportStreamEventProperties.SENDER_NAME to csvSenderWithNoTransform.fullName, + ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], + ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], + ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString(), + ReportStreamEventProperties.PROCESSING_ERROR to "Unsupported sender format CSV." + ) + ) + } +} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt index d203856028e..d4d3d517d6b 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt @@ -6,6 +6,8 @@ import assertk.assertions.isNotEqualTo import assertk.assertions.isNotNull import assertk.assertions.isNull import assertk.assertions.isTrue +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.DeepOrganization import gov.cdc.prime.router.FileSettings import gov.cdc.prime.router.MimeFormat @@ -27,7 +29,6 @@ import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fetchChildReports import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRTranslator -import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.history.db.ReportGraph import gov.cdc.prime.router.metadata.LookupTable import gov.cdc.prime.router.report.ReportService @@ -116,7 +117,7 @@ class FHIRTranslatorIntegrationTests : Logging { "type": "${TaskAction.translate.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "receiverFullName": "$receiverName" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt new file mode 100644 index 00000000000..75790e601cc --- /dev/null +++ b/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt @@ -0,0 +1,107 @@ +package gov.cdc.prime.router.fhirengine.azure + +import gov.cdc.prime.reportstream.shared.Submission +import gov.cdc.prime.router.azure.SubmissionTableService +import gov.cdc.prime.router.azure.TableAccess +import gov.cdc.prime.router.common.TestcontainersUtils +import io.mockk.clearAllMocks +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.unmockkAll +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.testcontainers.junit.jupiter.Container +import org.testcontainers.junit.jupiter.Testcontainers +import java.util.UUID +import kotlin.test.assertNotNull + +@Testcontainers +class SubmissionTableServiceIntegrationTests { + + @Container + val azuriteContainer = TestcontainersUtils.createAzuriteContainer( + customImageName = "azurite_fhirreceiverintegration", + customEnv = mapOf( + "AZURITE_ACCOUNTS" to "devstoreaccount1:keydevstoreaccount1" + ) + ) + + private lateinit var submissionTableService: SubmissionTableService + + @BeforeEach + fun beforeEach() { + clearAllMocks() + + mockkObject(TableAccess) + every { TableAccess.getConnectionString() } returns getConnString() + + submissionTableService = SubmissionTableService.getInstance() + submissionTableService.reset() + } + + @AfterEach + fun afterEach() { + unmockkAll() + } + + private fun getConnString(): String { + @Suppress("ktlint:standard:max-line-length") + return """DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=keydevstoreaccount1;BlobEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10000)}/devstoreaccount1;QueueEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10001)}/devstoreaccount1;TableEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10002)}/devstoreaccount1;""" + } + + /** + * Test to ensure that multiple submissions can be inserted and retrieved correctly + * in a thread-safe manner. + * + * 10 different submissions will be inserted concurrently, followed by retrievals to ensure + * that all submissions were properly stored and retrieved from the "submission" table. + */ + @Test + fun `test concurrent reset and submissions with simple threads`() { + // List to hold submission objects + val submissions = List(10) { + val submissionId = UUID.randomUUID().toString() + val status = "Accepted" + val url = "https://anyblob.com" + Submission(submissionId, status, url) // Create new Submission instance + } + + // List to hold the created threads + val threads = mutableListOf() + + // Create and start 50 threads + for (i in 1..50) { + val thread = Thread { + // Each thread randomly picks one of the submissions to insert + val submission = submissions.random() + + try { + submissionTableService.insertSubmission(submission) + submissionTableService.reset() // Reset `tableAccess` + println("Thread ${Thread.currentThread().name} inserted and reset successfully") + } catch (e: Exception) { + println("Thread ${Thread.currentThread().name} encountered an error: ${e.message}") + } + } + thread.start() + threads.add(thread) // Keep track of the thread + } + + // Wait for all threads to complete using `join()` + for (thread in threads) { + thread.join() + } + + // After all threads complete, verify that submissions were inserted successfully + submissions.forEach { submission -> + val retrievedSubmission = submissionTableService.getSubmission(submission.submissionId, submission.status) + assertNotNull(retrievedSubmission, "Submission should not be null") + assertEquals(submission.submissionId, retrievedSubmission.submissionId) + assertEquals(submission.status, retrievedSubmission.status) + } + + println("Test passed! Concurrent submission and reset operations are thread-safe.") + } +} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt new file mode 100644 index 00000000000..8edc912f5f1 --- /dev/null +++ b/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt @@ -0,0 +1,273 @@ +package gov.cdc.prime.router.fhirengine.engine + +import assertk.assertThat +import assertk.assertions.hasSize +import assertk.assertions.isEqualTo +import com.microsoft.azure.functions.HttpStatus +import gov.cdc.prime.reportstream.shared.Submission +import gov.cdc.prime.router.ActionLog +import gov.cdc.prime.router.ActionLogDetail +import gov.cdc.prime.router.ActionLogger +import gov.cdc.prime.router.CovidSender +import gov.cdc.prime.router.CustomerStatus +import gov.cdc.prime.router.DeepOrganization +import gov.cdc.prime.router.FileSettings +import gov.cdc.prime.router.InvalidParamMessage +import gov.cdc.prime.router.Metadata +import gov.cdc.prime.router.MimeFormat +import gov.cdc.prime.router.Organization +import gov.cdc.prime.router.Receiver +import gov.cdc.prime.router.Schema +import gov.cdc.prime.router.SettingsProvider +import gov.cdc.prime.router.Topic +import gov.cdc.prime.router.azure.ActionHistory +import gov.cdc.prime.router.azure.BlobAccess +import gov.cdc.prime.router.azure.DatabaseAccess +import gov.cdc.prime.router.azure.SubmissionTableService +import gov.cdc.prime.router.azure.db.enums.TaskAction +import gov.cdc.prime.router.azure.db.tables.pojos.Action +import gov.cdc.prime.router.common.cleanHL7Record +import gov.cdc.prime.router.report.ReportService +import io.mockk.clearAllMocks +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkClass +import io.mockk.mockkObject +import io.mockk.spyk +import io.mockk.unmockkAll +import io.mockk.verify +import org.jooq.tools.jdbc.MockConnection +import org.jooq.tools.jdbc.MockDataProvider +import org.jooq.tools.jdbc.MockResult +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import java.util.UUID +import kotlin.test.Test + +class FHIRReceiverTest { + + // Common mock objects and setup + val dataProvider = MockDataProvider { emptyArray() } + val connection = MockConnection(dataProvider) + val accessSpy = spyk(DatabaseAccess(connection)) + val blobMock = mockkClass(BlobAccess::class) + val reportService: ReportService = mockk() + private val submissionTableService: SubmissionTableService = mockk() + + val oneOrganization = DeepOrganization( + "co-phd", + "test", + Organization.Jurisdiction.FEDERAL, + receivers = listOf(Receiver("elr", "co-phd", Topic.TEST, CustomerStatus.INACTIVE, "one")) + ) + val settings = FileSettings().loadOrganizations(oneOrganization) + val one = Schema(name = "None", topic = Topic.FULL_ELR, elements = emptyList()) + val metadata = Metadata(schema = one) + + private fun makeFhirReceiver(metadata: Metadata, settings: SettingsProvider): FHIRReceiver { + return FHIRReceiver( + metadata, + settings, + accessSpy, + blobMock, + reportService = reportService, + submissionTableService = submissionTableService + ) + +// FHIREngine.Builder().metadata(metadata).settingsProvider(settings).databaseAccess(accessSpy) +// .reportService(reportService).blobAccess(blobMock).build(taskAction) + } + + @BeforeEach + fun reset() { + clearAllMocks() + } + + @AfterEach + fun tearDown() { + unmockkAll() + } + + data class FHIRTestSetup( + val engine: FHIRReceiver, + val actionLogger: ActionLogger, + val actionHistory: ActionHistory, + val message: FhirReceiveQueueMessage, + ) + + private fun setupMocksForProcessingTest( + clientId: String, + contentType: String, + customerStatus: CustomerStatus, + hasErrors: Boolean, + reportID: UUID = UUID.randomUUID(), + + ): FHIRTestSetup { + mockkObject(BlobAccess) + val actionHistory = mockk() + val actionLogger = mockk() + val sender = CovidSender( + "Test Sender", + "test", + MimeFormat.HL7, + schemaName = "one", + customerStatus = customerStatus + ) + + val engine = spyk(makeFhirReceiver(metadata, settings)) + val message = mockk(relaxed = true) + val action = Action() + action.actionName = TaskAction.receive + + val headers = mapOf( + "x-azure-clientip" to "0.0.0.0", + "payloadname" to "test_message", + "client_id" to clientId, + "content-type" to contentType + ) + + every { message.headers } returns headers + every { message.reportId } returns reportID + every { actionLogger.hasErrors() } returns hasErrors + every { actionLogger.setReportId(any()) } returns actionLogger + every { actionLogger.error(any()) } returns Unit + every { engine.settings.findSender(any()) } returns sender + every { actionHistory.trackActionResult(any()) } returns Unit + every { actionHistory.trackActionParams(any()) } returns Unit + every { actionHistory.trackActionSenderInfo(any(), any()) } returns Unit + every { actionHistory.trackExternalInputReport(any(), any()) } returns Unit + every { actionHistory.trackLogs(any>()) } returns Unit + every { submissionTableService.insertSubmission(any()) } returns Unit + every { actionHistory.action } returns action + every { BlobAccess.downloadBlob(any(), any()) }.returns(cleanHL7Record) + + return FHIRTestSetup(engine, actionLogger, actionHistory, message) + } + + @Test + fun `test handle sender not found`() { + val fhirSetup = + setupMocksForProcessingTest( + "unknown_client_id", + "application/hl7-v2;test", + CustomerStatus.ACTIVE, + true + ) + val engine = fhirSetup.engine + val queueMessage = fhirSetup.message + val actionLogger = ActionLogger() + val actionHistory = fhirSetup.actionHistory + + every { engine.settings.findSender(any()) } returns null + + accessSpy.transact { txn -> + engine.run(queueMessage, actionLogger, actionHistory, txn) + } + + assertThat(actionLogger.errors).hasSize(0) + + val reportId = queueMessage.reportId.toString() + val blobURL = queueMessage.blobURL + verify(exactly = 1) { + Submission( + reportId, + "Rejected", + blobURL, + "Sender not found matching client_id: unknown_client_id" + ) + submissionTableService.insertSubmission(any()) + } + } + + @Test + fun `test handle inactive sender`() { + val fhirSetup = + setupMocksForProcessingTest( + "known_client_id", + "application/hl7-v2;test", + CustomerStatus.INACTIVE, + true + ) + val engine = fhirSetup.engine + val queueMessage = fhirSetup.message + val actionLogger = ActionLogger() + val actionHistory = fhirSetup.actionHistory + + accessSpy.transact { txn -> + engine.run(queueMessage, actionLogger, actionHistory, txn) + } + + assertThat(actionLogger.errors).hasSize(1) + + assertThat( + actionLogger.errors[0].equals( + actionLogger.errors[0].equals( + InvalidParamMessage("Sender has customer status INACTIVE: unknown_client_id") + ) + ) + ) + + verify(exactly = 1) { + submissionTableService.insertSubmission(any()) + actionHistory.trackActionResult(HttpStatus.NOT_ACCEPTABLE) + actionHistory.trackActionSenderInfo("test.Test Sender", "test_message") + } + } + + @Test + fun `test successful processing`() { + val reportID = UUID.randomUUID() + val fhirSetup = + setupMocksForProcessingTest( + "known_client_id", + "application/hl7-v2;test", + CustomerStatus.ACTIVE, + false, + reportID + ) + val engine = fhirSetup.engine + val queueMessage = fhirSetup.message + val actionLogger = fhirSetup.actionLogger + val actionHistory = fhirSetup.actionHistory + every { actionLogger.errors } returns emptyList() + + accessSpy.transact { txn -> + engine.run(queueMessage, actionLogger, actionHistory, txn) + } + + verify(exactly = 1) { + actionHistory.trackActionResult(HttpStatus.CREATED) + actionHistory.trackActionSenderInfo("test.Test Sender", "test_message") + actionHistory.trackExternalInputReport(any(), any()) + submissionTableService.insertSubmission(any()) + } + } + + @Test + fun `test invalid MIME type`() { + val fhirSetup = + setupMocksForProcessingTest( + "known_client_id", + "invalid/mime-type", + CustomerStatus.ACTIVE, + true + ) + val engine = fhirSetup.engine + val queueMessage = fhirSetup.message + val actionLogger = ActionLogger() + val actionHistory = fhirSetup.actionHistory + + var exception: Exception? = null + try { + accessSpy.transact { txn -> + engine.run(queueMessage, actionLogger, actionHistory, txn) + } + } catch (e: Exception) { + exception = e + } + + assertThat(exception!!.javaClass.name).isEqualTo("java.lang.IllegalArgumentException") + assertThat(actionLogger.errors).hasSize(1) + assertThat(actionLogger.errors[0].detail.message).isEqualTo("Unexpected MIME type invalid/mime-type.") + } +} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt index b0f4a4025e4..6b48d2e7260 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt @@ -172,7 +172,7 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val message = spyk( FhirConvertQueueMessage( - UUID.randomUUID(), BLOB_URL, "test", BLOB_SUB_FOLDER_NAME, topic = Topic.FULL_ELR, + UUID.randomUUID(), BLOB_URL, "test", BLOB_SUB_FOLDER_NAME, Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -184,7 +184,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { message.downloadContent() }.returns(validHl7) + every { BlobAccess.downloadBlob(any(), any()) }.returns(validHl7) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.HL7 every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -227,7 +227,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - topic = Topic.FULL_ELR, + Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -239,7 +239,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { message.downloadContent() } + every { BlobAccess.downloadBlob(any(), any()) } .returns(File(VALID_DATA_URL).readText()) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" @@ -296,7 +296,7 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val message = spyk( FhirConvertQueueMessage( - UUID.randomUUID(), BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, topic = Topic.FULL_ELR, + UUID.randomUUID(), BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -306,7 +306,7 @@ class FhirConverterTests { every { actionLogger.hasErrors() } returns false every { actionLogger.setReportId(any()) } returns actionLogger - every { message.downloadContent() } + every { BlobAccess.downloadBlob(any(), any()) } .returns(File("src/test/resources/fhirengine/engine/bundle_multiple_bundles.fhir").readText()) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" @@ -386,7 +386,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - topic = Topic.FULL_ELR, + Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -398,7 +398,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { message.downloadContent() } returns (fhirRecord) + every { BlobAccess.downloadBlob(any(), any()) } returns (fhirRecord) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -477,7 +477,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - topic = Topic.FULL_ELR, + Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -489,7 +489,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { message.downloadContent() } returns (fhirData) + every { BlobAccess.downloadBlob(any(), any()) } returns (fhirData) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -556,11 +556,12 @@ class FhirConverterTests { @Test fun `should log an error and return no bundles if the message is empty`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR - every { mockMessage.downloadContent() } returns "" + every { BlobAccess.downloadBlob(any(), any()) } returns "" val bundles = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat(actionLogger.errors.map { it.detail.message }).contains("Provided raw data is empty.") @@ -569,6 +570,7 @@ class FhirConverterTests { @Test fun `should handle a parse failure for the entire HL7 batch`() { mockkConstructor(Hl7InputStreamMessageStringIterator::class) + mockkObject(BlobAccess) every { anyConstructed().hasNext() } throws Hl7InputStreamMessageStringIterator.ParseFailureError( @@ -578,12 +580,10 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { - mockMessage.downloadContent() - } returns simpleHL7 + every { BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat( @@ -595,12 +595,13 @@ class FhirConverterTests { @Test fun `should log an error and return no bundles if the format is not supported`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { mockMessage.downloadContent() } returns "test,1,2" + every { BlobAccess.downloadBlob(any(), any()) } returns "test,1,2" val bundles = engine.process(MimeFormat.CSV, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat(actionLogger.errors.map { it.detail.message }) @@ -609,12 +610,13 @@ class FhirConverterTests { @Test fun `should a log FHIR parse error and not return a bundle`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { mockMessage.downloadContent() } returns "{\"id\":}" + every { BlobAccess.downloadBlob(any(), any()) } returns "{\"id\":}" val processedItems = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) assertThat(processedItems.first().bundle).isNull() @@ -626,6 +628,7 @@ class FhirConverterTests { @Test fun `should log a FHIR validation error and not return a bundle`() { + mockkObject(BlobAccess) val fhirValidationResult = mockk() val message = SingleValidationMessage() message.severity = ResultSeverityEnum.ERROR @@ -639,11 +642,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { mockMessage.downloadContent() } returns "{\"id\":\"1\", \"resourceType\":\"Bundle\"}" + every { BlobAccess.downloadBlob(any(), any()) } returns "{\"id\":\"1\", \"resourceType\":\"Bundle\"}" val processedItems = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) assertThat(processedItems.first().bundle).isNull() @@ -654,13 +657,14 @@ class FhirConverterTests { @Test fun `should log an HL7 parse error and not return a bundle`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns unparseableHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -677,6 +681,7 @@ class FhirConverterTests { @Test fun `should log a HL7 validation error and not return a bundle`() { + mockkObject(BlobAccess) val mockValidation = mockk() val mockEntry = mockk() every { mockEntry.classification } returns AbstractItemValidator.ERROR_CLASSIFICATION @@ -690,11 +695,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -711,6 +716,7 @@ class FhirConverterTests { @Test fun `should log a HL7 conversion error and not return a bundle`() { + mockkObject(BlobAccess) mockkObject(HL7toFhirTranslator) val mockHL7toFhirTranslator = mockk() every { mockHL7toFhirTranslator.translate(any()) } throws RuntimeException("Conversion error") @@ -718,11 +724,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -739,13 +745,14 @@ class FhirConverterTests { @Test fun `should optionally support routing some or no items when routeMessageWithInvalidItems is set`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns """{\"id\":} {"id":"1", "resourceType":"Bundle"} """.trimMargin() @@ -766,14 +773,15 @@ class FhirConverterTests { @Test fun `should process an HL7 message`() { + mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(1) @@ -782,17 +790,18 @@ class FhirConverterTests { @Test fun `should process items in parallel`() { + mockkObject(BlobAccess) mockkObject(BaseEngine.Companion) every { BaseEngine.Companion getProperty "sequentialLimit" } returns 2 val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 + "\n" + simpleHL7 + "\n" + simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(3) @@ -803,6 +812,7 @@ class FhirConverterTests { @Test fun `should process an HL7 message with a registered profile`() { + mockkObject(BlobAccess) mockkObject(HL7Reader.Companion) every { HL7Reader.Companion.messageToConfigMap } returns mapOf( HL7Reader.Companion.HL7MessageType( @@ -817,12 +827,12 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk() + val mockMessage = mockk(relaxed = true) every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - mockMessage.downloadContent() + BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(1) diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt index 6e53616a3eb..cac3f90e718 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt @@ -282,7 +282,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -312,7 +312,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -440,7 +440,7 @@ class FhirDestinationFilterTests { // data + mock setup val fhirData = File(VALID_FHIR_URL).readText() mockkObject(BlobAccess) - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -477,7 +477,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) every { engine.findTopicReceivers(any()) } returns emptyList() diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt index b9b59aaf7f8..950f828eea0 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt @@ -172,6 +172,7 @@ class FhirReceiverFilterTests { actionHistory.reportsOut.clear() actionHistory.actionLogs.clear() azureEventService.clear() + mockkObject(BlobAccess) clearAllMocks() } @@ -205,7 +206,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -258,7 +259,7 @@ class FhirReceiverFilterTests { // act messages.forEach { message -> - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) assertThat(results).isEmpty() @@ -310,7 +311,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -364,7 +365,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -411,7 +412,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -475,7 +476,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) + every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -536,7 +537,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEachIndexed { i, message -> - every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) + every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -584,7 +585,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -643,7 +644,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) + every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -688,7 +689,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -729,7 +730,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) mockkStatic(Bundle::filterObservations) - every { message.downloadContent() }.returns(fhirData) + every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) every { any().filterObservations(any(), any()) } returns FhirTranscoder.decode(fhirData) @@ -795,7 +796,7 @@ class FhirReceiverFilterTests { } // mock setup - every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) + every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) // act + assert accessSpy.transact { txn -> @@ -838,7 +839,7 @@ class FhirReceiverFilterTests { ) // mock setup - every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) // act + assert accessSpy.transact { txn -> @@ -875,7 +876,7 @@ class FhirReceiverFilterTests { ) // mock setup - every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) // act + assert accessSpy.transact { diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt index 382781c60e8..b6944b9dce9 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt @@ -122,7 +122,7 @@ class FhirTranslatorTests { val bodyUrl = BODY_URL every { actionLogger.hasErrors() } returns false - every { message.downloadContent() } + every { BlobAccess.downloadBlob(any(), any()) } .returns(File(VALID_DATA_URL).readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { @@ -196,7 +196,7 @@ class FhirTranslatorTests { val bodyFormat = MimeFormat.FHIR val bodyUrl = BODY_URL every { actionLogger.hasErrors() } returns false - every { message.downloadContent() } + every { BlobAccess.downloadBlob(any(), any()) } .returns(File(VALID_DATA_URL).readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { @@ -491,7 +491,7 @@ class FhirTranslatorTests { every { actionLogger.hasErrors() } returns false every { actionLogger.error(any()) } returns Unit - every { message.downloadContent() } + every { BlobAccess.downloadBlob(any(), any()) } .returns(File("src/test/resources/fhirengine/engine/valid_data_with_extensions.fhir").readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt deleted file mode 100644 index 3e1bc05ce60..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251 - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class CNNtoPractitionerTests { - @Test - fun `test correctly handles ISO universal id type`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cnn/cnn-to-Practitioner", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt deleted file mode 100644 index 6453e38099f..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt +++ /dev/null @@ -1,105 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251 - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class CWEtoCodeableConceptTests { - @Test - fun `test value in CWE-1`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-3-test-value-cwe1", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-2`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-4-test-value-cwe2", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-3`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-5-test-value-cwe3", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-4`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-6-test-value-cwe4", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-5`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-7-test-value-cwe5", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-6`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-8-test-value-cwe6", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-7`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-9-test-value-cwe7", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-8`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-10-test-value-cwe8", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-9`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/cwe/codeable-concept/cwe-11-test-value-cwe9", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt deleted file mode 100644 index 2d2328918f0..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251 - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class NDLtoPractitionerRoleTests { - @Test - fun `test translate to NDL to PractitionerRole to NDL`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/ndl/NDL-to-PractitionerRole", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt deleted file mode 100644 index ebfa8d4dd9d..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251 - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class XADtoAddressTests { - @Test - fun `xad to address`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/xad/xad-to-address", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt deleted file mode 100644 index 538c578a618..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251 - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class XTNToContactPointTests { - @Test - fun `xtn to contact point`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251/xtn/xtn-to-contact-point", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt deleted file mode 100644 index 328e1892fa2..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251elr - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class CQELRtoQuantityTest { - @Test - fun `test value for CQ_ELR`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cq/cq-to-quantity", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt deleted file mode 100644 index 264592d3853..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt +++ /dev/null @@ -1,160 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251elr - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class CWEELRtoCodeableConceptTests { - @Test - fun `test value in CWE-1`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-2`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-3`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-4`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-5`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-6`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-7`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-8`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-9`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-10`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-11`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-12`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-13`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } - - @Test - fun `test value in CWE-14`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt deleted file mode 100644 index 69a67c1d832..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251elr - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class ORUR01ELRFullTest { - @Test - fun `test ORU_R01 all segments`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/orur01/oru_r01-full", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt deleted file mode 100644 index 9d42644564d..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251elr - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class PRLELRtoServiceRequestTest { - @Test - fun `test value for PRL_ELR`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/prl/prl-to-servicerequest", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt deleted file mode 100644 index 9d9c6d6a165..00000000000 --- a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt +++ /dev/null @@ -1,17 +0,0 @@ -package gov.cdc.prime.router.datatests.mappinginventory.v251elr - -import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping -import org.junit.jupiter.api.Test - -class XPNELRtoHumanNameTests { - @Test - fun `test translate to HL7 to FHIR to HL7`() { - assert( - verifyHL7ToFHIRToHL7Mapping( - "v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty", - profile = "./metadata/HL7/v251-elr", - outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", - ).passed - ) - } -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt index 94a523c8179..a78b3729a53 100644 --- a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt +++ b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt @@ -977,6 +977,64 @@ hnm8COa8Kr+bnTqzScpQuOfujHcFEtfcYUGfSS6HusxidwXx+lYi1A== assertThat(retryItems).isNull() } + // Epic localhost end-to-end testing + private val oracleRlNRestTransport = RESTTransportType( + "https://sendURL", + "", + authType = "apiKey", + headers = mapOf( + "Content-Type" to "text/plain", + "shared-api-key" to "From Vault" + ) + ) + + val expectedHttpHeaders = mapOf( + "Content-Type" to "text/plain", + "shared-api-key" to "oracle123", + "System_ID" to "test-user", + "Key" to "oracle123" + ) + + @Test + fun `test transport postReport with valid message to oracle-rln--etor-nbs-results`() { + val header = makeHeader() + val mockRestTransport = spyk(RESTTransport(mockClientAuthOk())) + + // Given: + // lookupDefaultCredential returns mock UserApiKeyCredential object to allow + // the getAuthTokenWIthUserApiKey() to be called. + every { mockRestTransport.lookupDefaultCredential(any()) }.returns( + UserApiKeyCredential( + "test-user", + "oracle123" + ) + ) + + // When: + // RESTTransport is called WITH flexionRestTransportType which has transport.parameters + val retryItems = mockRestTransport.send( + oracleRlNRestTransport, header, reportId, "test", null, + context, actionHistory, mockk(relaxed = true) + ) + + // Then: + // postReport should be called with correct httpheaders' values as given. + verify { + runBlocking { + mockRestTransport.postReport( + any(), + any(), + any(), + expectedHttpHeaders, + any(), + any(), + any() + ) + } + } + assertThat(retryItems).isNull() + } + @Test fun `test post vs put http client`() { val logger = mockkClass(Logger::class) diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir new file mode 100644 index 00000000000..f983d2590d8 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir @@ -0,0 +1 @@ +{"resourceType":"Bundle","identifier":{"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},"type":"message","timestamp":"2024-08-26T22:40:38.928Z","entry":[{"fullUrl":"MessageHeader/c2bc4735-f7b6-44f7-8b4b-471bbd7920c2","resource":{"resourceType":"MessageHeader","id":"c2bc4735-f7b6-44f7-8b4b-471bbd7920c2","meta":{"tag":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0103","code":"P","display":"Production"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header","extension":[{"url":"MSH.15","valueString":"NE"},{"url":"MSH.16","valueString":"NE"},{"url":"MSH.19","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"ISO"}],"code":"ENG","display":"English"}]}},{"url":"MSH.21","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"ELR_Receiver"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.9.11"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"}]}],"value":"PHLabReport-NoAck"}},{"url":"MSH.7","valueInstant":"2024-08-26T22:40:38.928Z"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/character-set","valueString":"UNICODE UTF-8"}],"eventCoding":{"system":"http://terminology.hl7.org/CodeSystem/v2-0003","code":"R01","display":"ORU^R01^ORU_R01"},"destination":[{"name":"PRIME ReportStream","endpoint":"https://prime.cdc.gov/api/reports?option=SkipInvalidItems"}],"sender":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"},"source":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id","valueString":"0.2-SNAPSHOT"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date","valueInstant":"2024-08-26T16:13:26Z"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org","valueReference":{"reference":"Organization/07640c5d-87cd-488b-9343-a226c5166539"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"CDC PRIME - Atlanta"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.114222.4.1.237821"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"MSH.3"}],"name":"CDC PRIME - Atlanta: 2.16.840.1.114222.4.1.237821","software":"PRIME ReportStream","version":"0.2-SNAPSHOT","endpoint":"urn:oid:2.16.840.1.114222.4.1.237821"},"focus":[{"reference":"Provenance/5da4765d-f330-4c39-98b9-2e44de1b9732"},{"reference":"DiagnosticReport/ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}]}},{"fullUrl":"Provenance/5da4765d-f330-4c39-98b9-2e44de1b9732","resource":{"resourceType":"Provenance","id":"5da4765d-f330-4c39-98b9-2e44de1b9732","recorded":"2024-08-26T22:40:38.928Z","activity":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0003","code":"R01","display":"ORU/ACK - Unsolicited transmission of an observation message"}]},"agent":[{"who":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}]}},{"fullUrl":"DiagnosticReport/ecfbc6c0-0c32-4cf8-adc2-9134281110d8","resource":{"resourceType":"DiagnosticReport","id":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"basedOn":[{"reference":"ServiceRequest/1c658bf1-fb14-4701-8cb9-98f17956262f"}],"status":"final","code":{"coding":[{"system":"http://loinc.org","code":"97099-6"}]},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:38+00:00","_issued":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:38+00:00"}]},"specimen":[{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"}],"result":[{"reference":"Observation/e234fc85-245d-4c25-a109-fa025ad77eb5"},{"reference":"Observation/fda8a9e5-092c-4235-b44b-362e0e01c73d"},{"reference":"Observation/83df8f91-e907-4fb9-ab5c-c81816b8e10b"}]}},{"fullUrl":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","resource":{"resourceType":"Patient","id":"6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","extension":[{"url":"http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"system":"http://terminology.hl7.org/CodeSystem/v3-Race","version":"2.5.1","code":"1002-5","display":"native"}],"text":"native"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70189"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0189","version":"2.9","code":"N","display":"Not Hispanic or Latino"}],"text":"Not Hispanic or Latino"}}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"PID.3"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier","extension":[{"url":"CX.5","valueString":"PI"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility","valueReference":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}],"value":"6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","assigner":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}],"name":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name","extension":[{"url":"XPN.2","valueString":"Adolin"}]}],"use":"official","family":"Kholin","given":["Adolin"]}],"telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(540) 867 5309"},{"url":"XTN.2","valueString":"PRS"},{"url":"XTN.3","valueString":"CP"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(540) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":540}],"system":"phone","value":"(540) 867 5309","use":"mobile"}],"gender":"male","birthDate":"2003-12-10","deceasedBoolean":false,"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"2251 Airport Rd"}]}]}],"line":["2251 Airport Rd"],"city":"Greenfield","district":"Adair","state":"IA","postalCode":"50849-8101","country":"USA"}],"managingOrganization":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}},{"fullUrl":"Organization/719ec8ad-cf59-405a-9832-c4065945c130","resource":{"resourceType":"Organization","id":"719ec8ad-cf59-405a-9832-c4065945c130","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type","valueCoding":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueCodeableConcept":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"XON.2"}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"L"}]}}],"code":"L"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.25"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueCode":"CLIA"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"12D4567890","display":"Testing Lab"}]}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization","extension":[{"url":"XON.10","valueString":"12D4567890"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"HD.2,HD.3"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.4.7"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system","valueCodeableConcept":{"coding":[{"code":"CLIA"}]}}],"use":"official","type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0301","code":"CLIA"}]},"value":"12D4567890"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"HD.1"}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"XX"}]},"value":"Testing Lab"}],"name":"Testing Lab","telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530}],"system":"phone","value":"(530) 867 5309","use":"work"}],"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"123 Beach Way"}]}]}],"line":["123 Beach Way"],"city":"Denver","state":"CO","postalCode":"80210","country":"USA"}]}},{"fullUrl":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9","resource":{"resourceType":"Practitioner","id":"ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner","extension":[{"url":"XCN.10","valueString":"L"},{"url":"XCN.3","valueString":"Phil"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.12"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"NPI"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.4.6"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"NPI"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"urn:oid:2.16.840.1.113883.4.6"}],"type":{"coding":[{"code":"NPI"}]},"system":"NPI","value":"1245319599"}],"name":[{"family":"McTester","given":["Phil"]}],"telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530}],"system":"phone","value":"(530) 867 5309","use":"work"}],"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"321 Ocean Drive"}]}]}],"line":["321 Ocean Drive"],"city":"Denver","state":"CO","postalCode":"80210","country":"USA"}]}},{"fullUrl":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2","resource":{"resourceType":"Specimen","id":"dc7af370-fc07-4b00-abc7-9b5dd87cf4d2","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component","valueString":"SPM.2.1"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier","valueId":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PGN"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"type":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","version":"2.67","code":"258500001","display":"Nasopharyngeal swab"}],"text":"Nasopharyngeal swab"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"receivedTime":"2024-08-26T22:25:30+00:00","collection":{"collectedDateTime":"2024-08-26T22:25:30+00:00","bodySite":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"87100004","display":"Topography unknown (body structure)"}],"text":"Topography unknown (body structure)"}}}},{"fullUrl":"ServiceRequest/1c658bf1-fb14-4701-8cb9-98f17956262f","resource":{"resourceType":"ServiceRequest","id":"1c658bf1-fb14-4701-8cb9-98f17956262f","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/order-control","valueCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0119","code":"RE"}]}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date","valueDateTime":"2024-08-26T22:40:30+00:00"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/business-event","valueCode":"RE"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request","extension":[{"url":"OBR.2","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}},{"url":"OBR.3","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}},{"url":"OBR.16","valueReference":{"reference":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number","valueContactPoint":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.14"}],"system":"phone","value":"(530) 867 5309","use":"work"}},{"url":"OBR.25","valueString":"F"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order","extension":[{"url":"ORC.15","valueDateTime":"2024-08-26T22:40:30+00:00"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"status":"completed","intent":"order","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"97099-6","display":"Influenza virus A and B and SARS-CoV-2 (COVID-19) Ag panel - Upper respiratory specimen by Rapid immunoassay"}]},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"requester":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number","valueContactPoint":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.14"}],"system":"phone","value":"(530) 867 5309","use":"work"}}],"reference":"PractitionerRole/cec65045-6920-44e3-bc1d-b36321f72acd"},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"supportingInfo":[{"reference":"Observation/ec574855-130e-31a7-9d65-229619169035"},{"reference":"Observation/19288d48-f396-3faa-ab84-a632afb15403"},{"reference":"Observation/c556ead4-b9db-3e23-8a3a-c3803a981c08"},{"reference":"Observation/a0ead307-da3e-3371-96e2-f6b15f80f6ac"},{"reference":"Observation/51e39366-4c8d-3343-83ae-bc833d8aa0ed"}],"note":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/note-type","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/code-index-name","valueString":"identifier"}],"system":"HL70364","version":"2.5.1","code":"RE","display":"Remark"}]}}],"text":"This is a note"}]}},{"fullUrl":"Device/157d550a-a12a-4367-b80e-53d75ca29053","resource":{"resourceType":"Device","id":"157d550a-a12a-4367-b80e-53d75ca29053","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueCode":"MNI"}]}],"value":"BD Veritor Plus System_Becton Dickinson"},{"type":{"coding":[{"code":"MNI"}]}}],"manufacturer":"Becton, Dickinson and Company (BD)","deviceName":[{"name":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B","type":"model-name"}]}},{"fullUrl":"PractitionerRole/cec65045-6920-44e3-bc1d-b36321f72acd","resource":{"resourceType":"PractitionerRole","id":"cec65045-6920-44e3-bc1d-b36321f72acd","practitioner":{"reference":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9"},"organization":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}},{"fullUrl":"Organization/07640c5d-87cd-488b-9343-a226c5166539","resource":{"resourceType":"Organization","id":"07640c5d-87cd-488b-9343-a226c5166539","name":"Centers for Disease Control and Prevention"}},{"fullUrl":"Observation/e234fc85-245d-4c25-a109-fa025ad77eb5","resource":{"resourceType":"Observation","id":"e234fc85-245d-4c25-a109-fa025ad77eb5","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"6142004","display":"Influenza (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"541131000124102","display":"Infection caused by novel Influenza A virus variant (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"80382-5","display":"Influenza virus A Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"Flu A"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260373001","display":"Detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"A","display":"Abnormal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/fda8a9e5-092c-4235-b44b-362e0e01c73d","resource":{"resourceType":"Observation","id":"fda8a9e5-092c-4235-b44b-362e0e01c73d","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"6142004","display":"Influenza (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"80383-3","display":"Influenza virus B Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"Flu B"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260415000","display":"Not detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"N","display":"Normal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/83df8f91-e907-4fb9-ab5c-c81816b8e10b","resource":{"resourceType":"Observation","id":"83df8f91-e907-4fb9-ab5c-c81816b8e10b","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"840539006","display":"Disease caused by severe acute respiratory syndrome coronavirus 2 (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"97097-0","display":"SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"COVID-19"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260373001","display":"Detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"A","display":"Abnormal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/ec574855-130e-31a7-9d65-229619169035","resource":{"resourceType":"Observation","id":"ec574855-130e-31a7-9d65-229619169035","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95419-8","display":"Has symptoms related to condition of interest"}],"text":"Has symptoms related to condition of interest"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"N","display":"No"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/19288d48-f396-3faa-ab84-a632afb15403","resource":{"resourceType":"Observation","id":"19288d48-f396-3faa-ab84-a632afb15403","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.68","code":"82810-3","display":"Pregnancy status"}],"text":"Pregnancy status"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"60001007","display":"Not pregnant"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/c556ead4-b9db-3e23-8a3a-c3803a981c08","resource":{"resourceType":"Observation","id":"c556ead4-b9db-3e23-8a3a-c3803a981c08","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95418-0","display":"Employed in a healthcare setting"}],"text":"Employed in a healthcare setting"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"Y","display":"Yes"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/a0ead307-da3e-3371-96e2-f6b15f80f6ac","resource":{"resourceType":"Observation","id":"a0ead307-da3e-3371-96e2-f6b15f80f6ac","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95421-4","display":"Resides in a congregate care setting"}],"text":"Resides in a congregate care setting"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"N","display":"No"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/51e39366-4c8d-3343-83ae-bc833d8aa0ed","resource":{"resourceType":"Observation","id":"51e39366-4c8d-3343-83ae-bc833d8aa0ed","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"76691-5","display":"Gender identity"}],"text":"Gender identity"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"446131000124102","display":"Non-binary gender identity"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}}]} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 new file mode 100644 index 00000000000..55972b4236c --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 @@ -0,0 +1,15 @@ +MSH|^~\&|CDC PRIME - Atlanta^2.16.840.1.114222.4.1.237821^ISO|Testing Lab^12D4567890^CLIA|||20240826224038+0000||ORU^R01^ORU_R01|ecfbc6c0-0c32-4cf8-adc2-9134281110d8|P|2.5.1|||NE|NE|USA|UNICODE UTF-8|ENG^English^ISO||PHLabReport-NoAck^ELR_Receiver^2.16.840.1.113883.9.11^ISO +SFT|Centers for Disease Control and Prevention|0.2-SNAPSHOT|PRIME ReportStream|0.2-SNAPSHOT||20240826161326+0000 +PID|1||6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86^^^Testing Lab&12D4567890&CLIA^PI^Testing Lab&12D4567890&CLIA||Kholin^Adolin^^^^^L||20031210|M||1002-5^native^^^^^2.5.1^^native|2251 Airport Rd^^Greenfield^IA^50849-8101^USA^^^Adair||(540) 867 5309^PRS^CP^^1^540^8675309^^^^^(540) 867 5309|||||||||N^Not Hispanic or Latino^HL70189^^^^2.9^^Not Hispanic or Latino||||||||N +ORC|RE|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI||(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|20240826224030+0000||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|321 Ocean Drive^^Denver^CO^80210^USA +OBR|1|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|97099-6^Influenza virus A and B and SARS-CoV-2 (COVID-19) Ag panel - Upper respiratory specimen by Rapid immunoassay^LN|||20240826222530+0000|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|||||20240826224038+0000|||F +NTE|1||This is a note +NTE|2|O|OBX filtered for identifier = 80382-5 - Flu A; value = 260373001 - Detected. OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable. +NTE|3|O|OBX filtered for identifier = 80383-3 - Flu B; value = 260415000 - Not detected. OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable. +OBX|1|CWE|97097-0^SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay^LN^^^^^^COVID-19||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B_Becton, Dickinson and Company (BD)^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B^^^^^^^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B_Becton, Dickinson and Company (BD)|BD Veritor Plus System_Becton Dickinson^^MNI|20240826224030+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA +OBX|2|CWE|95419-8^Has symptoms related to condition of interest^LN^^^^2.69^^Has symptoms related to condition of interest||N^No^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST +OBX|3|CWE|82810-3^Pregnancy status^LN^^^^2.68^^Pregnancy status||60001007^Not pregnant^SCT|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST +OBX|4|CWE|95418-0^Employed in a healthcare setting^LN^^^^2.69^^Employed in a healthcare setting||Y^Yes^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST +OBX|5|CWE|95421-4^Resides in a congregate care setting^LN^^^^2.69^^Resides in a congregate care setting||N^No^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST +OBX|6|CWE|76691-5^Gender identity^LN^^^^^^Gender identity||446131000124102^Non-binary gender identity^SCT|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST +SPM|1|ecfbc6c0-0c32-4cf8-adc2-9134281110d8&Testing Lab&12D4567890&CLIA^ecfbc6c0-0c32-4cf8-adc2-9134281110d8&Testing Lab&12D4567890&CLIA||258500001^Nasopharyngeal swab^SCT^^^^2.67^^Nasopharyngeal swab||||87100004^Topography unknown (body structure)^SCT^^^^^^Topography unknown (body structure)|||||||||20240826222530+0000|20240826222530+0000 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir new file mode 100644 index 00000000000..e78bc968699 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir @@ -0,0 +1 @@ +{ "resourceType": "Bundle", "identifier": { "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, "type": "message", "timestamp": "2024-02-14T21:06:46.577Z", "entry": [ { "fullUrl": "MessageHeader/2a8ffce6-daa1-43e2-9236-e38bbb59892a", "resource": { "resourceType": "MessageHeader", "id": "2a8ffce6-daa1-43e2-9236-e38bbb59892a", "meta": { "tag": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0103", "code": "P", "display": "Production" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", "extension": [ { "url": "MSH.15", "valueString": "NE" }, { "url": "MSH.16", "valueString": "NE" }, { "url": "MSH.19", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "ISO" } ], "code": "ENG", "display": "English" } ] } }, { "url": "MSH.21", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "ELR_Receiver" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.113883.9.11" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" } ] } ], "value": "PHLabReport-NoAck" } }, { "url": "MSH.7", "valueInstant": "2024-02-14T21:06:46.577Z" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", "valueString": "UNICODE UTF-8" } ], "eventCoding": { "system": "http://terminology.hl7.org/CodeSystem/v2-0003", "code": "R01", "display": "ORU^R01^ORU_R01" }, "destination": [ { "name": "PRIME ReportStream", "endpoint": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems" } ], "sender": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" }, "source": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", "valueString": "0.2-SNAPSHOT" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", "valueInstant": "2024-02-14T16:38:56Z" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", "valueReference": { "reference": "Organization/07640c5d-87cd-488b-9343-a226c5166539" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "CDC PRIME - Atlanta" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.114222.4.1.237821" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "MSH.3" } ], "name": "CDC PRIME - Atlanta: 2.16.840.1.114222.4.1.237821", "software": "PRIME ReportStream", "version": "0.2-SNAPSHOT", "endpoint": "urn:oid:2.16.840.1.114222.4.1.237821" }, "focus": [ { "reference": "Provenance/b344d9a8-399a-4607-b10e-9bf86f27a1bf" }, { "reference": "DiagnosticReport/3ad338c6-125d-4141-9ce1-6040481304ab" } ] } }, { "fullUrl": "Provenance/b344d9a8-399a-4607-b10e-9bf86f27a1bf", "resource": { "resourceType": "Provenance", "id": "b344d9a8-399a-4607-b10e-9bf86f27a1bf", "recorded": "2024-02-14T21:06:46.577Z", "activity": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0003", "code": "R01", "display": "ORU/ACK - Unsolicited transmission of an observation message" } ] }, "agent": [ { "who": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ] } }, { "fullUrl": "DiagnosticReport/3ad338c6-125d-4141-9ce1-6040481304ab", "resource": { "resourceType": "DiagnosticReport", "id": "3ad338c6-125d-4141-9ce1-6040481304ab", "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": 123 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "basedOn": [ { "reference": "ServiceRequest/c62aa5a7-4624-4b00-9ad6-e089c1aa29c5" } ], "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "95941-1" } ] }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46+00:00", "_issued": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46+00:00" } ] }, "specimen": [ { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" } ], "result": [ { "reference": "Observation/a8d3dfac-dd32-4e10-877b-407da556266e" }, { "reference": "Observation/06735b3b-a15d-4249-9ff6-6df8f7aab822" }, { "reference": "Observation/a6655d89-f7ea-4192-be69-92e772c4b8a6" } ] } }, { "fullUrl": "Patient/3551359f-bd1c-411e-b930-789ac694e75f", "resource": { "resourceType": "Patient", "id": "3551359f-bd1c-411e-b930-789ac694e75f", "extension": [ { "url": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "system": "http://terminology.hl7.org/CodeSystem/v3-Race", "version": "2.5.1", "code": "2076-8", "display": "pacific" } ], "text": "pacific" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70189" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0189", "version": "2.9", "code": "N", "display": "Not Hispanic or Latino" } ], "text": "Not Hispanic or Latino" } }, { "url": "https://hl7.org/fhir/R4/extension-patient-genderidentity.html", "valueCoding": { "system": "https://hl7.org/fhir/R4/valueset-gender-identity.html", "code": "male", "display": "male" } } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "PID.3" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", "extension": [ { "url": "CX.5", "valueString": "PI" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility", "valueReference": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ], "value": "3551359f-bd1c-411e-b930-789ac694e75f", "assigner": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ], "name": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", "extension": [ { "url": "XPN.2", "valueString": "Cedrick" }, { "url": "XPN.3", "valueString": "Charles" } ] } ], "use": "official", "family": "Diggory", "given": [ "Cedrick", "Charles" ] } ], "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(340) 555 5555" }, { "url": "XTN.2", "valueString": "PRS" }, { "url": "XTN.3", "valueString": "CP" }, { "url": "XTN.7", "valueInteger": 5555555 }, { "url": "XTN.12", "valueString": "(340) 555 5555" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 340 } ], "system": "phone", "value": "(340) 555 5555", "use": "mobile" } ], "gender": "male", "birthDate": "2000-12-18", "deceasedBoolean": false, "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "123 Main St" } ] } ] } ], "line": [ "123 Main St" ], "city": "Anchorage", "district": "Anchorage", "state": "NJ", "postalCode": "99501", "country": "USA" } ], "managingOrganization": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } }, { "fullUrl": "Organization/719ec8ad-cf59-405a-9832-c4065945c130", "resource": { "resourceType": "Organization", "id": "719ec8ad-cf59-405a-9832-c4065945c130", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", "valueCoding": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueCodeableConcept": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "XON.2" } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "code": "L" } ] } } ], "code": "L" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "OBX.25" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "OBX.15" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueCode": "CLIA" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "code": "12D4567890", "display": "Testing Lab" } ] } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", "extension": [ { "url": "XON.10", "valueString": "12D4567890" } ] } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "HD.2,HD.3" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.113883.4.7" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system", "valueCodeableConcept": { "coding": [ { "code": "CLIA" } ] } } ], "use": "official", "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0301", "code": "CLIA" } ] }, "value": "12D4567890" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "HD.1" } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "XX" } ] }, "value": "Testing Lab" } ], "name": "Testing Lab", "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } ], "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "123 Beach Way" } ] } ] } ], "line": [ "123 Beach Way" ], "city": "Houston", "state": "NJ", "postalCode": "77001", "country": "USA" } ] } }, { "fullUrl": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9", "resource": { "resourceType": "Practitioner", "id": "ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner", "extension": [ { "url": "XCN.10", "valueString": "L" }, { "url": "XCN.3", "valueString": "Phil" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.12" } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "NPI" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "urn:oid:2.16.840.1.113883.4.6" } ], "system": "http://hl7.org/fhir/sid/us-npi", "value": "1245319599" } ], "name": [ { "family": "McTester", "given": [ "Phil" ] } ], "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } ], "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "321 Ocean Drive" } ] } ] } ], "line": [ "321 Ocean Drive" ], "city": "Houston", "state": "NJ", "postalCode": "77001", "country": "USA" } ] } }, { "fullUrl": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2", "resource": { "resourceType": "Specimen", "id": "dc7af370-fc07-4b00-abc7-9b5dd87cf4d2", "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", "valueString": "SPM.2.1" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", "valueId": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PGN" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "type": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "version": "2.67", "code": "258500001", "display": "Nasopharyngeal swab" } ], "text": "Nasopharyngeal swab" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "receivedTime": "2024-02-14T20:51:46+00:00", "collection": { "collectedDateTime": "2024-02-14T20:51:46+00:00", "bodySite": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "87100004", "display": "Topography unknown (body structure)" } ], "text": "Topography unknown (body structure)" } } } }, { "fullUrl": "ServiceRequest/c62aa5a7-4624-4b00-9ad6-e089c1aa29c5", "resource": { "resourceType": "ServiceRequest", "id": "c62aa5a7-4624-4b00-9ad6-e089c1aa29c5", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0119", "code": "RE" } ] } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", "valueDateTime": "2024-02-14T21:06:46+00:00" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", "valueCode": "RE" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", "extension": [ { "url": "OBR.2", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.2" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } }, { "url": "OBR.3", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } }, { "url": "OBR.16", "valueReference": { "reference": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", "valueContactPoint": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order", "extension": [ { "url": "ORC.15", "valueDateTime": "2024-02-14T21:06:46+00:00" } ] } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.2" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "status": "completed", "intent": "order", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" } ], "system": "http://loinc.org", "code": "95941-1", "display": "Influenza virus A and B and SARS-CoV-2 (COVID-19) and Respiratory syncytial virus RNA panel - Respiratory system specimen by NAA with probe detection" } ] }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "requester": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", "valueContactPoint": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } } ], "reference": "PractitionerRole/d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927" }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "supportingInfo": [ { "reference": "Observation/81fd6b57-6808-32f6-b4e4-bdace1ea0e26" }, { "reference": "Observation/91dbef95-254a-3398-a8ee-c5eba59121b1" }, { "reference": "Observation/57f557ee-1009-397e-bae5-15d2cd3484fe" }, { "reference": "Observation/f186e153-e06a-32f1-b5f5-38be1fa13345" }, { "reference": "Observation/623a1a02-6925-3595-affd-271175822707" } ] } }, { "fullUrl": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927", "resource": { "resourceType": "Device", "id": "b83b1f5f-b62c-43aa-98f6-0ce34ab41927", "identifier": [ { "value": "00884999048034" }, { "type": { "coding": [ { "code": "DII" } ] } } ], "manufacturer": "Abbott", "deviceName": [ { "name": "Alinity m", "type": "model-name" } ] } }, { "fullUrl": "PractitionerRole/d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927", "resource": { "resourceType": "PractitionerRole", "id": "d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927", "practitioner": { "reference": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9" }, "organization": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } }, { "fullUrl": "Organization/07640c5d-87cd-488b-9343-a226c5166539", "resource": { "resourceType": "Organization", "id": "07640c5d-87cd-488b-9343-a226c5166539", "name": "Centers for Disease Control and Prevention" } }, { "fullUrl": "Observation/a8d3dfac-dd32-4e10-877b-407da556266e", "resource": { "resourceType": "Observation", "id": "a8d3dfac-dd32-4e10-877b-407da556266e", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "55735004", "display": "Respiratory syncytial virus infection (disorder)" } } ], "system": "http://loinc.org", "code": "85479-4", "display": "Respiratory syncytial virus RNA [Presence] in Upper respiratory specimen by NAA with probe detection" } ], "text": "RSV" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", "valueCoding": { "code": "Alinity m Resp-4-Plex_Abbott Molecular Inc." } } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/06735b3b-a15d-4249-9ff6-6df8f7aab822", "resource": { "resourceType": "Observation", "id": "06735b3b-a15d-4249-9ff6-6df8f7aab822", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "840539006", "display": "Disease caused by severe acute respiratory syndrome coronavirus 2 (disorder)" } } ], "system": "http://loinc.org", "code": "94500-6", "display": "SARS-CoV-2 (COVID-19) RNA [Presence] in Respiratory system specimen by NAA with probe detection" } ], "text": "COVID-19" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/a6655d89-f7ea-4192-be69-92e772c4b8a6", "resource": { "resourceType": "Observation", "id": "a6655d89-f7ea-4192-be69-92e772c4b8a6", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "5.41E+14", "display": "Infection caused by novel Influenza A virus variant (disorder)" } } ], "system": "http://loinc.org", "code": "85478-6", "display": "Influenza virus B RNA [Presence] in Upper respiratory specimen by NAA with probe detection" } ], "text": "Flu B" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", "valueCoding": { "code": "Alinity m Resp-4-Plex_Abbott Molecular Inc." } } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/81fd6b57-6808-32f6-b4e4-bdace1ea0e26", "resource": { "resourceType": "Observation", "id": "81fd6b57-6808-32f6-b4e4-bdace1ea0e26", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95419-8", "display": "Has symptoms related to condition of interest" } ], "text": "Has symptoms related to condition of interest" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "Y", "display": "Yes" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/91dbef95-254a-3398-a8ee-c5eba59121b1", "resource": { "resourceType": "Observation", "id": "91dbef95-254a-3398-a8ee-c5eba59121b1", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "DT" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "code": "11368-8", "display": "Illness or injury onset date and time" } ], "text": "Illness or injury onset date and time" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueDateTime": "2024-02-13", "_valueDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-13" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/57f557ee-1009-397e-bae5-15d2cd3484fe", "resource": { "resourceType": "Observation", "id": "57f557ee-1009-397e-bae5-15d2cd3484fe", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.68", "code": "82810-3", "display": "Pregnancy status" } ], "text": "Pregnancy status" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "60001007", "display": "Not pregnant" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/f186e153-e06a-32f1-b5f5-38be1fa13345", "resource": { "resourceType": "Observation", "id": "f186e153-e06a-32f1-b5f5-38be1fa13345", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95418-0", "display": "Employed in a healthcare setting" } ], "text": "Employed in a healthcare setting" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "N", "display": "No" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/623a1a02-6925-3595-affd-271175822707", "resource": { "resourceType": "Observation", "id": "623a1a02-6925-3595-affd-271175822707", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95421-4", "display": "Resides in a congregate care setting" } ], "text": "Resides in a congregate care setting" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "N", "display": "No" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } } ] } \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 new file mode 100644 index 00000000000..4110ce8f2f1 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 @@ -0,0 +1,14 @@ +MSH|^~\&|CDC PRIME - Atlanta,^2.16.840.1.114222.4.1.237821^ISO|CDC PRIME^11D2030855^CLIA|ELRS^2.16.840.1.113883.3.1299.5.1.6.1^ISO|NJDOH^2.16.840.1.113883.3.1299^ISO|20240214210646+0000||ORU^R01^ORU_R01|3ad338c6-125d-4141-9ce1-6040481304ab|P|2.5.1|||NE|NE|USA|UNICODE UTF-8|ENG^English^ISO||PHLabReport-NoAck^ELR_Receiver^2.16.840.1.113883.9.11^ISO +SFT|Centers for Disease Control and Prevention|0.2-SNAPSHOT|PRIME ReportStream|0.2-SNAPSHOT||20240214163856+0000 +PID|1||3551359f-bd1c-411e-b930-789ac694e75f^^^Testing Lab&12D4567890&CLIA^PI^Testing Lab&12D4567890&CLIA||Diggory^Cedrick^Charles^^^^L||20001218|M||2076-8^pacific^^^^^2.5.1^^pacific|123 Main St^^Anchorage^NJ^99501^USA^^^Anchorage||(340) 555 5555^PRS^CP^^1^340^5555555^^^^^(340) 555 5555|||||||||N^Not Hispanic or Latino^HL70189^^^^2.9^^Not Hispanic or Latino||||||||N +ORC|RE|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI||(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|20240214210646+0000||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|321 Ocean Drive^^Houston^NJ^77001^USA +OBR|1|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|95941-1^Influenza virus A and B and SARS-CoV-2 (COVID-19) and Respiratory syncytial virus RNA panel - Respiratory system specimen by NAA with probe detection^LN|||20240214205146+0000|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|||||20240214210646+0000|||F +OBX|1|CWE|85479-4^Respiratory syncytial virus RNA [Presence] in Upper respiratory specimen by NAA with probe detection^LN^^^^^^RSV||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||Alinity m Resp-4-Ple^Alinity m^^^^^^^Alinity m Resp-4-Plex_Abbott Molecular Inc.||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA +OBX|2|CWE|94500-6^SARS-CoV-2 (COVID-19) RNA [Presence] in Respiratory system specimen by NAA with probe detection^LN^^^^^^COVID-19||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||^Alinity m||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA +OBX|3|CWE|85478-6^Influenza virus B RNA [Presence] in Upper respiratory specimen by NAA with probe detection^LN^^^^^^Flu B||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||Alinity m Resp-4-Ple^Alinity m^^^^^^^Alinity m Resp-4-Plex_Abbott Molecular Inc.||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA +OBX|4|CWE|95419-8^Has symptoms related to condition of interest^LN^^^^2.69^^Has symptoms related to condition of interest||Y^Yes^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST +OBX|5|DT|11368-8^Illness or injury onset date and time^LN^^^^^^Illness or injury onset date and time||20240213000000+0000|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST +OBX|6|CWE|82810-3^Pregnancy status^LN^^^^2.68^^Pregnancy status||60001007^Not pregnant^SCT|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST +OBX|7|CWE|95418-0^Employed in a healthcare setting^LN^^^^2.69^^Employed in a healthcare setting||N^No^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST +OBX|8|CWE|95421-4^Resides in a congregate care setting^LN^^^^2.69^^Resides in a congregate care setting||N^No^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST +SPM|1|3ad338c6-125d-4141-9ce1-6040481304ab&Testing Lab&12D4567890&CLIA^3ad338c6-125d-4141-9ce1-6040481304ab&Testing Lab&12D4567890&CLIA||258500001^Nasopharyngeal swab^SCT^^^^2.67^^Nasopharyngeal swab||||87100004^Topography unknown (body structure)^SCT^^^^^^Topography unknown (body structure)|||||||||20240214205146+0000|20240214205146+0000 diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir deleted file mode 100644 index eb3f5decdbd..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir +++ /dev/null @@ -1,259 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403029141816000.d1ff92b0-51ab-4c76-84d1-de6aee6b66c4", - "meta" : { - "lastUpdated" : "2024-04-17T19:17:09.151-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392" - } - } - }, { - "fullUrl" : "Organization/1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403029775863000.7cb12d62-b747-49d8-a949-bdeac15f7a00", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403029775863000.7cb12d62-b747-49d8-a949-bdeac15f7a00", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - }, { - "reference" : "DiagnosticReport/1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403029790190000.3d26679e-e908-4f04-b7b0-81bb315e714e", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403029790190000.3d26679e-e908-4f04-b7b0-81bb315e714e", - "recorded" : "2024-04-17T19:17:09Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" - } - }, { - "fullUrl" : "Provenance/1713403029816912000.d951d3ea-7ec1-48e3-b360-841b21872c90", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403029816912000.d951d3ea-7ec1-48e3-b360-841b21872c90", - "target" : [ { - "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" - } ], - "recorded" : "2024-04-17T19:17:09Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "Specimen/1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "Specimen/1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "SPM" - } ], - "collection" : { - "quantity" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cq-units", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:TEST1234" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "PrimaryVersion", - "code" : "PrimaryCode", - "display" : "Primary Code Display" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "SecondaryAltVersion", - "code" : "SecondaryAltCode", - "display" : "SecondaryAltText" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "AltVersion", - "code" : "AltCode", - "display" : "AltText" - } ], - "text" : "OriginalText" - } - } ], - "value" : 1, - "unit" : "OriginalText" - } - } - } - }, { - "fullUrl" : "ServiceRequest/1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.25", - "valueId" : "F" - } ] - } ], - "status" : "unknown", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "TEST" - } ] - }, - "subject" : { - "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" - } - } - }, { - "fullUrl" : "DiagnosticReport/1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c", - "basedOn" : [ { - "reference" : "ServiceRequest/1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6" - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "TEST" - } ] - }, - "subject" : { - "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" - }, - "specimen" : [ { - "reference" : "Specimen/1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333" - }, { - "reference" : "Specimen/1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705" - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 deleted file mode 100644 index 77ebe056c3b..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 +++ /dev/null @@ -1,4 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1 -OBR|1|||TEST|||||||||||||||||||||F -SPM|1|||||||||||1^PrimaryCode&Primary Code Display&LN&AltCode&AltText&L&PrimaryVersion&AltVersion&OriginalText&SecondaryAltCode&SecondaryAltText&L&SecondaryAltVersion&TEST1234 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv deleted file mode 100644 index 851665d6c57..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv +++ /dev/null @@ -1,25 +0,0 @@ -HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments -Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping -(IS, ID, CE, CNE, CWE)",Assignment,, -1,CWE.1,Identifier,ST,0,1,,,"If mapped to FHIR, use Code System and Display",coding[1].code,,code,0,1,,,,, -2,CWE.2,Text,ST,0,1,,,,coding[1].display,,string,0,1,,,,, -3,CWE.3,Name of Coding System,ID,0,1,,,,coding[1].system,,uri,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri. -4,CWE.4,Alternate Identifier,ST,0,1,,,,coding[2].code,,code,0,1,,,,, -5,CWE.5,Alternate Text,ST,0,1,,,,coding[2].display,,string,0,1,,,,, -6,CWE.6,Name of Alternate Coding System,ID,0,1,,,,coding[2].system,,uri,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri -7,CWE.7,Coding System Version ID,ST,0,1,,,,coding[1].version,,string,0,1,,,,, -8,CWE.8,Alternate Coding System Version ID,ST,0,1,,,,coding[2].version,,string,0,1,,,,, -9,CWE.9,Original Text,ST,0,1,,,,text,,string,0,1,,,,, -10,CWE.10,Second Alternate Identifier,ST,0,1,,,,coding[3].code,,code,0,1,,,,, -11,CWE.11,Second Alternate Text,ST,0,1,,,,coding[3].display,,string,0,1,,,,, -12,CWE.12,Name of Second Alternate Coding System,ID,0,1,,,,coding[3].system,,uri,0,1,,,,, -13,CWE.13,Second Alternate Coding System Version ID,ST,0,1,,,,coding[3].version,,string,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri. -14,CWE.14,Coding System OID,ST,0,1,,,,,,,,,,,,, -15,CWE.15,Value Set OID,ST,0,1,,,,,,,,,,,,, -16,CWE.16,Value Set Version ID,DTM,0,1,,,,,,,,,,,,, -17,CWE.17,Alternate Coding System OID,ST,0,1,,,,,,,,,,,,, -18,CWE.18,Alternate Value Set OID,ST,0,1,,,,,,,,,,,,, -19,CWE.19,Alternate Value Set Version ID,DTM,0,1,,,,,,,,,,,,, -20,CWE.20,Second Alternate Coding System OID,ST,0,1,,,,,,,,,,,,, -21,CWE.21,Second Alternate Value Set OID,ST,0,1,,,,,,,,,,,,, -22,CWE.22,Second Alternate Value Set Version ID,DTM,0,1,,,,,,,,,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir deleted file mode 100644 index 15292f52dd4..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403200456908000.a3e6fb64-ecd0-45cd-bbaa-0542fe3e3d4f", - "meta" : { - "lastUpdated" : "2024-04-17T19:20:00.466-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb" - } - } - }, { - "fullUrl" : "Organization/1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403201074832000.5df2c9b6-efc7-4e25-93aa-05b827b639b8", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403201074832000.5df2c9b6-efc7-4e25-93aa-05b827b639b8", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403201087347000.d5d5300a-5a81-413a-9dfe-2a3357800a45", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403201087347000.d5d5300a-5a81-413a-9dfe-2a3357800a45", - "recorded" : "2024-04-17T19:20:01Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "version" : "AltVersion" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403201114667000.02154068-dc9b-48ac-af0a-105a107febd5", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403201114667000.02154068-dc9b-48ac-af0a-105a107febd5", - "target" : [ { - "reference" : "Patient/1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6" - } ], - "recorded" : "2024-04-17T19:20:01Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 deleted file mode 100644 index ed304d5183d..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^AltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir deleted file mode 100644 index 4589805e1c8..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir +++ /dev/null @@ -1,137 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403220122904000.f8bd4094-3752-4a19-aeee-f19b3472c4ba", - "meta" : { - "lastUpdated" : "2024-04-17T19:20:20.133-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37" - } - } - }, { - "fullUrl" : "Organization/1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403220766953000.e8cadaec-d3df-45b4-8ccd-3aafd77cb739", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403220766953000.e8cadaec-d3df-45b4-8ccd-3aafd77cb739", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403220779417000.66b6b06d-0f77-47f7-baef-8fa57da1dc06", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403220779417000.66b6b06d-0f77-47f7-baef-8fa57da1dc06", - "recorded" : "2024-04-17T19:20:20Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "text" : "OriginalText" - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403220802992000.d4f67c35-19cb-452a-9c40-9d43ec969499", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403220802992000.d4f67c35-19cb-452a-9c40-9d43ec969499", - "target" : [ { - "reference" : "Patient/1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a" - } ], - "recorded" : "2024-04-17T19:20:20Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 deleted file mode 100644 index 38c215f4fa3..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^OriginalText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir deleted file mode 100644 index 3feeb9d12a7..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403238639454000.785747c6-2555-421d-a676-e0f8cce8ba95", - "meta" : { - "lastUpdated" : "2024-04-17T19:20:38.649-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7" - } - } - }, { - "fullUrl" : "Organization/1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403239274942000.35993555-b3f1-4f19-867a-2d7e4670e81e", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403239274942000.35993555-b3f1-4f19-867a-2d7e4670e81e", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403239286222000.50ec95aa-c3b8-47de-9ad5-f6f1a60ac070", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403239286222000.50ec95aa-c3b8-47de-9ad5-f6f1a60ac070", - "recorded" : "2024-04-17T19:20:39Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - } ], - "code" : "SecondaryAltCode" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403239309723000.0861eb88-cbc4-49a7-a737-ae7331354d86", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403239309723000.0861eb88-cbc4-49a7-a737-ae7331354d86", - "target" : [ { - "reference" : "Patient/1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34" - } ], - "recorded" : "2024-04-17T19:20:39Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 deleted file mode 100644 index 4341d2830be..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^^SecondaryAltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir deleted file mode 100644 index 95f11db186a..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403256912019000.b65b8407-cf06-483a-97eb-219c7bf218f5", - "meta" : { - "lastUpdated" : "2024-04-17T19:20:56.921-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487" - } - } - }, { - "fullUrl" : "Organization/1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403257532857000.face4ba9-0511-494a-b97a-fd317b4c569e", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403257532857000.face4ba9-0511-494a-b97a-fd317b4c569e", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403257545395000.7fcceea3-cab0-4f49-a614-fb9920b67eab", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403257545395000.7fcceea3-cab0-4f49-a614-fb9920b67eab", - "recorded" : "2024-04-17T19:20:57Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - } ], - "display" : "SecondaryAltText" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403257574021000.ac0f531d-82b5-497f-bda9-2ca03b85aa27", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403257574021000.ac0f531d-82b5-497f-bda9-2ca03b85aa27", - "target" : [ { - "reference" : "Patient/1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8" - } ], - "recorded" : "2024-04-17T19:20:57Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 deleted file mode 100644 index 56a3ba9a867..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^^^SecondaryAltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir deleted file mode 100644 index 86e2249bf64..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir +++ /dev/null @@ -1,146 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403276221244000.d8d624f5-14a9-48cf-bd9a-d1448ec86845", - "meta" : { - "lastUpdated" : "2024-04-17T19:21:16.233-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6" - } - } - }, { - "fullUrl" : "Organization/1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403276909467000.399a11a2-3e1d-41c3-aadf-5e1d966b1586", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403276909467000.399a11a2-3e1d-41c3-aadf-5e1d966b1586", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403276925023000.704d041c-fcc1-4a19-b121-5d3beb4f5cd2", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403276925023000.704d041c-fcc1-4a19-b121-5d3beb4f5cd2", - "recorded" : "2024-04-17T19:21:16Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403276954675000.9ae80c04-b945-464d-9616-1fe82deac0f7", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403276954675000.9ae80c04-b945-464d-9616-1fe82deac0f7", - "target" : [ { - "reference" : "Patient/1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0" - } ], - "recorded" : "2024-04-17T19:21:16Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 deleted file mode 100644 index 4ae37cef8d7..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir deleted file mode 100644 index e30b37765bb..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403297713864000.d073d008-db83-44bd-83df-cbb14a938aa0", - "meta" : { - "lastUpdated" : "2024-04-17T19:21:37.724-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042" - } - } - }, { - "fullUrl" : "Organization/1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403298421036000.afee0d57-0e74-4ecb-bae8-e2f2943e0d08", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403298421036000.afee0d57-0e74-4ecb-bae8-e2f2943e0d08", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403298444735000.9ed2d77d-a8ea-43d9-9692-1a990713b745", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403298444735000.9ed2d77d-a8ea-43d9-9692-1a990713b745", - "recorded" : "2024-04-17T19:21:38Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - } ], - "version" : "SecondaryAltVersion" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403298472875000.27c55c78-0385-4eeb-9f70-367c39446b4f", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403298472875000.27c55c78-0385-4eeb-9f70-367c39446b4f", - "target" : [ { - "reference" : "Patient/1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215" - } ], - "recorded" : "2024-04-17T19:21:38Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 deleted file mode 100644 index 39772a4adcb..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^^^^^SecondaryAltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir deleted file mode 100644 index fb877731490..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir +++ /dev/null @@ -1,140 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403318694290000.f2538ca4-7cf1-41d0-a0e0-3421116cc109", - "meta" : { - "lastUpdated" : "2024-04-17T19:21:58.705-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a" - } - } - }, { - "fullUrl" : "Organization/1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403319378244000.599dd6ae-9552-465a-8ffe-ebcf38cbd6cf", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403319378244000.599dd6ae-9552-465a-8ffe-ebcf38cbd6cf", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403319391303000.2068fab6-cb87-43db-8a54-235b378d0bfe", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403319391303000.2068fab6-cb87-43db-8a54-235b378d0bfe", - "recorded" : "2024-04-17T19:21:59Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:TEST1234" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403319418460000.85dbbede-9f30-48ef-b228-9fe89ebfb4b0", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403319418460000.85dbbede-9f30-48ef-b228-9fe89ebfb4b0", - "target" : [ { - "reference" : "Patient/1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853" - } ], - "recorded" : "2024-04-17T19:21:59Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 deleted file mode 100644 index 655d4dcbffb..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^^^^^^^^TEST1234 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir deleted file mode 100644 index 58907013516..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403339112570000.edd6d69d-919c-4670-a758-58676f3edbaf", - "meta" : { - "lastUpdated" : "2024-04-17T19:22:19.123-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1" - } - } - }, { - "fullUrl" : "Organization/1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403339804199000.85d17102-1b50-4689-bad9-adcbbf545578", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403339804199000.85d17102-1b50-4689-bad9-adcbbf545578", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403339818818000.aa3d6196-9d12-4adf-8ee9-71134e43be14", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403339818818000.aa3d6196-9d12-4adf-8ee9-71134e43be14", - "recorded" : "2024-04-17T19:22:19Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "PrimaryCode" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403339846196000.abfc2480-a0fb-46ed-a7c4-e6dd98ff4aa2", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403339846196000.abfc2480-a0fb-46ed-a7c4-e6dd98ff4aa2", - "target" : [ { - "reference" : "Patient/1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e" - } ], - "recorded" : "2024-04-17T19:22:19Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 deleted file mode 100644 index ad77148beb8..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||PrimaryCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir deleted file mode 100644 index 148f7a07a3b..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403359728506000.43ea1e28-d96b-424a-ba86-06aee397ab29", - "meta" : { - "lastUpdated" : "2024-04-17T19:22:39.739-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403359840864000.749d4472-f21c-4867-a087-d84b14622371" - } - } - }, { - "fullUrl" : "Organization/1713403359840864000.749d4472-f21c-4867-a087-d84b14622371", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403359840864000.749d4472-f21c-4867-a087-d84b14622371", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403360427575000.3087116f-b901-4c70-89cd-f113371358ce", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403360427575000.3087116f-b901-4c70-89cd-f113371358ce", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403360441247000.3d29620d-2ac7-4458-a070-07e5089dd6ad", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403360441247000.3d29620d-2ac7-4458-a070-07e5089dd6ad", - "recorded" : "2024-04-17T19:22:40Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "display" : "PrimaryText" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403360469191000.bdb981b5-43d8-45af-8bd1-b34be2715aad", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403360469191000.bdb981b5-43d8-45af-8bd1-b34be2715aad", - "target" : [ { - "reference" : "Patient/1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36" - } ], - "recorded" : "2024-04-17T19:22:40Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 deleted file mode 100644 index 85a78b797f3..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^PrimaryText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir deleted file mode 100644 index 60b7be17a15..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir +++ /dev/null @@ -1,146 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403380679523000.db2e06dd-216a-48a2-a1ca-ae8f0fdf8736", - "meta" : { - "lastUpdated" : "2024-04-17T19:23:00.689-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69" - } - } - }, { - "fullUrl" : "Organization/1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403381370445000.f9db9ebf-1549-4433-a230-6e08655bcc6b", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403381370445000.f9db9ebf-1549-4433-a230-6e08655bcc6b", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403381383417000.9e3e72a5-37f1-4784-89e7-aae93bc44af0", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403381383417000.9e3e72a5-37f1-4784-89e7-aae93bc44af0", - "recorded" : "2024-04-17T19:23:01Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403381409401000.edb3ccb6-a09b-4549-9b65-cfba32757a84", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403381409401000.edb3ccb6-a09b-4549-9b65-cfba32757a84", - "target" : [ { - "reference" : "Patient/1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981" - } ], - "recorded" : "2024-04-17T19:23:01Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 deleted file mode 100644 index 80e3d774df2..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^LN \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir deleted file mode 100644 index 62335ea84bd..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403401349528000.cde165bf-abb6-4d40-a95c-bd1ab331b14e", - "meta" : { - "lastUpdated" : "2024-04-17T19:23:21.360-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842" - } - } - }, { - "fullUrl" : "Organization/1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403402041048000.ee072e3a-3a20-4ae6-8503-05412bebf042", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403402041048000.ee072e3a-3a20-4ae6-8503-05412bebf042", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403402055070000.d0fca609-cb01-48e4-96bc-9d39a769409e", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403402055070000.d0fca609-cb01-48e4-96bc-9d39a769409e", - "recorded" : "2024-04-17T19:23:22Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "code" : "AltCode" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403402082318000.e34bd1b0-8605-4da0-911c-8c625cf6bce0", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403402082318000.e34bd1b0-8605-4da0-911c-8c625cf6bce0", - "target" : [ { - "reference" : "Patient/1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408" - } ], - "recorded" : "2024-04-17T19:23:22Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 deleted file mode 100644 index 202d873be63..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^AltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir deleted file mode 100644 index 08c61954c97..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403423039330000.0f5107c6-7a2b-4fb7-b3d3-0bedc6fb61b6", - "meta" : { - "lastUpdated" : "2024-04-17T19:23:43.050-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613" - } - } - }, { - "fullUrl" : "Organization/1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403423760358000.d5a126a6-4e7f-4288-b2d0-d92db61052f3", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403423760358000.d5a126a6-4e7f-4288-b2d0-d92db61052f3", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403423777580000.4edc191a-af55-4042-a106-57d89345b4d1", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403423777580000.4edc191a-af55-4042-a106-57d89345b4d1", - "recorded" : "2024-04-17T19:23:43Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "display" : "AltText" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403423810606000.299e921a-6e86-422a-a679-0792f0f297ea", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403423810606000.299e921a-6e86-422a-a679-0792f0f297ea", - "target" : [ { - "reference" : "Patient/1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10" - } ], - "recorded" : "2024-04-17T19:23:43Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 deleted file mode 100644 index dcde04d370a..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^AltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir deleted file mode 100644 index 55b6592255d..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir +++ /dev/null @@ -1,146 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403444709377000.15845bf8-a5db-427b-a53e-3b45a830d7cb", - "meta" : { - "lastUpdated" : "2024-04-17T19:24:04.719-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0" - } - } - }, { - "fullUrl" : "Organization/1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403445427495000.2514114f-8e8f-4d0f-aeee-a13449a2c209", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403445427495000.2514114f-8e8f-4d0f-aeee-a13449a2c209", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403445442019000.2f759e9e-f1d8-46e8-b3a3-599e85819a6a", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403445442019000.2f759e9e-f1d8-46e8-b3a3-599e85819a6a", - "recorded" : "2024-04-17T19:24:05Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403445471153000.e959285d-ec02-4343-9ebe-1090a68193c6", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403445471153000.e959285d-ec02-4343-9ebe-1090a68193c6", - "target" : [ { - "reference" : "Patient/1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe" - } ], - "recorded" : "2024-04-17T19:24:05Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 deleted file mode 100644 index 334cc0adab3..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir deleted file mode 100644 index b950f4145fb..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir +++ /dev/null @@ -1,143 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403466089727000.c986b703-e397-4e6f-baf8-278376575309", - "meta" : { - "lastUpdated" : "2024-04-17T19:24:26.101-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19" - } - } - }, { - "fullUrl" : "Organization/1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713403466809125000.83225b49-3606-4f9a-be2a-aefd9bd971ab", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403466809125000.83225b49-3606-4f9a-be2a-aefd9bd971ab", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403466823618000.ad1b7c2f-547d-4a4b-88d0-10da8f006664", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403466823618000.ad1b7c2f-547d-4a4b-88d0-10da8f006664", - "recorded" : "2024-04-17T19:24:26Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827", - "extension" : [ { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "version" : "PrimaryVersion" - } ] - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403466851693000.522a71a5-ffa7-444b-a13a-aebff8b146e6", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403466851693000.522a71a5-ffa7-444b-a13a-aebff8b146e6", - "target" : [ { - "reference" : "Patient/1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827" - } ], - "recorded" : "2024-04-17T19:24:26Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 deleted file mode 100644 index 5f3ffea2208..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1|||||||||^^^^^^PrimaryVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir deleted file mode 100644 index 2b6f801d879..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir +++ /dev/null @@ -1,3206 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403050231945000.37598ff5-3c2e-4da0-8f9e-b72147aa17b9", - "meta" : { - "lastUpdated" : "2024-04-17T19:17:30.243-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "3015894743_04608717_11184" - }, - "type" : "message", - "timestamp" : "2023-08-02T16:08:02.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/8565cf64-832b-3438-bb11-99d9ac964bc1", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "8565cf64-832b-3438-bb11-99d9ac964bc1", - "meta" : { - "tag" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0103", - "code" : "T" - } ] - }, - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230802180802-0400" - }, { - "url" : "MSH.10", - "valueString" : "3015894743_04608717_11184" - }, { - "url" : "MSH.15", - "valueString" : "NE" - }, { - "url" : "MSH.16", - "valueString" : "NE" - }, { - "url" : "MSH.21", - "valueIdentifier" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "PHIN" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.9.11" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "value" : "PHLabReport-NoAck" - } - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "destination" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.10.1.1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "MSH.5" - } ], - "name" : "CDPH CA CALREDIE", - "endpoint" : "urn:oid:2.16.840.1.114222.4.3.3.10.1.1", - "receiver" : { - "reference" : "Organization/1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9" - } - } ], - "sender" : { - "reference" : "Organization/1713403050331033000.32003012-401a-42a0-a78b-2baea0650751" - }, - "source" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "MSH.3" - } ], - "software" : "STARLIMS", - "version" : "ELIMS V11", - "endpoint" : "urn:oid:2.16.840.1.114222.4.3.3.2.1.2" - } - } - }, { - "fullUrl" : "Organization/1713403050331033000.32003012-401a-42a0-a78b-2baea0650751", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050331033000.32003012-401a-42a0-a78b-2baea0650751", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "CDC Atlanta" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.2,HD.3" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", - "code" : "CLIA" - } ] - }, - "value" : "11D0668319" - } ], - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Organization/1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "MSH.6" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "CDPH_CID" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.2,HD.3" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", - "code" : "ISO" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.2.14104" - } ] - } - }, { - "fullUrl" : "Provenance/1713403050863906000.1ffcec14-c987-4f63-b117-0a799879de4f", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403050863906000.1ffcec14-c987-4f63-b117-0a799879de4f", - "target" : [ { - "reference" : "MessageHeader/8565cf64-832b-3438-bb11-99d9ac964bc1" - }, { - "reference" : "DiagnosticReport/1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc" - }, { - "reference" : "DiagnosticReport/1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d" - } ], - "recorded" : "2023-08-02T18:08:02-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "author" - } ] - }, - "who" : { - "reference" : "Organization/1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39" - } - } ], - "entity" : [ { - "role" : "source", - "what" : { - "reference" : "Device/1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "CDC Atlanta" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.2,HD.3" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", - "code" : "CLIA" - } ] - }, - "value" : "11D0668319" - } ] - } - }, { - "fullUrl" : "Organization/1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "CDC CLIA" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CDC" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "CDC CLIA" - } ], - "name" : "CDC" - } - }, { - "fullUrl" : "Device/1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190", - "resource" : { - "resourceType" : "Device", - "id" : "1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", - "valueReference" : { - "reference" : "Organization/1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87" - } - } ], - "manufacturer" : "CDC", - "deviceName" : [ { - "name" : "STARLIMS", - "type" : "manufacturer-name" - } ], - "modelNumber" : "Binary ID unknown", - "version" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", - "valueDateTime" : "2023-08-02T18:08:02-04:00", - "_valueDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230802180802-0400" - } ] - } - } ], - "value" : "ELIMS V11" - } ], - "note" : [ { - "text" : "test" - } ] - } - }, { - "fullUrl" : "Provenance/1713403050882896000.41cd7cce-74c7-4c60-a5a4-e75f0fa0f7fe", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403050882896000.41cd7cce-74c7-4c60-a5a4-e75f0fa0f7fe", - "recorded" : "2024-04-17T19:17:30Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes", - "valueAnnotation" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "Accession level coment." - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "Accession level coment." - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes", - "valueAnnotation" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234" - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient", - "extension" : [ { - "url" : "PID.8", - "valueString" : "F" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/studentStatus", - "valueString" : "F" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-disability", - "valueString" : "T" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/livingWill", - "valueString" : "F" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pd1-patient-additional-demographic", - "extension" : [ { - "url" : "PD1.1", - "valueString" : "C" - }, { - "url" : "PD1.2", - "valueString" : "A" - }, { - "url" : "PD1.8", - "valueString" : "F" - }, { - "url" : "PD1.9", - "valueString" : "N" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", - "extension" : [ { - "url" : "CX.5", - "valueString" : "PI" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.3" - } ], - "type" : { - "coding" : [ { - "code" : "PI" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "_system" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, - "value" : "test" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", - "extension" : [ { - "url" : "CX.5", - "valueString" : "PI" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.3" - } ], - "type" : { - "coding" : [ { - "code" : "PI" - } ] - }, - "system" : "SPHL-000048", - "_system" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, - "value" : "PID123" - } ], - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "HL7" - }, { - "url" : "XPN.3", - "valueString" : "MI" - }, { - "url" : "XPN.7", - "valueString" : "L" - } ] - } ], - "use" : "official", - "family" : "Mega", - "given" : [ "HL7", "MI" ] - } ], - "gender" : "female", - "_birthDate" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "0000" - } ] - }, - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "H" - } ] - } ], - "use" : "home", - "country" : "USA" - } ], - "contact" : [ { - "extension" : [ { - "url" : "https://hl7.org/fhir/StructureDefinition/relationship", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70131" - } ], - "code" : "N", - "display" : "Next-of-Kin" - } ] - } - }, { - "url" : "https://hl7.org/fhir/StructureDefinition/relationship", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70131" - } ], - "code" : "N", - "display" : "Next-of-Kin" - } ] - } - } ], - "name" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "Leia" - } ] - } ], - "family" : "Organa", - "given" : [ "Leia" ] - } - } ], - "generalPractitioner" : [ { - "reference" : "Organization/1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1" - }, { - "reference" : "Organization/1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc" - } ] - } - }, { - "fullUrl" : "Location/1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8", - "resource" : { - "resourceType" : "Location", - "id" : "1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ], - "identifier" : [ { - "value" : "2.16.840.1.113883.9.11" - } ], - "name" : "Hospital A", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "si" - } ] - } - } - }, { - "fullUrl" : "Organization/1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "X" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code", - "valueString" : "NameRepCode" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.3", - "valueString" : "123" - }, { - "url" : "XON.10", - "valueString" : "OrgIdentifier" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit", - "valueString" : "Check Digit" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "Assigning Authority" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.1.4.1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit", - "valueCode" : "C1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location", - "valueReference" : { - "reference" : "Location/1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8" - } - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "MD" - } ] - }, - "value" : "OrgIdentifier" - } ], - "name" : "Ordering Facility" - } - }, { - "fullUrl" : "Location/1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5", - "resource" : { - "resourceType" : "Location", - "id" : "1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ], - "identifier" : [ { - "value" : "2.16.840.1.113883.9.11" - } ], - "name" : "Hospital A", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "si" - } ] - } - } - }, { - "fullUrl" : "Organization/1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "X" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code", - "valueString" : "NameRepCode" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.3", - "valueString" : "123" - }, { - "url" : "XON.10", - "valueString" : "OrgIdentifier" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit", - "valueString" : "Check Digit" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "Assigning Authority" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.1.4.1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit", - "valueCode" : "C1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location", - "valueReference" : { - "reference" : "Location/1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5" - } - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "MD" - } ] - }, - "value" : "OrgIdentifier" - } ], - "name" : "Ordering Facility" - } - }, { - "fullUrl" : "Provenance/1713403050924731000.deeb0618-78d4-4c66-b374-ec32bb2509b1", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403050924731000.deeb0618-78d4-4c66-b374-ec32bb2509b1", - "target" : [ { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - } ], - "recorded" : "2024-04-17T19:17:30Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "RelatedPerson/1713403050927052000.386f7345-bc28-44bf-9f8f-acccfd9f9060", - "resource" : { - "resourceType" : "RelatedPerson", - "id" : "1713403050927052000.386f7345-bc28-44bf-9f8f-acccfd9f9060", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "NK1" - } ], - "patient" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "relationship" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.3" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70131" - } ], - "code" : "N", - "display" : "Next-of-Kin" - } ] - } ], - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "Leia" - } ] - } ], - "family" : "Organa", - "given" : [ "Leia" ] - } ] - } - }, { - "fullUrl" : "RelatedPerson/1713403050929112000.442ffb28-e33e-46bd-ae07-a9ed338659b2", - "resource" : { - "resourceType" : "RelatedPerson", - "id" : "1713403050929112000.442ffb28-e33e-46bd-ae07-a9ed338659b2", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "NK1" - } ], - "patient" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "relationship" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.3" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70131" - } ], - "code" : "N", - "display" : "Next-of-Kin" - } ] - } ], - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "Liz" - } ] - } ], - "family" : "Navarro", - "given" : [ "Liz" ] - } ] - } - }, { - "fullUrl" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc", - "resource" : { - "resourceType" : "Encounter", - "id" : "1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc", - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "location" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PV1.6" - } ], - "location" : { - "reference" : "Location/1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08" - }, - "status" : "completed" - } ] - } - }, { - "fullUrl" : "Organization/1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "EI.2" - } ], - "value" : "NAME" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "EI.3,EI.4" - } ], - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "ISO" - } ] - }, - "value" : "UNI" - } ] - } - }, { - "fullUrl" : "Location/1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08", - "resource" : { - "resourceType" : "Location", - "id" : "1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "Hospital A" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.2,HD.3" - } ], - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "ISO" - } ] - }, - "value" : "2.4.4.4" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/ei-assigner-organization-type", - "valueString" : "default" - } ], - "value" : "Entity ID", - "assigner" : { - "reference" : "Organization/1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023" - } - } ], - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "si" - } ] - } - } - }, { - "fullUrl" : "Observation/1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7", - "resource" : { - "resourceType" : "Observation", - "id" : "1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", - "extension" : [ { - "url" : "OBX.2", - "valueId" : "CWE" - }, { - "url" : "OBX.11", - "valueString" : "F" - } ] - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "code" : "80383-3", - "display" : "Flu B" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "performer" : [ { - "reference" : "Organization/1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958" - }, { - "reference" : "Organization/1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1" - } ], - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "SCT" - } ], - "system" : "http://snomed.info/sct", - "code" : "260415000", - "display" : "Not detected" - } ] - }, - "interpretation" : [ { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70078" - } ], - "version" : "2.7", - "code" : "N", - "display" : "Normal" - } ] - } ] - } - }, { - "fullUrl" : "Organization/1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "CLIA" - } ], - "code" : "11D1111111", - "display" : "CSV uploads" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.15" - } ], - "identifier" : [ { - "system" : "CLIA", - "value" : "11D1111111" - } ], - "name" : "CSV uploads" - } - }, { - "fullUrl" : "Organization/1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "L" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "11D1111111" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.25" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CLIA" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.4.7" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "11D1111111" - } ], - "name" : "CSV uploads-11D1111111", - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "123 Main St" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - } ] - } ], - "line" : [ "123 Main St" ], - "state" : "CA", - "postalCode" : "94553", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Observation/1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937", - "resource" : { - "resourceType" : "Observation", - "id" : "1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", - "extension" : [ { - "url" : "OBX.2", - "valueId" : "CWE" - }, { - "url" : "OBX.11", - "valueString" : "F" - }, { - "url" : "OBX.17", - "valueCodeableConcept" : { - "text" : "BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B*" - } - } ] - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "code" : "80382-5", - "display" : "Flu A" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "performer" : [ { - "reference" : "Organization/1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26" - }, { - "reference" : "Organization/1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145" - } ], - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "SCT" - } ], - "system" : "http://snomed.info/sct", - "code" : "260373001", - "display" : "Detected" - } ] - }, - "interpretation" : [ { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70078" - } ], - "version" : "2.7", - "code" : "A", - "display" : "Abnormal" - } ] - } ], - "method" : { - "text" : "BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B*" - } - } - }, { - "fullUrl" : "Organization/1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "CLIA" - } ], - "code" : "11D1111111", - "display" : "CSV uploads" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.15" - } ], - "identifier" : [ { - "system" : "CLIA", - "value" : "11D1111111" - } ], - "name" : "CSV uploads" - } - }, { - "fullUrl" : "Organization/1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "L" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "11D1111111" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.25" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CLIA" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.4.7" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "11D1111111" - } ], - "name" : "CSV uploads-11D1111111", - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "123 Main St" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - } ] - } ], - "line" : [ "123 Main St" ], - "state" : "CA", - "postalCode" : "94553", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Observation/1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e", - "resource" : { - "resourceType" : "Observation", - "id" : "1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sub-id", - "valueString" : "ZZYGNAUM-1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", - "valueDateTime" : "2023-07-27T18:30:17-04:00", - "_valueDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230727183017-0400" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", - "extension" : [ { - "url" : "OBX.2", - "valueId" : "CWE" - }, { - "url" : "OBX.11", - "valueString" : "F" - } ] - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.74", - "code" : "100383-9", - "display" : "MVPX DNA Spec Ql NAA+probe" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "v_unknown", - "code" : "3900", - "display" : "Monkeypox generic" - } ], - "text" : "Monkeypox generic" - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "effectiveDateTime" : "2023-07-24T15:24:00Z", - "_effectiveDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202307241524" - } ] - }, - "performer" : [ { - "reference" : "Organization/1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995" - }, { - "reference" : "PractitionerRole/1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736" - }, { - "reference" : "Organization/1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92" - } ], - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "SCT" - } ], - "system" : "http://snomed.info/sct", - "version" : "09012018", - "code" : "10828004", - "display" : "Positive" - } ], - "text" : "Positive" - }, - "note" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "Run level Comment" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "Run level Comment" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "Result level Comment." - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "Result level Comment." - } ] - } - }, { - "fullUrl" : "Organization/1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "CLIA" - } ], - "code" : "11D0668319", - "display" : "Centers for Disease Control and Prevention" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "code" : "47", - "display" : "Poxvirus Laboratory/Poxvirus and Rabies Branch" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.15" - } ], - "identifier" : [ { - "system" : "CLIA", - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention" - } - }, { - "fullUrl" : "Practitioner/1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner", - "extension" : [ { - "url" : "XCN.3", - "valueString" : "Christopher" - } ] - } ], - "identifier" : [ { - "value" : "NXQ0@cdc.gov" - } ], - "name" : [ { - "family" : "Anderson", - "given" : [ "Christopher" ] - } ] - } - }, { - "fullUrl" : "PractitionerRole/1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736", - "resource" : { - "resourceType" : "PractitionerRole", - "id" : "1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736", - "practitioner" : { - "reference" : "Practitioner/1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92" - }, - "code" : [ { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/practitioner-role", - "code" : "responsibleObserver" - } ] - } ] - } - }, { - "fullUrl" : "Organization/1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "L" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "11D0668319" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.25" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CLIA" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.4.7" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention", - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "1600 Clifton Rd" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "B" - } ] - } ], - "use" : "work", - "line" : [ "1600 Clifton Rd" ], - "city" : "Atlanta", - "state" : "GA", - "postalCode" : "30329", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Specimen/1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "Specimen/1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "SPM" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", - "valueString" : "3015894743" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", - "valueString" : "SPM.2.1" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PGN" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", - "valueString" : "Specimen123" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", - "valueString" : "SPM.2.2" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FGN" - } ] - }, - "value" : "3015894743" - } ], - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "SCT" - } ], - "system" : "http://snomed.info/sct", - "version" : "0912017", - "code" : "119297000", - "display" : "Blood specimen" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "Adobe_Code", - "code" : "BLD", - "display" : "Blood" - } ], - "text" : "Blood" - } - } - }, { - "fullUrl" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "SPM" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", - "valueString" : "3015894743" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", - "valueString" : "SPM.2.1" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PGN" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", - "valueString" : "Specimen123" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueString" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", - "valueString" : "SPM.2.2" - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FGN" - } ] - }, - "value" : "3015894743" - } ], - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "SCT" - } ], - "system" : "http://snomed.info/sct", - "version" : "0912017", - "code" : "119297000", - "display" : "Blood specimen" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "Adobe_Code", - "code" : "BLD", - "display" : "Blood" - } ], - "text" : "Blood" - } - } - }, { - "fullUrl" : "Observation/1713403051282055000.772aa683-9875-4d56-80ff-2d2b7b654051", - "resource" : { - "resourceType" : "Observation", - "id" : "1713403051282055000.772aa683-9875-4d56-80ff-2d2b7b654051", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", - "valueDateTime" : "2023-07-27T18:30:17Z", - "_valueDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230727183017" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn", - "extension" : [ { - "url" : "SN.2", - "valueString" : "28" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", - "extension" : [ { - "url" : "OBX.2", - "valueId" : "SN" - }, { - "url" : "OBX.6", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "UCUM" - } ], - "system" : "http://unitsofmeasure.org", - "version" : "2.1", - "code" : "a", - "display" : "Year" - } ] - } - }, { - "url" : "OBX.11", - "valueString" : "F" - } ] - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.61", - "code" : "21612-7", - "display" : "Reported Patient Age!!!" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "focus" : [ { - "reference" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708" - } ], - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "effectiveDateTime" : "2023-07-24T15:24:00Z", - "_effectiveDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202307241524" - } ] - }, - "performer" : [ { - "reference" : "Organization/1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452" - }, { - "reference" : "Organization/1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89" - } ] - } - }, { - "fullUrl" : "Organization/1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "CLIA" - } ], - "code" : "11D0668319", - "display" : "Centers for Disease Control and Prevention" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.15" - } ], - "identifier" : [ { - "system" : "CLIA", - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention" - } - }, { - "fullUrl" : "Organization/1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "L" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "11D0668319" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.25" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CLIA" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.4.7" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention", - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "1600 Clifton Road" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "B" - } ] - } ], - "use" : "work", - "line" : [ "1600 Clifton Road" ], - "city" : "Atlanta", - "state" : "GA", - "postalCode" : "30329", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Observation/1713403051288757000.7c43b4b9-e42b-432c-9431-1f3e316a977d", - "resource" : { - "resourceType" : "Observation", - "id" : "1713403051288757000.7c43b4b9-e42b-432c-9431-1f3e316a977d", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", - "valueDateTime" : "2023-07-27T18:30:17Z", - "_valueDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230727183017" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn", - "extension" : [ { - "url" : "SN.2", - "valueString" : "28" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", - "extension" : [ { - "url" : "OBX.2", - "valueId" : "SN" - }, { - "url" : "OBX.6", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "UCUM" - } ], - "system" : "http://unitsofmeasure.org", - "version" : "2.1", - "code" : "a", - "display" : "Year" - } ] - } - }, { - "url" : "OBX.11", - "valueString" : "F" - } ] - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.61", - "code" : "21612-7", - "display" : "Reported Patient Age???" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "focus" : [ { - "reference" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b" - } ], - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "effectiveDateTime" : "2023-07-24T15:24:00Z", - "_effectiveDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202307241524" - } ] - }, - "performer" : [ { - "reference" : "Organization/1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f" - }, { - "reference" : "Organization/1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a" - } ] - } - }, { - "fullUrl" : "Organization/1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "CLIA" - } ], - "code" : "11D0668319", - "display" : "Centers for Disease Control and Prevention" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.15" - } ], - "identifier" : [ { - "system" : "CLIA", - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention" - } - }, { - "fullUrl" : "Organization/1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "L" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "11D0668319" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBX.25" - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "CLIA" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.113883.4.7" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "11D0668319" - } ], - "name" : "Centers for Disease Control and Prevention", - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "1600 Clifton Road" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "B" - } ] - } ], - "use" : "work", - "line" : [ "1600 Clifton Road" ], - "city" : "Atlanta", - "state" : "GA", - "postalCode" : "30329", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "ServiceRequest/1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", - "valueCode" : "RE" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", - "valueString" : "20230725" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order", - "extension" : [ { - "url" : "orc-21-ordering-facility-name", - "valueReference" : { - "reference" : "Organization/1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce" - } - }, { - "url" : "orc-22-ordering-facility-address", - "valueAddress" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "850 Marina Bay Parkway" - } ] - }, { - "url" : "XAD.2", - "valueString" : "Rm. E-361" - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "M" - } ] - } ], - "type" : "postal", - "line" : [ "850 Marina Bay Parkway", "Rm. E-361" ], - "city" : "Richmond", - "state" : "CA", - "postalCode" : "94804", - "country" : "USA" - } - }, { - "url" : "orc-24-ordering-provider-address", - "valueAddress" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "11475 C Avenue" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "M" - } ] - } ], - "type" : "postal", - "line" : [ "11475 C Avenue" ], - "city" : "Auburn", - "state" : "CA", - "postalCode" : "95603", - "country" : "USA" - } - }, { - "url" : "orc-12-ordering-provider", - "valueReference" : { - "reference" : "Practitioner/1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63" - } - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.2", - "valueIdentifier" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "value" : "Specimen123" - } - }, { - "url" : "OBR.3", - "valueIdentifier" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "value" : "3015894743_04608717" - } - }, { - "url" : "OBR.22", - "valueString" : "202308021808-0400" - }, { - "url" : "OBR.25", - "valueId" : "F" - }, { - "url" : "OBR.16", - "valueReference" : { - "reference" : "Practitioner/1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430" - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", - "valueContactPoint" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "NET" - }, { - "url" : "XTN.3", - "valueString" : "Internet" - }, { - "url" : "XTN.4", - "valueString" : "MWaKabon@placer.ca.gov" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.17" - } ], - "system" : "email", - "value" : "MWaKabon@placer.ca.gov" - } - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "ORC.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PLAC" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "ORC.3" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FILL" - } ] - }, - "value" : "3015894743_04608717" - } ], - "status" : "unknown", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.74", - "code" : "68991-9", - "display" : "Epidemiologically Important Information" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "code" : "CDC-10515", - "display" : "Poxvirus Molecular Detection" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "requester" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", - "valueContactPoint" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "NET" - }, { - "url" : "XTN.3", - "valueString" : "Internet" - }, { - "url" : "XTN.4", - "valueString" : "MWaKabon@placer.ca.gov" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "ORC.14" - } ], - "system" : "email", - "value" : "MWaKabon@placer.ca.gov" - } - } ], - "reference" : "PractitionerRole/1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f" - } - } - }, { - "fullUrl" : "Practitioner/1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "ORC.12" - } ], - "identifier" : [ { - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "XX" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "value" : "SPHL-000098" - } ], - "name" : [ { - "family" : "CA-Placer County Public Health Laboratory" - } ], - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "11475 C Avenue" - } ] - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "M" - } ] - } ], - "type" : "postal", - "line" : [ "11475 C Avenue" ], - "city" : "Auburn", - "state" : "CA", - "postalCode" : "95603", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Organization/1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "D" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "SPHL-000048" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "SPHL-000048" - } ], - "name" : "CDPH, Viral and Rickettsial Disease Laboratory", - "telecom" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "WPN" - }, { - "url" : "XTN.3", - "valueString" : "Internet" - }, { - "url" : "XTN.4", - "valueString" : "VRDL.Mail@cdph.ca.gov" - } ] - } ], - "system" : "email", - "value" : "VRDL.Mail@cdph.ca.gov", - "use" : "work" - } ], - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "850 Marina Bay Parkway" - } ] - }, { - "url" : "XAD.2", - "valueString" : "Rm. E-361" - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "M" - } ] - } ], - "type" : "postal", - "line" : [ "850 Marina Bay Parkway", "Rm. E-361" ], - "city" : "Richmond", - "state" : "CA", - "postalCode" : "94804", - "country" : "USA" - } ] - } - }, { - "fullUrl" : "PractitionerRole/1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f", - "resource" : { - "resourceType" : "PractitionerRole", - "id" : "1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f", - "practitioner" : { - "reference" : "Practitioner/1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0" - }, - "organization" : { - "reference" : "Organization/1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c" - } - } - }, { - "fullUrl" : "Organization/1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", - "valueString" : "D" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", - "extension" : [ { - "url" : "XON.10", - "valueString" : "SPHL-000048" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "XX" - } ] - }, - "value" : "SPHL-000048" - } ], - "name" : "CDPH, Viral and Rickettsial Disease Laboratory" - } - }, { - "fullUrl" : "Practitioner/1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "identifier" : [ { - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "XX" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "value" : "SPHL-000098" - } ], - "name" : [ { - "family" : "CA-Placer County Public Health Laboratory" - } ] - } - }, { - "fullUrl" : "Practitioner/1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "identifier" : [ { - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "XX" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "value" : "SPHL-000098" - } ], - "name" : [ { - "family" : "CA-Placer County Public Health Laboratory" - } ] - } - }, { - "fullUrl" : "ServiceRequest/1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.22", - "valueString" : "202308021726-0400" - }, { - "url" : "OBR.25", - "valueId" : "F" - }, { - "url" : "OBR.16", - "valueReference" : { - "reference" : "Practitioner/1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702" - } - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PLAC" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.3" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FILL" - } ] - }, - "value" : "47_3015894743_04608717_1233" - } ], - "status" : "unknown", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.74", - "code" : "10383-9", - "display" : "MVPX DNA Spec Ql NAA+probe" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "code" : "CDC-10515", - "display" : "Poxvirus Molecular Detection" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "v unknown", - "code" : "1233", - "display" : "Monkeypox generic" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "requester" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", - "valueContactPoint" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "NET" - }, { - "url" : "XTN.3", - "valueString" : "Internet" - }, { - "url" : "XTN.4", - "valueString" : "MWaKabon@placer.ca.gov" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.17" - } ], - "system" : "email", - "value" : "MWaKabon@placer.ca.gov" - } - } ], - "reference" : "Practitioner/1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7" - }, - "note" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "Accession level coment." - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "Accession level coment." - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.12.364" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70364" - } ], - "version" : "2.5.1", - "code" : "RE", - "display" : "Remark" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", - "valueId" : "Test level comment." - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", - "valueId" : "L" - } ], - "text" : "Test level comment." - } ] - } - }, { - "fullUrl" : "Practitioner/1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.16" - } ], - "identifier" : [ { - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "XX" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "value" : "SPHL-000098" - } ], - "name" : [ { - "family" : "CA-Placer County Public Health Laboratory" - } ] - } - }, { - "fullUrl" : "Practitioner/1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "identifier" : [ { - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "XX" - } ] - }, - "system" : "STARLIMS.CDC.Stag", - "value" : "SPHL-000098" - } ], - "name" : [ { - "family" : "CA-Placer County Public Health Laboratory" - } ] - } - }, { - "fullUrl" : "DiagnosticReport/1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "ORC.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PLAC" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FILL" - } ] - }, - "value" : "3015894743_04608717" - } ], - "basedOn" : [ { - "reference" : "ServiceRequest/1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157" - } ], - "status" : "final", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.74", - "code" : "68991-9", - "display" : "Epidemiologically Important Information" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "code" : "CDC-10515", - "display" : "Poxvirus Molecular Detection" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "effectiveDateTime" : "2023-07-24T15:24:00Z", - "_effectiveDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202307241524" - } ] - }, - "issued" : "2023-08-02T18:08:00-04:00", - "_issued" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202308021808-0400" - } ] - }, - "specimen" : [ { - "reference" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708" - }, { - "reference" : "Specimen/1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97" - } ], - "result" : [ { - "reference" : "Observation/1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7" - }, { - "reference" : "Observation/1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937" - } ] - } - }, { - "fullUrl" : "DiagnosticReport/1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "OBR.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "SPHL-000048" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.1.10765" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "PLAC" - } ] - }, - "value" : "Specimen123" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "STARLIMS.CDC.Stag" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", - "code" : "FILL" - } ] - }, - "value" : "47_3015894743_04608717_1233" - } ], - "basedOn" : [ { - "reference" : "ServiceRequest/1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b" - } ], - "status" : "final", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "2.74", - "code" : "10383-9", - "display" : "MVPX DNA Spec Ql NAA+probe" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "code" : "CDC-10515", - "display" : "Poxvirus Molecular Detection" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "v unknown", - "code" : "1233", - "display" : "Monkeypox generic" - } ] - }, - "subject" : { - "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" - }, - "encounter" : { - "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" - }, - "effectiveDateTime" : "2023-07-24T15:24:00Z", - "_effectiveDateTime" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202307241524" - } ] - }, - "issued" : "2023-08-02T17:26:00-04:00", - "_issued" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "202308021726-0400" - } ] - }, - "specimen" : [ { - "reference" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b" - }, { - "reference" : "Specimen/1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75" - } ], - "result" : [ { - "reference" : "Observation/1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e" - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 deleted file mode 100644 index 29752353cf3..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 +++ /dev/null @@ -1,23 +0,0 @@ -MSH|^~\&#|STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|CDC Atlanta^11D0668319^CLIA|CDPH CA CALREDIE^2.16.840.1.114222.4.3.3.10.1.1^ISO|CDPH_CID^2.16.840.1.114222.4.1.2.14104^ISO|20230802180802-0400||ORU^R01^ORU_R01|3015894743_04608717_11184|T|2.5.1|||NE|NE|USA||||PHLabReport-NoAck^PHIN^2.16.840.1.113883.9.11^ISO -SFT|CDC^^^^^CDC&2.16.840.1.114222.4&ISO^XX^^^CDC CLIA|ELIMS V11|STARLIMS|Binary ID unknown|test|20230802180802-0400 -PID|1||test^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^PI~PID123^^^SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^PI||Mega^HL7^MI^^^^L||0000|F|||^^^^^USA^H -PD1|C|A|Ordering Facility^X^123^Check Digit^C1^Assigning Authority&2.1.4.1&ISO^MD^Hospital A&2.16.840.1.113883.9.11&ISO^NameRepCode^OrgIdentifier~Ordering Facility^X^123^Check Digit^C1^Assigning Authority&2.1.4.1&ISO^MD^Hospital A&2.16.840.1.113883.9.11&ISO^NameRepCode^OrgIdentifier||F|T|F|F|N -NTE|1|L|Accession level coment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -NTE|2|L|SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -NK1|1|Organa^Leia|N^Next-of-Kin^HL70131 -NK1|2|Navarro^Liz|N^Next-of-Kin^HL70131 -PV1|1|||||^^^Hospital A&2.4.4.4&ISO^^^^^^Entity ID&NAME&UNI&ISO -ORC|RE|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|3015894743_04608717^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO||||||20230725|||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX||^NET^Internet^MWaKabon@placer.ca.gov|||||||CDPH, Viral and Rickettsial Disease Laboratory^D^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^XX^^^SPHL-000048|850 Marina Bay Parkway^Rm. E-361^Richmond^CA^94804^USA^M|^WPN^Internet^VRDL.Mail@cdph.ca.gov|11475 C Avenue^^Auburn^CA^95603^USA^M -OBR|1|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|3015894743_04608717^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|68991-9^Epidemiologically Important Information^LN^^^^2.74^^^CDC-10515^Poxvirus Molecular Detection^L^^2.16.840.1.113883.6.1|||202307241524|||||||||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX|^NET^Internet^MWaKabon@placer.ca.gov|||||202308021808-0400|||F -OBX|1|CWE|80383-3^Flu B^LN||260415000^Not detected^SCT|||N^Normal^HL70078^^^^2.7|||F||||11D1111111^CSV uploads^CLIA||||||||CSV uploads-11D1111111^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D1111111|123 Main St^^^CA^94553^USA -OBX|2|CWE|80382-5^Flu A^LN||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F||||11D1111111^CSV uploads^CLIA||^^^^^^^^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B*||||||CSV uploads-11D1111111^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D1111111|123 Main St^^^CA^94553^USA -SPM|1|Specimen123&SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^3015894743&STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO||119297000^Blood specimen^SCT^BLD^Blood^L^0912017^Adobe_Code^Blood -OBX|1|SN|21612-7^Reported Patient Age!!!^LN^^^^2.61||^28|a^Year^UCUM^^^^2.1|||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA||||20230727183017||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Road^^Atlanta^GA^30329^USA^B -OBR|2|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|47_3015894743_04608717_1233^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|10383-9^MVPX DNA Spec Ql NAA+probe^LN^1233^Monkeypox generic^L^2.74^v unknown^^CDC-10515^Poxvirus Molecular Detection^L^^2.16.840.1.113883.6.1|||202307241524|||||||||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX|^NET^Internet^MWaKabon@placer.ca.gov|||||202308021726-0400|||F -NTE|1|L|Accession level coment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -NTE|2|L|Test level comment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -OBX|1|CWE|100383-9^MVPX DNA Spec Ql NAA+probe^LN^3900^Monkeypox generic^L^2.74^v_unknown^Monkeypox generic|ZZYGNAUM-1|10828004^Positive^SCT^^^^09012018^^Positive||||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA^47^Poxvirus Laboratory/Poxvirus and Rabies Branch^L|NXQ0@cdc.gov^Anderson^Christopher|||20230727183017-0400||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Rd^^Atlanta^GA^30329^USA^B -NTE|1|L|Run level Comment|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -NTE|2|L|Result level Comment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 -SPM|1|Specimen123&SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^3015894743&STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO||119297000^Blood specimen^SCT^BLD^Blood^L^0912017^Adobe_Code^Blood -OBX|1|SN|21612-7^Reported Patient Age???^LN^^^^2.61||^28|a^Year^UCUM^^^^2.1|||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA||||20230727183017||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Road^^Atlanta^GA^30329^USA^B \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir deleted file mode 100644 index 055e346026e..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir +++ /dev/null @@ -1,234 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403066467353000.db3dd9c8-cefe-4ef4-a631-8d601c455f45", - "meta" : { - "lastUpdated" : "2024-04-17T19:17:46.477-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "20230816123358" - }, - "type" : "message", - "timestamp" : "2023-08-16T11:33:58.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/bb504ecd-c2ab-3be3-91d8-6065e2bce435", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "bb504ecd-c2ab-3be3-91d8-6065e2bce435", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230816123358-0500" - }, { - "url" : "MSH.10", - "valueString" : "20230816123358" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - } - } - }, { - "fullUrl" : "Provenance/1713403067097619000.41f6404f-e4eb-4803-87af-ce80c0661269", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403067097619000.41f6404f-e4eb-4803-87af-ce80c0661269", - "target" : [ { - "reference" : "MessageHeader/bb504ecd-c2ab-3be3-91d8-6065e2bce435" - }, { - "reference" : "DiagnosticReport/1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8" - } ], - "recorded" : "2023-08-16T12:33:58-05:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403067110774000.2084408c-8bcf-4abe-af89-f69f4ed604e7", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403067110774000.2084408c-8bcf-4abe-af89-f69f4ed604e7", - "recorded" : "2024-04-17T19:17:47Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" - } - }, { - "fullUrl" : "Provenance/1713403067134963000.8b4ba600-f324-4fa2-ab8c-f8aaff6e921b", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403067134963000.8b4ba600-f324-4fa2-ab8c-f8aaff6e921b", - "target" : [ { - "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" - } ], - "recorded" : "2024-04-17T19:17:47Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "Specimen/1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "ServiceRequest/1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.25", - "valueId" : "F" - }, { - "url" : "OBR.26", - "extension" : [ { - "url" : "prl-1-parent-observation-identifier", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:TEST1234" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "version" : "PrimaryVersion", - "code" : "PrimaryCode", - "display" : "Primary Code Display" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "secondary-alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "SecondaryAltVersion", - "code" : "SecondaryAltCode", - "display" : "SecondaryAltText" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", - "version" : "AltVersion", - "code" : "AltCode", - "display" : "AltText" - } ], - "text" : "OriginalText" - } - }, { - "url" : "prl-2-parent-observation-sub-identifier", - "valueString" : "Test1" - }, { - "url" : "prl-3-parent-observation-descriptor", - "valueString" : "Test2" - } ] - } ] - } ], - "status" : "unknown", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "TEST" - } ] - }, - "subject" : { - "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" - } - } - }, { - "fullUrl" : "DiagnosticReport/1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8", - "basedOn" : [ { - "reference" : "ServiceRequest/1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1" - } ], - "status" : "final", - "code" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "TEST" - } ] - }, - "subject" : { - "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" - }, - "specimen" : [ { - "reference" : "Specimen/1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9" - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 deleted file mode 100644 index 392f83dfeef..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 +++ /dev/null @@ -1,3 +0,0 @@ -MSH|^~\&#|||||20230816123358-0500||ORU^R01^ORU_R01|20230816123358||2.5.1 -PID|1 -OBR|1|||TEST|||||||||||||||||||||F|PrimaryCode&Primary Code Display&LN&AltCode&AltText&L&PrimaryVersion&AltVersion&OriginalText&SecondaryAltCode&SecondaryAltText&L&SecondaryAltVersion&TEST1234^Test1^Test2 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir deleted file mode 100644 index a47b99e3615..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir +++ /dev/null @@ -1,254 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713403085477795000.87b249cb-cffd-42d4-a0c6-1bc849ef19e1", - "meta" : { - "lastUpdated" : "2024-04-17T19:18:05.487-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "3003786103_4988249_33033" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "3003786103_4988249_33033" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - } - } - }, { - "fullUrl" : "Provenance/1713403086125556000.56cddc76-997e-4010-bc99-8b72195af802", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403086125556000.56cddc76-997e-4010-bc99-8b72195af802", - "target" : [ { - "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713403086138867000.16053c96-7e09-45c1-be9e-5d973827c9e3", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403086138867000.16053c96-7e09-45c1-be9e-5d973827c9e3", - "recorded" : "2024-04-17T19:18:06Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5" - } - } ] - } - }, { - "fullUrl" : "Organization/1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5", - "resource" : { - "resourceType" : "Organization", - "id" : "1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407", - "resource" : { - "resourceType" : "Patient", - "id" : "1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407", - "contact" : [ { - "name" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "LUDWIG" - }, { - "url" : "XPN.3", - "valueString" : "B" - }, { - "url" : "XPN.4", - "valueString" : "2ND" - }, { - "url" : "XPN.6", - "valueString" : "MD" - }, { - "url" : "XPN.7", - "valueString" : "B" - }, { - "url" : "XPN.8", - "valueString" : "A" - }, { - "url" : "XPN.12", - "valueString" : "20220501102531-0400" - }, { - "url" : "XPN.13", - "valueString" : "20230501102531-0400" - }, { - "url" : "XPN.14", - "valueString" : "MD" - } ] - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order", - "valueCode" : "F" - } ], - "use" : "official", - "family" : "BEETHOVEN", - "_family" : { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix", - "valueString" : "VAN" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-name", - "valueString" : "BEETHOVEN" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix", - "valueString" : "VAL" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-name", - "valueString" : "ROGER" - } ] - }, - "given" : [ "LUDWIG", "B" ], - "prefix" : [ "DR" ], - "suffix" : [ "2ND", "MD", "MD" ], - "period" : { - "start" : "2022-05-01T10:25:31-04:00", - "end" : "2023-05-01T10:25:31-04:00" - } - } - } ] - } - }, { - "fullUrl" : "Provenance/1713403086175184000.c6e7782b-d236-4380-9c66-45736f2b2b04", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713403086175184000.c6e7782b-d236-4380-9c66-45736f2b2b04", - "target" : [ { - "reference" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407" - } ], - "recorded" : "2024-04-17T19:18:06Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "RelatedPerson/1713403086181253000.8d5b84f7-90b0-4865-976d-6ecf7f60e4b7", - "resource" : { - "resourceType" : "RelatedPerson", - "id" : "1713403086181253000.8d5b84f7-90b0-4865-976d-6ecf7f60e4b7", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "NK1" - } ], - "patient" : { - "reference" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407" - }, - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.2" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "LUDWIG" - }, { - "url" : "XPN.3", - "valueString" : "B" - }, { - "url" : "XPN.4", - "valueString" : "2ND" - }, { - "url" : "XPN.6", - "valueString" : "MD" - }, { - "url" : "XPN.7", - "valueString" : "B" - }, { - "url" : "XPN.8", - "valueString" : "A" - }, { - "url" : "XPN.12", - "valueString" : "20220501102531-0400" - }, { - "url" : "XPN.13", - "valueString" : "20230501102531-0400" - }, { - "url" : "XPN.14", - "valueString" : "MD" - } ] - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order", - "valueCode" : "F" - } ], - "use" : "official", - "family" : "BEETHOVEN", - "_family" : { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix", - "valueString" : "VAN" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-name", - "valueString" : "BEETHOVEN" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix", - "valueString" : "VAL" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-name", - "valueString" : "ROGER" - } ] - }, - "given" : [ "LUDWIG", "B" ], - "prefix" : [ "DR" ], - "suffix" : [ "2ND", "MD", "MD" ], - "period" : { - "start" : "2022-05-01T10:25:31-04:00", - "end" : "2023-05-01T10:25:31-04:00" - } - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 deleted file mode 100644 index 11e1ff57dac..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 +++ /dev/null @@ -1,3 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1 -PID|1 -NK1|1|BEETHOVEN&VAN&BEETHOVEN&VAL&ROGER^LUDWIG^B^2ND^DR^MD^B^A^^^F^20220501102531-0400^20230501102531-0400^MD \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv deleted file mode 100644 index 7ccebe332e0..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv +++ /dev/null @@ -1,14 +0,0 @@ -HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments -Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping -(IS, ID, CE, CNE, CWE)",Assignment,, -1,CNN.1,ID Number,ST,0,1,,,,identifier.value,,string,0,1,,,,, -2,CNN.2,Family Name,ST,0,1,,,,name.family,,string,0,1,,,,, -3,CNN.3,Given Name,ST,0,1,,,,name.given[1],,string,0,-1,,,,, -4,CNN.4,Second and Further Given Names or Initials Thereof,ST,0,1,,,,name.given[2],,string,0,-1,,,,, -5,CNN.5,"Suffix (e.g., JR or III)",ST,0,1,,,,name.suffix[1],,string,0,-1,,,,, -6,CNN.6,"Prefix (e.g., DR)",ST,0,1,,,,name.prefix,,string,0,-1,,,,, -7,CNN.7,"Degree (e.g., MD)",IS,0,1,,,,name.suffix[2],,string,0,-1,,,,, -8,CNN.8,Source Table,IS,0,1,,,,,,,,,,,,, -9,CNN.9,Assigning Authority- Namespace ID,IS,0,1,,,,,identifier.extension??-assigningauthority.nameSpaceID,string,0,1,,,,, -10,CNN.10,Assigning Authority- Universal ID,ST,0,1,,,,,identifier.extension??-assigningauthority.universalID,string,0,1,,,,, -11,CNN.11,Assigning Authority- Universal ID Type,ID,0,1,,,,,identifier.extension??-assigningauthority.univeralIDType,code,0,1,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir deleted file mode 100644 index 65c15654828..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir +++ /dev/null @@ -1,235 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713393880004309000.b59a8aad-38c3-4243-be7c-45114f95fed9", - "meta" : { - "lastUpdated" : "2024-04-17T16:44:40.014-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc" - } - } - }, { - "fullUrl" : "Organization/1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc", - "resource" : { - "resourceType" : "Organization", - "id" : "1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713393880626524000.24529ecb-5e2d-42e2-a8b3-665dff92963b", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713393880626524000.24529ecb-5e2d-42e2-a8b3-665dff92963b", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - }, { - "reference" : "DiagnosticReport/1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713393880639311000.226a0bac-5c56-4652-8e9d-254fa905911c", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713393880639311000.226a0bac-5c56-4652-8e9d-254fa905911c", - "recorded" : "2024-04-17T16:44:40Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709" - } - } ] - } - }, { - "fullUrl" : "Organization/1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709", - "resource" : { - "resourceType" : "Organization", - "id" : "1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b", - "resource" : { - "resourceType" : "Patient", - "id" : "1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" - } - }, { - "fullUrl" : "Provenance/1713393880659653000.e1c2c5d7-d3c6-4706-bc5c-cb29449306db", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713393880659653000.e1c2c5d7-d3c6-4706-bc5c-cb29449306db", - "target" : [ { - "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" - } ], - "recorded" : "2024-04-17T16:44:40Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "Specimen/1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "ServiceRequest/1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.25", - "valueId" : "F" - } ] - } ], - "status" : "unknown", - "subject" : { - "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" - } - } - }, { - "fullUrl" : "DiagnosticReport/1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f", - "basedOn" : [ { - "reference" : "ServiceRequest/1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838" - } ], - "status" : "final", - "subject" : { - "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" - }, - "resultsInterpreter" : [ { - "reference" : "PractitionerRole/1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5" - } ], - "specimen" : [ { - "reference" : "Specimen/1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb" - } ] - } - }, { - "fullUrl" : "Practitioner/1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner", - "extension" : [ { - "url" : "CNN.3", - "valueString" : "JAMISON" - }, { - "url" : "CNN.4", - "valueString" : "S" - }, { - "url" : "CNN.5", - "valueString" : "ESQ" - }, { - "url" : "CNN.7", - "valueString" : "MD" - }, { - "url" : "CNN.8", - "valueString" : "X" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "Assigning Authority" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.1.4.1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "value" : "123" - } ], - "name" : [ { - "family" : "DOE", - "given" : [ "JAMISON", "S" ], - "prefix" : [ "DR" ], - "suffix" : [ "ESQ", "MD" ] - } ] - } - }, { - "fullUrl" : "PractitionerRole/1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5", - "resource" : { - "resourceType" : "PractitionerRole", - "id" : "1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5", - "practitioner" : { - "reference" : "Practitioner/1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570" - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 deleted file mode 100644 index 189e58ec19d..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 +++ /dev/null @@ -1,3 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1 -OBR|1||||||||||||||||||||||||F|||||||123&DOE&JAMISON&S&ESQ&DR&MD&X&Assigning Authority&2.1.4.1&ISO diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir deleted file mode 100644 index 58176145db5..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394837210696000.6d4364a4-0e4f-48fb-9f58-6eea07911f37", - "meta" : { - "lastUpdated" : "2024-04-17T17:00:37.220-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6" - } - } - }, { - "fullUrl" : "Organization/1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394837829159000.d43ae37a-2985-4dd4-8a11-1ae513d53dde", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394837829159000.d43ae37a-2985-4dd4-8a11-1ae513d53dde", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394837842282000.add5d0d0-e321-4626-a06f-9bc5040c2b86", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394837842282000.add5d0d0-e321-4626-a06f-9bc5040c2b86", - "recorded" : "2024-04-17T17:00:37Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "version" : "AltVersion" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394837870856000.b345411b-f8a4-4974-862a-b2068d7b09b2", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394837870856000.b345411b-f8a4-4974-862a-b2068d7b09b2", - "target" : [ { - "reference" : "Patient/1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80" - } ], - "recorded" : "2024-04-17T17:00:37Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 deleted file mode 100644 index 882e62bbe8b..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^^^^^AltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir deleted file mode 100644 index 83f17c7f07b..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir +++ /dev/null @@ -1,144 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394852853645000.7333fe01-15d1-4dcb-89a1-24111f862e76", - "meta" : { - "lastUpdated" : "2024-04-17T17:00:52.865-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0" - } - } - }, { - "fullUrl" : "Organization/1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394853486820000.7349c98d-11a8-4752-9627-e763ad1cd896", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394853486820000.7349c98d-11a8-4752-9627-e763ad1cd896", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394853500088000.28e9b60d-9721-4b1a-9f2d-fa10719db7ff", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394853500088000.28e9b60d-9721-4b1a-9f2d-fa10719db7ff", - "recorded" : "2024-04-17T17:00:53Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "text" : "OriginalText" - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394853527127000.d034a7e7-f80f-4ded-ac8c-32753d81d7e8", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394853527127000.d034a7e7-f80f-4ded-ac8c-32753d81d7e8", - "target" : [ { - "reference" : "Patient/1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15" - } ], - "recorded" : "2024-04-17T17:00:53Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 deleted file mode 100644 index 104007c7aaf..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^^^^^^OriginalText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir deleted file mode 100644 index fd93060f804..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394868669158000.9e444cc7-01cc-4bb3-ae8e-e6c7d3cb4d68", - "meta" : { - "lastUpdated" : "2024-04-17T17:01:08.679-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141" - } - } - }, { - "fullUrl" : "Organization/1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394869306994000.79f1c6fb-9444-4167-b47b-9f1f2e0b3eb1", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394869306994000.79f1c6fb-9444-4167-b47b-9f1f2e0b3eb1", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394869319060000.573ef371-46e1-4c57-b3e8-f2c8288e8113", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394869319060000.573ef371-46e1-4c57-b3e8-f2c8288e8113", - "recorded" : "2024-04-17T17:01:09Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "code" : "PrimaryCode" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394869341705000.f66a1601-3434-4439-9080-84876088c32e", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394869341705000.f66a1601-3434-4439-9080-84876088c32e", - "target" : [ { - "reference" : "Patient/1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c" - } ], - "recorded" : "2024-04-17T17:01:09Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 deleted file mode 100644 index b0cb36f233d..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||PrimaryCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir deleted file mode 100644 index 41658edf0ab..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394884120918000.1ff35302-4750-4b4a-aee0-606ec95a67fb", - "meta" : { - "lastUpdated" : "2024-04-17T17:01:24.131-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084" - } - } - }, { - "fullUrl" : "Organization/1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394884765295000.f231d2bc-bb57-453c-8145-8dbd40379604", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394884765295000.f231d2bc-bb57-453c-8145-8dbd40379604", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394884777774000.937d0b02-67d3-4a01-8f89-9556750604ff", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394884777774000.937d0b02-67d3-4a01-8f89-9556750604ff", - "recorded" : "2024-04-17T17:01:24Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "display" : "PrimaryText" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394884802691000.ed786815-9637-4ba9-b745-3b0b4ae30693", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394884802691000.ed786815-9637-4ba9-b745-3b0b4ae30693", - "target" : [ { - "reference" : "Patient/1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d" - } ], - "recorded" : "2024-04-17T17:01:24Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 deleted file mode 100644 index 3dcda3b024f..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^PrimaryText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir deleted file mode 100644 index 77567bae565..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir +++ /dev/null @@ -1,153 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394899547799000.54d22dce-08ee-4875-9180-2159fa376182", - "meta" : { - "lastUpdated" : "2024-04-17T17:01:39.557-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e" - } - } - }, { - "fullUrl" : "Organization/1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394900161177000.5f841782-40a8-4f17-836f-fb016fc2bde0", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394900161177000.5f841782-40a8-4f17-836f-fb016fc2bde0", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394900173237000.d031b64d-b9b7-45d4-bf85-7f3dde2d9684", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394900173237000.d031b64d-b9b7-45d4-bf85-7f3dde2d9684", - "recorded" : "2024-04-17T17:01:40Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394900199735000.e4318de8-27e0-46d8-a7c5-a90ebd0424d4", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394900199735000.e4318de8-27e0-46d8-a7c5-a90ebd0424d4", - "target" : [ { - "reference" : "Patient/1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af" - } ], - "recorded" : "2024-04-17T17:01:40Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 deleted file mode 100644 index 3dad063335d..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^LN \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir deleted file mode 100644 index cfdca3bcfdb..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394915037867000.8084b1dc-6077-4af0-8bd2-948e0d08a02b", - "meta" : { - "lastUpdated" : "2024-04-17T17:01:55.048-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b" - } - } - }, { - "fullUrl" : "Organization/1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394915661923000.3616ee85-0de2-40c4-af14-d1f6dc8fe7e1", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394915661923000.3616ee85-0de2-40c4-af14-d1f6dc8fe7e1", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394915683687000.a25e91d3-db10-4eca-8c7d-4e1fe981eaa2", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394915683687000.a25e91d3-db10-4eca-8c7d-4e1fe981eaa2", - "recorded" : "2024-04-17T17:01:55Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "code" : "AltCode" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394915707211000.4b4dcd35-defb-47e5-b3f4-67c876edca82", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394915707211000.4b4dcd35-defb-47e5-b3f4-67c876edca82", - "target" : [ { - "reference" : "Patient/1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663" - } ], - "recorded" : "2024-04-17T17:01:55Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 deleted file mode 100644 index 4247159a94f..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^AltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir deleted file mode 100644 index 9adc605b291..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394930411716000.94132fcc-bd2e-4622-8a72-df8271619a87", - "meta" : { - "lastUpdated" : "2024-04-17T17:02:10.420-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921" - } - } - }, { - "fullUrl" : "Organization/1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394931027309000.50553de8-66c6-4a15-906e-3c198d4b2a2d", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394931027309000.50553de8-66c6-4a15-906e-3c198d4b2a2d", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394931038908000.f2eaf4d9-e667-4115-829c-676022564e13", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394931038908000.f2eaf4d9-e667-4115-829c-676022564e13", - "recorded" : "2024-04-17T17:02:11Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - } ], - "display" : "AltText" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394931063733000.91eb61ce-0c7c-47e3-8cfe-b6fbf60cdcb0", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394931063733000.91eb61ce-0c7c-47e3-8cfe-b6fbf60cdcb0", - "target" : [ { - "reference" : "Patient/1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44" - } ], - "recorded" : "2024-04-17T17:02:11Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 deleted file mode 100644 index e1418f6ed88..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^^AltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir deleted file mode 100644 index 6219a40cf09..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir +++ /dev/null @@ -1,153 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394945750138000.5da39533-b8d9-420d-b708-73d00a85afa6", - "meta" : { - "lastUpdated" : "2024-04-17T17:02:25.759-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590" - } - } - }, { - "fullUrl" : "Organization/1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394946385604000.f1117566-d888-46af-b2b5-70daa79c8598", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394946385604000.f1117566-d888-46af-b2b5-70daa79c8598", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394946399545000.35c43cfb-4053-4e36-af9e-c39e0b5b023f", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394946399545000.35c43cfb-4053-4e36-af9e-c39e0b5b023f", - "recorded" : "2024-04-17T17:02:26Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "alt-coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "L" - } ], - "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394946424490000.d184d05a-b1db-4b66-9d4d-08252963ddee", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394946424490000.d184d05a-b1db-4b66-9d4d-08252963ddee", - "target" : [ { - "reference" : "Patient/1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d" - } ], - "recorded" : "2024-04-17T17:02:26Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 deleted file mode 100644 index 69e013fa07c..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir deleted file mode 100644 index 1136a6f5b14..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir +++ /dev/null @@ -1,150 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713394961246624000.1d2e3dda-ad87-4c23-987b-fb39764c0583", - "meta" : { - "lastUpdated" : "2024-04-17T17:02:41.256-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819" - } - } - }, { - "fullUrl" : "Organization/1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713394961867970000.89364074-9e12-4d8f-a348-b004d2ec6044", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394961867970000.89364074-9e12-4d8f-a348-b004d2ec6044", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713394961880380000.9c763cd1-9084-4532-ae8f-a628cab68fbd", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394961880380000.9c763cd1-9084-4532-ae8f-a628cab68fbd", - "recorded" : "2024-04-17T17:02:41Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c" - } - } ] - } - }, { - "fullUrl" : "Organization/1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c", - "resource" : { - "resourceType" : "Organization", - "id" : "1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713", - "resource" : { - "resourceType" : "Patient", - "id" : "1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", - "valueCodeableConcept" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.39" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - } ], - "version" : "PrimaryVersion" - } ] - } - } ] - } ] - } - }, { - "fullUrl" : "Provenance/1713394961907071000.dcb049d2-20d1-408c-a835-eb712c8ef064", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713394961907071000.dcb049d2-20d1-408c-a835-eb712c8ef064", - "target" : [ { - "reference" : "Patient/1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713" - } ], - "recorded" : "2024-04-17T17:02:41Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 deleted file mode 100644 index e00b9b67fa4..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1||||||||||||||||||||||||||||||||||||||^^^^^^PrimaryVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv deleted file mode 100644 index 9e60f616dd9..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv +++ /dev/null @@ -1,42 +0,0 @@ -HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments -Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping -(IS, ID, CE, CNE, CWE)",Assignment,, -1,NDL.1,Name,CNN,0,1,,,,practitioner(Practitioner),,Reference(Practitioner),0,1,CNN[Practitioner],,,, -2,NDL.2,Start Date/time,DTM,0,1,,,,period.start,,dateTime,0,1,,,,, -3,NDL.3,End Date/time,DTM,0,1,,,,period.end,,dateTime,0,1,,,,, -4,NDL.4,Point of Care,IS,0,1,,,,[1].identifier,,Identifier,,,HD[Identifier],,,, -4,NDL.4,Point of Care,IS,0,1,,,,[1].mode,,code,0,1,,,"""instance""",, -4,NDL.4,Point of Care,IS,0,1,,,,[1].physicalType.coding.code,,code,0,1,,,/extension??-poc/,, -4,NDL.4,Point of Care,IS,0,1,,,,[1].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -4,NDL.4,Point of Care,IS,0,1,,,,[1].partOf.reference(Location[5]),,string,0,1,,,,, -5,NDL.5,Room,IS,0,1,,,,[2].identifier,,Identifier,,,HD[Identifier],,,, -5,NDL.5,Room,IS,0,1,,,,[2].mode,,code,0,1,,,"""instance""",, -5,NDL.5,Room,IS,0,1,,,,[2].physicalType.coding.code,,code,0,1,,,"""ro""",, -5,NDL.5,Room,IS,0,1,,,,[2].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -5,NDL.5,Room,IS,0,1,,,,[2].partOf.reference(Location[1]),,string,0,1,,,,, -6,NDL.6,Bed,IS,0,1,,,,[3].identifier,,Identifier,,,HD[Identifier],,,, -6,NDL.6,Bed,IS,0,1,,,,[3].mode,,code,0,1,,,"""instance""",, -6,NDL.6,Bed,IS,0,1,,,,[3].physicalType.coding.code,,code,0,1,,,"""bd""",, -6,NDL.6,Bed,IS,0,1,,,,[3].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -6,NDL.6,Bed,IS,0,1,,,,[3].partOf.reference(Location[2]),,string,0,1,,,,, -7,NDL.7,Facility,HD,0,1,,,,[4].identifier,,Identifier,,,HD[Identifier],,,, -7,NDL.7,Facility,HD,0,1,,,,[4].mode,,code,0,1,,,"""instance""",, -7,NDL.7,Facility,HD,0,1,,,,[4].physicalType.coding.code,,code,0,1,,,"""si""",, -7,NDL.7,Facility,HD,0,1,,,,[4].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -8,NDL.8,Location Status,IS,0,1,IF PL.1 AND PL.2 AND PL.3 AND PL.4 AND PL.7 AND PL.8 NOT VALUED,,,[1].status,,,0,1,IS[code],,,, -8,NDL.8,Location Status,IS,0,1,IF PL.2 VALUED,,,[2].status,,,0,1,IS[code],,,, -8,NDL.8,Location Status,IS,0,1,IF PL.3 VALUED,,,[3].status,,,0,1,IS[code],,,, -8,NDL.8,Location Status,IS,0,1,IF PL.4 VALUED,,,[4].status,,,0,1,IS[code],,,, -8,NDL.8,Location Status,IS,0,1,IF PL.7 VALUED,,,[5].status,,,0,1,IS[code],,,, -8,NDL.8,Location Status,IS,0,1,IF PL.8 VALUED,,,[6].status,,,0,1,IS[code],,,, -9,NDL.9,Patient Location Type,IS,0,1,,,,,,,,,,,,, -10,NDL.10,Building,IS,0,1,,,,[5].identifier,,Identifier,,,HD[Identifier],,,, -10,NDL.10,Building,IS,0,1,,,,[5].mode,,code,0,1,,,"""instance""",, -10,NDL.10,Building,IS,0,1,,,,[5].physicalType.coding.code,,code,0,1,,,"""bu""",, -10,NDL.10,Building,IS,0,1,,,,[5].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -10,NDL.10,Building,IS,0,1,,,,[5].partOf.reference(Location[4]),,string,0,1,,,,, -11,NDL.11,Floor,IS,0,1,,,,[6].identifier,,Identifier,,,HD[Identifier],,,, -11,NDL.11,Floor,IS,0,1,,,,[6].mode,,code,0,1,,,"""instance""",, -11,NDL.11,Floor,IS,0,1,,,,[6].physicalType.coding.code,,code,0,1,,,"""lvl""",, -11,NDL.11,Floor,IS,0,1,,,,[6].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, -11,NDL.11,Floor,IS,0,1,,,,[6].partOf.reference(Location[1]),,string,0,1,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir deleted file mode 100644 index d5dee105609..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir +++ /dev/null @@ -1,432 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713402340643750000.a7c76342-ec73-43b5-b981-f93d64e96426", - "meta" : { - "lastUpdated" : "2024-04-17T19:05:40.654-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "12345" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "12345" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c" - } - } - }, { - "fullUrl" : "Organization/1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c", - "resource" : { - "resourceType" : "Organization", - "id" : "1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713402341294938000.1149a934-3f3c-48e2-a458-c8e97f730b3c", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713402341294938000.1149a934-3f3c-48e2-a458-c8e97f730b3c", - "target" : [ { - "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" - }, { - "reference" : "DiagnosticReport/1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713402341308904000.f9c49033-7faf-452b-be17-d171b6365d57", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713402341308904000.f9c49033-7faf-452b-be17-d171b6365d57", - "recorded" : "2024-04-17T19:05:41Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba" - } - } ] - } - }, { - "fullUrl" : "Organization/1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba", - "resource" : { - "resourceType" : "Organization", - "id" : "1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333", - "resource" : { - "resourceType" : "Patient", - "id" : "1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" - } - }, { - "fullUrl" : "Provenance/1713402341337960000.4e4d9606-632b-40dc-a56a-88e396273619", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713402341337960000.4e4d9606-632b-40dc-a56a-88e396273619", - "target" : [ { - "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" - } ], - "recorded" : "2024-04-17T19:05:41Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "Specimen/1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9", - "resource" : { - "resourceType" : "Specimen", - "id" : "1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "OBR" - } ] - } - }, { - "fullUrl" : "ServiceRequest/1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4", - "resource" : { - "resourceType" : "ServiceRequest", - "id" : "1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", - "extension" : [ { - "url" : "OBR.25", - "valueId" : "F" - } ] - } ], - "status" : "unknown", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "code" : "68991-9", - "display" : "Epidemiologically Important Information" - } ] - }, - "subject" : { - "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" - } - } - }, { - "fullUrl" : "DiagnosticReport/1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65", - "resource" : { - "resourceType" : "DiagnosticReport", - "id" : "1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65", - "basedOn" : [ { - "reference" : "ServiceRequest/1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4" - } ], - "status" : "final", - "code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", - "valueOid" : "urn:oid:2.16.840.1.113883.6.1" - } ], - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "LN" - } ], - "system" : "http://loinc.org", - "code" : "68991-9", - "display" : "Epidemiologically Important Information" - } ] - }, - "subject" : { - "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" - }, - "performer" : [ { - "reference" : "PractitionerRole/1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87" - } ], - "specimen" : [ { - "reference" : "Specimen/1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9" - } ] - } - }, { - "fullUrl" : "Practitioner/1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d", - "resource" : { - "resourceType" : "Practitioner", - "id" : "1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner", - "extension" : [ { - "url" : "CNN.3", - "valueString" : "JAMISON" - }, { - "url" : "CNN.4", - "valueString" : "S" - }, { - "url" : "CNN.5", - "valueString" : "ESQ" - }, { - "url" : "CNN.7", - "valueString" : "MD" - } ] - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", - "valueString" : "Assigning Authority" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", - "valueString" : "2.1.4.1" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", - "valueCode" : "ISO" - } ] - } ], - "value" : "123" - } ], - "name" : [ { - "family" : "DOE", - "given" : [ "JAMISON", "S" ], - "prefix" : [ "DR" ], - "suffix" : [ "ESQ", "MD" ] - } ] - } - }, { - "fullUrl" : "Location/1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "Hospital A" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.2,HD.3" - } ], - "type" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", - "valueBoolean" : true - } ], - "code" : "ISO" - } ] - }, - "value" : "2.16.840.1.113883.9.11" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "si" - } ] - } - } - }, { - "fullUrl" : "Location/1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3", - "identifier" : [ { - "value" : "Building 123" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "bu" - } ] - } - } - }, { - "fullUrl" : "Location/1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c", - "identifier" : [ { - "value" : "Point of Care" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "_code" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/location-physical-type-poc", - "valueString" : "poc" - } ] - } - } ] - } - } - }, { - "fullUrl" : "Location/1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886", - "identifier" : [ { - "value" : "Floor A" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "lvl" - } ] - } - } - }, { - "fullUrl" : "Location/1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67", - "identifier" : [ { - "value" : "Room 101" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "ro" - } ] - } - } - }, { - "fullUrl" : "Location/1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a", - "resource" : { - "resourceType" : "Location", - "id" : "1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a", - "identifier" : [ { - "value" : "Bed A" - } ], - "status" : "active", - "mode" : "instance", - "physicalType" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", - "code" : "bd" - } ] - } - } - }, { - "fullUrl" : "PractitionerRole/1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87", - "resource" : { - "resourceType" : "PractitionerRole", - "id" : "1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87", - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/event-performerFunction", - "valueCodeableConcept" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType", - "code" : "TRANS" - } ] - } - } ], - "period" : { - "start" : "2023-04-01T10:25:31-04:00", - "_start" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230401102531-0400" - } ] - }, - "end" : "2023-05-01T10:25:31-04:00", - "_end" : { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", - "valueString" : "20230501102531-0400" - } ] - } - }, - "practitioner" : { - "reference" : "Practitioner/1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d" - }, - "location" : [ { - "reference" : "Location/1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189" - }, { - "reference" : "Location/1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3" - }, { - "reference" : "Location/1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c" - }, { - "reference" : "Location/1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886" - }, { - "reference" : "Location/1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67" - }, { - "reference" : "Location/1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a" - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 deleted file mode 100644 index 3f8afd2bd7a..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 +++ /dev/null @@ -1,3 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 -PID|1 -OBR|1|||68991-9^Epidemiologically Important Information^LN^^^^^^^^^^^2.16.840.1.113883.6.1|||||||||||||||||||||F||||||||||123&DOE&JAMISON&S&ESQ&DR&MD&&Assigning Authority&2.1.4.1&ISO^20230401102531-0400^20230501102531-0400^Point of Care^Room 101^Bed A^Hospital A&2.16.840.1.113883.9.11&ISO^active^^Building 123^Floor A diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir deleted file mode 100644 index 612f5095cb8..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir +++ /dev/null @@ -1,292 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713397228651177000.19b20187-d57d-4002-be82-5d622aef3af9", - "meta" : { - "lastUpdated" : "2024-04-17T17:40:28.661-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "3003786103_4988249_33033" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", - "valueString" : "UNICODE UTF-8" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "3003786103_4988249_33033" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - }, - "sender" : { - "reference" : "Organization/1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e" - } - } - }, { - "fullUrl" : "Organization/1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e", - "resource" : { - "resourceType" : "Organization", - "id" : "1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e", - "address" : [ { - "country" : "USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713397229260212000.cbff06b7-15a3-4a9c-a306-6d79dd60c1c3", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397229260212000.cbff06b7-15a3-4a9c-a306-6d79dd60c1c3", - "target" : [ { - "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713397229272223000.6cd7f2fd-88cc-40da-875b-b0495acd341d", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397229272223000.6cd7f2fd-88cc-40da-875b-b0495acd341d", - "recorded" : "2024-04-17T17:40:29Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e" - } - } ] - } - }, { - "fullUrl" : "Organization/1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e", - "resource" : { - "resourceType" : "Organization", - "id" : "1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb", - "resource" : { - "resourceType" : "Patient", - "id" : "1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", - "extension" : [ { - "url" : "CX.5", - "valueString" : "MR" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.3" - } ], - "type" : { - "coding" : [ { - "code" : "MR" - } ] - }, - "value" : "11102779" - } ], - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "BB SARAH" - }, { - "url" : "XPN.7", - "valueString" : "L" - } ] - } ], - "use" : "official", - "family" : "SMITH", - "given" : [ "BB SARAH" ] - } ], - "contact" : [ { - "name" : { }, - "organization" : { - "reference" : "Organization/1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf" - } - } ] - } - }, { - "fullUrl" : "Organization/1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf", - "resource" : { - "resourceType" : "Organization", - "id" : "1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf", - "contact" : [ { - "address" : { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract", - "valueCode" : "6059" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "4861" - }, { - "url" : "SAD.2", - "valueString" : "20TH AVE" - }, { - "url" : "SAD.3", - "valueString" : "1" - } ] - }, { - "url" : "XAD.2", - "valueString" : "Other Designation" - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "H" - }, { - "url" : "XAD.8", - "valueString" : "Other Geographic Designation" - }, { - "url" : "XAD.11", - "valueCode" : "A" - }, { - "url" : "XAD.13", - "valueString" : "20220501102531-0400" - } ] - } ], - "use" : "home", - "line" : [ "4861", "20TH AVE", "1", "Other Designation" ], - "city" : "THUNDER MOUNTAIN", - "district" : "County", - "state" : "IG", - "postalCode" : "99999", - "country" : "USA", - "period" : { - "start" : "2022-05-01T10:25:31-04:00" - } - } - } ] - } - }, { - "fullUrl" : "Provenance/1713397229312286000.d9d0364e-a4c7-4895-b64c-f84c032bce3f", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397229312286000.d9d0364e-a4c7-4895-b64c-f84c032bce3f", - "target" : [ { - "reference" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb" - } ], - "recorded" : "2024-04-17T17:40:29Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - }, { - "fullUrl" : "RelatedPerson/1713397229317429000.90600892-04fc-4700-98a2-9b84dc8d3670", - "resource" : { - "resourceType" : "RelatedPerson", - "id" : "1713397229317429000.90600892-04fc-4700-98a2-9b84dc8d3670", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", - "valueString" : "NK1" - } ], - "patient" : { - "reference" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb" - }, - "address" : [ { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract", - "valueCode" : "6059" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "NK1.32" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "4861" - }, { - "url" : "SAD.2", - "valueString" : "20TH AVE" - }, { - "url" : "SAD.3", - "valueString" : "1" - } ] - }, { - "url" : "XAD.2", - "valueString" : "Other Designation" - }, { - "url" : "XAD.6", - "valueString" : "USA" - }, { - "url" : "XAD.7", - "valueCode" : "H" - }, { - "url" : "XAD.8", - "valueString" : "Other Geographic Designation" - }, { - "url" : "XAD.11", - "valueCode" : "A" - }, { - "url" : "XAD.13", - "valueString" : "20220501102531-0400" - } ] - } ], - "use" : "home", - "line" : [ "4861", "20TH AVE", "1", "Other Designation" ], - "city" : "THUNDER MOUNTAIN", - "district" : "County", - "state" : "IG", - "postalCode" : "99999", - "country" : "USA", - "period" : { - "start" : "2022-05-01T10:25:31-04:00" - } - } ] - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 deleted file mode 100644 index 1bec780fb79..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 +++ /dev/null @@ -1,3 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1|||||USA|UNICODE UTF-8 -PID|1||11102779^^^^MR||SMITH^BB SARAH^^^^^L -NK1|1|||||||||||||||||||||||||||||||4861&20TH AVE&1^Other Designation^THUNDER MOUNTAIN^IG^99999^USA^H^Other Geographic Designation^County^6059^A^^20220501102531-0400 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir deleted file mode 100644 index e8ac64cff2f..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir +++ /dev/null @@ -1,279 +0,0 @@ -{ - "resourceType" : "Bundle", - "id" : "1713397874689602000.e869eee2-21c7-4524-b115-3f7656fe34a3", - "meta" : { - "lastUpdated" : "2024-04-17T17:51:14.701-06:00" - }, - "identifier" : { - "system" : "https://reportstream.cdc.gov/prime-router", - "value" : "3003786103_4988249_33033" - }, - "type" : "message", - "timestamp" : "2023-05-01T08:25:31.000-06:00", - "entry" : [ { - "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "resource" : { - "resourceType" : "MessageHeader", - "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", - "valueString" : "^~\\&#" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", - "extension" : [ { - "url" : "MSH.7", - "valueString" : "20230501102531-0400" - }, { - "url" : "MSH.10", - "valueString" : "3003786103_4988249_33033" - } ] - } ], - "eventCoding" : { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", - "code" : "R01", - "display" : "ORU^R01^ORU_R01" - } - } - }, { - "fullUrl" : "Provenance/1713397875332640000.2d8a482b-3fee-4c98-ac41-5f0ee98f684c", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397875332640000.2d8a482b-3fee-4c98-ac41-5f0ee98f684c", - "target" : [ { - "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" - } ], - "recorded" : "2023-05-01T10:25:31-04:00", - "activity" : { - "coding" : [ { - "display" : "ORU^R01^ORU_R01" - } ] - } - } - }, { - "fullUrl" : "Provenance/1713397875346924000.2c8b59d8-6f33-498b-a442-52096a9bbd11", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397875346924000.2c8b59d8-6f33-498b-a442-52096a9bbd11", - "recorded" : "2024-04-17T17:51:15Z", - "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], - "activity" : { - "coding" : [ { - "code" : "v2-FHIR transformation" - } ] - }, - "agent" : [ { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", - "code" : "assembler" - } ] - }, - "who" : { - "reference" : "Organization/1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf" - } - } ] - } - }, { - "fullUrl" : "Organization/1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf", - "resource" : { - "resourceType" : "Organization", - "id" : "1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf", - "identifier" : [ { - "value" : "CDC PRIME - Atlanta" - }, { - "type" : { - "coding" : [ { - "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" - } ] - }, - "system" : "urn:ietf:rfc:3986", - "value" : "2.16.840.1.114222.4.1.237821" - } ] - } - }, { - "fullUrl" : "Patient/1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18", - "resource" : { - "resourceType" : "Patient", - "id" : "1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient", - "extension" : [ { - "url" : "PID.8", - "valueString" : "U" - }, { - "url" : "PID.30", - "valueString" : "N" - } ] - }, { - "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "NULLFL" - } ], - "version" : "2.5.1", - "code" : "ASKU", - "display" : "Asked, but unknown" - } ] - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", - "valueCodeableConcept" : { - "coding" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", - "valueString" : "coding" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", - "valueString" : "HL70189" - } ], - "system" : "http://terminology.hl7.org/CodeSystem/v2-0189", - "version" : "2.9", - "code" : "N", - "display" : "Non Hispanic or Latino" - } ] - } - } ], - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility", - "valueReference" : { - "reference" : "Organization/1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c" - } - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", - "extension" : [ { - "url" : "CX.5", - "valueString" : "PI" - } ] - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "PID.3" - } ], - "type" : { - "coding" : [ { - "code" : "PI" - } ] - }, - "value" : "kc3oy" - } ], - "name" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", - "extension" : [ { - "url" : "XPN.2", - "valueString" : "Stephenie" - }, { - "url" : "XPN.3", - "valueString" : "Davis" - }, { - "url" : "XPN.7", - "valueString" : "L" - } ] - } ], - "use" : "official", - "family" : "Schaefer", - "given" : [ "Stephenie", "Davis" ] - } ], - "telecom" : [ { - "extension" : [ { - "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-country", - "valueString" : "1" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-area", - "valueString" : "260" - }, { - "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-local", - "valueString" : "7595016" - }, { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "PRN" - }, { - "url" : "XTN.3", - "valueString" : "BP" - }, { - "url" : "XTN.7", - "valueString" : "7595016" - }, { - "url" : "XTN.11", - "valueString" : "42" - }, { - "url" : "XTN.12", - "valueString" : "+1 260 759 5016" - } ] - } ], - "system" : "pager", - "value" : "+1 260 759 5016", - "use" : "home" - }, { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", - "extension" : [ { - "url" : "XTN.2", - "valueString" : "PRN" - }, { - "url" : "XTN.3", - "valueString" : "Internet" - }, { - "url" : "XTN.4", - "valueString" : "otto.daugherty@email.com" - } ] - } ], - "system" : "email", - "value" : "otto.daugherty@email.com", - "use" : "home" - } ], - "gender" : "unknown", - "deceasedBoolean" : false, - "address" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", - "extension" : [ { - "url" : "SAD.1", - "valueString" : "96633 Gilberto Course" - } ] - } ] - } ], - "line" : [ "96633 Gilberto Course" ], - "state" : "IG" - } ] - } - }, { - "fullUrl" : "Organization/1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c", - "resource" : { - "resourceType" : "Organization", - "id" : "1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c", - "identifier" : [ { - "extension" : [ { - "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", - "valueString" : "HD.1" - } ], - "value" : "Any lab USA" - } ] - } - }, { - "fullUrl" : "Provenance/1713397875402545000.10ef5fae-8d8a-4b31-88c8-0e97975b0e25", - "resource" : { - "resourceType" : "Provenance", - "id" : "1713397875402545000.10ef5fae-8d8a-4b31-88c8-0e97975b0e25", - "target" : [ { - "reference" : "Patient/1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18" - } ], - "recorded" : "2024-04-17T17:51:15Z", - "activity" : { - "coding" : [ { - "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", - "code" : "UPDATE" - } ] - } - } - } ] -} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 deleted file mode 100644 index 59f3487b982..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 +++ /dev/null @@ -1,2 +0,0 @@ -MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1 -PID|1||kc3oy^^^^PI^Any lab USA||Schaefer^Stephenie^Davis^^^^L|||U||ASKU^Asked, but unknown^NULLFL^^^^2.5.1|96633 Gilberto Course^^^IG||^PRN^BP^^1^260^7595016^^^^42^+1 260 759 5016~^PRN^Internet^otto.daugherty@email.com|||||||||N^Non Hispanic or Latino^HL70189^^^^2.9||||||||N diff --git a/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv b/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv index 98ca0f96664..4e0b4b8b346 100644 --- a/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv +++ b/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv @@ -61,6 +61,7 @@ FHIR_to_HL7/sample_NH_20240716-0001.fhir,,FHIR_to_HL7/sample_NH_202407016-0001.h FHIR_to_HL7/sample_IL_20240802-0001.fhir,,FHIR_to_HL7/sample_IL_20240802-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/IL/IL-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_WA_20240719-0001.fhir,,FHIR_to_HL7/sample_WA_20240719-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/WA/WA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","wa-phd.full-elr","","" FHIR_to_HL7/sample_OH_20240718-0001.fhir,,FHIR_to_HL7/sample_OH_20240718-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/OH/OH-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" +FHIR_to_HL7/sample_NJ_20240719-0001.fhir,,FHIR_to_HL7/sample_NJ_20240719-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","nj-doh.full-elr","","classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" FHIR_to_HL7/sample_ND_20240819-0001.fhir,,FHIR_to_HL7/sample_ND_20240819-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/ND/ND-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_LA_20240806-0001.fhir,,FHIR_to_HL7/sample_LA_20240806-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/LA/LA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","classpath:/metadata/fhir_transforms/receivers/reference-range-enrichment.yml" FHIR_to_HL7/sample_MN_20240816-0001.fhir,,FHIR_to_HL7/sample_MN_20240816-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/MN/MN-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" @@ -68,4 +69,5 @@ FHIR_to_HL7/sample_MA_20240805-0001.fhir,,FHIR_to_HL7/sample_MA_20240805-0001.hl FHIR_to_HL7/sample_AR_20240805-0001.fhir,,FHIR_to_HL7/sample_AR_20240805-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/AR/AR-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_ME_20240806-0001.fhir,,FHIR_to_HL7/sample_ME_20240806-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/ME/ME-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_SR_CSVUPLOADER_20240819-0001.fhir,,FHIR_to_HL7/sample_SR_CSVUPLOADER_20240819-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/MA/MA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" -FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.fhir,,FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/CA/CA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" \ No newline at end of file +FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir,,FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml,HL7,PASS,,,classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml,,, +FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.fhir,,FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/CA/CA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" diff --git a/prime-router/src/testIntegration/resources/settings/organizations.yml b/prime-router/src/testIntegration/resources/settings/organizations.yml index e24a013057e..e2ab115bb0c 100644 --- a/prime-router/src/testIntegration/resources/settings/organizations.yml +++ b/prime-router/src/testIntegration/resources/settings/organizations.yml @@ -667,6 +667,116 @@ enrichmentSchemaNames: [] timeZone: "PACIFIC" dateTimeFormat: "LOCAL" +- name: "nj-doh" + description: "New Jersey Department of Health" + jurisdiction: "STATE" + stateCode: "NJ" + countyName: null + filters: null + featureFlags: null + keys: null + senders: [] + receivers: + - name: "full-elr" + organizationName: "nj-doh" + topic: "full-elr" + customerStatus: "active" + translation: ! + schemaName: "classpath:/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml" + useTestProcessingMode: false + useBatchHeaders: true + receivingApplicationName: null + receivingApplicationOID: null + receivingFacilityName: null + receivingFacilityOID: null + messageProfileId: null + replaceValue: { } + replaceValueAwithB: { } + reportingFacilityName: null + reportingFacilityId: null + reportingFacilityIdType: null + suppressQstForAoe: false + suppressHl7Fields: null + suppressAoe: false + defaultAoeToUnknown: false + replaceUnicodeWithAscii: false + useBlankInsteadOfUnknown: null + truncateHDNamespaceIds: true + truncateHl7Fields: "OBX-23-1,ORC-12-3,OBR-16-3,OBX-17-1,ORC-12-1,OBR-16-1" + usePid14ForPatientEmail: false + convertTimestampToDateTime: null + cliaForOutOfStateTesting: null + cliaForSender: { } + phoneNumberFormatting: "STANDARD" + suppressNonNPI: false + processingModeCode: null + replaceDiiWithOid: null + applyOTCDefault: false + useOrderingFacilityName: "STANDARD" + valueSetOverrides: { } + nameFormat: "STANDARD" + receivingOrganization: null + convertPositiveDateTimeOffsetToNegative: false + stripInvalidCharsRegex: null + convertDateTimesToReceiverLocalTime: false + useHighPrecisionHeaderDateTimeFormat: false + type: "HL7" + truncationConfig: + truncateHDNamespaceIds: true + truncateHl7Fields: + - "OBX-23-1" + - "ORC-12-3" + - "OBR-16-3" + - "OBX-17-1" + - "ORC-12-1" + - "OBR-16-1" + customLengthHl7Fields: { } + jurisdictionalFilter: + - "(Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state.exists() and Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state = 'NJ') or (Bundle.entry.resource.ofType(Patient).address.state.exists() and Bundle.entry.resource.ofType(Patient).address.state = 'NJ')" + qualityFilter: + # hasOneOf(patient_street, patient_zip_code, patient_phone_number, patient_email) + - "Bundle.entry.resource.ofType(Patient).where(address.line[0].empty() and address.postalCode.empty() and telecom.where(system = 'phone').value.empty() and telecom.where(system = 'email').value.empty()).count() = 0" + # hasOneOf(order_test_date, specimen_collection_date_time, test_result_date) + - "Bundle.entry.resource.ofType(DiagnosticReport).where(basedOn.resolve().extension('https://reportstream.cdc.gov/fhir/StructureDefinition/effective-date').empty() and specimen.resolve().collection.collected.empty() and effective.empty() and issued.empty() and result.resolve().effective.empty()).count() = 0" + # isValidClia(testing_lab_clia) + - "Bundle.entry.resource.ofType(ServiceRequest).performer.resolve().identifier.where(type.coding.code = 'CLIA').value.getIdType() = 'CLIA'" + # hasValidData(patient_last_name, patient_first_name, patient_dob) + - "Bundle.entry.resource.ofType(Patient).where(name.family.empty() or name.given.empty() or birthDate.empty()).count() = 0" + # hasValidData(specimen_type) + - "Bundle.entry.resource.ofType(Specimen).where(type.empty()).count() = 0" + # hasValidData(message_id) + - "Bundle.identifier.value.empty().not()" + # hasValidData(equipment_model_name, test_result) + - "Bundle.entry.resource.ofType(DiagnosticReport).result.resolve().where(method.empty() or value.coding.code.empty()).count() = 0" + routingFilter: [ ] + processingModeFilter: + # matches(processing_mode_code, P) + - "Bundle.entry.resource.ofType(MessageHeader).meta.tag.where(system = 'http://terminology.hl7.org/CodeSystem/v2-0103').code = 'P'" + reverseTheQualityFilter: false + deidentify: false + deidentifiedValue: "" + timing: + operation: "MERGE" + numberPerDay: 1440 + initialTime: "09:40" + timeZone: "EASTERN" + maxReportCount: 100 + whenEmpty: + action: "NONE" + onlyOncePerDay: false + description: "" + transport: ! + type: SFTP + host: sftp + port: 22 + filePath: ./upload + credentialName: DEFAULT-SFTP + conditionFilter: [ ] + mappedConditionFilter: [ ] + externalName: null + enrichmentSchemaNames: ["classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" ] + timeZone: null + dateTimeFormat: "OFFSET" - name: "mo-phd" description: "Missouri Public Health Department" jurisdiction: "STATE" diff --git a/prime-router/upload_swaggerui.sh b/prime-router/upload_swaggerui.sh index 138a9558e92..089c2708967 100755 --- a/prime-router/upload_swaggerui.sh +++ b/prime-router/upload_swaggerui.sh @@ -25,7 +25,7 @@ set -e which az if [ $? -eq 0 ]; then - AzureWebJobsStorage="${AzureWebJobsStorage:-DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;}" + AzureWebJobsStorage="${AzureWebJobsStorage:-DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;}" swagger_ui_dir_in_container="/prime-data-hub-router/swagger-ui" swagger_ui_dir_on_host="./build/swagger-ui" apidocs_container_name="apidocs" diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt new file mode 100644 index 00000000000..cff4360ffc4 --- /dev/null +++ b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt @@ -0,0 +1,29 @@ +package gov.cdc.prime.reportstream.shared + +import java.security.MessageDigest + +object BlobUtils { + + /** + * Create a hex string style of a digest. + */ + fun digestToString(digest: ByteArray): String { + return digest.joinToString(separator = "", limit = 40) { Integer.toHexString(it.toInt()) } + } + + /** + * Hash a ByteArray [input] with SHA 256 + */ + fun sha256Digest(input: ByteArray): ByteArray { + return hashBytes("SHA-256", input) + } + + /** + * Hash a ByteArray [input] with method [type] + */ + private fun hashBytes(type: String, input: ByteArray): ByteArray { + return MessageDigest + .getInstance(type) + .digest(input) + } +} \ No newline at end of file diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt new file mode 100644 index 00000000000..f10cd20d744 --- /dev/null +++ b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt @@ -0,0 +1,196 @@ +package gov.cdc.prime.reportstream.shared + +import com.fasterxml.jackson.annotation.JsonSubTypes +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.fasterxml.jackson.annotation.JsonTypeName +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.json.JsonMapper +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator +import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder +import com.fasterxml.jackson.module.kotlin.readValue +import java.util.Base64 +import java.util.UUID + +// This is a size limit dictated by our infrastructure in azure +// https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted +private const val MESSAGE_SIZE_LIMIT = 64 * 1000 + +/** + * Interface representing a message that can be placed on an Azure Queue. + * This interface supports serialization and deserialization for handling + * different types of queue messages. + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") +@JsonSubTypes( + JsonSubTypes.Type(QueueMessage.ReceiveQueueMessage::class, name = "receive") +) +interface QueueMessage { + + /** + * Name of the Azure Queue where the message should be placed. + */ + val messageQueueName: String + + /** + * Serializes the message object into a Base64 encoded JSON string. + * Throws an exception if the message exceeds the predefined size limit. + * + * @return Base64 encoded string of the message. + */ + fun serialize(): String { + val bytes = mapper.writeValueAsBytes(this) + check(bytes.size < MESSAGE_SIZE_LIMIT) { "Message is too big for the queue." } + return String(Base64.getEncoder().encode(bytes)) + } + + companion object { + /** + * Jackson JSON mapper configured to handle polymorphic types. + */ + val mapper: JsonMapper = ObjectMapperProvider.mapper + + /** + * Deserializes a Base64 encoded JSON string into a gov.cdc.prime.reportstream.shared.QueueMessage object. + * + * @param s Base64 encoded string representing the message. + * @return Deserialized gov.cdc.prime.reportstream.shared.QueueMessage object. + */ + fun deserialize(s: String): QueueMessage = mapper.readValue(s) + + /** + * Returns a JSON string representation of the gov.cdc.prime.reportstream.shared.QueueMessage object. + * + * @return JSON string representation. + */ + override fun toString(): String = mapper.writeValueAsString(this) + + /** + * Constant for receive queue on UP + */ + const val elrReceiveQueueName = "elr-fhir-receive" + + /** + * Constant for convert queue on UP + */ + const val elrConvertQueueName = "elr-fhir-convert" + + /** + * Constant for destination filter queue on UP + */ + const val elrDestinationFilterQueueName = "elr-fhir-destination-filter" + + /** + * Constant for receiver filter queue on UP + */ + const val elrReceiverFilterQueueName = "elr-fhir-receiver-filter" + + /** + * Constant for translation queue on UP + */ + const val elrTranslationQueueName = "elr-fhir-translate" + + /** + * Constant for send queue + */ + const val elrSendQueueName = "send" + } + + /** + * Interface representing information about a report to be processed. + */ + interface ReportInformation { + /** + * URL of the blob storage containing the report. + */ + val blobURL: String + + /** + * Digest (hash) of the report for integrity verification. + */ + val digest: String + + /** + * Subfolder name in the blob storage where the report is stored. + */ + val blobSubFolderName: String + + /** + * Unique identifier of the report. + */ + val reportId: UUID + } + + /** + * Interface representing additional information required for receiving a message. + */ + interface ReceiveInformation { + /** + * Additional headers associated with the message. + */ + val headers: Map + } + + /** + * Data class representing a specific type of gov.cdc.prime.reportstream.shared.QueueMessage meant for receiving + * FHIR (Fast Healthcare Interoperability Resources) data. It implements both + * ReportInformation and ReceiveInformation interfaces. + * + * @property blobURL The URL of the blob storage containing the report. + * @property digest The digest (hash) of the report. + * @property blobSubFolderName The subfolder name in the blob storage. + * @property reportId The unique identifier of the report. + * @property headers Additional headers associated with the message. + */ + @JsonTypeName("receive-fhir") + data class ReceiveQueueMessage( + override val blobURL: String, + override val digest: String, + override val blobSubFolderName: String, + override val reportId: UUID, + override val headers: Map, + ) : QueueMessage, + ReportInformation, + ReceiveInformation { + override val messageQueueName = elrReceiveQueueName + } + + /** + * Singleton object responsible for providing and configuring the Jackson ObjectMapper + * used for serializing and deserializing QueueMessages. The ObjectMapper is configured + * to support polymorphic types. + */ + object ObjectMapperProvider { + + /** + * Polymorphic Type Validator to allow base and subtypes for gov.cdc.prime.reportstream.shared.QueueMessage. + */ + private val ptv = BasicPolymorphicTypeValidator.builder() + .allowIfBaseType(QueueMessage::class.java) + .allowIfSubType(LinkedHashMap::class.java) + .build() + + /** + * Configured Jackson JSON mapper with polymorphic type handling. + */ + val mapper: JsonMapper = jacksonMapperBuilder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .polymorphicTypeValidator(ptv) + .activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL) + .build() + + /** + * Registers additional subtypes for gov.cdc.prime.reportstream.shared.QueueMessage deserialization. + * + * @param subtypes Additional subtypes to be registered. + */ + fun registerSubtypes(vararg subtypes: Class) { + mapper.registerSubtypes(*subtypes) + } + + init { + // Register common subtypes here. In this case, registering ReceiveQueueMessage. + mapper.registerSubtypes(ReceiveQueueMessage::class.java) + } + } +} \ No newline at end of file diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt new file mode 100644 index 00000000000..a16924e6e6a --- /dev/null +++ b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt @@ -0,0 +1,52 @@ +package gov.cdc.prime.reportstream.shared + +import com.azure.data.tables.models.TableEntity + +/** + * Represents a submission entity to be stored in Azure Table Storage. + * + * @property submissionId The unique identifier for the submission, used as the PartitionKey. + * @property status The status of the submission, used as the RowKey. + * @property bodyURL The URL pointing to the body of the submission. + * @property detail Optional additional details about the submission. + */ +data class Submission( + val submissionId: String, + val status: String, + val bodyURL: String, + val detail: String? = null, +) { + companion object { + /** + * Creates a SubmissionEntity from a TableEntity. + * + * @param tableEntity The TableEntity to convert. + * @return The corresponding SubmissionEntity. + */ + fun fromTableEntity(tableEntity: TableEntity): Submission { + return Submission( + submissionId = tableEntity.partitionKey, + status = tableEntity.rowKey, + bodyURL = tableEntity.getProperty("body_url") as String, + detail = tableEntity.getProperty("detail") as String? + ) + } + } + + /** + * Converts this SubmissionEntity into an Azure TableEntity. + * The PartitionKey is set to the submissionId, and the RowKey is set to the status. + * Additional properties (bodyURL and detail) are included as part of the TableEntity. + * + * @return A TableEntity object that can be inserted into an Azure Table. + */ + fun toTableEntity(): TableEntity { + return TableEntity(submissionId, status) + .setProperties( + mapOf( + "body_url" to bodyURL, + "detail" to detail.takeIf { it != null } + ) + ) + } +} \ No newline at end of file diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt similarity index 90% rename from submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt rename to submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt index d68f8c5e05e..61c348c0aa6 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt @@ -3,7 +3,7 @@ package gov.cdc.prime.reportstream.submissions import java.time.Instant import java.util.UUID -data class ReportReceivedEvent( +data class SubmissionReceivedEvent( val timeStamp: Instant, val reportId: UUID, val parentReportId: UUID, diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt index 77c1cf0cd0d..f46897339fe 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt @@ -27,10 +27,18 @@ class AzureConfig { @Bean fun blobContainerClient(): BlobContainerClient { - return BlobServiceClientBuilder() + val blobServiceClient = BlobServiceClientBuilder() .connectionString(connectionString) .buildClient() - .getBlobContainerClient(containerName) + + val blobContainerClient = blobServiceClient.getBlobContainerClient(containerName) + + // Create the container if it doesn't exist + if (!blobContainerClient.exists()) { + blobContainerClient.create() + } + + return blobContainerClient } @Bean diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt index 4c07d8c2858..1e7612810d3 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt @@ -1,13 +1,14 @@ package gov.cdc.prime.reportstream.submissions.controllers import com.azure.data.tables.TableClient -import com.azure.data.tables.models.TableEntity import com.azure.storage.blob.BlobContainerClient import com.azure.storage.queue.QueueClient import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -import gov.cdc.prime.reportstream.shared.SubmissionQueueMessage -import gov.cdc.prime.reportstream.submissions.ReportReceivedEvent +import gov.cdc.prime.reportstream.shared.BlobUtils +import gov.cdc.prime.reportstream.shared.QueueMessage +import gov.cdc.prime.reportstream.shared.Submission +import gov.cdc.prime.reportstream.submissions.SubmissionReceivedEvent import gov.cdc.prime.reportstream.submissions.TelemetryService import org.slf4j.LoggerFactory import org.springframework.http.HttpStatus @@ -75,6 +76,7 @@ class SubmissionController( // Convert data to ByteArray val dataByteArray = data.toByteArray() + val digest = BlobUtils.sha256Digest(dataByteArray) logger.debug("Converted report data to ByteArray") // Upload to blob storage @@ -84,18 +86,12 @@ class SubmissionController( // Insert into Table // TableEntity() sets PartitionKey and RowKey. Both are required by azure and combine to create the PK - val tableEntity = TableEntity(reportReceivedTime.toString(), reportId.toString()) - val tableProperties = mapOf( - "report_received_time" to reportReceivedTime.toString(), - "report_accepted_time" to reportReceivedTime.toString(), // Will be updated when the report is accepted - "report_id" to reportId.toString(), - "status" to status - ) - tableClient.createEntity(tableEntity.setProperties(tableProperties)) + val tableEntity = Submission(reportId.toString(), status, blobClient.blobUrl).toTableEntity() + tableClient.createEntity(tableEntity) logger.info("Inserted report into table storage: reportId=$reportId") // Create and publish custom event - val reportReceivedEvent = ReportReceivedEvent( + val submissionReceivedEvent = SubmissionReceivedEvent( timeStamp = reportReceivedTime, reportId = reportId, parentReportId = reportId, @@ -106,25 +102,30 @@ class SubmissionController( fileSize = contentLength, blobUrl = blobClient.blobUrl ) - logger.debug("Created ReportReceivedEvent") + logger.debug("Created SUBMISSION_RECEIVED") // Log to Application Insights telemetryService.trackEvent( - "ReportReceivedEvent", - mapOf("event" to objectMapper.writeValueAsString(reportReceivedEvent)), + "SUBMISSION_RECEIVED", + mapOf("event" to objectMapper.writeValueAsString(submissionReceivedEvent)), ) telemetryService.flush() - logger.info("Tracked ReportReceivedEvent with Application Insights") + logger.info("Tracked SUBMISSION_RECEIVED with Application Insights") // Queue upload should occur as the last step ensuring the other steps successfully process // Create the message for the queue - val message = SubmissionQueueMessage(reportId, blobClient.blobUrl, filterHeaders(headers)) - val messageString = objectMapper.writeValueAsString(message) + val message = QueueMessage.ReceiveQueueMessage( + blobClient.blobUrl, + BlobUtils.digestToString(digest), + clientId.lowercase(), + reportId, + filterHeaders(headers).toMap(), + ).serialize() logger.debug("Created message for queue") // Upload to Queue queueClient.createIfNotExists() - queueClient.sendMessage(messageString) + queueClient.sendMessage(message) logger.info("Sent message to queue: queueName=${queueClient.queueName}") val response = @@ -219,8 +220,9 @@ class SubmissionController( } private fun filterHeaders(headers: Map): Map { - val headersToInclude = listOf("client_id", "Content-Type", "payloadname", "x-azure-clientip") - return headers.filter { it.key in headersToInclude } + val headersToInclude = + listOf("client_id", "content-type", "payloadname", "x-azure-clientip", "content-length") + return headers.filter { it.key.lowercase() in headersToInclude } } private fun formBlobName( diff --git a/submissions/src/main/resources/application.properties b/submissions/src/main/resources/application.properties index 466020a58e1..14a3fe573d2 100644 --- a/submissions/src/main/resources/application.properties +++ b/submissions/src/main/resources/application.properties @@ -2,5 +2,5 @@ spring.application.name=submissions server.port=8880 azure.storage.connection-string=${AZURE_STORAGE_CONNECTION_STRING:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;} azure.storage.container-name=${AZURE_STORAGE_CONTAINER_NAME:reports} -azure.storage.queue-name=${AZURE_STORAGE_QUEUE_NAME:elr-fhir-convert} -azure.storage.table-name=${AZURE_STORAGE_TABLE_NAME:submissions} \ No newline at end of file +azure.storage.queue-name=${AZURE_STORAGE_QUEUE_NAME:elr-fhir-receive} +azure.storage.table-name=${AZURE_STORAGE_TABLE_NAME:submission} \ No newline at end of file diff --git a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt index 77b2415ba40..50255bb05e6 100644 --- a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt @@ -1,15 +1,15 @@ package gov.cdc.prime.reportstream.submissions.controllers -import com.azure.core.util.Context import com.azure.data.tables.TableClient import com.azure.data.tables.models.TableEntity import com.azure.storage.blob.BlobContainerClient import com.azure.storage.blob.models.BlobItem import com.azure.storage.queue.QueueClient -import com.azure.storage.queue.models.PeekedMessageItem import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import gov.cdc.prime.reportstream.shared.QueueMessage +import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach @@ -26,7 +26,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName -import java.time.Duration +import java.util.Base64 @SpringBootTest @ActiveProfiles("test") @@ -108,16 +108,18 @@ class SubmissionControllerIntegrationTest { assertEquals(requestBody, blobContent) // Verify message was sent to queue and read its content - val messages: MutableList = mutableListOf() - queueClient.peekMessages( - 10, - Duration.ofSeconds(30), - Context.NONE - ).iterator().forEachRemaining { messages.add(it) } - assertEquals(1, messages.size) - - val queueMessageContent = objectMapper.readValue(messages[0].body.toString(), Map::class.java) as Map<*, *> - val headers = queueMessageContent["headers"] as Map<*, *> + // Peek the message from the queue + val peekedMessage = queueClient.peekMessage()?.body?.toString() + + // Check if message is present + checkNotNull(peekedMessage) { "No message found in the queue" } + + // Deserialize the message + val deserializedMessage = deserialize(peekedMessage, QueueMessage.ReceiveQueueMessage::class.java) + +// val queueMessageContent = objectMapper.readValue(/* content = */ messages[0].body.toString(), /* valueType = */ +// QueueMessage.ReceiveQueueMessage::class.java) + val headers = deserializedMessage.headers as Map<*, *> assertEquals("testClient", headers["client_id"]) assertEquals("application/hl7-v2;charset=UTF-8", headers["Content-Type"]) assertEquals("testPayload", headers["payloadname"]) @@ -128,6 +130,11 @@ class SubmissionControllerIntegrationTest { tableClient.listEntities().iterator().forEachRemaining { entities.add(it) } assertEquals(1, entities.size) val tableEntity = entities[0] - assertEquals("Received", tableEntity.getProperty("status")) + assertEquals("Received", tableEntity.getProperty("RowKey")) + } + + fun deserialize(serializedString: String, valueType: Class): T { + val bytes = Base64.getDecoder().decode(serializedString) + return ObjectMapperProvider.mapper.readValue(bytes, valueType) } } \ No newline at end of file diff --git a/submissions/src/test/kotlin/SubmissionControllerTest.kt b/submissions/src/test/kotlin/SubmissionControllerTest.kt index 2488e03ad14..ab1dfd84120 100644 --- a/submissions/src/test/kotlin/SubmissionControllerTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerTest.kt @@ -8,6 +8,8 @@ import com.azure.storage.queue.models.SendMessageResult import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import gov.cdc.prime.reportstream.shared.QueueMessage +import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider import gov.cdc.prime.reportstream.submissions.TelemetryService import gov.cdc.prime.reportstream.submissions.config.AzureConfig import org.junit.jupiter.api.AfterEach @@ -36,6 +38,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers import java.io.ByteArrayInputStream import java.io.InputStream +import java.util.Base64 import java.util.UUID @WebMvcTest(SubmissionController::class) @@ -136,11 +139,10 @@ class SubmissionControllerTest { // Assert the captured arguments assert(blobSizeCaptor.firstValue == requestBody.length.toLong()) - val capturedMessage = objectMapper.readValue(messageCaptor.firstValue, Map::class.java) - assert(capturedMessage["reportId"] == reportId.toString()) - assert(capturedMessage["blobUrl"] == expectedBlobUrl) - assert(capturedMessage["headers"] != null) - val headers = capturedMessage["headers"] as Map<*, *> + val capturedMessage = deserialize(messageCaptor.firstValue, QueueMessage.ReceiveQueueMessage::class.java) + assert(capturedMessage.reportId == reportId) + assert(capturedMessage.blobURL == expectedBlobUrl) + val headers = capturedMessage.headers as Map<*, *> assert(headers["client_id"] == "testClient") assert(headers["Content-Type"] == "application/hl7-v2;charset=UTF-8") assert(headers["payloadname"] == "testPayload") @@ -183,11 +185,10 @@ class SubmissionControllerTest { // Assert the captured arguments assert(blobSizeCaptor.firstValue == requestBody.length.toLong()) - val capturedMessage = objectMapper.readValue(messageCaptor.firstValue, Map::class.java) - assert(capturedMessage["reportId"] == reportId.toString()) - assert(capturedMessage["blobUrl"] == expectedBlobUrl) - assert(capturedMessage["headers"] != null) - val headers = capturedMessage["headers"] as Map<*, *> + val capturedMessage = deserialize(messageCaptor.firstValue, QueueMessage.ReceiveQueueMessage::class.java) + assert(capturedMessage.reportId == reportId) + assert(capturedMessage.blobURL == expectedBlobUrl) + val headers = capturedMessage.headers as Map<*, *> assert(headers["client_id"] == "testClient") assert(headers["Content-Type"] == "application/fhir+ndjson;charset=UTF-8") assert(headers["payloadname"] == "testPayload") @@ -275,7 +276,7 @@ class SubmissionControllerTest { } @Test - fun `submitReport should log ReportReceivedEvent with correct details`() { + fun `submitReport should log SUBMISSION_RECEIVED with correct details`() { // Helper function to safely cast the captured map to Map fun mapToStringString(input: Map<*, *>): Map { return input.mapNotNull { (key, value) -> @@ -316,7 +317,7 @@ class SubmissionControllerTest { val capturedEvent = eventCaptor.firstValue val capturedProperties = mapToStringString(propertiesCaptor.firstValue) - assert(capturedEvent == "ReportReceivedEvent") + assert(capturedEvent == "SUBMISSION_RECEIVED") val eventDetails = objectMapper.readValue(capturedProperties["event"], Map::class.java) assert(eventDetails["reportId"] == reportId.toString()) assert(eventDetails["blobUrl"] == expectedBlobUrl) @@ -329,4 +330,9 @@ class SubmissionControllerTest { uuidMockedStatic.close() } + + fun deserialize(serializedString: String, valueType: Class): T { + val bytes = Base64.getDecoder().decode(serializedString) + return ObjectMapperProvider.mapper.readValue(bytes, valueType) + } } \ No newline at end of file

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 diff --git a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..54b3b06920c35fd649f563c15217a1f8e563ad48 GIT binary patch literal 356968 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%0D5;wfC{C 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