QDX

Setup guide

QDX in OpenEMR: setup guide for your team

QDX lets clinicians order lab tests from the patient's chart in OpenEMR. Patients go to a patient service center for their visit (availability varies by state, patient and test). This guide lists what your OpenEMR administrator sets up.

On this page

1. Where each part stands

PartStatus
Ordering from the chartWorking on OpenEMR's public demo (2026-09-29). QDX was launched from a patient's summary page, the patient's demographics were filled in, and a test order was placed.
Results into the OpenEMR chartThrough OpenEMR's own lab results import (HL7). Tested 2026-09-29 on a self-hosted OpenEMR 7.0.3: QDX's result message was matched to the patient and stored with each value, its units, range and flag, as a final report. OpenEMR's FHIR API offers outside apps no write access, so this is the route.
Other waysQDX can also send every result the other ways your practice chooses: the QDX portal, fax, email, a phone call, FHIR, a webhook, or PDF.

2. Register QDX in OpenEMR

Register QDX as a confidential SMART app, either under Administration > System > API Clients, or through OpenEMR's registration endpoint (<your OpenEMR>/oauth2/default/registration):

FieldValue
Application typeConfidential (private). QDX signs in with its own key, so no secret is exchanged: token endpoint auth method private_key_jwt, JWKS URI https://qdx.systems/portal/api/emr/jwks/nonprod.json for testing. QDX provides the production key set when you go live.
Redirect URIhttps://qdx.systems/app/launch.html
Launch URIhttps://qdx.systems/app/launch.html?org=<your QDX organization ID>. Through the registration endpoint, this is the initiate_login_uri field.
Scopesopenid fhirUser launch api:fhir user/Patient.read user/Practitioner.read user/Encounter.read user/Condition.read user/Person.read. OpenEMR refuses FHIR reads without api:fhir, and names a user who is not set up as a provider as a Person.

Then enable the client (Administration > System > API Clients > Edit > Enable Client). "QDX Lab Ordering" appears under SMART Enabled Apps on each patient's summary page.

What the clinician sees:

  • An OpenEMR sign-in and permission screen inside the app the first time (OpenEMR asks the user to authorize the app).
  • The patient's demographics filled in, and the chart's ICD-10 conditions offered, when the conditions carry ICD-10 codes.
  • The first time each OpenEMR user opens QDX, they choose which of your verified clinicians they are. QDX remembers the choice.

3. Results into the chart (HL7)

SettingValue
Procedure providerAdd a procedure provider (Procedures > Providers): name "QDX", direction results only, protocol local filesystem, results path a folder on your server (for example /var/qdx-results), and QDX as the sending facility.
DeliveryIn QDX, Settings > Results delivery: HL7 over SFTP to your server, into that folder. QDX sends its HL7 v2.3 result message (ORU^R01), each value with its LOINC code where known and the performing lab's code.
ImportProcedures > Electronic Reports processes new results. OpenEMR matches each result to the patient by name and date of birth, and asks when a match is unclear.

4. In QDX

Your QDX administrator adds the connection under Settings > EMR connections: OpenEMR, the FHIR base URL (<your OpenEMR>/apis/default/fhir), the client ID OpenEMR issued, your OpenEMR address as a frame site, and test or live mode.

5. Results by fax, for any practice

Until results are filed into your chart (or alongside it), QDX can fax each result report to your EMR's fax inbox. See Results into any EMR by fax.

6. Questions

Write to ops@qdx.systems.