Chuẩn thông điệp HL7 v2.8

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu chuẩn HL7 v2 8 và xây dựng ứng dụng hỗ trợ thu thập thông tin phục vụ công tác y tế dự phòng tỉnh thái nguyên​ (Trang 64)

- Cấu trúc cơ bản của một thông điệp HL7

Mỗi một thông điệp HL7 là một bản tin text được cấu trúc theo các segment thông tin. Mỗi segment gồm có trường thông tin được phân tách bởi một kí tự đặc biệt (thường dùng là |). Tùy thuộc vào mỗi loại thông điệp khác nhau mà số lượng các segment và thông tin được sử dụng có thể khác nhau.

Bảng 3.1: Các segment thông tin của một thông điệp HL7

STT Name Ý nghĩa sử dụng

1 MSH Message Header Thông tin header của bản tin 2 SFT Software Segment Thông tin về phần mềm 3 EVN Event Type Thông tin về sự kiện 4 PID Patient

Identification

Thông tin về bệnh nhân

5 PD1 Patient Additional Demographic

STT Name Ý nghĩa sử dụng

6 ROL Role Thông tin về người vài trò với bệnh nhân 7 MRG Merge patient

information segment

Hợp nhất thông tin bệnh nhân

8 NK1 Next of Kin / Associated Parties

Thông tin về thân nhân bệnh nhân trong xã hội

9 PV1 Patient Visit Thông tin về đợt điều trị (patient visit) 10 PV2 Patient Visit -

Additional Information

Thêm thông tin về đợt điều trị

11 DB1 Disability Thông tin về khuyết tật 12 OBR Observation

request

Thông tin về yêu cầu xét nghiệm

13 OBX Observation/Result Thông tin về kết quả xét nghiệm 14 AL1 Patient Allergy

Information

Thông tin về dị ứng

15 DG1 Diagnosis Thông tin chẩn đoán 16 DRG Diagnosis Related

Group

Thông tin về chẩn đoán nhóm liên quan.

17 GT1 Guarantor Thông tin về người bảo lãnh trả viện phí.

18 ACC Accident Thông tin vụ tai nạn mà bệnh nhân đã tham gia. 19 UB1 UB82 Thông tin dữ liệu cần thiết về bệnh nhân để hoàn

thành luật UB82

20 UB2 UB92 Thông tin dữ liệu cần thiết về bệnh nhân để hoàn thành luật UB92

21 PDA Patient Death and Autopsy

Thông tin về khám nghiệm tử thi khi bệnh nhân chết.

STT Name Ý nghĩa sử dụng

22 IAM Patient Adverse Reaction

Information

Thông tin về bệnh nhân phản ứng bất lợi về nó.

23 NPU Bed Status Update Thông tin trạng thái giường ngủ cập nhật 24 IN1 Insurance Thông tin về bảo hiểm

25 IN2 Insurance additional information segment

Bổ sung thông tin bảo hiểm

26 IN3 Insurance additional information, certification segment

Bổ sung thông tin bảo hiểm, có chứng nhận

27 FT1 Financial transaction segment

Thông tin giao dịch tài chính

28 PR1 Procedures segment

Thông tin về phẫu thuật/thủ thuật

MSH là segment quan trọng nhất của mỗi bản tin. Nó được dùng để xác định cấu trúc của bản tin theo từng kiểu bản tin được áp dụng. Qua MSH ta có thể xác định được đầy đủ các thông tin về nơi gửi, nơi nhận, ý nghĩa sử dụng của thông điệp trong một tiến trình giao dịch cụ thể của hai hệ thống thông tin.

Bảng 3.2: Các trường thông tin trong MSH SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng

1 ST R Field Separator Kí tự phân tách |

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng

3 HD O Sending Application Ứng dụng gửi thông điệp 4 HD O Sending Facility Nơi gửi thông điệp 5 HD O Receiving Application Ứng dụng nhận 6 HD O Receiving Facility Nơi nhận

7 TS O Date/Time Of Message Thời gian tạo bản tin

8 ST O Security Bảo mật

9 CM R Message Type Loại bản tin

10 ST R Message Control ID Mã điều khiển bản tin

11 PT R Processing ID Mã tiến trình

12 ID R Version ID Phiên bản

13 NM O Sequence Number Chuỗi nhiều sự kiện 14 ST O Continuation Pointer Điểm tiếp tục

15 ID O Accept Acknowledgment Type Kiểu xác nhận chấp nhận 16 ID O Application Acknowledgment Type Kiểu xác nhận loại ứng dụng

17 ID O Country Code Mã nước

18 ID O Character Set Bộ kí tự mã hóa

19 CE O Principal Language Of Message

Ngôn ngữ sử dụng của bản tin

Trong trường hợp thông điệp chứa thông tin liên quan đến một bệnh nhân, segment PID và PV1 cần được sử dụng để tóm tắt các thông tin chính về bệnh nhân cũng như đợt thăm khám. Cụ thể như sau:

Bảng 3.3: Các trường thông tin cơ bản về bệnh nhân (PID) SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng

1 SI O Set ID - Patient ID Thiết lập ID

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng

3 CX R Patient ID (Internal ID) ID bệnh nhân(ID bên trong) 4 CX O Alternate Patient ID – PID ID khác của bệnh nhân

5 XPN R Patient Name Tên bệnh nhân

6 XPN O Mother’s Maiden Name Tên mẹ bệnh nhân

7 TS O Date/Time of Birth Ngày sinh

8 IS O Sex Giới tính

9 XPN O Patient Alias Bí danh

10 IS O Race Chủng tộc, tổ tiên

11 XAD O Patient Address Địa chỉ bệnh nhân

Bảng 3.4: Các trường thông tin về đợt điều trị tại bệnh viện (PV1) SEQ DT OPT ELEMENT

NAME Ý nghĩa sử dụng 1 SI O Set ID - PV1 Thiết lập ID 2 IS R Patient Class

Phân loại bệnh nhân: Điều trị nội trú, ngoại trú…

3 PL O Assigned

Patient Location

Nơi phòng khám bệnh nhân cần xét nghiệm

4 IS O Admission

Type

Loại bệnh nhân nhập viện: Tai nạn, khẩn cấp, thuyền xuyên,lao động

5 CX O Preadmit

Number

Số tài khoản của bệnh nhân trước khi được nhập viện

6 PL O Prior Patient Location

Nơi trước khi bệnh nhân đến

7 XCN O Attending Doctor

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng 8 XCN O Referring Doctor Bác sỹ chuyển đến 9 XCN O Consulting Doctor Bác sỹ cố vấn 10 IS O Hospital Service Dịch vụ bệnh viện 11 PL O Temporary Location

Nơi ở tạm thời của bệnh nhân

12 IS O Preadmit

Test Indicator

Chỉ số kiểm tra trước khi được nhập viện

13 IS O Readmission Indicator

Chỉ số bệnh nhân được nhận trở lại

14 IS O Admit

Source

Nguồn nhận vào

15 IS O Ambulatory

Status

Trạng thái khuyết tật vĩnh viến hay tạm thời

16 IS O VIP Indicator Chỉ số VIP 17 XCN O Admitting Doctor Bác sĩ nhận hồ sơ

18 IS O Patient Type Loại bệnh nhân

19 CX O Visit

Number

Số đợt điều trị

20 CM O Financial Class

SEQ DT OPT ELEMENT

NAME Ý nghĩa sử dụng

21 IS O Charge

Price Indicator

Chỉ số giá phí chi trả của bệnh nhân

22 IS O Courtesy Code Mã ưu đãi 23 IS O Credit Rating Thẻ tín dụng 24 IS O Contract Code Mã hợp đồng 25 DT O Contract Effective Date Hợp đồng hiệu lực ngày 26 NM O Contract Amount Số tiền hợp đồng 27 NM O Contract Period Thời gian hợp đồng 28 IS O Interest Code Mã quan tâm 29 IS O Transfer to Bad Debt Code

Mã chuyển sang nợ xấu

30 DT O Transfer to Bad Debt Date

Ngày chuyển sang nợ xấu

31 IS O Bad Debt

Agency

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng Code 32 NM O Bad Debt Transfer Amount

Số tiền chuyển sang nợ xấu

33 NM O Bad Debt

Recovery Amount

Số tiền có thể đòi lại từ bên bảo lãnh

34 IS O Delete

Account Indicator

Chỉ số xóa tài khoản

35 DT O Delete

Account Date

Ngày xóa tài khoản

36 IS O Discharge Disposition Sắp xếp bệnh nhân khi kết thúc khám 37 CM O Discharged to Location Nơi bệnh nhân kết thúc khám

38 IS O Diet Type Loại chế độ ăn kiêng 39 IS O Servicing

Facility

Bệnh nhân sử dụng dịch vụ gì

40 IS B Bed Status Trạng thái giường của bệnh nhân

41 IS O Account

Status

Trạng thái tài khoản của bệnh nhân

42 PL O Pending

Location

Nơi bệnh nhân gửi

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng Temporary Location 44 TS O Admit Date/Time

Thời gian vào viện

45 TS O Discharge Date/Time

Thời gian ra viện

Thông điệp để trả lời là loại ACK với các segment MSA và ERR được sử dụng như sau.

Bảng 3.5: Các trường thông tin MSA

SEQ DT OPT ELEMENT NAME Ý nghĩa sử dụng

1 ID R Acknowledgment Code Mã trả lời

2 ST R Message Control ID Mã kiểm soát thông điệp

3 ST O Text Message Thông báo đính kèm

4 NM O Expected Sequence

Number

Số trao đổi tiếp theo

5 ID B Delayed Acknowledgment Type

Kiểu phản hồi trễ

6 CE O Error Condition Tình trạng lỗi

Bảng 3.6: Các trường thông tin ERR SEQ DT OPT ELEMENT

NAME Ý nghĩa sử dụng

1 ELD O Error Code and

Location

Vị trí lỗi và mã lỗi của một Segment trong một Message trao đổi khác

SEQ DT OPT ELEMENT

NAME Ý nghĩa sử dụng

2 ERL O Error

Location

Vị trí lỗi trong một Message trao đổi bị đánh giá là bị lỗi hay có cảnh báo

3 CWE O HL7 Error

Code

Mã lỗi truyền thông do HL7 đưa ra

4 ID O Severity Cấp độ lỗi 5 CWE O Application

Error Code

Mã lỗi ứng dụng (Do người dùng tự định nghĩa)

6 ST O Application

Error Parameter

Các thông số Mã lỗi ứng dụng đi kèm (Do người dùng tự định nghĩa)

7 TX O Diagnostic

Information

Thông tin hỗ trợ đánh giá lỗi

8 TX O User

Message

Thông điệp gửi tới người dùng

3.7.2. Quy trình trao đổi thông tin trong hệ thống HL7 ENGINE

- Trao đổi dữ liệu HSBA dạng CDA

Bệnh viện gửi HL7 Engine

TT HL7 Engine BV MDM MDM ACK1 ACK2 ACK2

Quá trình trao đổi HSBA giữa các ứng dụng trong hệ thống HL7 ENGINE được triển khai bằng cách sử dụng 3 thông điệp HL7 như minh họa trong Hình 3.7.

- MDM là thông điệp dùng để gửi toàn bộ HSBA bao gồm các tệp CDA và các tệp đính kèm theo định dạng MIME. Trường MSH của thông điệp phải được điền thông tin của bệnh viện gửi và bệnh viện nhận HSBA. Thông điệp này được ứng dụng gửi (HL7 ENGINE Bệnh viện) chuyển qua để rồi sau đó chuyển tiếp đến ứng dụng đích.

- ACK1 là thông điệp trả lời của ứng dụng về ứng dụng gửi HSBA để thông báo kết quả phân tích và thực hiện chuyển tiếp MDM đến ứng dụng đích. Các lỗi mà có thể trả về bao gồm các lí do như cấu trúc thông điệp không hợp lệ, bệnh viện đích không tồn tại,…

- ACK2 là thông điệp trả lời của ứng dụng đích trả về cho ứng dụng gửi để thông báo kết quả nhận HSBA. ACK2 được thực hiện chuyển tiếp qua HL7 Engine. Một HSBA chỉ được coi là đã đến đích khi ứng dụng gửi nhận được ACK2 từ ứng dụng đích.

- Trao đổi dữ liệu danh mục

Hình 3.8: Quy trình trao đổi dữ liệu danh mục

Quá trình trao đổi dữ liệu danh mục giữa ứng dụng HL7 ENGINE Bệnh viện và ứng dụng HL7 ENGINE được thực hiện theo 2 pha. Tại pha thứ nhất HL7 ENGINE Bệnh viện thực hiện truy vấn thông tin metadata về tất cả các bộ dữ liệu danh mục dùng chung đang được sử dụng trong thực tế. Căn cứ vào thông tin metadata nhận được ứng dụng HL7 ENGINE Bệnh viện có thể biết được sự thay đổi của các phiên bản được cập nhật mới nhất. Tại pha 2, HL7 ENGINE Bệnh viện thực hiện truy vấn và cập nhật lại dữ liệu của các bộ dữ liệu danh mục được nhận biết là có sự thay đổi sau phân tích ở pha 1. Bảng dưới đây mô tả cấu trúc thông tin của các câu truy vấn và trả lời cho hai giai đoạn.

Bảng 3.7: Cấu trúc thông tin của thông điệp truy vấn và trả lời Pha Query

Name

Table

Name TBR

1 Metadata AllDataset Danh sách các dataset với các thông tin gồm mã danh mục, phiên bản sử dụng, ngày cập nhật cuối cùng,…

2 Dataset <OID code>

Cấu trúc dữ liệu bảng danh mục tương ứng với <OID code>

- Trao đổi báo cáo thống kê và các văn bản

Quy trình trao đổi báo cáo thống kê và các văn bản được thi hành bằng cách

HL7 Engine Bệnh viện HL7 Engine TT

VQQ Metadata

TBR Metadata VQQ Data

sử dụng các thông điệp HL7 kiểu MDM và ACK giống như quy trình gửi nhận HSBA. Các báo cáo thống kê được gửi một chiều từ HL7 ENGINE Bệnh viện lên HL7 ENGINE . Ngược lại các văn bản có thể gửi 2 chiều, đồng thời có thể gửi từ bệnh viện này sang bệnh viện khác thông qua HL7 Engine. Để phân biệt loại dữ liệu được gửi nhận trong thông điệp MDM, kiểu tài liệu trong segment TXA được sử dụng theo như quy định dưới đây.

Bảng 3.8: Các loại tài liệu trao đổi qua hệ thống HL7 ENGINE

STT Loại tài liệu

TXA Document

Type

Dạng tài liệu đính kèm theo

1 Hồ sơ bệnh án CDA CDA/XML và tài liệu kèm theo dạng pdf, image,…

2 Báo cáo thống kê

SDMX- HD

File nén zip chứa toàn bộ cấu trúc SDMX

3 Văn bản điều hành

DOC Các dạng file văn bản thông dụng doc, xls, pdf,…

3.9. Cài đặt Module sinh bản tin HL7

- Sử dụng bộ công cụ HAPI: - Download Bộ công cụ tại địa chỉ http://hl7api.sourceforge.net/

 Bước 1: Tải các file từ Website

 Bước 2: Giải nén, lưu vào một thư mục

 Bước 3: Mở một project mới trong NETBEAN  Bước 4: Tạo thư viện cho Project

 Bước 5: Khai báo sử dụng các thư viện của HAPI

- Cài đặt: Mã Code Ghi chú package javaapplication6; import ca.uhn.hl7v2.model.v26.message.ADT_A01; import ca.uhn.hl7v2.model.v26.segment.EVN; import ca.uhn.hl7v2.model.v26.segment.MSH; import ca.uhn.hl7v2.model.v26.segment.PID; import ca.uhn.hl7v2.parser.Parser; import ca.uhn.hl7v2.parser.PipeParser; import java.util.Calendar; import java.util.Date; //--- EVN evn = adt.getEVN();

evn.getEventTypeCode().setValue("A0101"); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int datetoday = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND);

evn.getRecordedDateTime().setDateMinutePrecision(year, month, datetoday, hour, minute);

evn.getEvn4_EventReasonCode().setValue("U"); evn.getEventOccurred().setDateMinutePrecision(year, month, datetoday, hour, minute);

evn.getEventFacility().getHd1_NamespaceID().setValue(); evn.getEventFacility().getUniversalID().setValue(universalID );

evn.getEventFacility().getUniversalIDType().setValue(univer salIDType);

Populate the PID Segment patient's Data String ID_BN="AA12325";

String MA_BN="BN1234"; PID pid = adt.getPID();

pid.getSetIDPID().setValue(ID_BN); pid.getPatientID().getCx1_IDNumber().setValue(MA_BN); pid.getPatientID().getCx6_AssigningFacility().getHd1_Name spaceID().setValue(Depart); pid.getPatientID().getCx10_AssigningAgencyOrDepartment( ).getCwe2_Text().setValue(hospitalName); pid.getPatientName(0).getFamilyName().getSurname().setV alue(familyName); pid.getPatientName(0).getGivenName().setValue(givenNam e); pid.getDateTimeOfBirth().setValue(dateOfBirth); pid.getAdministrativeSex().setValue(sex); pid.getPatientAddress(0).getStreetAddress().getStreetName ().setValue(homeAddress); pid.getPatientAddress(0).getStateOrProvince().setValue("Th

anh pho Thai nguyen"); pid.getPhoneNumberHome(0).getAreaCityCode().setValue( phone); pid.getPhoneNumberHome(0).getLocalNumber().setValue( mobile); pid.getMaritalStatus().getCwe2_Text().setValue("S"); pid.getPatientAccountNumber().getCx1_IDNumber().setVal ue("218-443-5678"); pid.getBirthPlace().setValue("Bac Thai"); Parser parser = new PipeParser();

String encodedMessage = parser.encode(adt);

System.out.println("Printing ER7 Encoded Message:"); String str = encodedMessage.replace("\r", "\r\n"); System.out.println(str); System.out.println(str); catch (Exception e) { e.printStackTrace(); }

3.9.3. Thuật toán trích rút thông tin từ bản tin HL7 phía người nhận.

Giải thuật được thực hiện qua các bước sau, để trích rút dữ liệu trong bản tin HL7:

Bước 1: Loại bỏ các ký tự phân tách đoạn, ký tự phân tách trường, ký tự ngăn cách thành phần, ký tự lặp, ký tự ngăn tách thành phần con.

Bước 2: Xử lý các gia trị mặc định, theo quy ước đối với thông tin của các trường có dữ liệu không đầy đủ.

Bước 3: Xử lý các giá trị của các thành phần con, thành phần lặp.

Bước 4: Căn cứ vào thự hạng vị trí (Position) của trường dữ liệu trích rút thông tin từ bản tin.

3.10. Giao thức trao đổi thông tin giữa người gửi và người nhận

Giao thức Lower Layer Protocol (LLP) được dùng riêng trong việc gửi và nhận bản tin HL7 giữa máy chủ và một máy trạm. Ưu điểm của phương pháp là giao thực đơn giản, dễ cài đặt và người dũng có thể làm chủ được các thông số kỹ thuật. Bên cạnh đó, hiện nay với sự phát triển vượt bậc của công nghệ Java và mã nguồn mở thì các kỹ sư lập trình có thể dễ dàng tham khảo và sử dụng lại mã nguồn của giao thức này.

Để làm chủ được giao thức, chúng tôi đã nghiên cứu chi tiết các nội dung sau:  Khi truyền dữ liệu bản tin HL7, dữ liệu sẽ được đóng gói thành từng block, theo định dạng. Mỗi một block dữ liệu được đóng trong cặp < SB> dddd< EB> < CR>.

 Mỗi <SB> được mã hóa bằng 1 byte ứng với mã ASCII <0x0B>

 <dddđ>: dữ liệu được mã hóa theo dạng từng byte, ngữ nghĩa từng ký tự ứng với mã ký tự trong bảng mã ASCII.

 <EN>: Đánh dấu kết thúc một block, được mã hóa bằng 1 byte ứng với mã ASCII (0x1C)

<CR> 1 byte mã Carriage Return <0x0D>.

Module cài đặt giao thức LLP

package server4his; import java.io.*; import java.net.*; /**

*

* @author Ngo The Hoang */

public class Client { Socket cSk = null; PrintWriter out = null; BufferedReader in = null;

String st1;

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu chuẩn HL7 v2 8 và xây dựng ứng dụng hỗ trợ thu thập thông tin phục vụ công tác y tế dự phòng tỉnh thái nguyên​ (Trang 64)