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
คำอธิบาย:
ฟีเจอร์สำหรับกำหนดว่าจะส่งการแจ้งเตือนล่วงหน้ากี่วันก่อนวันนัด เพื่อให้ผู้ป่วยมีเวลาเตรียมตัวและสามารถจัดการเวลาได้ ต้องมีความยืดหยุ่นรองรับหลายรูปแบบ
การทำงาน:
การตั้งค่าระยะเวลา:
- เจ้าหน้าที่เข้าสู่หน้า "ตั้งค่าการแจ้งเตือน"
- เลือกประเภทการนัดหมาย (เช่น US - Ultrasound, MG - Mammogram)
-
กำหนดระยะเวลาแจ้งเตือนล่วงหน้า:
-
1 วัน (Default)
- 2-3 วัน
- 1 สัปดาห์
-
กำหนดเอง (Custom) ระบุจำนวนวันเอง
-
สามารถตั้งค่าหลายระยะเวลาสำหรับแต่ละประเภทได้ เช่น:
-
แจ้งเตือนครั้งที่ 1: 3 วันก่อน
-
แจ้งเตือนครั้งที่ 2: 1 วันก่อน
-
บันทึกการตั้งค่า
ตัวอย่างการใช้งาน:
- นัด 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
คำอธิบาย:
ฟีเจอร์สำหรับกำหนดเวลาที่จะส่งข้อความแจ้งเตือน เพื่อไม่รบกวนผู้ป่วยในเวลาที่ไม่เหมาะสม (เช่น กลางคืน) และเพิ่มโอกาสที่ผู้ป่วยจะเห็นข้อความ
การทำงาน:
การตั้งเวลาส่ง:
-
กำหนดช่วงเวลาที่เหมาะสม เช่น:
-
เวลาเริ่มต้น: 09:00 น. (Default)
-
เวลาสิ้นสุด: 18:00 น. (ถ้าต้องการส่งหลายรอบ)
-
สามารถตั้งเวลาต่างกันตามประเภทนัดได้
- ถ้ามีข้อความหลายรายการ ระบบจะกระจายการส่งใน Time Window ที่กำหนด
ระบบ Scheduler (ตัวจัดการตารางเวลา):
- ระบบมี Background Service ตรวจสอบทุก 1 นาที
- ดึงรายการนัดที่ต้องส่งแจ้งเตือนในวันนี้
- เช็คว่าถึงเวลาที่ตั้งไว้หรือยัง
- ส่งข้อความผ่าน LINE API
- บันทึก 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 เป็นต้น
การทำงาน:
การสร้างกลุ่ม:
- เจ้าหน้าที่เข้าสู่หน้า "จัดการกลุ่มการแจ้งเตือน"
- คลิกปุ่ม "เพิ่มกลุ่มใหม่"
-
กรอกข้อมูลกลุ่ม:
-
ชื่อกลุ่ม: เช่น "นัด US", "นัด MG", "นัด CT"
- รหัสกลุ่ม: เช่น "US", "MG", "CT" (ใช้จับคู่กับข้อมูลจาก HIS)
- คำอธิบาย: รายละเอียดกลุ่ม
- สี: สีประจำกลุ่ม (สำหรับแสดงใน Dashboard)
-
ไอคอน: ไอคอนประจำกลุ่ม
-
กำหนดค่าเฉพาะกลุ่ม:
-
ระยะเวลาแจ้งเตือน
- เวลาส่ง
-
Template ข้อความ
-
บันทึกกลุ่ม
การจับคู่กับ HIS:
- ข้อมูลนัดจาก HIS จะมีฟิลด์ระบุประเภท (เช่น
appointment_type) -
ระบบใช้ Mapping Table จับคู่:
-
HIS Code → ระบบกลุ่มแจ้งเตือน
- เช่น: "ULTRASOUND" → "US"
-
เช่น: "MAMMOGRAM" → "MG"
-
ถ้าไม่มีใน 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:
- เจ้าหน้าที่เข้าสู่หน้าแก้ไขกลุ่ม
- คลิกที่แท็บ "รูปแบบข้อความ"
- เห็น Text Editor สำหรับสร้างข้อความ
-
สามารถใช้ Variables (ตัวแปร) ในข้อความ:
-
{name}- ชื่อผู้ป่วย {appointment_date}- วันที่นัด{appointment_time}- เวลานัด{department}- แผนก{doctor}- ชื่อแพทย์{location}- สถานที่-
{hn}- รหัสผู้ป่วย -
ใส่ข้อความ และคลิกปุ่มแทรกตัวแปร
- Preview แสดงตัวอย่างข้อความจริง
- บันทึก 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:
- เจ้าหน้าที่เข้าสู่หน้า "ตั้งค่าการซิงค์ข้อมูล"
-
กำหนดความถี่การดึงข้อมูล:
-
ทุก X นาที (เช่น ทุก 15 นาที, 30 นาที)
- ทุก X ชั่วโมง (เช่น ทุก 1 ชั่วโมง, 2 ชั่วโมง)
- ตามเวลาที่กำหนด (เช่น 08:00, 12:00, 16:00)
-
Manual Sync: ปุ่มซิงค์ทันทีเมื่อต้องการ
-
กำหนดช่วงข้อมูลที่ดึง:
-
ดึงนัดย้อนหลัง X วัน (Default: 0 วัน = วันนี้)
-
ดึงนัดล่วงหน้า X วัน (Default: 30 วัน)
-
บันทึกการตั้งค่า
กระบวนการ Sync:
- Background Service (Windows Service/Linux Daemon) ทำงานตาม Schedule
- เชื่อมต่อกับ HIS Database (Read-Only)
- Query ข้อมูลนัดหมาย:
SELECT * FROM appointments WHERE appointment_date BETWEEN @start_date AND @end_date AND status = 'scheduled' -
เปรียบเทียบกับข้อมูลในระบบ:
-
นัดใหม่ → เพิ่มเข้าระบบ
- นัดที่มีอยู่แล้ว → อัปเดตข้อมูล (เวลา, สถานะ)
-
นัดที่ถูกยกเลิกใน HIS → อัปเดตสถานะเป็น "ยกเลิก" และไม่ส่งแจ้งเตือน
-
บันทึก 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:
- ใช้ Connection String ที่ตั้งค่าไว้
- เชื่อมต่อแบบ Read-Only
- ใช้ Connection Pool เพื่อประสิทธิภาพ
Step 2: Query ข้อมูล:
- ดึงข้อมูลนัดจากตารางที่เกี่ยวข้อง
- Join หลายตาราง (Patient, Appointment, Doctor, Department)
- Filter เฉพาะนัดที่ยังไม่ผ่านมา และยังไม่ถูกยกเลิก
Step 3: Data Transformation:
- แปลงข้อมูลให้เป็น Format ที่ระบบใช้
- Mapping ประเภทนัด (HIS Code → System Group)
- Validate ข้อมูล (วันที่ถูกต้อง, HN มีอยู่จริง)
Step 4: Import เข้าระบบ:
- เช็คว่านัดนี้มีในระบบแล้วหรือยัง (Check Duplicate)
- ถ้ายังไม่มี → Insert ใหม่
- ถ้ามีแล้ว → Update ข้อมูล (ถ้าเปลี่ยนแปลง)
- จับคู่กับ LINE User (ถ้าลงทะเบียนไว้แล้ว)
Step 5: Post-Processing:
- คำนวณวันเวลาที่ต้องส่งแจ้งเตือน
- สร้าง Notification Queue
- บันทึก Log การ Import
การจัดการข้อมูลซ้ำ:
- ใช้ Unique Key: HN + Appointment Date + Appointment Type + Time
- Update แทน Insert ถ้าพบข้อมูลซ้ำ
- เก็บประวัติการเปลี่ยนแปลง (Audit Trail)
การจัดการนัดที่ถูกยกเลิก:
- เช็คสถานะใน HIS
- ถ้าถูกยกเลิก → อัปเดตสถานะในระบบ
- ถ้ายังไม่ได้ส่งแจ้งเตือน → ยกเลิกการส่ง
- ถ้าส่งไปแล้ว → ส่งข้อความแจ้งยกเลิกนัด
UI/UX Requirements:
-
หน้า Import History:
-
ตารางแสดงประวัติการดึงข้อมูล
- คอลัมน์: วันเวลา, จำนวนนัดที่ดึง, จำนวนนัดใหม่, จำนวนนัดอัปเดต, สถานะ
-
สี Badge แสดงผลลัพธ์ (เขียว=สำเร็จ, แดง=ล้มเหลว)
-
Import Detail View:
-
คลิกดูรายละเอียดแต่ละครั้ง
- แสดงรายการนัดที่ Import
-
แสดง Error (ถ้ามี)
-
Connection Test:
-
ปุ่มทดสอบการเชื่อมต่อ HIS
- แสดงผลทันที (Success/Failed พร้อมข้อความ)
2. แสดงรายการนัดหมายทั้งหมด
TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับการจัดการ)
คำอธิบาย:
ฟีเจอร์แสดงรายการนัดหมายทั้งหมดที่อยู่ในระบบ เพื่อให้เจ้าหน้าที่สามารถดู ตรวจสอบ และจัดการนัดหมายได้อย่างมีประสิทธิภาพ
การทำงาน:
การแสดงรายการ:
- เจ้าหน้าที่เข้าสู่หน้า "รายการนัดหมาย"
- แสดงตารางนัดหมายทั้งหมด
-
ข้อมูลที่แสดง:
-
HN
- ชื่อ-สกุล
- วันที่นัด
- เวลานัด
- ประเภทนัด (Badge สี)
- แพทย์
- สถานะ (รอแจ้งเตือน/ส่งแล้ว/ยืนยันแล้ว/ยกเลิก)
-
การลงทะเบียน LINE (มี/ไม่มี)
-
รองรับ Pagination (20-50 รายการต่อหน้า)
Default View:
- แสดงนัดในอนาคต (จากวันนี้เป็นต้นไป)
- เรียงตามวันที่นัด (เร็วที่สุดก่อน)
- แสดงเฉพาะนัดที่ยังไม่ยกเลิก
การแสดงรายละเอียด:
- คลิกที่รายการเพื่อเปิด Modal รายละเอียด
-
แสดงข้อมูลครบถ้วน:
-
ข้อมูลผู้ป่วยเต็ม
- รายละเอียดนัดหมาย
- ประวัติการแจ้งเตือน (ส่งวันไหน, เวลาไหน, สถานะอย่างไร)
- การตอบกลับของผู้ป่วย (ถ้ามี)
- หมายเหตุพิเศษ
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 (กรองขั้นสูง):
- คลิกปุ่ม "กรองข้อมูล" เปิด Filter Panel
-
เลือกเงื่อนไข:
-
ช่วงวันที่: Date Range Picker (เริ่มต้น-สิ้นสุด)
- ประเภทนัด: Multi-select (US, MG, CT, etc.)
- แพทย์: Dropdown แพทย์ทั้งหมด
- สถานะนัด: Checkbox (รอส่ง/ส่งแล้ว/ยืนยัน/ยกเลิก)
- สถานะ LINE: มี/ไม่มี LINE
-
การตอบกลับ: ยืนยัน/เลื่อน/ยกเลิก/ไม่ตอบ
-
คลิก "ค้นหา" แสดงผลลัพธ์
- สามารถ 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):
- คลิกปุ่ม "เพิ่มนัดหมาย"
-
กรอกข้อมูล:
-
ค้นหาผู้ป่วย (HN หรือ ชื่อ)
- เลือกวันที่และเวลานัด
- เลือกประเภทนัด
- เลือกแพทย์ (Optional)
-
ใส่หมายเหตุ (Optional)
-
กดบันทึก
- ระบบสร้างนัดและเตรียมส่งแจ้งเตือนตามกำหนด
แก้ไขนัดหมาย:
- เปิดรายละเอียดนัดที่ต้องการแก้ไข
- คลิกปุ่ม "แก้ไข"
- แก้ไขข้อมูลที่ต้องการ (วันที่/เวลา/ประเภท)
- ระบุเหตุผล (บังคับกรอก)
- บันทึก
- ระบบอัปเดตและคำนวณเวลาแจ้งเตือนใหม่
- ถ้าส่งแจ้งเตือนไปแล้ว → ส่งข้อความแจ้งการเปลี่ยนแปลง
ยกเลิกนัดหมาย:
- เปิดรายละเอียดนัด
- คลิกปุ่ม "ยกเลิกนัด"
- ระบุเหตุผล (บังคับกรอก)
- Confirm
- อัปเดตสถานะเป็น "ยกเลิก"
- ถ้าผู้ป่วยมี LINE → ส่งข้อความแจ้งการยกเลิก
- บันทึก 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)