Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "BHYT" các nội dung bạn quan tâm.

Bài 1.3. Từ gói tin đến trường dữ liệu

XML

Phân biệt file XML, hồ sơ khám chữa bệnh, bảng dữ liệu và dòng chi tiết

Khi mở một file XML BHYT, người đọc có thể thấy rất nhiều thẻ dữ liệu lồng vào nhau và dễ nhầm giữa file XML, hồ sơ khám chữa bệnh, XML1/XML2, một dòng thuốc và một trường dữ liệu.

Để đọc đúng, có thể hình dung dữ liệu theo các tầng:

Gói tin/File XML → Hồ sơ KCB → Bảng dữ liệu → Dòng chi tiết → Trường dữ liệu

Mỗi tầng có ý nghĩa khác nhau và cũng là một cấp kiểm tra khác nhau.

1. Gói tin/File XML: lớp chứa dữ liệu để truyền đi

Thông tư 48/2017/TT-BYT quy định dữ liệu điện tử sử dụng định dạng XML, mã UTF-8; một file XML có thể chứa một hoặc nhiều hồ sơ KCB BHYT.

Trong các gói XML thực tế, bên ngoài thường có lớp thông tin phục vụ truyền nhận như cơ sở KCB, ngày lập, số lượng hồ sơ, danh sách hồ sơ và chữ ký số. Bên trong từng hồ sơ lại chứa các thành phần như XML1, XML2, XML3... Gói dữ liệu thực tế được cung cấp cũng thể hiện cấu trúc dạng GIAMDINHHS → THONGTINDONVI → THONGTINHOSO → DANHSACHHOSO → HOSO → FILEHOSO, trong đó từng FILEHOSO xác định loại dữ liệu qua LOAIHOSO và chứa nội dung tương ứng.

Vì vậy, trong thực tế từ “file XML” đôi khi được dùng cho cả gói truyền dữ liệu và từng XML1, XML2... bên trong. Khi trao đổi kỹ thuật cần nói rõ đang đề cập lớp nào.

2. Hồ sơ khám chữa bệnh: một đợt KCB của người bệnh

Theo Thông tư 48/2017/TT-BYT, mỗi hồ sơ trong file chứa thông tin của một đợt khám bệnh, chữa bệnh của người bệnh.

Như vậy:

  • một file truyền có thể chứa nhiều hồ sơ;
  • một hồ sơ đại diện cho một đợt KCB;
  • bên trong một hồ sơ có thể có nhiều bảng dữ liệu khác nhau.

Không nên đồng nhất “một file” với “một người bệnh” hoặc “một bảng XML”.

3. Bảng dữ liệu: từng nhóm thông tin của hồ sơ

Thông tin của một đợt KCB không được dồn vào một bảng duy nhất mà được chia theo từng nhóm nghiệp vụ.

Ví dụ:

  • XML1: thông tin tổng hợp của đợt KCB;
  • XML2: chi tiết thuốc;
  • XML3: dịch vụ kỹ thuật và vật tư y tế;
  • XML4: dịch vụ cận lâm sàng;
  • XML5: diễn biến lâm sàng;
  • các XML khác phục vụ chứng từ hoặc mục đích chuyên biệt.

Các bảng được liên kết với nhau thông qua các trường chung, đặc biệt là MA_LK. Quyết định 130/QĐ-BYT mô tả MA_LK là mã đợt điều trị duy nhất, dùng để liên kết XML1 với các bảng còn lại trong cùng một lần KCB.

Có thể hình dung:

HỒ SƠ KCB
   │
   ├── XML1: Tổng hợp
   ├── XML2: Thuốc
   ├── XML3: DVKT - VTYT
   ├── XML4: Cận lâm sàng
   ├── XML5: Diễn biến
   └── ... các bảng khác khi có phát sinh

Không phải hồ sơ nào cũng có đầy đủ tất cả các bảng. Bảng nào xuất hiện phụ thuộc vào thực tế khám chữa bệnh và quy định áp dụng.

4. Dòng chi tiết: một đơn vị nghiệp vụ trong bảng

Một số bảng có thể chứa nhiều dòng dữ liệu.

Ví dụ, nếu người bệnh sử dụng nhiều thuốc thì XML2 có nhiều dòng thuốc:

XML2
├── Dòng 1: Thuốc A
├── Dòng 2: Thuốc B
├── Dòng 3: Thuốc C
└── ...

Tương tự, XML3 có thể có nhiều dòng dịch vụ hoặc vật tư; XML5 có thể có nhiều dòng diễn biến lâm sàng.

Trong các bảng chi tiết, trường STT được sử dụng để đánh số các bản ghi tăng dần trong lần gửi dữ liệu. Ví dụ Bảng 4 quy định MA_LK để liên kết đợt KCB và STT là số thứ tự tăng từ 1 đến hết.

Điều này rất quan trọng khi rà soát: một hồ sơ có thể đúng, nhưng chỉ một dòng thuốc hoặc một dòng dịch vụ trong hồ sơ có vấn đề.

5. Trường dữ liệu: đơn vị thông tin nhỏ nhất

Mỗi dòng lại được cấu thành từ nhiều trường dữ liệu (field).

Ví dụ một dòng XML2 có thể gồm:

MA_LK
STT
MA_THUOC
TEN_THUOC
HAM_LUONG
DUONG_DUNG
SO_LUONG
DON_GIA
...

Mỗi field có tên, kiểu dữ liệu, kích thước tối đa và nội dung diễn giải theo chuẩn của Bộ Y tế.

Ví dụ:

<MA_LK>...</MA_LK>
<STT>1</STT>
<MA_THUOC>...</MA_THUOC>
<SO_LUONG>...</SO_LUONG>

Một field có thể đúng về cú pháp nhưng vẫn sai về danh mục, sai thời điểm áp dụng hoặc không phù hợp với các field khác. Vì vậy, kiểm tra field không chỉ là kiểm tra “có dữ liệu hay không”.

6. Cần phân biệt lỗi ở từng tầng

Việc chia dữ liệu thành các tầng giúp xác định chính xác vị trí lỗi:

TầngVí dụ vấn đề
Gói tin/FileKhông đúng cấu trúc, lỗi chữ ký, không đọc được dữ liệu
Hồ sơ KCBHồ sơ trùng, thiếu liên kết, sai đợt KCB
Bảng dữ liệuThiếu bảng cần phát sinh hoặc gửi bảng không phù hợp
Dòng chi tiếtMột thuốc/DVKT bị trùng, sai số lượng, sai thời gian
FieldSai mã, sai định dạng, để trống không đúng điều kiện

Do đó, khi nhận một cảnh báo XML, không nên chỉ nói chung là “hồ sơ bị lỗi XML”. Cần xác định lỗi thuộc gói tin, hồ sơ, bảng, dòng hay field nào.

Kết luận

Cấu trúc XML BHYT có thể được ghi nhớ theo chuỗi:

Gói tin → Hồ sơ KCB → Bảng XML → Dòng chi tiết → Field

Hiểu đúng các tầng này là điều kiện cơ bản để đọc XML và cũng là nền tảng của tiền giám định. Một hệ thống kiểm tra tốt phải có khả năng xác định chính xác hồ sơ nào, bảng nào, dòng nào và trường nào đang có vấn đề, thay vì chỉ trả về một cảnh báo chung chung.