The pixm-iti104 component provides interfaces for actors of the Patient Identity Feed FHIR IHE transaction (ITI-104), which is described in the IHE IT Infrastructure Technical Framework Supplement, Patient Identifier Cross-reference for Mobile (PIXm), Section 2:3.104.

Actors

The transaction defines the following actors:

ITI-104 actors
ITI-104 transaction and actors

Producer side corresponds to the Patient Identity Source actor. Consumer side corresponds to the Patient Identifier Cross-Reference Manager actor.

Dependencies

In a Maven-based environment, the following dependency must be registered in pom.xml:

    <dependency>
        <groupId>org.openehealth.ipf.platform-camel</groupId>
        <artifactId>ipf-platform-camel-ihe-fhir-r4-pixpdq</artifactId>
        <version>${ipf-version}</version>
    </dependency>

Endpoint URI Format

Producer

The endpoint URI format of pixm-iti104 component producers is:

pixm-iti104://hostname:port/path/to/service[?parameters]

where hostname is either an IP address or a domain name, port is a number, and path/to/service represents additional path elements of the remote service.

Consumer

The endpoint URI format of pixm-iti104 component consumers is:

pixm-iti104://serviceName[?parameters]

The resulting URL of the exposed FHIR REST Service endpoint depends on the configuration of the deployment container. Consider a Tomcat container on host eHealth.server.org is configured in the following way:

port = 8888
contextPath = /IHE
servletPath = /fhir/*

Then the pixm-iti104 consumer will be available for external clients under the URL http://eHealth.server.org:8888/IHE/fhir.

URI parameters controlling the transaction features are described below.

Messages

ITI-104 consists of conditional updates and deletes of Patient resources, conditional on the patient identifier in the domain of the Patient Identity Source:

Message HTTP request Remark
Add/Revise Patient PUT Patient?identifier=system\|value Creates the patient if it does not exist yet
Resolve Duplicate Patient PUT Patient?identifier=system\|value The subsumed patient carries a replaced-by link to the surviving patient
Remove Patient DELETE Patient?identifier=system\|value Only with the Remove Patient Option

The consumer rejects requests that are not conditional on exactly one identifier parameter with both system and value (e.g. PUT Patient/123) with 400 Bad Request, before the route is called.

For Resolve Duplicate Patient, PixmPatient.addReplacedByLink(Identifier) adds the replaced-by link and marks the subsumed patient inactive, as the PDQm Patient profile requires active along with a link.

Consumer

The route receives

  • the Patient as body for Add/Revise Patient and Resolve Duplicate Patient, and the Identifier of the patient to be removed for Remove Patient
  • the identifier of the condition as Iti104Parameters in the Constants.FHIR_REQUEST_PARAMETERS header

and must return a MethodOutcome. If a conditional update has created the patient, MethodOutcome.setCreated(true) must be called, so that the consumer responds with 201 Created and audits a create.

ITI-104 relies on the FHIR conditional update and conditional delete semantics, which the route has to implement, as only it knows the patients. In particular, if the condition matches more than one patient, the route shall reject the request by throwing a PreconditionFailedException (412 Precondition Failed). A conditional delete that matches no patient is not an error.

Remove Patient Option

By default, the consumer supports the Remove Patient Option and advertises conditional delete in its CapabilityStatement. A Patient Identifier Cross-reference Manager that does not support this option, e.g. because it proxies ITI-104 to a PIX Feed, can use the Iti104UpdateResourceProvider instead, which only accepts conditional updates. It is configured with the resourceProvider endpoint parameter:

<bean id="iti104UpdateProvider"
      class="org.openehealth.ipf.commons.ihe.fhir.iti104.Iti104UpdateResourceProvider"/>
    from("pixm-iti104://service?resourceProvider=#iti104UpdateProvider")

Producer

The producer sends a Patient in the message body as conditional update, and an Identifier or a system|value string as conditional delete. The identifier of the condition is taken from

  1. the Iti104Parameters in the Constants.FHIR_REQUEST_PARAMETERS header, e.g. when forwarding a request received by a pixm-iti104 consumer
  2. the Iti104Constants.ITI104_PATIENT_IDENTIFIER_HEADER header, as Identifier or system|value string
  3. the message body: the identifier to be removed, or the only identifier of the Patient

A Patient with more than one identifier therefore requires one of the headers.

Example

This is an example on how to use the component on the consumer side:

    from("pixm-iti104://service?audit=true")
      .process(itiRequestValidator())
      .process(myProcessor)
      // add, revise, merge or remove the patient and create a MethodOutcome

and on the producer side:

    from("direct:feed")
      .setHeader(Iti104Constants.ITI104_PATIENT_IDENTIFIER_HEADER, constant("urn:oid:1.2.3.4|0815"))
      .to("pixm-iti104://pixm.example.org/fhir")

Validation

With resource validation, a Patient that claims to conform to the PIXm Patient profile (https://profiles.ihe.net/ITI/PIXm/StructureDefinition/IHE.PIXm.Patient) or the PDQm Patient profile (https://profiles.ihe.net/ITI/PDQm/StructureDefinition/IHE.PDQm.Patient) in meta.profile is validated against this profile, using the official PIXm and PDQm implementation guide packages. Any other Patient is validated against the base FHIR Patient.

Auditing

ITI-104 is audited as DICOM Patient Record event with the action Create, Update or Delete. With the FHIR serialization strategies, the audit records conform to the PIXm AuditEvent profiles:

Actor Add/Revise, Resolve Duplicate Remove Patient
Patient Identity Source IHE.PIXm.Feed.Update.Audit.Source IHE.PIXm.Feed.Delete.Audit.Source
Patient Identifier Cross-reference Manager IHE.PIXm.Feed.Create.Audit.Manager if the patient has been created, IHE.PIXm.Feed.Update.Audit.Manager otherwise IHE.PIXm.Feed.Delete.Audit.Manager

The Patient Identity Source cannot tell whether its conditional update has created a patient, so it always records an update, as PIXm defines no Create profile for it.

Translation into PIX Feed

IPF comes with translators to translate ITI-104 requests into PIX Feed (ITI-8) messages and the acknowledgements back into responses, so that a Patient Identifier Cross-reference Manager can proxy ITI-104 to an HL7v2-based PIX Manager. PIX Feed has no equivalent of Remove Patient.

Basic Common Component Features

FHIR Component Features