I'm new to working with FHIR and need help with parsing a FHIR-Bundle (xml) in C#. I'm able to get the URL of the patient- or organization-resource from the composition-resource in the bundle, but need to store the values of the resources (e.g. name of patient) into variables to work with them, e.g. store them to an SQL database. Can you help me please? Thx in advance!
<Bundle xmlns="http://hl7.org/fhir">
<id value="0428d416-149e-48a4-977c-394887b3d85c" />
<meta>
<lastUpdated value="2021-04-06T08:30:00Z" />
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle|1.0.1" />
</meta>
<identifier>
<system value="https://gematik.de/fhir/NamingSystem/PrescriptionID" />
<value value="160.100.000.000.002.36" />
</identifier>
<type value="document" />
<timestamp value="2021-04-06T08:30:00Z" />
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Composition/a054c2f3-0123-4d33-a0b3-bedec2f7d1ea" />
<resource>
<Composition>
<id value="a054c2f3-0123-4d33-a0b3-bedec2f7d1ea" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Composition|1.0.1" />
</meta>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_STATUSKENNZEICHEN" />
<code value="00" />
</valueCoding>
</extension>
<status value="final" />
<type>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_FORMULAR_ART" />
<code value="e16A" />
</coding>
</type>
<subject>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</subject>
<date value="2021-04-05T08:00:00Z" />
<author>
<reference value="Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<type value="Practitioner" />
</author>
<author>
<type value="Device" />
<identifier>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_FOR_Pruefnummer" />
<value value="Y/410/2107/36/999" />
</identifier>
</author>
<title value="elektronische Arzneimittelverordnung" />
<custodian>
<reference value="Organization/d2b30a70-9830-4968-ab97-688472b6f9a3" />
</custodian>
<section>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Section_Type" />
<code value="Prescription" />
</coding>
</code>
<entry>
<!-- Referenz auf Verordnung (MedicationRequest) -->
<reference value="MedicationRequest/06dc1594-509a-4f4c-ada7-dfd477a02d86" />
</entry>
</section>
<section>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Section_Type" />
<code value="Coverage" />
</coding>
</code>
<entry>
<!-- Referenz auf Krankenkasse/Kostenträger -->
<reference value="Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
</entry>
</section>
</Composition>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/MedicationRequest/06dc1594-509a-4f4c-ada7-dfd477a02d86" />
<resource>
<MedicationRequest>
<!-- Beispiel MedicationRequest für eine PZN-Verordnung -->
<id value="06dc1594-509a-4f4c-ada7-dfd477a02d86" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Prescription|1.0.1" />
</meta>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_StatusCoPayment">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_StatusCoPayment" />
<code value="1" />
</valueCoding>
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_EmergencyServicesFee">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_BVG">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_Multiple_Prescription">
<extension url="Kennzeichen">
<valueBoolean value="false" />
</extension>
</extension>
<status value="active" />
<intent value="order" />
<medicationReference>
<reference value="Medication/f568397d-7ba2-46ac-904b-02caec933b42" />
</medicationReference>
<subject>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</subject>
<authoredOn value="2020-04-06" />
<requester>
<reference value="Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
</requester>
<insurance>
<reference value="Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
</insurance>
<dosageInstruction>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_DosageFlag">
<valueBoolean value="true" />
</extension>
<text value="2mal tägl. 5ml" />
</dosageInstruction>
<dispenseRequest>
<quantity>
<value value="1" />
<system value="http://unitsofmeasure.org" />
<code value="{Package}" />
</quantity>
</dispenseRequest>
<substitution>
<allowedBoolean value="true" />
</substitution>
</MedicationRequest>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Medication/f568397d-7ba2-46ac-904b-02caec933b42" />
<resource>
<Medication>
<id value="f568397d-7ba2-46ac-904b-02caec933b42" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Medication_PZN|1.0.1" />
</meta>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_Medication_Category">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Medication_Category" />
<code value="00" />
</valueCoding>
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_Medication_Vaccine">
<valueBoolean value="false" />
</extension>
<extension url="http://fhir.de/StructureDefinition/normgroesse">
<valueCode value="N1" />
</extension>
<code>
<coding>
<system value="http://fhir.de/CodeSystem/ifa/pzn" />
<code value="08585997" />
</coding>
<text value="Prospan® Hustensaft 100ml N1" />
</code>
<form>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM" />
<code value="FLE" />
</coding>
</form>
</Medication>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
<resource>
<Patient>
<id value="512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_FOR_Patient|1.0.3" />
</meta>
<identifier>
<type>
<coding>
<system value="http://fhir.de/CodeSystem/identifier-type-de-basis" />
<code value="GKV" />
</coding>
</type>
<system value="http://fhir.de/NamingSystem/gkv/kvid-10" />
<value value="M310119800" />
</identifier>
<name>
<use value="official" />
<family value="Erbprinzessin von und zu der Schimmelpfennig-Hammerschmidt Federmannssohn">
<extension url="http://fhir.de/StructureDefinition/humanname-namenszusatz">
<valueString value="Erbprinzessin" />
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/humanname-own-prefix">
<valueString value="von und zu der" />
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/humanname-own-name">
<valueString value="Schimmelpfennig-Hammerschmidt Federmannssohn" />
</extension>
</family>
<given value="Ingrid" />
</name>
<birthDate value="2010-01-31" />
<address>
<type value="both" />
<line value="Anneliese- und Georg-von-Groscurth-Plaetzchen 149-C">
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber">
<valueString value="149-C" />
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName">
<valueString value="Anneliese- und Georg-von-Groscurth-Plaetzchen" />
</extension>
</line>
<line value="5. OG - Hinterhof">
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-additionalLocator">
<valueString value="5. OG - Hinterhof" />
</extension>
</line>
<city value="Bad Homburg" />
<postalCode value="60437" />
<country value="D" />
</address>
</Patient>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<resource>
<Practitioner>
<id value="e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_FOR_Practitioner|1.0.3" />
</meta>
<identifier>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="LANR" />
</coding>
</type>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_Base_ANR" />
<value value="456456534" />
</identifier>
<name>
<use value="official" />
<family value="Weber">
<extension url="http://hl7.org/fhir/StructureDefinition/humanname-own-name">
<valueString value="Weber" />
</extension>
</family>
<given value="Maximilian" />
<prefix value="Dr.">
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier">
<valueCode value="AC" />
</extension>
</prefix>
</name>
<qualification>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type" />
<code value="00" />
</coding>
</code>
</qualification>
<qualification>
<code>
<text value="Facharzt für Kinder- und Jugendmedizin" />
</code>
</qualification>
</Practitioner>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Organization/d2b30a70-9830-4968-ab97-688472b6f9a3" />
<resource>
<Organization>
<id value="d2b30a70-9830-4968-ab97-688472b6f9a3" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_FOR_Organization|1.0.3" />
</meta>
<identifier>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="BSNR" />
</coding>
</type>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_Base_BSNR" />
<value value="687777700" />
</identifier>
<name value="Kinderarztpraxis" />
<telecom>
<system value="phone" />
<value value="09411234567" />
</telecom>
<address>
<type value="both" />
<line value="Yorckstraße 15">
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber">
<valueString value="15" />
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName">
<valueString value="Yorckstraße" />
</extension>
</line>
<line value="Hinterhaus">
<extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-additionalLocator">
<valueString value="Hinterhaus" />
</extension>
</line>
<city value="Regensburg" />
<postalCode value="93049" />
<country value="D" />
</address>
</Organization>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
<resource>
<Coverage>
<id value="df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_FOR_Coverage|1.0.3" />
</meta>
<extension url="http://fhir.de/StructureDefinition/gkv/besondere-personengruppe">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_PERSONENGRUPPE" />
<code value="00" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDefinition/gkv/dmp-kennzeichen">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DMP" />
<code value="00" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDefinition/gkv/wop">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ITA_WOP" />
<code value="72" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDefinition/gkv/versichertenart">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_VERSICHERTENSTATUS" />
<code value="3" />
</valueCoding>
</extension>
<status value="active" />
<type>
<coding>
<system value="http://fhir.de/CodeSystem/versicherungsart-de-basis" />
<code value="GKV" />
</coding>
</type>
<beneficiary>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</beneficiary>
<period>
<end value="2040-04-01" />
</period>
<payor>
<identifier>
<system value="http://fhir.de/NamingSystem/arge-ik/iknr" />
<value value="108416214" />
</identifier>
<display value="AOK Bayern" />
</payor>
</Coverage>
</resource>
</entry>
This is what I got so far ... I also have the problem to get the URLs of the author (Practitioner) or section (MedicationRequest).
using Hl7.Fhir.Model;
using Hl7.Fhir.Rest;
using Hl7.Fhir.Serialization;
using System;
using System.IO;
using System.Xml;
namespace ReadXML
{
class Program
{
static void Main(string[] args)
{
XmlReader xr = XmlReader.Create(
new StreamReader(@"<Path>"));
var parser = new FhirXmlParser();
Bundle bundle = parser.Parse<Bundle>(xr);
Console.WriteLine(bundle);
var composition = (Composition)bundle.Entry[0].Resource;
ResourceReference subjectRef = composition.Subject;
//ResourceReference authorRef = composition.Author;
ResourceReference custodianRef = composition.Custodian;
//ResourceReference medRef = composition.Section;
var absUriPatient = subjectRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
//var absUriPractitioner = authorRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
var absUriOrganization = custodianRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
Console.WriteLine($"Patient-URL: {absUriPatient}");
//Console.WriteLine($"Practitioner-URL: {absUriPractitioner}");
Console.WriteLine($"Organization-URL: {absUriOrganization}");
var patient = (Bundle.EntryComponent)bundle.FindEntry(absUriPatient);
Console.WriteLine(patient); //How to get patient.Name ???
Console.ReadKey();
}
}
}