VN Core Deep Dive

Bundle và Validation: nơi profile gặp dữ liệu thật

Một profile đơn lẻ chỉ mô tả một resource. Hệ thống thật trao đổi cả hồ sơ, claim, đơn thuốc, kết quả xét nghiệm và tài liệu lâm sàng. VN Core dùng Bundle, examples, 5 CapabilityStatements và 4 OperationDefinitions để biến constraint thành hợp đồng tích hợp end-to-end.

Tóm tắt nhanh

  • Bundle là test case tự nhiên của IG. Nếu từng resource pass validator nhưng Bundle sai reference, workflow vẫn không liên thông.
  • Example nên được đọc trước khi tự viết bộ chuyển đổi. Example cho thấy cách reference, fullUrl, profile, identifier và terminology đi cùng nhau.
  • Validation có nhiều lớp. Pass JSON schema chưa đủ; cần pass FHIR base, profile, terminology, reference graph và rule nghiệp vụ.
  • CapabilityStatement là hợp đồng API. Nó nói server/client phải hỗ trợ resource, search parameter và operation nào.

1. Vì sao cần đọc Bundle sau Profile

Nhiều lỗi tích hợp không xuất hiện khi validate từng resource riêng lẻ. Patient đúng, Coverage đúng, Claim đúng, nhưng Claim trỏ sai Coverage; Composition đúng nhưng Bundle document không đặt Composition làm entry đầu tiên; Observation đúng nhưng code nằm ngoài ValueSet của use case. Bundle giúp phát hiện các lỗi hệ thống như vậy.

Với VN Core, Bundle cũng là cách diễn giải workflow Việt Nam. Một gói BHYT cho ngoại trú không chỉ có Claim; nó cần Patient, Encounter, Coverage, Organization, Practitioner, Diagnosis, Procedure/Service và dữ liệu chi phí liên quan. Một IPS summary không chỉ là Composition; nó cần danh sách section và resource lâm sàng đi kèm.

2. Các kiểu Bundle trong VN Core

Document Bundle

Gói tài liệu có Composition làm entry đầu tiên; phù hợp EMR summary, IPS, hồ sơ sức khỏe cá nhân.

VNCoreBundleIPS, Composition, DocumentReference

Transaction Bundle

Gửi nhiều resource trong một request có thứ tự xử lý rõ; phù hợp workflow tạo/cập nhật đồng bộ.

Bundle.type = transaction

BHYT submission Bundle

Gói dữ liệu claim/coverage/EOB và logical model phục vụ bridge dữ liệu đầu ra KCB.

ExampleBHYTSubmissionOutpatient

Health credential Bundle

Gói hồ sơ sức khỏe/credential chia sẻ cho citizen app hoặc tích hợp VNeID trong tương lai.

ExampleBundleHealthCredential

3. Năm lớp validation

FHIR base

Resource có đúng schema R4, datatype, cardinality base và invariant nền không.

VN Core profile

Payload khai báo `meta.profile` và pass StructureDefinition VN Core đúng version.

Terminology

Code có đúng `system + code + version`, đúng ValueSet và đúng binding strength không.

Reference graph

Reference trong Bundle có trỏ tới resource hợp lệ và đúng profile kỳ vọng không.

Operation/business rule

Các rule như validate BHYT claim, generate IPS summary, reverse submission có tham số và outcome đúng không.

4. CapabilityStatement và OperationDefinition

CapabilityStatement trả lời câu hỏi một hệ thống FHIR trong phạm vi VN Core phải hỗ trợ gì: resource nào, profile nào, search parameter nào, interaction nào và operation nào. Đây là tài liệu mà nhà cung cấp nên đọc trước khi nói server "hỗ trợ VN Core".

OperationDefinition mô tả operation ngoài CRUD thông thường. Trong VN Core v0.6.0, các operation như vn-validate-bhyt-claim, vn-submit-bhyt-claim, vn-reverse-bhyt-claimvn-generate-ips-summary giúp diễn đạt những workflow không thể mô tả chỉ bằng GET/POST/PUT resource đơn.

Validation order for a production payload
1. Validate each resource against FHIR R4 base
2. Validate meta.profile against VN Core package version
3. Validate terminology bindings and identifier systems
4. Validate Bundle reference graph and fullUrl consistency
5. Run operation/business-rule validation for the workflow

5. Checklist trước go-live

Mỗi resource trong Bundle có `meta.profile` đúng version VN Core cần claim conformance.
Bundle dùng `fullUrl` ổn định; reference nội bộ trỏ đúng resource và không phụ thuộc thứ tự ngẫu nhiên.
Document Bundle có Composition ở entry đầu tiên và section/reference đầy đủ theo profile.
Transaction Bundle được test idempotency, lỗi từng entry và rollback/compensation theo năng lực server.
Terminology validation chạy với đúng package và đúng phiên bản bộ mã đang áp dụng.
CapabilityStatement của hệ thống được đối chiếu với API thực tế, không chỉ với tài liệu marketing.
OperationOutcome được log và trả lại đủ chi tiết để đội tích hợp sửa payload mà không đoán lỗi.