Kiểm tra XML BHYT 130/4750 API
Kiểm tra file XML giám định BHYT (QĐ 130/4750/3176/1931) trước khi gửi: vỏ hồ sơ, bảng base64, trường, mã, công thức và tổng XML1.
Gửi file GIAMDINHHS (trường xml, body XML thô hoặc multipart file) hoặc một bảng riêng (ví dụ <TONG_HOP>). API giải mã từng FILEHOSO (XML1–XML11, XML13–XML15, base64) và kiểm tra theo chuẩn QĐ 130/QĐ-BYT được sửa đổi bởi QĐ 4750/QĐ-BYT, QĐ 3176/QĐ-BYT và QĐ 1931/QĐ-BYT (từ 1/7/2026): trường bắt buộc, số dùng dấu chấm thập phân, độ dài tối đa, ngày yyyyMMddHHmm / yyyyMMdd, danh mục mã (MA_LOAI_KCB, KET_QUA_DTRI, MA_LOAI_RV, GIOI_TINH, PHAM_VI…), định dạng ICD-10, mã thẻ BHYT và số phần tử MA_DKBD / GT_THE_* tương ứng, mã cơ sở 5 ký tự, NGAY_VAO ≤ NGAY_RA.
Kiểm tra chéo: MA_LK giống nhau trong mọi bảng của một HOSO, STT liên tục, công thức từng dòng XML2 / XML3 theo QĐ 3176 (THANH_TIEN_BV, THANH_TIEN_BH, T_BHTT, T_BNTT, T_BNCCT) dạng cảnh báo, và các tổng XML1 (T_THUOC, T_VTYT, T_TONGCHI_BV, T_TONGCHI_BH, T_BNTT, T_BNCCT, T_BHTT, T_NGUONKHAC, T_BHTT_GDV) so với tổng XML2 + XML3 dạng lỗi, sai số cho phép 1 đồng mỗi 10 dòng (tolerance). Mỗi lỗi có HOSO, MA_LK, bảng, dòng, trường và mã lỗi. list=schema trả bảng trường; include_data=true trả các bảng đã giải mã dạng JSON.
Đây là bước kiểm tra trước khi gửi: quy tắc giám định của BHXH chi tiết hơn và không công khai hết, nên không lỗi ở đây không bảo đảm hồ sơ được duyệt. File chỉ xử lý trong bộ nhớ, không lưu lại.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
xml | body | string | có | File GIAMDINHHS hoặc một bảng; hoặc body XML thô / multipart file. | |
file | body | file | không | File XML (multipart). | |
tolerance | body | number | không | 1 | Sai số làm tròn (đồng) mỗi dòng. |
include_data | body | boolean | không | false | Trả về các bảng đã giải mã. |
list | body | string | không | schema: trả bảng trường (kèm table=XML1…). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-bhyt-xml" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"xml":"<TONG_HOP><MA_LK>LK0001</MA_LK><STT>1</STT><MA_BN>BN01</MA_BN><HO_TEN>Nguyễn Văn An</HO_TEN><NGAY_SINH>199003150000</NGAY_SINH><GIOI_TINH>1</GIOI_TINH><MA_QUOCTICH>000</MA_QUOCTICH><MA_DANTOC>01</MA_DANTOC><MA_NGHE_NGHIEP>00</MA_NGHE_NGHIEP><MA_THE_BHYT>DN4797931234567</MA_THE_BHYT><MA_DKBD>79001</MA_DKBD><GT_THE_TU>20260101</GT_THE_TU><GT_THE_DEN>20261231</GT_THE_DEN><MA_BENH_CHINH>J18.9</MA_BENH_CHINH><MA_DOITUONG_KCB>1</MA_DOITUONG_KCB><NGAY_VAO>202611100800</NGAY_VAO><NGAY_RA>202611091000</NGAY_RA><SO_NGAY_DTRI>1</SO_NGAY_DTRI><KET_QUA_DTRI>1</KET_QUA_DTRI><MA_LOAI_RV>1</MA_LOAI_RV><T_THUOC>50000</T_THUOC><T_VTYT>0</T_VTYT><T_TONGCHI_BV>88700</T_TONGCHI_BV><T_TONGCHI_BH>88700</T_TONGCHI_BH><T_BNTT>0</T_BNTT><T_BNCCT>17740</T_BNCCT><T_BHTT>70960</T_BHTT><T_NGUONKHAC>0</T_NGUONKHAC><T_BHTT_GDV>70960</T_BHTT_GDV><NAM_QT>2026</NAM_QT><THANG_QT>11</THANG_QT><MA_LOAI_KCB>1</MA_LOAI_KCB><MA_KHOA>K01</MA_KHOA><MA_CSKCB>79001</MA_CSKCB><MA_TTDV>000123/HCM-GPHN</MA_TTDV></TONG_HOP>"}'const res = await fetch('https://apibox.io.vn/v1/vn-bhyt-xml', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"xml": "<TONG_HOP><MA_LK>LK0001</MA_LK><STT>1</STT><MA_BN>BN01</MA_BN><HO_TEN>Nguyễn Văn An</HO_TEN><NGAY_SINH>199003150000</NGAY_SINH><GIOI_TINH>1</GIOI_TINH><MA_QUOCTICH>000</MA_QUOCTICH><MA_DANTOC>01</MA_DANTOC><MA_NGHE_NGHIEP>00</MA_NGHE_NGHIEP><MA_THE_BHYT>DN4797931234567</MA_THE_BHYT><MA_DKBD>79001</MA_DKBD><GT_THE_TU>20260101</GT_THE_TU><GT_THE_DEN>20261231</GT_THE_DEN><MA_BENH_CHINH>J18.9</MA_BENH_CHINH><MA_DOITUONG_KCB>1</MA_DOITUONG_KCB><NGAY_VAO>202611100800</NGAY_VAO><NGAY_RA>202611091000</NGAY_RA><SO_NGAY_DTRI>1</SO_NGAY_DTRI><KET_QUA_DTRI>1</KET_QUA_DTRI><MA_LOAI_RV>1</MA_LOAI_RV><T_THUOC>50000</T_THUOC><T_VTYT>0</T_VTYT><T_TONGCHI_BV>88700</T_TONGCHI_BV><T_TONGCHI_BH>88700</T_TONGCHI_BH><T_BNTT>0</T_BNTT><T_BNCCT>17740</T_BNCCT><T_BHTT>70960</T_BHTT><T_NGUONKHAC>0</T_NGUONKHAC><T_BHTT_GDV>70960</T_BHTT_GDV><NAM_QT>2026</NAM_QT><THANG_QT>11</THANG_QT><MA_LOAI_KCB>1</MA_LOAI_KCB><MA_KHOA>K01</MA_KHOA><MA_CSKCB>79001</MA_CSKCB><MA_TTDV>000123/HCM-GPHN</MA_TTDV></TONG_HOP>"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-bhyt-xml",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"xml": "<TONG_HOP><MA_LK>LK0001</MA_LK><STT>1</STT><MA_BN>BN01</MA_BN><HO_TEN>Nguyễn Văn An</HO_TEN><NGAY_SINH>199003150000</NGAY_SINH><GIOI_TINH>1</GIOI_TINH><MA_QUOCTICH>000</MA_QUOCTICH><MA_DANTOC>01</MA_DANTOC><MA_NGHE_NGHIEP>00</MA_NGHE_NGHIEP><MA_THE_BHYT>DN4797931234567</MA_THE_BHYT><MA_DKBD>79001</MA_DKBD><GT_THE_TU>20260101</GT_THE_TU><GT_THE_DEN>20261231</GT_THE_DEN><MA_BENH_CHINH>J18.9</MA_BENH_CHINH><MA_DOITUONG_KCB>1</MA_DOITUONG_KCB><NGAY_VAO>202611100800</NGAY_VAO><NGAY_RA>202611091000</NGAY_RA><SO_NGAY_DTRI>1</SO_NGAY_DTRI><KET_QUA_DTRI>1</KET_QUA_DTRI><MA_LOAI_RV>1</MA_LOAI_RV><T_THUOC>50000</T_THUOC><T_VTYT>0</T_VTYT><T_TONGCHI_BV>88700</T_TONGCHI_BV><T_TONGCHI_BH>88700</T_TONGCHI_BH><T_BNTT>0</T_BNTT><T_BNCCT>17740</T_BNCCT><T_BHTT>70960</T_BHTT><T_NGUONKHAC>0</T_NGUONKHAC><T_BHTT_GDV>70960</T_BHTT_GDV><NAM_QT>2026</NAM_QT><THANG_QT>11</THANG_QT><MA_LOAI_KCB>1</MA_LOAI_KCB><MA_KHOA>K01</MA_KHOA><MA_CSKCB>79001</MA_CSKCB><MA_TTDV>000123/HCM-GPHN</MA_TTDV></TONG_HOP>"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-bhyt-xml');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"xml":"<TONG_HOP><MA_LK>LK0001</MA_LK><STT>1</STT><MA_BN>BN01</MA_BN><HO_TEN>Nguyễn Văn An</HO_TEN><NGAY_SINH>199003150000</NGAY_SINH><GIOI_TINH>1</GIOI_TINH><MA_QUOCTICH>000</MA_QUOCTICH><MA_DANTOC>01</MA_DANTOC><MA_NGHE_NGHIEP>00</MA_NGHE_NGHIEP><MA_THE_BHYT>DN4797931234567</MA_THE_BHYT><MA_DKBD>79001</MA_DKBD><GT_THE_TU>20260101</GT_THE_TU><GT_THE_DEN>20261231</GT_THE_DEN><MA_BENH_CHINH>J18.9</MA_BENH_CHINH><MA_DOITUONG_KCB>1</MA_DOITUONG_KCB><NGAY_VAO>202611100800</NGAY_VAO><NGAY_RA>202611091000</NGAY_RA><SO_NGAY_DTRI>1</SO_NGAY_DTRI><KET_QUA_DTRI>1</KET_QUA_DTRI><MA_LOAI_RV>1</MA_LOAI_RV><T_THUOC>50000</T_THUOC><T_VTYT>0</T_VTYT><T_TONGCHI_BV>88700</T_TONGCHI_BV><T_TONGCHI_BH>88700</T_TONGCHI_BH><T_BNTT>0</T_BNTT><T_BNCCT>17740</T_BNCCT><T_BHTT>70960</T_BHTT><T_NGUONKHAC>0</T_NGUONKHAC><T_BHTT_GDV>70960</T_BHTT_GDV><NAM_QT>2026</NAM_QT><THANG_QT>11</THANG_QT><MA_LOAI_KCB>1</MA_LOAI_KCB><MA_KHOA>K01</MA_KHOA><MA_CSKCB>79001</MA_CSKCB><MA_TTDV>000123/HCM-GPHN</MA_TTDV></TONG_HOP>"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"version": "QĐ 130/QĐ-BYT as amended by QĐ 4750/QĐ-BYT, QĐ 3176/QĐ-BYT and QĐ 1931/QĐ-BYT (from 01/07/2026)",
"valid": false,
"error_count": 2,
"warning_count": 0,
"envelope": null,
"hoso": [
{
"hoso": 1,
"ma_lk": "LK0001",
"tables": {
"XML1": 1
}
}
],
"errors": [
{
"hoso": 1,
"ma_lk": "LK0001",
"row": null,
"table": "XML1",
"field": "MA_LOAI_KCB",
"code": "invalid_code",
"message": "MA_LOAI_KCB must be one of 01, 02, 03, 04, 05, 06, 07, 08, 09"
},
{
"hoso": 1,
"ma_lk": "LK0001",
"row": null,
"table": "XML1",
"field": "NGAY_RA",
"code": "date_order",
"message": "NGAY_RA is before NGAY_VAO"
}
],
"warnings": [],
"truncated": false,
"checks": "Structure, required fields, types, lengths, date formats, code lists, ICD-10 and BHYT card format, MA_LK consistency, line formulas (QĐ 3176) and XML1 totals against XML2 + XML3.",
"legal": [
{
"ref": "QĐ 130/QĐ-BYT (18/01/2023)",
"effective_from": "2023-01-18"
},
{
"ref": "QĐ 4750/QĐ-BYT (29/12/2023)",
"effective_from": "2024-07-01"
}
],
"reviewed": "2026-11-11",
"disclaimer": "Pre-submission check only: the BHXH assessment rules are more detailed and not all public; passing here does not guarantee acceptance. Not legal advice; check the official text."
}
Ứng dụng
- Kiểm tra file XML xuất từ phần mềm phòng khám trước khi gửi BHXH
- Tìm dòng làm lệch tổng tiền XML1
- Kiểm thử tích hợp HIS mới theo QĐ 4750 / 3176
- Chuyển các bảng base64 trong file GIAMDINHHS sang JSON
Hỏi đáp
API kiểm tra theo phiên bản nào?
QĐ 130/QĐ-BYT cùng QĐ 4750 (1/7/2024), QĐ 3176 (1/1/2025) và phần đã kiểm chứng của QĐ 1931/QĐ-BYT (MUC_HUONG dài 4, từ 1/7/2026).
Có đối chiếu mã thuốc, mã dịch vụ với danh mục không?
Không: chỉ kiểm tra định dạng mã. Đối chiếu danh mục (thuốc, dịch vụ, khoa, bác sĩ) cần danh mục đã đăng ký của cơ sở.
Chữ ký số có được xác thực không?
Không: kết quả chỉ cho biết có thẻ CHUKYDONVI hay không.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.