ข้ามไปที่เนื้อหา

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

  1. ตาราง er_cases
  2. ตาราง er_triage
  3. ตาราง er_clinical_notes
  4. ตาราง er_orders
  5. ตาราง er_medication_administration
  6. ตาราง er_nursing_tasks
  7. ตาราง er_vital_signs
  8. ตาราง er_accident_cases
  9. ตาราง er_beds
  10. ตาราง er_queue_status
  11. ตาราง er_lab_results
  12. ตาราง er_radiology_results
  13. ตาราง er_discharge
  14. ตาราง er_statistics_daily

SHARED FOUNDATION TABLES (จาก Master Schema)

หมายเหตุ: ตารางหลักเหล่านี้ถูกกำหนดใน MASTER_DATABASE_SCHEMA.md และใช้ร่วมกันทุกโมดูล

Foundation Tables ที่ใช้ร่วมกัน:

  1. patients - ข้อมูลผู้ป่วยหลัก (Master Patient Index)
  2. users - บุคลากรทางการแพทย์และพยาบาล (รวม ER staff, doctors, nurses)
  3. medical_visits - ข้อมูลการมารับบริการ (Emergency visits)
  4. departments - โครงสร้างแผนกโรงพยาบาล (รวมแผนกฉุกเฉิน)
  5. clinics - คลินิกต่างๆ ภายในแผนก (รวม ER zones)
  6. appointments - ระบบนัดหมายหลัก (สำหรับ follow-up appointments)
  7. queues - ระบบคิวหลัก (integrated กับ ER queue management)
  8. medical_orders - คำสั่งทางการแพทย์จากระบบ CPOE (ER orders)
  9. audit_logs - บันทึกการตรวจสอบสำหรับ compliance
  10. digital_signatures - ลายเซ็นอิเล็กทรอนิกส์สำหรับเอกสารทางการแพทย์
  11. notifications - ระบบแจ้งเตือนแบบ Multi-channel
  12. roles และ permissions - ระบบ RBAC สำหรับ ER staff permissions

Emergency Room Specific Integration Points: - การเชื่อมโยงกับ queues table สำหรับ 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 results

Benefits: - ไม่มีการสร้างตารางซ้ำซ้อน - ข้อมูลสอดคล้องกันระหว่าง 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) -- ผู้แก้ไขข้อมูลล่าสุด
);

[{"content": "Create comprehensive Emergency Room schema.md file", "activeForm": "Creating comprehensive Emergency Room schema.md file", "status": "completed"}, {"content": "Add detailed field descriptions for all 14 ER tables with Thai/English explanations", "activeForm": "Adding detailed field descriptions for all 14 ER tables with Thai/English explanations", "status": "in_progress"}, {"content": "Include business rules, indexes, and constraints following Medical Records pattern", "activeForm": "Including business rules, indexes, and constraints following Medical Records pattern", "status": "pending"}, {"content": "Ensure medical accuracy and integration with MediTech HIS Master Schema", "activeForm": "Ensuring medical accuracy and integration with MediTech HIS Master Schema", "status": "pending"}]