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

Database Schema Design

ระบบรังสีวิทยา (Radiology Information System)

โรงพยาบาลค่ายธนรัชน์


เอกสารเลขที่: SRS-1.2.8-SCHEMA
เวอร์ชัน: 1.0
วันที่: 23 ตุลาคม 2568
ผู้จัดทำ: ทีมพัฒนาระบบ
ผู้อนุมัติ: ผู้อำนวยการโรงพยาบาลค่ายธนรัชน์


Database Schema Design

ER Diagram: รายละเอียด Entity-Relationship Diagram และความสัมพันธ์ระหว่างตารางแบบละเอียด ดูได้ในไฟล์ ER Diagram.md

ระบบรังสีวิทยาเป็นระบบที่ทำหน้าที่เป็นศูนย์กลางการจัดการงานห้องเอกซเรย์ รองรับการสั่งตรวจ การรายงานผล การจัดการฟิล์ม และการออก XN โดยเชื่อมโยงกับระบบอื่นผ่าน API Integration:

  • ระบบเวชระเบียน (1.2.1): ข้อมูลผู้ป่วยหลักและ Visit
  • ระบบซักประวัติ (1.2.2): การสั่งตรวจจากการซักประวัติ
  • ระบบห้องตรวจแพทย์ (1.2.3): การสั่งตรวจจากห้องตรวจ
  • ระบบห้องฉุกเฉิน (1.2.4): การสั่งตรวจแบบ STAT จากห้องฉุกเฉิน
  • ระบบนัดหมายและตารางเวรแพทย์ (1.2.6): การสั่งตรวจล่วงหน้าตามนัด
  • ระบบงานชันสูตร (1.2.7): การทำงานร่วมกันในการตรวจวินิจฉัย
  • ระบบตรวจสอบสิทธิ (1.2.15): การตรวจสอบสิทธิสำหรับการตรวจรังสี
  • ระบบการเงิน (1.2.14): การคำนวณค่าบริการตรวจรังสี
  • ระบบผู้ดูแลระบบ (1.2.21): การจัดการข้อมูลพื้นฐานและตั้งค่า

8.2.8 ตารางหลัก (Core Tables)

หมายเหตุ: ตาราง PATIENT, VISIT จะอยู่ในระบบเวชระเบียน (1.2.1) ระบบรังสีวิทยาจะอ้างอิงผ่าน Foreign Key เท่านั้น

8.2.8.1 ข้อมูลพื้นฐาน (Master Data)

Table: RADIOLOGY_TEST_MASTER (ข้อมูลรายการตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลรายการตรวจรังสีทั้งหมด รวมถึงค่าบริการ การใช้ฟิล์ม และการตั้งค่าต่างๆ ตาม TOR ข้อ 1.2.8.1.1

Field Type Key Description
XRayCode VARCHAR(20) PK รหัสรายการตรวจรังสี
XRayName NVARCHAR(200) ชื่อรายการตรวจ
XRayNameEng NVARCHAR(200) ชื่อรายการตรวจ (อังกฤษ)
XRayNameShort NVARCHAR(50) ชื่อรายการตรวจ (ย่อ)
CategoryCode VARCHAR(10) FK รหัสหมวดการตรวจ (อ้างอิง RADIOLOGY_CATEGORY)
GroupCode VARCHAR(10) FK รหัสกลุ่มการตรวจ (อ้างอิง RADIOLOGY_GROUP)
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง (อ้างอิง MODALITY_TYPE)
BodyPartCode VARCHAR(10) FK รหัสส่วนของร่างกาย (อ้างอิง BODY_PART)
ServiceCost DECIMAL(10,2) อัตราค่าบริการ
ChargingMethod ENUM('PER_FILM','PER_PROCEDURE','PER_VIEW') รูปแบบการคิดค่าบริการ (ตาม TOR ข้อ 1.2.8.1.3)
FilmRequired BIT ต้องใช้ฟิล์ม
DefaultFilmSize VARCHAR(10) ขนาดฟิล์มมาตรฐาน
DefaultFilmQty INT จำนวนฟิล์มมาตรฐาน
DefaultViewCount INT จำนวน View มาตรฐาน
TAT_Normal INT เวลาออกผลปกติ (นาที)
TAT_STAT INT เวลาออกผล STAT (นาที)
TAT_ASAP INT เวลาออกผล ASAP (นาที)
IsSTAT BIT สามารถสั่งแบบ STAT ได้
RequiresContrast BIT ต้องใช้สารทึบรังสี
ContrastType NVARCHAR(100) ชนิดสารทึบรังสี
RequiresPreparation BIT ต้องเตรียมตัว
PreparationInstructions NTEXT คำแนะนำการเตรียมตัว
RequiresFasting BIT ต้องงดอาหาร
FastingHours INT จำนวนชั่วโมงงดอาหาร
TreatmentGroupCode VARCHAR(20) FK รหัสกลุ่มค่ารักษาพยาบาล (อ้างอิง TREATMENT_GROUP, ตาม TOR ข้อ 1.2.8.1.2)
RadiationDose DECIMAL(10,4) ปริมาณรังสี (mGy)
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: RADIOLOGY_CATEGORY (หมวดการตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลหมวดหมู่การตรวจทางรังสีวิทยา เช่น X-Ray ทั่วไป, CT Scan, MRI, Ultrasound

Field Type Key Description
CategoryCode VARCHAR(10) PK รหัสหมวดการตรวจ
CategoryName NVARCHAR(100) ชื่อหมวดการตรวจ
CategoryNameEng NVARCHAR(100) ชื่อหมวดการตรวจ (อังกฤษ)
CategoryDescription NTEXT คำอธิบายหมวดการตรวจ
DisplayOrder INT ลำดับการแสดง
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_GROUP (กลุ่มการตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลกลุ่มการตรวจรังสี สำหรับการสั่งแบบเป็นกลุ่ม

Field Type Key Description
GroupCode VARCHAR(10) PK รหัสกลุ่มการตรวจ
GroupName NVARCHAR(100) ชื่อกลุ่มการตรวจ
GroupNameEng NVARCHAR(100) ชื่อกลุ่มการตรวจ (อังกฤษ)
GroupDescription NTEXT คำอธิบายกลุ่มการตรวจ
CategoryCode VARCHAR(10) FK รหัสหมวดการตรวจ
GroupCost DECIMAL(10,2) ราคากลุ่ม
DiscountPercent DECIMAL(5,2) เปอร์เซ็นต์ส่วนลด
IsPackage BIT เป็นแพ็คเกจ
IsActive BIT ใช้งานอยู่
DisplayOrder INT ลำดับการแสดง
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_GROUP_TESTS (รายการตรวจในกลุ่ม)

วัตถุประสงค์: เก็บข้อมูลรายการตรวจรังสีที่อยู่ในแต่ละกลุ่ม

Field Type Key Description
GroupTestID VARCHAR(20) PK รหัสรายการในกลุ่ม
GroupCode VARCHAR(10) FK รหัสกลุ่มการตรวจ
XRayCode VARCHAR(20) FK รหัสรายการตรวจ
IsRequired BIT จำเป็นต้องมี
DisplayOrder INT ลำดับการแสดง

Table: MODALITY_TYPE (ประเภทเครื่องตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลประเภทเครื่องมือตรวจทางรังสีวิทยา

Field Type Key Description
ModalityCode VARCHAR(10) PK รหัสประเภทเครื่อง
ModalityName NVARCHAR(100) ชื่อประเภทเครื่อง (X-Ray, CT, MRI, US, etc.)
ModalityNameEng NVARCHAR(100) ชื่อประเภทเครื่อง (อังกฤษ)
ModalityDescription NTEXT คำอธิบาย
IsActive BIT ใช้งานอยู่

Table: BODY_PART (ส่วนของร่างกาย)

วัตถุประสงค์: เก็บข้อมูลส่วนของร่างกายที่ตรวจ

Field Type Key Description
BodyPartCode VARCHAR(10) PK รหัสส่วนของร่างกาย
BodyPartName NVARCHAR(100) ชื่อส่วนของร่างกาย
BodyPartNameEng NVARCHAR(100) ชื่อส่วนของร่างกาย (อังกฤษ)
ParentBodyPartCode VARCHAR(10) FK รหัสส่วนหลัก
DisplayOrder INT ลำดับการแสดง
IsActive BIT ใช้งานอยู่

Table: RADIOLOGY_POSITION (ท่าถ่ายรังสี)

วัตถุประสงค์: เก็บข้อมูลท่าที่ใช้ในการถ่ายรังสี (AP, PA, Lateral, Oblique, etc.)

Field Type Key Description
PositionCode VARCHAR(10) PK รหัสท่าถ่าย
PositionName NVARCHAR(100) ชื่อท่าถ่าย
PositionNameEng NVARCHAR(100) ชื่อท่าถ่าย (อังกฤษ)
PositionAbbr VARCHAR(10) ตัวย่อ (AP, PA, LAT, etc.)
PositionDescription NTEXT คำอธิบายท่าถ่าย
IsActive BIT ใช้งานอยู่

Table: RADIOLOGY_ROOM (ห้องตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลห้องตรวจทางรังสีวิทยา

Field Type Key Description
RoomCode VARCHAR(10) PK รหัสห้องตรวจ
RoomName NVARCHAR(100) ชื่อห้องตรวจ
RoomType VARCHAR(20) ประเภทห้อง
DepartmentCode VARCHAR(10) FK รหัสแผนก
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
FloorLevel VARCHAR(10) ชั้น
BuildingCode VARCHAR(10) รหัสอาคาร
Capacity INT จำนวนผู้ป่วยที่รองรับ
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: FILM_SIZE (ขนาดฟิล์ม)

วัตถุประสงค์: เก็บข้อมูลขนาดฟิล์มที่ใช้ในการถ่ายรังสี

Field Type Key Description
FilmSizeCode VARCHAR(10) PK รหัสขนาดฟิล์ม
FilmSizeName NVARCHAR(50) ชื่อขนาดฟิล์ม (8x10, 10x12, 14x17, etc.)
Width DECIMAL(5,2) ความกว้าง (นิ้ว)
Height DECIMAL(5,2) ความยาว (นิ้ว)
FilmCost DECIMAL(10,2) ราคาฟิล์ม
IsActive BIT ใช้งานอยู่

8.2.8.2 ข้อมูลการสั่งตรวจรังสี (Radiology Orders)

Table: RADIOLOGY_ORDER (การสั่งตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลการสั่งตรวจรังสีจากแพทย์ รองรับการสั่งจากหลายจุด (OPD, IPD, ER) แบบ Online ตาม TOR ข้อ 1.2.8.2.1, 1.2.8.2.3

Field Type Key Description
OrderID VARCHAR(20) PK รหัสการสั่งตรวจ (AUTO)
VisitID VARCHAR(20) FK รหัส Visit (อ้างอิงจาก VISIT)
HN VARCHAR(10) FK รหัสผู้ป่วย (อ้างอิงจาก PATIENT)
AN VARCHAR(15) FK รหัสผู้ป่วยใน (สำหรับ IPD)
OrderDateTime DATETIME วันเวลาที่สั่ง
OrderingDoctorID VARCHAR(20) FK แพทย์ผู้สั่ง (อ้างอิง DOCTORS)
OrderDepartmentCode VARCHAR(10) FK แผนกที่สั่ง (อ้างอิง DEPARTMENT)
OrderSourceSystem VARCHAR(20) ระบบที่สั่ง (HISTORY_TAKING/EXAMINATION/EMERGENCY/IPD/APPOINTMENT)
OrderSourceID VARCHAR(20) รหัสอ้างอิงต้นทาง
OrderType VARCHAR(20) ประเภทคำสั่ง (NEW/REPEAT/FOLLOW_UP)
UrgencyLevel ENUM('ROUTINE','ASAP','STAT','URGENT') ความเร่งด่วน (ตาม TOR ข้อ 1.2.8.2.1)
ClinicalIndication NTEXT อาการหรือเหตุผลทางคลินิก
ClinicalDiagnosis NTEXT การวินิจฉัยเบื้องต้น
PatientCondition ENUM('WALK','CARRY','WHEELCHAIR','BED','STRETCHER') สภาพผู้ป่วย (ตาม TOR ข้อ 1.2.8.2.1)
RightsVerificationID VARCHAR(20) FK รหัสการยืนยันสิทธิ (อ้างอิงจาก ระบบตรวจสอบสิทธิ 1.2.15)
OrderStatus VARCHAR(20) สถานะคำสั่ง (PENDING/CONFIRMED/CANCELLED/COMPLETED)
ScheduledDateTime DATETIME วันเวลานัด
IsScheduled BIT เป็นการสั่งล่วงหน้า
TotalCost DECIMAL(10,2) ค่าใช้จ่ายรวม
PaymentStatus VARCHAR(20) สถานะการชำระเงิน
SpecialInstructions NTEXT คำแนะนำพิเศษ
IsContrast BIT ใช้สารทึบรังสี
ContrastType NVARCHAR(100) ชนิดสารทึบรังสี
ContrastVolume DECIMAL(10,2) ปริมาณสารทึบรังสี (ml)
AllergicHistory NTEXT ประวัติการแพ้
IsPrinted BIT พิมพ์ใบ Request แล้ว
PrintedDateTime DATETIME เวลาที่พิมพ์
PrintedBy VARCHAR(50) ผู้พิมพ์
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
CancelledDateTime DATETIME วันเวลาที่ยกเลิก
CancelledBy VARCHAR(50) ผู้ยกเลิก
CancelReason NTEXT เหตุผลการยกเลิก

Table: RADIOLOGY_ORDER_DETAIL (รายละเอียดการสั่งตรวจ)

วัตถุประสงค์: เก็บรายละเอียดแต่ละรายการตรวจที่สั่ง รวมถึงท่า ด้าน และห้องตรวจ ตาม TOR ข้อ 1.2.8.2.1

Field Type Key Description
OrderDetailID VARCHAR(20) PK รหัสรายละเอียดคำสั่ง
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
XRayCode VARCHAR(20) FK รหัสรายการตรวจ (อ้างอิง RADIOLOGY_TEST_MASTER)
XRayName NVARCHAR(200) ชื่อรายการตรวจ
BodyPartCode VARCHAR(10) FK รหัสส่วนของร่างกาย (อ้างอิง BODY_PART)
BodySide ENUM('LEFT','RIGHT','BOTH','NA') ด้าน (ซ้าย/ขวา/ทั้งสองด้าน) ตาม TOR ข้อ 1.2.8.2.1
RoomCode VARCHAR(10) FK รหัสห้องตรวจ (อ้างอิง RADIOLOGY_ROOM, ตาม TOR ข้อ 1.2.8.2.1)
ItemCost DECIMAL(10,2) ค่าบริการรายการ
DiscountAmount DECIMAL(10,2) ส่วนลด
NetCost DECIMAL(10,2) ค่าใช้จ่ายสุทธิ
Quantity INT จำนวน
DetailStatus VARCHAR(20) สถานะรายการ (PENDING/REGISTERED/IN_PROGRESS/COMPLETED/CANCELLED)
SpecialRequest NTEXT คำขอพิเศษ
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_ORDER_POSITION (ท่าถ่ายรังสีที่สั่ง)

วัตถุประสงค์: เก็บข้อมูลท่าที่ระบุในการสั่งตรวจ สามารถมีได้หลายท่าต่อ 1 รายการ ตาม TOR ข้อ 1.2.8.2.1

Field Type Key Description
OrderPositionID VARCHAR(20) PK รหัสท่าที่สั่ง
OrderDetailID VARCHAR(20) FK รหัสรายละเอียดคำสั่ง
PositionCode VARCHAR(10) FK รหัสท่าถ่าย (อ้างอิง RADIOLOGY_POSITION)
PositionName NVARCHAR(100) ชื่อท่าถ่าย
PositionOrder INT ลำดับท่า
IsRequired BIT ท่าที่จำเป็น
Notes NTEXT หมายเหตุ

8.2.8.3 ข้อมูลการลงทะเบียนและ XN (Registration & XN)

Table: RADIOLOGY_REGISTRATION (การลงทะเบียนตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลการลงทะเบียนและออกเลข XN ให้กับผู้ป่วย ตาม TOR ข้อ 1.2.8.3.5

Field Type Key Description
RegistrationID VARCHAR(20) PK รหัสการลงทะเบียน
XN VARCHAR(15) UK หมายเลข X-Ray Number (XN-YYYYMMDD-XXXXX)
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัส Visit
RegistrationDateTime DATETIME วันเวลาลงทะเบียน
RegisteredBy VARCHAR(50) ผู้ลงทะเบียน
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
TechnicianID VARCHAR(20) FK รหัสนักรังสีเทคนิค
ScheduledDateTime DATETIME วันเวลานัด
StartDateTime DATETIME เวลาเริ่มตรวจ
EndDateTime DATETIME เวลาเสร็จสิ้น
PatientArrivalTime DATETIME เวลาที่ผู้ป่วยมาถึง
PatientCondition VARCHAR(20) สภาพผู้ป่วย
RegistrationStatus VARCHAR(20) สถานะ (REGISTERED/WAITING/IN_PROGRESS/COMPLETED/CANCELLED/NO_SHOW)
IsEmergency BIT เป็นกรณีฉุกเฉิน
QueueNumber VARCHAR(10) หมายเลขคิว
WaitingTime INT เวลารอคอย (นาที)
ServiceTime INT เวลาให้บริการ (นาที)
CompletedDateTime DATETIME วันเวลาที่เสร็จสิ้น
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_EXAMINATION (การตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลการตรวจรังสีแต่ละครั้ง รวมถึงการใช้ฟิล์ม

Field Type Key Description
ExaminationID VARCHAR(20) PK รหัสการตรวจ
RegistrationID VARCHAR(20) FK รหัสการลงทะเบียน
XN VARCHAR(15) FK หมายเลข XN
OrderDetailID VARCHAR(20) FK รหัสรายละเอียดคำสั่ง
XRayCode VARCHAR(20) FK รหัสรายการตรวจ
ExaminationDateTime DATETIME วันเวลาตรวจ
TechnicianID VARCHAR(20) FK นักรังสีเทคนิคผู้ทำ
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
TechniqueUsed NVARCHAR(200) เทคนิคที่ใช้
KVP DECIMAL(5,1) ค่า kVp
MAS DECIMAL(6,2) ค่า mAs
ExposureTime DECIMAL(5,3) เวลาในการฉายรังสี (วินาที)
RadiationDose DECIMAL(10,4) ปริมาณรังสีที่ได้รับ (mGy)
ExaminationQuality VARCHAR(20) คุณภาพการตรวจ (EXCELLENT/GOOD/ACCEPTABLE/POOR)
IsContrast BIT ใช้สารทึบรังสี
ContrastType NVARCHAR(100) ชนิดสารทึบรังสี
ContrastVolume DECIMAL(10,2) ปริมาณสารทึบรังสี (ml)
ContrastReaction NTEXT อาการแพ้สารทึบรังสี (ถ้ามี)
TechnicianNotes NTEXT หมายเหตุของเทคนิค
ExaminationStatus VARCHAR(20) สถานะ (IN_PROGRESS/COMPLETED/FAILED/REPEATED)
CompletedDateTime DATETIME วันเวลาที่เสร็จสิ้น
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_FILM_USAGE (การใช้ฟิล์ม)

วัตถุประสงค์: เก็บข้อมูลการใช้ฟิล์มในการตรวจแต่ละครั้ง ตาม TOR ข้อ 1.2.8.3.6

Field Type Key Description
FilmUsageID VARCHAR(20) PK รหัสการใช้ฟิล์ม
ExaminationID VARCHAR(20) FK รหัสการตรวจ
XN VARCHAR(15) FK หมายเลข XN
FilmSizeCode VARCHAR(10) FK รหัสขนาดฟิล์ม (อ้างอิง FILM_SIZE)
FilmQuantity INT จำนวนฟิล์มที่ใช้ (ตาม TOR ข้อ 1.2.8.3.6)
ViewCount INT จำนวน View
FilmCost DECIMAL(10,2) ค่าฟิล์ม
TotalFilmCost DECIMAL(10,2) ค่าฟิล์มรวม
RecordedDateTime DATETIME วันเวลาที่บันทึก
RecordedBy VARCHAR(50) ผู้บันทึก

Table: RADIOLOGY_DAMAGED_FILM (ฟิล์มเสีย)

วัตถุประสงค์: เก็บข้อมูลฟิล์มที่เสียพร้อมสาเหตุ ตาม TOR ข้อ 1.2.8.3.7

Field Type Key Description
DamagedFilmID VARCHAR(20) PK รหัสฟิล์มเสีย
ExaminationID VARCHAR(20) FK รหัสการตรวจ
XN VARCHAR(15) FK หมายเลข XN
FilmSizeCode VARCHAR(10) FK รหัสขนาดฟิล์ม
DamagedQuantity INT จำนวนฟิล์มที่เสีย
DamageReason NVARCHAR(200) สาเหตุของการเสีย (ตาม TOR ข้อ 1.2.8.3.7)
DamageType VARCHAR(50) ประเภทความเสียหาย (OVEREXPOSED/UNDEREXPOSED/FOGGED/ARTIFACT/POSITIONING_ERROR/OTHER)
ResponsiblePerson VARCHAR(50) ผู้รับผิดชอบ
DamageDateTime DATETIME วันเวลาที่เสีย
RecordedBy VARCHAR(50) ผู้บันทึก
IsReimbursed BIT เบิกชดเชยแล้ว
Notes NTEXT หมายเหตุ
CreatedDate DATETIME วันที่บันทึก

8.2.8.4 ข้อมูลรายงานผลและการอ่านฟิล์ม (Reporting & Film Reading)

Table: RADIOLOGY_RESULT (ผลการตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลผลการตรวจรังสีจากนักรังสีเทคนิคและรังสีแพทย์ ตาม TOR ข้อ 1.2.8.3.10-15

Field Type Key Description
ResultID VARCHAR(20) PK รหัสผลการตรวจ
ExaminationID VARCHAR(20) FK รหัสการตรวจ
XN VARCHAR(15) FK หมายเลข XN
OrderDetailID VARCHAR(20) FK รหัสรายละเอียดคำสั่ง
HN VARCHAR(10) FK รหัสผู้ป่วย
PreliminaryFindings NTEXT ผลเบื้องต้นจากเทคนิค
PreliminaryReportedBy VARCHAR(50) ผู้รายงานเบื้องต้น
PreliminaryReportDateTime DATETIME วันเวลารายงานเบื้องต้น
RadiologistID VARCHAR(20) FK รหัสรังสีแพทย์ผู้อ่านฟิล์ม (ตาม TOR ข้อ 1.2.8.3.10)
FilmReadingDateTime DATETIME วันเวลาอ่านฟิล์ม
Findings NTEXT ผลการอ่านฟิล์ม/รายงานผล (ตาม TOR ข้อ 1.2.8.3.10)
Impression NTEXT ความเห็นสรุป
Recommendation NTEXT ข้อแนะนำ
ComparisonStudy NTEXT เปรียบเทียบกับการตรวจครั้งก่อน
TechnicalQuality VARCHAR(20) คุณภาพทางเทคนิค (EXCELLENT/GOOD/ADEQUATE/LIMITED/POOR)
LimitationNotes NTEXT ข้อจำกัดในการตีความ
CriticalFindings NTEXT ผลที่สำคัญเร่งด่วน
IsCritical BIT เป็นผลวิกฤต
CriticalNotifiedDateTime DATETIME วันเวลาแจ้งผลวิกฤต
CriticalNotifiedTo VARCHAR(50) แจ้งผลวิกฤตให้
ResultStatus VARCHAR(20) สถานะผล (DRAFT/PRELIMINARY/FINAL/CORRECTED/CANCELLED)
IsLocked BIT ล็อกผลแล้ว (ตาม TOR ข้อ 1.2.8.3.13)
LockedDateTime DATETIME วันเวลาล็อกผล
LockedBy VARCHAR(50) ผู้ล็อกผล
ApprovedDateTime DATETIME วันเวลาอนุมัติผล
ApprovedBy VARCHAR(50) ผู้อนุมัติผล
ReportedDateTime DATETIME วันเวลารายงานผล
VerifiedDateTime DATETIME วันเวลายืนยันผล
VerifiedBy VARCHAR(50) ผู้ยืนยันผล
IsViewedByOrderer BIT แพทย์ผู้สั่งดูผลแล้ว (ตาม TOR ข้อ 1.2.8.3.15)
ViewedDateTime DATETIME วันเวลาที่ดูผล
ViewedBy VARCHAR(50) ผู้ดูผล
TATMinutes INT ระยะเวลาออกผล (นาที)
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: RADIOLOGY_REPORT_TEMPLATE (Template รายงานผล)

วัตถุประสงค์: เก็บชุดข้อความสำเร็จรูปสำหรับการรายงานผล ตาม TOR ข้อ 1.2.8.3.11

Field Type Key Description
TemplateID VARCHAR(20) PK รหัส Template
TemplateName NVARCHAR(200) ชื่อ Template
TemplateCategory VARCHAR(50) หมวด Template (NORMAL/ABNORMAL/FINDINGS/IMPRESSION)
XRayCode VARCHAR(20) FK รหัสรายการตรวจ (ถ้าเฉพาะรายการ)
BodyPartCode VARCHAR(10) FK รหัสส่วนของร่างกาย
TemplateText NTEXT ข้อความ Template (ตาม TOR ข้อ 1.2.8.3.11)
Keywords NVARCHAR(500) คำสำคัญสำหรับค้นหา
UsageCount INT จำนวนครั้งที่ใช้
IsActive BIT ใช้งานอยู่
IsPublic BIT ใช้ร่วมกันได้
CreatedBy VARCHAR(50) ผู้สร้าง
CreatedDate DATETIME วันที่สร้าง
LastUsed DATETIME ใช้ล่าสุด

Table: RADIOLOGY_IMAGE (ภาพรังสี)

วัตถุประสงค์: เก็บข้อมูลภาพรังสีดิจิทัล (DICOM Images)

Field Type Key Description
ImageID VARCHAR(20) PK รหัสภาพ
ExaminationID VARCHAR(20) FK รหัสการตรวจ
XN VARCHAR(15) FK หมายเลข XN
SeriesNumber INT หมายเลข Series
ImageNumber INT หมายเลขภาพ
PositionCode VARCHAR(10) FK รหัสท่าถ่าย
ImageType VARCHAR(20) ประเภทภาพ (PRIMARY/SECONDARY/SCOUT)
ImageFormat VARCHAR(10) รูปแบบไฟล์ (DICOM/JPEG/PNG)
ImagePath VARCHAR(500) Path ของไฟล์ภาพ
ThumbnailPath VARCHAR(500) Path ของภาพขนาดย่อ
ImageSize BIGINT ขนาดไฟล์ (bytes)
Width INT ความกว้างภาพ (pixels)
Height INT ความสูงภาพ (pixels)
SOPInstanceUID VARCHAR(100) DICOM SOP Instance UID
StudyInstanceUID VARCHAR(100) DICOM Study Instance UID
SeriesInstanceUID VARCHAR(100) DICOM Series Instance UID
AcquisitionDateTime DATETIME วันเวลาที่ได้ภาพ
UploadedDateTime DATETIME วันเวลาที่อัพโหลด
UploadedBy VARCHAR(50) ผู้อัพโหลด
IsDeleted BIT ถูกลบแล้ว

Table: RADIOLOGY_FILM_STORAGE (การจัดเก็บฟิล์ม)

วัตถุประสงค์: เก็บข้อมูลตำแหน่งการจัดเก็บฟิล์มจริง

Field Type Key Description
FilmStorageID VARCHAR(20) PK รหัสการจัดเก็บ
XN VARCHAR(15) FK หมายเลข XN
ExaminationID VARCHAR(20) FK รหัสการตรวจ
FilmLocation NVARCHAR(200) ตำแหน่งจัดเก็บ
ShelfNumber VARCHAR(20) เลขชั้น
RowNumber VARCHAR(20) เลขแถว
SlotNumber VARCHAR(20) เลขช่อง
FilmEnvelopeNumber VARCHAR(20) หมายเลขซอง
TotalFilmCount INT จำนวนฟิล์มทั้งหมด
StorageDateTime DATETIME วันเวลาจัดเก็บ
StoredBy VARCHAR(50) ผู้จัดเก็บ
FilmStatus VARCHAR(20) สถานะฟิล์ม (IN_STORAGE/BORROWED/LOST/DESTROYED)
Notes NTEXT หมายเหตุ

8.2.8.5 ข้อมูลการยืม-คืนฟิล์ม (Film Borrowing)

Table: RADIOLOGY_FILM_BORROWING (การยืมฟิล์ม)

วัตถุประสงค์: เก็บข้อมูลการยืม-คืนฟิล์ม X-Ray ตาม TOR ข้อ 1.2.8.4.1-3

Field Type Key Description
BorrowingID VARCHAR(20) PK รหัสการยืม
XN VARCHAR(15) FK หมายเลข XN
HN VARCHAR(10) FK รหัสผู้ป่วย
BorrowerID VARCHAR(20) FK รหัสผู้ยืม (อาจเป็น DoctorID หรือ UserID, ตาม TOR ข้อ 1.2.8.4.2)
BorrowerName NVARCHAR(100) ชื่อผู้ยืม
BorrowerType VARCHAR(20) ประเภทผู้ยืม (DOCTOR/STAFF/STUDENT/EXTERNAL)
DepartmentCode VARCHAR(10) FK แผนกที่ยืม (ตาม TOR ข้อ 1.2.8.4.2)
BorrowDateTime DATETIME วันเวลาที่ยืม
BorrowReason NVARCHAR(500) สาเหตุการยืม (ตาม TOR ข้อ 1.2.8.4.2)
ExpectedReturnDate DATE วันที่คาดว่าจะคืน
ActualReturnDateTime DATETIME วันเวลาที่คืนจริง
ReturnCondition VARCHAR(20) สภาพเมื่อคืน (COMPLETE/INCOMPLETE/DAMAGED)
FilmQuantityBorrowed INT จำนวนฟิล์มที่ยืม
FilmQuantityReturned INT จำนวนฟิล์มที่คืน
ContactPhone VARCHAR(20) เบอร์โทรผู้ยืม (ตาม TOR ข้อ 1.2.8.4.2)
BorrowingStatus VARCHAR(20) สถานะ (BORROWED/RETURNED/OVERDUE/LOST)
IsOverdue BIT เกินกำหนดคืน
OverdueDays INT จำนวนวันเกินกำหนด
BorrowedBy VARCHAR(50) ผู้ทำรายการยืม
ReturnedBy VARCHAR(50) ผู้รับคืน
Notes NTEXT หมายเหตุเพิ่มเติม (ตาม TOR ข้อ 1.2.8.4.2)
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: RADIOLOGY_FILM_BORROWING_DETAIL (รายละเอียดฟิล์มที่ยืม)

วัตถุประสงค์: เก็บรายละเอียดแต่ละแผ่นฟิล์มที่ยืม

Field Type Key Description
BorrowingDetailID VARCHAR(20) PK รหัสรายละเอียดการยืม
BorrowingID VARCHAR(20) FK รหัสการยืม
FilmNumber VARCHAR(20) หมายเลขฟิล์ม
FilmDescription NVARCHAR(200) รายละเอียดฟิล์ม
IsBorrowed BIT ยืมไปแล้ว
IsReturned BIT คืนแล้ว
ReturnCondition VARCHAR(20) สภาพเมื่อคืน
Notes NTEXT หมายเหตุ

8.2.8.6 ข้อมูลการนัดหมาย (Appointment)

Table: RADIOLOGY_APPOINTMENT (การนัดตรวจรังสี)

วัตถุประสงค์: เก็บข้อมูลการนัดหมายเพื่อฟังผลหรือมาตรวจซ้ำ ตาม TOR ข้อ 1.2.8.3.8

Field Type Key Description
AppointmentID VARCHAR(20) PK รหัสนัดหมาย
XN VARCHAR(15) FK หมายเลข XN (ถ้ามีผลเดิม)
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัส Visit
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ (ถ้านัดล่วงหน้า)
AppointmentDateTime DATETIME วันเวลานัด (ตาม TOR ข้อ 1.2.8.3.8)
AppointmentType VARCHAR(20) ประเภทนัด (RESULT_CONSULTATION/FOLLOW_UP/REPEAT_EXAM)
AppointmentReason NTEXT เหตุผลการนัด
XRayCode VARCHAR(20) FK รหัสรายการตรวจ (สำหรับนัดตรวจซ้ำ)
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
RadiologistID VARCHAR(20) FK รังสีแพทย์ที่นัด
CreatedBy VARCHAR(50) ผู้สร้างนัด
CreatedDate DATETIME วันที่สร้างนัด
AppointmentStatus VARCHAR(20) สถานะนัด (SCHEDULED/CONFIRMED/ARRIVED/COMPLETED/CANCELLED/NO_SHOW)
ConfirmedDateTime DATETIME วันเวลายืนยันนัด
ConfirmedBy VARCHAR(50) ผู้ยืนยันนัด
ArrivalDateTime DATETIME วันเวลามาถึง
CompletedDateTime DATETIME วันเวลาเสร็จสิ้น
CancelledDateTime DATETIME วันเวลายกเลิก
CancelReason NTEXT เหตุผลยกเลิก
ReminderSent BIT ส่งการแจ้งเตือนแล้ว
ReminderSentDateTime DATETIME วันเวลาส่งแจ้งเตือน
Notes NTEXT หมายเหตุ

8.2.8.7 ตารางรองรับการทำงาน (Supporting Tables)

Table: RADIOLOGY_PATIENT_REFERRAL (การส่งต่อผู้ป่วย)

วัตถุประสงค์: เก็บข้อมูลการส่งผู้ป่วยไปตามห้องตรวจต่างๆ ตาม TOR ข้อ 1.2.8.3.14

Field Type Key Description
ReferralID VARCHAR(20) PK รหัสการส่งต่อ
XN VARCHAR(15) FK หมายเลข XN
ResultID VARCHAR(20) FK รหัสผลการตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
ReferralDateTime DATETIME วันเวลาส่งต่อ
ReferredBy VARCHAR(50) ผู้ส่งต่อ (รังสีแพทย์)
ReferredToDepartment VARCHAR(10) FK แผนกที่ส่งต่อไป (ตาม TOR ข้อ 1.2.8.3.14)
ReferredToDoctor VARCHAR(20) FK แพทย์ที่ส่งต่อไป
ReferralReason NTEXT เหตุผลการส่งต่อ
UrgencyLevel VARCHAR(20) ความเร่งด่วน
ReferralStatus VARCHAR(20) สถานะ (PENDING/ACCEPTED/REJECTED/COMPLETED)
AcceptedDateTime DATETIME วันเวลาที่รับ
AcceptedBy VARCHAR(50) ผู้รับ
Notes NTEXT หมายเหตุ
CreatedDate DATETIME วันที่สร้าง

Table: RADIOLOGY_QUALITY_CONTROL (การควบคุมคุณภาพ)

วัตถุประสงค์: เก็บข้อมูลการตรวจสอบคุณภาพของเครื่องมือและกระบวนการ

Field Type Key Description
QualityControlID VARCHAR(20) PK รหัสการควบคุมคุณภาพ
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
EquipmentID VARCHAR(20) FK รหัสเครื่องมือ
QCDate DATE วันที่ตรวจสอบ
QCType VARCHAR(50) ประเภทการตรวจสอบ (DAILY/WEEKLY/MONTHLY/ANNUAL)
TestPerformed NVARCHAR(200) การทดสอบที่ทำ
TestResult VARCHAR(20) ผลการทดสอบ (PASS/FAIL/WARNING)
MeasuredValue DECIMAL(10,4) ค่าที่วัดได้
AcceptableRange NVARCHAR(100) ช่วงค่าที่ยอมรับได้
TestedBy VARCHAR(50) ผู้ทดสอบ
VerifiedBy VARCHAR(50) ผู้ตรวจสอบ
CorrectiveAction NTEXT การแก้ไข (ถ้ามี)
NextQCDate DATE วันที่ตรวจสอบครั้งต่อไป
IsCompliant BIT เป็นไปตามมาตรฐาน
Notes NTEXT หมายเหตุ
CreatedDate DATETIME วันที่บันทึก

Table: RADIOLOGY_EQUIPMENT (เครื่องมือรังสี)

วัตถุประสงค์: เก็บข้อมูลเครื่องมือและอุปกรณ์ทางรังสีวิทยา

Field Type Key Description
EquipmentID VARCHAR(20) PK รหัสเครื่องมือ
EquipmentName NVARCHAR(200) ชื่อเครื่องมือ
EquipmentType VARCHAR(50) ประเภทเครื่องมือ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
Manufacturer NVARCHAR(100) ผู้ผลิต
ModelNumber VARCHAR(50) รุ่น
SerialNumber VARCHAR(50) หมายเลขเครื่อง
RoomCode VARCHAR(10) FK รหัสห้องที่ติดตั้ง
InstallationDate DATE วันที่ติดตั้ง
WarrantyExpiryDate DATE วันหมดประกัน
LastMaintenanceDate DATE วันบำรุงรักษาล่าสุด
NextMaintenanceDate DATE วันบำรุงรักษาครั้งต่อไป
EquipmentStatus VARCHAR(20) สถานะ (OPERATIONAL/MAINTENANCE/OUT_OF_SERVICE/RETIRED)
IsActive BIT ใช้งานได้
Notes NTEXT หมายเหตุ

Table: RADIOLOGY_PROTOCOL (โปรโตคอลการตรวจ)

วัตถุประสงค์: เก็บข้อมูลโปรโตคอลการตรวจมาตรฐานสำหรับแต่ละรายการ

Field Type Key Description
ProtocolID VARCHAR(20) PK รหัสโปรโตคอล
ProtocolName NVARCHAR(200) ชื่อโปรโตคอล
XRayCode VARCHAR(20) FK รหัสรายการตรวจ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
BodyPartCode VARCHAR(10) FK รหัสส่วนของร่างกาย
ProtocolDescription NTEXT คำอธิบายโปรโตคอล
TechniqueParameters NTEXT พารามิเตอร์ทางเทคนิค (JSON Format)
StandardPositions NVARCHAR(500) ท่ามาตรฐาน
StandardViews NVARCHAR(500) View มาตรฐาน
PreparationRequired NTEXT การเตรียมตัวที่ต้องการ
SafetyPrecautions NTEXT ข้อควรระวังด้านความปลอดภัย
EstimatedDuration INT เวลาโดยประมาณ (นาที)
IsActive BIT ใช้งานอยู่
EffectiveDate DATE วันที่เริ่มใช้
CreatedBy VARCHAR(50) ผู้สร้าง
CreatedDate DATETIME วันที่สร้าง

Table: RADIOLOGY_CONTRAST_AGENT (สารทึบรังสี)

วัตถุประสงค์: เก็บข้อมูลสารทึบรังสีที่ใช้

Field Type Key Description
ContrastID VARCHAR(20) PK รหัสสารทึบรังสี
ContrastName NVARCHAR(200) ชื่อสารทึบรังสี
GenericName NVARCHAR(200) ชื่อสามัญ
ContrastType VARCHAR(50) ประเภท (IODINATED/BARIUM/GADOLINIUM/OTHER)
Concentration VARCHAR(50) ความเข้มข้น
RouteOfAdministration VARCHAR(50) วิธีให้ (IV/ORAL/RECTAL/OTHER)
Manufacturer NVARCHAR(100) ผู้ผลิต
StandardDose DECIMAL(10,2) ขนาดมาตรฐาน (ml)
MaxDose DECIMAL(10,2) ขนาดสูงสุด (ml)
Contraindications NTEXT ข้อห้ามใช้
SideEffects NTEXT ผลข้างเคียง
PrecautionWarnings NTEXT คำเตือน
IsActive BIT ใช้งานอยู่

Table: RADIOLOGY_WORKLOAD (ภาระงาน)

วัตถุประสงค์: เก็บข้อมูลภาระงานเพื่อการวิเคราะห์และวางแผน

Field Type Key Description
WorkloadID VARCHAR(20) PK รหัสภาระงาน
WorkDate DATE วันที่
ShiftType VARCHAR(20) กะการทำงาน (MORNING/AFTERNOON/NIGHT)
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
TechnicianID VARCHAR(20) FK รหัสนักรังสีเทคนิค
TotalExaminations INT จำนวนการตรวจทั้งหมด
RoutineCount INT จำนวนแบบปกติ
StatCount INT จำนวนแบบ STAT
TotalFilmsUsed INT จำนวนฟิล์มที่ใช้
DamagedFilmCount INT จำนวนฟิล์มเสีย
AverageServiceTime INT เวลาให้บริการเฉลี่ย (นาที)
EquipmentDowntime INT เวลาเครื่องเสีย (นาที)
CreatedDate DATETIME วันที่บันทึก

8.2.8.8 ตาราง Audit Trail และประวัติการเปลี่ยนแปลง

Table: RADIOLOGY_RESULT_HISTORY (ประวัติการแก้ไขผล)

วัตถุประสงค์: เก็บประวัติการแก้ไขผลการตรวจเพื่อ Audit Trail

Field Type Key Description
HistoryID VARCHAR(20) PK รหัสประวัติ
ResultID VARCHAR(20) FK รหัสผลการตรวจ
ChangeDateTime DATETIME วันเวลาที่แก้ไข
ChangedBy VARCHAR(50) ผู้แก้ไข
ChangeType VARCHAR(20) ประเภทการเปลี่ยนแปลง (CREATE/UPDATE/DELETE/LOCK/UNLOCK)
FieldChanged VARCHAR(100) ฟิลด์ที่เปลี่ยน
OldValue NTEXT ค่าเดิม
NewValue NTEXT ค่าใหม่
ChangeReason NTEXT เหตุผลการเปลี่ยนแปลง
IPAddress VARCHAR(50) IP Address
UserAgent VARCHAR(500) User Agent

Table: RADIOLOGY_ORDER_HISTORY (ประวัติการแก้ไขคำสั่ง)

วัตถุประสงค์: เก็บประวัติการแก้ไขคำสั่งตรวจเพื่อ Audit Trail

Field Type Key Description
HistoryID VARCHAR(20) PK รหัสประวัติ
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
ChangeDateTime DATETIME วันเวลาที่แก้ไข
ChangedBy VARCHAR(50) ผู้แก้ไข
ChangeType VARCHAR(20) ประเภทการเปลี่ยนแปลง
FieldChanged VARCHAR(100) ฟิลด์ที่เปลี่ยน
OldValue NTEXT ค่าเดิม
NewValue NTEXT ค่าใหม่
ChangeReason NTEXT เหตุผลการเปลี่ยนแปลง
IPAddress VARCHAR(50) IP Address

Table: RADIOLOGY_ACTIVITY_LOG (บันทึกกิจกรรม)

วัตถุประสงค์: เก็บบันทึกกิจกรรมทั้งหมดในระบบเพื่อ Security Audit

Field Type Key Description
LogID VARCHAR(20) PK รหัสบันทึก
ActivityDateTime DATETIME วันเวลา
UserID VARCHAR(50) รหัสผู้ใช้
ActivityType VARCHAR(50) ประเภทกิจกรรม (LOGIN/LOGOUT/VIEW/CREATE/UPDATE/DELETE/PRINT)
ModuleName VARCHAR(50) ชื่อโมดูล
RecordType VARCHAR(50) ประเภทข้อมูล (ORDER/RESULT/APPOINTMENT/etc.)
RecordID VARCHAR(20) รหัสข้อมูล
HN VARCHAR(10) รหัสผู้ป่วย (ถ้ามี)
ActionDescription NTEXT รายละเอียดกิจกรรม
IPAddress VARCHAR(50) IP Address
UserAgent VARCHAR(500) User Agent
SessionID VARCHAR(100) Session ID
IsSuccess BIT สำเร็จหรือไม่
ErrorMessage NTEXT ข้อความ Error (ถ้ามี)

8.2.8.9 ตารางรายงานและสถิติ (Reports & Statistics)

Table: RADIOLOGY_STATISTICS_DAILY (สถิติรายวัน)

วัตถุประสงค์: เก็บสถิติการใช้บริการรายวันสำหรับการวิเคราะห์

Field Type Key Description
StatID VARCHAR(20) PK รหัสสถิติ
StatDate DATE วันที่
DepartmentCode VARCHAR(10) FK รหัสแผนก
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
ModalityCode VARCHAR(10) FK รหัสประเภทเครื่อง
TotalOrders INT จำนวนคำสั่งทั้งหมด
TotalExaminations INT จำนวนการตรวจทั้งหมด
CompletedExaminations INT จำนวนที่เสร็จสิ้น
CancelledOrders INT จำนวนที่ยกเลิก
StatOrders INT จำนวนแบบ STAT
RoutineOrders INT จำนวนแบบปกติ
TotalPatients INT จำนวนผู้ป่วย
NewPatients INT ผู้ป่วยใหม่
FollowUpPatients INT ผู้ป่วยติดตาม
OPDPatients INT ผู้ป่วยนอก
IPDPatients INT ผู้ป่วยใน
ERPatients INT ผู้ป่วยฉุกเฉิน
TotalFilmsUsed INT ฟิล์มที่ใช้ทั้งหมด
DamagedFilms INT ฟิล์มเสีย
TotalRevenue DECIMAL(15,2) รายได้รวม
AverageTAT INT TAT เฉลี่ย (นาที)
AverageWaitingTime INT เวลารอเฉลี่ย (นาที)
CreatedDate DATETIME วันที่สร้าง

Table: RADIOLOGY_PERFORMANCE_METRICS (ตัวชี้วัดประสิทธิภาพ)

วัตถุประสงค์: เก็บตัวชี้วัดประสิทธิภาพของระบบและบุคลากร

Field Type Key Description
MetricID VARCHAR(20) PK รหัสตัวชี้วัด
MetricDate DATE วันที่
MetricType VARCHAR(50) ประเภทตัวชี้วัด
TechnicianID VARCHAR(20) FK รหัสนักรังสีเทคนิค (ถ้ามี)
RadiologistID VARCHAR(20) FK รหัสรังสีแพทย์ (ถ้ามี)
RoomCode VARCHAR(10) FK รหัสห้องตรวจ (ถ้ามี)
TotalCases INT จำนวนเคสทั้งหมด
CompletedCases INT จำนวนเคสที่เสร็จ
PendingCases INT จำนวนเคสค้าง
OverdueCases INT จำนวนเคสเกิน TAT
AverageTAT INT TAT เฉลี่ย (นาที)
TATCompliance DECIMAL(5,2) % การทำตาม TAT
QualityScore DECIMAL(5,2) คะแนนคุณภาพ
RepeatRate DECIMAL(5,2) % การตรวจซ้ำ
FilmWasteRate DECIMAL(5,2) % ฟิล์มเสีย
PatientSatisfaction DECIMAL(5,2) คะแนนความพึงพอใจ
CreatedDate DATETIME วันที่สร้าง

8.2.9 ตารางอ้างอิงระบบอื่น (External System References)

หมายเหตุ: ตารางเหล่านี้อยู่ในระบบอื่นๆ แต่ระบบรังสีวิทยาจะอ้างอิงผ่าน Foreign Key

8.2.9.1 จากระบบเวชระเบียน (1.2.1)

  • PATIENT - ข้อมูลผู้ป่วยหลัก
  • VISIT - ข้อมูลการเข้ารับบริการ
  • DOCTORS - ข้อมูลแพทย์
  • DEPARTMENT - ข้อมูลแผนก

8.2.9.2 จากระบบตรวจสอบสิทธิ (1.2.15)

  • RIGHTTYPE - ประเภทสิทธิการรักษา
  • PATIENTRIGHT - สิทธิของผู้ป่วย
  • RIGHTSVERIFICATION - การยืนยันสิทธิ

8.2.9.3 จากระบบการเงิน (1.2.14)

  • TREATMENT_GROUP - กลุ่มค่ารักษาพยาบาล
  • FINANCIAL_CATEGORY - หมวดค่ารักษา
  • PAYMENT_TRANSACTION - รายการรับชำระเงิน

8.2.9.4 จากระบบผู้ดูแลระบบ (1.2.21)

  • USERS - ข้อมูลผู้ใช้งานระบบ
  • ROLES - บทบาทผู้ใช้งาน
  • PERMISSIONS - สิทธิการใช้งาน

8.2.10 Indexes และ Performance Optimization

8.2.10.1 Primary Keys (สร้างอัตโนมัติ)

ทุกตารางมี Primary Key ที่กำหนดไว้แล้ว

8.2.10.2 Foreign Keys (สำคัญต่อ Data Integrity)

-- RADIOLOGY_ORDER
ALTER TABLE RADIOLOGY_ORDER ADD CONSTRAINT FK_RadOrder_Visit 
    FOREIGN KEY (VisitID) REFERENCES VISIT(VisitID);
ALTER TABLE RADIOLOGY_ORDER ADD CONSTRAINT FK_RadOrder_Patient 
    FOREIGN KEY (HN) REFERENCES PATIENT(HN);
ALTER TABLE RADIOLOGY_ORDER ADD CONSTRAINT FK_RadOrder_Doctor 
    FOREIGN KEY (OrderingDoctorID) REFERENCES DOCTORS(DoctorID);

-- RADIOLOGY_ORDER_DETAIL
ALTER TABLE RADIOLOGY_ORDER_DETAIL ADD CONSTRAINT FK_RadOrderDetail_Order 
    FOREIGN KEY (OrderID) REFERENCES RADIOLOGY_ORDER(OrderID);
ALTER TABLE RADIOLOGY_ORDER_DETAIL ADD CONSTRAINT FK_RadOrderDetail_Test 
    FOREIGN KEY (XRayCode) REFERENCES RADIOLOGY_TEST_MASTER(XRayCode);

-- RADIOLOGY_REGISTRATION
ALTER TABLE RADIOLOGY_REGISTRATION ADD CONSTRAINT FK_RadReg_Order 
    FOREIGN KEY (OrderID) REFERENCES RADIOLOGY_ORDER(OrderID);
ALTER TABLE RADIOLOGY_REGISTRATION ADD CONSTRAINT FK_RadReg_Patient 
    FOREIGN KEY (HN) REFERENCES PATIENT(HN);

-- RADIOLOGY_RESULT
ALTER TABLE RADIOLOGY_RESULT ADD CONSTRAINT FK_RadResult_Exam 
    FOREIGN KEY (ExaminationID) REFERENCES RADIOLOGY_EXAMINATION(ExaminationID);
ALTER TABLE RADIOLOGY_RESULT ADD CONSTRAINT FK_RadResult_Patient 
    FOREIGN KEY (HN) REFERENCES PATIENT(HN);

8.2.10.3 Indexes (สำหรับ Performance)

-- Indexes สำหรับการค้นหา
CREATE INDEX IDX_RadOrder_HN ON RADIOLOGY_ORDER(HN);
CREATE INDEX IDX_RadOrder_DateTime ON RADIOLOGY_ORDER(OrderDateTime);
CREATE INDEX IDX_RadOrder_Status ON RADIOLOGY_ORDER(OrderStatus);
CREATE INDEX IDX_RadOrder_Urgency ON RADIOLOGY_ORDER(UrgencyLevel);

CREATE INDEX IDX_RadReg_XN ON RADIOLOGY_REGISTRATION(XN);
CREATE INDEX IDX_RadReg_HN ON RADIOLOGY_REGISTRATION(HN);
CREATE INDEX IDX_RadReg_Date ON RADIOLOGY_REGISTRATION(RegistrationDateTime);
CREATE INDEX IDX_RadReg_Status ON RADIOLOGY_REGISTRATION(RegistrationStatus);

CREATE INDEX IDX_RadResult_XN ON RADIOLOGY_RESULT(XN);
CREATE INDEX IDX_RadResult_HN ON RADIOLOGY_RESULT(HN);
CREATE INDEX IDX_RadResult_Status ON RADIOLOGY_RESULT(ResultStatus);
CREATE INDEX IDX_RadResult_DateTime ON RADIOLOGY_RESULT(ReportedDateTime);

CREATE INDEX IDX_RadBorrow_XN ON RADIOLOGY_FILM_BORROWING(XN);
CREATE INDEX IDX_RadBorrow_Status ON RADIOLOGY_FILM_BORROWING(BorrowingStatus);
CREATE INDEX IDX_RadBorrow_Overdue ON RADIOLOGY_FILM_BORROWING(IsOverdue);

-- Composite Indexes
CREATE INDEX IDX_RadOrder_Composite ON RADIOLOGY_ORDER(HN, OrderDateTime, OrderStatus);
CREATE INDEX IDX_RadReg_Composite ON RADIOLOGY_REGISTRATION(XN, RegistrationDateTime, RegistrationStatus);

8.2.10.4 Unique Constraints

-- XN ต้องไม่ซ้ำ
ALTER TABLE RADIOLOGY_REGISTRATION ADD CONSTRAINT UK_XN UNIQUE(XN);

-- ป้องกันการสั่งซ้ำในเวลาเดียวกัน
ALTER TABLE RADIOLOGY_ORDER ADD CONSTRAINT UK_Order_Visit_DateTime 
    UNIQUE(VisitID, OrderDateTime, OrderingDoctorID);

8.2.11 Business Rules และ Triggers

8.2.11.1 Auto-generate XN

-- Trigger สำหรับสร้าง XN อัตโนมัติ
CREATE TRIGGER TRG_Generate_XN
ON RADIOLOGY_REGISTRATION
AFTER INSERT
AS
BEGIN
    UPDATE RADIOLOGY_REGISTRATION
    SET XN = 'XN-' + FORMAT(GETDATE(), 'yyyyMMdd') + '-' + 
             RIGHT('00000' + CAST(IDENT_CURRENT('RADIOLOGY_REGISTRATION') AS VARCHAR), 5)
    WHERE RegistrationID IN (SELECT RegistrationID FROM inserted);
END;

8.2.11.2 Calculate TAT

-- Trigger คำนวณ TAT เมื่อออกผล
CREATE TRIGGER TRG_Calculate_TAT
ON RADIOLOGY_RESULT
AFTER UPDATE
AS
BEGIN
    UPDATE r
    SET r.TATMinutes = DATEDIFF(MINUTE, o.OrderDateTime, r.ReportedDateTime)
    FROM RADIOLOGY_RESULT r
    INNER JOIN inserted i ON r.ResultID = i.ResultID
    INNER JOIN RADIOLOGY_EXAMINATION e ON r.ExaminationID = e.ExaminationID
    INNER JOIN RADIOLOGY_ORDER o ON e.OrderDetailID IN (
        SELECT OrderDetailID FROM RADIOLOGY_ORDER_DETAIL WHERE OrderID = o.OrderID
    )
    WHERE i.ResultStatus = 'FINAL' AND i.ReportedDateTime IS NOT NULL;
END;

8.2.11.3 Check Overdue Film Borrowing

-- Trigger ตรวจสอบการยืมฟิล์มเกินกำหนด
CREATE TRIGGER TRG_Check_Overdue_Borrowing
ON RADIOLOGY_FILM_BORROWING
AFTER INSERT, UPDATE
AS
BEGIN
    UPDATE RADIOLOGY_FILM_BORROWING
    SET IsOverdue = 1,
        OverdueDays = DATEDIFF(DAY, ExpectedReturnDate, GETDATE())
    WHERE BorrowingStatus = 'BORROWED' 
    AND ExpectedReturnDate < GETDATE()
    AND ActualReturnDateTime IS NULL;
END;

8.2.12 Views สำหรับรายงาน

8.2.12.1 View: Pending Orders

CREATE VIEW VW_RADIOLOGY_PENDING_ORDERS AS
SELECT 
    o.OrderID,
    o.HN,
    p.FirstName + ' ' + p.LastName AS PatientName,
    o.OrderDateTime,
    o.UrgencyLevel,
    od.XRayName,
    d.DoctorName AS OrderingDoctor,
    dept.DepartmentName,
    o.OrderStatus
FROM RADIOLOGY_ORDER o
INNER JOIN PATIENT p ON o.HN = p.HN
INNER JOIN RADIOLOGY_ORDER_DETAIL od ON o.OrderID = od.OrderID
LEFT JOIN DOCTORS d ON o.OrderingDoctorID = d.DoctorID
LEFT JOIN DEPARTMENT dept ON o.OrderDepartmentCode = dept.DepartmentCode
WHERE o.OrderStatus IN ('PENDING', 'CONFIRMED')
ORDER BY o.UrgencyLevel DESC, o.OrderDateTime;

8.2.12.2 View: Today's Examinations

CREATE VIEW VW_RADIOLOGY_TODAY_EXAMS AS
SELECT 
    r.XN,
    r.HN,
    p.FirstName + ' ' + p.LastName AS PatientName,
    r.RegistrationDateTime,
    r.RoomCode,
    room.RoomName,
    e.XRayCode,
    tm.XRayName,
    r.RegistrationStatus,
    res.ResultStatus
FROM RADIOLOGY_REGISTRATION r
INNER JOIN PATIENT p ON r.HN = p.HN
LEFT JOIN RADIOLOGY_ROOM room ON r.RoomCode = room.RoomCode
LEFT JOIN RADIOLOGY_EXAMINATION e ON r.RegistrationID = e.RegistrationID
LEFT JOIN RADIOLOGY_TEST_MASTER tm ON e.XRayCode = tm.XRayCode
LEFT JOIN RADIOLOGY_RESULT res ON e.ExaminationID = res.ExaminationID
WHERE CAST(r.RegistrationDateTime AS DATE) = CAST(GETDATE() AS DATE)
ORDER BY r.RegistrationDateTime;

8.2.12.3 View: Film Borrowing Report

CREATE VIEW VW_RADIOLOGY_FILM_BORROWING_REPORT AS
SELECT 
    b.BorrowingID,
    b.XN,
    b.HN,
    p.FirstName + ' ' + p.LastName AS PatientName,
    b.BorrowerName,
    dept.DepartmentName,
    b.BorrowDateTime,
    b.ExpectedReturnDate,
    b.ActualReturnDateTime,
    b.BorrowingStatus,
    b.IsOverdue,
    b.OverdueDays,
    b.BorrowReason
FROM RADIOLOGY_FILM_BORROWING b
INNER JOIN PATIENT p ON b.HN = p.HN
LEFT JOIN DEPARTMENT dept ON b.DepartmentCode = dept.DepartmentCode
WHERE b.BorrowingStatus <> 'RETURNED'
ORDER BY b.IsOverdue DESC, b.BorrowDateTime;

8.2.13 Stored Procedures

8.2.13.1 SP: Create Radiology Order

CREATE PROCEDURE SP_CREATE_RADIOLOGY_ORDER
    @VisitID VARCHAR(20),
    @HN VARCHAR(10),
    @OrderingDoctorID VARCHAR(20),
    @UrgencyLevel VARCHAR(20),
    @XRayCodes VARCHAR(MAX), -- JSON Array
    @ClinicalIndication NTEXT,
    @CreatedBy VARCHAR(50)
AS
BEGIN
    -- สร้างคำสั่งตรวจและรายละเอียด
    -- Implementation here
END;

8.2.13.2 SP: Register Patient

CREATE PROCEDURE SP_REGISTER_RADIOLOGY_PATIENT
    @OrderID VARCHAR(20),
    @RoomCode VARCHAR(10),
    @TechnicianID VARCHAR(20),
    @RegisteredBy VARCHAR(50),
    @XN VARCHAR(15) OUTPUT
AS
BEGIN
    -- ลงทะเบียนและออก XN
    -- Implementation here
END;

8.2.13.3 SP: Report Result

CREATE PROCEDURE SP_REPORT_RADIOLOGY_RESULT
    @ExaminationID VARCHAR(20),
    @RadiologistID VARCHAR(20),
    @Findings NTEXT,
    @Impression NTEXT,
    @ResultStatus VARCHAR(20),
    @ReportedBy VARCHAR(50)
AS
BEGIN
    -- บันทึกผลการตรวจ
    -- Implementation here
END;

9. การเชื่อมโยงระบบ (System Integration)

9.1 API Endpoints

9.1.1 รับคำสั่งตรวจจากระบบอื่น

  • POST /api/radiology/orders - สร้างคำสั่งตรวจใหม่
  • GET /api/radiology/orders/{orderId} - ดึงข้อมูลคำสั่งตรวจ
  • PUT /api/radiology/orders/{orderId} - แก้ไขคำสั่งตรวจ
  • DELETE /api/radiology/orders/{orderId} - ยกเลิกคำสั่งตรวจ

9.1.2 ส่งผลกลับไปยังระบบที่สั่ง

  • POST /api/radiology/results/notify - แจ้งผลการตรวจ
  • GET /api/radiology/results/{xn} - ดึงผลการตรวจ
  • GET /api/radiology/images/{xn} - ดึงภาพรังสี

9.1.3 ตรวจสอบสิทธิ

  • POST /api/radiology/rights/verify - ตรวจสอบสิทธิก่อนตรวจ
  • GET /api/radiology/rights/{hn} - ดึงข้อมูลสิทธิผู้ป่วย

9.1.4 คำนวณค่าบริการ

  • POST /api/radiology/billing/calculate - คำนวณค่าบริการ
  • POST /api/radiology/billing/charge - คิดค่าบริการ

9.2 Data Flow Integration

ระบบห้องตรวจ (1.2.3)
    ↓ [สั่งตรวจ X-Ray]
ระบบรังสีวิทยา (1.2.8) → ระบบตรวจสอบสิทธิ (1.2.15) [ตรวจสอบสิทธิ]
    ↓ [ลงทะเบียน + ออก XN]
ระบบการเงิน (1.2.14) ← [คิดค่าบริการ]
    ↓ [ตรวจและรายงานผล]
ระบบห้องตรวจ (1.2.3) ← [ส่งผลกลับ]

9.3 Real-time Notifications

  • แจ้งเตือนเมื่อมีคำสั่งใหม่แบบ STAT
  • แจ้งเตือนเมื่อผลพร้อม (ส่งไปยังแพทย์ผู้สั่ง)
  • แจ้งเตือนผลวิกฤต (Critical Findings)
  • แจ้งเตือนการนัดหมาย

10. Security และ Privacy

10.1 Data Encryption

  • เข้ารหัสข้อมูลผู้ป่วยที่ sensitive (HN, CitizenID)
  • เข้ารหัสภาพรังสีที่จัดเก็บ

10.2 Access Control

  • กำหนดสิทธิการเข้าถึงตามบทบาท (Role-based)
  • บันทึก Audit Trail ทุกการเข้าถึงข้อมูล

10.3 PDPA Compliance

  • ปกป้องข้อมูลส่วนบุคคลตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล
  • มีระบบการลบข้อมูลตามกำหนดเวลา (Data Retention)

11. Backup และ Disaster Recovery

11.1 Database Backup

  • Full Backup: ทุกวัน เวลา 02:00 น.
  • Differential Backup: ทุก 6 ชั่วโมง
  • Transaction Log Backup: ทุก 30 นาที

11.2 Image Backup

  • สำรองภาพรังสีทั้งหมดไปยัง Secondary Storage
  • เก็บสำเนาที่ Offsite Location

11.3 Recovery Plan

  • RTO (Recovery Time Objective): 4 ชั่วโมง
  • RPO (Recovery Point Objective): 30 นาที

12. สรุป

เอกสาร Schema ระบบรังสีวิทยานี้ครอบคลุม:

ข้อมูลพื้นฐาน (Master Data) - รายการตรวจ, หมวดหมู่, ห้องตรวจ, อุปกรณ์
การสั่งตรวจ (Ordering) - รองรับการสั่งจากหลายจุด, ระบุท่า-ด้าน, ความเร่งด่วน
การลงทะเบียนและ XN - ออกเลข XN อัตโนมัติ, จัดการคิว
การรายงานผล - รองรับ Template, การล็อกผล, การอนุมัติ
การจัดการฟิล์ม - บันทึกการใช้ฟิล์ม, ฟิล์มเสีย, การยืม-คืน
การนัดหมาย - นัดฟังผลหรือตรวจซ้ำ
การเชื่อมโยงระบบ - API Integration กับระบบอื่น
Security & Audit - Audit Trail, Data Privacy
Performance - Indexes, Views, Stored Procedures

การปฏิบัติตาม TOR: - ✅ TOR ข้อ 1.2.8.1: ข้อมูลพื้นฐานและการเชื่อมโยงหมวดค่าบริการ - ✅ TOR ข้อ 1.2.8.2: การส่งตรวจรังสีวิทยา รองรับ Online - ✅ TOR ข้อ 1.2.8.3: การรายงานผลทางห้องรังสีวิทยา ครบทุกฟีเจอร์ - ✅ TOR ข้อ 1.2.8.4: การยืม-คืนฟิล์ม X-Ray - ✅ TOR ข้อ 1.2.8.5: รองรับการพิมพ์ทุกแบบฟอร์ม

ความสอดคล้องกับระบบอื่น: - เชื่อมโยงกับระบบเวชระเบียน (1.2.1), ซักประวัติ (1.2.2), ห้องตรวจ (1.2.3), ฉุกเฉิน (1.2.4) - เชื่อมโยงกับระบบนัดหมาย (1.2.6), งานชันสูตร (1.2.7) - เชื่อมโยงกับระบบตรวจสอบสิทธิ (1.2.15), การเงิน (1.2.14)


เอกสารนี้จัดทำขึ้นเพื่อใช้เป็นแนวทางในการพัฒนาระบบรังสีวิทยาที่เชื่อมโยงกับระบบอื่นๆ ในโรงพยาบาล และจะได้รับการปรับปรุงตามความต้องการที่เปลี่ยนแปลง