Database Schema - ระบบงานห้องฉุกเฉิน (Emergency Room System)
Document Version: 1.0 (Master Schema Aligned)
Date: 28 สิงหาคม 2025
Integration with: MediTech Hospital Information System - MASTER_DATABASE_SCHEMA
Backend: Nest.js + TypeScript + Prisma ORM
Database: PostgreSQL 15+ + Redis 7+
เอกสารนี้รวบรวมโครงสร้างตารางฐานข้อมูล (Database Schema) ทั้งหมดสำหรับโมดูลระบบงานห้องฉุกเฉิน ที่ปรับให้สอดคล้องกับ Master Database Schema ของระบบ MediTech HIS เพื่อให้มีการบูรณาการที่สมบูรณ์แบบระหว่างโมดูลต่างๆ
Table of Contents
- ตาราง
er_cases - ตาราง
er_triage - ตาราง
er_clinical_notes - ตาราง
er_orders - ตาราง
er_medication_administration - ตาราง
er_nursing_tasks - ตาราง
er_vital_signs - ตาราง
er_accident_cases - ตาราง
er_beds - ตาราง
er_queue_status - ตาราง
er_lab_results - ตาราง
er_radiology_results - ตาราง
er_discharge - ตาราง
er_statistics_daily
SHARED FOUNDATION TABLES (จาก Master Schema)
หมายเหตุ: ตารางหลักเหล่านี้ถูกกำหนดใน MASTER_DATABASE_SCHEMA.md และใช้ร่วมกันทุกโมดูล
Foundation Tables ที่ใช้ร่วมกัน:
patients- ข้อมูลผู้ป่วยหลัก (Master Patient Index)users- บุคลากรทางการแพทย์และพยาบาล (รวม ER staff, doctors, nurses)medical_visits- ข้อมูลการมารับบริการ (Emergency visits)departments- โครงสร้างแผนกโรงพยาบาล (รวมแผนกฉุกเฉิน)clinics- คลินิกต่างๆ ภายในแผนก (รวม ER zones)appointments- ระบบนัดหมายหลัก (สำหรับ follow-up appointments)queues- ระบบคิวหลัก (integrated กับ ER queue management)medical_orders- คำสั่งทางการแพทย์จากระบบ CPOE (ER orders)audit_logs- บันทึกการตรวจสอบสำหรับ compliancedigital_signatures- ลายเซ็นอิเล็กทรอนิกส์สำหรับเอกสารทางการแพทย์notifications- ระบบแจ้งเตือนแบบ Multi-channelrolesและpermissions- ระบบ RBAC สำหรับ ER staff permissions
Emergency Room Specific Integration Points: - การเชื่อมโยงกับ
queuestable สำหรับ ER patient flow management - การใช้medical_ordersสำหรับ emergency orders และ CPOE integration - Integration กับappointmentsสำหรับ scheduled follow-up care - รองรับ Digital signatures สำหรับ emergency documentation compliance - Multi-channel notifications สำหรับ emergency alerts และ critical resultsBenefits: - ไม่มีการสร้างตารางซ้ำซ้อน - ข้อมูลสอดคล้องกันระหว่าง ER, OPD, IPD modules
- รองรับ Real-time emergency coordination - ปฏิบัติตาม Healthcare emergency documentation standards - รองรับ Trauma registry และ emergency reporting requirements
ER-SPECIFIC TABLES (ตารางเฉพาะห้องฉุกเฉิน)
1. ตาราง er_cases
ตารางหลักสำหรับเก็บข้อมูลคดีผู้ป่วยห้องฉุกเฉิน - เชื่อมโยงกับ medical_visits และขยายข้อมูลเฉพาะ ER
CREATE TABLE er_cases (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วยจากตารางหลัก
visit_id UUID NOT NULL REFERENCES medical_visits(id), -- รหัสการมารับบริการ
-- ER Case Information
er_number VARCHAR(20) UNIQUE NOT NULL, -- หมายเลข ER ที่ระบบสร้างอัตโนมัติ
arrival_date DATE NOT NULL DEFAULT CURRENT_DATE, -- วันที่มาถึงห้องฉุกเฉิน
arrival_time TIME NOT NULL DEFAULT CURRENT_TIME, -- เวลาที่มาถึงห้องฉุกเฉิน
arrival_method VARCHAR(20) DEFAULT 'walk_in' CHECK (arrival_method IN ('walk_in', 'ems', 'referral', 'transfer')), -- วิธีการมา (มาเอง/รถพยาบาล/ส่งต่อ/โอน)
case_type VARCHAR(20) DEFAULT 'emergency' CHECK (case_type IN ('emergency', 'accident', 'general', 'psychiatric')), -- ประเภทผู้ป่วย (ฉุกเฉิน/อุบัติเหตุ/ทั่วไป/จิตเวช)
-- Chief Complaint
chief_complaint TEXT NOT NULL, -- อาการสำคัญที่ผู้ป่วยมาด้วย
present_illness TEXT, -- ประวัติอาการป่วยปัจจุบัน
-- Provider Assignment
primary_doctor_id UUID REFERENCES users(id), -- รหัสแพทย์หลักผู้รักษา
primary_nurse_id UUID REFERENCES users(id), -- รหัสพยาบาลหลักผู้ดูแล
registrar_id UUID REFERENCES users(id), -- รหัสเจ้าหน้าที่ลงทะเบียน
-- Triage Information
triage_level INTEGER CHECK (triage_level BETWEEN 1 AND 5), -- ระดับความเร่งด่วน (1=วิกฤต, 5=ไม่เร่งด่วน)
triage_color VARCHAR(10) CHECK (triage_color IN ('red', 'orange', 'yellow', 'green', 'blue')), -- สีระดับความเร่งด่วน
triage_completed_at TIMESTAMP WITH TIME ZONE, -- วันเวลาที่คัดแยกเสร็จ
-- Insurance Information
insurance_type VARCHAR(20) DEFAULT 'UCS' CHECK (insurance_type IN ('UCS', 'SSS', 'CSMBS', 'Private', 'Cash')), -- ประเภทสิทธิการรักษา
insurance_number VARCHAR(50), -- เลขที่สิทธิการรักษา
-- Referral Information
referring_hospital VARCHAR(200), -- โรงพยาบาลที่ส่งตัวมา
referral_number VARCHAR(50), -- เลขที่หนังสือส่งตัว
referral_reason TEXT, -- เหตุผลที่ส่งตัวมา
-- Emergency Contact
emergency_contact_name VARCHAR(100), -- ชื่อผู้ติดต่อกรณีฉุกเฉิน
emergency_contact_phone VARCHAR(15), -- เบอร์โทรผู้ติดต่อกรณีฉุกเฉิน
emergency_contact_relationship VARCHAR(50), -- ความสัมพันธ์กับผู้ป่วย
-- Case Status
case_status VARCHAR(20) DEFAULT 'active' CHECK (case_status IN ('active', 'admitted', 'discharged', 'transferred', 'deceased', 'left_ama')), -- สถานะของคดี
priority_flag BOOLEAN DEFAULT FALSE, -- ตัวบ่งชี้ความเร่งด่วนพิเศษ
isolation_required BOOLEAN DEFAULT FALSE, -- ต้องการการแยกผู้ป่วยหรือไม่
isolation_type VARCHAR(20) CHECK (isolation_type IN ('droplet', 'airborne', 'contact', 'reverse')), -- ประเภทการแยกผู้ป่วย
-- Timeline Tracking
registration_completed_at TIMESTAMP WITH TIME ZONE, -- วันเวลาที่ลงทะเบียนเสร็จ
first_assessment_at TIMESTAMP WITH TIME ZONE, -- วันเวลาประเมินครั้งแรก
doctor_first_seen_at TIMESTAMP WITH TIME ZONE, -- วันเวลาที่แพทย์ตรวจครั้งแรก
treatment_completed_at TIMESTAMP WITH TIME ZONE, -- วันเวลาที่รักษาเสร็จสิ้น
disposition_time TIMESTAMP WITH TIME ZONE, -- เวลาที่ตัดสินใจปลายทางผู้ป่วย
-- Case Closure
final_disposition VARCHAR(20) CHECK (final_disposition IN ('home', 'admit_general', 'admit_icu', 'transfer', 'morgue', 'ama', 'absconded')), -- ปลายทางสุดท้ายของผู้ป่วย
length_of_stay_minutes INTEGER, -- ระยะเวลาพักรักษาในห้องฉุกเฉิน (นาที)
-- Billing Information
total_charges DECIMAL(10,2) DEFAULT 0.00, -- ค่ารักษาทั้งหมด
patient_responsibility DECIMAL(10,2) DEFAULT 0.00, -- ส่วนที่ผู้ป่วยต้องชำระ
insurance_coverage DECIMAL(10,2) DEFAULT 0.00, -- ส่วนที่สิทธิคุ้มครอง
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของข้อมูลคดีห้องฉุกเฉิน |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วยจากตารางหลัก patients |
visit_id |
UUID | NOT NULL, FK | รหัสการมารับบริการจากตาราง medical_visits |
er_number |
VARCHAR(20) | UNIQUE, NOT NULL | หมายเลข ER ที่ระบบสร้างอัตโนมัติ (เช่น ER2025080001) |
arrival_date |
DATE | NOT NULL | วันที่มาถึงห้องฉุกเฉิน |
arrival_time |
TIME | NOT NULL | เวลาที่มาถึงห้องฉุกเฉิน |
arrival_method |
VARCHAR(20) | CHECK | วิธีการมา (walk_in=มาเอง, ems=รถพยาบาล, referral=ส่งต่อ, transfer=โอน) |
case_type |
VARCHAR(20) | CHECK | ประเภทผู้ป่วย (emergency=ฉุกเฉิน, accident=อุบัติเหตุ, general=ทั่วไป) |
chief_complaint |
TEXT | NOT NULL | อาการสำคัญที่ผู้ป่วยมาด้วย |
present_illness |
TEXT | ประวัติอาการป่วยปัจจุบันรายละเอียด | |
primary_doctor_id |
UUID | FK | รหัสแพทย์หลักผู้รักษา |
primary_nurse_id |
UUID | FK | รหัสพยาบาลหลักผู้ดูแล |
registrar_id |
UUID | FK | รหัสเจ้าหน้าที่ลงทะเบียน |
triage_level |
INTEGER | CHECK (1-5) | ระดับความเร่งด่วน (1=วิกฤตสุด, 5=ไม่เร่งด่วน) |
triage_color |
VARCHAR(10) | CHECK | สีระดับความเร่งด่วน (red=แดง, orange=ส้ม, yellow=เหลือง, green=เขียว, blue=น้ำเงิน) |
triage_completed_at |
TIMESTAMP | วันเวลาที่คัดแยกเสร็จสิ้น | |
insurance_type |
VARCHAR(20) | CHECK | ประเภทสิทธิการรักษา (UCS, SSS, CSMBS, Private, Cash) |
insurance_number |
VARCHAR(50) | เลขที่สิทธิการรักษา/กรมธรรม์ | |
referring_hospital |
VARCHAR(200) | ชื่อโรงพยาบาลที่ส่งตัวมา | |
referral_number |
VARCHAR(50) | เลขที่หนังสือส่งตัว | |
referral_reason |
TEXT | เหตุผลที่ส่งตัวมา | |
emergency_contact_name |
VARCHAR(100) | ชื่อผู้ติดต่อกรณีฉุกเฉิน | |
emergency_contact_phone |
VARCHAR(15) | เบอร์โทรผู้ติดต่อกรณีฉุกเฉิน | |
emergency_contact_relationship |
VARCHAR(50) | ความสัมพันธ์กับผู้ป่วย | |
case_status |
VARCHAR(20) | CHECK | สถานะคดี (active=กำลังรักษา, admitted=รับไว้รักษา, discharged=จำหน่าย, transferred=ส่งต่อ, deceased=เสียชีวิต, left_ama=กลับโดยไม่ได้รับอนุญาต) |
priority_flag |
BOOLEAN | DEFAULT FALSE | ตัวบ่งชี้ความเร่งด่วนพิเศษ |
isolation_required |
BOOLEAN | DEFAULT FALSE | ต้องการการแยกผู้ป่วยหรือไม่ |
isolation_type |
VARCHAR(20) | CHECK | ประเภทการแยกผู้ป่วย (droplet=ละอองฝอย, airborne=อากาศ, contact=สัมผัส, reverse=ป้องกันย้อนกลับ) |
registration_completed_at |
TIMESTAMP | วันเวลาที่ลงทะเบียนเสร็จ | |
first_assessment_at |
TIMESTAMP | วันเวลาประเมินครั้งแรก | |
doctor_first_seen_at |
TIMESTAMP | วันเวลาที่แพทย์ตรวจครั้งแรก | |
treatment_completed_at |
TIMESTAMP | วันเวลาที่รักษาเสร็จสิ้น | |
disposition_time |
TIMESTAMP | เวลาที่ตัดสินใจปลายทางผู้ป่วย | |
final_disposition |
VARCHAR(20) | CHECK | ปลายทางสุดท้าย (home=กลับบ้าน, admit_general=รับไว้รักษาทั่วไป, admit_icu=รับไว้ ICU, transfer=ส่งต่อ, morgue=ห้องดับจิต, ama=กลับโดยไม่ได้รับอนุญาต, absconded=หลบหนี) |
length_of_stay_minutes |
INTEGER | ระยะเวลาพักรักษาในห้องฉุกเฉิน (นาที) | |
total_charges |
DECIMAL(10,2) | ค่ารักษาทั้งหมด (บาท) | |
patient_responsibility |
DECIMAL(10,2) | ส่วนที่ผู้ป่วยต้องชำระ (บาท) | |
insurance_coverage |
DECIMAL(10,2) | ส่วนที่สิทธิคุ้มครอง (บาท) |
2. ตาราง er_triage
ตารางสำหรับบันทึกการประเมินคัดแยกผู้ป่วยห้องฉุกเฉิน (Emergency Triage Assessment)
CREATE TABLE er_triage (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
triage_nurse_id UUID NOT NULL REFERENCES users(id), -- รหัสพยาบาลผู้คัดแยก
-- Assessment Time
assessment_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่ประเมิน
-- Vital Signs
systolic_bp INTEGER, -- ความดันโลหิตตัวบน (mmHg)
diastolic_bp INTEGER, -- ความดันโลหิตตัวล่าง (mmHg)
heart_rate INTEGER, -- อัตราการเต้นของหัวใจ (ครั้งต่อนาที)
respiratory_rate INTEGER, -- อัตราการหายใจ (ครั้งต่อนาที)
temperature DECIMAL(4,2), -- อุณหภูมิร่างกาย (องศาเซลเซียส)
oxygen_saturation INTEGER, -- ความอิ่มตัวของออกซิเจนในเลือด (เปอร์เซ็นต์)
-- Neurological Assessment
glasgow_coma_scale INTEGER CHECK (glasgow_coma_scale BETWEEN 3 AND 15), -- คะแนนระดับความรู้สึกตัว
gcs_eye INTEGER CHECK (gcs_eye BETWEEN 1 AND 4), -- GCS ตา (1-4)
gcs_verbal INTEGER CHECK (gcs_verbal BETWEEN 1 AND 5), -- GCS เสียง (1-5)
gcs_motor INTEGER CHECK (gcs_motor BETWEEN 1 AND 6), -- GCS การเคลื่อนไหว (1-6)
avpu_scale VARCHAR(20) CHECK (avpu_scale IN ('alert', 'verbal', 'pain', 'unresponsive')), -- สเกลความรู้สึกตัว AVPU
pupil_reaction VARCHAR(20) CHECK (pupil_reaction IN ('normal', 'sluggish', 'fixed', 'unequal')), -- การตอบสนองของม่านตา
-- Pain Assessment
pain_score INTEGER CHECK (pain_score BETWEEN 0 AND 10), -- คะแนนความเจ็บปวด (0-10)
pain_location TEXT, -- ตำแหน่งที่เจ็บปวด
pain_character VARCHAR(100), -- ลักษณะความเจ็บปวด
-- ESI Calculation
esi_level INTEGER CHECK (esi_level BETWEEN 1 AND 5), -- ระดับ Emergency Severity Index (1-5)
esi_resources_needed INTEGER DEFAULT 0, -- จำนวนทรัพยากรที่คาดว่าต้องใช้
anticipated_resources TEXT[], -- รายการทรัพยากรที่คาดว่าต้องใช้
-- Chief Complaint Details
chief_complaint_category VARCHAR(50), -- หมวดหมู่อาการสำคัญ
symptom_onset VARCHAR(50), -- ระยะเวลาที่มีอาการ
symptom_severity VARCHAR(20) CHECK (symptom_severity IN ('mild', 'moderate', 'severe', 'critical')), -- ความรุนแรงของอาการ
-- Risk Factors
high_risk_criteria TEXT[], -- เกณฑ์ความเสี่ยงสูง
isolation_precautions VARCHAR(50), -- มาตรการป้องกันการแพร่เชื้อ
fall_risk_score INTEGER, -- คะแนนความเสี่ยงล้ม
-- Triage Decision
triage_priority INTEGER CHECK (triage_priority BETWEEN 1 AND 5), -- ลำดับความสำคัญจากการคัดแยง
triage_color VARCHAR(10) CHECK (triage_color IN ('red', 'orange', 'yellow', 'green', 'blue')), -- สีแสดงระดับความเร่งด่วน
recommended_area VARCHAR(50), -- พื้นที่แนะนำให้รักษา
special_needs TEXT, -- ความต้องการพิเศษ
-- Re-triage Information
is_retriage BOOLEAN DEFAULT FALSE, -- เป็นการคัดแยงซ้ำหรือไม่
previous_triage_id UUID REFERENCES er_triage(id), -- การคัดแยงครั้งก่อนหน้า
retriage_reason TEXT, -- เหตุผลการคัดแยงซ้ำ
-- Assessment Notes
triage_notes TEXT, -- บันทึกการคัดแยง
nurse_observations TEXT, -- ข้อสังเกตของพยาบาล
-- Digital Signature
electronic_signature TEXT, -- ลายเซ็นอิเล็กทรอนิกส์
signed_at TIMESTAMP WITH TIME ZONE, -- เวลาที่ลงลายเซ็น
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของการประเมินคัดแยง |
er_case_id |
UUID | NOT NULL, FK | รหัสคดีห้องฉุกเฉินที่เชื่อมโยง |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วย |
triage_nurse_id |
UUID | NOT NULL, FK | รหัสพยาบาลผู้ทำการคัดแยง |
assessment_time |
TIMESTAMP | วันเวลาที่ทำการประเมินคัดแยง | |
systolic_bp |
INTEGER | ความดันโลหิตตัวบน (มิลลิเมตรปรอท) | |
diastolic_bp |
INTEGER | ความดันโลหิตตัวล่าง (มิลลิเมตรปรอท) | |
heart_rate |
INTEGER | อัตราการเต้นของหัวใจ (ครั้งต่อนาที) | |
respiratory_rate |
INTEGER | อัตราการหายใจ (ครั้งต่อนาที) | |
temperature |
DECIMAL(4,2) | อุณหภูมิร่างกาย (องศาเซลเซียส) | |
oxygen_saturation |
INTEGER | ความอิ่มตัวของออกซิเจนในเลือด (เปอร์เซ็นต์) | |
glasgow_coma_scale |
INTEGER | CHECK (3-15) | คะแนนระดับความรู้สึกตัวรวม |
gcs_eye |
INTEGER | CHECK (1-4) | GCS การลืมตา (1=ไม่ลืมตา, 4=ลืมตาเอง) |
gcs_verbal |
INTEGER | CHECK (1-5) | GCS การตอบสนองต่อเสียง (1=ไม่ตอบ, 5=ตอบได้ดี) |
gcs_motor |
INTEGER | CHECK (1-6) | GCS การเคลื่อนไหว (1=ไม่เคลื่อนไหว, 6=เคลื่อนไหวตามคำสั่ง) |
avpu_scale |
VARCHAR(20) | CHECK | สเกล AVPU (alert=รู้สึกตัวดี, verbal=ตอบสนองเสียง, pain=ตอบสนองความเจ็บ, unresponsive=ไม่ตอบสนอง) |
pupil_reaction |
VARCHAR(20) | CHECK | การตอบสนองของม่านตา (normal=ปกติ, sluggish=ช้า, fixed=ตาย, unequal=ไม่เท่ากัน) |
pain_score |
INTEGER | CHECK (0-10) | คะแนนความเจ็บปวด (0=ไม่เจ็บ, 10=เจ็บมากที่สุด) |
pain_location |
TEXT | ตำแหน่งที่เจ็บปวด | |
pain_character |
VARCHAR(100) | ลักษณะความเจ็บปวด (แสบ, ปวดแปลบ, ปวดจี๊ด, ปวดกดทับ) | |
esi_level |
INTEGER | CHECK (1-5) | ระดับ ESI (1=วิกฤตสุด, 5=ไม่เร่งด่วน) |
esi_resources_needed |
INTEGER | จำนวนทรัพยากรที่คาดว่าต้องใช้ | |
anticipated_resources |
TEXT[] | รายการทรัพยากรที่คาดว่าต้องใช้ (lab, xray, ct, mri, consult) | |
chief_complaint_category |
VARCHAR(50) | หมวดหมู่อาการสำคัญ | |
symptom_onset |
VARCHAR(50) | ระยะเวลาที่มีอาการ (acute, chronic, progressive) | |
symptom_severity |
VARCHAR(20) | CHECK | ความรุนแรงของอาการ |
high_risk_criteria |
TEXT[] | เกณฑ์ความเสี่ยงสูง | |
isolation_precautions |
VARCHAR(50) | มาตรการป้องกันการแพร่เชื้อ | |
fall_risk_score |
INTEGER | คะแนนความเสี่ยงการล้ม | |
triage_priority |
INTEGER | CHECK (1-5) | ลำดับความสำคัญจากการคัดแยง |
triage_color |
VARCHAR(10) | CHECK | สีแสดงระดับความเร่งด่วน |
recommended_area |
VARCHAR(50) | พื้นที่แนะนำให้รักษา | |
special_needs |
TEXT | ความต้องการพิเศษ | |
is_retriage |
BOOLEAN | DEFAULT FALSE | เป็นการคัดแยงซ้ำหรือไม่ |
previous_triage_id |
UUID | FK | การคัดแยงครั้งก่อนหน้า |
retriage_reason |
TEXT | เหตุผลการคัดแยงซ้ำ | |
triage_notes |
TEXT | บันทึกการคัดแยง | |
nurse_observations |
TEXT | ข้อสังเกตของพยาบาล | |
electronic_signature |
TEXT | ลายเซ็นอิเล็กทรอนิกส์ | |
signed_at |
TIMESTAMP | เวลาที่ลงลายเซ็น |
3. ตาราง er_clinical_notes
ตารางสำหรับบันทึกบันทึกทางคลินิกของแพทย์ในห้องฉุกเฉิน (SOAP Notes + CPOE Integration)
CREATE TABLE er_clinical_notes (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
doctor_id UUID NOT NULL REFERENCES users(id), -- รหัสแพทย์ผู้บันทึก
-- Note Information
note_type VARCHAR(20) DEFAULT 'initial' CHECK (note_type IN ('initial', 'progress', 'consultation', 'discharge')), -- ประเภทบันทึก
note_date DATE NOT NULL DEFAULT CURRENT_DATE, -- วันที่บันทึก
note_time TIME NOT NULL DEFAULT CURRENT_TIME, -- เวลาที่บันทึก
-- SOAP Structure
subjective TEXT, -- S (Subjective) - อาการที่ผู้ป่วยบอก
objective TEXT, -- O (Objective) - ผลการตรวจร่างกาย
assessment TEXT, -- A (Assessment) - การวินิจฉัย
plan TEXT, -- P (Plan) - แผนการรักษา
-- Physical Examination
general_appearance TEXT, -- ลักษณะทั่วไป
heent_examination TEXT, -- การตรวจหัว ตา หู คอ จมูก
cardiovascular_exam TEXT, -- การตรวจระบบหัวใจและหลอดเลือด
respiratory_exam TEXT, -- การตรวจระบบหายใจ
abdominal_exam TEXT, -- การตรวจช่องท้อง
neurological_exam TEXT, -- การตรวจระบบประสาท
musculoskeletal_exam TEXT, -- การตรวจระบบกระดูกและกล้ามเนื้อ
skin_exam TEXT, -- การตรวจผิวหนัง
-- Diagnosis Information
primary_diagnosis TEXT, -- การวินิจฉัยหลัก
primary_icd10_code VARCHAR(10), -- รหัส ICD-10 หลัก
secondary_diagnoses TEXT[], -- การวินิจฉัยรอง
secondary_icd10_codes TEXT[], -- รหัส ICD-10 รอง
-- Procedures
procedures_performed TEXT[], -- หัตถการที่ทำ
procedure_icd9_codes TEXT[], -- รหัส ICD-9-CM ของหัตถการ
procedure_notes TEXT, -- บันทึกหัตถการ
-- Treatment Plan
treatment_orders TEXT, -- คำสั่งการรักษา
medication_orders TEXT, -- คำสั่งยา
laboratory_orders TEXT, -- คำสั่งตรวจทางห้องปฏิบัติการ
imaging_orders TEXT, -- คำสั่งตรวจภาพ
consultation_orders TEXT, -- คำสั่งปรึกษาแพทย์เฉพาะทาง
-- Disposition
disposition_plan VARCHAR(50) CHECK (disposition_plan IN ('discharge', 'admit_general', 'admit_icu', 'transfer', 'observation', 'ama', 'deceased')), -- แผนปลายทาง
discharge_instructions TEXT, -- คำแนะนำเมื่อจำหน่าย
follow_up_instructions TEXT, -- คำแนะนำการติดตาม
return_precautions TEXT, -- ข้อควรระวังที่ต้องกลับมา
-- Media Attachments
attached_images TEXT[], -- รูปภาพที่แนบ
attached_videos TEXT[], -- วิดีโอที่แนบ
sketches TEXT[], -- ภาพร่างที่วาด
body_map_annotations JSONB, -- การทำเครื่องหมายบน Body Map
-- AI Assistance
ai_suggestions JSONB, -- คำแนะนำจาก AI
ai_icd_suggestions TEXT[], -- คำแนะนำรหัส ICD จาก AI
ai_drug_interactions TEXT[], -- การตรวจสอบปฏิกิริยายาจาก AI
ai_clinical_alerts TEXT[], -- คำเตือนทางคลินิกจาก AI
-- Templates and Standardization
template_used VARCHAR(100), -- Template ที่ใช้
structured_data JSONB, -- ข้อมูลแบบโครงสร้าง
-- Quality Metrics
documentation_completeness_score DECIMAL(5,2), -- คะแนนความสมบูรณ์ของการบันทึก
clinical_decision_support_alerts INTEGER DEFAULT 0, -- จำนวนการเตือนจากระบบช่วยตัดสินใจ
-- Version Control
version INTEGER DEFAULT 1, -- เวอร์ชันของบันทึก
previous_version_id UUID REFERENCES er_clinical_notes(id), -- บันทึกเวอร์ชันก่อนหน้า
is_final BOOLEAN DEFAULT FALSE, -- เป็นเวอร์ชันสุดท้ายหรือไม่
-- Digital Signature
electronic_signature TEXT, -- ลายเซ็นอิเล็กทรอนิกส์
signed_at TIMESTAMP WITH TIME ZONE, -- เวลาที่ลงลายเซ็น
cosigned_by UUID REFERENCES users(id), -- แพทย์ร่วมลงลายเซ็น
cosigned_at TIMESTAMP WITH TIME ZONE, -- เวลาร่วมลงลายเซ็น
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของบันทึกทางคลินิก |
er_case_id |
UUID | NOT NULL, FK | รหัสคดีห้องฉุกเฉิน |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วย |
doctor_id |
UUID | NOT NULL, FK | รหัสแพทย์ผู้บันทึก |
note_type |
VARCHAR(20) | CHECK | ประเภทบันทึก (initial=เริ่มต้น, progress=ความคืบหน้า, consultation=ปรึกษา, discharge=จำหน่าย) |
note_date |
DATE | NOT NULL | วันที่บันทึก |
note_time |
TIME | NOT NULL | เวลาที่บันทึก |
subjective |
TEXT | S - อาการที่ผู้ป่วยบอก ประวัติจากผู้ป่วย | |
objective |
TEXT | O - ผลการตรวจร่างกาย Vital Signs การตรวจทางกายภาพ | |
assessment |
TEXT | A - การวินิจฉัย การประเมินสภาพผู้ป่วย | |
plan |
TEXT | P - แผนการรักษา คำสั่งแพทย์ | |
general_appearance |
TEXT | ลักษณะทั่วไปของผู้ป่วย | |
heent_examination |
TEXT | การตรวจหัว ตา หู คอ จมูก (Head, Eyes, Ears, Nose, Throat) | |
cardiovascular_exam |
TEXT | การตรวจระบบหัวใจและหลอดเลือด | |
respiratory_exam |
TEXT | การตรวจระบบทางเดินหายใจ | |
abdominal_exam |
TEXT | การตรวจช่องท้อง | |
neurological_exam |
TEXT | การตรวจระบบประสาท | |
musculoskeletal_exam |
TEXT | การตรวจระบบกระดูกและกล้ามเนื้อ | |
skin_exam |
TEXT | การตรวจผิวหนังและเนื้อเยื่อใต้ผิวหนัง | |
primary_diagnosis |
TEXT | การวินิจฉัยโรคหลัก | |
primary_icd10_code |
VARCHAR(10) | รหัส ICD-10 ของการวินิจฉัยหลัก | |
secondary_diagnoses |
TEXT[] | การวินิจฉัยโรครอง (array) | |
secondary_icd10_codes |
TEXT[] | รหัส ICD-10 ของการวินิจฉัยรอง (array) | |
procedures_performed |
TEXT[] | รายการหัตถการที่ทำ | |
procedure_icd9_codes |
TEXT[] | รหัส ICD-9-CM ของหัตถการ | |
procedure_notes |
TEXT | บันทึกรายละเอียดหัตถการ | |
treatment_orders |
TEXT | คำสั่งการรักษา | |
medication_orders |
TEXT | คำสั่งยา | |
laboratory_orders |
TEXT | คำสั่งตรวจทางห้องปฏิบัติการ | |
imaging_orders |
TEXT | คำสั่งตรวจเอกซเรย์หรือภาพถ่าย | |
consultation_orders |
TEXT | คำสั่งปรึกษาแพทย์เฉพาะทาง | |
disposition_plan |
VARCHAR(50) | CHECK | แผนปลายทางผู้ป่วย |
discharge_instructions |
TEXT | คำแนะนำเมื่อจำหน่ายผู้ป่วย | |
follow_up_instructions |
TEXT | คำแนะนำการติดตามการรักษา | |
return_precautions |
TEXT | ข้อควรระวังที่ต้องกลับมาโรงพยาบาล | |
attached_images |
TEXT[] | รูปภาพที่แนบ (file paths) | |
attached_videos |
TEXT[] | วิดีโอที่แนบ (file paths) | |
sketches |
TEXT[] | ภาพร่างที่วาด (file paths) | |
body_map_annotations |
JSONB | การทำเครื่องหมายบน Body Map | |
ai_suggestions |
JSONB | คำแนะนำจาก AI Assistant | |
ai_icd_suggestions |
TEXT[] | คำแนะนำรหัส ICD จาก AI | |
ai_drug_interactions |
TEXT[] | การตรวจสอบปฏิกิริยายาจาก AI | |
ai_clinical_alerts |
TEXT[] | คำเตือนทางคลินิกจาก AI | |
template_used |
VARCHAR(100) | ชื่อ Template ที่ใช้ในการบันทึก | |
structured_data |
JSONB | ข้อมูลแบบโครงสร้างจาก Template | |
documentation_completeness_score |
DECIMAL(5,2) | คะแนนความสมบูรณ์ของการบันทึก (0-100) | |
clinical_decision_support_alerts |
INTEGER | จำนวนการเตือนจากระบบช่วยตัดสินใจ | |
version |
INTEGER | DEFAULT 1 | หมายเลขเวอร์ชันของบันทึก |
previous_version_id |
UUID | FK | บันทึกเวอร์ชันก่อนหน้า |
is_final |
BOOLEAN | DEFAULT FALSE | เป็นเวอร์ชันสุดท้ายหรือไม่ |
electronic_signature |
TEXT | ลายเซ็นอิเล็กทรอนิกส์ของแพทย์ | |
signed_at |
TIMESTAMP | วันเวลาที่ลงลายเซ็น | |
cosigned_by |
UUID | FK | แพทย์ที่ร่วมลงลายเซ็น |
cosigned_at |
TIMESTAMP | วันเวลาร่วมลงลายเซ็น |
4. ตาราง er_orders
ตารางสำหรับบันทึกคำสั่งทางการแพทย์ในห้องฉุกเฉิน (Emergency Room Orders - CPOE Integration)
CREATE TABLE er_orders (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
ordering_physician_id UUID NOT NULL REFERENCES users(id), -- รหัสแพทย์ผู้สั่ง
clinical_note_id UUID REFERENCES er_clinical_notes(id), -- รหัสบันทึกทางคลินิกที่เกี่ยวข้อง
-- Order Information
order_number VARCHAR(20) UNIQUE NOT NULL, -- หมายเลขคำสั่งที่ระบบสร้างอัตโนมัติ
order_type VARCHAR(20) NOT NULL CHECK (order_type IN ('medication', 'lab', 'imaging', 'procedure', 'consultation', 'diet', 'activity', 'nursing')), -- ประเภทคำสั่ง
order_category VARCHAR(50), -- หมวดหมู่ย่อยของคำสั่ง
order_priority VARCHAR(20) DEFAULT 'routine' CHECK (order_priority IN ('stat', 'urgent', 'routine', 'scheduled')), -- ความเร่งด่วนของคำสั่ง
-- Order Details
order_description TEXT NOT NULL, -- รายละเอียดคำสั่ง
order_specifications JSONB, -- รายละเอียดเฉพาะของแต่ละประเภทคำสั่ง
clinical_indication TEXT, -- ข้อบ่งชี้ทางคลินิก
-- Medication Specific Fields
medication_name VARCHAR(200), -- ชื่อยา
medication_strength VARCHAR(50), -- ความแรงยา
medication_dosage VARCHAR(100), -- ขนาดยา
medication_route VARCHAR(50) CHECK (medication_route IN ('PO', 'IV', 'IM', 'SC', 'SL', 'PR', 'topical', 'inhaled', 'nasal')), -- วิธีให้ยา
medication_frequency VARCHAR(50), -- ความถี่ในการให้ยา
medication_duration VARCHAR(50), -- ระยะเวลาให้ยา
-- Laboratory Specific Fields
lab_test_name VARCHAR(200), -- ชื่อการตรวจทางห้องปฏิบัติการ
lab_specimen_type VARCHAR(50) CHECK (lab_specimen_type IN ('blood', 'urine', 'stool', 'csf', 'sputum', 'wound_swab', 'other')), -- ประเภทตัวอย่าง
lab_collection_method VARCHAR(50), -- วิธีการเก็บตัวอย่าง
lab_fasting_required BOOLEAN DEFAULT FALSE, -- ต้องงดอาหารหรือไม่
-- Imaging Specific Fields
imaging_study_type VARCHAR(100), -- ประเภทการตรวจภาพ
imaging_body_part VARCHAR(100), -- ส่วนของร่างกายที่ตรวจ
contrast_required BOOLEAN DEFAULT FALSE, -- ต้องใช้สารทึบแสงหรือไม่
contrast_type VARCHAR(50), -- ประเภทสารทึบแสง
-- Procedure Specific Fields
procedure_name VARCHAR(200), -- ชื่อหัตถการ
procedure_location VARCHAR(100), -- สถานที่ทำหัตถการ
anesthesia_required BOOLEAN DEFAULT FALSE, -- ต้องการการระงับความรู้สึกหรือไม่
anesthesia_type VARCHAR(50), -- ประเภทการระงับความรู้สึก
-- Consultation Specific Fields
consultation_specialty VARCHAR(100), -- แพทย์เฉพาะทางที่ปรึกษา
consultation_urgency VARCHAR(20) CHECK (consultation_urgency IN ('emergent', 'urgent', 'routine')), -- ความเร่งด่วนของการปรึกษา
consultation_question TEXT, -- คำถามที่ต้องการปรึกษา
-- Timing Information
ordered_datetime TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สั่ง
scheduled_datetime TIMESTAMP WITH TIME ZONE, -- วันเวลาที่นัดหมาย
start_datetime TIMESTAMP WITH TIME ZONE, -- วันเวลาเริ่มต้น
stop_datetime TIMESTAMP WITH TIME ZONE, -- วันเวลาสิ้นสุด
-- Status Information
order_status VARCHAR(20) DEFAULT 'ordered' CHECK (order_status IN ('ordered', 'scheduled', 'in_progress', 'completed', 'cancelled', 'discontinued', 'on_hold')), -- สถานะคำสั่ง
completion_status VARCHAR(20) CHECK (completion_status IN ('pending', 'partial', 'complete', 'unable_to_complete')), -- สถานะการดำเนินการ
-- Results and Documentation
results_available BOOLEAN DEFAULT FALSE, -- มีผลการตรวจหรือไม่
results_critical BOOLEAN DEFAULT FALSE, -- ผลการตรวจวิกฤตหรือไม่
results_notes TEXT, -- บันทึกผลการตรวจ
completion_notes TEXT, -- บันทึกการดำเนินการ
-- Safety and Alerts
allergy_checked BOOLEAN DEFAULT FALSE, -- ตรวจสอบประวัติแพ้แล้วหรือไม่
drug_interaction_checked BOOLEAN DEFAULT FALSE, -- ตรวจสอบปฏิกิริยายาแล้วหรือไม่
contraindication_override BOOLEAN DEFAULT FALSE, -- มีการ override ข้อห้ามใช้หรือไม่
override_reason TEXT, -- เหตุผลการ override
safety_alerts TEXT[], -- คำเตือนความปลอดภัย
-- Quality and Performance
turnaround_time_minutes INTEGER, -- เวลาในการดำเนินการ (นาที)
delay_reason TEXT, -- เหตุผลการล่าช้า
quality_indicators JSONB, -- ตัวชี้วัดคุณภาพ
-- Financial Information
estimated_cost DECIMAL(10,2), -- ค่าใช้จ่ายโดยประมาณ
insurance_approved BOOLEAN, -- สิทธิการรักษาอนุมัติหรือไม่
patient_copay DECIMAL(10,2), -- ส่วนที่ผู้ป่วยต้องจ่าย
-- Workflow Integration
department_notified BOOLEAN DEFAULT FALSE, -- แจ้งแผนกที่เกี่ยวข้องแล้วหรือไม่
transport_arranged BOOLEAN DEFAULT FALSE, -- จัดการขนส่งผู้ป่วยแล้วหรือไม่
equipment_reserved BOOLEAN DEFAULT FALSE, -- จองอุปกรณ์แล้วหรือไม่
-- Order Modifications
modified_from_order_id UUID REFERENCES er_orders(id), -- คำสั่งต้นฉบับที่แก้ไขมาจาก
modification_reason TEXT, -- เหตุผลการแก้ไขคำสั่ง
is_renewal BOOLEAN DEFAULT FALSE, -- เป็นการต่ออายุคำสั่งหรือไม่
renewal_count INTEGER DEFAULT 0, -- จำนวนครั้งที่ต่ออายุ
-- Digital Signature and Approval
electronic_signature TEXT, -- ลายเซ็นอิเล็กทรอนิกส์
signed_at TIMESTAMP WITH TIME ZONE, -- วันเวลาที่ลงลายเซ็น
cosigned_by UUID REFERENCES users(id), -- ผู้ร่วมลงลายเซ็น
cosigned_at TIMESTAMP WITH TIME ZONE, -- วันเวลาร่วมลงลายเซ็น
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของคำสั่งทางการแพทย์ |
er_case_id |
UUID | NOT NULL, FK | รหัสคดีห้องฉุกเฉิน |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วย |
ordering_physician_id |
UUID | NOT NULL, FK | รหัสแพทย์ผู้สั่ง |
clinical_note_id |
UUID | FK | รหัสบันทึกทางคลินิกที่เกี่ยวข้อง |
order_number |
VARCHAR(20) | UNIQUE, NOT NULL | หมายเลขคำสั่งที่ระบบสร้างอัตโนมัติ |
order_type |
VARCHAR(20) | NOT NULL, CHECK | ประเภทคำสั่ง (medication=ยา, lab=ตรวจเลือด, imaging=ถ่ายภาพ, procedure=หัตถการ, consultation=ปรึกษา, diet=อาหาร, activity=กิจกรรม, nursing=พยาบาล) |
order_category |
VARCHAR(50) | หมวดหมู่ย่อยของคำสั่ง | |
order_priority |
VARCHAR(20) | CHECK | ความเร่งด่วน (stat=เร่งด่วนมาก, urgent=เร่งด่วน, routine=ปกติ, scheduled=นัดหมาย) |
order_description |
TEXT | NOT NULL | รายละเอียดคำสั่งแพทย์ |
order_specifications |
JSONB | รายละเอียดเฉพาะของแต่ละประเภทคำสั่งในรูป JSON | |
clinical_indication |
TEXT | ข้อบ่งชี้ทางคลินิกสำหรับคำสั่งนี้ | |
medication_name |
VARCHAR(200) | ชื่อยาหรือสารออกฤทธิ์ | |
medication_strength |
VARCHAR(50) | ความแรงของยา (เช่น 500mg, 10mg/ml) | |
medication_dosage |
VARCHAR(100) | ขนาดยาที่ใช้ (เช่น 1 tablet, 5ml) | |
medication_route |
VARCHAR(50) | CHECK | วิธีให้ยา (PO=ทางปาก, IV=เส้นเลือด, IM=กล้ามเนื้อ, SC=ใต้ผิวหนัง, SL=ใต้ลิ้น, PR=ทางทวารหนัก) |
medication_frequency |
VARCHAR(50) | ความถี่การให้ยา (เช่น TID, BID, QID) | |
medication_duration |
VARCHAR(50) | ระยะเวลาให้ยา (เช่น 7 days, PRN) | |
lab_test_name |
VARCHAR(200) | ชื่อการตรวจทางห้องปฏิบัติการ | |
lab_specimen_type |
VARCHAR(50) | CHECK | ประเภทตัวอย่าง (blood=เลือด, urine=ปัสสาวะ, stool=อุจจาระ, csf=น้ำไขสันหลัง, sputum=เสมหะ) |
lab_collection_method |
VARCHAR(50) | วิธีการเก็บตัวอย่าง | |
lab_fasting_required |
BOOLEAN | DEFAULT FALSE | ต้องงดอาหารก่อนตรวจหรือไม่ |
imaging_study_type |
VARCHAR(100) | ประเภทการตรวจภาพ (X-ray, CT, MRI, Ultrasound) | |
imaging_body_part |
VARCHAR(100) | ส่วนของร่างกายที่ต้องการตรวจ | |
contrast_required |
BOOLEAN | DEFAULT FALSE | ต้องใช้สารทึบแสงหรือไม่ |
contrast_type |
VARCHAR(50) | ประเภทสารทึบแสง | |
procedure_name |
VARCHAR(200) | ชื่อหัตถการหรือการรักษา | |
procedure_location |
VARCHAR(100) | สถานที่ทำหัตถการ | |
anesthesia_required |
BOOLEAN | DEFAULT FALSE | ต้องการการระงับความรู้สึกหรือไม่ |
anesthesia_type |
VARCHAR(50) | ประเภทการระงับความรู้สึก | |
consultation_specialty |
VARCHAR(100) | แพทย์เฉพาะทางที่ต้องการปรึกษา | |
consultation_urgency |
VARCHAR(20) | CHECK | ความเร่งด่วนของการปรึกษา |
consultation_question |
TEXT | คำถามหรือประเด็นที่ต้องการปรึกษา | |
ordered_datetime |
TIMESTAMP | DEFAULT NOW() | วันเวลาที่สั่ง |
scheduled_datetime |
TIMESTAMP | วันเวลาที่นัดหมาย | |
start_datetime |
TIMESTAMP | วันเวลาเริ่มต้นคำสั่ง | |
stop_datetime |
TIMESTAMP | วันเวลาสิ้นสุดคำสั่ง | |
order_status |
VARCHAR(20) | CHECK | สถานะคำสั่ง (ordered=สั่งแล้ว, scheduled=นัดหมายแล้ว, in_progress=กำลังดำเนินการ, completed=เสร็จสิ้น, cancelled=ยกเลิก) |
completion_status |
VARCHAR(20) | CHECK | สถานะการดำเนินการ (pending=รอ, partial=บางส่วน, complete=เสร็จสิ้น, unable_to_complete=ไม่สามารถทำได้) |
results_available |
BOOLEAN | DEFAULT FALSE | มีผลการตรวจหรือไม่ |
results_critical |
BOOLEAN | DEFAULT FALSE | ผลการตรวจอยู่ในเกณฑ์วิกฤตหรือไม่ |
results_notes |
TEXT | บันทึกผลการตรวจ | |
completion_notes |
TEXT | บันทึกการดำเนินการ | |
allergy_checked |
BOOLEAN | DEFAULT FALSE | ตรวจสอบประวัติแพ้แล้วหรือไม่ |
drug_interaction_checked |
BOOLEAN | DEFAULT FALSE | ตรวจสอบปฏิกิริยาระหว่างยาแล้วหรือไม่ |
contraindication_override |
BOOLEAN | DEFAULT FALSE | มีการ override ข้อห้ามใช้หรือไม่ |
override_reason |
TEXT | เหตุผลการ override ข้อห้าม | |
safety_alerts |
TEXT[] | รายการคำเตือนความปลอดภัย | |
turnaround_time_minutes |
INTEGER | เวลาในการดำเนินการจนเสร็จสิ้น (นาที) | |
delay_reason |
TEXT | เหตุผลการล่าช้า | |
quality_indicators |
JSONB | ตัวชี้วัดคุณภาพในรูป JSON | |
estimated_cost |
DECIMAL(10,2) | ค่าใช้จ่ายโดยประมาณ (บาท) | |
insurance_approved |
BOOLEAN | สิทธิการรักษาอนุมัติหรือไม่ | |
patient_copay |
DECIMAL(10,2) | ส่วนที่ผู้ป่วยต้องจ่ายเอง (บาท) | |
department_notified |
BOOLEAN | DEFAULT FALSE | แจ้งแผนกที่เกี่ยวข้องแล้วหรือไม่ |
transport_arranged |
BOOLEAN | DEFAULT FALSE | จัดการขนส่งผู้ป่วยแล้วหรือไม่ |
equipment_reserved |
BOOLEAN | DEFAULT FALSE | จองอุปกรณ์ที่จำเป็นแล้วหรือไม่ |
modified_from_order_id |
UUID | FK | คำสั่งต้นฉบับที่แก้ไขมาจาก |
modification_reason |
TEXT | เหตุผลการแก้ไขคำสั่ง | |
is_renewal |
BOOLEAN | DEFAULT FALSE | เป็นการต่ออายุคำสั่งหรือไม่ |
renewal_count |
INTEGER | DEFAULT 0 | จำนวนครั้งที่ต่ออายุ |
electronic_signature |
TEXT | ลายเซ็นอิเล็กทรอนิกส์ของแพทย์ | |
signed_at |
TIMESTAMP | วันเวลาที่ลงลายเซ็น | |
cosigned_by |
UUID | FK | ผู้ร่วมลงลายเซ็น (สำหรับนักเรียนแพทย์) |
cosigned_at |
TIMESTAMP | วันเวลาร่วมลงลายเซ็น |
5. ตาราง er_medication_administration
ตารางสำหรับบันทึกการให้ยาและการบริหารยาในห้องฉุกเฉิน (e-MAR for Emergency Room)
CREATE TABLE er_medication_administration (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
order_id UUID NOT NULL REFERENCES er_orders(id), -- รหัสคำสั่งยา
administering_nurse_id UUID NOT NULL REFERENCES users(id), -- รหัสพยาบาลผู้ให้ยา
verifying_nurse_id UUID REFERENCES users(id), -- รหัสพยาบาลผู้ตรวจสอบ (สำหรับยาเสี่ยงสูง)
-- Administration Information
administration_datetime TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่ให้ยา
administration_type VARCHAR(20) DEFAULT 'scheduled' CHECK (administration_type IN ('scheduled', 'stat', 'prn', 'one_time', 'continuous')), -- ประเภทการให้ยา
-- Medication Details
medication_name VARCHAR(200) NOT NULL, -- ชื่อยา
medication_strength VARCHAR(50), -- ความแรงยา
medication_form VARCHAR(50), -- รูปแบบยา (tablet, injection, syrup)
medication_manufacturer VARCHAR(100), -- บริษัทผู้ผลิต
batch_lot_number VARCHAR(50), -- หมายเลข lot ของยา
expiry_date DATE, -- วันหมดอายุยา
-- Dosage Information
prescribed_dose VARCHAR(100) NOT NULL, -- ขนาดยาที่สั่ง
administered_dose VARCHAR(100) NOT NULL, -- ขนาดยาที่ให้จริง
dose_unit VARCHAR(20), -- หน่วยของยา (mg, ml, tablet, etc.)
concentration VARCHAR(50), -- ความเข้มข้น
-- Route and Method
administration_route VARCHAR(50) NOT NULL CHECK (administration_route IN ('PO', 'IV', 'IM', 'SC', 'SL', 'PR', 'topical', 'inhaled', 'nasal', 'IV_push', 'IV_drip')), -- วิธีให้ยา
administration_site VARCHAR(100), -- ตำแหน่งที่ให้ยา
iv_access_type VARCHAR(50), -- ประเภท IV access
infusion_rate VARCHAR(50), -- อัตราการให้ IV (ml/hr)
infusion_duration VARCHAR(50), -- ระยะเวลาการให้ IV
-- Safety Verification
patient_identification_method VARCHAR(50) CHECK (patient_identification_method IN ('wristband', 'verbal', 'photo_id', 'biometric', 'barcode')), -- วิธียืนยันตัวผู้ป่วย
medication_verification_method VARCHAR(50) CHECK (medication_verification_method IN ('barcode', 'manual', 'rfid')), -- วิธีตรวจสอบยา
double_checked BOOLEAN DEFAULT FALSE, -- ตรวจสอบซ้ำโดยพยาบาลคนที่สองหรือไม่
high_alert_medication BOOLEAN DEFAULT FALSE, -- เป็นยาเสี่ยงสูงหรือไม่
-- Pre-administration Assessment
vital_signs_checked BOOLEAN DEFAULT FALSE, -- ตรวจ vital signs ก่อนให้ยาหรือไม่
allergy_status_verified BOOLEAN DEFAULT FALSE, -- ตรวจสอบประวัติแพ้หรือไม่
contraindications_checked BOOLEAN DEFAULT FALSE, -- ตรวจสอบข้อห้ามใช้หรือไม่
patient_consent_obtained BOOLEAN DEFAULT FALSE, -- ได้รับความยินยอมจากผู้ป่วยหรือไม่
-- Administration Status
administration_status VARCHAR(20) DEFAULT 'given' CHECK (administration_status IN ('given', 'not_given', 'held', 'refused', 'omitted', 'wasted')), -- สถานะการให้ยา
reason_not_given TEXT, -- เหตุผลที่ไม่ได้ให้ยา
patient_response VARCHAR(50), -- การตอบสนองของผู้ป่วย
adverse_reaction BOOLEAN DEFAULT FALSE, -- มีอาการไม่พึงประสงค์หรือไม่
adverse_reaction_details TEXT, -- รายละเอียดอาการไม่พึงประสงค์
-- Post-administration Monitoring
monitoring_required BOOLEAN DEFAULT FALSE, -- ต้องติดตามหลังให้ยาหรือไม่
monitoring_parameters TEXT[], -- พารามิเตอร์ที่ต้องติดตาม
next_monitoring_time TIMESTAMP WITH TIME ZONE, -- เวลาติดตามครั้งต่อไป
effectiveness_assessed BOOLEAN DEFAULT FALSE, -- ประเมินประสิทธิผลแล้วหรือไม่
effectiveness_rating INTEGER CHECK (effectiveness_rating BETWEEN 1 AND 5), -- คะแนนประสิทธิผล (1-5)
-- Waste Management
medication_wasted_amount VARCHAR(50), -- จำนวนยาที่เหลือทิ้ง
waste_witness_id UUID REFERENCES users(id), -- ผู้เป็นพยานการทิ้งยา
waste_reason TEXT, -- เหตุผลการทิ้งยา
waste_datetime TIMESTAMP WITH TIME ZONE, -- เวลาทิ้งยา
-- Pain Management Specific
pain_score_before INTEGER CHECK (pain_score_before BETWEEN 0 AND 10), -- คะแนนความเจ็บปวดก่อนให้ยา
pain_score_after INTEGER CHECK (pain_score_after BETWEEN 0 AND 10), -- คะแนนความเจ็บปวดหลังให้ยา
sedation_score INTEGER CHECK (sedation_score BETWEEN 0 AND 4), -- คะแนนระดับการหลับ
-- Documentation
administration_notes TEXT, -- บันทึกการให้ยา
special_instructions TEXT, -- คำแนะนำพิเศษ
patient_education_provided BOOLEAN DEFAULT FALSE, -- ให้ความรู้แก่ผู้ป่วยหรือไม่
education_topics TEXT[], -- หัวข้อที่ให้ความรู้
-- Quality Assurance
medication_error BOOLEAN DEFAULT FALSE, -- เกิดข้อผิดพลาดด้านยาหรือไม่
error_type VARCHAR(50), -- ประเภทข้อผิดพลาด
error_description TEXT, -- รายละเอียดข้อผิดพลาด
error_reported BOOLEAN DEFAULT FALSE, -- รายงานข้อผิดพลาดแล้วหรือไม่
corrective_action TEXT, -- มาตรการแก้ไข
-- Integration Fields
pharmacy_verified BOOLEAN DEFAULT FALSE, -- ร้านยาตรวจสอบแล้วหรือไม่
dispensed_by_pharmacy_id UUID, -- รหัสร้านยาที่จ่าย
barcode_scan_data TEXT, -- ข้อมูลจาก barcode scan
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของข้อมูลชีพจร |
er_case_id |
UUID | NOT NULL, FK | รหัสคดีห้องฉุกเฉิน |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วย |
recorded_by_user_id |
UUID | NOT NULL, FK | รหัสผู้บันทึกข้อมูล |
nursing_task_id |
UUID | FK | รหัสงานพยาบาลที่เกี่ยวข้อง (ถ้ามี) |
recorded_datetime |
TIMESTAMP | DEFAULT NOW() | วันเวลาที่บันทึกข้อมูล |
measurement_datetime |
TIMESTAMP | DEFAULT NOW() | วันเวลาที่วัดจริง |
recording_type |
VARCHAR(20) | CHECK | ประเภทการบันทึก (admission=รับไว้รักษา, routine=ปกติ, pre_procedure=ก่อนหัตถการ, post_procedure=หลังหัตถการ, discharge=จำหน่าย, emergency=ฉุกเฉิน) |
systolic_bp |
INTEGER | CHECK (50-300) | ความดันโลหิตตัวบน (มิลลิเมตรปรอท) |
diastolic_bp |
INTEGER | CHECK (20-200) | ความดันโลหิตตัวล่าง (มิลลิเมตรปรอท) |
mean_arterial_pressure |
INTEGER | ความดันโลหิตเฉลี่ย (มิลลิเมตรปรอท) | |
heart_rate |
INTEGER | CHECK (20-300) | อัตราการเต้นของหัวใจ (ครั้งต่อนาที) |
respiratory_rate |
INTEGER | CHECK (5-60) | อัตราการหายใจ (ครั้งต่อนาที) |
temperature |
DECIMAL(4,2) | CHECK (25.0-45.0) | อุณหภูมิร่างกาย (องศาเซลเซียส) |
oxygen_saturation |
INTEGER | CHECK (60-100) | ความอิ่มตัวของออกซิเจนในเลือด (เปอร์เซ็นต์) |
bp_measurement_site |
VARCHAR(30) | CHECK | ตำแหน่งที่วัดความดันโลหิต (right_arm=แขนขวา, left_arm=แขนซ้าย, right_leg=ขาขวา, left_leg=ขาซ้าย) |
bp_cuff_size |
VARCHAR(20) | CHECK | ขนาดเครื่องวัดความดัน (pediatric=เด็ก, adult=ผู้ใหญ่, large_adult=ผู้ใหญ่ตัวใหญ่) |
bp_measurement_method |
VARCHAR(20) | CHECK | วิธีการวัดความดัน (automatic=อัตโนมัติ, manual=ด้วยมือ, arterial_line=จากเส้นเลือดแดง) |
temperature_site |
VARCHAR(20) | CHECK | ตำแหน่งที่วัดอุณหภูมิ (oral=ปาก, rectal=ทวารหนัก, axillary=รักแร้, temporal=ขมับ, tympanic=หูใน, core=แกนกาย) |
temperature_method |
VARCHAR(20) | CHECK | วิธีการวัดอุณหภูมิ (digital=ดิจิทัล, infrared=อินฟราเรด, glass=แก้ว, probe=probe) |
pulse_rhythm |
VARCHAR(20) | CHECK | จังหวะการเต้นของชีพจร (regular=สม่ำเสมอ, irregular=ไม่สม่ำเสมอ) |
pulse_strength |
VARCHAR(20) | CHECK | ความแรงของชีพจร (weak=อ่อน, normal=ปกติ, bounding=แรง) |
pulse_site |
VARCHAR(20) | CHECK | ตำแหน่งที่จับชีพจร (radial=ข้อมือ, apical=ปลายหัวใจ, carotid=คอ, femoral=ขาหนีบ) |
respiratory_pattern |
VARCHAR(30) | CHECK | รูปแบบการหายใจ (normal=ปกติ, shallow=ตื้น, deep=ลึก, labored=หนัก, irregular=ไม่สม่ำเสมอ) |
respiratory_effort |
VARCHAR(20) | CHECK | ความพยายามในการหายใจ (normal=ปกติ, mild=เล็กน้อย, moderate=ปานกลาง, severe=มาก) |
oxygen_delivery |
VARCHAR(30) | CHECK | วิธีการให้ออกซิเจน (room_air=อากาศธรรมดา, nasal_cannula=สายจมูก, face_mask=หน้ากาก, non_rebreather=หน้ากากไม่ดูดกลับ, intubated=ใส่ท่อลม) |
oxygen_flow_rate |
DECIMAL(4,1) | อัตราการไหลของออกซิเจน (ลิตรต่อนาที) | |
fio2_percentage |
INTEGER | CHECK (21-100) | เปอร์เซ็นต์ออกซิเจนที่ให้ |
weight_kg |
DECIMAL(5,2) | CHECK (0.5-500.0) | น้ำหนักตัว (กิโลกรัม) |
height_cm |
DECIMAL(5,1) | CHECK (30.0-250.0) | ส่วนสูง (เซนติเมตร) |
bmi |
DECIMAL(4,1) | CHECK (10.0-60.0) | ดัชนีมวลกาย (BMI) |
head_circumference_cm |
DECIMAL(4,1) | เส้นรอบวงศีรษะ (เซนติเมตร) | |
pain_score |
INTEGER | CHECK (0-10) | คะแนนความเจ็บปวด (0=ไม่เจ็บ, 10=เจ็บมากที่สุด) |
pain_location |
TEXT | ตำแหน่งที่เจ็บปวด | |
pain_character |
VARCHAR(100) | ลักษณะความเจ็บปวด (แสบ, ปวดแปลบ, ปวดจี๊ด, ปวดกดทับ) | |
pain_scale_used |
VARCHAR(20) | CHECK | สเกลที่ใช้ประเมินความเจ็บปวด (numeric=ตัวเลข, faces=หน้า, behavioral=พฤติกรรม, verbal=คำพูด) |
consciousness_level |
VARCHAR(20) | CHECK | ระดับความรู้สึกตัว (alert=รู้สึกตัวดี, confused=สับสน, lethargic=ง่วงนอน, stuporous=มึนงง, comatose=โคม่า) |
glasgow_coma_scale |
INTEGER | CHECK (3-15) | คะแนน GCS รวม |
gcs_eye |
INTEGER | CHECK (1-4) | GCS การลืมตา (1=ไม่ลืมตา, 4=ลืมตาเอง) |
gcs_verbal |
INTEGER | CHECK (1-5) | GCS การตอบสนองต่อเสียง (1=ไม่ตอบ, 5=ตอบได้ดี) |
gcs_motor |
INTEGER | CHECK (1-6) | GCS การเคลื่อนไหว (1=ไม่เคลื่อนไหว, 6=เคลื่อนไหวตามคำสั่ง) |
pupil_size_right |
DECIMAL(3,1) | ขนาดม่านตาขวา (มิลลิเมตร) | |
pupil_size_left |
DECIMAL(3,1) | ขนาดม่านตาซ้าย (มิลลิเมตร) | |
pupil_reaction_right |
VARCHAR(20) | CHECK | การตอบสนองของม่านตาขวา (brisk=เร็ว, sluggish=ช้า, fixed=ตาย, not_assessed=ไม่ได้ประเมิน) |
pupil_reaction_left |
VARCHAR(20) | CHECK | การตอบสนองของม่านตาซ้าย (brisk=เร็ว, sluggish=ช้า, fixed=ตาย, not_assessed=ไม่ได้ประเมิน) |
skin_color |
VARCHAR(20) | CHECK | สีผิวหนัง (normal=ปกติ, pale=ซีด, flushed=แดง, cyanotic=เขียว, jaundiced=เหลือง, mottled=ด่างดำ) |
skin_temperature |
VARCHAR(20) | CHECK | อุณหภูมิผิวหนัง (normal=ปกติ, warm=อุ่น, cool=เย็น, hot=ร้อน, cold=หนาว) |
skin_moisture |
VARCHAR(20) | CHECK | ความชื้นผิวหนัง (normal=ปกติ, dry=แห้ง, moist=ชื้น, diaphoretic=เหงื่อออกเยอะ) |
capillary_refill_seconds |
DECIMAL(3,1) | เวลาที่เลือดไหลกลับเข้าเล็บ (วินาที) | |
patient_position |
VARCHAR(30) | CHECK | ท่าทางผู้ป่วย (supine=นอนหงาย, prone=นอนคว่ำ, side_lying=นอนตะแคง, fowlers=นั่งเอนหลัง, sitting=นั่ง, standing=ยืน) |
mobility_level |
VARCHAR(30) | CHECK | ระดับการเคลื่อนไหว (ambulatory=เดินได้, wheelchair=ใช้รถเข็น, bedbound=นอนติดเตียง, immobile=เคลื่อนไหวไม่ได้) |
measurement_accuracy |
VARCHAR(20) | CHECK | ความแม่นยำของการวัด (accurate=แม่นยำ, estimated=ประมาณ, unable_to_obtain=วัดไม่ได้) |
patient_cooperation |
VARCHAR(20) | CHECK | ความร่วมมือของผู้ป่วย (cooperative=ร่วมมือ, partial=ร่วมมือบางส่วน, uncooperative=ไม่ร่วมมือ, unable=ไม่สามารถ) |
measurement_difficulty |
VARCHAR(20) | CHECK | ความยากในการวัด (easy=ง่าย, moderate=ปานกลาง, difficult=ยาก, unable=วัดไม่ได้) |
abnormal_values |
BOOLEAN | DEFAULT FALSE | มีค่าผิดปกติหรือไม่ |
critical_values |
BOOLEAN | DEFAULT FALSE | มีค่าวิกฤตหรือไม่ |
physician_notified |
BOOLEAN | DEFAULT FALSE | แจ้งแพทย์ค่าผิดปกติแล้วหรือไม่ |
intervention_required |
BOOLEAN | DEFAULT FALSE | ต้องการการรักษาเร่งด่วนหรือไม่ |
clinical_notes |
TEXT | บันทึกทางคลินิก | |
measurement_comments |
TEXT | ข้อสังเกตจากการวัด | |
patient_complaints |
TEXT | ข้อร้องเรียนของผู้ป่วย | |
equipment_used |
VARCHAR(100) | อุปกรณ์ที่ใช้ในการวัด | |
equipment_serial_number |
VARCHAR(50) | หมายเลขเครื่องมือ | |
last_calibrated_date |
DATE | วันที่ calibrate เครื่องมือล่าสุด |
6. ตาราง er_nursing_tasks
ตารางสำหรับจัดการงานของพยาบาลในห้องฉุกเฉิน (Nursing Task Management from CPOE)
CREATE TABLE er_nursing_tasks (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
order_id UUID REFERENCES er_orders(id), -- รหัสคำสั่งแพทย์ที่เกี่ยวข้อง
assigned_nurse_id UUID REFERENCES users(id), -- รหัสพยาบาลที่รับผิดชอบ
created_by_user_id UUID NOT NULL REFERENCES users(id), -- รหัสผู้สร้างงาน
-- Task Information
task_number VARCHAR(20) UNIQUE NOT NULL, -- หมายเลขงานที่ระบบสร้างอัตโนมัติ
task_type VARCHAR(30) NOT NULL CHECK (task_type IN ('assessment', 'medication', 'procedure', 'monitoring', 'transport', 'specimen_collection', 'patient_care', 'documentation', 'education', 'discharge_prep')), -- ประเภทงานพยาบาล
task_category VARCHAR(50), -- หมวดหมู่ย่อยของงาน
task_priority VARCHAR(20) DEFAULT 'routine' CHECK (task_priority IN ('critical', 'urgent', 'routine', 'low')), -- ระดับความสำคัญของงาน
-- Task Details
task_title VARCHAR(200) NOT NULL, -- หัวข้องาน
task_description TEXT NOT NULL, -- รายละเอียดงาน
task_instructions TEXT, -- คำแนะนำในการทำงาน
special_requirements TEXT, -- ข้อกำหนดพิเศษ
-- Assessment Specific
assessment_type VARCHAR(50), -- ประเภทการประเมิน (vital_signs, neurologic, pain, wound)
assessment_frequency VARCHAR(50), -- ความถี่ในการประเมิน (q15min, q30min, q1h, q4h)
assessment_parameters TEXT[], -- พารามิเตอร์ที่ต้องประเมิน
-- Medication Specific
medication_task_type VARCHAR(30) CHECK (medication_task_type IN ('administration', 'monitoring', 'education', 'side_effect_watch')), -- ประเภทงานเกี่ยวกับยา
medication_name VARCHAR(200), -- ชื่อยาที่เกี่ยวข้อง
-- Procedure Specific
procedure_name VARCHAR(200), -- ชื่อหัตถการ
procedure_location VARCHAR(100), -- สถานที่ทำหัตถการ
equipment_needed TEXT[], -- อุปกรณ์ที่จำเป็น
assistance_required BOOLEAN DEFAULT FALSE, -- ต้องการความช่วยเหลือหรือไม่
-- Specimen Collection
specimen_type VARCHAR(50), -- ประเภทตัวอย่าง
collection_method VARCHAR(100), -- วิธีการเก็บตัวอย่าง
collection_container VARCHAR(50), -- ภาชนะเก็บตัวอย่าง
special_handling TEXT, -- วิธีการดูแลตัวอย่างพิเศษ
-- Transport Related
transport_destination VARCHAR(100), -- จุดหมายการขนส่ง
transport_method VARCHAR(50), -- วิธีการขนส่ง (wheelchair, stretcher, walking)
escort_required BOOLEAN DEFAULT FALSE, -- ต้องการผู้คุ้มกันหรือไม่
special_precautions TEXT, -- ข้อควรระวังพิเศษ
-- Timing Information
created_datetime TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างงาน
scheduled_start_time TIMESTAMP WITH TIME ZONE, -- เวลาที่กำหนดให้เริ่มงาน
due_datetime TIMESTAMP WITH TIME ZONE, -- เวลาที่ต้องเสร็จ
started_at TIMESTAMP WITH TIME ZONE, -- เวลาที่เริ่มทำงานจริง
completed_at TIMESTAMP WITH TIME ZONE, -- เวลาที่เสร็จงาน
-- Status Information
task_status VARCHAR(20) DEFAULT 'pending' CHECK (task_status IN ('pending', 'assigned', 'in_progress', 'completed', 'cancelled', 'on_hold', 'overdue')), -- สถานะงาน
completion_status VARCHAR(20) CHECK (completion_status IN ('successful', 'partial', 'unsuccessful', 'deferred')), -- สถานะการเสร็จสิ้น
-- Results and Documentation
task_results TEXT, -- ผลการทำงาน
observations TEXT, -- ข้อสังเกต
complications TEXT, -- ภาวะแทรกซ้อน
follow_up_required BOOLEAN DEFAULT FALSE, -- ต้องติดตามต่อหรือไม่
follow_up_instructions TEXT, -- คำแนะนำการติดตาม
-- Quality Metrics
completion_time_minutes INTEGER, -- เวลาที่ใช้ในการทำงาน (นาที)
delay_minutes INTEGER, -- เวลาล่าช้า (นาที)
delay_reason TEXT, -- เหตุผลความล่าช้า
quality_score INTEGER CHECK (quality_score BETWEEN 1 AND 5), -- คะแนนคุณภาพการทำงาน
-- Patient Safety
safety_checks_completed BOOLEAN DEFAULT FALSE, -- ตรวจสอบความปลอดภัยแล้วหรือไม่
patient_identification_verified BOOLEAN DEFAULT FALSE, -- ยืนยันตัวผู้ป่วยแล้วหรือไม่
allergies_checked BOOLEAN DEFAULT FALSE, -- ตรวจสอบประวัติแพ้แล้วหรือไม่
consent_obtained BOOLEAN DEFAULT FALSE, -- ได้รับความยินยอมแล้วหรือไม่
-- Communication
physician_notified BOOLEAN DEFAULT FALSE, -- แจ้งแพทย์แล้วหรือไม่
family_notified BOOLEAN DEFAULT FALSE, -- แจ้งญาติแล้วหรือไม่
interdisciplinary_communication TEXT, -- การสื่อสารระหว่างสหวิชาชีพ
-- Recurring Tasks
is_recurring BOOLEAN DEFAULT FALSE, -- เป็นงานที่ต้องทำซ้ำหรือไม่
recurrence_pattern VARCHAR(50), -- รูปแบบการทำซ้ำ (daily, q4h, q8h)
parent_recurring_task_id UUID REFERENCES er_nursing_tasks(id), -- งานหลักที่เป็นต้นแบบ
sequence_number INTEGER, -- ลำดับในชุดงานซ้ำ
-- Digital Documentation
photos_attached TEXT[], -- รูปภาพที่แนบ
documents_attached TEXT[], -- เอกสารที่แนบ
digital_signature TEXT, -- ลายเซ็นอิเล็กทรอนิกส์
signed_at TIMESTAMP WITH TIME ZONE, -- เวลาที่ลงลายเซ็น
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);
คำอธิบายฟิลด์ (Field Descriptions):
| Field | Type | Constraints | คำอธิบาย |
|---|---|---|---|
id |
UUID | PRIMARY KEY | รหัสเฉพาะของงานพยาบาล |
er_case_id |
UUID | NOT NULL, FK | รหัสคดีห้องฉุกเฉิน |
patient_id |
UUID | NOT NULL, FK | รหัสผู้ป่วย |
order_id |
UUID | FK | รหัสคำสั่งแพทย์ที่เกี่ยวข้อง (ถ้ามี) |
assigned_nurse_id |
UUID | FK | รหัสพยาบาลที่รับผิดชอบงานนี้ |
created_by_user_id |
UUID | NOT NULL, FK | รหัสผู้ใช้ที่สร้างงาน |
task_number |
VARCHAR(20) | UNIQUE, NOT NULL | หมายเลขงานที่ระบบสร้างอัตโนมัติ |
task_type |
VARCHAR(30) | NOT NULL, CHECK | ประเภทงาน (assessment=ประเมิน, medication=ยา, procedure=หัตถการ, monitoring=ติดตาม, transport=ขนส่ง, specimen_collection=เก็บตัวอย่าง, patient_care=ดูแลผู้ป่วย, documentation=บันทึก, education=ให้ความรู้, discharge_prep=เตรียมจำหน่าย) |
task_category |
VARCHAR(50) | หมวดหมู่ย่อยของงาน | |
task_priority |
VARCHAR(20) | CHECK | ระดับความสำคัญ (critical=วิกฤต, urgent=เร่งด่วน, routine=ปกติ, low=ต่ำ) |
task_title |
VARCHAR(200) | NOT NULL | หัวข้องาน |
task_description |
TEXT | NOT NULL | รายละเอียดงานที่ต้องทำ |
task_instructions |
TEXT | คำแนะนำในการทำงาน | |
special_requirements |
TEXT | ข้อกำหนดพิเศษหรือข้อควรระวัง | |
assessment_type |
VARCHAR(50) | ประเภทการประเมิน (vital_signs=วัดชีพจร, neurologic=ระบบประสาท, pain=ความปวด, wound=แผล) | |
assessment_frequency |
VARCHAR(50) | ความถี่ในการประเมิน (q15min=ทุก15นาที, q30min=ทุก30นาที, q1h=ทุก1ชั่วโมง) | |
assessment_parameters |
TEXT[] | รายการพารามิเตอร์ที่ต้องประเมิน | |
medication_task_type |
VARCHAR(30) | CHECK | ประเภทงานเกี่ยวกับยา |
medication_name |
VARCHAR(200) | ชื่อยาที่เกี่ยวข้องกับงาน | |
procedure_name |
VARCHAR(200) | ชื่อหัตถการที่ต้องทำ | |
procedure_location |
VARCHAR(100) | สถานที่ทำหัตถการ | |
equipment_needed |
TEXT[] | รายการอุปกรณ์ที่จำเป็น | |
assistance_required |
BOOLEAN | DEFAULT FALSE | ต้องการความช่วยเหลือจากผู้อื่นหรือไม่ |
specimen_type |
VARCHAR(50) | ประเภทตัวอย่างที่ต้องเก็บ | |
collection_method |
VARCHAR(100) | วิธีการเก็บตัวอย่าง | |
collection_container |
VARCHAR(50) | ภาชนะเก็บตัวอย่าง | |
special_handling |
TEXT | วิธีการดูแลตัวอย่างพิเศษ | |
transport_destination |
VARCHAR(100) | จุดหมายปลายทางการขนส่งผู้ป่วย | |
transport_method |
VARCHAR(50) | วิธีการขนส่ง (wheelchair=รถเข็น, stretcher=เปล, walking=เดิน) | |
escort_required |
BOOLEAN | DEFAULT FALSE | ต้องการผู้คุ้มกันหรือไม่ |
special_precautions |
TEXT | ข้อควรระวังพิเศษในการขนส่ง | |
created_datetime |
TIMESTAMP | DEFAULT NOW() | วันเวลาที่สร้างงาน |
scheduled_start_time |
TIMESTAMP | เวลาที่กำหนดให้เริ่มงาน | |
due_datetime |
TIMESTAMP | วันเวลาที่งานต้องเสร็จ | |
started_at |
TIMESTAMP | เวลาที่เริ่มทำงานจริง | |
completed_at |
TIMESTAMP | เวลาที่เสร็จสิ้นงาน | |
task_status |
VARCHAR(20) | CHECK | สถานะงาน (pending=รอ, assigned=มอบหมายแล้ว, in_progress=กำลังทำ, completed=เสร็จ, cancelled=ยกเลิก, on_hold=พัก, overdue=เกินกำหนด) |
completion_status |
VARCHAR(20) | CHECK | สถานะการเสร็จสิ้น (successful=สำเร็จ, partial=บางส่วน, unsuccessful=ไม่สำเร็จ, deferred=เลื่อน) |
task_results |
TEXT | ผลการทำงาน | |
observations |
TEXT | ข้อสังเกตจากการทำงาน | |
complications |
TEXT | ภาวะแทรกซ้อนที่เกิดขึ้น | |
follow_up_required |
BOOLEAN | DEFAULT FALSE | ต้องติดตามผลต่อหรือไม่ |
follow_up_instructions |
TEXT | คำแนะนำการติดตาม | |
completion_time_minutes |
INTEGER | เวลาที่ใช้ในการทำงาน (นาที) | |
delay_minutes |
INTEGER | เวลาล่าช้าจากที่กำหนด (นาที) | |
delay_reason |
TEXT | เหตุผลที่ทำงานล่าช้า | |
quality_score |
INTEGER | CHECK (1-5) | คะแนนคุณภาพการทำงาน (1=แย่, 5=ดีเยี่ยม) |
safety_checks_completed |
BOOLEAN | DEFAULT FALSE | ทำการตรวจสอบความปลอดภัยแล้วหรือไม่ |
patient_identification_verified |
BOOLEAN | DEFAULT FALSE | ยืนยันตัวผู้ป่วยแล้วหรือไม่ |
allergies_checked |
BOOLEAN | DEFAULT FALSE | ตรวจสอบประวัติแพ้แล้วหรือไม่ |
consent_obtained |
BOOLEAN | DEFAULT FALSE | ได้รับความยินยอมจากผู้ป่วยแล้วหรือไม่ |
physician_notified |
BOOLEAN | DEFAULT FALSE | แจ้งแพทย์ผลการทำงานแล้วหรือไม่ |
family_notified |
BOOLEAN | DEFAULT FALSE | แจ้งญาติผู้ป่วยแล้วหรือไม่ |
interdisciplinary_communication |
TEXT | การสื่อสารกับทีมสหวิชาชีพ | |
is_recurring |
BOOLEAN | DEFAULT FALSE | เป็นงานที่ต้องทำซ้ำตามเวลาหรือไม่ |
recurrence_pattern |
VARCHAR(50) | รูปแบบการทำซ้ำ (daily=ทุกวัน, q4h=ทุก4ชั่วโมง, q8h=ทุก8ชั่วโมง) | |
parent_recurring_task_id |
UUID | FK | งานหลักที่เป็นต้นแบบสำหรับงานซ้ำ |
sequence_number |
INTEGER | ลำดับที่ในชุดงานที่ทำซ้ำ | |
photos_attached |
TEXT[] | รูปภาพที่แนบประกอบงาน | |
documents_attached |
TEXT[] | เอกสารที่แนบประกอบงาน | |
digital_signature |
TEXT | ลายเซ็นอิเล็กทรอนิกส์ของผู้ทำงาน | |
signed_at |
TIMESTAMP | วันเวลาที่ลงลายเซ็น |
7. ตาราง er_vital_signs
ตารางสำหรับบันทึกข้อมูลชีพจรและอาการสำคัญของผู้ป่วยห้องฉุกเฉิน
CREATE TABLE er_vital_signs (
-- Primary Key
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Foreign Keys
er_case_id UUID NOT NULL REFERENCES er_cases(id), -- รหัสคดีห้องฉุกเฉิน
patient_id UUID NOT NULL REFERENCES patients(id), -- รหัสผู้ป่วย
recorded_by_user_id UUID NOT NULL REFERENCES users(id), -- รหัสผู้บันทึก
nursing_task_id UUID REFERENCES er_nursing_tasks(id), -- รหัสงานพยาบาลที่เกี่ยวข้อง
-- Recording Information
recorded_datetime TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่บันทึก
measurement_datetime TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่วัดจริง
recording_type VARCHAR(20) DEFAULT 'routine' CHECK (recording_type IN ('admission', 'routine', 'pre_procedure', 'post_procedure', 'discharge', 'emergency')), -- ประเภทการบันทึก
-- Basic Vital Signs
systolic_bp INTEGER CHECK (systolic_bp BETWEEN 50 AND 300), -- ความดันโลหิตตัวบน (mmHg)
diastolic_bp INTEGER CHECK (diastolic_bp BETWEEN 20 AND 200), -- ความดันโลหิตตัวล่าง (mmHg)
mean_arterial_pressure INTEGER, -- ความดันโลหิตเฉลี่ย (mmHg)
heart_rate INTEGER CHECK (heart_rate BETWEEN 20 AND 300), -- อัตราการเต้นของหัวใจ (ครั้งต่อนาที)
respiratory_rate INTEGER CHECK (respiratory_rate BETWEEN 5 AND 60), -- อัตราการหายใจ (ครั้งต่อนาที)
temperature DECIMAL(4,2) CHECK (temperature BETWEEN 25.0 AND 45.0), -- อุณหภูมิร่างกาย (องศาเซลเซียส)
oxygen_saturation INTEGER CHECK (oxygen_saturation BETWEEN 60 AND 100), -- ความอิ่มตัวของออกซิเจนในเลือด (%)
-- Blood Pressure Details
bp_measurement_site VARCHAR(30) CHECK (bp_measurement_site IN ('right_arm', 'left_arm', 'right_leg', 'left_leg')), -- ตำแหน่งที่วัดความดันโลหิต
bp_cuff_size VARCHAR(20) CHECK (bp_cuff_size IN ('pediatric', 'small_adult', 'adult', 'large_adult', 'thigh')), -- ขนาด blood pressure cuff
bp_measurement_method VARCHAR(20) CHECK (bp_measurement_method IN ('automatic', 'manual', 'arterial_line')), -- วิธีการวัดความดันโลหิต
-- Temperature Details
temperature_site VARCHAR(20) CHECK (temperature_site IN ('oral', 'rectal', 'axillary', 'temporal', 'tympanic', 'core')), -- ตำแหน่งที่วัดอุณหภูมิ
temperature_method VARCHAR(20) CHECK (temperature_method IN ('digital', 'infrared', 'glass', 'probe')), -- วิธีการวัดอุณหภูมิ
-- Heart Rate Details
pulse_rhythm VARCHAR(20) CHECK (pulse_rhythm IN ('regular', 'irregular', 'regularly_irregular', 'irregularly_irregular')), -- จังหวะการเต้นของชีพจร
pulse_strength VARCHAR(20) CHECK (pulse_strength IN ('weak', 'thready', 'normal', 'bounding')), -- ความแรงของชีพจร
pulse_site VARCHAR(20) CHECK (pulse_site IN ('radial', 'apical', 'carotid', 'femoral', 'pedal', 'monitor')), -- ตำแหน่งที่จับชีพจร
-- Respiratory Details
respiratory_pattern VARCHAR(30) CHECK (respiratory_pattern IN ('normal', 'shallow', 'deep', 'labored', 'irregular', 'cheyne_stokes', 'kussmaul')), -- รูปแบบการหายใจ
respiratory_effort VARCHAR(20) CHECK (respiratory_effort IN ('normal', 'mild', 'moderate', 'severe')), -- ความพยายามในการหายใจ
oxygen_delivery VARCHAR(30) CHECK (oxygen_delivery IN ('room_air', 'nasal_cannula', 'face_mask', 'non_rebreather', 'bag_mask', 'intubated')), -- วิธีการให้ออกซิเจน
oxygen_flow_rate DECIMAL(4,1), -- อัตราการไหลของออกซิเจน (L/min)
fio2_percentage INTEGER CHECK (fio2_percentage BETWEEN 21 AND 100), -- เปอร์เซ็นต์ออกซิเจน
-- Additional Measurements
weight_kg DECIMAL(5,2) CHECK (weight_kg BETWEEN 0.5 AND 500.0), -- น้ำหนัก (กิโลกรัม)
height_cm DECIMAL(5,1) CHECK (height_cm BETWEEN 30.0 AND 250.0), -- ส่วนสูง (เซนติเมตร)
bmi DECIMAL(4,1) CHECK (bmi BETWEEN 10.0 AND 60.0), -- ดัชนีมวลกาย
head_circumference_cm DECIMAL(4,1), -- เส้นรอบวงศีรษะ (เซนติเมตร)
-- Pain Assessment
pain_score INTEGER CHECK (pain_score BETWEEN 0 AND 10), -- คะแนนความเจ็บปวด (0-10)
pain_location TEXT, -- ตำแหน่งที่เจ็บปวด
pain_character VARCHAR(100), -- ลักษณะความเจ็บปวด
pain_scale_used VARCHAR(20) CHECK (pain_scale_used IN ('numeric', 'faces', 'behavioral', 'verbal')), -- สเกลที่ใช้ประเมินความเจ็บปวด
-- Neurological Assessments
consciousness_level VARCHAR(20) CHECK (consciousness_level IN ('alert', 'confused', 'lethargic', 'stuporous', 'comatose')), -- ระดับความรู้สึกตัว
glasgow_coma_scale INTEGER CHECK (glasgow_coma_scale BETWEEN 3 AND 15), -- คะแนน GCS รวม
gcs_eye INTEGER CHECK (gcs_eye BETWEEN 1 AND 4), -- GCS การลืมตา
gcs_verbal INTEGER CHECK (gcs_verbal BETWEEN 1 AND 5), -- GCS การตอบสนองต่อเสียง
gcs_motor INTEGER CHECK (gcs_motor BETWEEN 1 AND 6), -- GCS การเคลื่อนไหว
pupil_size_right DECIMAL(3,1), -- ขนาดม่านตาขวา (มิลลิเมตร)
pupil_size_left DECIMAL(3,1), -- ขนาดม่านตาซ้าย (มิลลิเมตร)
pupil_reaction_right VARCHAR(20) CHECK (pupil_reaction_right IN ('brisk', 'sluggish', 'fixed', 'not_assessed')), -- การตอบสนองของม่านตาขวา
pupil_reaction_left VARCHAR(20) CHECK (pupil_reaction_left IN ('brisk', 'sluggish', 'fixed', 'not_assessed')), -- การตอบสนองของม่านตาซ้าย
-- Skin Assessment
skin_color VARCHAR(20) CHECK (skin_color IN ('normal', 'pale', 'flushed', 'cyanotic', 'jaundiced', 'mottled')), -- สีผิวหนัง
skin_temperature VARCHAR(20) CHECK (skin_temperature IN ('normal', 'warm', 'cool', 'hot', 'cold')), -- อุณหภูมิผิวหนัง
skin_moisture VARCHAR(20) CHECK (skin_moisture IN ('normal', 'dry', 'moist', 'diaphoretic')), -- ความชื้นผิวหนัง
capillary_refill_seconds DECIMAL(3,1), -- เวลาที่เลือดไหลกลับเข้าเล็บ (วินาที)
-- Position and Mobility
patient_position VARCHAR(30) CHECK (patient_position IN ('supine', 'prone', 'side_lying', 'fowlers', 'semi_fowlers', 'trendelenburg', 'sitting', 'standing')), -- ท่าทางผู้ป่วย
mobility_level VARCHAR(30) CHECK (mobility_level IN ('ambulatory', 'ambulatory_assist', 'wheelchair', 'bedbound', 'immobile')), -- ระดับการเคลื่อนไหว
-- Quality Indicators
measurement_accuracy VARCHAR(20) CHECK (measurement_accuracy IN ('accurate', 'estimated', 'unable_to_obtain')), -- ความแม่นยำของการวัด
patient_cooperation VARCHAR(20) CHECK (patient_cooperation IN ('cooperative', 'partial', 'uncooperative', 'unable')), -- ความร่วมมือของผู้ป่วย
measurement_difficulty VARCHAR(20) CHECK (measurement_difficulty IN ('easy', 'moderate', 'difficult', 'unable')), -- ความยากในการวัด
-- Clinical Significance
abnormal_values BOOLEAN DEFAULT FALSE, -- มีค่าผิดปกติหรือไม่
critical_values BOOLEAN DEFAULT FALSE, -- มีค่าวิกฤตหรือไม่
physician_notified BOOLEAN DEFAULT FALSE, -- แจ้งแพทย์แล้วหรือไม่
intervention_required BOOLEAN DEFAULT FALSE, -- ต้องการการรักษาเร่งด่วนหรือไม่
-- Notes and Comments
clinical_notes TEXT, -- บันทึกทางคลินิก
measurement_comments TEXT, -- ข้อสังเกตจากการวัด
patient_complaints TEXT, -- ข้อร้องเรียนของผู้ป่วย
-- Equipment and Calibration
equipment_used VARCHAR(100), -- อุปกรณ์ที่ใช้วัด
equipment_serial_number VARCHAR(50), -- หมายเลขเครื่องมือ
last_calibrated_date DATE, -- วันที่ calibrate เครื่องมือล่าสุด
-- Audit Fields
is_active BOOLEAN DEFAULT TRUE, -- สถานะการใช้งานข้อมูล
is_deleted BOOLEAN DEFAULT FALSE, -- สถานะการลบข้อมูล
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่สร้างข้อมูล
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- วันเวลาที่แก้ไขข้อมูลล่าสุด
created_by UUID REFERENCES users(id), -- ผู้สร้างข้อมูล
updated_by UUID REFERENCES users(id) -- ผู้แก้ไขข้อมูลล่าสุด
);