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

1.3 Appointment Management

1.3 Module: Appointment Management (ระบบบริหารจัดการนัดหมาย)

อ้างอิง TOR:

  • 3.4 ระบบบริหารจัดการนัดหมาย (ครบทุกข้อ 3.4.1 - 3.4.5)
  • 3.7.2 การเชื่อมต่อข้อมูลนัดหมายผู้ป่วยจาก HIS/RIS/LIS

วัตถุประสงค์:

Module นี้เป็นหัวใจสำคัญในการจัดการนัดหมายทั้งหมด ตั้งแต่การดึงข้อมูลจาก HIS การกำหนดเงื่อนไขการแจ้งเตือน ไปจนถึงการจัดการนัดหมายแบบ Manual เพื่อให้ระบบสามารถส่งการแจ้งเตือนไปยังผู้ป่วยได้อย่างถูกต้องและตรงเวลา


1.3.1 Feature: Notification Configuration

1. กำหนดระยะการแจ้งเตือน

TOR Reference: 3.4.1

คำอธิบาย:

ฟีเจอร์สำหรับกำหนดว่าจะส่งการแจ้งเตือนล่วงหน้ากี่วันก่อนวันนัด เพื่อให้ผู้ป่วยมีเวลาเตรียมตัวและสามารถจัดการเวลาได้ ต้องมีความยืดหยุ่นรองรับหลายรูปแบบ

การทำงาน:

การตั้งค่าระยะเวลา:

  1. เจ้าหน้าที่เข้าสู่หน้า "ตั้งค่าการแจ้งเตือน"
  2. เลือกประเภทการนัดหมาย (เช่น US - Ultrasound, MG - Mammogram)
  3. กำหนดระยะเวลาแจ้งเตือนล่วงหน้า:

  4. 1 วัน (Default)

  5. 2-3 วัน
  6. 1 สัปดาห์
  7. กำหนดเอง (Custom) ระบุจำนวนวันเอง

  8. สามารถตั้งค่าหลายระยะเวลาสำหรับแต่ละประเภทได้ เช่น:

  9. แจ้งเตือนครั้งที่ 1: 3 วันก่อน

  10. แจ้งเตือนครั้งที่ 2: 1 วันก่อน

  11. บันทึกการตั้งค่า

ตัวอย่างการใช้งาน:

  • นัด US (อัลตราซาวด์): แจ้งเตือน 1 วันก่อน เพราะเป็นการตรวจทั่วไป
  • นัด MG (แมมโมแกรม): แจ้งเตือน 3 วันก่อน เพราะต้องเตรียมตัว (ไม่ทาโรลออน)
  • นัดตรวจพิเศษ: แจ้งเตือน 7 วันก่อน เพราะต้องงดอาหาร/ยา

กรณีพิเศษ:

  • นัดด่วน: ถ้านัดน้อยกว่าระยะแจ้งเตือน (เช่น นัดพรุ่งนี้ แต่ตั้งไว้ 3 วัน) ให้ส่งทันที
  • วันหยุด: ถ้าวันที่คำนวณได้เป็นวันหยุด ให้เลื่อนไปส่งในวันทำการก่อนหน้า
  • ปิดการแจ้งเตือน: สามารถปิดการแจ้งเตือนสำหรับประเภทนัดบางอย่างได้ชั่วคราว

UI/UX Requirements:

  • หน้าตั้งค่าหลัก: แสดงเป็น Card แยกตามประเภทการนัดหมาย
  • Dropdown/Number Input: สำหรับเลือกจำนวนวัน พร้อม Validation (1-30 วัน)
  • Preview: แสดงตัวอย่างว่าถ้านัดวันที่ X จะส่งแจ้งเตือนวันที่ Y
  • Multiple Reminders: สามารถเพิ่มหลายช่วงเวลาได้ (เช่น 7 วัน, 3 วัน, 1 วัน)
  • Toggle Switch: เปิด/ปิดการแจ้งเตือนแต่ละช่วง
  • Save Button: ปุ่มบันทึกเด่นชัด พร้อม Confirmation
  • History: แสดงประวัติการเปลี่ยนแปลงการตั้งค่า

2. กำหนดช่วงเวลาแจ้งเตือน

TOR Reference: 3.4.2

คำอธิบาย:

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

การทำงาน:

การตั้งเวลาส่ง:

  1. กำหนดช่วงเวลาที่เหมาะสม เช่น:

  2. เวลาเริ่มต้น: 09:00 น. (Default)

  3. เวลาสิ้นสุด: 18:00 น. (ถ้าต้องการส่งหลายรอบ)

  4. สามารถตั้งเวลาต่างกันตามประเภทนัดได้

  5. ถ้ามีข้อความหลายรายการ ระบบจะกระจายการส่งใน Time Window ที่กำหนด

ระบบ Scheduler (ตัวจัดการตารางเวลา):

  1. ระบบมี Background Service ตรวจสอบทุก 1 นาที
  2. ดึงรายการนัดที่ต้องส่งแจ้งเตือนในวันนี้
  3. เช็คว่าถึงเวลาที่ตั้งไว้หรือยัง
  4. ส่งข้อความผ่าน LINE API
  5. บันทึก Log การส่ง

กรณีพิเศษ:

  • ข้อความค้างส่ง: ถ้าระบบขัดข้องพอดีช่วงเวลาส่ง จะส่งทันทีที่กลับมา Online (ถ้ายังไม่เกินเวลาสิ้นสุด)
  • Queue Management: ถ้ามีข้อความเยอะ จะส่งเป็น Batch ไม่ให้ล้น
  • Rate Limiting: จำกัดจำนวนข้อความต่อนาทีตาม LINE API Limit

ตัวอย่างการใช้งาน:

  • ส่งเวลา 09:00 น.: เหมาะกับคนทำงาน เปิดโทรศัพท์ตอนเช้า
  • ส่งเวลา 14:00 น.: เหมาะกับคนอายุมาก มักดูโทรศัพท์หลังอาหารกลางวัน
  • ส่งเวลา 19:00 น.: เหมาะกับการแจ้งเตือนเร่งด่วนหลังเลิกงาน

UI/UX Requirements:

  • Time Picker: เลือกเวลาแบบ Dropdown (ชั่วโมง:นาที) หรือ Slider
  • Preview Timeline: แสดง Timeline วันที่จะส่ง พร้อมเวลา
  • Multiple Time Slots: สามารถกำหนดหลายช่วงเวลาได้ (เช่น 09:00, 14:00, 19:00)
  • Day of Week Settings: ตั้งเวลาต่างกันตามวัน (จันทร์-ศุกร์ vs เสาร์-อาทิตย์)
  • Holiday Calendar: อัปโหลดวันหยุดนักขัตฤกษ์ เพื่อปรับเวลาอัตโนมัติ
  • Test Send: ปุ่มทดสอบส่งข้อความทันทีเพื่อตรวจสอบ

3. กำหนดกลุ่มการแจ้งเตือน

TOR Reference: 3.4.3

คำอธิบาย:

ฟีเจอร์สำหรับจัดกลุ่มประเภทการนัดหมาย เพื่อให้สามารถส่งข้อความที่เหมาะสมกับแต่ละประเภท เช่น การนัด US (อัลตราซาวด์), MG (แมมโมแกรม), X-Ray, CT Scan เป็นต้น

การทำงาน:

การสร้างกลุ่ม:

  1. เจ้าหน้าที่เข้าสู่หน้า "จัดการกลุ่มการแจ้งเตือน"
  2. คลิกปุ่ม "เพิ่มกลุ่มใหม่"
  3. กรอกข้อมูลกลุ่ม:

  4. ชื่อกลุ่ม: เช่น "นัด US", "นัด MG", "นัด CT"

  5. รหัสกลุ่ม: เช่น "US", "MG", "CT" (ใช้จับคู่กับข้อมูลจาก HIS)
  6. คำอธิบาย: รายละเอียดกลุ่ม
  7. สี: สีประจำกลุ่ม (สำหรับแสดงใน Dashboard)
  8. ไอคอน: ไอคอนประจำกลุ่ม

  9. กำหนดค่าเฉพาะกลุ่ม:

  10. ระยะเวลาแจ้งเตือน

  11. เวลาส่ง
  12. Template ข้อความ

  13. บันทึกกลุ่ม

การจับคู่กับ HIS:

  1. ข้อมูลนัดจาก HIS จะมีฟิลด์ระบุประเภท (เช่น appointment_type)
  2. ระบบใช้ Mapping Table จับคู่:

  3. HIS Code → ระบบกลุ่มแจ้งเตือน

  4. เช่น: "ULTRASOUND" → "US"
  5. เช่น: "MAMMOGRAM" → "MG"

  6. ถ้าไม่มีใน Mapping → ใช้กลุ่ม "ทั่วไป" (Default)

การจัดการกลุ่ม:

  • เพิ่ม/แก้ไข/ลบกลุ่ม
  • เปิด/ปิดการใช้งานกลุ่ม (Soft Delete)
  • ย้ายนัดจากกลุ่มหนึ่งไปอีกกลุ่มได้
  • Copy การตั้งค่าจากกลุ่มอื่น

ตัวอย่างกลุ่ม (ตาม TOR: แผนกเอกซเรย์):

  • US (Ultrasound): อัลตราซาวด์
  • MG (Mammogram): เอกซเรย์เต้านม
  • X-Ray: เอกซเรย์ทั่วไป
  • CT Scan: ซีทีสแกน
  • MRI: เอ็มอาร์ไอ
  • Fluoroscopy: เอกซเรย์ส่องกล้อง

UI/UX Requirements:

  • หน้ารายการกลุ่ม: แสดงเป็น Card หรือ Table

  • แต่ละกลุ่มมีสี Badge และไอคอนประจำตัว

  • แสดงจำนวนนัดในแต่ละกลุ่ม
  • ปุ่มแก้ไข/ลบ/เปิด-ปิด

  • Modal สร้าง/แก้ไขกลุ่ม:

  • ฟอร์มกรอกข้อมูลครบถ้วน

  • Color Picker สำหรับเลือกสี
  • Icon Picker สำหรับเลือกไอคอน
  • Preview แสดงตัวอย่างข้อความที่จะส่ง

  • Mapping Interface:

  • ตาราง 2 คอลัมน์ (HIS Code ↔ กลุ่มระบบ)

  • Drag & Drop หรือ Dropdown จับคู่
  • ปุ่ม "Auto Mapping" พยายามจับคู่อัตโนมัติ

  • Dashboard: แสดงกราฟจำนวนนัดแต่ละกลุ่ม


4. กำหนดรูปแบบข้อความแต่ละกลุ่ม

TOR Reference: 3.4.4

คำอธิบาย:

ฟีเจอร์สำหรับกำหนด Template ข้อความแจ้งเตือนสำหรับแต่ละกลุ่มการนัดหมาย เพื่อให้ข้อความตรงกับลักษณะการตรวจและมีข้อมูลที่จำเป็น เช่น การเตรียมตัว ข้อควรระวัง

การทำงาน:

Message Template Editor:

  1. เจ้าหน้าที่เข้าสู่หน้าแก้ไขกลุ่ม
  2. คลิกที่แท็บ "รูปแบบข้อความ"
  3. เห็น Text Editor สำหรับสร้างข้อความ
  4. สามารถใช้ Variables (ตัวแปร) ในข้อความ:

  5. {name} - ชื่อผู้ป่วย

  6. {appointment_date} - วันที่นัด
  7. {appointment_time} - เวลานัด
  8. {department} - แผนก
  9. {doctor} - ชื่อแพทย์
  10. {location} - สถานที่
  11. {hn} - รหัสผู้ป่วย

  12. ใส่ข้อความ และคลิกปุ่มแทรกตัวแปร

  13. Preview แสดงตัวอย่างข้อความจริง
  14. บันทึก Template

ตัวอย่าง Template:

Template นัด US (Ultrasound):

สวัสดีครับ/ค่ะ คุณ{name}

🏥 แจ้งเตือนการนัดหมาย
📅 วันที่: {appointment_date}
⏰ เวลา: {appointment_time}
📍 สถานที่: แผนกเอกซเรย์ ชั้น 2
🩺 ประเภท: Ultrasound (อัลตราซาวด์)

⚠️ ข้อแนะนำ:
- งดอาหาร 4-6 ชั่วโมงก่อนตรวจ (ถ้าตรวจช่องท้อง)
- ดื่มน้ำมาก 1 ลิตร ก่อนตรวจ 1 ชั่วโมง (ถ้าตรวจอุ้งเชิงกราน)

หากไม่สะดวกมาตามนัด กรุณาติดต่อ 02-XXX-XXXX

Template นัด MG (Mammogram):

สวัสดีค่ะ คุณ{name}

🏥 แจ้งเตือนการนัดตรวจเต้านม
📅 วันที่: {appointment_date}
⏰ เวลา: {appointment_time}
📍 สถานที่: แผนกเอกซเรย์ ชั้น 2

⚠️ ข้อแนะนำสำคัญ:
- งดใช้โรลออน/ครีมทาใต้วงแขนในวันตรวจ
- แต่งกายสะดวกต่อการถอดเสื้อส่วนบน
- แจ้งแพทย์หากกำลังตั้งครรภ์หรือให้นมบุตร

หากมีข้อสงสัย โทร 02-XXX-XXXX

กรณีพิเศษ:

  • ข้อความหลายภาษา: รองรับไทย/อังกฤษ (ถ้ามีผู้ป่วยต่างชาติ)
  • Personalization: ปรับข้อความตามเพศ/อายุ (เช่น "คุณพ่อ/คุณแม่")
  • Rich Message: ใช้ LINE Flex Message แสดงเป็น Card สวยงาม

UI/UX Requirements:

  • Template Editor:

  • Text Area ขนาดใหญ่ พร้อม Line Number

  • ปุ่ม "แทรกตัวแปร" (Insert Variable) แสดง Dropdown ตัวแปรทั้งหมด
  • Character Counter แสดงจำนวนตัวอักษร (LINE จำกัด 5,000 ตัว)
  • Emoji Picker สำหรับใส่อิโมจิ

  • Preview Panel:

  • แสดงตัวอย่างข้อความแบบจำลอง LINE Chat

  • ปรับขนาดหน้าจอมือถือ (Mobile View)
  • ทดสอบกับข้อมูลตัวอย่างหลายแบบ

  • Template Library:

  • Template สำเร็จรูป (เลือกใช้ได้เลย)

  • บันทึก Template ที่สร้างเองเป็น Favorite
  • Copy จาก Template อื่น

  • Version Control: เก็บประวัติการแก้ไข Template (Rollback ได้)


5. ตั้งเวลาดึงข้อมูลนัดหมายจาก HIS

TOR Reference: 3.4.5

คำอธิบาย:

ฟีเจอร์สำหรับกำหนดตารางเวลา (Schedule) ในการดึงข้อมูลนัดหมายจาก HIS/RIS/LIS มาอัปเดตในระบบ เพื่อให้ข้อมูลนัดหมายเป็นปัจจุบันและส่งการแจ้งเตือนได้ถูกต้อง

การทำงาน:

Sync Scheduler Configuration:

  1. เจ้าหน้าที่เข้าสู่หน้า "ตั้งค่าการซิงค์ข้อมูล"
  2. กำหนดความถี่การดึงข้อมูล:

  3. ทุก X นาที (เช่น ทุก 15 นาที, 30 นาที)

  4. ทุก X ชั่วโมง (เช่น ทุก 1 ชั่วโมง, 2 ชั่วโมง)
  5. ตามเวลาที่กำหนด (เช่น 08:00, 12:00, 16:00)
  6. Manual Sync: ปุ่มซิงค์ทันทีเมื่อต้องการ

  7. กำหนดช่วงข้อมูลที่ดึง:

  8. ดึงนัดย้อนหลัง X วัน (Default: 0 วัน = วันนี้)

  9. ดึงนัดล่วงหน้า X วัน (Default: 30 วัน)

  10. บันทึกการตั้งค่า

กระบวนการ Sync:

  1. Background Service (Windows Service/Linux Daemon) ทำงานตาม Schedule
  2. เชื่อมต่อกับ HIS Database (Read-Only)
  3. Query ข้อมูลนัดหมาย:
    SELECT * FROM appointments 
    WHERE appointment_date BETWEEN @start_date AND @end_date
    AND status = 'scheduled'
    
  4. เปรียบเทียบกับข้อมูลในระบบ:

  5. นัดใหม่ → เพิ่มเข้าระบบ

  6. นัดที่มีอยู่แล้ว → อัปเดตข้อมูล (เวลา, สถานะ)
  7. นัดที่ถูกยกเลิกใน HIS → อัปเดตสถานะเป็น "ยกเลิก" และไม่ส่งแจ้งเตือน

  8. บันทึก Sync Log (สำเร็จ/ล้มเหลว, จำนวนรายการ, เวลา)

การจัดการข้อผิดพลาด:

  • HIS ไม่ตอบสนอง: Retry 3 ครั้ง, Exponential Backoff
  • Connection Timeout: Alert ผู้ดูแลระบบทาง Email/LINE
  • Data Inconsistency: บันทึก Log รายละเอียด เพื่อตรวจสอบ

Monitoring & Alerts:

  • แสดงสถานะการ Sync แบบ Real-time
  • ประวัติการ Sync (Success/Failed)
  • Alert เมื่อ Sync ล้มเหลว 3 ครั้งติด

ตัวอย่างการตั้งค่า:

  • โรงพยาบาลขนาดเล็ก: Sync ทุก 1 ชั่วโมง (นัดไม่บ่อย)
  • โรงพยาบาลขนาดกลาง: Sync ทุก 30 นาที
  • โรงพยาบาลขนาดใหญ่: Sync ทุก 15 นาที (นัดหมายเยอะ ต้องทันสมัย)

UI/UX Requirements:

  • หน้าตั้งค่า Scheduler:

  • Radio Button เลือกความถี่ (นาที/ชั่วโมง/กำหนดเวลา)

  • Number Input กรอกตัวเลข พร้อม Validation
  • Time Picker สำหรับกำหนดเวลาเฉพาะ (Multiple Time Slots)
  • Toggle Switch เปิด/ปิด Auto Sync

  • Dashboard Sync Status:

  • Card แสดงสถานะการ Sync ล่าสุด (วันเวลา, ผลลัพธ์)

  • สถานะ: 🟢 Success / 🔴 Failed / 🟡 In Progress
  • แสดงจำนวนนัดที่ดึงมาล่าสุด
  • กราฟ Timeline แสดงประวัติการ Sync

  • ปุ่ม Manual Sync:

  • ปุ่มใหญ่เด่นชัด "ซิงค์ข้อมูลทันที"

  • แสดง Progress Bar ระหว่าง Sync
  • แสดงผลลัพธ์ทันทีเมื่อเสร็จ

  • Sync Log Viewer:

  • ตารางแสดงประวัติการ Sync (วันเวลา, สถานะ, จำนวนรายการ, ข้อผิดพลาด)

  • กรองตามสถานะ (All/Success/Failed)
  • ค้นหาตามวันที่
  • ปุ่ม Export Log

1.3.2 Feature: Appointment Data Sync

1. ดึงข้อมูลนัดหมายจาก HIS/RIS/LIS

TOR Reference: 3.7.2

คำอธิบาย:

กระบวนการดึงข้อมูลนัดหมายผู้ป่วยจากระบบ HIS (Hospital Information System), RIS (Radiology Information System), หรือ LIS (Laboratory Information System) มายังระบบแจ้งเตือน เพื่อให้มีข้อมูลนัดหมายที่ถูกต้องและเป็นปัจจุบัน

การทำงาน:

ข้อมูลนัดหมายที่ดึงมา (ตาม TOR 3.7.2):

  • HN: รหัสผู้ป่วย
  • ชื่อ-สกุลผู้ป่วย: ข้อมูลจาก Master Patient Index
  • วันที่นัด: Appointment Date
  • เวลานัด: Appointment Time
  • ประเภทการนัด: Appointment Type (US, MG, CT, etc.)
  • แพทย์ผู้นัด: Doctor Name
  • แผนก/คลินิก: Department
  • สถานะนัด: Scheduled/Confirmed/Cancelled
  • หมายเหตุ: Special Instructions (ถ้ามี)

กระบวนการดึงข้อมูล:

Step 1: เชื่อมต่อ Database:

  1. ใช้ Connection String ที่ตั้งค่าไว้
  2. เชื่อมต่อแบบ Read-Only
  3. ใช้ Connection Pool เพื่อประสิทธิภาพ

Step 2: Query ข้อมูล:

  1. ดึงข้อมูลนัดจากตารางที่เกี่ยวข้อง
  2. Join หลายตาราง (Patient, Appointment, Doctor, Department)
  3. Filter เฉพาะนัดที่ยังไม่ผ่านมา และยังไม่ถูกยกเลิก

Step 3: Data Transformation:

  1. แปลงข้อมูลให้เป็น Format ที่ระบบใช้
  2. Mapping ประเภทนัด (HIS Code → System Group)
  3. Validate ข้อมูล (วันที่ถูกต้อง, HN มีอยู่จริง)

Step 4: Import เข้าระบบ:

  1. เช็คว่านัดนี้มีในระบบแล้วหรือยัง (Check Duplicate)
  2. ถ้ายังไม่มี → Insert ใหม่
  3. ถ้ามีแล้ว → Update ข้อมูล (ถ้าเปลี่ยนแปลง)
  4. จับคู่กับ LINE User (ถ้าลงทะเบียนไว้แล้ว)

Step 5: Post-Processing:

  1. คำนวณวันเวลาที่ต้องส่งแจ้งเตือน
  2. สร้าง Notification Queue
  3. บันทึก Log การ Import

การจัดการข้อมูลซ้ำ:

  • ใช้ Unique Key: HN + Appointment Date + Appointment Type + Time
  • Update แทน Insert ถ้าพบข้อมูลซ้ำ
  • เก็บประวัติการเปลี่ยนแปลง (Audit Trail)

การจัดการนัดที่ถูกยกเลิก:

  1. เช็คสถานะใน HIS
  2. ถ้าถูกยกเลิก → อัปเดตสถานะในระบบ
  3. ถ้ายังไม่ได้ส่งแจ้งเตือน → ยกเลิกการส่ง
  4. ถ้าส่งไปแล้ว → ส่งข้อความแจ้งยกเลิกนัด

UI/UX Requirements:

  • หน้า Import History:

  • ตารางแสดงประวัติการดึงข้อมูล

  • คอลัมน์: วันเวลา, จำนวนนัดที่ดึง, จำนวนนัดใหม่, จำนวนนัดอัปเดต, สถานะ
  • สี Badge แสดงผลลัพธ์ (เขียว=สำเร็จ, แดง=ล้มเหลว)

  • Import Detail View:

  • คลิกดูรายละเอียดแต่ละครั้ง

  • แสดงรายการนัดที่ Import
  • แสดง Error (ถ้ามี)

  • Connection Test:

  • ปุ่มทดสอบการเชื่อมต่อ HIS

  • แสดงผลทันที (Success/Failed พร้อมข้อความ)

2. แสดงรายการนัดหมายทั้งหมด

TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับการจัดการ)

คำอธิบาย:

ฟีเจอร์แสดงรายการนัดหมายทั้งหมดที่อยู่ในระบบ เพื่อให้เจ้าหน้าที่สามารถดู ตรวจสอบ และจัดการนัดหมายได้อย่างมีประสิทธิภาพ

การทำงาน:

การแสดงรายการ:

  1. เจ้าหน้าที่เข้าสู่หน้า "รายการนัดหมาย"
  2. แสดงตารางนัดหมายทั้งหมด
  3. ข้อมูลที่แสดง:

  4. HN

  5. ชื่อ-สกุล
  6. วันที่นัด
  7. เวลานัด
  8. ประเภทนัด (Badge สี)
  9. แพทย์
  10. สถานะ (รอแจ้งเตือน/ส่งแล้ว/ยืนยันแล้ว/ยกเลิก)
  11. การลงทะเบียน LINE (มี/ไม่มี)

  12. รองรับ Pagination (20-50 รายการต่อหน้า)

Default View:

  • แสดงนัดในอนาคต (จากวันนี้เป็นต้นไป)
  • เรียงตามวันที่นัด (เร็วที่สุดก่อน)
  • แสดงเฉพาะนัดที่ยังไม่ยกเลิก

การแสดงรายละเอียด:

  1. คลิกที่รายการเพื่อเปิด Modal รายละเอียด
  2. แสดงข้อมูลครบถ้วน:

  3. ข้อมูลผู้ป่วยเต็ม

  4. รายละเอียดนัดหมาย
  5. ประวัติการแจ้งเตือน (ส่งวันไหน, เวลาไหน, สถานะอย่างไร)
  6. การตอบกลับของผู้ป่วย (ถ้ามี)
  7. หมายเหตุพิเศษ

UI/UX Requirements:

  • Table View: ตารางแบบ Responsive

  • Header Sort (คลิกหัวตารางเพื่อเรียง)

  • Row Highlight เมื่อ Hover
  • Badge สีแสดงประเภทนัดและสถานะ
  • ไอคอน LINE (✓ = ลงทะเบียนแล้ว, ✗ = ยังไม่ลงทะเบียน)

  • Calendar View: ปฏิทินแสดงนัดหมาย (Alternative View)

  • สลับระหว่าง Table/Calendar ได้

  • คลิกวันในปฏิทินเพื่อดูนัดในวันนั้น
  • สีต่างกันตามประเภทนัด

  • Quick Stats: แสดงสถิติด้านบน

  • จำนวนนัดวันนี้

  • จำนวนนัดสัปดาห์นี้
  • จำนวนนัดที่รอส่งแจ้งเตือน
  • อัตราการมาตามนัด (%)

3. ค้นหา/กรองนัดหมาย

TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับการจัดการ)

คำอธิบาย:

ฟีเจอร์สำหรับค้นหาและกรองนัดหมายตามเงื่อนไขต่างๆ เพื่อให้เจ้าหน้าที่หานัดที่ต้องการได้รวดเร็ว

การทำงาน:

Quick Search (ค้นหาเร็ว):

  • ช่องค้นหาเดียว รองรับ:

  • HN

  • ชื่อ-สกุล
  • เบอร์โทรศัพท์

  • ค้นหาแบบ Auto-complete

  • แสดงผลลัพธ์แบบ Real-time

Advanced Filter (กรองขั้นสูง):

  1. คลิกปุ่ม "กรองข้อมูล" เปิด Filter Panel
  2. เลือกเงื่อนไข:

  3. ช่วงวันที่: Date Range Picker (เริ่มต้น-สิ้นสุด)

  4. ประเภทนัด: Multi-select (US, MG, CT, etc.)
  5. แพทย์: Dropdown แพทย์ทั้งหมด
  6. สถานะนัด: Checkbox (รอส่ง/ส่งแล้ว/ยืนยัน/ยกเลิก)
  7. สถานะ LINE: มี/ไม่มี LINE
  8. การตอบกลับ: ยืนยัน/เลื่อน/ยกเลิก/ไม่ตอบ

  9. คลิก "ค้นหา" แสดงผลลัพธ์

  10. สามารถ Save Filter เป็น Preset (บันทึกเงื่อนไขที่ใช้บ่อย)

Export ผลลัพธ์:

  • ปุ่ม "Export" ส่งออกเป็น Excel
  • Export ตามเงื่อนไขที่กรองไว้
  • รวมข้อมูลครบถ้วน

UI/UX Requirements:

  • Search Bar:

  • ขนาดใหญ่ชัดเจน พร้อม Search Icon

  • Placeholder: "ค้นหาด้วย HN, ชื่อ, หรือเบอร์โทร"
  • แสดง Dropdown ผลลัพธ์ขณะพิมพ์

  • Filter Panel:

  • Slide จากด้านขวา หรือ แสดงเป็น Card ด้านบน

  • แต่ละ Filter มี Clear Button
  • ปุ่ม "ล้างทั้งหมด" และ "ค้นหา"
  • แสดงจำนวนผลลัพธ์ที่พบ

  • Filter Chips:

  • แสดง Tag ของเงื่อนไขที่เลือก (เช่น "วันที่: 1-30 พ.ย.", "ประเภท: US, MG")

  • คลิก X บน Chip เพื่อลบเงื่อนไขนั้น

  • Saved Filters:

  • Dropdown "ค้นหาที่บันทึกไว้"

  • เช่น "นัด US สัปดาห์นี้", "นัดที่ยังไม่มี LINE"

4. จัดการนัดหมาย (เพิ่ม/แก้ไข/ยกเลิก)

TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับ Manual Override)

คำอธิบาย:

ฟีเจอร์สำหรับเจ้าหน้าที่จัดการนัดหมายแบบ Manual เมื่อมีกรณีพิเศษ เช่น เพิ่มนัดด่วน แก้ไขข้อมูลที่ผิด หรือยกเลิกนัด (เสริมจากการ Sync อัตโนมัติ)

การทำงาน:

เพิ่มนัดหมายใหม่ (Manual):

  1. คลิกปุ่ม "เพิ่มนัดหมาย"
  2. กรอกข้อมูล:

  3. ค้นหาผู้ป่วย (HN หรือ ชื่อ)

  4. เลือกวันที่และเวลานัด
  5. เลือกประเภทนัด
  6. เลือกแพทย์ (Optional)
  7. ใส่หมายเหตุ (Optional)

  8. กดบันทึก

  9. ระบบสร้างนัดและเตรียมส่งแจ้งเตือนตามกำหนด

แก้ไขนัดหมาย:

  1. เปิดรายละเอียดนัดที่ต้องการแก้ไข
  2. คลิกปุ่ม "แก้ไข"
  3. แก้ไขข้อมูลที่ต้องการ (วันที่/เวลา/ประเภท)
  4. ระบุเหตุผล (บังคับกรอก)
  5. บันทึก
  6. ระบบอัปเดตและคำนวณเวลาแจ้งเตือนใหม่
  7. ถ้าส่งแจ้งเตือนไปแล้ว → ส่งข้อความแจ้งการเปลี่ยนแปลง

ยกเลิกนัดหมาย:

  1. เปิดรายละเอียดนัด
  2. คลิกปุ่ม "ยกเลิกนัด"
  3. ระบุเหตุผล (บังคับกรอก)
  4. Confirm
  5. อัปเดตสถานะเป็น "ยกเลิก"
  6. ถ้าผู้ป่วยมี LINE → ส่งข้อความแจ้งการยกเลิก
  7. บันทึก Activity Log

กรณีพิเศษ:

  • นัดซ้อน: เตือนเมื่อผู้ป่วยมีนัดในช่วงเวลาใกล้เคียง
  • Sync Conflict: ถ้าข้อมูลใน HIS และระบบไม่ตรงกัน ให้เจ้าหน้าที่เลือกว่าจะใช้ข้อมูลไหน

UI/UX Requirements:

  • Modal เพิ่ม/แก้ไขนัด:

  • ฟอร์มกรอกข้อมูลครบถ้วน

  • Autocomplete สำหรับค้นหาผู้ป่วย
  • Date Picker และ Time Picker
  • Dropdown ประเภทนัดและแพทย์
  • Text Area หมายเหตุ

  • Validation:

  • เช็ควันที่ไม่ให้นัดย้อนหลัง

  • เตือนถ้านัดในวันหยุด
  • เตือนถ้าผู้ป่วยมีนัดซ้อน

  • Confirmation Dialog:

  • แสดงข้อมูลก่อนบันทึก

  • ยืนยันก่อนยกเลิกนัด (Confirm 2 ครั้ง)

  • Activity Log: บันทึกทุกการเปลี่ยนแปลง พร้อมผู้แก้ไขและเหตุผล


สรุป Module 1.3: Appointment Management

ความสำคัญ:

Module นี้เป็นแกนกลางของระบบ ทำหน้าที่ดึงข้อมูลนัดจาก HIS จัดการกลุ่มและ Template ข้อความ และเตรียมข้อมูลสำหรับส่งแจ้งเตือน ต้องใส่ใจในเรื่องความถูกต้องของข้อมูล ความยืดหยุ่นในการตั้งค่า และประสิทธิภาพของการ Sync ครอบคลุมทุกข้อกำหนดใน TOR 3.4 (3.4.1 - 3.4.5) และ 3.7.2

Timeline Summary:

  • SA: 24 ชั่วโมง
  • UI Design: 36 ชั่วโมง
  • Backend Dev: 98 ชั่วโมง
  • Frontend Dev: 70 ชั่วโมง
  • Testing: 126 ชั่วโมง
  • PM: 22.8 ชั่วโมง
  • Marketing Officer: 1 ชั่วโมง (สำหรับออกแบบ Message Template)