# Prompt สร้างระบบ: แดชบอร์ดสรุปการแจกทรายอะเบทในหมู่บ้าน

> ก๊อปข้อความด้านล่างทั้งหมดไปวางในแชต AI (ChatGPT / Claude / Gemini)
> เพื่อให้ช่วยสร้างระบบแดชบอร์ดนี้ด้วย Google Apps Script + Google Sheets

---

ช่วยเขียนระบบ **แดชบอร์ดสรุปการแจกทรายอะเบทในหมู่บ้าน** ด้วย **Google Apps Script (Web App) + Google Sheets** ให้หน่อย

## โจทย์

เจ้าหน้าที่สาธารณสุข/อสม. บันทึกข้อมูลการแจกทรายอะเบทลง Google Sheets อยู่แล้ว
ต้องการเว็บแดชบอร์ดสำหรับ **อ่านข้อมูลอย่างเดียว (READ-ONLY)** เพื่อดูภาพรวม ค้นหา และติดตามงาน
โดย **ห้ามเขียนข้อมูลกลับไปที่ชีต** เด็ดขาด

## โครงสร้างข้อมูลในชีต

ชีตชื่อ `ข้อมูลแจกทรายอะเบท` มีคอลัมน์ดังนี้

| คอลัมน์ | คำอธิบาย |
|---|---|
| ลำดับ | เลขลำดับรายการ |
| รหัสรายการ | เช่น AB-69-001 |
| วันที่แจก | วันที่แจก (รองรับ พ.ศ. เช่น 06/01/2569) |
| หมู่ที่ | หมู่บ้านที่เท่าไร |
| ชื่อหมู่บ้าน | ชื่อหมู่บ้าน |
| ตำบล / อำเภอ / จังหวัด | พื้นที่ |
| ชื่อครัวเรือน/ผู้รับ | ผู้รับทราย |
| จำนวนหลังคาเรือน | จำนวนหลังคาเรือน |
| จำนวนทรายอะเบท (ซอง) | จำนวนซองที่แจก |
| จำนวนภาชนะที่ใส่ทราย | จำนวนภาชนะ |
| หน่วยงานผู้ดำเนินการ | เช่น รพ.สต. / อบต. |
| ชื่อ อสม. ผู้แจก | ผู้แจก |
| รอบการแจก | เช่น รอบที่ 1 |
| วันครบกำหนดรอบถัดไป | วันที่ต้องแจกรอบถัดไป |
| ค่า HI | House Index |
| ค่า CI | Container Index |
| สถานะ | แจกแล้ว / รอดำเนินการ |
| หมายเหตุ | ข้อความเพิ่มเติม |

## สิ่งที่ต้องการในระบบ

### ฝั่ง Code.gs (Server)
1. `doGet()` แสดงหน้าเว็บจากไฟล์ `Index.html` (ใช้ `include()` สำหรับแยกไฟล์ย่อยได้)
2. `getDashboardData()` อ่านข้อมูลทั้งหมดจากชีต แล้วคืนค่าเป็น object ที่มี
   - `success`, `message`
   - `rows` (ข้อมูลที่แปลงค่าแล้ว)
   - `meta` (ตัวเลือกสำหรับ dropdown: จังหวัด อำเภอ ตำบล หมู่บ้าน หน่วยงาน สถานะ รอบการแจก)
3. มี `CONFIG` ไว้ปรับค่าได้ง่าย:
   - `SHEET_NAME` — ชื่อชีต (ถ้าไม่พบให้ใช้ชีตแรกอัตโนมัติ)
   - `SPREADSHEET_ID` — เว้นว่างถ้าสคริปต์ผูกกับไฟล์ชีต / ใส่ ID ถ้าเป็น Standalone
   - `NEAR_DUE_DAYS` — จำนวนวันที่ถือว่า "ใกล้ครบกำหนด" (เช่น 30 วัน)
   - `HI_ALERT`, `CI_ALERT` — เกณฑ์พื้นที่เสี่ยง (กรมควบคุมโรคใช้ HI > 10)
4. อ่านหัวตารางแบบยืดหยุ่น (map ชื่อคอลัมน์ → ฟิลด์) เพื่อให้สลับตำแหน่งคอลัมน์ได้
5. รองรับวันที่ทั้งแบบ **พ.ศ.** และ **ค.ศ.** และรูปแบบ `dd/mm/yyyy`
6. คำนวณให้ในแต่ละแถว: จำนวนวันถึงกำหนดรอบถัดไป, เกินกำหนดหรือยัง, เป็นพื้นที่เสี่ยง HI/CI หรือไม่
7. ข้ามแถวว่าง และแปลงค่าตัวเลข/ข้อความให้สะอาดก่อนส่งออก
8. มีฟังก์ชัน `testGetDashboardData()` ไว้ทดสอบใน Editor

### ฝั่ง Index.html (หน้าเว็บ)
1. หน้าเดียวจบ (Single Page) ใช้ **Vanilla HTML/CSS/JS** ไม่ต้องมีไลบรารีภายนอก
2. **การ์ดสรุป (KPI)**: จำนวนรายการทั้งหมด, รวมซองทรายที่แจก, รวมหลังคาเรือน, รายการที่เกินกำหนด/ใกล้ครบกำหนด, พื้นที่เสี่ยง HI/CI
3. **ตัวกรองข้อมูล**: จังหวัด อำเภอ ตำบล หมู่บ้าน หน่วยงาน สถานะ รอบการแจก และช่องค้นหาข้อความ
4. **ตารางรายการ** แสดงข้อมูลที่กรองแล้ว พร้อมไฮไลต์แถวที่เสี่ยง/เกินกำหนด
5. **รายการที่ควรติดตาม** — แสดงเฉพาะรายการที่เกินกำหนดรอบถัดไป หรือค่า HI/CI เกินเกณฑ์
6. เรียกข้อมูลผ่าน `google.script.run.withSuccessHandler(...).getDashboardData()`
7. มีสถานะ Loading และข้อความเมื่อโหลดไม่สำเร็จ
8. **รองรับมือถือ** (Responsive) เพราะเจ้าหน้าที่มักเปิดจากมือถือ
9. ข้อความทั้งหมดเป็น **ภาษาไทย** อ่านง่าย

## ข้อกำหนดเพิ่มเติม
- โค้ดอ่านง่าย มีคอมเมนต์ภาษาไทยอธิบายส่วนสำคัญ
- ไม่ต้องมีระบบ Login (ใช้ภายในหน่วยงาน)
- **ห้ามเขียน/แก้ไข/ลบข้อมูลในชีต** — เป็นแดชบอร์ดอ่านอย่างเดียว
- แสดงวันที่เป็นรูปแบบไทย เช่น 6 ม.ค. 2569
