Skip to main content
Category
Guidance Document
ID
DG-3083
Type
Guide
Standard
Version
1.0
Status
Active
Created date
Updated date

Reading & Development: 2 hours

Overview

To begin this guide you should have completed the previous 2 guides, have registered as a developer, and successfully developed MyGov authentication functionality. We will use the token received from MyGov to access the patient’s My Health Record.

In this guide, we will retrieve

  • Patient Details
  • A list of associated persons (i.e. dependants)

We will be modifying the UI by adding 2 buttons to access this data as per the screenshot below.

my-health-record-logo-screenshot

Step 1: Get Patient Details

Now that we have the authentication token securely saved, we can make subsequent HTTP calls.
We will now make an HTTP Get request to retrieve an individual’s demographic details from the My  Health Record system. The table below provides you with the details of the GET request along with the applicable FHIR® Resource information on the HL7 website.

Resource URI[fqdn/fhir/v2.0.0]/Patient/[id]
HTTP MethodGET (read)
Request HeadersAuthorization (OAuth Token ), App-Id, App-Version
FHIR Resourcehttp://hl7.org/fhir/2016May/patient.html

We will now use the existing About page to display the 2 buttons as per the screenshot above.

Open the About.xaml file and replace UI code with the following code inside the <ContentPage> tag.

<ContentPage.Resources>
        <ResourceDictionary>
            <Color x:Key="Accent">#ffffff</Color>
        </ResourceDictionary>
    </ContentPage.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackLayout BackgroundColor="{StaticResource Accent}" VerticalOptions="FillAndExpand" HorizontalOptions="Fill">
            <StackLayout Orientation="Horizontal" HorizontalOptions="Center" VerticalOptions="Center">
                <ContentView Padding="0,40,0,40" VerticalOptions="FillAndExpand">
                    <Image Source="MyHealthRecord_logo.png" VerticalOptions="Center" HeightRequest="64" />
                </ContentView>
                
            </StackLayout>
        </StackLayout>
        <ScrollView Grid.Row="1">
            <StackLayout Orientation="Vertical" Padding="30,24,30,24" Spacing="10">

                <BoxView HorizontalOptions="FillAndExpand" HeightRequest="1" Color="#222222" Margin="0, 0, 0, 20"/>

                <Label Text="My Health Record - Patient Details" FontSize="Title"/>

                <Button Margin="0,10,0,0" Text="Patient Details"
                    x:Name="patientDetails"
                    Clicked="PatientDetails_Clicked"
                    BackgroundColor="{StaticResource Primary}"
                    TextColor="White" />

            </StackLayout>
        </ScrollView>
    </Grid>

In this application we are using RestSharp library to make HTTP calls. The following steps will update your code to make the Get Patient Details call. Some of the code added here will be common and used for several sections of these guides.

1. Install RestSharp using the following command in the Package Manager Console

Install-Package RestSharp

2. Create an interface with the name IMhrFhirService and add the following code.

using RestSharp;

public interface IMhrFhirService
{

    Task<IRestResponse> GetPatientDetails(string id);

3. Create a new class called MhrFhirService and add the following code.

using RestSharp;
using System.Threading.Tasks;
using Xamarin.Essentials;

public class MhrFhirService : IMhrFhirService
{
    private readonly RestClient _httpClient = null;

    public MhrFhirService()
    {
        _httpClient = new RestClient($"{App.FhirApiEndPoint}/{App.FhirApiVersion}");
    }

    public async Task<IRestResponse> GetPatientDetails(string id)
    {
        RestRequest request;

        if (string.IsNullOrEmpty(id))
        {
            request = new RestRequest("Patient", Method.GET);
        }
        else
        {
            request = new RestRequest("Patient/{id}", Method.GET);
            request.AddUrlSegment("id", id);
        }

        await AddStandardHeaders(request);

        IRestResponse fhirApiResponse = await _httpClient.ExecuteAsync(request);

        return fhirApiResponse;
    }
    public async Task AddStandardHeaders(RestRequest request)
    {
        //Optional
        request.AddHeader("Content-Type", "application/json+fhir");
        request.AddHeader("Accept", "application/json+fhir");

        //Mandatory
        string token = await SecureStorage.GetAsync(App.AuthTokenKey);
        request.AddHeader("Authorization", "Bearer " + token);
        request.AddHeader("App-Id", App.ClientId);
        request.AddHeader("App-Version", App.AppVersion);
    }
}

4. Add the MHRFHIRService class into  DependencyService inside the App.xaml.cs file as highlighted in the code below.

public App()
{
    InitializeComponent();

    DependencyService.Register<MockDataStore>();
    DependencyService.Register<MhrFhirService>();
    MainPage = new AppShell();
}

5. Add the following code to the Get Patient button click event inside the About.xaml.cs file.

private async void PatientDetails_Clicked(object sender, EventArgs e)
{

    IMhrFhirService mhrFhirService = DependencyService.Get<MhrFhirService>();

    // If id is not passed, it returns logged-in patient details.
    IRestResponse fhirMhrApiResponse =  await mhrFhirService.GetPatientDetails("");

    if (fhirMhrApiResponse.StatusCode == HttpStatusCode.OK)
    {
        string json = fhirMhrApiResponse.Content;

    }
    else
    {
        string errorDesc = fhirMhrApiResponse.StatusDescription;
    }
}

In the GetPatientDetails method, we are passing an empty string which will use the logged-in patient details by default. In the next section, we will check the GetRecordList HTTP call which retrieves the patient and related personal details with the patients’ ids.

6. Run the application, login again and test the Patient Details Page About.xaml.

my-health-record-patient-details-screenshot

If the HTTP response status is OK, it will return the patient details JSON as per HL7 FHIR® specifications. The blocks below contain the JSON response, familiarise yourself with this structure. 

string json = fhirMhrApiResponse.Content;
{
   "resourceType":"Bundle",
   "id":"43deeaa1-f2d2-418c-b563-ac225ecf0293",
   "type":"searchset",
   "total":4,
   "entry":[
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/Patient/1089887702",
         "resource":{
            "resourceType":"Patient",
            "id":"1089887702",
            "extension":[
               {
                  "url":"http://hl7.org.au/fhir/StructureDefinition/indigenous-status",
                  "valueCoding":{
                     "system":"http://meteor.aihw.gov.au/content/index.phtml/itemId/602543#Codes",
                     "code":"9",
                     "display":"Not stated/inadequately described"
                  }
               }
            ],
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608666888243"
               }
            ],
            "active":true,
            "name":[
               {
                  "family":[
                     "MOSES"
                  ],
                  "given":[
                     "SHAWN"
                  ]
               }
            ],
            "gender":"female",
            "birthDate":"1979-08-13"
         },
         "search":{
            "mode":"match"
         }
      },
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/Patient/1089887727",
         "resource":{
            "resourceType":"Patient",
            "id":"1089887727",
            "extension":[
               {
                  "url":"http://hl7.org.au/fhir/StructureDefinition/indigenous-status",
                  "valueCoding":{
                     "system":"http://meteor.aihw.gov.au/content/index.phtml/itemId/602543#Codes",
                     "code":"4",
                     "display":"Neither Aboriginal nor Torres Strait Islander origin"
                  }
               }
            ],
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608666888250"
               }
            ],
            "active":true,
            "name":[
               {
                  "family":[
                     "MOSES"
                  ],
                  "given":[
                     "MARCELLA"
                  ]
               }
            ],
            "gender":"female",
            "birthDate":"2010-12-19"
         },
         "search":{
            "mode":"match"
         }
      },
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/Patient/1089887729",
         "resource":{
            "resourceType":"Patient",
            "id":"1089887729",
            "extension":[
               {
                  "url":"http://hl7.org.au/fhir/StructureDefinition/indigenous-status",
                  "valueCoding":{
                     "system":"http://meteor.aihw.gov.au/content/index.phtml/itemId/602543#Codes",
                     "code":"9",
                     "display":"Not stated/inadequately described"
                  }
               }
            ],
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608333562551"
               }
            ],
            "active":true,
            "name":[
               {
                  "family":[
                     "CRIPPS"
                  ],
                  "given":[
                     "ERNIE"
                  ]
               }
            ],
            "gender":"male",
            "birthDate":"1977-02-28"
         },
         "search":{
            "mode":"match"
         }
      },
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/Patient/1089887728",
         "resource":{
            "resourceType":"Patient",
            "id":"1089887728",
            "extension":[
               {
                  "url":"http://hl7.org.au/fhir/StructureDefinition/indigenous-status",
                  "valueCoding":{
                     "system":"http://meteor.aihw.gov.au/content/index.phtml/itemId/602543#Codes",
                     "code":"9",
                     "display":"Not stated/inadequately described"
                  }
               }
            ],
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608166895276"
               }
            ],
            "active":true,
            "name":[
               {
                  "family":[
                     "LOCKYER"
                  ],
                  "given":[
                     "PERRY"
                  ]
               }
            ],
            "gender":"male",
            "birthDate":"1963-11-26"
         },
         "search":{
            "mode":"match"
         }
      }
   ]
}

7. To parse the JSON content and serialize it into an object, we have a library available from the HL7 FHIR® resources. You may wish to use the following example to parse the JSON content into the FHIR® POCO classes.  

a. Install the following library using Package Manager Console.

Install-Package Hl7.Fhir.STU3 

b. Modify the following method as per the code below to parse the JSON content (returned as a string).

private async void PatientDetails_Clicked(object sender, EventArgs e)
{
    IMhrFhirService mhrFhirService = DependencyService.Get<MhrFhirService>();

    IRestResponse fhirMhrApiResponse = await mhrFhirService.GetPatientDetails("");

    if (fhirMhrApiResponse.StatusCode == HttpStatusCode.OK)
    {
        string json = fhirMhrApiResponse.Content;
                
        FhirJsonParser parser = new FhirJsonParser();
        var patientBundle = (Bundle) parser.Parse(json);
    }
    else
    {
        string errorDesc = fhirMhrApiResponse.StatusDescription;
    }       
}

Step 2: Get Record List (GET)

The Get Record List API provides the ability to retrieve the list of records the individual is permitted to access and returns a bundle containing the RelatedPerson resource for each accessible record. These persons might be children or maybe a person under the care of the user.

The request details are outlined in the table below along with the HL7 FHIR® Resource link.

Resource URI HTTP Method

[fqdn/fhir/v2.0.0]/RelatedPerson

GET (search)

Request HeadersAuthorization, App-Id, App-Version, Platform-Version
Request Parameters (searchParam)_format
FHIR Based resourcehttp://hl7.org/fhir/2016May/relatedperson.html
 

In the following steps, we will add the code to make an HTTP call to Get Record List.

1. Add a new button called Record List inside the About.xaml file below the Patient Details button as shown in the code and the screenshot provided earlier.

<Button Margin="0,10,0,0" Text="Record List"
                    x:Name="btnRecordList"
                    Clicked="btnRecordList_Clicked"
                    BackgroundColor="{StaticResource Primary}"
                    TextColor="White" />

2. Add the interface method inside the IMhrFhirService created in the previous steps.

Task<IRestResponse> GetRecordList();

3 Add the service method inside the MhrFhirService class to make the HTTP call for Get Record List using the code below.

public async Task<IRestResponse> GetRecordList()
{
    var request = new RestRequest("RelatedPerson", Method.GET);
    await AddStandardHeaders(request);

    IRestResponse fhirApiResponse = _httpClient.Execute(request);
    return fhirApiResponse;
}

4. Add the following code to the Record List button click event inside the About.xaml.cs file.

private async void btnRecordList_Clicked(object sender, EventArgs e)
{

    IMhrFhirService mhrFhirService = DependencyService.Get<MhrFhirService>();

    IRestResponse fhirMhrApiResponse = await mhrFhirService.GetRecordList();

    if (fhirMhrApiResponse.StatusCode == HttpStatusCode.OK)
    {
        string json = fhirMhrApiResponse.Content;
    }
    else
    {
        string errorDesc = fhirMhrApiResponse.StatusDescription;
    }

}

5. Run the application and test the Get Record List functionality.

The screenshot below shows the JSON content using the Visual Studio Text Visualizer in Debug Mode.

json-content-visual-studio-text-visualizer-debug-mode-screenshot

Familiarise yourself with the response.

{
   "resourceType":"Bundle",
   "type":"searchset",
   "total":4,
   "entry":[
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/RelatedPerson/1089887702",
         "resource":{
            "resourceType":"RelatedPerson",
            "id":"1089887702",
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608666888243"
               }
            ],
            "patient":{
               "reference":"Patient/1089887702"
            },
            "relationship":{
               "extension":[
                  {
                     "url":"http://ns.electronichealth.net.au/fhir/v2.0.0/StructureDefinition/relationship-type",
                     "valueCodeableConcept":{
                        "coding":[
                           {
                              "system":"http://ns.electronichealth.net.au/fhir/v2.0.0/ValueSet/relationship-type",
                              "code":"RT001",
                              "display":"Self"
                           }
                        ],
                        "text":"Self"
                     }
                  }
               ]
            },
            "name":{
               "family":[
                  "MOSES"
               ],
               "given":[
                  "SHAWN"
               ]
            },
            "gender":"female",
            "birthDate":"1979-08-13"
         },
         "search":{
            "mode":"include"
         }
      },
      {
         "fullUrl":"https://apinams.svt.gw.myhealthrecord.gov.au/fhir/v2.0.0/RelatedPerson/1089887727",
         "resource":{
            "resourceType":"RelatedPerson",
            "id":"1089887727",
            "identifier":[
               {
                  "type":{
                     "coding":[
                        {
                           "system":"http://hl7.org/fhir/v2/0203",
                           "code":"NI",
                           "display":"National unique individual identifier"
                        }
                     ],
                     "text":"IHI"
                  },
                  "system":"http://ns.electronichealth.net.au/id/hi/ihi/1.0",
                  "value":"8003608666888250"
               }
            ],
            "patient":{
               "reference":"Patient/1089887727"
            },
            "relationship":{
               "extension":[
                  {
                     "url":"http://ns.electronichealth.net.au/fhir/v2.0.0/StructureDefinition/relationship-type",
                     "valueCodeableConcept":{
                        "coding":[
                           {
                              "system":"http://ns.electronichealth.net.au/fhir/v2.0.0/ValueSet/relationship-type",
                              "code":"RT002",
                              "display":"Under 18 - Parental Responsibility"
                           }
                        ],
                        "text":"Under 18 - Parental Responsibility"
                     }
                  }
               ]
            },
            "name":{
               "family":[
                  "MOSES"
               ],
               "given":[
                  "MARCELLA"
               ]
            },
            "gender":"female",
            "birthDate":"2010-12-19"
         },
         "search":{
            "mode":"match"
         }
      },
   ]
}

Conclusion

This developer guide introduced My Health Record FHIR® APIs Get Patient Details and Record List (Related Person) of a healthcare recipient using the same demo mobile app created in the previous guide. In the following guides we will begin to retrieve clinical information.

View All Back | Next: Personal Health Summary - My Health Record FHIR Gateway Developer Guide 4