Product type
EHR and EMR testing services
An EHR holds the legal record of care, so a defect that drops or silently reorders a value corrupts evidence a clinician and later a court will read. Testing an EHR covers the audit trail as a record in its own right, every interface that writes into the chart, and the code sets that decide what a stored diagnosis means.
- Speaks
- HL7 v2, FHIR R4, ICD-10
What actually breaks in an EHR?
Data that goes missing without raising anything. An EHR is where an encounter becomes a record that other people rely on afterwards, so the failures that matter in this class of product are the quiet ones: an allergy that arrived on an inbound message and never reached the chart, a corrected laboratory result that sits beside the original instead of replacing it, a note saved by two clinicians in the same minute where one version wins and neither of them is told. Each of those produces a screen that looks right. The defect is visible only by comparing what was sent with what a clinician can now read, which is a comparison a feature test never makes.
The second family of failures is about the record of the record. Reading a chart is itself an event the system is required to capture, so a build can pass every functional check while the entry that proves who opened the chart is missing, or is written under the service account of the integration engine rather than under the person who clicked. Nothing in the product misbehaves. The evidence is simply not there when someone asks for it, and by then the release that lost it is months old.
The third is context. A records system is worked in several windows at once, with a patient selected in one place and an order written in another, and the binding between the two is held partly by the application and partly by the clinician's attention. When that binding slips, the order is valid, the audit trail is complete, and the entry lands on the wrong person. This is the failure mode behind the usability evidence the certification programme asks for at section 170.315(g)(3), Safety-enhanced design, which requires at least ten test participants and a report that ties each task back to the criterion it belongs to.
Which rules does a record system answer to?
More than one at once, and they do not share a vocabulary. A hospital records system in the United States sits inside three separate regimes, and evidence produced for one of them does not transfer to another without a mapping written by hand.
| Where the obligation sits | What it binds in an EHR |
|---|---|
| 45 CFR 170.102, Base EHR | The criteria a Health IT Module has to hold before it counts as a Base EHR at all |
| 45 CFR 170.315(d), thirteen privacy and security criteria | Auditable events, audit reports, amendments, automatic access time-out, emergency access, integrity, accounting of disclosures and the rest of the certification security set |
| 45 CFR 164.312, HIPAA technical safeguards | Access control, audit controls, integrity, authentication and transmission security over the same data, judged by a different reader |
| 45 CFR 162.1000(a) | Which release of a code set decides whether a stored diagnosis is valid |
| 45 CFR 170.315(b)(3), electronic prescribing | The transactions a prescription has to be written in, and the unit and decimal rules the field has to enforce |
The privacy and security block is the one that surprises a team reading only the HIPAA text. section 170.315(d) runs from (d)(1) through (d)(13) with no gaps, and several of its criteria have no HIPAA counterpart at all: (d)(4) Amendments, (d)(11) Accounting of disclosures and (d)(12) Encrypt authentication credentials are certification requirements drawn up for a records system rather than restatements of a safeguard. The reverse also holds, which is why ONC certification testing requirements and HIPAA testing requirements for software are read side by side when the scope is set, and why a coverage matrix that shows which check answers which criterion is worth building before any of it is run.
Two prescribing rules sit inside the same criterion and are cheap to test. section 170.315(b)(3)(ii)(E) limits a user to prescribing oral liquid medications in metric standard units of mL rather than cc, and (F) requires a zero to be inserted before the decimal point for amounts under one, and forbids a trailing zero after it. Both are properties of a text field, and neither appears in any requirement a product manager writes.
What does an EHR suite have to exercise that a generic one does not?
Five paths, and each of them exists because the record has to survive being questioned later rather than because a user asked for it.
The paths a records system is tested on
- Read access. Open a chart as each role, then read the log. The entry is the assertion, and the screen is the setup for it.
- Emergency access. section 164.312(a)(2)(ii) makes the emergency access procedure a required implementation specification. It exists to let a clinician reach a chart the access rules would otherwise close, so every assertion the rest of the suite makes about permissions is suspended inside it. Run it, then confirm the override was itself recorded.
- Correction. Amend a value that is already in the record, then confirm the previous value is still retrievable with its own timestamp and author. The certification programme carries a criterion on this ground at section 170.315(d)(4), Amendments, and what the test shows is that the earlier state survived the edit.
- Non-human access. section 164.312(a)(1) covers persons and software programs holding access rights, so the interface accounts, background jobs and report extracts each need a case of their own.
- Retention. section 164.316(b)(2)(i) requires Security Rule documentation to be kept six years from creation or from the date it was last in effect, whichever is later, and a certified developer keeps records demonstrating compliance for ten years from first certification under section 170.402(b)(1). A purge job that predates either number is a defect nobody has a ticket for.
The clinical content itself is the part a functional suite covers well and a regulatory reader looks at last. What separates an EHR test plan from a general application test plan is that every one of the five paths above produces a document rather than a screen, and the document is what gets read in an investigation.
Where do the interface defects concentrate?
At the boundary, because a records system is almost never alone. Registration arrives from one application, results from another, orders leave for a third, and a patient-facing API answers on top of all of it. Each of those is a place where two teams agreed on a specification and one of them tested it.
On the messaging side, the trap is coverage that looks complete. HL7 v2 shares a message structure between trigger events, so ADT_A01 carries A01, A04, A08 and A13, and a suite that exercises the structure once has exercised one of the four events routed through it. Local Z-segments make it worse in the other direction: both applications depend on a field that appears in neither specification, so the traffic works every day in production and fails the first validation run against a profile. The acknowledgement path is usually the thinnest part of a suite, because MSH-15 and MSH-16 are left empty and nothing ever exercises the rejection codes the receiver can return. What ties all three together is where the assertion is made: an interface engine that accepted a message has proved nothing about the chart, so the end of the test is a field a clinician can see. How to test an EHR integration sets out that scope.
On the API side the trap is the opposite: a claim that cannot be failed. FHIR conformance is claimed only for the functionality the served CapabilityStatement declares, so a contract clause reading "supports FHIR" gives a tester no assertion to write. Must Support is the sharpest case of it. R4 flags no element itself and leaves the meaning of support to whoever wrote the profile, so until that author has written down whether support means storing an element, showing it to a user, or acting on it, the criterion has no pass and no fail. Two checks are worth running early on an EHR API: compare the CapabilityStatement the server returns against the endpoints that actually answer, and stop reading the HTTP status from a validation call, since the operation returns success whether or not the resource was valid.
Coded content is the third boundary, and it moves on a calendar the product does not control. A diagnosis is stored once and read for years, so a system that validates against whichever code file is loaded today will reject records that were correct when they were written. ICD-10 code mapping testing requirements sets out the structural rules a validator has to encode; the part that concerns an EHR specifically is that the date of service has to reach the validation call, and that a description copied into a chart at the time of coding can drift from the current one while the code stays valid. All three boundaries are covered by healthcare interoperability testing.
What happens when the record moves in or out?
A migration is a one-way door. Once the source system is decommissioned, the only copy of what a clinician wrote is the one that landed, and a comparison against the original is no longer available to anyone. That changes what the testing has to produce: reconciliation evidence built while both systems are still standing, rather than a defect list gathered afterwards.
The failure that does the most damage is a mapping written as one to one. Code sets are remapped over time, and one current code can stand behind several earlier ones, so a load that stops at the first match discards the others and reports success. Nothing in a row count shows it. It surfaces years later, in a re-coded historical dataset that a clinician reads as fact, which is why the reconciliation is built around clinical meaning instead of record totals. Free text attachments, superseded results and deleted or amended entries each need their own rule, agreed before the load rather than discovered during it.
Migration testing on a records system is therefore scoped from the source query to the rendered chart, and the reconciliation artefacts are the deliverable. Healthcare data migration testing covers how that comparison is structured while both systems are still available.
Where does EHR testing go wrong?
- The suite asserts on the screen and never on the log, so the audit evidence for 164.312(b) and for 170.315(d)(2), (d)(3) and (d)(10) is first read during an investigation.
- Emergency access is written up in a policy and never run against a build, so its behaviour is first observed during the incident it was built for.
- Access control is exercised for human roles only, while the integration accounts and background jobs hold standing access nobody reviews.
- One HL7 message structure is tested and the trigger events sharing it are recorded as covered.
- The FHIR CapabilityStatement is written by hand, drifts from the deployed configuration, and nothing compares the two.
- The current code file is loaded once per environment, so historical records are judged against a release that did not exist when they were written.
- A correction overwrites the value it corrects, so the record shows the current state and no trace of the state it replaced.
- The certification scope is priced from the criteria the team asked for, before section 170.550(g) and (h) attach the dependent ones.
- Migration is verified by comparing row counts, so a mapping that dropped the second and third predecessor of a code passes.
- Test environments are seeded from a production copy, which puts real patient data under a set of controls that environment never inherited.
What do we run against an EHR?
Work starts from the record rather than from the feature list: what enters the chart, from where, who is allowed to read it, what happens when it is corrected, and what evidence each of those events leaves behind. From that map the suite splits into the interface layer, which is tested against a profile or a CapabilityStatement rather than against a prose specification, and the record layer, which is tested by reading the log and the export back out of the system.
Test data is the first decision rather than the last. Registration and results feeds carry patient identifiers, so an EHR suite either runs on generated records or runs under terms agreed in advance. Which of the two applies is decided at the start, under how we work with protected health information. The same question decides whether a defect can be reproduced against a production copy or has to be recreated synthetically.
The certification decision belongs to an ONC-Authorized Certification Body and the compliance position belongs to the organisation that ships the product. What testing produces is the evidence underneath both: a coverage matrix from criterion to check to result, validation reports per interface, audit trail evidence tied to named builds, and reconciliation records for anything that moved.
What do buyers ask about this?
- Is our EHR in scope for ONC certification?
- The ONC Health IT Certification Program is voluntary, so nothing obliges an EHR developer to seek certification. What the programme does fix is the shape of the scope once a developer enters it: 45 CFR 170.102 defines a Base EHR as a Health IT Module holding 170.315(a)(1), (2), or (3); (a)(5) and (14), (b)(1), (c)(1), and (g)(7), (9), (10); and (h)(1) or (2), with (b)(11) on and after 1 January 2025 and (b)(4) on and after 1 January 2028. That list is the starting scope for a records system, and section 170.550(g) and (h) attach further criteria on top of it.
- Can an outside test team work on our production EHR?
- It depends on what the team touches and what was signed first. A supplier that creates, receives, maintains or transmits protected health information on your behalf is a business associate under the definition at 45 CFR 160.103, which names quality assurance among the functions in scope. Most EHR test work can run on generated records instead, and the cases that cannot, such as reproducing a defect against a production copy, run under a written contract agreed before any environment is opened.
- Does the audit trail need its own tests?
- Yes, because it is evidence rather than a feature. 45 CFR 164.312(b) makes audit controls a required standard with no implementation specification under it, and 164.308(a)(1)(ii)(D) requires the recorded activity to be examined afterwards. On the certification side the obligation splits across three separate criteria: 170.315(d)(2) Auditable events and tamper-resistance, (d)(3) Audit report(s) and (d)(10) Auditing actions on health information. A suite that checks the feature and not the entry it produced leaves all four unanswered.
- What does the 1 October code set update do to our test suite?
- FY2027 ICD-10-CM takes effect on 1 October 2026 and deletes 30 codes that were valid the day before, so a record carrying one of them is correct for a September date of service and wrong for an October one. Under 45 CFR 162.1000(a) the code set that decides is the one valid when the care was furnished, so the suite has to hold more than one release at a time and pass the date of service into every validation call.
Which standards does this touch?
Which of our services test it?
Is this the situation you are in?
How is the work done in practice?
- Audit trail testing requirements
- FHIR conformance testing tools and what each one proves
- How do you test pharmacy software and e-prescribing?
- How to test an EHR integration
- How to test an HL7 v2 interface
- How to test with synthetic PHI data
- PHI de-identification for test environments
- Test data management for healthcare compliance
What does validating your product actually involve?
Answer four questions about your markets, your product type and its integrations. You get the standards that reach you, the artefacts each one asks you to produce, and which of them a test supplier delivers.