คุณคือผู้เชี่ยวชาญ Google Apps Script ที่สามารถอธิบายเรื่องยากให้เป็นเรื่องง่ายได้
งานของคุณคือเขียนโค้ดสำหรับ Server (ไฟล์ code.gs) เพื่อทำระบบรายงานความคลาดเคลื่อนทางยา โดยมีขั้นตอนดังนี้:
ส่วนที่ 1: การตั้งค่าพื้นฐาน
1. กำหนดค่าเริ่มต้น: สร้างตัวแปรสำหรับเก็บ ID ของ Google Sheets และชื่อของชีทต่างๆ ที่เราจะใช้:
* `SPREADSHEET_ID`: "YOUR_SHEET_ID_HERE" <-- *วาง ID ของคุณที่นี่*
* `ERROR_SHEET_NAME`: "MedicationErrors" (สำหรับเก็บข้อมูลความคลาดเคลื่อน)
* `DENOMINATOR_SHEET_NAME`: "Denominator_Monthly" (สำหรับเก็บข้อมูลตัวหารรายเดือน)
2. สร้างทางเข้าเว็บแอป: เขียนฟังก์ชัน `doGet(e)` ง่ายๆ เพื่อบอกว่าเมื่อมีคนเปิดลิงก์เว็บแอปของเรา ให้แสดงหน้าเว็บที่ชื่อว่า 'Dashboard'
3. สร้างตัวช่วย: เพิ่มฟังก์ชัน `include(filename)` สำหรับดึงโค้ดจากไฟล์อื่นมาใช้ในหน้าเว็บ (เช่น ไฟล์ CSS และ JS)
ส่วนที่ 2: ฟังก์ชันหลักสำหรับเตรียมข้อมูล (หัวใจของระบบ)
สร้างฟังก์ชันซึ่งจะรับ "วันที่เริ่มต้น" และ "วันที่สิ้นสุด" มาจากหน้าเว็บ แล้วทำงานตามลำดับนี้
1. เปิด Spreadsheet และเตรียมอ่านข้อมูลจากชีท "MedicationErrors" และ "Denominator_Monthly"
2. กรองข้อมูลความคลาดเคลื่อน: จากชีท "MedicationErrors" ให้เลือกมาเฉพาะรายการที่คอลัมน์ `EventDate` อยู่ภายในช่วงวันที่ที่ผู้ใช้เลือก
3. กรองข้อมูลตัวหาร: จากชีท "Denominator_Monthly" ให้เลือกมาเฉพาะเดือนที่เกี่ยวข้องกับช่วงวันที่ที่ผู้ใช้เลือก ชีทนี้จะมีการเก็บข้อมูลดังนี้
* คอลัมน์ `Month` (รูปแบบ "DD-MM-YYYY")
* คอลัมน์ `OPD_Prescriptions` (ยอดรวมใบสั่งยาผู้ป่วยนอก)
* คอลัมน์ `IPD_PatientDays` (ยอดรวมวันนอนผู้ป่วยใน)
4. รวมยอดตัวหาร: คำนวณ "ยอดรวมใบสั่งยาผู้ป่วยนอก" และ "ยอดรวมวันนอนผู้ป่วยใน" จากข้อมูลที่กรองมาในข้อ 3
5. คำนวณตัวชี้วัดหลัก (KPI): นำข้อมูลที่กรองได้จากข้อ 2 และ 4 ไปคำนวณค่าต่างๆ ดังนี้:
* อัตราความคลาดเคลื่อน 5 ประเภทหลัก (Prescribing, Transcribing, Pre-Dispensing, Dispensing, Administration) โดยแยกเป็นของผู้ป่วยนอก (OPD) และผู้ป่วยใน (IPD)
* สูตร OPD: (จำนวนครั้งของแต่ละประเภท / ยอดรวมใบสั่งยา OPD) * 1000
* สูตร IPD: (จำนวนครั้งของแต่ละประเภท / ยอดรวมวันนอน IPD) * 1000
* นับจำนวนตามระดับความรุนแรง: นับว่ามีความรุนแรงระดับ A, B, C, D อย่างละกี่ครั้ง และนับรวมระดับ E ถึง I เป็นกลุ่มเดียวกัน (E-I)
6. รวบรวมและส่งกลับ: นำผลลัพธ์ทั้งหมดจากข้อ 5 มารวมกันในรูปแบบที่ฝั่งหน้าเว็บ (Frontend) จะเข้าใจได้ง่าย แล้วส่งข้อมูลกลับไป
โปรดเขียนโค้ดทั้งหมดสำหรับไฟล์ `code.gs` ให้สมบูรณ์ตามนี้