diff --git a/.github/actions/action-connect-ovpn/.gitignore b/.github/actions/connect-ovpn/.gitignore similarity index 100% rename from .github/actions/action-connect-ovpn/.gitignore rename to .github/actions/connect-ovpn/.gitignore diff --git a/.github/actions/action-connect-ovpn/README.md b/.github/actions/connect-ovpn/README.md similarity index 100% rename from .github/actions/action-connect-ovpn/README.md rename to .github/actions/connect-ovpn/README.md diff --git a/.github/actions/action-connect-ovpn/action.yml b/.github/actions/connect-ovpn/action.yml similarity index 82% rename from .github/actions/action-connect-ovpn/action.yml rename to .github/actions/connect-ovpn/action.yml index 1aeac9d9876..220338866d6 100644 --- a/.github/actions/action-connect-ovpn/action.yml +++ b/.github/actions/connect-ovpn/action.yml @@ -34,6 +34,16 @@ runs: sudo apt-get install openvpn-systemd-resolved shell: bash + - name: Validate OpenVPN + run: | + echo -e "\nOpenVPN Version:" ; + openvpn --version ; + echo -e "\nPinging URL: ${{ inputs.PING_URL }}" ; + ping -c 3 ${{ inputs.PING_URL }} ; + echo -e "\nIP Route:" ; + ip route ; + shell: bash + - name: Connect VPN env: TLS_KEY: ${{ inputs.TLS_KEY }} @@ -48,6 +58,8 @@ runs: echo "$USER_CRT" | base64 -d > user.crt echo "$USER_KEY" | base64 -d > user.key echo "$SECRET" | base64 -d > secret.txt + + echo -e "sudo openvpn --config ${{ inputs.FILE_OVPN }} --daemon" ; sudo openvpn --config ${{ inputs.FILE_OVPN }} --daemon - name: VPN Status diff --git a/.github/actions/action-connect-ovpn/example.ovpn b/.github/actions/connect-ovpn/example.ovpn similarity index 100% rename from .github/actions/action-connect-ovpn/example.ovpn rename to .github/actions/connect-ovpn/example.ovpn diff --git a/.github/actions/vpn-azure/action.yml b/.github/actions/vpn-azure/action.yml index 7dd45a24d3e..faba23787a2 100644 --- a/.github/actions/vpn-azure/action.yml +++ b/.github/actions/vpn-azure/action.yml @@ -40,9 +40,7 @@ runs: sed -i "s/\(dhcp-option DNS \).*/\1${{ inputs.dns-ip }}/" .github/vpn/${{ inputs.env-name }}.ovpn shell: bash - - uses: josiahsiegel/action-connect-ovpn@794339aff94452216c97f609476c367a43a31295 - ## DevSecOps - Aquia (Replace) - uses: ./.github/actions/action-connect-ovpn - + - uses: ./.github/actions/connect-ovpn if: inputs.env-name && inputs.ca-cert != 'false' id: connect_vpn with: diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c5b2158da31..498f787b167 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -121,7 +121,7 @@ updates: interval: "daily" - package-ecosystem: "github-actions" - directory: "/.github/actions/action-connect-ovpn" + directory: "/.github/actions/connect-ovpn" schedule: interval: "daily" diff --git a/.github/vpn/test.ovpn b/.github/vpn/test.ovpn index 0495febb2d8..fe408202b81 100644 --- a/.github/vpn/test.ovpn +++ b/.github/vpn/test.ovpn @@ -45,4 +45,4 @@ key user.key script-security 2 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved -down-pre \ No newline at end of file +down-pre diff --git a/frontend-react/e2e/helpers/internal-links.ts b/frontend-react/e2e/helpers/internal-links.ts index 641137fb76b..d07ab5ac84a 100644 --- a/frontend-react/e2e/helpers/internal-links.ts +++ b/frontend-react/e2e/helpers/internal-links.ts @@ -74,8 +74,4 @@ export const developerResourcesApiSideNav = [ name: "Responses from ReportStream", path: "/developer-resources/api/documentation/responses-from-reportstream", }, - { - name: "Sample payloads and output", - path: "/developer-resources/api/documentation/sample-payloads-and-output", - }, ]; diff --git a/frontend-react/e2e/spec/all/idletimeout.spec.ts b/frontend-react/e2e/spec/all/idletimeout.spec.ts index cc42f98b4d9..0cebafa4766 100644 --- a/frontend-react/e2e/spec/all/idletimeout.spec.ts +++ b/frontend-react/e2e/spec/all/idletimeout.spec.ts @@ -4,10 +4,9 @@ import process from "node:process"; import { OrganizationPage } from "../../pages/authenticated/admin/organization"; import { test as baseTest } from "../../test"; -const timeout = parseInt(process.env.VITE_IDLE_TIMEOUT ?? "20000"); -// Add/Sub 500 ms to account for variance -const timeoutLow = timeout - 500; -const timeoutHigh = timeout + 500; +const timeout = parseInt(process.env.VITE_IDLE_TIMEOUT ?? "900000"); +const timeoutLow = timeout - 1000; +const timeoutHigh = timeout + 1000; export interface OrganizationPageFixtures { organizationPage: OrganizationPage; @@ -37,6 +36,7 @@ const test = baseTest.extend({ frontendWarningsLogPath, isFrontendWarningsLog, }); + await page.page.clock.install(); await page.goto(); await use(page); }, @@ -44,20 +44,22 @@ const test = baseTest.extend({ test.use({ storageState: "e2e/.auth/admin.json" }); -test.skip("Does not trigger early", async ({ organizationPage }) => { - await expect(organizationPage.page.getByRole("banner").first()).toBeVisible(); - await organizationPage.page.keyboard.down("Tab"); +test.describe("Idle time out", () => { + test("Does not trigger early", async ({ organizationPage }) => { + await expect(organizationPage.page.getByRole("banner").first()).toBeVisible(); + await organizationPage.page.keyboard.down("Tab"); - const start = new Date(); + await organizationPage.page.clock.fastForward(timeoutLow); - await organizationPage.page.waitForRequest(/\/oauth2\/default\/v1\/revoke/, { - timeout: timeoutHigh, + await expect(organizationPage.page.getByRole("banner").first()).toBeVisible(); }); - const end = new Date(); + test("Triggers on time", async ({ organizationPage }) => { + await expect(organizationPage.page.getByRole("banner").first()).toBeVisible(); + await organizationPage.page.keyboard.down("Tab"); - const idleTime = Math.abs(end.valueOf() - start.valueOf()); + await organizationPage.page.clock.fastForward(timeoutHigh); - expect(idleTime).not.toBeLessThan(timeoutLow); - expect(idleTime).not.toBeGreaterThan(timeoutHigh); + await expect(organizationPage.page.getByRole("link", { name: "Login" })).toBeVisible(); + }); }); diff --git a/frontend-react/e2e/spec/all/public/developer-resources/api/documentation/sample-payloads-and-output.spec.ts b/frontend-react/e2e/spec/all/public/developer-resources/api/documentation/sample-payloads-and-output.spec.ts index 5000be4d748..a9ba595fb43 100644 --- a/frontend-react/e2e/spec/all/public/developer-resources/api/documentation/sample-payloads-and-output.spec.ts +++ b/frontend-react/e2e/spec/all/public/developer-resources/api/documentation/sample-payloads-and-output.spec.ts @@ -35,7 +35,8 @@ const test = baseTest.extend({ }, }); -test.describe( +// Page currently archived +test.describe.skip( "Developer Resources / API / Documentation / Sample payloads and output page", { tag: "@smoke", diff --git a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.7.pdf similarity index 72% rename from frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf rename to frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.7.pdf index 54b3b06920c..9a6e9882f1e 100644 Binary files a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf and b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.7.pdf differ diff --git a/frontend-react/public/sitemap.xml b/frontend-react/public/sitemap.xml index a8b523ecb6b..787863c1d6d 100644 --- a/frontend-react/public/sitemap.xml +++ b/frontend-react/public/sitemap.xml @@ -63,9 +63,6 @@ https://reportstream.cdc.gov/developer-resources/api/documentation/responses-from-reportstream - - https://reportstream.cdc.gov/developer-resources/api/documentation/sample-payloads-and-output - https://reportstream.cdc.gov/support diff --git a/frontend-react/src/AppRouter.tsx b/frontend-react/src/AppRouter.tsx index b6d41cd6487..9cbbf55e334 100644 --- a/frontend-react/src/AppRouter.tsx +++ b/frontend-react/src/AppRouter.tsx @@ -45,11 +45,12 @@ const ManagingYourConnectionIndex = lazy( lazyRouteMarkdown(() => import("./content/managing-your-connection/index.mdx")), ); const SupportIndex = lazy(lazyRouteMarkdown(() => import("./content/support/index.mdx"))); -const ReportStreamApiDocumentationPayloads = lazy( +// Page currently archived +/*const ReportStreamApiDocumentationPayloads = lazy( lazyRouteMarkdown( () => import("./content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx"), ), -); +);*/ /* Public Pages */ const TermsOfService = lazy(() => import("./pages/TermsOfService")); @@ -269,13 +270,14 @@ export const appRoutes: RouteObject[] = [ isContentPage: true, }, }, - { + // Page currently archived + /*{ path: "sample-payloads-and-output", element: , handle: { isContentPage: true, }, - }, + },*/ ], }, ], diff --git a/frontend-react/src/config/index.ts b/frontend-react/src/config/index.ts index b2e2c35ca16..11e54f19910 100644 --- a/frontend-react/src/config/index.ts +++ b/frontend-react/src/config/index.ts @@ -4,6 +4,7 @@ import { WidgetOptions } from "@okta/okta-signin-widget"; import type { Feature } from "@okta/okta-signin-widget"; import type { IIdleTimerProps } from "react-idle-timer"; +import site from "../content/site.json"; import type { ConsoleLevel } from "../utils/rsConsole/rsConsole"; const envVars = { @@ -118,7 +119,7 @@ const config = { } satisfies Partial>, useClassicEngine: false, helpLinks: { - help: "https://app.smartsheetgov.com/b/form/95d2f16b772c42d8aaa0ef5db28a6838", + help: site.forms.contactUs.url, }, i18n: { // Overriding English properties diff --git a/frontend-react/src/content/about/index.mdx b/frontend-react/src/content/about/index.mdx index 19831d29b0c..adb7a3a7733 100644 --- a/frontend-react/src/content/about/index.mdx +++ b/frontend-react/src/content/about/index.mdx @@ -9,6 +9,9 @@ meta: src: /assets/img/opengraph/reportstream-tagline.png altText: "ReportStream. CDC's free, single connection to streamline your data transfer and improve public health. The words are surrounded by illustration of lines and boxes connected by colorful dots." --- + +import site from "../site.json"; +
@@ -126,7 +129,7 @@ meta: - ### ReportStream overview PDF + ### ReportStream overview PDF Download a quick summary of ReportStream that you can print and share. diff --git a/frontend-react/src/content/about/news.mdx b/frontend-react/src/content/about/news.mdx index d7989979152..ddad5e7a4fc 100644 --- a/frontend-react/src/content/about/news.mdx +++ b/frontend-react/src/content/about/news.mdx @@ -41,4 +41,4 @@ While the pilot focused on flu data, the goal was to create solutions that laid As we celebrate the success of the flu pilot, we'll be conducting further tests on other conditions with multiple partners. We are excited for the future of scaling these results so ReportStream can send a broad range of reportable public health data. -If you are interested in sending or receiving flu data, connect with us and we’ll discuss when and how your organization can start. \ No newline at end of file +If you are interested in sending or receiving flu data, connect with us and we’ll discuss when and how your organization can start. \ No newline at end of file diff --git a/frontend-react/src/content/about/our-network.mdx b/frontend-react/src/content/about/our-network.mdx index b8ba64c00f3..ba51792dc8d 100644 --- a/frontend-react/src/content/about/our-network.mdx +++ b/frontend-react/src/content/about/our-network.mdx @@ -12,6 +12,7 @@ backToTop: true --- import Sidenav from "./sidenav.mdx" import usamapsvg from "../usa_w_territories.svg"; // in /content dir to get unique filename per build +import site from "../site.json" @@ -22,7 +23,7 @@ import usamapsvg from "../usa_w_territories.svg"; // in /content dir to get uniq State, local, and territorial agencies across the United States rely on ReportStream to make accurate, timely public health responses. -Don't see your state or territory? [Connect with us](https://app.smartsheetgov.com/b/form/48f580abb9b440549b1a9cf996ba6957). +Don't see your state or territory? Connect with us.
Map of states using ReportStream diff --git a/frontend-react/src/content/about/release-notes.mdx b/frontend-react/src/content/about/release-notes.mdx index 335178e287c..01fbaf0250f 100644 --- a/frontend-react/src/content/about/release-notes.mdx +++ b/frontend-react/src/content/about/release-notes.mdx @@ -11,6 +11,7 @@ meta: backToTop: true --- import Sidenav from "./sidenav.mdx" +import site from "../site.json" @@ -508,9 +509,9 @@ You may also be interested in: pandemics and gives us more flexibility for future data types in public health. If your jurisdiction is interested in REST/HTTP transport,{" "} - + connect with our team - + .

), diff --git a/frontend-react/src/content/about/security.mdx b/frontend-react/src/content/about/security.mdx index 64e32ce03df..3e6c3e17147 100644 --- a/frontend-react/src/content/about/security.mdx +++ b/frontend-react/src/content/about/security.mdx @@ -10,6 +10,7 @@ meta: altText: "An abstract illustration of screens and a document." --- import Sidenav from "./sidenav.mdx" +import site from "../site.json" @@ -103,7 +104,7 @@ ReportStream is committed to handling data securely and reliably. From federal r headingLevel:"h3", title: "How does ReportStream send data?", content: (

- ReportStream transports data through Secure File Transfer Protocol (SFTP) or a REST API. Public health entities can request data be sent in real time or batched according to their needs. ReportStream transports data through Secure File Transfer Protocol (SFTP) or a REST API. Public health entities can request data be sent in real time or batched according to their needs. If you are a public health entity interested in another transport method, contact our team to explore your options. + ReportStream transports data through Secure File Transfer Protocol (SFTP) or a REST API. Public health entities can request data be sent in real time or batched according to their needs. ReportStream transports data through Secure File Transfer Protocol (SFTP) or a REST API. Public health entities can request data be sent in real time or batched according to their needs. If you are a public health entity interested in another transport method, contact our team to explore your options.

) }, { diff --git a/frontend-react/src/content/developer-resources/reportstream-api/ReportStreamApi.mdx b/frontend-react/src/content/developer-resources/reportstream-api/ReportStreamApi.mdx index 542649590a9..b8600ea6505 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/ReportStreamApi.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/ReportStreamApi.mdx @@ -27,7 +27,7 @@ import site from "../../site.json"; [Documentation](documentation) - Details on our data model and sample responses, inputs and outputs to assist you in our set up and use of the ReportStream API. + Details on our sample responses to assist you in our set up and use of the ReportStream API. diff --git a/frontend-react/src/content/developer-resources/reportstream-api/Sidenav.mdx b/frontend-react/src/content/developer-resources/reportstream-api/Sidenav.mdx index ed1594de870..aa8ee47f2ea 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/Sidenav.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/Sidenav.mdx @@ -6,9 +6,6 @@ Response messages, JSON error responses, ]}>Responses from ReportStream, - Sample HL7 v2.5.1 payload and output, - ]}>Sample payloads and output, ]}>Documentation, ]}>
diff --git a/frontend-react/src/content/developer-resources/reportstream-api/documentation/Documentation.mdx b/frontend-react/src/content/developer-resources/reportstream-api/documentation/Documentation.mdx index 59cd72114ef..b05c3320306 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/documentation/Documentation.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/documentation/Documentation.mdx @@ -1,7 +1,7 @@ --- meta: title: ReportStream API documentation - description: Details on our data model and sample responses, inputs and outputs to assist you in your set up and use of the ReportStream API. + description: Details on our sample responses to assist you in your set up and use of the ReportStream API. openGraph: image: src: /assets/img/opengraph/reportstream-tagline.png @@ -28,21 +28,9 @@ import Sidenav from "../Sidenav.mdx"; ReportStream responds to each API call with a response (JSON formatted) about the disposition of your data. **On this page:** - * [Errors and warnings](responses-from-reportstream#errors-and-warnings) * [Response messages](responses-from-reportstream#response-messages) * [JSON error responses](responses-from-reportstream#json-error-responses) - - - ## [Sample payloads and outputs](sample-payloads-and-output) - - - Samples are provided for HL7 inputs and responses. - - **On this page:** - * [Sample HL7 2.5.1 payload and output](sample-payloads-and-output#sample-hl7-251-payload-and-output) - - \ No newline at end of file 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 de160a051be..f268de837e3 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 @@ -1,4 +1,5 @@ --- +# Page currently archived meta: title: ReportStream API sample payloads and output description: Sample payloads and output for HL7 and CSV submissions to ReportStram's API 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 bdc0f1fc993..568d358cf1c 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 @@ -13,6 +13,7 @@ import Step2 from "./Step2.mdx"; import Step3 from "./Step3.mdx"; import Step4 from "./Step4.mdx"; import Sidenav from "../Sidenav.mdx"; +import site from "../../../site.json"; @@ -24,7 +25,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:** 9/9/24

+

**Last updated:** 11/4/24

*** @@ -32,16 +33,18 @@ You can also use a program like Postman to test submissions. To prepare your file for testing, set up a sample file with fake data (artificially created, non-PII data). -Currently, ReportStream can accept either HL7 or FHIR data. -We can send you a file with fake data to review that will always successfully validate against the NIST HL7v2 validator. -Note that because the data in those files are computer-generated, it may not feel realistic in some places. +Currently, ReportStream can accept either HL7 or FHIR data. We can provide a sample HL7 file with fake data +to review upon request. For this step, you can refer to formatting requirements for [HL7v2.5.1 ORU-R01](https://www.hl7.org/implement/standards/product_brief.cfm?product_id=185) or [RADxMARS](https://www.nibib.nih.gov/covid-19/radx-tech-program/mars/hl7v2-getting-started) for OTC (over the counter) test data. -When you’ve formatted your fake (non-PII) data file, test your data model using using the -[NIST General Validation Tool](https://hl7v2-gvt.nist.gov/gvt/#/home), and correct any errors you receive. +When you’ve formatted your fake (non-PII) data file, test your data model using the +NIST Electronic Lab Reporting (ELR) Validation Suite. +(Note: If you’re testing OTC data, use the NIST HL7 General Validation Tool and +select “RADx MARS HL7v2” from the tool scope dropdown. Navigate to the “Context-free” tab and select the “Onboarding” profile group). +Correct any errors you receive.

Set up authentication and test your API connection

diff --git a/frontend-react/src/content/getting-started/receiving-data.mdx b/frontend-react/src/content/getting-started/receiving-data.mdx index f004e942991..c55169a156a 100644 --- a/frontend-react/src/content/getting-started/receiving-data.mdx +++ b/frontend-react/src/content/getting-started/receiving-data.mdx @@ -12,7 +12,7 @@ backToTop: true --- import Sidenav from "./sidenav.mdx" -import site from "../../content/site.json"; +import site from "../site.json"; @@ -86,7 +86,7 @@ Connecting to ReportStream is similar to setting up an Electronic Lab Reporting

What you need

-In addition to gathering your team and setting aside time for the weekly calls, you’ll need to provide us with more information about your requirements and preferences. Our [onboarding form](https://app.smartsheetgov.com/b/form/b0935d5d1e924c57b2d293b4ed0f2cd5) collects the specific details about your needs. +In addition to gathering your team and setting aside time for the weekly calls, you’ll need to provide us with more information about your requirements and preferences. Our onboarding form collects the specific details about your needs. Review what you need to gather to start onboarding. @@ -209,7 +209,7 @@ Once you have all the information you need, submit the onboarding form. We'll ge - ### ReportStream overview PDF + ### ReportStream overview PDF Download a quick summary of ReportStream that you can print and share. diff --git a/frontend-react/src/content/getting-started/sending-data.mdx b/frontend-react/src/content/getting-started/sending-data.mdx index 466188aa838..1ad171b5710 100644 --- a/frontend-react/src/content/getting-started/sending-data.mdx +++ b/frontend-react/src/content/getting-started/sending-data.mdx @@ -11,6 +11,7 @@ meta: backToTop: true --- import Sidenav from "./sidenav.mdx" +import site from "../site.json"; @@ -35,7 +36,7 @@ From the start, we work with your unique requirements and preferences to create headingLevel:"h3", title: "2. Complete interest form", content: (<> -

Let us know you want to get started by filling out and submitting the interest form. You’ll answer a few questions about your needs, like how many messages you might be sending and data format.

+

Let us know you want to get started by filling out and submitting the interest form. You’ll answer a few questions about your needs, like how many messages you might be sending and data format.

Our terms of service is also available to review in the interest form. You’ll need to agree to our terms of service before you begin sending data. You can sign this at any point during your onboarding or when you fill out the form.

Our team will be in touch within 48 hours of receiving your form to schedule a kickoff call.

), @@ -67,7 +68,7 @@ From the start, we work with your unique requirements and preferences to create ]} /> If you're not connected with a ReportStream team member yet, get started by letting us know more about your needs. -Get started +Get started { /* pending approval @@ -109,7 +110,7 @@ Multiple jurisdictions, multiple formats and requirements. Just one connection f -### ReportStream overview PDF +### ReportStream overview PDF Download a quick summary of ReportStream that you can print and share. diff --git a/frontend-react/src/content/managing-your-connection/refer-healthcare-organizations.mdx b/frontend-react/src/content/managing-your-connection/refer-healthcare-organizations.mdx index 0c4a98696f1..34a161ad64b 100644 --- a/frontend-react/src/content/managing-your-connection/refer-healthcare-organizations.mdx +++ b/frontend-react/src/content/managing-your-connection/refer-healthcare-organizations.mdx @@ -11,6 +11,7 @@ meta: backToTop: true --- import Sidenav from "./sidenav.mdx"; +import site from "../site.json"; @@ -68,7 +69,7 @@ You don’t have to track the varying needs of different jurisdictions. **Choose your platform and get started:** -- To send ELR data through HL7 or FHIR: [Contact ReportStream](https://app.smartsheetgov.com/b/form/48f580abb9b440549b1a9cf996ba6957) and learn more at [reportstream.cdc.gov](https://reportstream.cdc.gov). +- To send ELR data through HL7 or FHIR: Contact ReportStream and learn more at [reportstream.cdc.gov](https://reportstream.cdc.gov). - To report through single entry or CSV upload: [Sign up for SimpleReport](https://www.simplereport.gov/getting-started/organizations-and-testing-facilities/onboard-your-organization/) and learn more at [simplereport.gov](https://simplereport.gov). We’ve been encouraged by our work with ReportStream and SimpleReport and how they are helping other organizations. We hope it will simplify your data transfer as well. @@ -95,4 +96,4 @@ And you can easily report to other jurisdictions through the same, single connec If you’re interested, go to [reportstream.cdc.gov](https://reportstream.cdc.gov) to learn more, or email the team at [reportstream@cdc.gov](mailto:reportstream@cdc.gov). -[Let us know](https://app.smartsheetgov.com/b/form/48f580abb9b440549b1a9cf996ba6957) if we can provide any additional content, such as a logo or more copy. +Let us know if we can provide any additional content, such as a logo or more copy. diff --git a/frontend-react/src/content/site.json b/frontend-react/src/content/site.json index 745dcc70b7a..2172da9ecf5 100644 --- a/frontend-react/src/content/site.json +++ b/frontend-react/src/content/site.json @@ -41,6 +41,10 @@ "contactUs": { "name": "Contact us", "url": "https://app.smartsheetgov.com/b/form/95d2f16b772c42d8aaa0ef5db28a6838" + }, + "healthcareOrganizationInterest": { + "name": "Healthcare Organization Interest Form", + "url": "https://app.smartsheetgov.com/b/form/8c71931f25e64e42bf1fef32900bdecd" } }, "assets": { @@ -48,10 +52,21 @@ "path": "/assets/csv/ReportStream-StandardCSV-ExampleData-20220509.csv" }, "programmersGuidePdf": { - "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf" + "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.7.pdf" }, "exampleHl7": { "path": "/assets/hl7/Example-hl7-file.hl7" + }, + "onePager": { + "path": "/assets/pdf/ReportStream_Onepager_20240605.pdf" + } + }, + "external": { + "nistValidationSuite": { + "url": "https://hl7v2-elr-testing.nist.gov/mu-elr/" + }, + "nistGeneralValidationTool": { + "url": "https://hl7v2-gvt.nist.gov/gvt/#/home" } } } diff --git a/frontend-react/src/content/support/index.mdx b/frontend-react/src/content/support/index.mdx index cf7b9734cba..c6c6c7c4bbe 100644 --- a/frontend-react/src/content/support/index.mdx +++ b/frontend-react/src/content/support/index.mdx @@ -302,7 +302,7 @@ import site from "../../content/site.json"; title: "How can I start sending or receiving more conditions?", content: (<>

- If you are interested in additional conditions, let us know more about your needs. Our team will work with you on a plan based on your needs and capacity. Your connection may need some initial updates to be able to support the new conditions. + If you are interested in additional conditions, let us know more about your needs. Our team will work with you on a plan based on your needs and capacity. Your connection may need some initial updates to be able to support the new conditions.

We test the messages based on the requirements of public health entities receiving the data. No data will go live until those testing requirements are met. diff --git a/prime-router/settings/STLTs/Flexion/flexion.yml b/prime-router/settings/STLTs/Flexion/flexion.yml index f736c5ff2eb..1ee010b4027 100644 --- a/prime-router/settings/STLTs/Flexion/flexion.yml +++ b/prime-router/settings/STLTs/Flexion/flexion.yml @@ -166,7 +166,7 @@ initialTime: "00:00" translation: type: "HL7" - schemaName: "classpath:/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml" + schemaName: "classpath:/metadata/hl7_mapping/OML_O21/OML_O21-base.yml" useTestProcessingMode: false useBatchHeaders: false - name: "automated-staging-test-receiver-orders" @@ -185,7 +185,7 @@ initialTime: "00:00" translation: type: "HL7" - schemaName: "classpath:/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml" + schemaName: "classpath:/metadata/hl7_mapping/OML_O21/OML_O21-base.yml" useTestProcessingMode: false useBatchHeaders: false transport: diff --git a/prime-router/settings/STLTs/HHS-Protect/hhs-protect.yml b/prime-router/settings/STLTs/HHS-Protect/hhs-protect.yml new file mode 100644 index 00000000000..a5a23f11cd0 --- /dev/null +++ b/prime-router/settings/STLTs/HHS-Protect/hhs-protect.yml @@ -0,0 +1,52 @@ +- name: "hhsprotect" + description: "HHSProtect" + jurisdiction: "FEDERAL" + stateCode: null + countyName: null + filters: null + featureFlags: null + keys: null + senders: [ ] + receivers: + - name: "mars-otc-elr" + organizationName: "hhsprotect" + topic: "mars-otc-elr" + customerStatus: "active" + translation: + schemaName: "azure:/hl7_mapping/ORU_R01/ORU_R01-deidentified.yml" + format: "HL7" + useBatching: false + defaults: { } + nameFormat: "STANDARD" + receivingOrganization: null + type: "CUSTOM" + jurisdictionalFilter: + - "true" + qualityFilter: [ ] + routingFilter: [ ] + processingModeFilter: [ ] + reverseTheQualityFilter: false + conditionFilter: [ ] + mappedConditionFilter: [ ] + deidentify: true + deidentifiedValue: "" + timing: + operation: "MERGE" + numberPerDay: 1440 + initialTime: "00:02" + timeZone: "EASTERN" + maxReportCount: 1000 + whenEmpty: + action: "NONE" + onlyOncePerDay: false + description: "" + transport: + host: "sftp" + port: "22" + filePath: "./upload" + credentialName: "DEFAULT-SFTP" + type: "SFTP" + externalName: null + enrichmentSchemaNames: [ ] + timeZone: null + dateTimeFormat: "OFFSET" \ No newline at end of file diff --git a/prime-router/settings/STLTs/LA/la-phl.yml b/prime-router/settings/STLTs/LA/la-phl.yml index 17b8e1e5373..63ed169bd95 100644 --- a/prime-router/settings/STLTs/LA/la-phl.yml +++ b/prime-router/settings/STLTs/LA/la-phl.yml @@ -44,7 +44,7 @@ maxReportCount: 100 translation: type: "HL7" - schemaName: "classpath:/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml" + schemaName: "classpath:/metadata/hl7_mapping/OML_O21/OML_O21-base.yml" useBatchHeaders: false receivingApplicationName: "LA-PHL" receivingFacilityName: "LA" diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/OBX-deidentified.yml b/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/OBX-deidentified.yml new file mode 100644 index 00000000000..0aedbd4dabd --- /dev/null +++ b/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/OBX-deidentified.yml @@ -0,0 +1,53 @@ +constants: + hl7ObservationPath: '/PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION(%{resultIndex})' + +elements: + # OBX 14.1 + - name: obx-observation-date-time + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-14-1'] + + # OBX 24.1 + - name: obx-test-performing-org-street-addr + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-1' ] + + # OBX 24.2 + - name: obx-test-performing-org-street-addr-2 + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-2' ] + + # OBX 24.3 + - name: obx-test-performing-org-city + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-3' ] + + # OBX 24.4 + - name: obx-test-performing-org-state + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-4' ] + + # OBX 24.5 + - name: obx-test-performing-org-zip-code + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-5' ] + + # OBX 24.6 + - name: obx-test-performing-org-country + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-6' ] + + # OBX 24.7 + - name: obx-test-performing-org-address-type + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-7' ] + + # OBX 24.8 + - name: obx-test-performing-org-or-geo-dest + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-8' ] + + # OBX 24.9 + - name: obx-test-performing-org-county + value: [ '""' ] + hl7Spec: [ '%{hl7ObservationPath}/OBX-24-9' ] \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/ORU_R01-deidentified.yml b/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/ORU_R01-deidentified.yml index 60bc0323e23..ab99a5f2d6b 100644 --- a/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/ORU_R01-deidentified.yml +++ b/prime-router/src/main/resources/metadata/hl7_mapping/ORU_R01/ORU_R01-deidentified.yml @@ -314,55 +314,13 @@ elements: value: [ '""' ] hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBR-17-7 ] - # OBX 14.1 - - name: obx-observation-date-time - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-14-1 ] - # OBX 24.1 - - name: obx-test-performing-org-street-addr - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-1 ] - # OBX 24.2 - - name: obx-test-performing-org-street-addr-2 - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-2 ] - - # OBX 24.3 - - name: obx-test-performing-org-city - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-3 ] - - # OBX 24.4 - - name: obx-test-performing-org-state - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-4 ] - - # OBX 24.5 - - name: obx-test-performing-org-zip-code - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-5 ] - - # OBX 24.6 - - name: obx-test-performing-org-country - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-6 ] - - # OBX 24.7 - - name: obx-test-performing-org-address-type - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-7 ] - - # OBX 24.8 - - name: obx-test-performing-org-or-geo-dest - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-8 ] - - # OBX 24.9 - - name: obx-test-performing-org-county - value: [ '""' ] - hl7Spec: [ /PATIENT_RESULT/ORDER_OBSERVATION/OBSERVATION/OBX-24-9 ] + - name: obx-deidentified + resource: 'Bundle.entry.resource.ofType(Observation)' + condition: '%resource.count() > 0' + schema: classpath:/metadata/hl7_mapping/ORU_R01/OBX-deidentified.yml + resourceIndex: resultIndex # Suppress all notes as they may contain PII data - name: patient-note diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml deleted file mode 100644 index 85726a28159..00000000000 --- a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml +++ /dev/null @@ -1,8 +0,0 @@ -# $schema: ./../../../../../../../metadata/json_schema/fhir/fhir-to-hl7-mapping.json - -extends: classpath:/metadata/hl7_mapping/OML_O21/OML_O21-base.yml - -elements: - - name: order-observation-specimen-action-code - value: [ '"P"' ] - hl7Spec: [ '/ORDER/OBSERVATION_REQUEST/OBR-11' ] diff --git a/prime-router/src/testIntegration/resources/datatests/HL7_to_FHIR_to_HL7/ORU_deidentified-expected.hl7 b/prime-router/src/testIntegration/resources/datatests/HL7_to_FHIR_to_HL7/ORU_deidentified-expected.hl7 index 11c0691cf00..7c0ee9954b2 100644 --- a/prime-router/src/testIntegration/resources/datatests/HL7_to_FHIR_to_HL7/ORU_deidentified-expected.hl7 +++ b/prime-router/src/testIntegration/resources/datatests/HL7_to_FHIR_to_HL7/ORU_deidentified-expected.hl7 @@ -3,7 +3,7 @@ SFT|CAREEVOLUTION|2022|MMTC.STAG|16948||20240311 PID|1||92041f50874c4595955d47f7ae4981c5^^^MMTC.STAG&2.16.840.1.113883.3.8589.4.2.106.2&ISO^PI||Deidentified^Deidentified^Deidentified||Deidentified||||Deidentified^Deidentified^Deidentified^PIDSTATE!^PIDPOSTAL!^USA^^^PIDCOUNTY!||^^^Deidentified^^Deidentified^Deidentified^^^^^PIDUNFORMATPHONE! OBR|1||^MMTC.STAG^2.16.840.1.113883.3.8589.4.2.106.2^ISO|97097-0^SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay^LN^^^^2.71|||DATE!|||||||||||||||DATE!|||F OBX|1|CWE|97097-0^SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay^LN^^^^2.71||260373001^Detected^SCT^^^^20200901||||||F||||00Z0000042||BD Veritor At-Home COVID-19 Test_Becton, Dickinson and Company (BD)_EUA^^99ELR^^^^Vunknown||20240412230603||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042 -OBX|2|NM|35659-2^Age at specimen collection^LN^^^^2.71||44|a^year^UCUM^^^^2.1|||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042|14 Fake AtHome Test Street^^Fake City|||||QST -OBX|3|CWE|95419-8^Whether patient has symptoms related to condition of interest^LN^^^^2.71||Y^Yes^HL70136^^^^2.5.1||||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042|14 Fake AtHome Test Street^^Fake City|||||QST -OBX|4|DT|65222-2^Date and time of symptom onset^LN^^^^2.71||20240411||||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042|14 Fake AtHome Test Street^^Fake City|||||QST +OBX|2|NM|35659-2^Age at specimen collection^LN^^^^2.71||44|a^year^UCUM^^^^2.1|||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042||||||QST +OBX|3|CWE|95419-8^Whether patient has symptoms related to condition of interest^LN^^^^2.71||Y^Yes^HL70136^^^^2.5.1||||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042||||||QST +OBX|4|DT|65222-2^Date and time of symptom onset^LN^^^^2.71||20240411||||||F||||00Z0000042||||||||SA.OTCSelfReport^^^^^&2.16.840.1.113883.3.8589.4.1.152&ISO^XX^^^00Z0000042||||||QST SPM|1|^ff98cc992d5146e7916a5f0b873e534f&MMTC.STAG&2.16.840.1.113883.3.8589.4.2.106.2&ISO||697989009^Anterior nares swab^SCT^^^^20200901|||||||||||||20240412230603-0500|20240412230603-0500 \ No newline at end of file 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 d63ebd3de62..a233d0f80c6 100644 --- a/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv +++ b/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv @@ -23,7 +23,6 @@ HL7_to_FHIR_to_HL7/hci.hl7,,HL7_to_FHIR_to_HL7/hci-expected.hl7,classpath:/metad FHIR_to_HL7/sample_SR_1_20230302-0001.fhir,,FHIR_to_HL7/sample_SR_1_20230302-0001.hl7,,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml",ca-test.default-receiver,"","" FHIR_to_HL7/sample_SR_1_20230302-0001-missing-data.fhir,,FHIR_to_HL7/sample_SR_1_20230302-0001-missing-data.hl7,,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml",ca-test.default-receiver,"","" FHIR_to_HL7/sample_SR_2_20231024-0002.fhir,,FHIR_to_HL7/sample_SR_2_20231024-0002.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/NY/NY-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" -FHIR_to_HL7/sample_OML_20230831-0001.fhir,,FHIR_to_HL7/sample_OML_20230831-0001.hl7,classpath:/metadata/hl7_mapping/receivers/Flexion/etor-oml-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/Flexion/etor-sender-transform.yml","","","" FHIR_to_HL7/sample_RI_20231213-0001.fhir,,FHIR_to_HL7/sample_RI_20231213-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/RI/RI-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/simple_report_with_date_aoe_question.fhir,,FHIR_to_HL7/simple_report_with_date_aoe_question.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","","","" HL7_to_FHIR/sample_orm_20230809-001.hl7,,HL7_to_FHIR/sample_orm_20230809-001-with-enrichment.fhir,,FHIR,PASS,"","","","","","classpath:/enrichments/testing2.yml"