เมื่อวันที่ 27 ส.ค. 64 ที่ผ่านมา WHO ได้ publish WHO Digital Documentation of COVID-19 Certificates: Vaccination Status (DDCC:VS) เพื่อเป็นแนวทางให้ประเทศสมาชิกได้นำไปใช้เป็นแนวทางในการ implement ใบรับรองการฉีดวัคซีน COVID-19 ทางอ.บุญชัยและพี่ไผ่เลยบอกให้ผมลองอ่าน ๆ ดูหน่อย ก็เลยได้มีโอกาสอ่านดูครับ ขอสรุปประเด็นสำคัญ ๆ ในโพสต์นี้ครับ
ในลิงค์ข้างต้นจะมีให้ดาวน์โหลดเอกสาร PDF ฉบับเต็ม แต่หากท่านใดต้องการอ่านสั้น ๆ ผมว่าใน technical briefing ของเขาก็จัดทำได้กระชับดีครับ ซึ่งโหลดได้จาก Web annex B นี้ครับ
คำศัพท์ที่เกี่ยวข้อง
- DDCC:VS Document: เป็น FHIR Document ที่เก็บ Core Data Set ที่เกี่ยวข้องกับ COVID-19 certificate และผ่านการ digital sign
- Core Data Set: ข้อมูลสำคัญเกี่ยวกับสถานะการฉีดวัคซีนที่ WHO อยากให้ประเทศสมาชิกเก็บข้อมูลให้ได้ตามนั้น จะมีที่เป็น required และ optional ใน 2 สถานการณ์คือ 1) continuity of care (เอาไว้ฉีดต่อ) 2) Proof of Verification
- Health Certificate Identifier (HCID): unique identifier ของ health certificate นั้น ๆ
- DDCC:VS Generation Service: ระบบที่เอาไว้สร้าง DDCC:VS Document
- DDCC:VS Registry Service: ระบบที่เก็บ HCID และ metadata ที่เกี่ยวข้อง (certificate reference) รวมถึง maintain ว่า HCID ไหนที่โดน revoke ไปบ้าง
- DDCC:VS Repository Service: ระบบที่เก็บ DDCC:VS Document จริง ๆ (ต้องใช้ certificate reference เพื่อมาเอา Document นั้น ๆ)
- Public Health Authority (PHA): หน่วยงานที่ดูแลด้านสาธารณสุขของประเทศสมาชิก
- Document Signing Certificate (DSC): คือคู่ public-private key ที่ PHA สร้างขึ้นเพื่อให้หน่วยงานต่าง ๆ เอาไปใช้ sign เอกสารดิจิทัล
พื้นฐานการทำงานของ DDCC:VS
ก่อนจะเข้าเรื่องได้ผมอาจต้องปูพื้นการทำงานของ DDCC:VS เล็กน้อยครับ ซึ่งในการ implement เรื่องนี้ ผมว่ามีประเด็นสำคัญอยู่ 2 ด้านครับ
ประเด็นที่ 1: format ของ certificate
- Paper first: คือการใช้กระดาษเป็นหลัก ข้อมูลทั้งหมดเขียนหรือพิมพ์ใส่กระดาษ ในกระดาษจะมี HCID อยู่ ซึ่งอาจพิมพ์ไว้ล่วงหน้า
- Offline digital: คือการใช้โปรแกรมบันทึกข้อมูลที่หน้างาน แล้วค่อยไป sync เข้าระบบในภายหลัง ต้องเตรียม HCID ใส่กระดาษไว้ล่วงหน้าเช่นกัน แต่สิ่งที่ต่างจากอันแรกคือโปรแกรมที่บันทึกข้อมูลอาจ generate 2D barcode (QR code) ซึ่งมี DDCC:VS ทั้งฉบับอยู่ในนั้น แล้วพิมพ์ใส่กระดาษให้คนไข้ การจะทำแบบนี้ได้โปรแกรมบันทึกข้อมูลก็ต้องมี DSC เพื่อให้ sign document ได้
- Online digital: คือทำทุกอย่าง online หมดเลย สามารถ generate ทั้ง HCID และ 2D barcode แบบ real-time ที่หน้างานได้ การทำแบบนี้สามารถใช้ Generation Service จากส่วนกลางในการ gen ได้ ดังนั้นไม่ต้องกระจาย DSC และสามารถเลือกจะเก็บอีก copy นึงของ DDCC:VS ไว้ที่ Repository Service ก็ได้
ประเด็นที่ 2: วิธีการ verify
- Manual verification: คือใช้ตาดูอย่างเดียว อ่านข้อมูลจากในบัตรแล้วประเมินเอา
- Offline cryptographic verification: ใช้ 2D barcode scanner อ่านจาก 2D barcode แล้ว decrypt เอาข้อมูลออกมา การจะทำแบบนี้ได้ก็คือ app ที่จะเป็น verifier ก็ต้องมี public key ของ DSC วิธีนี้เราก็จะเชื่อได้ว่าข้อมูลที่ decrypt มาเชื่อถือได้ เพราะมี digital signature อยู่
- Online status check: ก็การส่งข้อมูลไป verify กับส่วนกลาง และในการ verify อาจมี 2 ระดับ คือ verify แค่ในประเทศ และ verify กับต่างประเทศด้วย การทำแบบนี้มีข้อดีเพิ่มคือ 1) มั่นใจได้ว่า certification นั้นยังไม่โดน revoke 2) หากมีการตรวจสอบกับ Repository service ก็จะตรวจได้ว่า DDCC content ใน 2D barcode หรือ app นั้น ๆ ตรงกับใน repository กลาง
ลองดูสไลด์เหล่านี้ประกอบครับ



ดังนั้น หากจะ implement แบบให้มีทุก component เลย ก็จะเป็นดังภาพนี้

ซึ่งในขั้นตอนต่าง ๆ ทาง WHO ได้แนะนำให้นำ HL7 FHIR มาใช้ครับ โดยทีมงานได้สร้าง Implementation Guide ไว้ ซึ่งจะลงรายละเอียดในส่วนต่อไป
Transaction ที่เกิดขึ้น
สรุปแล้วมี 6 transactions
- Submit Health Event: เอาไว้ให้ Digital Health Solution ส่งข้อมูลไปยัง DDCC:VS Generation Service
- Store Health Certificate: เอาไว้ให้ DDCC:VS Generation Service ส่ง DDCC Document ไปเก็บไว้ที่ DDCC:VS Repository Service
- Register Health Certificate: เอาไว้สร้าง health certificate reference (ว่าเก็บ certificate ไว้ที่ไหน อย่างไร) ใน DDCC:VS Registry Service โดยเป็นการ comply ตาม IHE MHD ITI-65
- Retrieve Health Certificate Reference: เอาไว้ให้ Verifier ส่งไปถาม DDCC:VS Registry Service เพื่อขอ certificate reference โดยทำตาม IHE MHD ITI-67
- Retrieve Health Certificate: เอาไว้ขอ certificate จริง ๆ จาก DDCC:VS Repository Service โดยทำตาม IHE MHD ITI-68
- Retrieve Health Folder: เอาไว้ขอ folder (ที่เก็บรวบรวม certificate reference) จาก DDCC:VS Registry Service โดยทำตาม IHE MHD ITI-66
ขั้นตอนเมื่อมีการฉีดวัคซีน
- เมื่อหน้างานฉีดวัคซีนแล้ว ลงข้อมูลใน Digital Health Solution ระบบจะสร้าง Batch Bundle resource ซึ่งมี entry เป็น Parameter resource (ใช้ DDCC Generate Health Certificate Parameters profile) โดยภายใน Parameter จะมี QuestionnaireResponse resource (ใช้ DDCC Questionnaire Response profile) อยู่
- ระบบจะส่ง bundle นั้นไปที่ DDCC:VS Generation Service ที่คำสั่ง DDCC Generate Health Certificate Operation (เป็น custom operation ชื่อ $generateHealthCertificate) โดย Submit Health Event transaction (transaction #1)
- DDCC:VS Generation Service จะ serialize ข้อมูลที่ได้ แล้วจัดทำ Document Bundle resource (ใช้ DDCC Document profile) เราจะเรียก Document Bundle นี้ว่า DDCC Document
- จัดทำ 2D barcode จัดการ sign ทุกอย่างให้เรียบร้อยด้วย Document Signing Certificate (DSC) ที่ออกให้โดย Public Health Authority (PHA) จากนั้นส่ง DDCC Document ที่ signed แล้ว กลับไปที่ Digital Health Solution

ถ้า format ของ certificate เป็น online digital ต้องมีขั้นตอนเพิ่ม (เป็น paper-first กับ offline digital ไม่ต้องมี เพราะเป็นการ generate HCID ไว้แล้วล่วงหน้า) โดย DDCC:VS Generation Service ดำเนินการดังต่อไปนี้:
- เช็คกับ DDCC:VS Registry Service ว่ามี record อยู่แล้วหรือยัง ด้วย Retrieve Health Folder transaction (transaction #5) เพื่อขอ List resource (ใช้ DDCC Folder profile) ซึ่งภายใน list นั้นรวบรวม certificate reference (metadata ของ certificate) ซึ่งเป็น DocumentReference resource (ใช้ DDCC Document Reference profile) List resource นี้เรียกว่า DDCC Folder
- ถ้าใน implementation มีการใช้ DDCC:VS Repository Service ด้วย ให้ส่ง DDCC Document ไป create (POST) ที่ repository ด้วย Store Health Certificate transaction (transaction #2)
- ให้ส่ง Transaction bundle (ใช้ DDCC Provide Document Bundle profile) ด้วย Register Health Certificate transaction (transaction #3) ไปที่ DDCC:VS Registry Service
- ให้เอา endpoint ของ DDCC:VS Registry Service เก็บไว้ใส่เข้าไปใน response message (ของ Generation Service) ด้วย

ขั้นตอนเมื่อมีการ online verification
- คนไข้แสดง vaccine certificate กับเจ้าหน้าที่ ระบบที่เจ้าที่ใช้จะส่ง request ไปที่ DDCC:VS Registry Service โดยส่ง Retrieve Health Certificate Reference transaction (transaction #4) เพื่อขอ certificate reference (ก็คือ DocumentReference) หรือส่ง Retrieve Health Folder transaction (transaction #6) เพื่อขอ DDCC Folder
- หากมีการใช้ DDCC: Repository Service ให้ verifier นำ certificate reference ที่ได้จากขั้นตอนก่อนหน้า ส่งไปที่ DDCC: Repository Service ด้วย Retrieve Health Certificate transaction (transaction #5) เพื่อให้ได้ DDCC Document (certificate ตัวจริง) กลับมา
สรุป FHIR Resources ที่เกี่ยวข้อง
- ถ้าจะใช้ FHIR ในการส่งข้อมูลจากแอพเลย ให้ทำ Batch bundle ที่ข้างในมี Parameter และข้างใน Parameter มี QuestionnaireResponse → เอาไว้ส่งไป DDCC:VS Generation Service
- DDCC Document สร้างด้วย Document bundle ซึ่งประกอบด้วย
- Composition (ddccComposition)
- Patient (ddccPatient)
- Organization (ddccOrganization)
- Immunization (ddccImmunization)
- ImmunizationRecommendation (ddccImmunizationRecommendation)
- DocumentReference (ddccQR)
- หมายเหตุเล็กน้อยว่า ในตัวอย่างจากในเว็บ Document ที่สร้างมาไม่มี QR code ตรงนี้
- DDCC Provide Document Bundle ซึ่งสร้างด้วย Transaction bundle → เอาไว้ส่งไปไว้ที่ DDCC:VS Registry Serviceซึ่งประกอบด้วย
- List (DDCCSubmissionSet), DocumentReference (DDCCDocumentReference) List (DDCCFolder), Patient (DDCCPatient)
- อย่างไรก็ดี bundle นี้เป็นการสร้างตาม profile ของ IHE MHD (MinimalProvideDocumentBundle)
ตัวอย่าง FHIR Resources ที่เกี่ยวข้อง
ไฟล์ตัวอย่างของ Implementation Guide นี้ สามารถดาวน์โหลดได้ที่หน้านี้
ข้างในจะมีไฟล์เยอะ แต่หากสนใจที่ DDCC Document ให้ดูที่ Bundle-Example-English.json ได้ครับ โครงสร้างข้างในค่อนข้างตรงไปตรงมา
ลอง Mapping Core Data Set เข้ากับ FHIR Resources
ผมได้นำ Excel sheet ของ Core Data Set มาลอง mapping เข้ากับ FHIR core specification และ DDCC profile (column D ของ sheet นี้) จะพบว่าในส่วนที่เป็น required มีข้อมูลอยู่ในไฟล์ตัวอย่างหมดแล้ว อย่างไรก็ดี ในไฟล์ตัวอย่าง ไม่ได้นำข้อมูลที่เป็น optional ใน Core Data Set มาใส่ทั้งหมด (แต่ถ้าจะเพิ่มก็ไม่ได้ยาก)

และมีข้อมูล 3 อย่างที่ผมไม่แน่ใจว่าควรใช้ FHIR element ใดในการ represent ซึ่งได้ไฮไลท์สีเหลือง และระบุว่า NOT SURE ไว้ ได้แก่ Signature of health worker, Certificate valid from, Certificate valid until, Certificate schema version
รายละเอียดดังใน Google Sheet นี้ครับ
Code System
ทาง WHO กำหนดมาแทบทั้งหมดแล้ว เช่น ชนิดของวัคซีน ก็ preferred ให้ใช้ ICD-11 แต่ก็มี mapping มาให้แล้วถ้าจะใช้ system อื่น เช่น SNOMED-CT, ICD-10, ATC แต่บางระบบอาจไม่ได้สมบูรณ์ ลองดูในไฟล์ Excel ต้นฉบับนี้ครับ web annex A: DDCC:VS core data dictionary
Code System ที่ WHO เปิดช่องให้เรากำหนดเอง มีแค่ 5 เรื่องครับ
- Patient Identifier → เป็น optional-recommend แต่เราก็น่าจะมีทาง identify อยู่แล้ว
- Vaccine brand
- Vaccine manufacturer หรือ Vaccine market authorization holder เลือกใส่อันใดอันหนึ่งได้ ไม่จำเป็นต้องใส่ทั้งสอง
- Administering centre → สถานที่ฉีดวัคซีน
- Health worker identifier → แต่อันนี้เป็น optional
ความเห็นผม
- คิดว่าส่วน DDCC Document อันนี้เอามาใช้เลยได้ครับ ไม่ซับซ้อนและทำไม่ยาก ยกเว้นส่วน QR code ซึ่งเขาใส่มาใน DocumentReference อันนี้ผมยังทำไม่เป็น อาจต้องลองศึกษาเพิ่มครับ
- แต่ถามว่าเป็นเรื่องด่วนไหมที่ต้องทำให้ได้ตามนี้ก็อาจจะไม่ด่วนครับ ถ้ามีประเด็นอื่นสำคัญกว่าก็ทำไปก่อนได้ครับ ผมว่าประเทศอื่น ๆ ส่วนใหญ่ก็คงยังไม่สามารถ comply ได้ในทันที
- ส่วนที่เอาไว้เก็บข้อมูลจากหน้างาน แล้วส่งเป็น (QuestionnaireResponse ใน Parameter) อันนี้คิดว่าทางกระทรวงสธฯ น่าจะมี tool อยู่แล้ว อาจไม่จำเป็น ค่อยไปแปลงข้อมูลที่ส่วนกลางเป็น DDCC Document ก็น่าจะได้
- ส่วน registry และ repository อันนี้ประเมินไม่ถูกว่ายากง่าย ต้องลองอ่าน spec ของ IHE MHD ดูครับ แต่คิดว่าน่าจะไม่ยาก