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

ER Diagram

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

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


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


ER Diagram และความสัมพันธ์ระหว่างตาราง

คำอธิบายสีในแผนภาพ

🎨 คำอธิบายสีในแผนภาพ: - 🟠 สีส้ม (External Tables): ตารางที่อ้างอิงจากระบบอื่น ไม่ได้อยู่ในฐานข้อมูลของระบบตรวจสอบสิทธิโดยตรง - PATIENT - จากระบบเวชระเบียน (1.2.1) - VISIT - จากระบบเวชระเบียน (1.2.1) - USER - จากระบบจัดการผู้ใช้งานกลาง

  • 🟢 สีเขียว (Rights Tables): ตารางหลักของระบบตรวจสอบสิทธิ ที่เก็บข้อมูลและดำเนินการในระบบนี้โดยตรง
  • RIGHTTYPE - ข้อมูลประเภทสิทธิ
  • PATIENTRIGHT - สิทธิของผู้ป่วยแต่ละราย
  • RIGHTSVERIFICATION - บันทึกการยืนยันสิทธิ
  • RIGHTSAUDITLOG - บันทึกการแก้ไขเพื่อการตรวจสอบ
  • EXTERNALSYSTEM - ข้อมูลระบบภายนอก (สปสช./สนย.)

  • 🔵 สีน้ำเงิน (Financial Tables): ตารางจากระบบการเงิน (1.2.14) ที่ระบบตรวจสอบสิทธิอ้างอิงเพื่อดึงข้อมูลการคำนวณค่าบริการ

  • RIGHTSFINANCIALDATA - ข้อมูลการเงินของแต่ละประเภทสิทธิ

  • 🟣 สีม่วง (Future Enhancement Tables): ตารางสำหรับการพัฒนาในอนาคต (ระยะที่ 2-3) ยังไม่มีการเชื่อมโยงกับตารางอื่นในปัจจุบัน

  • SERVICELEVEL - ระดับบริการ (Basic/Standard/Premium)
  • NETWORKHOSPITAL - โรงพยาบาลเครือข่าย (สำหรับ Cross-Hospital Integration)

แผนภาพแบบง่าย (Simplified Diagram)

graph TD
    subgraph "🟠 Other Systems - ระบบอื่นที่เกี่ยวข้อง"
        P[PATIENT<br/>ตารางผู้ป่วย]
        V[VISIT<br/>ตารางการมารับบริการ]
        U[USER_TABLE<br/>ตารางผู้ใช้งาน]
    end

    subgraph "🟢 Rights System - ระบบตรวจสอบสิทธิ"
        RT[RIGHTTYPE<br/>ประเภทสิทธิ]
        PR[PATIENTRIGHT<br/>สิทธิผู้ป่วย]
        RV[RIGHTSVERIFICATION<br/>การยืนยันสิทธิ]
        RA[RIGHTSAUDITLOG<br/>บันทึกการแก้ไข]
        ES[EXTERNALSYSTEM<br/>ระบบภายนอก]
        VP[VALIDATIONPROVIDER<br/>ผู้ให้บริการตรวจสอบ]
        TC[TREATMENTCOVERAGE<br/>ความคุ้มครอง]
        VS[VALIDATIONSTATUS<br/>สถานะตรวจสอบ]
        RL[RIGHTSLIMITATION<br/>ข้อจำกัดสิทธิ]

        %% ตารางการเงินใหม่
        RPT[RIGHTSPAYMENTTYPE<br/>ประเภทการชำระเงิน]
        RRT[RIGHTSRECEIPTTYPE<br/>ประเภทใบเสร็จ]
        RD[RIGHTSDISCOUNT<br/>ส่วนลดในค่าใช้จ่าย]
    end

    subgraph "🟣 Future Enhancement - การพัฒนาในอนาคต (ยังไม่มีการเชื่อมโยง)"
        SL["🔎 SERVICELEVEL<br/>ระดับบริการ<br/><small>สำหรับ Service Level Management</small>"]
        NH["🔎 NETWORKHOSPITAL<br/>โรงพยาบาลเครือข่าย<br/><small>สำหรับ Cross-Hospital Integration</small>"]
    end

    %% ความสัมพันธ์หลัก
    P --> PR
    V --> RV
    U --> RV
    U --> RA
    RT --> PR
    RT --> ES
    RT --> TC
    RT --> RL
    PR --> RV
    PR --> RA
    VP --> RV
    VS --> RV

    %% ความสัมพันธ์การเงินใหม่
    RT --> RPT
    RT --> RRT
    RT --> RD

    %% Future Enhancement - ความสัมพันธ์ที่จะเพิ่มในอนาคต (เส้นประ)
    RT -.-> SL
    PR -.-> NH
    RV -.-> NH

    style P fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style V fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style U fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style RT fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style PR fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RV fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RA fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style ES fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style VP fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style TC fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style VS fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RL fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RPT fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RRT fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style RD fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    style SL fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,stroke-dasharray: 5 5
    style NH fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,stroke-dasharray: 5 5

ER Diagram แบบละเอียด (Detailed ERD)

erDiagram
    PATIENT {
        varchar HN PK
        varchar CitizenID UK
        nvarchar FirstName
        nvarchar LastName
        date DateOfBirth
        char Gender
    }

    VISIT {
        varchar VisitID PK
        varchar HN FK
        datetime VisitDate
        nvarchar Department
        nvarchar Doctor
    }

    USER_TABLE {
        varchar UserID PK
        varchar Username UK
        nvarchar FullName
        varchar Role
        nvarchar Department
    }

    RIGHTTYPE {
        varchar RightTypeID PK
        nvarchar RightTypeName
        nvarchar RightTypeNameEng
        varchar Category
        nvarchar Description
        decimal CoveragePercentage
        bit RequiresApproval
        bit OnlineValidation
        bit CopaymentRequired
        nvarchar ValidHospitals
        int PriorityLevel
        varchar ExternalSystemID FK
        bit IsActive
    }

    RIGHTSPAYMENTTYPE {
        varchar PaymentTypeID PK
        varchar RightTypeID FK
        varchar PaymentCode
        nvarchar PaymentName
        nvarchar PaymentNameEng
        bit RequiresPayment
        varchar PaymentMethod
        decimal DefaultAmount
        nvarchar CalculationFormula
        bit IsActive
    }

    RIGHTSRECEIPTTYPE {
        varchar ReceiptTypeID PK
        varchar RightTypeID FK
        varchar ReceiptCode
        nvarchar ReceiptName
        nvarchar ReceiptNameEng
        varchar ReceiptTemplate
        ntext ServiceChargeFormula
        bit RequiresApproval
        int PrintCopies
        bit IsActive
    }

    RIGHTSDISCOUNT {
        varchar DiscountID PK
        varchar RightTypeID FK
        varchar ExpenseCategory
        nvarchar ExpenseCategoryName
        varchar DiscountType
        decimal DiscountValue
        decimal MaxDiscountAmount
        decimal MinChargeAmount
        date EffectiveDate
        date ExpiryDate
        bit IsActive
    }

    SERVICELEVEL {
        int ServiceLevelID PK "🔮 Future Enhancement - Service Level Management"
        varchar LevelCode "BASIC, STANDARD, PREMIUM"
        nvarchar LevelName
        nvarchar LevelNameEng
        ntext IncludedServices "JSON: บริการที่รวม"
        ntext ExcludedServices "JSON: บริการที่ไม่รวม"
        bit IsActive
    }

    VALIDATIONPROVIDER {
        varchar ProviderID PK
        varchar ProviderCode
        nvarchar ProviderName
        nvarchar ProviderNameEng
        varchar APIEndpoint
        varchar AuthType
        int TimeoutSeconds
        int RetryAttempts
        nvarchar SupportedSchemes
        bit IsActive
        datetime LastSync
    }

    TREATMENTCOVERAGE {
        varchar CoverageID PK
        varchar RightTypeID FK
        varchar TreatmentType
        nvarchar TreatmentName
        nvarchar TreatmentNameEng
        bit IsCovered
        decimal CopaymentAmount
        decimal LimitPerVisit
        bit IsActive
    }

    VALIDATIONSTATUS {
        varchar StatusID PK
        varchar StatusCode
        nvarchar StatusName
        nvarchar StatusNameEng
        bit AllowTreatment
        bit RequiresCopayment
        varchar StatusColor
        bit IsActive
    }

    RIGHTSLIMITATION {
        varchar LimitationID PK
        varchar RightTypeID FK
        varchar LimitationType
        nvarchar LimitationDescription
        bit IsActive
    }

    NETWORKHOSPITAL {
        varchar NetworkHospitalID PK "🔮 Future Enhancement - Cross-Hospital Integration"
        varchar HospitalCode "5-digit hospital code"
        nvarchar HospitalName
        nvarchar HospitalNameEng
        nvarchar Province
        varchar HospitalLevel "F1, F2, F3"
        nvarchar SupportedSchemes "JSON: สิทธิที่รองรับ"
        bit IsMainContractor
        date ContractStartDate
        date ContractEndDate
        bit IsActive
    }

    PATIENTRIGHT {
        varchar PatientRightID PK
        varchar HN FK
        varchar RightTypeID FK
        varchar RightNumber
        date StartDate
        date EndDate
        nvarchar MainHospital
        nvarchar SubHospital
        varchar Status
        datetime CreatedDate
        varchar CreatedBy
        datetime LastVerified
    }

    RIGHTSVERIFICATION {
        varchar VerificationID PK
        varchar PatientRightID FK
        varchar VisitID FK
        varchar UserID FK
        datetime VerificationDate
        varchar VerificationMethod
        varchar ValidationProviderID FK
        varchar ValidationStatusID FK
        int ResponseTime
        varchar ErrorCode
        ntext ExternalResponse
        bit IsVerified
        nvarchar Notes
    }

    RIGHTSAUDITLOG {
        varchar LogID PK
        varchar PatientRightID FK
        varchar UserID FK
        varchar Action
        ntext OldValue
        ntext NewValue
        datetime ActionDate
        varchar IPAddress
        nvarchar Reason
    }

    EXTERNALSYSTEM {
        varchar SystemID PK
        varchar SystemCode
        nvarchar SystemName
        nvarchar SystemNameEng
        varchar SystemURL
        varchar APIVersion
        varchar AuthenticationType
        int TimeoutSeconds
        int MaxRetryAttempts
        bit IsActive
        datetime LastSync
    }

    PATIENT ||--o{ PATIENTRIGHT : ""
    PATIENT ||--o{ VISIT : ""
    RIGHTTYPE ||--o{ PATIENTRIGHT : ""
    RIGHTTYPE ||--|| EXTERNALSYSTEM : ""
    RIGHTTYPE ||--o{ RIGHTSPAYMENTTYPE : ""
    RIGHTTYPE ||--o{ RIGHTSRECEIPTTYPE : ""
    RIGHTTYPE ||--o{ RIGHTSDISCOUNT : ""
    RIGHTTYPE ||--o{ TREATMENTCOVERAGE : ""
    RIGHTTYPE ||--o{ RIGHTSLIMITATION : ""
    PATIENTRIGHT ||--o{ RIGHTSVERIFICATION : ""
    PATIENTRIGHT ||--o{ RIGHTSAUDITLOG : ""
    VISIT ||--o{ RIGHTSVERIFICATION : ""
    USER_TABLE ||--o{ RIGHTSVERIFICATION : ""
    USER_TABLE ||--o{ RIGHTSAUDITLOG : ""
    VALIDATIONPROVIDER ||--o{ RIGHTSVERIFICATION : ""
    VALIDATIONSTATUS ||--o{ RIGHTSVERIFICATION : ""

ความสัมพันธ์ระหว่างตาราง (Relationships)

ความสัมพันธ์หลัก (Primary Relationships)

  1. PATIENT → PATIENTRIGHT (One-to-Many)
  2. ผู้ป่วย 1 คน สามารถมีสิทธิได้หลายประเภท
  3. Foreign Key: PATIENTRIGHT.HN → PATIENT.HN

  4. RIGHTTYPE → PATIENTRIGHT (One-to-Many)

  5. ประเภทสิทธิ 1 ประเภท มีผู้ป่วยได้หลายคน
  6. Foreign Key: PATIENTRIGHT.RightTypeID → RIGHTTYPE.RightTypeID

  7. PATIENTRIGHT → RIGHTSVERIFICATION (One-to-Many)

  8. สิทธิผู้ป่วย 1 รายการ สามารถมีการยืนยันได้หลายครั้ง
  9. Foreign Key: RIGHTSVERIFICATION.PatientRightID → PATIENTRIGHT.PatientRightID

ความสัมพันธ์การอ้างอิง (Reference Relationships)

  1. VISIT → RIGHTSVERIFICATION (One-to-Many)
  2. การมารับบริการ 1 ครั้ง สามารถมีการยืนยันสิทธิได้หลายรายการ
  3. Foreign Key: RIGHTSVERIFICATION.VisitID → VISIT.VisitID

  4. USER_TABLE → RIGHTSVERIFICATION (One-to-Many)

  5. ผู้ใช้ 1 คน สามารถทำการยืนยันสิทธิได้หลายครั้ง
  6. Foreign Key: RIGHTSVERIFICATION.UserID → USER_TABLE.UserID

  7. RIGHTTYPE → EXTERNALSYSTEM (Many-to-One)

  8. ประเภทสิทธิหลายประเภท อาจใช้ระบบภายนอกเดียวกัน
  9. Foreign Key: RIGHTTYPE.ExternalSystemID → EXTERNALSYSTEM.SystemID

ความสัมพันธ์การสนับสนุน (Support Relationships)

  1. RIGHTTYPE → TREATMENTCOVERAGE (One-to-Many)
  2. ประเภทสิทธิ 1 ประเภท มีความคุ้มครองการรักษาหลายประเภท
  3. Foreign Key: TREATMENTCOVERAGE.RightTypeID → RIGHTTYPE.RightTypeID

  4. RIGHTTYPE → RIGHTSLIMITATION (One-to-Many)

  5. ประเภทสิทธิ 1 ประเภท มีข้อจำกัดหลายข้อ
  6. Foreign Key: RIGHTSLIMITATION.RightTypeID → RIGHTTYPE.RightTypeID

  7. VALIDATIONPROVIDER → RIGHTSVERIFICATION (One-to-Many)

  8. ผู้ให้บริการตรวจสอบ 1 แห่ง สามารถทำการตรวจสอบได้หลายครั้ง
  9. Foreign Key: RIGHTSVERIFICATION.ValidationProviderID → VALIDATIONPROVIDER.ProviderID

  10. VALIDATIONSTATUS → RIGHTSVERIFICATION (One-to-Many)

    • สถานะการตรวจสอบ 1 ประเภท สามารถใช้ในการยืนยันได้หลายครั้ง
    • Foreign Key: RIGHTSVERIFICATION.ValidationStatusID → VALIDATIONSTATUS.StatusID

ความสัมพันธ์การติดตาม (Audit Relationships)

  1. PATIENTRIGHT → RIGHTSAUDITLOG (One-to-Many)

    • สิทธิผู้ป่วย 1 รายการ สามารถมี Audit Log หลายรายการ
    • Foreign Key: RIGHTSAUDITLOG.PatientRightID → PATIENTRIGHT.PatientRightID
  2. USER_TABLE → RIGHTSAUDITLOG (One-to-Many)

    • ผู้ใช้ 1 คน สามารถทำการแก้ไขได้หลายครั้ง
    • Foreign Key: RIGHTSAUDITLOG.UserID → USER_TABLE.UserID

ความสัมพันธ์ Future Enhancement (สำหรับอนาคต)

⚠️ หมายเหตุสำคัญ: ความสัมพันธ์เหล่านี้แสดงเป็นเส้นประ (Dotted Lines) เพื่อบ่งบอกว่าจะเพิ่มในอนาคต

  1. RIGHTTYPE -.-> SERVICELEVEL (Many-to-One - Future)

    • ประเภทสิทธิหลายประเภท อาจมีระดับบริการเดียวกัน
    • Future Foreign Key: RIGHTTYPE.ServiceLevelID → SERVICELEVEL.ServiceLevelID
    • Use Case: UC Premium vs UC Basic มีระดับบริการต่างกัน
  2. PATIENTRIGHT -.-> NETWORKHOSPITAL (Many-to-One - Future)

    • สิทธิผู้ป่วยหลายรายการ อาจชี้ไปยังโรงพยาบาลเครือข่ายเดียวกัน
    • Future Foreign Key: PATIENTRIGHT.PreferredNetworkHospitalID → NETWORKHOSPITAL.NetworkHospitalID
    • Use Case: ผู้ป่วยเลือกโรงพยาบาลที่ต้องการใช้สิทธิ
  3. RIGHTSVERIFICATION -.-> NETWORKHOSPITAL (Many-to-One - Future)

    • การยืนยันสิทธิหลายครั้ง อาจมาจากโรงพยาบาลเครือข่ายเดียวกัน
    • Future Foreign Key: RIGHTSVERIFICATION.SourceHospitalID → NETWORKHOSPITAL.NetworkHospitalID
    • Use Case: Cross-Hospital Rights Verification

คำอธิบายการออกแบบ

1. การแยกระบบ (System Separation)

  • ตารางสีส้ม: อยู่ในระบบอื่น ระบบตรวจสอบสิทธิเพียงอ้างอิง
  • ตารางสีเขียว: อยู่ในระบบตรวจสอบสิทธิโดยตรง
  • ตารางสีน้ำเงิน: อยู่ในระบบการเงิน มีการ integration ผ่าน reference
  • ตารางสีม่วง (เส้นประ): Future Enhancement Tables - ยังไม่ได้เชื่อมโยง

2. การไหลของข้อมูล (Data Flow)

  • ผู้ป่วยมารับบริการ → สร้าง Visit
  • ตรวจสอบสิทธิผู้ป่วย → สร้าง Verification
  • บันทึกผลการตรวจสอบ → เชื่อมโยงกับระบบการเงิน
  • Future Flow: Cross-Hospital Verification → Network Hospital Integration

3. การสนับสนุนการตัดสินใจ (Decision Support)

  • TREATMENTCOVERAGE: ช่วยตัดสินใจว่าครอบคลุมการรักษาหรือไม่
  • RIGHTSLIMITATION: แสดงข้อจำกัดการใช้สิทธิ
  • VALIDATIONSTATUS: แสดงสถานะการตรวจสอบแบบ Real-time

4. การควบคุมและตรวจสอบ (Control & Audit)

  • RIGHTSAUDITLOG: ติดตามการเปลี่ยนแปลงทั้งหมด
  • RIGHTSVERIFICATION: บันทึกการตรวจสอบทุกครั้ง
  • Multiple validation providers: รองรับการเชื่อมต่อหลายระบบ

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