diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index 206ba88..0b83152 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -3,7 +3,8 @@
"allow": [
"Bash(dir \"C:\\Users\\siwat\\Nextcloud\\Documents\\SATITM-Network 2024\\Manual\\photos\")",
"Bash(dir \"C:\\Users\\siwat\\Nextcloud\\Documents\\SATITM-Network 2024\\Manual\\photos\\cert_renew\")",
- "Bash(python:*)"
+ "Bash(python:*)",
+ "Bash(dir:*)"
],
"deny": [],
"ask": []
diff --git a/SDIC.md b/SDIC.md
new file mode 100644
index 0000000..84beb64
--- /dev/null
+++ b/SDIC.md
@@ -0,0 +1,365 @@
+# คู่มือการใช้งาน SDIC
+## ระบบเชื่อมโยงข้อมูลโรงเรียน (School Data Interconnect)
+### โรงเรียนสาธิตจุฬาลงกรณ์มหาวิทยาลัย ฝ่ายมัธยม
+#### sdic.satitchula.app
+
+---
+
+## สารบัญ
+
+1. [ภาพรวมระบบ](#ภาพรวมระบบ)
+2. [การเข้าสู่ระบบ SDIC](#การเข้าสู่ระบบ-sdic)
+3. [การจัดการอีเมล](#การจัดการอีเมล)
+4. [การซิงค์ข้อมูล](#การซิงค์ข้อมูล)
+5. [การจัดการ API Key](#การจัดการ-api-key)
+6. [การตรวจสอบระบบ](#การตรวจสอบระบบ)
+7. [การแก้ไขปัญหา](#การแก้ไขปัญหา)
+
+---
+
+## ภาพรวมระบบ
+
+SDIC (School Data Interconnect) เป็นแอปพลิเคชันที่พัฒนาโดย Siwat System เพื่อจัดการข้อมูลโรงเรียนทั่วทั้งระบบของ Siwat System และพาร์ทเนอร์ที่เชื่อมต่อ เข้าถึงได้ที่ **sdic.satitchula.app**
+
+### ฟังก์ชันหลัก
+
+- **การควบคุม MXRelay**: จัดการการส่งอีเมลจำนวนมาก
+- **การซิงค์ข้อมูล**: ควบคุมการไหลของข้อมูลจาก CUDReg ไปยัง Active Directory
+- **การตรวจสอบคุณภาพอากาศ**: จัดการเครื่องตรวจวัด IQAir PM2.5 และคุณภาพอากาศ
+- **การจัดการ API**: ให้บริการสร้างและจัดการ API key สำหรับการเชื่อมต่อระบบ
+
+---
+
+## การเข้าสู่ระบบ SDIC
+
+### ขั้นตอนการเข้าสู่ระบบ
+
+1. **เปิดเว็บเบราว์เซอร์และไปที่** **sdic.satitchula.app**
+
+2. **กรอกข้อมูลการเข้าสู่ระบบในหน้าล็อกอิน**
+
+ 
+
+ **ข้อมูลที่ต้องการ:**
+ - **Username or Email**: ชื่อผู้ใช้ Active Directory หรืออีเมล (example@satitm.chula.ac.th)
+ - **Password**: รหัสผ่าน Active Directory
+
+3. **คลิก "Log In" เพื่อเข้าสู่ระบบ**
+
+4. **ระบบจะนำคุณไปยังหน้า Dashboard เมื่อเข้าสู่ระบบสำเร็จ**
+
+ 
+
+---
+
+## การจัดการอีเมล
+
+### ภาพรวม
+
+SDIC ควบคุมระบบ MXRelay ที่โรงเรียนใช้สำหรับส่งอีเมลจำนวนมากผ่าน **mx.satitchula.app**
+
+### การตั้งค่า MXRelay
+
+| **พารามิเตอร์** | **ค่า** | **รายละเอียด** |
+|-----------------|---------|----------------|
+| **Server** | `mx.satitchula.app` | เซิร์ฟเวอร์ SMTP ของโรงเรียน |
+| **Port** | `587` | พอร์ตมาตรฐานสำหรับ SMTP Submission |
+| **Security** | `StartTLS` | เข้ารหัสการเชื่อมต่อ |
+
+### วิธีการยืนยันตัวตน
+
+MXRelay รองรับการยืนยันตัวตน 2 วิธี:
+
+| **วิธีการ** | **Username** | **Password** | **การใช้งาน** |
+|-------------|--------------|--------------|---------------|
+| **🔐 Active Directory** | ชื่อผู้ใช้ AD
*(เช่น `john.d`)* | รหัสผ่าน AD | ✅ ผู้ใช้ทั่วไป
✅ การส่งอีเมลแบบโต้ตอบ |
+| **🔑 API Key** | `apikey` | API Key จาก SDIC | ✅ ระบบอัตโนมัติ
✅ แอปพลิเคชัน
✅ การส่งจำนวนมาก |
+
+### การจัดการสิทธิ์อีเมล
+
+#### การเข้าถึงหน้าจัดการอีเมล
+
+1. **จาก Dashboard คลิกที่ "Email Management"**
+
+ 
+
+2. **เลือก "Email Permissions" เพื่อจัดการสิทธิ์**
+
+ 
+
+#### การเพิ่มสิทธิ์อีเมล
+
+1. **คลิกปุ่ม "+ Add Permission"**
+
+2. **กรอกข้อมูลในหน้าต่าง "Add Email Permission":**
+
+ 
+
+ - **Username (sAMAccountName)**: กรอกชื่อผู้ใช้ AD (เช่น john.doe)
+ - **Email Address or Domain**: กรอกอีเมลเฉพาะ (user@example.com) หรือโดเมน (example.com)
+
+3. **คลิก "Create" เพื่อบันทึกสิทธิ์**
+
+#### ข้อกำหนดเบื้องต้น
+
+- ผู้ใช้ต้องเข้าสู่ระบบ SDIC อย่างน้อยหนึ่งครั้งก่อนจึงจะสามารถเพิ่มสิทธิ์ได้
+- การเข้าสู่ระบบครั้งแรกจะโหลดข้อมูล AD ของผู้ใช้เข้าสู่ระบบ
+- คุณต้องมีสิทธิ์ผู้ดูแลระบบเพื่อจัดการสิทธิ์อีเมล
+
+### ประเภทของสิทธิ์อีเมล
+
+SDIC รองรับสิทธิ์อีเมลสองประเภทที่กำหนดว่าผู้ใช้สามารถส่งอีเมลจากที่อยู่ใดได้บ้าง:
+
+#### สิทธิ์เฉพาะที่อยู่ (Address-Specific Permissions)
+
+ให้สิทธิ์ส่งอีเมลจากที่อยู่อีเมลเฉพาะเจาะจงหนึ่งที่อยู่
+
+**ตัวอย่างที่ 1: ที่อยู่อีเมลเฉพาะ**
+- **Email Address**: newsletter@satitm.chula.ac.th
+- **ผลลัพธ์**: ผู้ใช้ john.doe สามารถส่งอีเมลได้เฉพาะจาก newsletter@satitm.chula.ac.th เท่านั้น
+
+**ตัวอย่างที่ 2: หลายที่อยู่เฉพาะ**
+
+เพื่อให้ผู้ใช้สามารถส่งจากหลายที่อยู่เฉพาะ ให้สร้างสิทธิ์แยกกัน:
+- สิทธิ์ที่ 1: john.doe → admissions@satitm.chula.ac.th
+- สิทธิ์ที่ 2: john.doe → events@satitm.chula.ac.th
+- **ผลลัพธ์**: ผู้ใช้ john.doe สามารถส่งได้จากทั้ง admissions@satitm.chula.ac.th และ events@satitm.chula.ac.th
+
+#### สิทธิ์ทั้งโดเมน (Domain-Wide Permissions)
+
+ให้สิทธิ์ส่งอีเมลจากที่อยู่ใดก็ได้ภายในโดเมนที่กำหนด
+
+**ตัวอย่างที่ 1: โดเมนโรงเรียน**
+- **Domain**: satitm.chula.ac.th
+- **ผลลัพธ์**: ผู้ใช้ mary.smith สามารถส่งอีเมลจากที่อยู่ใดก็ได้ที่ลงท้ายด้วย @satitm.chula.ac.th
+ - ✅ ส่งได้จาก: info@satitm.chula.ac.th
+ - ✅ ส่งได้จาก: library@satitm.chula.ac.th
+ - ✅ ส่งได้จาก: sports@satitm.chula.ac.th
+ - ❌ ส่งไม่ได้จาก: external@gmail.com
+
+**ตัวอย่างที่ 2: โดเมนเพิ่มเติม**
+- **Domain**: cudplus.satitm.chula.ac.th
+- **ผลลัพธ์**: ผู้ใช้สามารถส่งอีเมลจากที่อยู่ใดก็ได้ที่ลงท้ายด้วย @cudplus.satitm.chula.ac.th
+ - ✅ ส่งได้จาก: noreply@cudplus.satitm.chula.ac.th
+ - ✅ ส่งได้จาก: support@cudplus.satitm.chula.ac.th
+
+> **หมายเหตุ**: ในปัจจุบันมีเพียงโดเมน satitm.chula.ac.th และ cudplus.satitm.chula.ac.th เท่านั้นที่ได้รับการลงทะเบียนและอนุญาตในระบบ
+
+#### แนวทางปฏิบัติที่ดี
+
+**ข้อควรพิจารณาด้านความปลอดภัย:**
+- ควรให้สิทธิ์ทั้งโดเมนอย่างระมัดระวัง
+- ผู้ใช้ทั่วไปควรได้รับสิทธิ์เฉพาะที่อยู่
+- ตรวจสอบสิทธิ์เป็นประจำเพื่อให้แน่ใจว่ายังจำเป็น
+
+### การตรวจสอบบันทึกอีเมล
+
+สามารถตรวจสอบบันทึกการส่งอีเมลได้ที่:
+
+
+
+---
+
+## การซิงค์ข้อมูล
+
+### ภาพรวม
+
+SDIC จัดการการไหลของข้อมูลซิงค์จาก CUDReg (ระบบลงทะเบียน) เข้าสู่ Active Directory
+
+### สถาปัตยกรรมระบบ
+
+การไหลของข้อมูลซิงค์ทำงานดังนี้:
+- **CUDReg** (ระบบลงทะเบียน) → **Active Directory** (ระบบยืนยันตัวตน)
+- Active Directory จะซิงค์อัตโนมัติกับ:
+ - **RADIUS (NPS)**: การยืนยันตัวตน WiFi และ .1x
+ - **FortiGate**: Captive Portal, Content Filtering และ VPN
+ - **CUDIoT**: พอร์ทัลควบคุม Internet of Things
+ - **CUDPlus**: ระบบ eLearning
+ - **ZKTeco**: ระบบควบคุมการเข้าออก (เมื่อออนไลน์)
+
+### การเข้าถึงการซิงค์
+
+1. **จาก Dashboard คลิกที่ "Data Synchronization"**
+
+ 
+
+2. **เลือก "Data Sync" เพื่อดูสถานะการซิงค์**
+
+ 
+
+### การเริ่มต้นการซิงค์ข้อมูล
+
+1. ไปที่ Synchronization → Data Sync
+2. ระบบจะแสดงสถานะซิงค์ปัจจุบันของระบบที่เชื่อมต่อทั้งหมด
+3. เพื่อเริ่มการซิงค์แบบแมนนวล:
+ - คลิกที่ตัวเลือกซิงค์สำหรับ CUDReg → Active Directory
+ - ระบบจะแสดงกระบวนการซิงค์แบบหลายขั้นตอน
+
+### กระบวนการซิงค์
+
+#### ขั้นตอนที่ 1: เตรียมการ
+ระบบเตรียมการซิงค์โดยรวบรวมการเปลี่ยนแปลงจาก CUDReg
+
+#### ขั้นตอนที่ 2: ตรวจสอบการเปลี่ยนแปลง
+
+
+
+ตรวจสอบการเปลี่ยนแปลงที่จะถูกซิงค์:
+- **Create New Records**: แสดงระเบียนนักเรียน/พนักงานใหม่ที่จะเพิ่ม
+- **Update Existing Records**: แสดงการแก้ไขระเบียนที่มีอยู่
+- **Deletions**: แสดงระเบียนที่จะลบ
+
+คุณสามารถ:
+- เลือก/ยกเลิกการเปลี่ยนแปลงแต่ละรายการโดยใช้ checkbox
+- ใช้ตัวเลือก "Select All Creations", "Select All Updates", หรือ "Select All"
+- ค้นหาระเบียนเฉพาะโดยใช้กล่องค้นหา
+
+#### ขั้นตอนที่ 3: สรุป
+
+
+
+ตรวจสอบสรุปการซิงค์:
+- **New Entries**: จำนวนระเบียนใหม่ที่จะสร้าง
+- **Updates**: จำนวนระเบียนที่มีอยู่ที่จะแก้ไข
+- **Deletions**: จำนวนระเบียนที่จะลบ
+
+#### ขั้นตอนที่ 4: ยืนยันและดำเนินการ
+
+
+
+การยืนยันครั้งสุดท้ายก่อนนำการเปลี่ยนแปลงไปใช้:
+
+> **⚠️ คำเตือน**: การกระทำนี้ไม่สามารถยกเลิกได้ ให้แน่ใจว่าคุณได้ตรวจสอบการเปลี่ยนแปลงทั้งหมดอย่างรอบคอบแล้ว
+
+คลิก "Synchronize Now" เพื่อดำเนินการซิงค์
+
+#### ขั้นตอนที่ 5: เสร็จสิ้น
+
+
+
+การซิงค์เสร็จสมบูรณ์เมื่อขั้นตอนทั้งหมดแสดงเครื่องหมายถูกสีเขียว
+
+### การตรวจสอบการซิงค์
+
+#### รายงานการตรวจสอบ
+
+
+
+รายงาน Audit Log แสดงข้อมูล:
+- **ID**: รหัสประจำล็อก
+- **Action**: ประเภทการกระทำที่ดำเนินการ (เช่น RESET_PASSWORD)
+- **User**: ผู้ที่ดำเนินการ
+- **Description**: รายละเอียดของการกระทำ
+- **Timestamp**: เวลาที่เกิดการกระทำ
+- **Data**: ข้อมูลเพิ่มเติม (คลิกไอคอนข้อมูลเพื่อดู)
+
+---
+
+## การจัดการ API Key
+
+
+
+### การสร้าง API Key
+
+1. **ไปที่ "API Keys" จากเมนูหลัก**
+2. **คลิก "Create API Key" (ปุ่ม + Create API Key)**
+3. **ระบบจะสร้าง API key ใหม่สำหรับบัญชีของคุณ**
+4. **API key จะแสดงพร้อมกับ:**
+ - **API Key**: คีย์จริง (ปิดบังบางส่วนเพื่อความปลอดภัย)
+ - **Created**: เวลาที่สร้าง
+ - **Actions**: ตัวเลือกดู คัดลอก หรือลบคีย์
+
+### การจัดการ API Key
+
+- **ดูคีย์**: คลิกไอคอนตาเพื่อแสดง API key เต็ม
+- **คัดลอกคีย์**: คลิกไอคอนคัดลอกเพื่อคัดลอกคีย์ไปยังคลิปบอร์ด
+- **ลบคีย์**: คลิกไอคอนถังขยะเพื่อลบ API key
+
+### หมายเหตุด้านความปลอดภัย
+
+- API key ทำงานด้วยสิทธิ์เดียวกันกับผู้ใช้ที่สร้าง
+- เก็บ API key อย่างปลอดภัยและไม่แชร์ให้ผู้อื่น
+- หมุนเวียน API key เป็นประจำเพื่อความปลอดภัย
+
+### การใช้ API Key
+
+ผู้ถือ API key สามารถทำงานในฐานะผู้ใช้ด้วยสิทธิ์ของผู้ใช้นั้น การใช้ API key สำหรับการยืนยันตัวตน:
+
+- **Username**: apikey
+- **Password**: [API key จริง]
+
+---
+
+## การตรวจสอบระบบ
+
+### การตรวจสอบสถานะระบบ
+
+สามารถตรวจสอบสถานะการทำงานของระบบต่าง ๆ ได้จากหน้า Dashboard ที่แสดง:
+
+- สถานะการเชื่อมต่อ Active Directory
+- สถานะ MXRelay Server
+- สถานะการซิงค์ข้อมูล
+- จำนวน API Key ที่ใช้งานอยู่
+
+### การตรวจสอบล็อกระบบ
+
+1. **รายงานการตรวจสอบ**: ดูจากหน้า Audit Log
+2. **บันทึกอีเมล**: ตรวจสอบการส่งอีเมลจากหน้า Email Log
+3. **ประวัติการซิงค์**: ดูจากรายงานการซิงค์ข้อมูล
+
+---
+
+## การแก้ไขปัญหา
+
+### ปัญหาทั่วไป
+
+#### ไม่สามารถเข้าสู่ระบบได้
+
+**สาเหตุที่เป็นไปได้:**
+- ข้อมูลผู้ใช้หรือรหัスผ่านผิด
+- บัญชี AD ถูกปิดใช้งาน
+- ปัญหาการเชื่อมต่อเครือข่าย
+
+**วิธีแก้ไข:**
+1. ตรวจสอบข้อมูลการเข้าสู่ระบบ
+2. ลองใช้อีเมลแทนชื่อผู้ใช้
+3. ติดต่อผู้ดูแลระบบ IT
+
+#### ไม่สามารถส่งอีเมลได้
+
+**สาเหตุที่เป็นไปได้:**
+- ไม่มีสิทธิ์ส่งจากที่อยู่ที่ระบุ
+- การตั้งค่า SMTP ไม่ถูกต้อง
+- API key หมดอายุ
+
+**วิธีแก้ไข:**
+1. ตรวจสอบสิทธิ์อีเมลในระบบ SDIC
+2. ยืนยันการตั้งค่า MXRelay
+3. สร้าง API key ใหม่หากจำเป็น
+
+#### การซิงค์ข้อมูลล้มเหลว
+
+**สาเหตุที่เป็นไปได้:**
+- ข้อมูลใน CUDReg ไม่สมบูรณ์
+- ปัญหาการเชื่อมต่อ Active Directory
+- ข้อผิดพลาดในการจับคู่ข้อมูล
+
+**วิธีแก้ไข:**
+1. ตรวจสอบล็อกการซิงค์
+2. ตรวจสอบความสมบูรณ์ของข้อมูล
+3. ลองซิงค์อีกครั้งในภายหลัง
+
+### การติดต่อสำหรับความช่วยเหลือ
+
+หากพบปัญหาที่ไม่สามารถแก้ไขได้ด้วยตนเอง กรุณาติดต่อ:
+
+- **Siwat System Support**
+ - **อีเมล**: siwat@siwatinc.com
+ - **ผู้ติดต่อ**: ศิวัช ศิริชัย
+ - **โทรศัพท์**: 086-789-5193
+
+---
+
+*เอกสารฉบับนี้ถูกจัดทำขึ้นเพื่อใช้ภายในโรงเรียนสาธิตจุฬาลงกรณ์มหาวิทยาลัย ฝ่ายมัธยม*
+
+*อัปเดตล่าสุด: 31 สิงหาคม 2025*
\ No newline at end of file
diff --git a/photos/sdic/sdic_dashboard.png b/photos/sdic/sdic_dashboard.png
new file mode 100644
index 0000000..a700e82
Binary files /dev/null and b/photos/sdic/sdic_dashboard.png differ
diff --git a/photos/sdic/sdic_login.png b/photos/sdic/sdic_login.png
new file mode 100644
index 0000000..2942077
Binary files /dev/null and b/photos/sdic/sdic_login.png differ
diff --git a/photos/sdic/sdic_menu_email.png b/photos/sdic/sdic_menu_email.png
new file mode 100644
index 0000000..8044a5f
Binary files /dev/null and b/photos/sdic/sdic_menu_email.png differ
diff --git a/photos/sdic/sdic_menu_synchronization.png b/photos/sdic/sdic_menu_synchronization.png
new file mode 100644
index 0000000..7eb2420
Binary files /dev/null and b/photos/sdic/sdic_menu_synchronization.png differ
diff --git a/photos/sdic/sdic_page_apikey.png b/photos/sdic/sdic_page_apikey.png
new file mode 100644
index 0000000..46892c7
Binary files /dev/null and b/photos/sdic/sdic_page_apikey.png differ
diff --git a/photos/sdic/sdic_page_datasync.png b/photos/sdic/sdic_page_datasync.png
new file mode 100644
index 0000000..a247bb5
Binary files /dev/null and b/photos/sdic/sdic_page_datasync.png differ
diff --git a/photos/sdic/sdic_page_datasync_task_cudreg_ad_complete.png b/photos/sdic/sdic_page_datasync_task_cudreg_ad_complete.png
new file mode 100644
index 0000000..ac8e00c
Binary files /dev/null and b/photos/sdic/sdic_page_datasync_task_cudreg_ad_complete.png differ
diff --git a/photos/sdic/sdic_page_datasync_task_cudreg_ad_confirm.png b/photos/sdic/sdic_page_datasync_task_cudreg_ad_confirm.png
new file mode 100644
index 0000000..7cbea81
Binary files /dev/null and b/photos/sdic/sdic_page_datasync_task_cudreg_ad_confirm.png differ
diff --git a/photos/sdic/sdic_page_datasync_task_cudreg_ad_review.png b/photos/sdic/sdic_page_datasync_task_cudreg_ad_review.png
new file mode 100644
index 0000000..848c2ef
Binary files /dev/null and b/photos/sdic/sdic_page_datasync_task_cudreg_ad_review.png differ
diff --git a/photos/sdic/sdic_page_datasync_task_cudreg_ad_summary.png b/photos/sdic/sdic_page_datasync_task_cudreg_ad_summary.png
new file mode 100644
index 0000000..9113a58
Binary files /dev/null and b/photos/sdic/sdic_page_datasync_task_cudreg_ad_summary.png differ
diff --git a/photos/sdic/sdic_page_email_log.png b/photos/sdic/sdic_page_email_log.png
new file mode 100644
index 0000000..de4c8ba
Binary files /dev/null and b/photos/sdic/sdic_page_email_log.png differ
diff --git a/photos/sdic/sdic_page_email_permission.png b/photos/sdic/sdic_page_email_permission.png
new file mode 100644
index 0000000..3eeff48
Binary files /dev/null and b/photos/sdic/sdic_page_email_permission.png differ
diff --git a/photos/sdic/sdic_page_email_permission_add_perm_modal.png b/photos/sdic/sdic_page_email_permission_add_perm_modal.png
new file mode 100644
index 0000000..f8e0ca9
Binary files /dev/null and b/photos/sdic/sdic_page_email_permission_add_perm_modal.png differ
diff --git a/photos/sdic/sdic_page_sync_audit.png b/photos/sdic/sdic_page_sync_audit.png
new file mode 100644
index 0000000..c187ae3
Binary files /dev/null and b/photos/sdic/sdic_page_sync_audit.png differ