Skip to content

Patient Demographics Query

Transaction to search for patient identities and data from a community using the patient demographic data as search criteria. Primary systems may use this transaction to verify if a patient uses a Swiss EPR and is already registered in the community.

Overview

Primary systems may use this transaction to search for patients which are already registered in the community, either because the patient opened the Swiss EPR in the community or because the patient opened the Swiss EPR in a remote community and was already registered by another primary system to store documents. In the Swiss EPR the IHE PDQV3 profile and transactions shall be used to search for patients by demographic data.

To search for patients the primary system shall perform a Patient Demographic Query [ITI-47]. Within the query request the primary system shall provide the demographic data as search criteria. In the Swiss EPR each community must support the name, birthdate, gender and nationality. Individual communities may support other demographic data (e.g., address and other contact data).

The community sends a response with all patient data sets matching the search criteria. Each patient data set contains the known demographic data, the EPR-SPID and the assigned ID. The response contains the master data set as well as all known patient data sets, as registered by other primary systems.

Transaction

Message Semantics

Messages are encoded as described in the HL7 V3 standard with restrictions defined in the IHE PDQ V3 profile and the ordinances to the Swiss EPR.

Request Message

Since the HL7 V3 standard is very generic, the request message is quite lengthy and needs some background information to interpret. The raw version of a request message may be found here. For a step by step interpretation of the request message, see section below.

Message Interpretation

The request message is not very complex, but lengthy due to the genericity of the HL7 V3 standard. Therefore the following step by step interpretation may be of help to interpret the response.

The SOAP Header element conveys the following information:

  • To element: The URL of the provide an register document set service.
  • MessageID element: a UUID of the message.
  • Action element: The SOAP action identifier of the request as defined in the IHE ITI Technical Framework.
SOAP header
 <soap:Header>
  <Action soap:mustUnderstand="true"
   xmlns="http://www.w3.org/2005/08/addressing">urn:hl7-org:v3:PRPA_IN201305UV02</Action>
  <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:9fe7246b-8fab-4dd7-976e-c81bc1955575</MessageID>
  <To xmlns="http://www.w3.org/2005/08/addressing">https://epd-test.ith-icoserve.com:7443/PIXPDQ/services/PIXPDQV3ManagerService</To>
  <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
   <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
  </ReplyTo>
 </soap:Header>

For the patient demographic query no Security header element is required, since in the Swiss EPR the access to the patient data is authorized for all applications, which are registered and authenticate with a client certificate (see section Security Requirements).

The SOAP Body element conveys the administrative information required for a PRPA_IN201305UV02 message in HL7 V3 syntax in which primary systems must set the following values:

  • creationTime: A timestamp in unix time format.
  • sender : The OID of the sender application initiating the request.
  • receiver: The OID of the receiver application which shall respond to the request.
PRPA_IN201305UV02 message
   <id root="1.2.3.4"/>
   <creationTime value="20230911143411"/>
   <interactionId extension="PRPA_IN201305UV02" root="2.16.840.1.113883.1.6"/>
   <processingCode code="P"/>
   <processingModeCode code="T"/>
   <acceptAckCode code="AL"/>
   <receiver typeCode="RCV">
    <device classCode="DEV" determinerCode="INSTANCE">
     <id root="1.3.6.1.4.1.21367.2017.2.5.97"/>
     <asAgent classCode="AGNT">
      <representedOrganization classCode="ORG" determinerCode="INSTANCE">
       <id root="1.3.6.1.4.1.21367.2017.2.7.127"/>
      </representedOrganization>
     </asAgent>
    </device>
   </receiver>
   <sender typeCode="SND">
    <device classCode="DEV" determinerCode="INSTANCE">
     <id root="1.2.3.4"/>
    </device>
   </sender>

The query is encoded in a HL7 V3 controlAct object as follows:

PRPA_IN201305UV02 message
   <controlActProcess classCode="CACT" moodCode="EVN">
    <code code="PRPA_TE201305UV02" codeSystem="2.16.840.1.113883.1.6"/>
    <queryByParameter>
     <queryId extension="16944356511831" root="1.2.840.114350.1.13.28.1.18.5.999"/>
     <statusCode code="new"/>
     <responseModalityCode code="R"/>
     <responsePriorityCode code="I"/>
     <parameterList>
      <livingSubjectId>
       <value extension="08242eb8-dd47-4298-8d2f-25d60114f137" root="1.1.1.2.2"/>
       <semanticsText>LivingSubject.id</semanticsText>
      </livingSubjectId>
      <otherIDsScopingOrganization>
       <value root="1.3.6.1.4.1.21367.2017.2.5.93"/>
       <semanticsText>OtherIDs.scopingOrganization.id</semanticsText>
      </otherIDsScopingOrganization>
      <otherIDsScopingOrganization>
       <value root="2.16.756.5.30.1.127.3.10.3"/>
       <semanticsText>OtherIDs.scopingOrganization.id</semanticsText>
      </otherIDsScopingOrganization>
     </parameterList>
    </queryByParameter>
   </controlActProcess>

The HL7 controlAct object conveys the query search parameter in a HL7 V3 parameterList element.

In the above example these are

  • the livingSubjectId conveying the local ID in the primary system of the patient data to search for,
  • the otherIDsScopingOrganization to match with the registered patient data,
parameterList element
     <parameterList>
      <livingSubjectId>
       <value extension="08242eb8-dd47-4298-8d2f-25d60114f137" root="1.1.1.2.2"/>
       <semanticsText>LivingSubject.id</semanticsText>
      </livingSubjectId>
      <otherIDsScopingOrganization>
       <value root="1.3.6.1.4.1.21367.2017.2.5.93"/>
       <semanticsText>OtherIDs.scopingOrganization.id</semanticsText>
      </otherIDsScopingOrganization>
      <otherIDsScopingOrganization>
       <value root="2.16.756.5.30.1.127.3.10.3"/>
       <semanticsText>OtherIDs.scopingOrganization.id</semanticsText>
      </otherIDsScopingOrganization>
     </parameterList>

The query supports many more search options and filter parameter. For a documentation of the options see IHE PDQ V3.

Response Message

Since the HL7 V3 standard is very generic, the response message is quite lengthy and needs some background information to interpret. The raw version of a response message may be found here. For a step by step interpretation of the message, see section below.

Message Interpretation

The PDQV3 service responds with a list of patient data which match the search parameter in a HL7 V3 subject child element of the controlAct object. The subject child element conveys the following information:

  • id: the XAD PID, which identifies the patient in the community (line 50) and the EPR-SPID (line 51).
  • name: conveying the given and the family names of the matching patient data (line 54).
  • administrativeGenderCode: conveying the coded value of patient gender (line 58), taken from the value sets defined in Annex 3.
  • birthTime: the data of birth of the matching patient data (line 59).
  • addr: The address data of the patient (line 60).
patient element
       <ns1:patient classCode="PAT">
        <ns1:id xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:II" root="1.3.6.1.4.1.21367.2017.2.5.93" extension="25f98b34-0e01-48b7-a06c-f706eb4c485f" assigningAuthorityName="XDS Affinity Domain"/>
        <ns1:id xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:II" root="2.16.756.5.30.1.127.3.10.3" extension="761337610411353650" assigningAuthorityName="SPID"/>
        <ns1:statusCode code="active"/>
        <ns1:patientPerson classCode="PSN" determinerCode="INSTANCE">
         <ns1:name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:PN">
          <ns1:given>Dylan Jose</ns1:given>
          <ns1:family>Dell</ns1:family>
         </ns1:name>
         <ns1:administrativeGenderCode code="F"/>
         <ns1:birthTime xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:TS" value="19890622"/>
         <ns1:addr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:AD" use="HP">
          <ns1:city>Pontarlier</ns1:city>
          <ns1:postalCode>25300</ns1:postalCode>
          <ns1:streetName>Ruelle de la Tour</ns1:streetName>
         </ns1:addr>
        </ns1:patientPerson>
        <ns1:providerOrganization classCode="ORG" determinerCode="INSTANCE">
         <ns1:id xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:II" root="1.3.6.1.4.1.21367.13.20.2000"/>
         <ns1:contactParty classCode="CON"/>
        </ns1:providerOrganization>
        <ns1:subjectOf1>
         <ns1:queryMatchObservation classCode="COND" moodCode="EVN">
          <ns1:code xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:CD" code="IHE_PDQ"/>
          <ns1:value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:INT" value="100"/>
         </ns1:queryMatchObservation>
        </ns1:subjectOf1>
       </ns1:patient>

Transport Protocol

The primary system shall send the request messages to the registry of the community using the http POST binding as defined in the W3C SOAP specification. It may look like:

1
2
3
4
5
6
POST /PDQV3Service HTTP/1.1
Host: company.example.org
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: nnnn  

Audit Log

Primary systems shall store syslog messages to the audit record repository of the community using TLS transport protocol. The audit message uses XML formatting as specified in RFC 3881 with restrictions specified in the IHE ITI TF and the Extension 1 to Annex5 in the ordinances of the Swiss electronic patient record (see Section 1.5 "Requirements on ATNA").

iti-47-log.xml
<?xml version='1.0' encoding='utf-8'?>
<AuditMessage>
 <EventIdentification EventActionCode="E" EventDateTime="2020-09-30T19:27:29.386Z" EventOutcomeIndicator="0">
  <EventID csd-code="110112" codeSystemName="DCM" originalText="Query"></EventID>
  <EventTypeCode csd-code="ITI-47" codeSystemName="IHE Transactions" originalText="Patient Demographics Query"></EventTypeCode>
 </EventIdentification>
 <ActiveParticipant UserID="https://my_primary_system.com/PDQConsumer" AlternativeUserID="201809" UserIsRequestor="true" NetworkAccessPointID="0045e6d09dd0" NetworkAccessPointTypeCode="1">
  <RoleIDCode csd-code="110153" codeSystemName="DCM" originalText="Source Role ID"></RoleIDCode>
 </ActiveParticipant>
 <ActiveParticipant UserID="_SYSTEM" UserIsRequestor="true" NetworkAccessPointID="0045e6d09dd0" NetworkAccessPointTypeCode="1">
  <RoleIDCode csd-code="%All" codeSystemName="HealthShare" originalText="%All"></RoleIDCode>
 </ActiveParticipant>
 <ActiveParticipant UserID="https://ehealthsuisse.ihe-europe.net/PDQService" UserIsRequestor="false" NetworkAccessPointID="ehealthsuisse.ihe-europe.net" NetworkAccessPointTypeCode="1">
  <RoleIDCode csd-code="110152" codeSystemName="DCM" originalText="Destination Role ID"></RoleIDCode>
 </ActiveParticipant>
 <AuditSourceIdentification AuditEnterpriseSiteID="2.16.756.5.30.1.109.6.1.3.1.1" AuditSourceID="my.primary.system.ID">
  <AuditSourceTypeCode csd-code="4"></AuditSourceTypeCode>
 </AuditSourceIdentification>
 <ParticipantObjectIdentification ParticipantObjectID="CHPAM34^^^&amp;1.3.6.1.4.1.12559.11.20.1&amp;ISO" ParticipantObjectTypeCode="1" ParticipantObjectTypeCodeRole="1">
  <ParticipantObjectIDTypeCode csd-code="2" codeSystemName="RFC-3881" originalText="Patient Number"></ParticipantObjectIDTypeCode>
  <ParticipantObjectName>^Neil^Mellisa</ParticipantObjectName>
  <ParticipantObjectDetail type="II" value="RjlENjJBNjgtMDM1Mi0xMUVCLUE2RTgtMDI0MkFDMTQwMDAy"></ParticipantObjectDetail>
 </ParticipantObjectIdentification>
 <ParticipantObjectIdentification ParticipantObjectID="1^^^&amp;F9D62A4A-0352-11EB-A6E8-0242AC140002&amp;ISO" ParticipantObjectTypeCode="2" ParticipantObjectTypeCodeRole="24">
  <ParticipantObjectIDTypeCode csd-code="ITI-47" codeSystemName="IHE Transactions" originalText="Patient Demographics Query"></ParticipantObjectIDTypeCode>
  <ParticipantObjectQuery> <!-- BASE-64 encoded copy of the query message --> </ParticipantObjectQuery>
  <ParticipantObjectDetail type="MSH-10" value="MV5eXiZGOUQ2MkE2OC0wMzUyLTExRUItQTZFOC0wMjQyQUMxNDAwMDImSVNP"></ParticipantObjectDetail>
 </ParticipantObjectIdentification>
</AuditMessage>

The message is made of the following blocks:

  • EventIdentification: Event related information including the timestamp (line 3 .. 6).
  • ActiveParticipant: Information related to the primary system performing the query (line 7 .. 9).
  • ActiveParticipant: Information on the user initiating the transaction (line 10 .. 12).
  • ActiveParticipant: Information on the responding service endpoint (line 13 .. 15).
  • AuditSourceIdentification: Information related to the primary system performing the query (line 16 .. 18)
  • ParticipantObjectIdentification: Information on the patients EPR accessed (line 19 .. 23)
  • ParticipantObjectIdentification: Request message related information including a UBASE-64 encoded copy of the query (line 24 .. 28).

Security Requirements

To ensure privacy the transaction must be secured using https with mutual authentication, with X.509 certificates (extended validation required) and client and server side certificate validation.

Note

  • Some test environments dropped the mutual authentication or TLS for testing purposes. Please contact your test system provider on the details.

Test Opportunity

The transaction can be tested with the test suite of the EPR reference environment, test systems of the EPR communities or the EPR Playground.


Last update: 2024-08-09