Healthcare/TEFCA, USA
Regulatory guide

TEFCA and information blocking

What the US nationwide exchange framework and the information blocking rule mean for the integration layer - who connects to what, what the penalties are and what your systems must be able to do.

$1Mmax penalty per violation
R4TEFCA FHIR version
9designated QHINs
patient_query.py
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class PatientQuery(Service):
    name = 'demo.tefca.patient-query'

    def handle(self) -> 'None':

        # A FHIR R4 query against a network endpoint
        client = self.fhir['FHIR.Network']

        patients = client.resources('Patient').search(
            family = 'Chalmers',
            birthdate = '1974-12-25',
        )

        for patient in patients.fetch():
            self.logger.info('Match: %s', patient['id'])

What is TEFCA and does it require FHIR?

TEFCA - the Trusted Exchange Framework and Common Agreement - is the US nationwide health information exchange framework, administered by The Sequoia Project on behalf of ASTP/ONC. Organizations do not connect to TEFCA directly - they connect through a QHIN, a Qualified Health Information Network, and the QHINs exchange with each other.

The designated QHINs as of 2026 include eHealth Exchange, Epic Nexus, CommonWell, Health Gorilla, MedAllies, KONZA, Surescripts, eClinicalWorks and Oracle Health.

QHINs are moving toward FHIR-based exchange under the FHIR R4 API standards referenced at 45 CFR 170.215, alongside the document-based exchange that networks started with. For an integration team this means the FHIR-facing capabilities below are what TEFCA readiness looks like in practice.

What is the information blocking rule and what are the penalties?

The information blocking rule, from the 21st Century Cures Act, prohibits practices likely to interfere with the access, exchange or use of electronic health information, unless an exception applies.

For health IT developers of certified health IT, health information networks and health information exchanges, the HHS-OIG final rule - finalized July 3, 2023, effective September 1, 2023, codified at 42 CFR Part 1003 Subpart N - authorizes civil monetary penalties of up to $1 million per violation.

For providers, the HHS final rule of June 24, 2024, effective July 31, 2024, imposes disincentives instead - for example, a hospital that loses "meaningful EHR user" status under the Medicare Promoting Interoperability Program faces a 75% reduction of its market basket increase. The rule text is published in the eCFR at 45 CFR Part 171, and the HTI-2 rulemaking finalized the TEFCA Manner Exception in December 2024.

What must my integration layer be able to do?

Whatever the network topology above you, the technical requirements on the integration layer reduce to a short list:

CapabilityWhat it meansWith Zato
Receive inbound FHIR queriesAnswer FHIR-shaped REST requests against your dataREST channels in front of internal systems
Send outbound FHIR requestsQuery other participants' R4 endpointsOutgoing FHIR connections with self.fhir
Transform internal formats to FHIR R4HL7 v2 feeds and databases mapped to resourcesPython transformation services
Maintain audit trailsWho asked for what, when, and what was returnedLogging in services and channels

How do I query and return FHIR data from Python?

The outbound side is an outgoing FHIR connection, the inbound side is a REST channel whose service returns a FHIR-shaped response assembled from your systems. Zato is the client and integration layer in front of your systems here - it is not a QHIN and not a FHIR server.

exchange_ready.py
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class ReturnPatientData(Service):
    """ Exposed through a REST channel, answers FHIR-shaped queries.
    """
    name = 'demo.tefca.return-patient-data'

    def handle(self) -> 'None':

        # The identifier the caller is asking about
        mrn = self.request.payload['identifier']

        # Read the data from the FHIR store behind us ..
        client = self.fhir['FHIR.Internal']

        patient = client.resources('Patient').search(
            identifier = f'urn:mrn|{mrn}',
        ).first()

        # .. audit what was asked and what is returned ..
        self.logger.info('Query for %s, returning %s', mrn, patient['id'])

        # .. and answer with a FHIR-shaped payload.
        self.response.payload = patient.serialize()

Which information blocking exceptions matter for integrations?

Not every refusal to share is information blocking - the rule defines exceptions, and two groups matter most for engineers. The first covers not fulfilling a request - privacy, security, preventing harm, infeasibility. The second covers how a request is fulfilled - the Manner Exception and, since HTI-2, the TEFCA Manner Exception, which lets participants satisfy requests via TEFCA exchange when both sides are part of it.

The engineering consequence is that "our interface cannot do that" is not a defensible answer - the integration layer must make fulfilling requests technically routine, so that any refusal is a documented policy decision under an exception, not a technical limitation.

Frequently asked questions

Exchange started document-based, and FHIR R4 exchange is being phased in under the FHIR roadmap, with the R4 API standards at 45 CFR 170.215 as the reference point. New integration work should assume FHIR R4.

Preventing harm, privacy, security, infeasibility, health IT performance, manner, fees, and licensing - with the TEFCA Manner Exception added by HTI-2 in December 2024. Each has conditions that must be met and documented.

Neither. Zato is the integration layer inside your organization - it connects your systems to FHIR endpoints, transforms data and exposes REST APIs in front of anything, while QHIN participation is a contractual and operational relationship your organization enters through a network.

HHS-OIG investigates and imposes the civil monetary penalties on developers, networks and exchanges, while CMS applies the provider disincentives through its programs.

Ready to make your systems exchange-ready?

Get started with Zato and build the FHIR-facing layer your compliance work depends on.

Open source In Python