COSCUP 2024

Peter

2024/08/04

Getting started with developing your first FHIR client with Python!

Slide

About me

  • Peter, GitHub

  • Active open source contributor

  • Speaker

    • COSCUP、MOPCON......

  • An engineer

    • DevOps

    • Back-end

    • System Architecture Researching

    • Web Application Security

    • PHP, Python and JavaScript

  • Industrial Technology Research Institute

    • Smart Grid Technology (2017~2021)

  • Institute for Information Industry

    • Database, Data platform architecture (2021~)

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

什麼是FHIR與基礎知識

  • Fast Healthcare Interoperability Resources

    • FHIR,縮寫讀音同「Fire」

  • 此標準在2011年由HL7(Health Level Seven)發表

  • FHIR整合前幾代國際醫療資料交換標準優點

    • 強化資料互通性

    • 不僅支援更多格式,還更遵從HTTP協定

    • 支援行動裝置和資源受限系統以及緊跟行動化趨勢

FHIR基本名詞介紹

  • 實作指引

    • Implementation guide(IG)

    • 不同國家可以參考HL7 FHIR實作指引

      • 發展出符合自己國家需要的核心實作指引

    • 可視為互通規格書,Specification

  • 操作規範書

    • Profile,StructureDefinition

    • 可以視為實作規格規範,資料結構定義,資料表綱要

  • 實作是由一系列Resource(資源物件)組成

    • 使用者可輕鬆複製、微調這些Resource

    • 解決醫療實務上和管理上問題

    • Resource就像是資料庫的資料表中的資料

    • 或是想像成一個可組織、用來記錄資料的Excel工作表

FHIR基本名詞介紹

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

以Python實作需要準備的工具

  • 可以運行Python 3.8以上的Python程式語言環境

  • 以Ubuntu 22.04上進行示範

  • 安裝fhir-data-generator套件

    • https://github.com/peter279k/fhir-data-generator

    • 相容於部分臺灣核心實作指引的Resource

    • 產生Resource的資料欄位已經物件導向化

    • 僅需呼叫Object定義方法即可產生Resource區塊

    • 內建支援簡易HTTP client進行發送請求(Beta版本)

    • 未來會參與聯測進行更進一步測試資料互通性

    • 套件有完整Released log

    • 使用pytest進行完整單元測試

以Python實作需要準備的工具

$ sudo apt-get update
$ sudo apt-get install -y python3-pip
$ pip3 install -U fhir-data-generator

# Upgrade the existed fhir-data-generator
$ pip3 install -U --upgrade fhir-data-generator

$ python3
Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from fhir_data_generator import Patient
>>>

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

Patient Resource example 1

  • 從範例資料學習如何建立Patient Resource

  • 參考Patient resource範例與說明

import json
import uuid
from fhir_data_generator import Patient


patient = Patient(str(uuid.uuid4()))
patient.set_profile_url('https://fhir.server/path/to/profile/path')

identifier1 = {
    'use': 'official',
    'system': 'http://www.boca.gov.tw',
    'type': {
        'coding': [
            {
                'system': 'http://www.boca.gov.tw',
                'code': 'PPN',
                'display': 'Passport number',
            },
        ],
    },
    'value': '262344368',
}
identifier2 = {
    'use': 'official',
    'system': 'http://terminology.hl7.org/CodeSystem/v2-0203',
    'type': {
        'coding': [
            {
                'system': 'http://terminology.hl7.org/CodeSystem/v2-0203',
                'code': 'MR',
                'display': 'Medical record number',
            },
        ]
    },
    'value': '123456789',
}
managing_organization = 'Organization/MITW.ForIdentifier'
name = {
    'use': 'official',
    'text': '李小明',
    'family': '李',
    'given': ['小明'],
}
gender = 'male'
birth_date = '2023-12-23'
addresses = [
    {
        'use': 'home',
        'text': '105台北市松山區民生東路四段133號',
    },
    {
        'country': 'TW',
    },
]
scenario = 1
telecom = {
    'use': 'home',
    'system': 'phone',
    'value': '0905285349',
}

patient.set_identifier(identifier1)
patient.set_identifier(identifier2)
patient.set_active(True)
patient.set_managing_organization(managing_organization)
patient.set_name(name)
patient.set_gender(gender)
patient.set_birth_date(birth_date)
patient.set_address(addresses[0])
patient.set_address(addresses[1])
patient.set_telecom(telecom)

# Retrieving the Patient resource dict
patient_json_dict = patient.create(1)
print(patient_json_dict)

# Retrieve the Patient resource JSON string
print(json.dumps(patient_json_dict))

Patient Resource example 1

  • 執行patient_example1.py

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

Patient Resource example 2

  • 從範例資料學習如何建立Patient Resource

  • 參考Patient resource範例與說明

import json
import uuid
from fhir_data_generator import Patient


Patient = Patient(str(uuid.uuid4()))

patient.set_profile_url('https://fhir.server/path/to/profile/path')

identifier1 = {
    'use': 'official',
    'system': 'http://www.boca.gov.tw',
    'type': {
        'coding': [
            {
                'system': 'http://www.boca.gov.tw',
                'code': 'PPN',
                'display': 'Passport number',
            },
        ],
    },
    'value': '262344368',
}
identifier2 = {
    'use': 'official',
    'system': 'http://terminology.hl7.org/CodeSystem/v2-0203',
    'type': {
        'coding': [
            {
                'system': 'http://terminology.hl7.org/CodeSystem/v2-0203',
                'code': 'MR',
                'display': 'Medical record number',
            },
        ]
    },
    'value': '123456789',
}

patient.set_identifier(identifier1)
patient.set_identifier(identifier2)

patient.set_active(True)

managing_organization = 'Organization/MITW.ForIdentifier'
patient.set_managing_organization(managing_organization)

names = [
    {
        'use': 'official',
        'family': 'Li',
        'given': [
            'Peter'
        ],
        'text': 'Peter Li',
    },
]

patient.set_name(names[0])

gender = 'male'
patient.set_gender(gender)

birth_date = '2023-12-23'
patient.set_birth_date(birth_date)

addresses = [
    {
        'use': 'home',
        'text': '105台北市松山區民生東路四段133號',
    },
    {
        'country': 'TW',
    },
]

patient.set_address(addresses[0])
patient.set_address(addresses[1])

telecom = {
    'use': 'home',
    'system': 'phone',
    'value': '0905285349',
}
patient.set_telecom(telecom)

communications = [
    {
        'language': {
            'coding': [
                {
                    'system': 'http://terminology.hl7.org/CodeSystem/v3-ietf3066',
                    'code': 'en-US',
                },
            ],
            'text': 'English (US)',
        },
    },
]

patient.set_communication(communications[0])

scenario = 2

# Retrieving the Patient resource dict
patient_json_dict = patient.create(scenario)
print(patient_json_dict)

# Retrieve the Patient resource JSON string
print(json.dumps(patient_json_dict))

Patient Resource example 2

  • 執行patient_example2.py

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

Observation BMI Resource example 1

import json
import uuid
from fhir_data_generator import Observation


observation = Observation(str(uuid.uuid4()))

profile_urls = ['https://fhir.server/path/to/profile/path']
observation.set_profile_urls(profile_urls)

status = 'final'
observation.set_status(status)

category_coding = [{
    'system': 'http://terminology.hl7.org/CodeSystem/observation-category',
    'code': 'vital-signs',
    'display': 'Vital Signs',
}]
observation.set_category_coding(category_coding)

code_coding = [{
    'system': 'https://twcore.mohw.gov.tw/ig/twcore/CodeSystem/loinc-tw',
    'code': '39156-5',
    'display': 'Body mass index (BMI) [Ratio]',
}]
observation.set_code_coding(code_coding)

code_text = 'Body mass index (BMI) [Ratio]'
observation.set_code_text(code_text)

subject= {
    'reference': 'Patient/pat-example',
}
observation.set_subject(subject)

effective_datetime = '2023-12-23'
observation.set_effective_datetime(effective_datetime)

performer = [{
    'reference': 'Practitioner/pra-dr-example',
}]
observation.set_performer(performer)

value_quantity = {
    'value': 18.3,
    'unit': 'kg/m2',
    'system': 'http://unitsofmeasure.org',
    'code': 'kg/m2',
}
observation.set_value_quantity(value_quantity)

# Retrieving the Observation resource dict
observation_json_dict = observation.create()
print(observation_json_dict)

# Retrieve the Observation resource JSON string
print(json.dumps(observation_json_dict))

Observation BMI Resource example 1

  • 執行observation_bmi_example.py

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

驗證Resource的方法

線上驗證TW Core IG 0.2.2版本

{"resourceType": "Patient", "meta": {"profile": ["https://twcore.mohw.gov.tw/ig/twcore/StructureDefinition-TWPatient.json"]}, "identifier": [{"use": "official", "system": "http://www.boca.gov.tw", "type": {"coding": [{"system": "http://www.boca.gov.tw", "code": "PPN", "display": "Passport number"}]}, "value": "262344368"}, {"use": "official", "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MR", "display": "Medical record number"}]}, "value": "123456789"}], "active": true, "managingOrganization": {"reference": "Organization/MITW.ForIdentifier"}, "name": [{"use": "official", "text": "\u674e\u5c0f\u660e", "family": "\u674e", "given": ["\u5c0f\u660e"]}], "gender": "male", "birthDate": "2023-12-23", "address": [{"use": "home", "text": "105\u53f0\u5317\u5e02\u677e\u5c71\u5340\u6c11\u751f\u6771\u8def\u56db\u6bb5133\u865f"}, {"country": "TW"}], "telecom": [{"use": "home", "system": "phone", "value": "0905285349"}]}

線上驗證TW Core IG 0.2.2版本

線上驗證TW Core IG 0.2.2版本

  • 排版驗證資料

  • 刪除不需要的meta.profile欄位

線上驗證TW Core IG 0.2.2版本

  • 驗證結果

線上驗證TW Core IG 0.2.2版本

  • 驗證結果

線上驗證TW Core IG 0.2.2版本

  • 驗證結果說明

    • dom-6 Guideline A resource should have narrative for robust management

線上驗證TW Core IG 0.2.2版本

線上驗證TW Core IG 0.2.2版本

  • 選用該FHIR server裡面收錄的TW Core Patient profile

  • 複製patient_example1.py檔至patient_example3.py

  • 修改patient_example3.py,修改地方如下所示

# 第二第三行間加入
import requests

# 第7行修改如下
patient.set_profile_url('https://twcore.mohw.gov.tw/ig/twcore/StructureDefinition/Patient-twcore')

# 最下面依序加入這幾行
headers = {'Content-Type': 'application/fhir+json'}
response = requests.post(
        'https://twcore.hapi.fhir.tw/fhir/Patient',
        headers=headers,
        json=patient_json_dict
)

print(response.status_code)
print(response.json())

線上驗證TW Core IG 0.2.2版本

  • 選用該FHIR server裡面收錄的TW Core Patient profile

  • 執行patient_example3.py

  • Resource Organization/MITW.ForIdentifier not found

  • 代表指定參考的Organization找不到

  • 因此需要做修改

線上驗證TW Core IG 0.2.2版本

線上驗證TW Core IG 0.2.2版本

managing_organization = 'Organization/org-hosp-example'
  • 修改完成後接著執行patient_example4.py

離線驗證

  • 在下載與執行JAR檔前,還需要先建立可以執行JAVA環境

  • 需要先安裝OpenJDK

離線驗證

  • 依據HL7 Confluence可以得知,JDK版本可以是11或17

    • JDK Version

      • The validator is tested to run on all currently support LTS versions of Java (at the time of writing this documentation, JDK 11 and 17)

      • 以Ubuntu 22.04,則可以使用下列指令進行安裝

        • sudo apt-get update

        • sudo apt-get install openjdk-11-jdk -y

離線驗證

  • 下載與解壓縮所需要的JAR檔、IG實作指引與profile檔

    • TWCore IG 0.2.2為例

離線驗證

  • 下載與解壓縮所需要的JAR檔、IG實作指引與profile檔

    • TWCore IG 0.2.2為例

# 建立fhir_validate_example目錄
$ mkdir fhir_validate_example && cd fhir_validate_example

# 下載validator_cli.jar檔案
$ wget -O validator_cli.jar https://github.com/hapifhir/org.hl7.fhir.core/releases/latest/download/validator_cli.jar

# 安裝unzip指令,可以解壓縮實作指引、文件定義與範例等壓縮檔
$ sudo apt-get update
$ sudo apt-get install unzip -y

# 下載TW Core 0.2.2實作指引之壓縮檔
$ wget -O full-ig.zip https://twcore.mohw.gov.tw/ig/twcore/full-ig.zip
$ rm -rf full-ig && mkdir full-ig && unzip full-ig.zip -d full-ig

# 下載範例檔(此壓縮檔含有各類型Resource JSON與JSON profile等檔案)版本: TW Core 0.2.2
$ wget -O examples.json.zip https://twcore.mohw.gov.tw/ig/twcore/examples.json.zip
$ rm -rf examples.json && mkdir examples.json && unzip examples.json.zip -d examples.json

$ ls
examples.json  examples.json.zip  full-ig  full-ig.zip validator_cli.jar

離線驗證

  • 使用validator_cli.jar方式如下

$ java -jar validator_cli.jar -help
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [jar:file:/home/peter/fhir_validate_example/validator_cli.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
FHIR Validation tool Version 6.3.18 (Git# 5c3953cfdb3b). Built 2024-07-17T06:14:31.637Z (15 days old)
  Java:   11.0.24 from /usr/lib/jvm/java-11-openjdk-amd64 on amd64 (64bit). 1482MB available

This is the help text for default usage of the validator. Help for other modes
of operation is available by using the parameter '-help [mode]' for one of the
......
  • 使用validator_cli.jar方法

    • ​java -jar validator_cli.jar [source] -version [ver] -ig [package|file|folder|url] -profile [url]

離線驗證

  • 使用validator_cli.jar方法

    • ​java -jar validator_cli.jar [source] -version [ver] -ig [package|file|folder|url] -profile [url]

$ java -jar validator_cli.jar ./examples.json/Patient-pat-example.json \
    -version 4.0 \
    -ig tw.gov.mohw.twcore
......
  Java:   11.0.24 from /usr/lib/jvm/java-11-openjdk-amd64 on amd64 (64bit). 1482MB available
  Paths:  Current = /home/peter/fhir_validate_example, Package Cache = /home/peter/.fhir/packages
  Params: ./examples.json/Patient-pat-example.json -version 4.0 -ig tw.gov.mohw.twcore
  Locale: United States/US
  Jurisdiction: United States of America
Loading
  Load FHIR v4.0 from hl7.fhir.r4.core#4.0.1Installing hl7.fhir.r4.core#4.0.1 to the package cache
  Fetching:
......
Installing tw.gov.mohw.twcore#0.2.2 done.
Installing hl7.terminology.r4#5.5.0 to the package cache
  Fetching:
  Load tw.gov.mohw.twcore#0.2.2 - 221 resources (00:00.774)
  Package Summary: [hl7.fhir.r4.core#4.0.1, hl7.fhir.xver-extensions#0.1.0, hl7.fhir.uv.extensions.r5#5.1.0, hl7.terminology#6.0.2, hl7.terminology.r5#6.0.2, hl7.fhir.uv.extensions#5.2.0-ballot, hl7.terminology.r4#5.5.0, hl7.fhir.uv.extensions.r4#5.1.0, hl7.terminology.r4#5.0.0, fhir.dicom#2022.4.20221006, hl7.fhir.uv.ips#1.1.0, tw.gov.mohw.twcore#0.2.2]
  Terminology Cache at /tmp/default-tx-cache
  Get set...  go (00:00.713)
Cached new session. Cache size = 1
Validating
  Validate ./examples.json/Patient-pat-example.json
Validate Patient against http://hl7.org/fhir/StructureDefinition/Patient|4.0.1..........20..........40..........60.........

離線驗證

  • 使用validator_cli.jar方法

    • ​java -jar validator_cli.jar [source] -version [ver] -ig [package|file|folder|url] -profile [url]

Done. Times: Loading: 00:28.521, validation: 00:32.136. Memory = 1Gb

Success: 0 errors, 0 warnings, 1 notes
  Information: All OK
Done. Times: Loading: 00:28.521, validation: 00:32.136. Max Memory = 2Gb

離線驗證

  • 可以從前面的執行驗證指令知道

  • 在執行的時候,會去找指定IG的package cache進行下載 

    • 並將package cache目錄下載至家目錄底下.fhir/packages目錄下

    • 再執行第二次之後,則不會再進行下載

離線驗證

  • 改成測試自己的Patient resource

    • ​使用patient_example1.py至patient_example5.py
    • 移除指定的meta裡面的profile網址(set_ptofile_url)
    • 儲存叫做patient_example5.json檔
$ java -jar validator_cli.jar ~/patient_example5.json \
    -version 4.0 \
    -ig tw.gov.mohw.twcore
......
Success: 0 errors, 3 warnings, 0 notes
  Warning @ Patient.identifier[0].type (line 1, col228): None of the codings provided are in the value set 'IdentifierType' (http://hl7.org/fhir/ValueSet/identifier-type|4.0.1), and a coding should come from this value set unless it has no suitable code (note that the validator cannot judge what is suitable) (codes = http://www.boca.gov.tw#PPN)
  Warning @ Patient.identifier[0].type.coding[0].system (line 1, col228): A definition for CodeSystem 'http://www.boca.gov.tw' could not be found, so the code cannot be validated
  Warning @ Patient (line 1, col948): Constraint failed: dom-6: 'A resource should have narrative for robust management' (defined in http://hl7.org/fhir/StructureDefinition/DomainResource) (Best Practice Recommendation)
Done. Times: Loading: 00:26.666, validation: 00:02.462. Max Memory = 2Gb
peter@server1:~/fhir_validate_example$

離線驗證

  • 執行離線驗證常見的錯誤

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.hl7.fhir.utilities.json.JsonTrackingParser$Lexer.next(JsonTrackingParser.java:268)
        at org.hl7.fhir.utilities.json.JsonTrackingParser$Lexer.consume(JsonTrackingParser.java:34
  • 這是執行JAR檔常見的錯誤

    • 原因是JVM裡面所指定給它的記憶體用光了

    • 若要解決這問題,加入-Xmx2G指定JVM記憶體使用量

$ java -Xmx2G -jar validator_cli.jar ./examples.json/Patient-pat-example.json \
    -version 4.0 \
    -ig tw.gov.mohw.twcore

離線驗證

離線驗證

  • 使用peter279k/docker_fhir_validator_11

  • 安裝Docker

  • 把上述的Docker image下載回來

$ sudo snap install docker --classic
$ sudo docker pull peter279k/docker_fhir_validator_11
Using default tag: latest
latest: Pulling from peter279k/docker_fhir_validator_11
3713021b0277: Pull complete
11774ed96e66: Pull complete
d81f84b7fc25: Pull complete
Digest: sha256:7579743b548100cdee657a34cab725cfc619b45b503d4bdb46d910c6bdd184cc
Status: Downloaded newer image for peter279k/docker_fhir_validator_11:latest
docker.io/peter279k/docker_fhir_validator_11:latest

離線驗證

# Download IG package cache folder on the FHIR CI Build
$ wget -O package.tgz https://build.fhir.org/ig/cctwFHIRterm/MOHW_TWCoreIG_Build/package.tgz

# Or Download IG package cache folder on the Taiwan MOHW
$ wget -O package.tgz https://twcore.mohw.gov.tw/ig/twcore/package.tgz

# Create directory named IG name and version
$ mkdir tw.gov.mohw.twcore

# Extract the archived file to specific directory
$ tar -xvzf package.tgz -C tw.gov.mohw.twcore

# Download example JSON file
$ wget -O examples.json.zip https://build.fhir.org/ig/cctwFHIRterm/MOHW_TWCoreIG_Build/examples.json.zip
$ rm -rf examples.json && mkdir examples.json && unzip examples.json.zip -d examples.json

# Validate it!
docker run \
    -v $PWD/tw.gov.mohw.twcore:/root/.fhir/packages/tw.gov.mohw.twcore \
    -v $PWD/examples.json:/root/examples.json \
    peter279k/docker_fhir_validator_11:latest -c "cd /root/ && java -Dfile.encoding=UTF-8 -jar validator_cli.jar ./examples.json/Patient-pat-example.json -version 4.0 -ig tw.gov.mohw.twcore"
  • 使用方式

    • 下載所需要的package cache

    • 執行docker run時將其掛載(volume)進去

離線驗證

離線驗證

  • 若要執行JDK版本11且是TW Core IG 0.2.2

    • docker pull peter279k/tw_core_ig_validator_11:0.2.2

  • 若要執行JDK版本17且是TW Core IG 0.2.2

    • docker pull peter279k/tw_core_ig_validator_17:0.2.2

  • 將patient_example5.py所輸出的JSON內容

  • 輸出成patient_example5.json並執行驗證

docker run \
    -v /path/to/patient_example5.json:/root/patient_example5.json \
    peter279k/tw_core_ig_validator_11:0.2.2 -c "cd /root/ && java -Dfile.encoding=UTF-8 -jar validator_cli.jar ./patient_example5.json -version 4.0 -ig tw.gov.mohw.twcore"
......
Validate Patient against http://hl7.org/fhir/StructureDefinition/Patient|4.0.1..........20..........40..........60..........80.........|
 00:02.445
Done. Times: Loading: 01:56.949, validation: 00:02.447. Memory = 638Mb

Success: 0 errors, 3 warnings, 0 notes
  Warning @ Patient.identifier[0].type (line 1, col228): None of the codings provided are in the value set 'IdentifierType' (http://hl7.org/fhir/ValueSet/identifier-type|4.0.1), and a coding should come from this value set unless it has no suitable code (note that the validator cannot judge what is suitable) (codes = http://www.boca.gov.tw#PPN)
  Warning @ Patient.identifier[0].type.coding[0].system (line 1, col228): A definition for CodeSystem 'http://www.boca.gov.tw' could not be found, so the code cannot be validated
  Warning @ Patient (line 1, col948): Constraint failed: dom-6: 'A resource should have narrative for robust management' (defined in http://hl7.org/fhir/StructureDefinition/DomainResource) (Best Practice Recommendation)
Done. Times: Loading: 01:56.949, validation: 00:02.447. Max Memory = 1Gb

前述所有範例都可以在下面的連結找到

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

簡介MITW聯測松

  • 發展及推行支援標準化之系統

  • 以利於系之整合應用,以及系統複製、擴散、商品化應用

  • 開發好的服務或系統,透過聯測松的方式進行互通性之測試

  • 參與聯測松前的準備

    • https://github.com/peter279k/fhir-data-generator

    • https://twcore.hapi.fhir.tw

    • https://github.com/peter279k/docker_fhir_validator

    • https://github.com/peter279k/tw_core_ig_validator

    • 符合各式情境的前端使用者介面(各位的最後一哩路)

Outlines

  • 什麼是FHIR與基礎知識?

  • 以Python實作需要準備的工具

  • 示範Patient Resource example 1

  • 示範Patient Resource example 2

  • 示範Observation BMI Resource example 1

  • 驗證Resource的方法

  • 簡介MITW聯測松

  • 結論

結論

  • 透過走馬看花的方式了解FHIR醫學資訊標準與基本名詞解釋

  • 降低產生FHIR Resources之門檻

    • 透過peter279k/fhir-data-generator進行便利的產生Resources

  • 增加離線驗證的便利性

    • https://github.com/peter279k/docker_fhir_validator

    • https://github.com/peter279k/tw_core_ig_validator

Any Questions?

COSCUP 2024: Getting started with developing your first FHIR client with Python!

By peter279k

COSCUP 2024: Getting started with developing your first FHIR client with Python!

COSCUP 2023, Collaborating the PHPBrew : past, now and future

  • 125