1. ECL là gì, và khi nào cần đến nó
Ô tìm thuật ngữ trả lời câu hỏi “thuật ngữ này viết thế nào”. ECL (Expression Constraint Language) trả lời một câu hỏi khác hẳn: “cho tôi TẤT CẢ những khái niệm thoả điều kiện này”.
Ví dụ những việc chỉ ECL làm được:
- Lấy trọn bộ mã của mọi loại nhồi máu cơ tim để dựng danh mục chẩn đoán cho khoa Tim mạch.
- Lấy mọi bệnh có vị trí tổn thương ở tim, kể cả những bệnh không có chữ “tim” trong tên.
- Rà xem trong một nhánh chuyên khoa còn bao nhiêu khái niệm chưa được dịch.
ECL là ngôn ngữ do chính SNOMED International quy định, không phải quy ước riêng của phần mềm này. Biểu thức anh viết ở đây dùng lại được trên mọi máy chủ SNOMED CT khác.
2. Bốn ký hiệu phải thuộc
Mọi biểu thức đều dựng từ mã concept cộng với ký hiệu chỉ phạm vi:
| Ký hiệu | Nghĩa | Ví dụ | Kết quả |
|---|---|---|---|
<< | Chính nó và mọi khái niệm con cháu | << 22298006 | Nhồi máu cơ tim và mọi loại nhồi máu cơ tim |
< | Chỉ con cháu, không lấy chính nó | < 22298006 | Các loại nhồi máu cơ tim, bỏ khái niệm gốc |
<! | Chỉ con trực tiếp, không lấy cháu | <! 64572001 | Các nhóm bệnh ở tầng ngay dưới “Bệnh” |
>> | Chính nó và mọi khái niệm cha ông | >> 22298006 | Nhồi máu cơ tim, bệnh tim thiếu máu cục bộ, bệnh tim… |
Viết trần một mã (22298006) là chỉ lấy đúng một khái niệm đó.
3. Ghép nhiều điều kiện
| Toán tử | Nghĩa | Ví dụ |
|---|---|---|
AND | Giao — nằm trong cả hai tập | << 19829001 AND << 301867009 |
OR | Hợp — nằm trong một trong hai | << 22298006 OR << 230690007 |
MINUS | Trừ — thuộc tập đầu nhưng không thuộc tập sau | << 64572001 MINUS << 22298006 |
Dùng ngoặc đơn khi trộn nhiều toán tử, đúng như trong toán học:
(<< 22298006 OR << 230690007) MINUS << 40733004
4. Lọc theo thuộc tính — chỗ ECL mạnh hơn hẳn tìm chữ
Mỗi khái niệm SNOMED CT không chỉ có tên, nó còn có thuộc tính: bệnh này ở bộ phận nào, tổn thương hình thái gì, thủ thuật này làm trên bộ phận nào. Cú pháp:
tập_khái_niệm : mã_thuộc_tính = giá_trị
Ví dụ, mọi bệnh có vị trí tổn thương nằm trong cấu trúc tim:
< 404684003 : 363698007 = << 80891009
Cách đọc: trong Phát hiện lâm sàng (404684003), lấy những khái niệm có
vị trí tổn thương (363698007) là cấu trúc tim
(80891009) hoặc bất kỳ bộ phận nào của tim.
Vì sao điều này quan trọng: tìm theo chữ “tim” sẽ bỏ sót “Bệnh Fallot bốn chứng”, “Hội chứng Eisenmenger” — những bệnh tim không có chữ “tim” trong tên. Lọc theo thuộc tính thì không bỏ sót, vì nó đi theo nghĩa chứ không theo mặt chữ.
Vài thuộc tính hay dùng
| Mã | Thuộc tính | Dùng cho |
|---|---|---|
363698007 | Vị trí tổn thương | Bệnh nằm ở bộ phận nào |
116676008 | Hình thái tổn thương | Viêm, u, hoại tử… |
246075003 | Tác nhân gây bệnh | Vi khuẩn, vi rút nào |
405813007 | Vị trí thủ thuật trực tiếp | Thủ thuật làm trên bộ phận nào |
260686004 | Phương pháp | Cắt, nội soi, khâu… |
5. Lấy theo bộ tham chiếu (refset)
Dấu ^ lấy mọi thành viên của một bộ tham chiếu — dùng khi cần đúng danh sách mà
SNOMED International (hoặc một quốc gia) đã công bố sẵn:
^ 447562003
Đây là bộ ánh xạ SNOMED CT sang ICD-10. Ghép với điều kiện khác cũng được:
^ 447562003 AND << 64572001
6. Mã gốc hay dùng khi bắt đầu
| Mã | Khái niệm | Ghi chú |
|---|---|---|
138875005 | SNOMED CT Concept | Gốc của toàn bộ cây |
404684003 | Phát hiện lâm sàng | Bao gồm cả triệu chứng lẫn bệnh |
64572001 | Bệnh | Hẹp hơn “phát hiện lâm sàng” |
71388002 | Thủ thuật | Phẫu thuật, thăm dò, chăm sóc |
123037004 | Cấu trúc cơ thể | Giải phẫu |
105590001 | Chất | Hoạt chất, hoá chất |
373873005 | Chế phẩm dược | Thuốc |
363787002 | Quan sát được | Chỉ số đo được: mạch, huyết áp… |
7. Đọc kết quả trên màn hình
- “concept khớp biểu thức” là tổng số trên máy chủ thuật ngữ, không phải số dòng đang hiện. Biểu thức khớp 4.000 mà màn hình hiện 50 là bình thường — tăng ô Số dòng hoặc dùng ô Bỏ qua để xem tiếp.
- “đã có bản dịch” đếm số concept trong trang này có bản dịch tiếng Việt đã phát hành. Chênh lệch giữa hai con số chính là phần việc dịch còn lại của nhánh đó.
- Dòng ghi chưa dịch vẫn là kết quả đúng của biểu thức — nó chỉ chưa có tên tiếng Việt. Không bao giờ bị giấu đi, vì giấu là danh mục trông như thiếu mã.
8. Nhãn ngữ nghĩa trong ngoặc đơn
Mỗi dòng kết quả có một nhãn nhỏ trong ngoặc sau thuật ngữ: (bệnh), (thủ thuật), (cấu trúc cơ thể)… Đây là semantic tag của SNOMED CT, lấy từ tên đầy đủ (FSN), hiện bằng cả tiếng Việt lẫn tiếng Anh.
Không có nhãn là rất dễ chọn nhầm. SNOMED CT có những khái niệm tên giống hệt nhau, chỉ khác nhãn:
Fracture of femur (disorder)— cái gãy xương, là một bệnh;Fracture of femur (finding)— một phát hiện lâm sàng.Heart (body structure)— quả tim, là giải phẫu;Heart transplant (procedure)— ghép tim, là thủ thuật.
Chọn nhầm nhãn là hồ sơ bệnh án mang mã sai loại, và không ai phát hiện được vì tên hiển thị trông đúng.
Nhãn nào chưa có bản dịch chuẩn thì giữ nguyên tiếng Anh — thà để nguyên văn còn hơn dịch sai một nhãn quyết định nghĩa của cả thuật ngữ.
9. Lưu tạm và xuất Excel
Lưu tạm giữ lại biểu thức kèm tên và ghi chú, riêng cho tài khoản của anh. Biểu thức thật thường dài và khó gõ lại; lưu rồi thì lần sau bấm Dùng lại là chạy ngay, và người khác đọc được danh mục này dựng từ điều kiện nào.
Bản lưu tạm không phải ValueSet đã phê duyệt. Nó là bản nháp cá nhân, không qua quy trình duyệt và không được EMR gọi tới lúc chạy thật.
Xuất Excel kết xuất toàn bộ concept khớp biểu thức, không chỉ trang đang xem (tối đa 10.000 dòng mỗi lần). Tệp có hai trang:
- Ket qua — mã SCT, thuật ngữ và nhãn tiếng Việt, thuật ngữ và nhãn tiếng Anh, tên đầy đủ, đã dịch hay chưa.
- Nguon — biểu thức, phiên bản SNOMED CT, người và thời điểm kết xuất, kèm cảnh báo nội dung chưa phê duyệt lâm sàng.
Cột mã SCT được ghi dạng text. Đừng đổi sang định dạng số: mã SNOMED CT dài tới 18 chữ số, Excel hiểu là số sẽ làm tròn thành ký hiệu khoa học và mã sai vĩnh viễn khi mở lại tệp.
10. Gọi từ phần mềm EMR
Cùng một khả năng này, EMR gọi qua API chuẩn FHIR — không phải giao diện riêng của phần mềm này. Chi tiết hợp đồng ở API contract.
GET /fhir/ValueSet/$expand
?url=http://snomed.info/sct/900000000000207008/version/20260801?fhir_vs=ecl/<< 22298006
&displayLanguage=vi&count=50&offset=0
Muốn lọc thêm theo chữ (kể cả chữ tiếng Việt) ngay trong phạm vi biểu thức, thêm
&filter=màng tim. Kiểm một mã có nằm trong phạm vi hay không:
GET /fhir/ValueSet/$validate-code?url=…?fhir_vs=ecl/<< 22298006&code=57054005
11. Lỗi thường gặp
| Hiện tượng | Nguyên nhân |
|---|---|
| Không ra kết quả nào | Mã gốc viết sai, hoặc điều kiện AND quá chặt nên giao rỗng. Thử bỏ bớt một vế. |
| Ra quá nhiều, máy chậm | Biểu thức bắt đầu từ gốc cây (<< 138875005). Thu hẹp về nhánh chuyên khoa. |
| Kết quả toàn tiếng Anh | Nhánh đó chưa được dịch. Đây là thông tin thật, không phải lỗi hiển thị. |
| Báo lỗi cú pháp | Thiếu dấu cách quanh AND/OR/MINUS, hoặc ngoặc không khớp. |
| Kết quả khác đồng nghiệp | Hai người chạy trên hai phiên bản SNOMED CT khác nhau. Đối chiếu ô Phiên bản. |
Quy định đầy đủ về ECL do SNOMED International ban hành; tài liệu này chỉ hướng dẫn phần dùng thường ngày trên phần mềm.