簡體   English   中英

C# 解析 FHIR 包 - 讀取資源

[英]C# parse FHIR bundle - read resources

我是使用 FHIR 的新手,需要幫助解析 C# 中的 FHIR-Bundle (xml)。 我能夠從包中的組合資源中獲取患者或組織資源的 URL,但需要將資源的值(例如患者姓名)存儲到變量中以使用它們,例如存儲它們到 SQL 數據庫。 你能幫我嗎? 提前謝謝!

<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&#228;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&#174; 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&#252;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&#223;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&#223;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>

這就是我到目前為止所得到的......我也有獲取作者(從業者)或部分(MedicationRequest)的URL的問題。

    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();

        }
    }
}

您可以執行以下操作:

var entry = bundle.FindEntry(absUriPatient).SingleOrDefault();
var patient = entry.Resource as Patient;
Console.WriteLine($"Given name of patient: {patient?.Name[0].Given.First() }");

所以bundle.FindEntry給你一個列表包條目。 然后取單個並將entry.resource轉換為Patient 然后你就擁有了耐心的所有屬性。

有關使用Bundle處理的更多信息,請參閱 Firely 文檔頁面:https://docs.fire.ly/projects/Firely-NET-SDK/model/bundles.html

Marco 的解決方案效果很好。 我現在能夠獲得患者甚至從業者的屬性。

但是,如果資源引用在資源本身中,如下所示:

    <resource>
  <MedicationRequest xmlns="http://hl7.org/fhir">
    <id value="e930cdee-9eb5-4b44-88b5-2a18b69f3b9a" />
    <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="0" />
      </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/5fe6e06c-8725-46d5-aecd-e65e041ca3de" />
    </medicationReference>
    <subject>
      <reference value="Patient/9774f67f-a238-4daf-b4e6-679deeef3811" />
    </subject>
    <authoredOn value="2021-03-30" />
    <requester>
      <reference value="Practitioner/20597e0e-cb2a-45b3-95f0-dc3dbdb617c3" />
    </requester>
    <insurance>
      <reference value="Coverage/1b1ffb6e-eb05-43d7-87eb-e7818fe9661a" />
    </insurance>
    <dosageInstruction>
      <extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_DosageFlag">
        <valueBoolean value="true" />
      </extension>
      <text value="1-0-1-0" />
    </dosageInstruction>
    <dispenseRequest>
      <quantity>
        <value value="1" />
        <system value="http://unitsofmeasure.org" />
        <code value="{Package}" />
      </quantity>
    </dispenseRequest>
    <substitution>
      <allowedBoolean value="true" />
    </substitution>
  </MedicationRequest>
</resource>

我需要獲得medicationReference 的引用才能訪問Medication 資源。 怎么做?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM