eSoft EMR / Tài Liệu Nghiệp Vụ & CSDL / Tổng quan hệ thống

TỔNG QUAN THIẾT KẾ CƠ SỞ DỮ LIỆU & QUAN HỆ ERD

Mô hình dữ liệu quan hệ (Relational Database Schema) được chuẩn hóa theo dạng chuẩn 3NF, phân tách rõ ràng giữa dữ liệu hành chính nhân khẩu học, dữ liệu lâm sàng ngoại trú và dữ liệu chuyên sâu của Đơn nguyên Thận Nhân Tạo 30 máy.

1.1. Khóa Chính Trung Tâm (Primary Entities) & Nguyên Tắc Khóa Liên Kết

Hệ thống xoay quanh 4 thực thể cốt lõi:

1
Bệnh nhân (patients) - Khóa chính: patient_id (hoặc pid)
Mỗi cá nhân sở hữu 01 mã PID duy nhất trọn đời (Single Patient Identifier), liên kết bằng số CCCD 12 số hoặc mã thẻ BHYT. Mọi lịch sử khám bệnh, xét nghiệm và các ca chạy thận đều tham chiếu về patient_id.
2
Lượt khám tiếp nhận (encounters) - Khóa chính: encounter_id
Mỗi lần người bệnh đến khám hoặc vào ca lọc máu sinh ra 01 encounter_id. Liên kết với Bác sĩ khám, Phòng khám chuyên khoa, STT tiếp nhận và hóa đơn viện phí.
3
Ca lọc máu thận nhân tạo (dialysis_sessions) - Khóa chính: session_id
Đại diện cho 01 phiên lọc máu kéo dài 3.5 - 4.5 giờ. Liên kết với machine_id (M01-M30), patient_id, Điều dưỡng phụ trách, Bác sĩ chỉ định, phiếu 3 pha và dữ liệu Telemetry chu kỳ 2s.
4
Chỉ định cận lâm sàng / LIS (lis_orders) - Khóa chính: order_id / sid
Mỗi barcode ống nghiệm gắn với sid (Sample Identifier). Chứa danh sách chỉ định xét nghiệm (Ure, Creatinin, Điện giải, HBsAg...) và kết quả 2 chiều từ máy phân tích.

1.2. Sơ đồ Quan hệ Thực thể ERD (Entity Relationship Diagram)

patients (PK: patient_id) ├── 1:N ──> encounters (PK: encounter_id, FK: patient_id) │ ├── 1:1 ──> clinical_examinations (PK: exam_id, FK: encounter_id) │ ├── 1:1 ──> prescriptions (PK: prescription_id, FK: encounter_id) │ │ └── 1:N ──> prescription_details (FK: prescription_id, FK: medicine_id) │ ├── 1:N ──> lis_orders (PK: order_id, FK: encounter_id, barcode_sid) │ │ └── 1:N ──> lis_test_results (FK: order_id, FK: test_id) │ ├── 1:N ──> pacs_studies (PK: study_id, FK: encounter_id) │ └── 1:1 ──> billing_invoices (PK: invoice_id, FK: encounter_id) │ └── 1:N ──> billing_items (FK: invoice_id) │ ├── 1:N ──> dialysis_schedules (PK: schedule_id, FK: patient_id, FK: machine_id) │ └── 1:N ──> dialysis_sessions (PK: session_id, FK: patient_id, FK: machine_id, FK: encounter_id) ├── 1:N ──> dialysis_flowsheet_logs (PK: log_id, FK: session_id) [Theo dõi 30-60 phút] ├── 1:N ──> dialysis_telemetry_stream (PK: telemetry_id, FK: session_id) [Stream 2s/lần] ├── 1:1 ──> dialysis_quality_evaluations (FK: session_id) [Tính Kt/V, URR] └── 1:N ──> inventory_consumptions (FK: session_id, FK: item_id) [Trừ kho quả lọc, dịch A/B] dialysis_machines (PK: machine_id: 'M01'..'M30') └── 1:N ──> dialysis_sessions

KHỐI II: ĐƠN NGUYÊN THẬN NHÂN TẠO (HEMODIALYSIS UNIT - 30 ĐẾN 60 MÁY)

Quy chuẩn kỹ thuật chuyên sâu theo tài liệu RFP: Vận hành buồng lọc Nikkiso, Lập lịch 2-4-6 & 3-5-7, Phiếu theo dõi 3 pha, Kỹ thuật HD/HDF Online Thông tư 23/2024/TT-BYT, Telemetry 2s, Trạm RO ISO 23500 và TV Wall Command Center.

MODULE 05 / MOD-02 VẬN HÀNH MA TRẬN BUỒNG LỌC MÁU 30–60 MÁY & CHECKLIST AN TOÀN

DOM ID: #pane-buong-loc-mau

Màn hình điều khiển ma trận 30 máy lọc máu chia theo Buồng A (M01-M16) và Buồng B (M17-M30), kiểm soát 5 mã màu trạng thái máy và ép buộc thực hiện Checklist 4 bước trước khi gán người bệnh.

1. Quy Trình Nghiệp Vụ & Thao Tác Màn Hình (UI Actions)

1
Lọc ca và khu vực buồng máy
Người dùng click chọn nút ca Ca Sáng (#btnShiftMorning) hoặc Ca Chiều (#btnShiftAfternoon); chọn lọc theo khu vực Tất cả, Buồng A, hoặc Buồng B.
JS Handler: DialysisManager.setShift(shift) / DialysisManager.filterZone(zone)
2
Mở hộp thoại gán bệnh nhân & Kiểm tra điều kiện an toàn
Khi máy ở trạng thái ready (Sẵn sàng), click nút "Gán người bệnh". Hệ thống mở modal #modalAssignMachine nạp mã máy đích.
JS Handler: DialysisManager.openAssignModal(machineId) -> Modal.open('modalAssignMachine')
3
Xác nhận Checklist 4 bước bắt buộc & Khởi động ca
Người dùng phải tích đủ 4 checkbox an toàn: #chkSafePatient (Đúng BN & quả lọc), #chkSafeDialysate (Dịch A/B đúng), #chkSafeMachine (Hóa chất khử trùng âm tính), #chkSafeRo (Nước RO < 10 uS/cm). Nhập Cân trước lọc, Cân khô, Target UF. Nếu thiếu checkbox -> Chặn và báo lỗi Toast.error.
JS Handler: DialysisManager.confirmAssign() -> Cập nhật machine.status = 'running', bắt đầu đếm lùi 4 giờ
4
Kết thúc ca lọc máu & Chuyển chu trình khử trùng nhiệt
Click nút "Kết thúc ca" trên card máy đang chạy. Hệ thống cập nhật ca lọc hoàn tất, tự động chuyển trạng thái máy sang disinfecting (Khử trùng - Vàng) với thời gian làm sạch 30 phút.
JS Handler: DialysisManager.finishSession(machineId)
5
Giả lập cảnh báo & Xử lý báo động ALARM
Khi xảy ra sự cố áp lực TMP/bọt khí, máy chuyển sang alarm (Đỏ nhấp nháy animation). Click "Đã xử lý xong báo động" để đưa máy trở lại trạng thái running.
JS Handler: DialysisManager.simulateAlarm(mId) / DialysisManager.resolveAlarm(mId)

2. Thiết Kế Bảng Cơ Sở Dữ Liệu: dialysis_machines

Bảng quản lý danh mục và trạng thái vận hành tức thời của 30 máy lọc máu Nikkiso:

Tên Cột (Column) Kiểu Dữ Liệu (SQL) Khóa (Key) Ràng Buộc (Constraints) Ý Nghĩa Nghiệp Vụ & Quy Tắc
machine_id VARCHAR(10) PK NOT NULL Mã định danh máy lọc máu (Ví dụ: 'M01', 'M02', ..., 'M30')
machine_name VARCHAR(50) NOT NULL Tên hiển thị: 'Máy Nikkiso DBB-07 - Giường 01'
zone_id VARCHAR(10) NOT NULL Khu vực buồng máy: 'A' (M01-M16) hoặc 'B' (M17-M30)
serial_number VARCHAR(50) UNIQUE Số sê-ri phần cứng thiết bị do Nikkiso sản xuất
current_status VARCHAR(20) NOT NULL DEFAULT 'ready' 5 trạng thái: 'running', 'ready', 'disinfecting', 'alarm', 'maintenance'
isolation_flag BOOLEAN DEFAULT FALSE Đánh dấu máy dành riêng cho bệnh nhân cách ly (HBV/HCV/HIV)
current_session_id BIGINT FK NULLABLE ID ca lọc đang vận hành trên máy (Tham chiếu dialysis_sessions)
connection_type VARCHAR(20) DEFAULT 'RS232' Chuẩn giao tiếp: 'RS232' (Cổng COM) hoặc 'TCP_IP' (Ethernet)
ip_address VARCHAR(45) NULLABLE Địa chỉ IP bộ chuyển đổi Moxa / Card mạng kết nối
last_disinfected_at TIMESTAMP NULLABLE Thời điểm hoàn tất chu trình khử khuẩn nhiệt gần nhất
total_hours_operated DECIMAL(10,1) DEFAULT 0.0 Tổng số giờ vận hành tích lũy phục vụ bảo trì định kỳ

3. API Payload Mẫu: Khởi Động Ca Lọc & Gán Máy (POST /api/dialysis/assign)

// Request Payload (Gửi lên từ Modal Gán Người Bệnh) { "machine_id": "M03", "patient_id": "BN000123", "shift_code": "MORNING", "modality": "HDF_POST", "safety_checklist": { "correct_patient_dialyzer": true, "correct_dialysate_concentrate": true, "disinfection_residual_negative": true, "ro_conductivity_under_10": true, "checked_by_nurse_id": "NS_LETHIC" }, "pre_weight": 62.5, "dry_weight": 59.5, "target_uf_ml": 3000, "duration_minutes": 240, "initial_qb": 300, "initial_qd": 500, "anticoagulant": { "type": "HEPARIN", "bolus_units": 1000, "maintenance_units_per_hour": 500 } } // Response: 201 Created { "status": "success", "session_id": "DS-20261009-M03-01", "machine_status": "running", "started_at": "2026-10-09T07:15:00Z", "estimated_end_at": "2026-10-09T11:15:00Z", "message": "Đã gán người bệnh và kích hoạt chu trình lọc máu an toàn trên máy M03" }

MODULE 06 / MOD-03 LẬP LỊCH CHẠY THẬN CHU KỲ (2-4-6, 3-5-7; 3 CA/NGÀY)

DOM ID: #pane-lich-chay-than

Quản lý lịch lọc máu cố định hàng tuần, điều phối 3 ca lọc trong ngày và thuật toán quét chống trùng ca, bảo vệ an toàn cách ly lây nhiễm HBV/HCV.

1. Quy Trình Nghiệp Vụ & Thao Tác Màn Hình

1
Chuyển đổi chu kỳ tuần (2-4-6 hoặc 3-5-7)
Click nút tab "Chu kỳ Thứ 2 - 4 - 6" (#tabCycle246) hoặc "Chu kỳ Thứ 3 - 5 - 7" (#tabCycle357). Màn hình tự nạp danh sách 30 máy và các bệnh nhân cố định theo từng ca.
JS Handler: DialysisManager.switchScheduleCycle(cycle) -> Render bảng lịch ca 1 & ca 2
2
Thuật toán kiểm soát xung đột lịch (Conflict Detection)
Khi xếp bệnh nhân mới, hệ thống kiểm tra 3 điều kiện: (1) Máy đích không trùng giờ với bệnh nhân khác trong ca; (2) Máy không đang trong lịch bảo dưỡng; (3) Nếu bệnh nhân có hbv_positive = true, BẮT BUỘC máy phải có cờ isolation_flag = true. Nếu vi phạm, hiển thị thẻ cảnh báo màu cam và chặn lưu.
3
Đổi ca / Xếp ca bù khẩn cấp
Click nút "Đổi ca / Bù ca" trên dòng bệnh nhân cần điều chỉnh. Hệ thống liệt kê danh sách các slot máy trống cùng chu kỳ để y tá chuyển vị trí trong 1 cú click.

2. Thiết Kế Bảng Cơ Sở Dữ Liệu: dialysis_schedules

Tên Cột (Column) Kiểu Dữ Liệu Khóa Ràng Buộc Ý Nghĩa Nghiệp Vụ
schedule_id BIGSERIAL PK NOT NULL Khóa chính tự tăng của lịch điều trị
patient_id VARCHAR(20) FK NOT NULL Mã người bệnh suy thận mạn (Tham chiếu patients)
machine_id VARCHAR(10) FK NOT NULL Mã máy Nikkiso phân bổ (Tham chiếu dialysis_machines)
cycle_pattern VARCHAR(10) NOT NULL Chu kỳ tuần: '2_4_6' hoặc '3_5_7'
shift_number SMALLINT NOT NULL Ca lọc trong ngày: 1 (07:00-11:00), 2 (11:30-15:30), 3 (16:00-20:00)
modality VARCHAR(20) DEFAULT 'HD' Phương thức: 'HD_HIGH_FLUX', 'HDF_POST', 'HDF_PRE'
is_isolated BOOLEAN DEFAULT FALSE Yêu cầu lọc cách ly buồng riêng do nhiễm virus viêm gan
effective_from DATE NOT NULL Ngày bắt đầu áp dụng lịch chu kỳ
is_active BOOLEAN DEFAULT TRUE Trạng thái hiệu lực của lịch lọc máu

MODULE 07 / MOD-04 PHIẾU THEO DÕI LỌC MÁU ĐIỆN TỬ 3 PHA & KÝ SỐ PKI

DOM ID: #pane-phieu-chay-than

Văn bản pháp lý số hóa chuẩn Thông tư 46/2018/TT-BYT thay thế bản giấy: Quản lý 3 pha khép kín (Trước lọc -> Theo dõi trong ca mỗi 30-60 phút -> Sau lọc) và ký số PKI SmartCA.

1. Quy Trình Nghiệp Vụ & Thao Tác Màn Hình

1
Chuyển đổi giữa 3 Pha lâm sàng (Phase Navigation)
Click các pill điều hướng: Pha 1: Trước lọc, Pha 2: Trong lọc (Đang hiển thị), Pha 3: Sau lọc & Ký số. Hệ thống ẩn/hiện các khối form tương ứng.
JS Handler: DialysisManager.setTreatmentPhase(phaseNumber)
2
Ghi nhận mốc đo sinh hiệu theo giờ (+ Thêm mốc theo dõi)
Click nút "+ Thêm mốc theo dõi". Hệ thống tự động đọc giờ hiện tại (VD: 10:00), đọc các chỉ số tức thời từ máy Nikkiso qua socket ($Q_b=300$, $TMP=115$, $V_P=125$, $UF=750$), tính toán lũy kế và thêm 1 dòng mới vào bảng flowsheet.
JS Handler: DialysisManager.addHourlyCheckpoint() -> Cập nhật mảng phase2_intra
3
Thực hiện ký số PKI / SmartCA khóa hồ sơ
Tại Pha 3, sau khi kiểm tra Cân sau lọc và tình trạng rung miu AVF, Điều dưỡng và Bác sĩ click nút "Ký số hồ sơ ca lọc". Hệ thống gọi API ký số PAdES, gắn dấu thời gian Timestamp RFC 3161 và khóa bảng không cho chỉnh sửa.
JS Handler: DialysisManager.signTreatmentSheet() -> Toast.success('Đã ký số thành công')

2. Thiết Kế Bảng: dialysis_sessions (Ca Lọc Máu Chính)

Tên Cột Kiểu Dữ Liệu Khóa Ràng Buộc Ý Nghĩa Nghiệp Vụ
session_id VARCHAR(30) PK NOT NULL Mã phiên lọc máu (Ví dụ: 'DS-20261009-M01-01')
patient_id VARCHAR(20) FK NOT NULL Mã bệnh nhân lọc máu
machine_id VARCHAR(10) FK NOT NULL Mã máy Nikkiso thực hiện
pre_weight_kg DECIMAL(4,1) NOT NULL Cân nặng trước lọc (kg)
dry_weight_kg DECIMAL(4,1) NOT NULL Cân nặng khô chuẩn quy định (kg)
target_uf_ml INTEGER NOT NULL Mục tiêu rút nước siêu lọc UF Goal (mL)
actual_uf_ml INTEGER NULLABLE Tổng lượng dịch rút thực tế sau khi kết thúc ca (mL)
post_weight_kg DECIMAL(4,1) NULLABLE Cân nặng đo sau khi tháo kim lọc (kg)
vascular_access VARCHAR(20) DEFAULT 'AVF' Đường vào mạch máu: 'AVF' (Cầu tay), 'AVG', 'CATHETER'
dialyzer_model VARCHAR(50) Model màng lọc (VD: 'Fresenius FX CorDiax 80', 'Elisio 19H')
heparin_total_iu INTEGER DEFAULT 3000 Tổng liều chống đông Heparin sử dụng trong ca (IU)
doctor_signed BOOLEAN DEFAULT FALSE Trạng thái ký số của Bác sĩ trưởng ca
nurse_signed BOOLEAN DEFAULT FALSE Trạng thái ký số của Điều dưỡng phụ trách
digital_signature_hash TEXT NULLABLE Chuỗi mã băm SHA-256 kèm chứng thư số PAdES bất biến

3. Thiết Kế Bảng: dialysis_flowsheet_logs (Nhật Ký Theo Dõi Theo Giờ)

Tên Cột Kiểu Dữ Liệu Khóa Ý Nghĩa Nghiệp Vụ & Giới Hạn Lâm Sàng
log_id BIGSERIAL PK Khóa chính tự tăng của mốc theo dõi
session_id VARCHAR(30) FK Tham chiếu đến phiên lọc dialysis_sessions
timepoint TIME Giờ ghi nhận (VD: '07:00', '08:00', '09:00', '10:00', '11:00')
bp_systolic SMALLINT Huyết áp tâm thu (mmHg) - Cảnh báo nếu < 90 mmHg (Tụt HA)
bp_diastolic SMALLINT Huyết áp tâm trương (mmHg)
pulse_bpm SMALLINT Tần số mạch (lần/phút)
blood_flow_qb SMALLINT Tốc độ bơm máu Qb (mL/min) - Thường từ 250 - 350 mL/min
dialysate_flow_qd SMALLINT Lưu lượng dịch lọc Qd (mL/min) - Thường cố định 500 mL/min
venous_pressure_vp SMALLINT Áp lực tĩnh mạch VP (mmHg) - Bình thường: 80 - 150 mmHg
tmp_pressure SMALLINT Áp lực xuyên màng TMP (mmHg) - Cảnh báo nếu > 200 mmHg (Đông màng)
hourly_uf_ml INTEGER Lượng dịch rút trong giờ (mL)
accumulated_uf_ml INTEGER Tổng lượng dịch rút lũy kế từ đầu ca (mL)
clinical_notes VARCHAR(255) Ghi chú điều dưỡng: Thuốc tiêm, dịch bù, xử trí triệu chứng

MODULE 09 & 10 TELEMETRY IOT MÁY NIKKISO & GIÁM SÁT TRẠM NƯỚC RO ISO 23500

DOM ID: #pane-telemetry-nikkiso & #pane-tram-nuoc-ro

Giao thức thu thập dữ liệu thời gian thực 2s/lần qua RS-232/Ethernet và hệ thống cảm biến IoT giám sát trạm nước RO 2 cấp y tế đạt chuẩn ISO 23500 kèm chu trình khử khuẩn nhiệt 85°C.

1. Giao Thức Giao Tiếp Telemetry Nikkiso DBB-07/27 (RS-232 / TCP)

Cấu hình cổng nối tiếp chuẩn công nghiệp: Baudrate: 9600 bps | Data Bits: 8 | Parity: None | Stop Bits: 1. Chu kỳ phát gói tin: 2000ms.

// Khung bản tin Nikkiso Telemetry Packet Format (ASCII Stream) [STX]$NIKKISO,MACHINE_ID,STATUS,QB,QD,UF_RATE,TMP,VP,COND,TEMP[ETX][CRC16] // Ví dụ bản tin thực tế từ Máy M01: $NIKKISO,M01,RUN,300,500,750,110,120,14.0,36.5*4E // Ý nghĩa các trường: - STATUS: RUN (Đang chạy), ALM (Báo động), RDY (Sẵn sàng), CLN (Khử trùng) - QB = 300 (Tốc độ bơm máu 300 mL/min) - QD = 500 (Lưu lượng dịch lọc 500 mL/min) - UF_RATE = 750 (Tốc độ rút dịch 750 mL/giờ) - TMP = 110 (Áp lực xuyên màng 110 mmHg) - VP = 120 (Áp lực tĩnh mạch 120 mmHg) - COND = 14.0 (Độ dẫn điện dịch lọc 14.0 mS/cm) - TEMP = 36.5 (Nhiệt độ dịch lọc 36.5 độ C) - *4E: Mã kiểm tra lỗi Checksum CRC16

2. Thiết Kế Bảng CSDL: ro_system_logs (Giám Sát Nước RO Chuẩn ISO 23500)

Tên Cột Kiểu Dữ Liệu Tiêu Chuẩn ISO 23500 Ý Nghĩa Nghiệp Vụ & Ngưỡng An Toàn
log_id BIGSERIAL PK - Mã định danh log đo tự động
recorded_at TIMESTAMP - Thời điểm cảm biến ghi nhận dữ liệu
permeate_tds_ppm DECIMAL(5,2) TDS < 5 ppm Tổng chất rắn hòa tan đầu ra sau màng RO Cấp 2 (Thực tế: 1.1 ppm)
loop_conductivity_us DECIMAL(5,2) ≤ 10 μS/cm Độ dẫn điện nước cấp vòng Loop PEX (Thực tế: 1.2 μS/cm - Đạt chuẩn)
supply_pressure_bar DECIMAL(4,2) 2.5 - 3.0 bar Áp lực đường cấp đến 30 máy (Thực tế: 2.8 bar)
return_pressure_bar DECIMAL(4,2) > 1.5 bar Áp lực đường hồi về bồn RO (Thực tế: 1.6 bar - Đảm bảo dòng chảy liên tục)
flow_velocity_mps DECIMAL(3,1) > 1.0 m/s Vận tốc dòng hoàn lưu (1.2 m/s - Ngăn chặn hình thành màng biofilm)
is_hot_disinfection BOOLEAN 85°C x 40 min Cờ đánh dấu đang trong chu trình khử trùng nhiệt ban đêm
endotoxin_eu_per_ml DECIMAL(5,3) < 0.25 EU/mL Kết quả kiểm định nội độc tố định kỳ (Thực tế: < 0.01 EU/mL)
bacteria_cfu_per_ml INTEGER < 100 CFU/mL Kết quả cấy vi khuẩn hiếu khí định kỳ (Thực tế: 0 CFU/mL)

MODULE 11 & 12 TV WALL COMMAND CENTER & ĐỊNH MỨC NHÂN SỰ BUỒNG THẬN (1:4)

DOM ID: #pane-tv-wall-buong-than & #pane-nhan-su-buong-than

Màn hình giám sát tập trung trên TV lớn 55-75 inch với Dark Theme #090d16 và thuật toán giám sát tỷ lệ an toàn y tế bắt buộc 1 Điều dưỡng / 4-5 máy Nikkiso.

1. Thao Tác Giao Diện TV Wall (#pane-tv-wall-buong-than)

Màn hình được thiết kế tối ưu hiển thị không giật lag ở tốc độ 60 FPS:

  • Bật toàn màn hình: Click nút "Mở TV Wall Toàn Màn Hình" hoặc phím F11. Hệ thống tự động ẩn menu sidebar và thanh footer.
  • Hiệu ứng Báo động (Alarm Pulse): Khi có máy gửi tín hiệu lỗi qua WebSocket, thẻ máy trên TV Wall tự động bật CSS class .alarm có hiệu ứng chớp đỏ viền @keyframes alarmPulse kèm phát còi âm thanh.
  • Đếm lùi thời gian tự động: Mỗi giây hệ thống giảm thời gian đếm lùi của ca lọc và đổi màu chữ vàng khi còn dưới 15 phút.

2. Thuật Toán Kiểm Soát Định Mức Nhân Sự Y Tế (Ratio Algorithm)

// Công thức kiểm soát an toàn theo quy định Bộ Y tế & Hội Lọc Máu: const totalRunningMachines = 30; // 30 máy Nikkiso const presentNurses = 7; // 7 điều dưỡng trực ca const currentRatio = totalRunningMachines / presentNurses; // 30 / 7 = 4.28 máy / ĐD if (currentRatio > 5.0) { // VI PHẠM ĐỊNH MỨC AN TOÀN Y TẾ! triggerSafetyAlert({ severity: "CRITICAL", message: "Tỷ lệ vượt quá 5 máy/Điều dưỡng! Cần bổ sung tối thiểu 1 Điều dưỡng trực dự phòng.", blockNewAssignments: true // Chặn không cho gán thêm máy mới }); } else { // ĐẠT CHUẨN AN TOÀN LÂM SÀNG displayStatus("Tỷ lệ an toàn: 1 Điều dưỡng / " + currentRatio.toFixed(1) + " máy (ĐẠT CHUẨN)"); }

MODULE 24 / MOD-15 BÁO CÁO CHẤT LƯỢNG LỌC MÁU: KT/V, URR & QUYẾT TOÁN BHYT XML 4210

DOM ID: #pane-bao-cao-than

Hệ thống phân tích chất lượng điều trị lâm sàng tự động tính liều lọc máu Daugirdas và xuất dữ liệu đối soát bảo hiểm y tế.

1. Công Thức Tính Toán Lâm Sàng: Kt/V (Daugirdas Tự Nhiên) & URR

// 1. Tỷ lệ giảm Urea máu (Urea Reduction Ratio - URR): URR = ((Urea_pre - Urea_post) / Urea_pre) * 100; // Mục tiêu lâm sàng: URR >= 65% // 2. Chỉ số thanh thải Ure đơn khoang (Single-pool Kt/V theo Daugirdas II): const R = Urea_post / Urea_pre; const t = session_duration_hours; // Thường là 4.0 giờ const UF = ultrafiltration_liters; // Ví dụ: 3.0 Lít const W = post_weight_kg; // Ví dụ: 59.5 kg const Kt_V = -Math.log(R - 0.008 * t) + (4 - 3.5 * R) * (UF / W); // Mục tiêu chất lượng: Kt/V >= 1.2 (Lọc tối ưu: Kt/V >= 1.4)

KHỐI I: LÂM SÀNG, TIẾP NHẬN & CỔNG NGƯỜI BỆNH (MODULES 01 - 04)

MODULE 01 / MOD-01 TIẾP NHẬN BỆNH NHÂN & QR CCCD

DOM ID: #pane-tiep-nhan

Bảng Cơ Sở Dữ Liệu: patients & encounters

Tên CộtKiểu Dữ LiệuKhóaRàng BuộcÝ Nghĩa Nghiệp Vụ
patient_idVARCHAR(20)PKNOT NULLMã PID duy nhất của bệnh nhân (VD: 'DEMO001')
national_idVARCHAR(12)UNIQUESố CCCD gắn chip 12 số đọc từ mã QR chuẩn Bộ Công An
bhyt_card_numberVARCHAR(15)NULLABLEMã số thẻ Bảo hiểm y tế (10 hoặc 15 ký tự)
full_nameVARCHAR(100)NOT NULLHọ và tên đầy đủ viết hoa
date_of_birthDATENOT NULLNgày tháng năm sinh
genderVARCHAR(10)Giới tính: 'MALE', 'FEMALE', 'OTHER'
phone_numberVARCHAR(15)Số điện thoại liên lạc / nhận OTP cổng bệnh nhân
addressVARCHAR(255)Địa chỉ thường trú theo CCCD
Thao tác JS: App.saveTiepNhan() / App.openQrScannerModal() / App.applyQrVoiceData()

MODULE 02 / MOD-16 KHÁM BỆNH NGOẠI TRÚ & KÊ ĐƠN THUỐC

DOM ID: #pane-kham-benh

Bảng Cơ Sở Dữ Liệu: clinical_examinations & prescriptions

Lưu trữ triệu chứng cơ năng, sinh hiệu (Mạch, Nhiệt độ, Huyết áp, BMI theo chuẩn WPRO), chẩn đoán bệnh theo mã danh mục quốc tế ICD-10 và danh mục thuốc kê đơn.

Tên CộtKiểu Dữ LiệuKhóaÝ Nghĩa Nghiệp Vụ
exam_idBIGSERIAL PKPKMã đợt khám bệnh lâm sàng
encounter_idBIGINT FKFKLiên kết lượt tiếp nhận
icd10_codeVARCHAR(10)Mã bệnh ICD-10 (Ví dụ: 'N18.5' - Suy thận mạn giai đoạn 5)
icd10_nameVARCHAR(255)Tên bệnh chẩn đoán xác định
bmi_valueDECIMAL(4,1)Chỉ số khối cơ thể = Cân nặng / (Chiều cao ^ 2)
pulse_rateSMALLINTNhịp tim (lần/phút)
blood_pressureVARCHAR(10)Huyết áp tâm thu/tâm trương (Ví dụ: '130/80')
Thao tác JS: App.saveKhamBenh() -> Đồng bộ đơn thuốc sang kho Dược & Ký số EMR

KHỐI III: CẬN LÂM SÀNG, XÉT NGHIỆM LIS & PACS (MODULES 13 - 20)

MODULE 13 / MOD-08 QUẢN TRỊ XÉT NGHIỆM LIS 2 CHIỀU

DOM ID: #pane-ket-qua-xn

Bảng Cơ Sở Dữ Liệu: lis_test_results

Kết nối 2 chiều với máy xét nghiệm tự động (Cobas 6000, Sysmex XN-550) qua chuẩn ASTM E1381/E1394 và HL7 v2.5:

Tên CộtKiểuKhóaÝ Nghĩa Nghiệp Vụ
result_idBIGSERIALPKMã kết quả xét nghiệm chi tiết
order_idVARCHAR(20)FKMã phiếu chỉ định xét nghiệm
test_codeVARCHAR(20)Mã xét nghiệm (VD: 'GLU', 'UREA', 'CREA', 'HGB')
test_valueDECIMAL(10,3)Giá trị đo được từ máy
unitVARCHAR(20)Đơn vị đo (VD: 'mmol/L', 'g/L', 'μmol/L')
reference_rangeVARCHAR(50)Khoảng tham chiếu sinh học bình thường (VD: '3.9 - 6.4')
flagVARCHAR(5)Cờ cảnh báo bất thường: 'N' (Bình thường), 'H' (Cao), 'L' (Thấp), 'C' (Nguy kịch)
delta_check_statusVARCHAR(20)Độ biến thiên so với kết quả lần trước: 'PASSED' hoặc 'WARNING'
Thao tác JS: App.duyetKetQuaLab() / App.kySoLab() -> Trả kết quả về hồ sơ Bác sĩ

MODULE 15 / MOD-18 NỘI KIỂM IQC & BIỂU ĐỒ LEVEY-JENNINGS (WESTGARD)

DOM ID: #pane-noi-kiem-qc

Bảng Cơ Sở Dữ Liệu: qc_runs & qc_violations

Thuật toán tự động kiểm tra vi phạm đa quy tắc Westgard chuẩn ISO 15189:2022:

  • Quy tắc 1-3s (Ngẫu nhiên - Cảnh báo Đỏ): 1 điểm vượt ngoài $pm 3SD$ -> Hủy lô xét nghiệm, khóa kênh máy.
  • Quy tắc 2-2s (Hệ thống): 2 điểm liên tiếp vượt cùng phía ngoài $pm 2SD$ -> Báo lỗi hiệu chuẩn Calibrator.
  • Quy tắc R-4s: Chênh lệch giữa 2 mức nồng độ cùng mẻ vượt quá $4SD$.
  • Quy tắc 4-1s & 10x: Trôi dạt hệ thống (Systematic Drift).

KHỐI IV & V: DƯỢC, VIỆN PHÍ & BỆNH ÁN EMR (MODULES 21 - 25)

MODULE 21 / MOD-10 KHO DƯỢC & TỰ ĐỘNG TRỪ KHO VẬT TƯ CA LỌC MÁU (FEFO)

DOM ID: #pane-kho-duoc

1. Thuật Toán Tự Động Trừ Kho Vật Tư Ca Lọc Máu

Ngay khi phiên lọc máu kết thúc (session_status = 'completed'), hệ thống kích hoạt transaction trừ kho tự động theo định mức kỹ thuật:

-- Trigger tự động trừ kho vật tư tiêu hao ca lọc máu (Nguyên tắc FEFO): CREATE OR REPLACE FUNCTION trg_deduct_dialysis_inventory() RETURNS TRIGGER AS $$ BEGIN IF NEW.current_status = 'disinfecting' AND OLD.current_status = 'running' THEN -- 1. Trừ 01 Quả lọc (Mã quả lọc theo y lệnh ca) PERFORM deduct_batch_fefo(NEW.dialyzer_model, 1); -- 2. Trừ 01 Can Axit A (10 Lít) PERFORM deduct_batch_fefo('CAN_AXIT_A_10L', 1); -- 3. Trừ 01 Túi Bột Bicarbonate B PERFORM deduct_batch_fefo('BOT_BICARBONATE_B', 1); -- 4. Trừ 01 Bộ dây máu Nikkiso PERFORM deduct_batch_fefo('BO_DAY_MAU_NIKKISO', 1); -- 5. Trừ 01 Cặp kim chọc AVF 16G PERFORM deduct_batch_fefo('CAP_KIM_AVF_16G', 1); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;

MODULE 22 / MOD-11 VIỆN PHÍ, VIETQR ĐỘNG & XUẤT XML 4210 BHYT

DOM ID: #pane-vien-phi

1. Tích Hợp VietQR Động EMVCo & Đối Soát Giao Dịch

Sinh mã VietQR động tích hợp số tiền chính xác từng ca lọc và mã hóa nội dung thanh toán chuẩn: VP [MÃ HÓA ĐƠN] [TÊN BN]. Lắng nghe webhook IPN từ ngân hàng tự động khớp phiếu thu.

Thao tác JS: App.thanhToanVienPhi() / App.saveTamUng() / App.saveHoanTra()

MODULE 23 & 25 BỆNH ÁN ĐIỆN TỬ EMR & PHÂN QUYỀN RBAC

DOM ID: #pane-emr & #pane-phan-quyen

Bảng Nhật Ký Kiểm Toán Bất Biến: audit_trail_logs (Append-Only)

Ghi nhận 100% thao tác của bác sĩ, điều dưỡng theo yêu cầu an ninh y tế Bộ Y tế: user_id, action_type (CREATE, READ, UPDATE, DELETE, SIGN), target_table, target_id, ip_address, timestamp.