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

Database Schema Design

ระบบเภสัชกรรม (Pharmacy Information System)

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


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


Database Schema Design

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

ระบบเภสัชกรรมเป็นระบบศูนย์กลางการจัดการยาและเวชภัณฑ์ทั้งหมดของโรงพยาบาล ทำหน้าที่เป็น Pharmacy Hub System ที่รองรับการรับคำสั่งยาจากหน่วยตรวจต่างๆ การตรวจสอบความปลอดภัยของยา การจ่ายยา และการเชื่อมโยงกับระบบอื่นๆ ผ่าน API Integration:

  • ระบบเวชระเบียน (1.2.1): ข้อมูลผู้ป่วยหลักและการเข้ารับบริการ
  • ระบบซักประวัติ (1.2.2): ข้อมูลการแพ้ยาและประวัติการใช้ยา
  • ระบบห้องตรวจแพทย์ (1.2.3): การสั่งยาผู้ป่วยนอก (OPD)
  • ระบบห้องฉุกเฉิน (1.2.4): การสั่งยาฉุกเฉิน (STAT/ASAP)
  • ระบบทันตกรรม (1.2.5): การสั่งยาทันตกรรม
  • ระบบนัดหมาย (1.2.6): การคำนวณจำนวนยาตามวันนัด
  • ระบบงานชันสูตร (1.2.7): การดูผล Lab ประกอบการสั่งยา
  • ระบบการเงิน (1.2.14): การคำนวณค่าใช้จ่ายยาและเวชภัณฑ์
  • ระบบตรวจสอบสิทธิ (1.2.15): การกำหนดราคาตามสิทธิการรักษา
  • ระบบผู้ป่วยใน (1.2.17): การสั่งยาผู้ป่วยใน (IPD) และยากลับบ้าน

🔑 Pharmacy Hub Architecture

การระบุแหล่งที่มาของคำสั่งยา:

  • SourceSystem: ระบุระบบต้นทาง ('OPD', 'IPD', 'ER', 'DENTAL', 'CLINIC')
  • SourceID: รหัสอ้างอิงไปยัง ExaminationID, EmergencyCaseID, AdmissionID
  • PatientType: ประเภทผู้ป่วย ('OPD', 'IPD', 'ER')

การจัดการ Shared Integration:

  • การตรวจสอบ Drug Interaction แบบ Real-time
  • การเชื่อมโยงประวัติการแพ้ยาจากระบบซักประวัติ
  • การคำนวณราคาตามสิทธิการรักษา
  • การส่งข้อมูลค่าใช้จ่ายไปยังระบบการเงิน

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

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

8.2.13.1 ข้อมูลทะเบียนยาและเวชภัณฑ์หลัก

8.2.13.1.1 ตารางข้อมูลยาหลัก

Table: DRUG_MASTER (ข้อมูลทะเบียนยาและเวชภัณฑ์)

วัตถุประสงค์: เก็บข้อมูลทะเบียนยาและเวชภัณฑ์ครบถ้วน รวมถึงรหัสมาตรฐานต่างๆ รายละเอียดการใช้งาน และการเชื่อมโยงกับระบบอื่น ตาม TOR ข้อ 1.2.13.1.1-1.2.13.1.17

Field Type Key Description
DrugCode VARCHAR(20) PK รหัสยาของโรงพยาบาล (Primary)
GPOCode VARCHAR(20) รหัสยา GPO (องค์การเภสัชกรรม)
INVCode VARCHAR(20) รหัสยา INV (ระบบคลัง)
TMTCode VARCHAR(20) รหัสยา TMT (Thai Medical Terminology)
Standard24Code VARCHAR(24) รหัสยามาตรฐาน 24 หลัก (สปสช.)
GenericName NVARCHAR(200) ชื่อสามัญของยา (Generic Name)
TradeName NVARCHAR(200) ชื่อการค้า (Trade Name)
SearchKeywords NTEXT คำช่วยค้นหา (หลายชื่อ คั่นด้วย ;)
DrugCategoryID VARCHAR(20) FK รหัสหมวดหมู่ยา (อ้างอิง DRUG_CATEGORY)
TherapeuticGroupID VARCHAR(20) FK รหัสกลุ่มการออกฤทธิ์ (อ้างอิง THERAPEUTIC_GROUP)
DosageFormID VARCHAR(20) FK รหัสรูปแบบเภสัชภัณฑ์ (อ้างอิง DOSAGE_FORM)
Strength NVARCHAR(50) ความแรงของยา
StrengthUnit NVARCHAR(20) หน่วยความแรง (mg, g, ml, %)
Volume DECIMAL(10,2) ปริมาตร/ขนาด
VolumeUnit VARCHAR(20) หน่วยปริมาตร (ml, tablet, capsule)
UnitOfMeasure NVARCHAR(20) หน่วยนับ (เม็ด, แคปซูล, ขวด)
PackageSize INT จำนวนบรรจุต่อ Unit
DefaultQuantity INT จำนวนการสั่งเริ่มต้น
MaxQuantity INT จำนวนสั่งสูงสุด
TherapeuticUseThai NTEXT ประโยชน์ในการรักษา (ไทย)
TherapeuticUseEng NTEXT ประโยชน์ในการรักษา (อังกฤษ)
DirectionForUseThai NTEXT วิธีใช้ยา (ไทย)
DirectionForUseEng NTEXT วิธีใช้ยา (อังกฤษ)
LabelHelperThai NTEXT ฉลากช่วย (ไทย)
LabelHelperEng NTEXT ฉลากช่วย (อังกฤษ)
IsNationalList BIT ยาในบัญชียาหลักแห่งชาติ
IsControlledDrug BIT ยาควบคุมพิเศษ
ControlledDrugTypeID VARCHAR(10) FK ประเภทยาควบคุม (อ้างอิง CONTROLLED_DRUG_TYPE)
IsHighAlert BIT ยาเสี่ยงสูง (High Alert Medication)
IsRefrigerated BIT ต้องเก็บในตู้เย็น
IsNarcotic BIT ยาเสพติดให้โทษ
CostPrice DECIMAL(10,2) ราคาทุน
SellingPriceOPD DECIMAL(10,2) ราคาขายผู้ป่วยนอก
SellingPriceIPD DECIMAL(10,2) ราคาขายผู้ป่วยใน
IsActive BIT ใช้งานได้
IsDiscontinued BIT หยุดจำหน่าย
DiscontinuedMessage NTEXT ข้อความแจ้งเตือนเมื่อหยุดจำหน่าย
IsOutOfStock BIT ยาหมดในโรงพยาบาล
OutOfStockMessage NTEXT ข้อความแจ้งเตือนเมื่อยาหมด
AutoCalculateDays BIT คำนวณจำนวนเม็ดตามวันนัด
ImagePath VARCHAR(255) path รูปภาพยา
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: DRUG_INGREDIENT (ส่วนประกอบสำคัญของยา)

วัตถุประสงค์: เก็บรายละเอียดส่วนประกอบสำคัญ (Active Ingredient) ของยาแต่ละรายการ ตาม TOR ข้อ 1.2.13.1.7

Field Type Key Description
IngredientID VARCHAR(20) PK รหัสส่วนประกอบ
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
IngredientName NVARCHAR(200) ชื่อส่วนประกอบ
IngredientStrength NVARCHAR(50) ความแรงของส่วนประกอบ
IngredientUnit NVARCHAR(20) หน่วยความแรง
IsActive BIT ใช้งานได้

Table: DRUG_PRICE (ราคายาตามสิทธิ)

วัตถุประสงค์: เก็บข้อมูลราคายาตามสิทธิการรักษาต่างๆ และประเภทการชำระเงิน ตาม TOR ข้อ 1.2.13.1.13-1.2.13.1.14

Field Type Key Description
DrugPriceID VARCHAR(20) PK รหัสราคายา
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
RightTypeID VARCHAR(20) FK รหัสสิทธิการรักษา (อ้างอิง RIGHT_TYPES จาก 1.2.15)
Price DECIMAL(10,2) ราคาขาย
Copayment DECIMAL(10,2) ค่าใช้จ่ายส่วนตัว (Copayment)
PaymentType VARCHAR(20) ประเภทการชำระเงิน (FREE/PARTIAL/FULL)
EffectiveDate DATE วันที่เริ่มใช้ราคา
ExpiryDate DATE วันที่สิ้นสุด
IsActive BIT ใช้งานได้

Table: DRUG_AUTHORIZATION (สิทธิการสั่งใช้ยา)

วัตถุประสงค์: กำหนดสิทธิการสั่งใช้ยาตามกลุ่มผู้ใช้งาน ผู้ป่วย และสิทธิการรักษา ตาม TOR ข้อ 1.2.13.1.6

Field Type Key Description
AuthorizationID VARCHAR(20) PK รหัสสิทธิการสั่งใช้
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
UserGroupID VARCHAR(20) FK รหัสกลุ่มผู้ใช้งาน (DOCTOR/DENTIST/NURSE/PHARMACIST)
SpecialistTypeID VARCHAR(20) FK รหัสแพทย์เฉพาะทาง (ถ้ามี)
PatientTypeAllowed VARCHAR(50) ประเภทผู้ป่วยที่อนุญาต (OPD/IPD/ER)
RightTypeAllowed VARCHAR(255) สิทธิที่อนุญาต (คั่นด้วย ;)
RequireApproval BIT ต้องขออนุมัติ
IsActive BIT ใช้งานได้

8.2.13.1.2 ตารางความปลอดภัยและการตรวจสอบยา

Table: DRUG_INTERACTION (อันตรกิริยาระหว่างยา)

วัตถุประสงค์: เก็บข้อมูล Drug Interaction ระหว่างยา 2 รายการที่มีผลต่อกัน พร้อมระดับความรุนแรง ตาม TOR ข้อ 1.2.13.1.18-1.2.13.1.20

Field Type Key Description
InteractionID VARCHAR(20) PK รหัสอันตรกิริยา
DrugCode1 VARCHAR(20) FK รหัสยาตัวที่ 1 (อ้างอิง DRUG_MASTER)
DrugCode2 VARCHAR(20) FK รหัสยาตัวที่ 2 (อ้างอิง DRUG_MASTER)
InteractionName NVARCHAR(200) ชื่ออันตรกิริยา
SeverityLevel VARCHAR(20) ระดับความรุนแรง (MILD/MODERATE/SEVERE/CONTRAINDICATED)
ClinicalEffect NTEXT ผลทางคลินิก
Mechanism NTEXT กลไกการเกิดอันตรกิริยา
Management NTEXT การจัดการ
ShowWarning BIT แสดงคำเตือน
BlockPrescription BIT บล็อกการสั่งยา
WarningMessageThai NTEXT ข้อความเตือน (ไทย)
WarningMessageEng NTEXT ข้อความเตือน (อังกฤษ)
ReferenceSource NVARCHAR(200) แหล่งอ้างอิง
IsActive BIT ใช้งานได้
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: DRUG_CONTRAINDICATION (ข้อห้ามใช้ยากับโรค)

วัตถุประสงค์: เก็บข้อมูลตัวยาที่ห้ามสั่งจ่ายกับรหัสโรค (ICD10) ตาม TOR ข้อ 1.2.13.1.17

Field Type Key Description
ContraindicationID VARCHAR(20) PK รหัสข้อห้ามใช้
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
ICDCode VARCHAR(10) FK รหัส ICD-10 (อ้างอิง ICD_CODES)
ContraindicationType VARCHAR(20) ประเภท (ABSOLUTE/RELATIVE)
SeverityLevel VARCHAR(20) ระดับความรุนแรง (MILD/MODERATE/SEVERE)
ClinicalReason NTEXT เหตุผลทางคลินิก
ShowWarning BIT แสดงคำเตือน
BlockPrescription BIT บล็อกการสั่งยา
WarningMessage NTEXT ข้อความเตือน
IsActive BIT ใช้งานได้

Table: DRUG_ALERT_CONFIG (การตั้งค่าการแจ้งเตือน)

วัตถุประสงค์: กำหนดการแจ้งเตือน Notify สำหรับกลุ่มผู้ป่วยพิเศษ ตาม TOR ข้อ 1.2.13.1.12

Field Type Key Description
AlertConfigID VARCHAR(20) PK รหัสการตั้งค่าเตือน
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
AlertType VARCHAR(20) ประเภทการเตือน (PREGNANCY/BREASTFEEDING/PEDIATRIC/G6PD/GENDER/ELDERLY)
SeverityLevel VARCHAR(20) ระดับความรุนแรง (MILD/MODERATE/SEVERE/CONTRAINDICATED)
PregnancyCategory VARCHAR(5) หมวด FDA Pregnancy (A/B/C/D/X)
MinAge INT อายุต่ำสุด (สำหรับ PEDIATRIC)
MaxAge INT อายุสูงสุด (สำหรับ ELDERLY)
Gender CHAR(1) เพศที่เกี่ยวข้อง (M/F)
ShowWarning BIT แสดงคำเตือน
BlockPrescription BIT บล็อกการสั่งยา
WarningMessageThai NTEXT ข้อความเตือน (ไทย)
WarningMessageEng NTEXT ข้อความเตือน (อังกฤษ)
Recommendation NTEXT ข้อแนะนำ
IsActive BIT ใช้งานได้

Table: INTERACTION_CHECK_LOG (บันทึกการตรวจสอบอันตรกิริยา)

วัตถุประสงค์: บันทึกการตรวจสอบ Drug Interaction และการแพ้ยาทุกครั้งที่มีการสั่งยา เพื่อความปลอดภัยและการตรวจสอบย้อนหลัง

Field Type Key Description
CheckLogID VARCHAR(20) PK รหัสบันทึกการตรวจสอบ
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
HN VARCHAR(10) FK รหัสผู้ป่วย
CheckDateTime DATETIME วันเวลาที่ตรวจสอบ
CheckType VARCHAR(50) ประเภทการตรวจสอบ (DRUG_INTERACTION/ALLERGY/CONTRAINDICATION/ALERT)
DrugCode1 VARCHAR(20) FK รหัสยาตัวที่ 1
DrugCode2 VARCHAR(20) FK รหัสยาตัวที่ 2 (ถ้ามี)
InteractionID VARCHAR(20) FK รหัสอันตรกิริยา (ถ้ามี)
SeverityLevel VARCHAR(20) ระดับความรุนแรง
WarningMessage NTEXT ข้อความเตือน
UserResponse VARCHAR(20) การตอบสนองของผู้ใช้ (PROCEED/CANCEL/MODIFY)
OverrideReason NTEXT เหตุผลการข้ามคำเตือน
CheckedBy VARCHAR(50) ผู้ตรวจสอบ
IsWarningShown BIT แสดงคำเตือนแล้ว

8.2.13.2 ตารางการสั่งยาและจ่ายยา

8.2.13.2.1 ตารางคำสั่งยาหลัก

Table: PRESCRIPTION_ORDER (คำสั่งยาหลัก)

วัตถุประสงค์: เก็บข้อมูลคำสั่งยาหลักจากทุกหน่วยตรวจ (OPD/IPD/ER/Dental) เป็นตารางศูนย์กลางของระบบเภสัชกรรม ตาม TOR ข้อ 1.2.13.2 และ 1.2.13.3

Field Type Key Description
PrescriptionOrderID VARCHAR(20) PK รหัสคำสั่งยา (RX-XXXXXXXXXXX)
HN VARCHAR(10) FK รหัสผู้ป่วย (อ้างอิง PATIENT จาก 1.2.1)
VisitID VARCHAR(20) FK รหัสการเข้ารับบริการ (อ้างอิง VISIT จาก 1.2.1)
SourceSystem VARCHAR(20) ระบบต้นทาง (OPD/IPD/ER/DENTAL/CLINIC)
SourceID VARCHAR(20) รหัสอ้างอิงต้นทาง (ExaminationID/EmergencyCaseID/AdmissionID)
PatientType VARCHAR(20) ประเภทผู้ป่วย (OPD/IPD/ER)
PrescriptionType VARCHAR(20) ประเภทการสั่งยา (REGULAR/TEMPLATE/RE_MED/STAT/PRN)
OrderDateTime DATETIME วันเวลาที่สั่งยา
DoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง (อ้างอิง DOCTORS)
DepartmentCode VARCHAR(10) FK รหัสแผนก
RightTypeID VARCHAR(20) FK รหัสสิทธิการรักษา (อ้างอิง 1.2.15)
RightsVerificationID VARCHAR(20) FK รหัสการยืนยันสิทธิ (อ้างอิง 1.2.15)
OrderStatus VARCHAR(20) สถานะคำสั่ง (PENDING/VERIFIED/DISPENSED/CANCELLED)
IPDOrderType VARCHAR(20) ประเภทคำสั่ง IPD (CONTINUE/ONE_DAY/STAT/DISCHARGE)
StartDate DATE วันเริ่มใช้ยา (สำหรับ IPD Continue Order)
EndDate DATE วันสิ้นสุดใช้ยา (สำหรับ IPD Continue Order)
DayDose INT จำนวนวันที่ใช้ยา
IsPregnant BIT สถานะตั้งครรภ์
IsBreastfeeding BIT สถานะให้นมบุตร
TemplateID VARCHAR(20) FK รหัส Template (ถ้าใช้)
TemplateName NVARCHAR(100) ชื่อ Template
TotalCost DECIMAL(10,2) ค่าใช้จ่ายรวม
Copayment DECIMAL(10,2) ค่าใช้จ่ายส่วนตัว
PaymentStatus VARCHAR(20) สถานะการชำระเงิน (PENDING/PAID/CANCELLED)
FinanceReferenceID VARCHAR(20) FK รหัสอ้างอิงระบบการเงิน (1.2.14)
Notes NTEXT หมายเหตุ
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
CancelledDate DATETIME วันที่ยกเลิก
CancelledBy VARCHAR(50) ผู้ยกเลิก
CancellationReason NTEXT เหตุผลการยกเลิก

Table: PRESCRIPTION_ITEM (รายการยาในใบสั่ง)

วัตถุประสงค์: เก็บรายละเอียดยาแต่ละรายการในคำสั่งยา รองรับการสั่งยา OPD และ IPD ตาม TOR ข้อ 1.2.13.2 และ 1.2.13.3

Field Type Key Description
PrescriptionItemID VARCHAR(20) PK รหัสรายการยา
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
ItemSequence INT ลำดับรายการ
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
Quantity DECIMAL(10,2) จำนวนที่สั่ง
QuantityUnit NVARCHAR(20) หน่วยจำนวน
Dosage NVARCHAR(50) ขนาดยา (เช่น 1 เม็ด, 5 ml)
Frequency NVARCHAR(50) ความถี่ (เช่น วันละ 3 ครั้ง, TID, QID)
Route NVARCHAR(50) วิธีการให้ยา (PO, IV, IM, SC)
Duration INT ระยะเวลา (วัน)
DirectionThai NTEXT วิธีใช้ยา (ไทย)
DirectionEng NTEXT วิธีใช้ยา (อังกฤษ)
SpecialInstruction NTEXT คำแนะนำพิเศษ
IsPRN BIT ยาเมื่อมีอาการ (PRN)
IsSTAT BIT ยาเร่งด่วน (STAT)
IsContinue BIT ยาต่อเนื่อง (IPD Continue Order)
IsDischargeOrder BIT ยากลับบ้าน
UnitPrice DECIMAL(10,2) ราคาต่อหน่วย
TotalPrice DECIMAL(10,2) ราคารวม
Copayment DECIMAL(10,2) ค่าใช้จ่ายส่วนตัว
ItemStatus VARCHAR(20) สถานะรายการ (PENDING/VERIFIED/DISPENSED/CANCELLED)
IsNationalList BIT ยาในบัญชี
IsOutOfFormulary BIT ยานอกบัญชี
OutOfFormularyReason NTEXT เหตุผลขอยานอกบัญชี
RequireApproval BIT ต้องขออนุมัติ
ApprovalStatus VARCHAR(20) สถานะการอนุมัติ
ApprovedBy VARCHAR(50) ผู้อนุมัติ
ApprovalDate DATETIME วันที่อนุมัติ
PrintLabel BIT พิมพ์สติกเกอร์
LabelPrinted BIT พิมพ์สติกเกอร์แล้ว
DispensedQuantity DECIMAL(10,2) จำนวนที่จ่ายจริง
DispensedBy VARCHAR(50) ผู้จ่ายยา
DispensedDate DATETIME วันที่จ่ายยา
Notes NTEXT หมายเหตุ

Table: PRESCRIPTION_MODIFICATION_LOG (บันทึกการแก้ไขคำสั่งยา)

วัตถุประสงค์: บันทึกประวัติการแก้ไขและยกเลิกคำสั่งยาเพื่อความปลอดภัยและการตรวจสอบ ตาม TOR ข้อ 1.2.13.4

Field Type Key Description
ModificationLogID VARCHAR(20) PK รหัสบันทึกการแก้ไข
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา (อ้างอิง PRESCRIPTION_ITEM)
ModificationType VARCHAR(20) ประเภทการแก้ไข (ADD/EDIT/DELETE/CANCEL/PRICE_CHANGE)
ModificationDateTime DATETIME วันเวลาที่แก้ไข
OldValue NTEXT ค่าเดิม (JSON Format)
NewValue NTEXT ค่าใหม่ (JSON Format)
Reason NTEXT เหตุผลการแก้ไข
ModifiedBy VARCHAR(50) ผู้แก้ไข
PaymentStatus VARCHAR(20) สถานะการชำระเงินขณะแก้ไข
RequireReceiptCancel BIT ต้องยกเลิกใบเสร็จรับเงิน
ReceiptCancelReferenceID VARCHAR(20) รหัสอ้างอิงการยกเลิกใบเสร็จ

8.2.13.2.2 ตารางการจ่ายยาและการตรวจสอบ

Table: MEDICATION_DISPENSING (การจ่ายยา)

วัตถุประสงค์: เก็บข้อมูลการจ่ายยาจริงให้กับผู้ป่วยแต่ละครั้ง รองรับการจ่ายยา OPD และ IPD ตาม TOR ข้อ 1.2.13.5

Field Type Key Description
DispensingID VARCHAR(20) PK รหัสการจ่ายยา (DIS-XXXXXXXXXXX)
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา (อ้างอิง PRESCRIPTION_ITEM)
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัสการเข้ารับบริการ
PatientType VARCHAR(20) ประเภทผู้ป่วย (OPD/IPD/ER)
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
DispensedQuantity DECIMAL(10,2) จำนวนที่จ่าย
DispensedUnit NVARCHAR(20) หน่วยที่จ่าย
DispensingDateTime DATETIME วันเวลาที่จ่ายยา
DispensingType VARCHAR(20) ประเภทการจ่าย (REGULAR/STAT/CONTINUE/DISCHARGE)
PharmacistID VARCHAR(20) FK รหัสเภสัชกรผู้จ่าย (อ้างอิง STAFF)
VerifiedBy VARCHAR(20) FK ผู้ตรวจสอบ (เภสัชกร)
VerifiedDateTime DATETIME วันเวลาที่ตรวจสอบ
BatchNumber VARCHAR(50) หมายเลข Batch
ExpiryDate DATE วันหมดอายุ
LotNumber VARCHAR(50) หมายเลข Lot
StorageLocation NVARCHAR(100) ตำแหน่งเก็บยา
UnitPrice DECIMAL(10,2) ราคาต่อหน่วย
TotalPrice DECIMAL(10,2) ราคารวม
LabelPrinted BIT พิมพ์ฉลากยาแล้ว
LabelPrintCount INT จำนวนครั้งที่พิมพ์ฉลาก
PatientCounseling BIT ให้คำปรึกษาแล้ว
CounselingNotes NTEXT หมายเหตุการให้คำปรึกษา
DispensingStatus VARCHAR(20) สถานะการจ่าย (COMPLETED/PARTIAL/RETURNED)
Notes NTEXT หมายเหตุ

Table: MEDICATION_VERIFICATION (การตรวจสอบยา)

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

Field Type Key Description
VerificationID VARCHAR(20) PK รหัสการตรวจสอบ (VRF-XXXXXXXXXXX)
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
HN VARCHAR(10) FK รหัสผู้ป่วย
VerificationDateTime DATETIME วันเวลาที่ตรวจสอบ
PharmacistID VARCHAR(20) FK รหัสเภสัชกรผู้ตรวจสอบ
VerificationType VARCHAR(20) ประเภทการตรวจสอบ (INITIAL/FINAL/DOUBLE_CHECK)
DrugInteractionChecked BIT ตรวจสอบ Drug Interaction แล้ว
AllergyChecked BIT ตรวจสอบการแพ้ยาแล้ว
ContraindicationChecked BIT ตรวจสอบข้อห้ามใช้แล้ว
DoseChecked BIT ตรวจสอบขนาดยาแล้ว
RouteChecked BIT ตรวจสอบวิธีการให้ยาแล้ว
DuplicationChecked BIT ตรวจสอบการสั่งซ้ำแล้ว
VerificationResult VARCHAR(20) ผลการตรวจสอบ (APPROVED/REJECTED/PENDING_CLARIFICATION)
Issues NTEXT ปัญหาที่พบ
PharmacistNotes NTEXT หมายเหตุของเภสัชกร
ClarificationRequested BIT ขอชี้แจงจากแพทย์
ClarificationNotes NTEXT หมายเหตุการขอชี้แจง
DoctorResponse NTEXT คำตอบจากแพทย์
FinalDecision VARCHAR(20) การตัดสินใจสุดท้าย (PROCEED/CANCEL/MODIFY)

Table: MEDICATION_PROFILE (ประวัติการใช้ยา)

วัตถุประสงค์: เก็บข้อมูลประวัติการใช้ยาของผู้ป่วยแบบครบวงจร (Profile Sheet) สำหรับผู้ป่วยใน ตาม TOR ข้อ 1.2.13.3.5

Field Type Key Description
ProfileID VARCHAR(20) PK รหัส Profile
HN VARCHAR(10) FK รหัสผู้ป่วย
AdmissionID VARCHAR(20) FK รหัสการ Admit (อ้างอิง 1.2.17)
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา
DrugCode VARCHAR(20) FK รหัสยา
StartDate DATE วันเริ่มใช้
EndDate DATE วันสิ้นสุด
OrderType VARCHAR(20) ประเภทคำสั่ง (CONTINUE/ONE_DAY/STAT/PRN)
Dosage NVARCHAR(50) ขนาดยา
Frequency NVARCHAR(50) ความถี่
Route NVARCHAR(50) วิธีการให้ยา
IsContinuing BIT ยังใช้อยู่
DiscontinuedDate DATE วันที่หยุด
DiscontinuedReason NTEXT เหตุผลที่หยุด
TotalAdministered INT จำนวนครั้งที่ให้แล้ว
LastAdministeredDate DATETIME วันเวลาให้ครั้งล่าสุด

Table: DRUG_ADMINISTRATION_RECORD (บันทึกการให้ยา IPD)

วัตถุประสงค์: บันทึกการให้ยาผู้ป่วยในแต่ละครั้ง (MAR - Medication Administration Record) ตาม TOR ข้อ 1.2.13.3

Field Type Key Description
AdministrationID VARCHAR(20) PK รหัสการให้ยา (ADM-XXXXXXXXXXX)
ProfileID VARCHAR(20) FK รหัส Profile (อ้างอิง MEDICATION_PROFILE)
HN VARCHAR(10) FK รหัสผู้ป่วย
AdmissionID VARCHAR(20) FK รหัสการ Admit
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา
DrugCode VARCHAR(20) FK รหัสยา
ScheduledDateTime DATETIME วันเวลาที่กำหนดให้ยา
ActualDateTime DATETIME วันเวลาที่ให้ยาจริง
AdministeredQuantity DECIMAL(10,2) จำนวนที่ให้
AdministeredBy VARCHAR(20) FK ผู้ให้ยา (พยาบาล)
WitnessedBy VARCHAR(20) FK ผู้เป็นพยาน (สำหรับยาควบคุม)
AdministrationRoute NVARCHAR(50) วิธีการให้
AdministrationSite NVARCHAR(100) ตำแหน่งที่ให้ (สำหรับ IM, SC)
AdministrationStatus VARCHAR(20) สถานะ (GIVEN/REFUSED/HELD/MISSED)
RefusalReason NTEXT เหตุผลที่ผู้ป่วยปฏิเสธ
HoldReason NTEXT เหตุผลที่งดให้ยา
PatientResponse NTEXT อาการของผู้ป่วยหลังได้รับยา
AdverseReaction BIT มีอาการไม่พึงประสงค์
AdverseReactionDetail NTEXT รายละเอียดอาการไม่พึงประสงค์
Notes NTEXT หมายเหตุ

Table: DRUG_RETURN (การคืนยา)

วัตถุประสงค์: เก็บข้อมูลการคืนยาของผู้ป่วยใน ตาม TOR ข้อ 1.2.13.3.6

Field Type Key Description
ReturnID VARCHAR(20) PK รหัสการคืนยา (RTN-XXXXXXXXXXX)
HN VARCHAR(10) FK รหัสผู้ป่วย
AdmissionID VARCHAR(20) FK รหัสการ Admit
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
ReturnDateTime DATETIME วันเวลาที่คืน
ReturnQuantity DECIMAL(10,2) จำนวนที่คืน
ReturnReason VARCHAR(50) เหตุผลการคืน (DISCHARGE/DISCONTINUED/EXCESS/EXPIRED)
ReturnReasonDetail NTEXT รายละเอียดเหตุผล
ReturnCondition VARCHAR(20) สภาพยา (GOOD/DAMAGED/OPENED)
RefundAmount DECIMAL(10,2) จำนวนเงินคืน
ReceivedBy VARCHAR(20) FK เภสัชกรผู้รับคืน
ReturnedBy VARCHAR(20) FK ผู้คืนยา (พยาบาล/ผู้ป่วย)
IsRefunded BIT คืนเงินแล้ว
RefundReferenceID VARCHAR(20) รหัสอ้างอิงการคืนเงิน
Notes NTEXT หมายเหตุ

8.2.13.3 ตาราง Template และการตั้งค่า

8.2.13.3.1 ตารางชุดยาและ Template

Table: DRUG_TEMPLATE (ชุดยาสำเร็จรูป)

วัตถุประสงค์: เก็บข้อมูลชุดยา (Template) ที่แพทย์กำหนดไว้ล่วงหน้าเพื่อความสะดวกในการสั่งยา ตาม TOR ข้อ 1.2.13.2.2

Field Type Key Description
TemplateID VARCHAR(20) PK รหัส Template (TPL-XXXXXXXXXXX)
TemplateName NVARCHAR(100) ชื่อ Template
TemplateDescription NTEXT รายละเอียด Template
TemplateType VARCHAR(20) ประเภท (PERSONAL/DEPARTMENT/HOSPITAL)
DoctorID VARCHAR(20) FK รหัสแพทย์เจ้าของ (กรณี PERSONAL)
DepartmentCode VARCHAR(10) FK รหัสแผนก (กรณี DEPARTMENT)
DiseaseCategoryID VARCHAR(20) FK รหัสหมวดโรค (ถ้ามี)
ICDCode VARCHAR(10) FK รหัส ICD-10 (ถ้าเฉพาะเจาะจง)
IsActive BIT ใช้งานได้
UsageCount INT จำนวนครั้งที่ใช้
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
LastUsedDate DATETIME วันที่ใช้ล่าสุด

Table: DRUG_TEMPLATE_ITEM (รายการยาใน Template)

วัตถุประสงค์: เก็บรายการยาในแต่ละ Template พร้อมรายละเอียดการใช้งาน

Field Type Key Description
TemplateItemID VARCHAR(20) PK รหัสรายการ Template
TemplateID VARCHAR(20) FK รหัส Template (อ้างอิง DRUG_TEMPLATE)
ItemSequence INT ลำดับรายการ
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิง DRUG_MASTER)
DefaultQuantity DECIMAL(10,2) จำนวนเริ่มต้น
DefaultDosage NVARCHAR(50) ขนาดยาเริ่มต้น
DefaultFrequency NVARCHAR(50) ความถี่เริ่มต้น
DefaultRoute NVARCHAR(50) วิธีการให้เริ่มต้น
DefaultDuration INT ระยะเวลาเริ่มต้น (วัน)
DefaultDirectionThai NTEXT วิธีใช้เริ่มต้น (ไทย)
DefaultDirectionEng NTEXT วิธีใช้เริ่มต้น (อังกฤษ)
IsMandatory BIT บังคับต้องมีในชุด
IsEditable BIT แก้ไขได้เมื่อใช้งาน
Notes NTEXT หมายเหตุ

Table: RE_MED_HISTORY (ประวัติการสั่งยาซ้ำ)

วัตถุประสงค์: เก็บข้อมูลการสั่งยาซ้ำ (RE-MED) เพื่อติดตามและวิเคราะห์ ตาม TOR ข้อ 1.2.13.2.3

Field Type Key Description
ReMedID VARCHAR(20) PK รหัสการสั่งยาซ้ำ
HN VARCHAR(10) FK รหัสผู้ป่วย
OriginalPrescriptionID VARCHAR(20) FK รหัสคำสั่งยาต้นฉบับ
NewPrescriptionID VARCHAR(20) FK รหัสคำสั่งยาใหม่
ReMedDateTime DATETIME วันเวลาที่สั่งยาซ้ำ
ReMedBy VARCHAR(50) ผู้สั่งยาซ้ำ
ItemsSelected NTEXT รายการยาที่เลือก (JSON Array)
ItemsModified NTEXT รายการที่มีการแก้ไข (JSON Array)
ModificationNotes NTEXT หมายเหตุการแก้ไข

8.2.13.3.2 ตารางการตั้งค่าระบบ

Table: PHARMACY_CONFIG (การตั้งค่าระบบเภสัชกรรม)

วัตถุประสงค์: เก็บการตั้งค่าต่างๆ ของระบบเภสัชกรรม

Field Type Key Description
ConfigID VARCHAR(20) PK รหัสการตั้งค่า
ConfigCategory VARCHAR(50) หมวดการตั้งค่า (INTERACTION/DISPENSING/PRICING/PRINTING)
ConfigKey VARCHAR(100) รหัสการตั้งค่า
ConfigValue NTEXT ค่าตั้งค่า
ConfigDataType VARCHAR(20) ประเภทข้อมูล (STRING/NUMBER/BOOLEAN/JSON)
ConfigDescription NTEXT คำอธิบาย
IsSystemConfig BIT การตั้งค่าระบบ (ไม่ควรแก้ไข)
DepartmentCode VARCHAR(10) FK รหัสแผนก (ถ้าเป็นการตั้งค่าเฉพาะแผนก)
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไข

Table: INTERACTION_CHECK_CONFIG (การตั้งค่าการตรวจสอบอันตรกิริยา)

วัตถุประสงค์: กำหนดการตั้งค่าการตรวจสอบ Drug Interaction ตาม TOR ข้อ 1.2.13.1.20

Field Type Key Description
CheckConfigID VARCHAR(20) PK รหัสการตั้งค่า
EnableInteractionCheck BIT เปิดใช้งานการตรวจสอบ
CheckHistoryDays INT ตรวจสอบย้อนหลังกี่วัน
CheckCurrentVisitOnly BIT ตรวจสอบเฉพาะ Visit ปัจจุบัน
CheckIPDOrders BIT ตรวจสอบคำสั่งยา IPD
CheckOPDOrders BIT ตรวจสอบคำสั่งยา OPD
CheckEROrders BIT ตรวจสอบคำสั่งยา ER
MinSeverityToWarn VARCHAR(20) ระดับความรุนแรงขั้นต่ำที่แจ้งเตือน
MinSeverityToBlock VARCHAR(20) ระดับความรุนแรงขั้นต่ำที่บล็อก
AllowOverride BIT อนุญาตให้ข้ามคำเตือน
RequireOverrideReason BIT ต้องระบุเหตุผลเมื่อข้าม
NotifyPharmacist BIT แจ้งเภสัชกรเมื่อข้ามคำเตือน

Table: LABEL_PRINT_CONFIG (การตั้งค่าการพิมพ์ฉลากยา)

วัตถุประสงค์: กำหนดรูปแบบและการตั้งค่าการพิมพ์ฉลากยา ตาม TOR ข้อ 1.2.13.6

Field Type Key Description
LabelConfigID VARCHAR(20) PK รหัสการตั้งค่า
LabelType VARCHAR(20) ประเภทฉลาก (STANDARD/CONTROLLED/REFRIGERATED/HIGH_ALERT)
LabelSize VARCHAR(20) ขนาดฉลาก (SMALL/MEDIUM/LARGE)
PrintLanguage VARCHAR(20) ภาษา (THAI/ENGLISH/BOTH)
IncludeBarcode BIT พิมพ์บาร์โค้ด
IncludeDrugImage BIT พิมพ์รูปยา
IncludePatientInfo BIT พิมพ์ข้อมูลผู้ป่วย
IncludeWarnings BIT พิมพ์คำเตือน
AutoPrintOnDispense BIT พิมพ์อัตโนมัติเมื่อจ่าย
PrinterName NVARCHAR(100) ชื่อเครื่องพิมพ์
LabelTemplate NTEXT Template ฉลาก
IsDefault BIT การตั้งค่าเริ่มต้น

8.2.13.4 ตาราง Master Data และการจำแนกประเภท

8.2.13.4.1 ตารางหมวดหมู่และการจำแนกยา

Table: DRUG_CATEGORY (หมวดหมู่ยา)

วัตถุประสงค์: จัดหมวดหมู่ยาตามประเภทและการใช้งาน

Field Type Key Description
DrugCategoryID VARCHAR(20) PK รหัสหมวดหมู่ยา
CategoryName NVARCHAR(100) ชื่อหมวดหมู่ (ไทย)
CategoryNameEng NVARCHAR(100) ชื่อหมวดหมู่ (อังกฤษ)
ParentCategoryID VARCHAR(20) FK รหัสหมวดหมู่แม่ (สำหรับ Sub-category)
CategoryLevel INT ระดับหมวดหมู่
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: THERAPEUTIC_GROUP (กลุ่มการออกฤทธิ์)

วัตถุประสงค์: จัดกลุ่มยาตามกลไกการออกฤทธิ์ทางเภสัชวิทยา ตาม TOR ข้อ 1.2.13.1.4

Field Type Key Description
TherapeuticGroupID VARCHAR(20) PK รหัสกลุ่มการออกฤทธิ์
GroupName NVARCHAR(100) ชื่อกลุ่ม (ไทย)
GroupNameEng NVARCHAR(100) ชื่อกลุ่ม (อังกฤษ)
ATCCode VARCHAR(10) รหัส ATC (Anatomical Therapeutic Chemical)
ParentGroupID VARCHAR(20) FK รหัสกลุ่มแม่
GroupLevel INT ระดับกลุ่ม (1-5 ตาม ATC)
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: DOSAGE_FORM (รูปแบบเภสัชภัณฑ์)

วัตถุประสงค์: กำหนดรูปแบบเภสัชภัณฑ์ต่างๆ ตาม TOR ข้อ 1.2.13.1.4

Field Type Key Description
DosageFormID VARCHAR(20) PK รหัสรูปแบบเภสัชภัณฑ์
FormName NVARCHAR(100) ชื่อรูปแบบ (ไทย)
FormNameEng NVARCHAR(100) ชื่อรูปแบบ (อังกฤษ)
FormType VARCHAR(20) ประเภทรูปแบบ (SOLID/LIQUID/SEMISOLID/GAS/OTHER)
RouteOfAdministration NVARCHAR(100) วิธีการให้ยาทั่วไป
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: CONTROLLED_DRUG_TYPE (ประเภทยาควบคุม)

วัตถุประสงค์: จำแนกประเภทยาควบคุมพิเศษตามกฎหมาย ตาม TOR ข้อ 1.2.13.1.4

Field Type Key Description
ControlledDrugTypeID VARCHAR(10) PK รหัสประเภทยาควบคุม
TypeName NVARCHAR(100) ชื่อประเภท
LegalCategory VARCHAR(20) หมวดตามกฎหมาย (NARCOTIC_1/NARCOTIC_2/PSYCHOTROPIC_1/etc)
ControlLevel INT ระดับการควบคุม (1=สูงสุด, 5=ต่ำสุด)
RequireSpecialForm BIT ต้องใช้แบบฟอร์มพิเศษ
RequireWitness BIT ต้องมีพยาน
MaxPrescriptionDays INT จำนวนวันสูงสุดที่สั่งได้
RequireLicense BIT ต้องมีใบอนุญาต
StorageRequirement NTEXT ข้อกำหนดการเก็บรักษา
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: DRUG_ROUTE (วิธีการให้ยา)

วัตถุประสงค์: กำหนดวิธีการให้ยามาตรฐาน

Field Type Key Description
RouteID VARCHAR(10) PK รหัสวิธีการให้ยา
RouteCode VARCHAR(10) รหัสย่อ (PO, IV, IM, SC, etc.)
RouteName NVARCHAR(100) ชื่อวิธีการให้ยา (ไทย)
RouteNameEng NVARCHAR(100) ชื่อวิธีการให้ยา (อังกฤษ)
RouteType VARCHAR(20) ประเภท (ORAL/PARENTERAL/TOPICAL/INHALATION/OTHER)
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: DRUG_FREQUENCY (ความถี่การใช้ยา)

วัตถุประสงค์: กำหนดความถี่การใช้ยามาตรฐาน

Field Type Key Description
FrequencyID VARCHAR(10) PK รหัสความถี่
FrequencyCode VARCHAR(10) รหัสย่อ (OD, BID, TID, QID, etc.)
FrequencyName NVARCHAR(100) ชื่อความถี่ (ไทย)
FrequencyNameEng NVARCHAR(100) ชื่อความถี่ (อังกฤษ)
TimesPerDay INT จำนวนครั้งต่อวัน
IntervalHours INT ช่วงเวลา (ชั่วโมง)
ScheduledTimes VARCHAR(100) เวลาที่กำหนด (เช่น 08:00,12:00,18:00)
Description NTEXT รายละเอียด
IsActive BIT ใช้งานได้

Table: DRUG_UNIT (หน่วยยา)

วัตถุประสงค์: กำหนดหน่วยนับและหน่วยวัดยามาตรฐาน

Field Type Key Description
UnitID VARCHAR(10) PK รหัสหน่วย
UnitCode VARCHAR(10) รหัสย่อหน่วย
UnitName NVARCHAR(50) ชื่อหน่วย (ไทย)
UnitNameEng NVARCHAR(50) ชื่อหน่วย (อังกฤษ)
UnitType VARCHAR(20) ประเภทหน่วย (COUNT/WEIGHT/VOLUME/OTHER)
BaseUnit VARCHAR(10) หน่วยพื้นฐาน
ConversionFactor DECIMAL(10,4) อัตราการแปลงเป็นหน่วยพื้นฐาน
IsActive BIT ใช้งานได้

8.2.13.4.2 ตารางข้อมูลเอกสารและการพิมพ์

Table: PRESCRIPTION_DOCUMENT (เอกสารใบสั่งยา)

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

Field Type Key Description
DocumentID VARCHAR(20) PK รหัสเอกสาร (DOC-XXXXXXXXXXX)
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา (อ้างอิง PRESCRIPTION_ORDER)
DocumentType VARCHAR(20) ประเภทเอกสาร (PRESCRIPTION/LABEL/OUT_OF_FORMULARY_CERTIFICATE)
DocumentLanguage VARCHAR(20) ภาษา (THAI/ENGLISH/BOTH)
PrintDateTime DATETIME วันเวลาที่พิมพ์
PrintedBy VARCHAR(50) ผู้พิมพ์
PrintCount INT จำนวนครั้งที่พิมพ์
DocumentPath VARCHAR(255) path ไฟล์เอกสาร
DocumentFormat VARCHAR(10) รูปแบบไฟล์ (PDF/HTML/IMAGE)
DocumentStatus VARCHAR(20) สถานะเอกสาร (GENERATED/PRINTED/CANCELLED)
PrinterName NVARCHAR(100) ชื่อเครื่องพิมพ์
Notes NTEXT หมายเหตุ

Table: OUT_OF_FORMULARY_REQUEST (คำขอยานอกบัญชี)

วัตถุประสงค์: เก็บข้อมูลการขอยานอกบัญชียาหลักแห่งชาติ ตาม TOR ข้อ 1.2.13.6.3

Field Type Key Description
RequestID VARCHAR(20) PK รหัสคำขอ (OOF-XXXXXXXXXXX)
PrescriptionOrderID VARCHAR(20) FK รหัสคำสั่งยา
PrescriptionItemID VARCHAR(20) FK รหัสรายการยา
HN VARCHAR(10) FK รหัสผู้ป่วย
DrugCode VARCHAR(20) FK รหัสยานอกบัญชี
RequestDateTime DATETIME วันเวลาที่ขอ
RequestedBy VARCHAR(20) FK แพทย์ผู้ขอ
ClinicalIndication NTEXT เหตุผลทางคลินิก
AlternativeTried NTEXT ยาทางเลือกที่ลองแล้ว
WhyAlternativeNotSuitable NTEXT เหตุผลที่ยาทางเลือกไม่เหมาะสม
RequestStatus VARCHAR(20) สถานะคำขอ (PENDING/APPROVED/REJECTED)
ReviewedBy VARCHAR(20) FK ผู้พิจารณา (เภสัชกร/คณะกรรมการ)
ReviewDateTime DATETIME วันเวลาที่พิจารณา
ReviewNotes NTEXT หมายเหตุการพิจารณา
CertificateIssued BIT ออกหนังสือรับรองแล้ว
CertificateID VARCHAR(20) รหัสหนังสือรับรอง
CertificateIssuedDate DATETIME วันที่ออกหนังสือรับรอง

8.2.13.5 ตารางการเชื่อมโยงระบบภายนอก

8.2.13.5.1 External System References

หมายเหตุ: ตารางต่อไปนี้อยู่ในระบบอื่นๆ ระบบเภสัชกรรมจะอ้างอิงผ่าน Foreign Key และ API Integration เท่านั้น

External Tables (จากระบบอื่น):

  1. จากระบบเวชระเบียน (1.2.1)
  2. PATIENT - ข้อมูลผู้ป่วย (HN, Demographics)
  3. VISIT - การเข้ารับบริการ (VisitID, VisitDate)
  4. PATIENT_CONTACT - ผู้ติดต่อฉุกเฉิน

  5. จากระบบซักประวัติ (1.2.2)

  6. HISTORY_TAKING - ประวัติการซักประวัติ
  7. DRUG_ALLERGY - ประวัติการแพ้ยา (สำคัญมาก!)
  8. VITAL_SIGNS - สัญญาณชีพ

  9. จากระบบห้องตรวจแพทย์ (1.2.3)

  10. EXAMINATION_SESSION - เซสชันการตรวจ (ExaminationID)
  11. MEDICAL_DIAGNOSIS - การวินิจฉัยโรค (ICD-10)
  12. LAB_ORDER - การสั่ง Lab
  13. RADIOLOGY_ORDER - การสั่ง X-Ray

  14. จากระบบห้องฉุกเฉิน (1.2.4)

  15. EMERGENCY_CASE - เคสฉุกเฉิน (EmergencyCaseID)
  16. TRIAGE_ASSESSMENT - การประเมินคัดกรอง

  17. จากระบบทันตกรรม (1.2.5)

  18. DENTAL_TREATMENT - การรักษาทันตกรรม

  19. จากระบบนัดหมาย (1.2.6)

  20. PATIENT_APPOINTMENT - การนัดหมาย (สำหรับคำนวณจำนวนยา)
  21. DOCTOR_SCHEDULE - ตารางเวรแพทย์

  22. จากระบบงานชันสูตร (1.2.7)

  23. LAB_RESULT - ผล Lab (สำหรับดูประกอบการสั่งยา)
  24. LAB_TEST_MASTER - รายการตรวจ Lab

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

  26. BILLING - รายการค่าใช้จ่าย
  27. PAYMENT - การชำระเงิน
  28. RECEIPT - ใบเสร็จรับเงิน

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

  30. RIGHT_TYPES - ประเภทสิทธิการรักษา
  31. PATIENT_RIGHTS - สิทธิของผู้ป่วย
  32. RIGHTS_VERIFICATION - การยืนยันสิทธิ

  33. จากระบบผู้ป่วยใน (1.2.17)

    • IPD_ADMISSION - การรับเข้าผู้ป่วยใน (AdmissionID)
    • IPD_DISCHARGE - การจำหน่ายผู้ป่วยใน
    • WARD - หอผู้ป่วย
  34. Master Data ร่วมกัน

    • DOCTORS - แพทย์
    • NURSES - พยาบาล
    • STAFF - เจ้าหน้าที่
    • DEPARTMENT - แผนก
    • ICD_CODES - รหัสโรค ICD-10

9. Indexes และ Performance Optimization

9.1 Primary Indexes

-- DRUG_MASTER
CREATE INDEX IDX_DRUG_MASTER_GPO ON DRUG_MASTER(GPOCode);
CREATE INDEX IDX_DRUG_MASTER_TMT ON DRUG_MASTER(TMTCode);
CREATE INDEX IDX_DRUG_MASTER_24CODE ON DRUG_MASTER(Standard24Code);
CREATE INDEX IDX_DRUG_MASTER_ACTIVE ON DRUG_MASTER(IsActive, IsDiscontinued);
CREATE INDEX IDX_DRUG_MASTER_CATEGORY ON DRUG_MASTER(DrugCategoryID);

-- PRESCRIPTION_ORDER
CREATE INDEX IDX_PRESCRIPTION_HN ON PRESCRIPTION_ORDER(HN, OrderDateTime);
CREATE INDEX IDX_PRESCRIPTION_VISIT ON PRESCRIPTION_ORDER(VisitID);
CREATE INDEX IDX_PRESCRIPTION_DOCTOR ON PRESCRIPTION_ORDER(DoctorID, OrderDateTime);
CREATE INDEX IDX_PRESCRIPTION_STATUS ON PRESCRIPTION_ORDER(OrderStatus);
CREATE INDEX IDX_PRESCRIPTION_SOURCE ON PRESCRIPTION_ORDER(SourceSystem, SourceID);
CREATE INDEX IDX_PRESCRIPTION_DATE ON PRESCRIPTION_ORDER(OrderDateTime);

-- PRESCRIPTION_ITEM
CREATE INDEX IDX_PRESCRIPTION_ITEM_ORDER ON PRESCRIPTION_ITEM(PrescriptionOrderID);
CREATE INDEX IDX_PRESCRIPTION_ITEM_DRUG ON PRESCRIPTION_ITEM(DrugCode);
CREATE INDEX IDX_PRESCRIPTION_ITEM_STATUS ON PRESCRIPTION_ITEM(ItemStatus);

-- DRUG_INTERACTION
CREATE INDEX IDX_INTERACTION_DRUG1 ON DRUG_INTERACTION(DrugCode1);
CREATE INDEX IDX_INTERACTION_DRUG2 ON DRUG_INTERACTION(DrugCode2);
CREATE INDEX IDX_INTERACTION_SEVERITY ON DRUG_INTERACTION(SeverityLevel);
CREATE INDEX IDX_INTERACTION_ACTIVE ON DRUG_INTERACTION(IsActive);

-- MEDICATION_DISPENSING
CREATE INDEX IDX_DISPENSING_HN ON MEDICATION_DISPENSING(HN, DispensingDateTime);
CREATE INDEX IDX_DISPENSING_PRESCRIPTION ON MEDICATION_DISPENSING(PrescriptionOrderID);
CREATE INDEX IDX_DISPENSING_PHARMACIST ON MEDICATION_DISPENSING(PharmacistID, DispensingDateTime);
CREATE INDEX IDX_DISPENSING_DATE ON MEDICATION_DISPENSING(DispensingDateTime);

-- INTERACTION_CHECK_LOG
CREATE INDEX IDX_CHECK_LOG_PRESCRIPTION ON INTERACTION_CHECK_LOG(PrescriptionOrderID);
CREATE INDEX IDX_CHECK_LOG_HN ON INTERACTION_CHECK_LOG(HN, CheckDateTime);
CREATE INDEX IDX_CHECK_LOG_TYPE ON INTERACTION_CHECK_LOG(CheckType);

9.2 Composite Indexes

-- สำหรับการค้นหาประวัติการใช้ยา
CREATE INDEX IDX_PRESCRIPTION_HISTORY ON PRESCRIPTION_ORDER(HN, OrderDateTime, OrderStatus);

-- สำหรับการตรวจสอบ Drug Interaction
CREATE INDEX IDX_ACTIVE_PRESCRIPTIONS ON PRESCRIPTION_ITEM(HN, ItemStatus, DrugCode);

-- สำหรับ Medication Profile ผู้ป่วยใน
CREATE INDEX IDX_MEDICATION_PROFILE_IPD ON MEDICATION_PROFILE(AdmissionID, IsContinuing);

-- สำหรับการพิมพ์ฉลากยา
CREATE INDEX IDX_LABEL_PRINT ON PRESCRIPTION_ITEM(PrescriptionOrderID, PrintLabel, LabelPrinted);

10. Business Rules และ Constraints

10.1 Data Validation Rules

  1. DRUG_MASTER:
  2. DrugCode ต้องไม่ซ้ำ
  3. ต้องมีอย่างน้อย 1 รหัสมาตรฐาน (GPO, TMT, หรือ 24 หลัก)
  4. ราคาขายต้องมากกว่าหรือเท่ากับราคาทุน
  5. DefaultQuantityMaxQuantity

  6. PRESCRIPTION_ORDER:

  7. OrderDateTime ≤ ปัจจุบัน
  8. สำหรับ IPD Continue Order: StartDateEndDate
  9. DayDose > 0
  10. ต้องมี SourceSystem และ SourceID ที่ถูกต้อง

  11. PRESCRIPTION_ITEM:

  12. Quantity > 0
  13. UnitPrice ≥ 0
  14. TotalPrice = Quantity × UnitPrice
  15. DispensedQuantityQuantity

  16. DRUG_INTERACTION:

  17. DrugCode1DrugCode2
  18. ต้องมี SeverityLevel

  19. MEDICATION_DISPENSING:

  20. DispensingDateTime ≤ ปัจจุบัน
  21. DispensedQuantity > 0
  22. ต้องมี PharmacistID (เภสัชกรผู้จ่าย)
  23. ExpiryDate > DispensingDateTime

10.2 Business Logic Rules

  1. การตรวจสอบการแพ้ยา:
  2. ก่อนบันทึก PRESCRIPTION_ITEM ต้องตรวจสอบ DRUG_ALLERGY จากระบบซักประวัติ (1.2.2)
  3. หาก IsContraindicated = TRUE → แสดงคำเตือนและบล็อกการสั่ง

  4. การตรวจสอบ Drug Interaction:

  5. ตรวจสอบกับยาที่ใช้อยู่ปัจจุบันในช่วงเวลาที่กำหนดใน INTERACTION_CHECK_CONFIG
  6. บันทึกผลการตรวจสอบใน INTERACTION_CHECK_LOG
  7. แสดงคำเตือนตาม SeverityLevel

  8. การตรวจสอบข้อห้ามใช้:

  9. ตรวจสอบ DRUG_CONTRAINDICATION กับ MEDICAL_DIAGNOSIS จากระบบห้องตรวจ
  10. แสดงคำเตือนถ้าพบข้อห้ามใช้

  11. การตรวจสอบกลุ่มผู้ป่วยพิเศษ:

  12. ตรวจสอบ DRUG_ALERT_CONFIG ตาม:

    • IsPregnant → Pregnancy Category
    • IsBreastfeeding → Breastfeeding Alert
    • อายุผู้ป่วย → Pediatric/Elderly Alert
    • G6PD deficiency
    • เพศ
  13. การคำนวณราคา:

  14. ดึงราคาจาก DRUG_PRICE ตาม RightTypeID
  15. คำนวณ Copayment ตามสิทธิ
  16. ส่งข้อมูลไปยังระบบการเงิน (1.2.14)

  17. การสั่งยา IPD Continue Order:

  18. ต้องระบุ StartDate และ EndDate
  19. สร้าง MEDICATION_PROFILE อัตโนมัติ
  20. สร้าง schedule ใน DRUG_ADMINISTRATION_RECORD

  21. การยกเลิกคำสั่งยา:

  22. ถ้ายังไม่ชำระเงิน → แก้ไขได้โดยตรง
  23. ถ้าชำระเงินแล้ว → ต้องยกเลิกใบเสร็จที่ระบบการเงินก่อน
  24. บันทึกการแก้ไขทุกครั้งใน PRESCRIPTION_MODIFICATION_LOG

  25. การพิมพ์ฉลากยา:

  26. ตรวจสอบ LABEL_PRINT_CONFIG ตาม DrugCode
  27. บันทึกการพิมพ์ใน PRESCRIPTION_DOCUMENT
  28. LabelPrintCount เพิ่มขึ้นทุกครั้งที่พิมพ์

11. API Integration Points

11.1 Inbound APIs (รับข้อมูลเข้า)

  1. GET /api/pharmacy/patient/{HN}
  2. รับข้อมูลผู้ป่วยจากระบบเวชระเบียน (1.2.1)
  3. รวมถึงข้อมูล Demographics, Contact

  4. GET /api/pharmacy/allergy/{HN}

  5. รับประวัติการแพ้ยาจากระบบซักประวัติ (1.2.2)
  6. Real-time check ก่อนสั่งยา

  7. GET /api/pharmacy/diagnosis/{VisitID}

  8. รับข้อมูลการวินิจฉัยจากระบบห้องตรวจ (1.2.3)
  9. สำหรับตรวจสอบ Contraindication

  10. GET /api/pharmacy/appointment/{HN}

  11. รับข้อมูลการนัดหมายจากระบบนัดหมาย (1.2.6)
  12. สำหรับคำนวณจำนวนยาตามวันนัด

  13. GET /api/pharmacy/lab/{HN}

  14. รับผล Lab จากระบบงานชันสูตร (1.2.7)
  15. แสดงผลประกอบการสั่งยา

  16. GET /api/pharmacy/rights/{HN}

  17. รับข้อมูลสิทธิจากระบบตรวจสอบสิทธิ (1.2.15)
  18. สำหรับคำนวณราคาและ Copayment

  19. GET /api/pharmacy/admission/{AdmissionID}

  20. รับข้อมูลผู้ป่วยในจากระบบผู้ป่วยใน (1.2.17)
  21. สำหรับการสั่งยา IPD

11.2 Outbound APIs (ส่งข้อมูลออก)

  1. POST /api/billing/pharmacy-charges
  2. ส่งรายการค่าใช้จ่ายยาไปยังระบบการเงิน (1.2.14)
  3. จาก PRESCRIPTION_ITEMBILLING

  4. POST /api/pharmacy/interaction-alert

  5. ส่งการแจ้งเตือน Drug Interaction ไปยังระบบห้องตรวจ
  6. Real-time notification

  7. POST /api/pharmacy/dispensing-status

  8. อัปเดตสถานะการจ่ายยาไปยังระบบที่เกี่ยวข้อง
  9. จาก MEDICATION_DISPENSING

  10. POST /api/pharmacy/medication-profile

  11. ส่ง Medication Profile ไปยังระบบผู้ป่วยใน (1.2.17)
  12. สำหรับผู้ป่วยใน

11.3 Webhook Events

  1. patient.allergy.updated
  2. เมื่อมีการเพิ่ม/แก้ไขการแพ้ยา
  3. Trigger: ตรวจสอบคำสั่งยาที่ใช้อยู่

  4. prescription.status.changed

  5. เมื่อสถานะคำสั่งยาเปลี่ยน
  6. Notify: ระบบที่เกี่ยวข้อง

  7. medication.dispensed

  8. เมื่อจ่ายยาเสร็จสิ้น
  9. Trigger: อัปเดตสถานะการเงิน

12. Security และ Audit Trail

12.1 Data Security

  1. ข้อมูลที่ละเอียดอ่อน:
  2. DRUG_ALLERGY - ประวัติการแพ้ยา
  3. MEDICATION_PROFILE - ประวัติการใช้ยา
  4. CONTROLLED_DRUG_TYPE - ยาควบคุมพิเศษ

  5. การเข้าถึงข้อมูล:

  6. แพทย์: ดูและสั่งยาได้ตามสิทธิ์
  7. เภสัชกร: ดู ตรวจสอบ และจ่ายยาได้ทั้งหมด
  8. พยาบาล: ดูและบันทึกการให้ยา IPD
  9. เจ้าหน้าที่การเงิน: ดูข้อมูลราคาเท่านั้น

12.2 Audit Trail Tables

ตารางที่มีการ Audit Trail: - PRESCRIPTION_ORDER - บันทึกการสั่งยา - PRESCRIPTION_ITEM - บันทึกรายการยา - PRESCRIPTION_MODIFICATION_LOG - บันทึกการแก้ไข (มีอยู่แล้ว) - MEDICATION_DISPENSING - บันทึกการจ่ายยา - DRUG_ADMINISTRATION_RECORD - บันทึกการให้ยา - INTERACTION_CHECK_LOG - บันทึกการตรวจสอบ (มีอยู่แล้ว)

Fields สำหรับ Audit: - CreatedDate / CreatedBy - LastModified / ModifiedBy - CancelledDate / CancelledBy


13. Performance Considerations

13.1 Caching Strategy

  1. Drug Master Data:
  2. Cache DRUG_MASTER ที่ IsActive = TRUE
  3. Refresh ทุก 1 ชั่วโมง

  4. Drug Interaction:

  5. Cache DRUG_INTERACTION ที่ใช้บ่อย
  6. Refresh ทุกวัน

  7. Master Data:

  8. Cache DRUG_CATEGORY, DOSAGE_FORM, DRUG_ROUTE, DRUG_FREQUENCY
  9. Refresh เมื่อมีการแก้ไข

13.2 Query Optimization

  1. Prescription History:
  2. Partition ตามปี
  3. Archive ข้อมูลที่เก่ากว่า 5 ปี

  4. Dispensing Records:

  5. Partition ตามเดือน
  6. Index on HN + DispensingDateTime

  7. Interaction Check:

  8. Use stored procedure สำหรับการตรวจสอบ
  9. Cache ผลการตรวจสอบ 5 นาที

14. Backup และ Recovery

14.1 Backup Strategy

  1. Full Backup:
  2. ทุกวันเวลา 02:00 น.
  3. เก็บ 30 วัน

  4. Incremental Backup:

  5. ทุก 4 ชั่วโมง
  6. เก็บ 7 วัน

  7. Transaction Log Backup:

  8. ทุก 15 นาที
  9. เก็บ 24 ชั่วโมง

14.2 Critical Tables (ต้อง Backup พิเศษ)

  • DRUG_MASTER
  • PRESCRIPTION_ORDER
  • PRESCRIPTION_ITEM
  • MEDICATION_DISPENSING
  • DRUG_ALLERGY (จากระบบซักประวัติ)

15. สรุปความสัมพันธ์ระหว่างตาราง

15.1 Core Relationships

PATIENT (1.2.1)
  └── VISIT (1.2.1)
       ├── EXAMINATION_SESSION (1.2.3)
       ├── EMERGENCY_CASE (1.2.4)
       └── IPD_ADMISSION (1.2.17)
            └── PRESCRIPTION_ORDER
                 ├── PRESCRIPTION_ITEM
                 │    ├── DRUG_MASTER
                 │    └── MEDICATION_DISPENSING
                 ├── MEDICATION_VERIFICATION
                 └── MEDICATION_PROFILE (IPD)
                      └── DRUG_ADMINISTRATION_RECORD

15.2 Drug Safety Relationships

DRUG_MASTER
  ├── DRUG_INTERACTION
  ├── DRUG_CONTRAINDICATION
  │    └── ICD_CODES
  ├── DRUG_ALERT_CONFIG
  └── DRUG_INGREDIENT

PRESCRIPTION_ORDER
  └── INTERACTION_CHECK_LOG
       ├── DRUG_INTERACTION
       └── DRUG_ALLERGY (1.2.2)

15.3 Integration Relationships

ระบบเภสัชกรรม (1.2.13)
  ├── → ระบบเวชระเบียน (1.2.1): HN, VisitID
  ├── → ระบบซักประวัติ (1.2.2): DRUG_ALLERGY
  ├── → ระบบห้องตรวจ (1.2.3): ExaminationID, DIAGNOSIS
  ├── → ระบบห้องฉุกเฉิน (1.2.4): EmergencyCaseID
  ├── → ระบบนัดหมาย (1.2.6): APPOINTMENT
  ├── → ระบบงานชันสูตร (1.2.7): LAB_RESULT
  ├── ← ระบบการเงิน (1.2.14): BILLING, PAYMENT
  ├── → ระบบตรวจสอบสิทธิ (1.2.15): RIGHT_TYPES, RIGHTS_VERIFICATION
  └── → ระบบผู้ป่วยใน (1.2.17): AdmissionID, MEDICATION_PROFILE

16. Change Log

Version Date Author Description
1.0 30 ต.ค. 2568 ทีมพัฒนาระบบ เอกสาร Schema ฉบับแรก ครอบคลุม TOR ทั้ง 6 หัวข้อ

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