FHIR Shorthand

SIL-Thailand
SIL-Thailand
Published in
3 min readJul 16, 2021
Image source: hl7.org

Resources ต่างๆ ใน FHIR ได้รับการออกแบบโดยคํานึงถึงกฎ 80/20 โดยมุ่งเน้นที่ requirement 20% ที่ตอบสนองด้านการทํางานร่วมกัน (Interoperability) 80% ดังนั้น ในการนำ FHIR resources ไปใช้งานในบริบทต่างๆ ควรมีการทำ Profile เพื่อ

  • กำหนด contraint ให้กับ element ต่างๆ ใน resource เมื่อนิยามของ resource เดิมนั้นกว้างเกินไป (too generic)
  • กำหนด extension ให้กับ resource เมื่อนิยามของ resource เดิมนั้นไม่เพียงพอต่อการใช้งาน

ในการสร้าง FHIR Profile หรือ Implemention Guide (IG) สามารถทำได้โดยใช้วิธีการหรือเครื่องมือต่างๆ แต่ละวิธีมีข้อดี ข้อเสียแตกต่างกันไป

  • สร้างหรือแก้ไข FHIR Conformance artifacts เช่น StructureDefinition และ ValueSet เอง​ (manual editing) ตั้งแต่เริ่มต้น เป็นงานใหญ่และซับซ้อนตั้งแต่เริ่ม แต่มีข้อดีคือ ผู้นิพนธ์สามารถควบคุมได้อย่างเต็มที่ในทุกแง่มุม
  • Excel spreadsheet เป็นวิธีดั้งเดิมที่เคยใช้เป็นการภายในตั้งแต่พัฒนา FHIR รุ่นแรกๆ ข้อเสียคือการจัดการเวอร์ชันนั้นเป็นเรื่องยาก ไฟล์จะถูกบันทึกในรูปแบบของ Excel ซึ่งเนื้อหาผสมกับคําสั่งการจัดรูปแบบ (FHIR Spreadsheet Profile Authoring)
  • Forge/Simplifier และ Trifolia-on-FHIR เป็น form-based GUI ที่ช่วยทำให้การสร้าง FHIR profile หรือ Implementation Guide (IG) นั้นง่ายขึ้นมาก แต่การกรอกข้อมูลในแต่ละช่องของฟอร์มทีละหน้าอาจจะไม่เป็นที่ชื่นชอบสำหรับ developer เท่าใดนัก

FHIR Shorthand (FSH อ่านออกเสียงเป็น ฟิช) เป็นภาษาสคริปต์ที่ใช้สำหรับนิยาม FHIR artifacts ที่ใช้สำหรับสร้าง Profile และ Implementation Guide (IG)

FSH เป็นภาษาที่ออกแบบมาสำหรับการทำ profile และ IG ทำให้การสร้างและ maintenance FHIR profile และ IG นั้นสะดวก รวดเร็ว scalable และ developer-friendly มากกว่าวิธีอื่นๆ มีความคล่องตัวในการแก้ไขกว่าการใช้ GUI tools เช่น cut/copy/paste, search และ replace, spell checking และเนื่องจากเป็นมาตรฐานจาก HL7 FHIR เองจึงมั่นใจได้ในความเสถียรและการพัฒนาที่ต่อเนื่อง

เครื่องมือที่เป็น reference implementationใช้ในการแปลง FSH เป็น FHIR artifacts คือ SUSHI (อ่านออกเสียงเป็นซูชิ 🍣🤤 ย่อมาจาก SUSHI Unshortens ShortHand Inputs) SUSHI สามารถติดตั้งและใช้งานในเครื่องของ developer ได้โดยตรง (วิธีการติดตั้ง ผ่าน npm ต้องการ node.js)

Image source: hl7.org

สคริปต์ภาษา FSH เป็นไฟล์ข้อความธรรมดา (text file) ที่มี extension เป็น .fsh จึงสามารถแจกจ่าย สนับสนุนการทำงานเป็นทีม และ version-control tools เช่น GitHub เป็นอย่างดี สำหรับ code editor ยอดนิยมอย่าง Visual Studio Code นั้นมี extension สำหรับ FSH syntax highlighting ใน marketplace อีกด้วย

เอกสาร (documentation) ของ SUSHI และ tutorial ของภาษา FSH จะแยกไปอยู่บน web site ต่างหากชื่อว่า FSH School (https://fshschool.org/)

นอกจากนี้ บน FSH School ยังมี FSH Playground ให้ทดลอง FSH แบบ online ก่อนโดยไม่ต้องติดตั้ง SUSHI ไว้ในเครื่องแต่อย่างใด

ทดลองสร้าง profile ด้วย FSH และ SUSHI

ใน standard Patient resource เดิมกำหนด cardinality สำหรับ element gender และ maritalStatus เป็น 0..1 ทั้งคู่ ใน profile SILTHPatientProfile ที่จะสร้างจะบังคับให้ต้องมีข้อมูล gender และไม่ต้องมีข้อมูล maritalStatus ได้โดยการกำหนด ขอบเขต cardinality ใหม่ใน profile

หลังจากคลิกที่ Convert to JSON เพื่อสร้าง FHIR artifact จาก FSH, SUSHI จะสร้าง resource StructureDefinition ของ profile SILTHPatientProfile ในรูปแบบ JSON format

ตามข้อกำหนดของ FHIR อนุญาตให้กำหนด cardinality ของ element ใน resource โดยที่ขอบเขตไม่ขัดแย้งหรือกว้างกว่า cardinality ของ standard resource หรือ profile เดิมที่นำมาใช้เป็นฐาน เช่น cardinality เดิมของ element เป็น 0..1 หรือ 0..* จะสามารถกำหนด cardinality ใหม่ใน profile เป็น 0..0 (ไม่มี) หรือ 1..1 (ต้องมีและมีไม่เกิน 1 เท่านั้น) แต่ถ้า cardinality เดิมของ element เป็น 0..0 จะไม่สามารถกำหนดเป็น 0..1 หรือ 1..1 และเดิมเป็น 1..1 จะไม่สามารถกำหนดเป็น 0..0 หรือ 0..1 ได้ เช่นกัน

ใน profile MyPatientProfile กำหนด cardinality ของ element maritalStatus กว้างกว่าใน profile SILTHPatientProfile ที่ใช้เป็นฐาน SUSHI จะแจ้ง error message ระบุความผิดพลาดที่เกิดขึ้น

ทดลองเพิ่ม Extension

ใน FSH สามารถกำหนด extension ใหม่ได้โดยใช้ keyword Extension แต่โดยปกติก่อนที่จะสร้าง extension ขึ้นมาใหม่ ควรตรวจสอบดูก่อนว่า extension ที่ต้องการเคยมีการกำหนดไว้ขึ้นมาแล้วหรือไม่

ใน standard Patient resource เดิมมีแต่ element birthDate ที่มี data type เป็น date ไม่มี element สำหรับข้อมูลเวลาเกิดซึ่งอาจมีความจำเป็นต้องใช้หากเป็นข้อมูลสำหรับ Patient ที่เป็นเด็กแรกเกิด ก่อนที่จะสร้าง extension ขึ้นมาใหม่ สอบค้น extension ที่ต้องการ พบว่าใน HL7 FHIR มีการกำหนด extention birthTime ที่มี data type เป็น dateTime ไว้แล้ว จึงไม่จำเป็นต้องนิยาม extention ขึ้นมาใหม่ สามารถแทรก extention ที่ต้องการเข้าไปใน profile ได้เลย

ดูรายละเอียดเพิ่มเติมของ FSH Language ได้ที่

--

--