# จัดการสัญญาบริการ (Admin Portal)

> **ฟีเจอร์นี้ทำอะไร** — สร้างและจัดการสัญญาบริการ (Service Contract) ที่ผูกกับลูกค้า กำหนดช่วงเวลาสัญญา สินทรัพย์ที่คุ้มครอง ตาราง PM (บำรุงรักษาเชิงป้องกัน) และเงื่อนไข SLA เมื่อยืนยันสัญญา ระบบจะสร้างตารางงาน PM ให้อัตโนมัติตลอดอายุสัญญา
>
> **ใครใช้งาน** — ผู้ดูแลระบบ (Admin), SuperAdmin (ดูได้: Manager, User ตามสิทธิ์)
>
> **เข้าถึงได้ที่ไหน** — sidebar → **ลูกค้า (Customers) → สัญญาบริการ (Contracts)**
>
> **ข้อกำหนดที่เกี่ยวข้อง** — FR-021 (Contract Management), FR-009 (PM Calendar), UF-021, UF-009
>
> **โมดูลในโค้ดเบส** — `contract`, `contract.service`, `job` (PM job auto-generation)

---

## ก่อนเริ่มใช้งาน

ตรวจสอบให้แน่ใจว่า:

- [ ] บริษัทลูกค้าและสถานที่ (Location) ของลูกค้าถูกสร้างไว้แล้ว — ดูการจัดการลูกค้าในบท [03 — จัดการลูกค้า](03-customer-management.md)
- [ ] สินทรัพย์ (Asset) ที่ต้องการให้สัญญาคุ้มครองถูกลงทะเบียนใต้บริษัทลูกค้านั้นแล้ว
- [ ] เทมเพลตใบตรวจเช็ก (Check Sheet Template) สำหรับงาน PM ถูกตั้งค่าไว้แล้ว (ถ้าต้องการให้แนบกับสัญญา)
- [ ] บทบาทของคุณมีสิทธิ์ระดับ แก้ไข (EDIT) สำหรับสร้าง/แก้ไขสัญญา และ ลบ (DELETE) สำหรับลบสัญญา
- [ ] คุณทราบเงื่อนไขสถานะของสัญญา: **ร่าง (Draft) → ใช้งาน (Active) → หมดอายุ (Expired) / ยกเลิก (Terminated)**

---

## สถานการณ์: ดูและค้นหารายการสัญญาบริการ

### สิ่งที่คุณต้องการทำ

ดูสัญญาบริการทั้งหมด และค้นหาสัญญาที่ต้องการอย่างรวดเร็วด้วยตัวกรอง

### ขั้นตอน

1. ใน sidebar คลิก **ลูกค้า (Customers)** แล้วคลิกเมนูย่อย **สัญญาบริการ (Contracts)**

   ![หน้ารายการสัญญาบริการ](images/07-contract-list.png)

   <!-- 📸 NEED SCREENSHOT: หน้ารายการสัญญาบริการแสดงตารางพร้อมคอลัมน์เลขสัญญา ลูกค้า สถานที่ ประเภท วันเริ่ม/สิ้นสุด รอบ PM และป้ายสถานะ -->

2. อ่านข้อมูลในแต่ละแถวของตารางสัญญา:

   | คอลัมน์ | แสดงอะไร |
   |---------|----------|
   | เลขสัญญา (Contract Number) | รหัสสัญญาที่ไม่ซ้ำกัน |
   | ลูกค้า (Customer) | ชื่อบริษัทลูกค้า |
   | สถานที่ (Location) | สถานที่ของลูกค้าที่สัญญาครอบคลุม |
   | ประเภท (Contract Type) | PM / Service / SLA |
   | วันเริ่ม / วันสิ้นสุด (Start / End Date) | ช่วงเวลาที่สัญญามีผล |
   | รอบ PM (PM Frequency) | ความถี่ที่ระบบสร้างงาน PM |
   | สถานะ (Status) | ป้ายสีบอกสถานะสัญญา |
   | เมนูการกระทำ (⋮) | ดูรายละเอียด / แก้ไข / ลบ |

3. ทำความเข้าใจสีของป้ายสถานะ:

   | สถานะ | ภาษาไทย | สี | ความหมาย |
   |-------|---------|-----|----------|
   | Draft | ร่าง | เทา | สร้างแล้วแต่ยังไม่เริ่มสร้างงาน PM |
   | Active | ใช้งาน | เขียว | สัญญามีผล งาน PM ถูกสร้างแล้ว |
   | Expired | หมดอายุ | แดง | เลยวันสิ้นสุดสัญญา ไม่สร้างงาน PM ใหม่ |
   | Terminated | ยกเลิก | เทาเข้ม | ผู้ดูแลยกเลิกสัญญาก่อนหมดอายุ |

4. ค้นหาหรือกรองสัญญาด้วยวิธีใดวิธีหนึ่ง:

   | วิธี | ใช้ทำอะไร |
   |------|-----------|
   | ค้นหาด่วน (Quick Search) | พิมพ์เลขสัญญา หรือชื่อบริษัทลูกค้า |
   | กรองตามสถานะ (Status Filter) | เลือก ร่าง / ใช้งาน / หมดอายุ / ยกเลิก |
   | กรองตามช่วงวันที่ (Date Range) | เลือกช่วงวันเริ่มต้น–วันสิ้นสุด |

   > **เคล็ดลับ:** ใช้ตัวกรองสถานะ "หมดอายุ" เพื่อตรวจสัญญาที่ต้องต่ออายุ ระบบจะแจ้งเตือนล่วงหน้า 30 วันก่อนสัญญาหมดอายุ

### ผลลัพธ์ที่จะเกิดขึ้น

ตารางจะแสดงเฉพาะสัญญาที่ตรงกับเงื่อนไข ค่าตัวกรองจะคงอยู่จนกว่าคุณจะเปลี่ยนหรือล้างค่า คลิกเมนูการกระทำ (⋮) ของแถวใดเพื่อดูรายละเอียด แก้ไข หรือลบสัญญานั้น

---

## สถานการณ์: สร้างสัญญาบริการใหม่

### สิ่งที่คุณต้องการทำ

สร้างสัญญาบริการที่กำหนดลูกค้า ช่วงเวลา ตาราง PM สินทรัพย์ที่คุ้มครอง และเงื่อนไข SLA

### ขั้นตอน

1. ที่หน้ารายการสัญญาบริการ คลิกปุ่ม **+ สร้างสัญญา (+ Create Contract)** มุมขวาบน

   ![ฟอร์มสร้างสัญญาบริการ](images/07-contract-create-form.png)

   <!-- 📸 NEED SCREENSHOT: ฟอร์มสร้างสัญญาแสดงทุกส่วน รวมถึงตัวเลือกความถี่ PM และตัวเลือกสินทรัพย์ -->

2. กรอก **ข้อมูลสัญญา (Section 1: Contract Info)**:

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | เลขสัญญา (Contract Number)* | รหัสสัญญา | ต้องไม่ซ้ำกับสัญญาอื่นใน tenant เดียวกัน |
   | ประเภทสัญญา (Contract Type)* | เลือก PM / Service / SLA | เลือกจากรายการ |

3. เลือก **ลูกค้า (Section 2: Customer)**:

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | บริษัท (Company)* | เลือกบริษัทลูกค้าจากรายการ | บริษัทต้องถูกสร้างไว้ก่อน (ดูบท 03) |
   | สถานที่ (Location) | เลือกสถานที่ของลูกค้าจากรายการ | ขึ้นกับบริษัทที่เลือก |

4. กำหนด **ช่วงเวลาสัญญา (Section 3: Period)**:

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | วันเริ่มสัญญา (Start Date)* | วันที่สัญญาเริ่มมีผล | เป็นวันที่ที่ถูกต้อง |
   | วันสิ้นสุดสัญญา (End Date)* | วันที่สัญญาหมดอายุ | ต้องอยู่หลังวันเริ่มสัญญา |

5. กำหนด **ตาราง PM (Section 4: PM Schedule)** — เลือกความถี่และระบุวัน/วันที่:

   | ความถี่ (Frequency) | ภาษาไทย | สร้างงาน PM | ตัวอย่าง |
   |---------------------|---------|-------------|----------|
   | Weekly | รายสัปดาห์ | ทุกสัปดาห์ (เลือกวันในสัปดาห์) | 52 รอบ/ปี |
   | Monthly | รายเดือน | ทุกเดือน (เลือกวันที่ในเดือน) | 12 รอบ/ปี |
   | Yearly | รายปี | ปีละครั้ง (เลือกเดือนและวัน) | 1 รอบ/ปี |

   > **หมายเหตุ:** ระบบรองรับความถี่ daily, weekly, monthly, quarterly, yearly — ดูรายละเอียดการสร้างงานอัตโนมัติในสถานการณ์ "สร้างตาราง PM อัตโนมัติจากสัญญา" ด้านล่าง

6. เลือก **สินทรัพย์ที่คุ้มครอง (Section 5: Covered Assets)** — เลือกสินทรัพย์ของลูกค้าที่สัญญานี้ครอบคลุม

   > **หมายเหตุ:** เฉพาะสินทรัพย์ที่ลงทะเบียนใต้บริษัทลูกค้านี้แล้วเท่านั้นจึงจะแสดงให้เลือก หากยังไม่มี ให้ลงทะเบียนสินทรัพย์ก่อน

7. เลือก **เทมเพลตใบตรวจเช็ก (Section 6: Check Sheet)** — เลือกเทมเพลตใบตรวจเช็กสำหรับงาน PM (ไม่บังคับ)

   > **หมายเหตุ:** งาน PM ทุกใบที่ระบบสร้างจากสัญญานี้จะใช้เทมเพลตใบตรวจเช็กนี้ ช่างจะเห็นรายการตรวจเช็กตอนปฏิบัติงาน PM

8. กรอก **เงื่อนไข SLA (Section 7: SLA Terms)** (ไม่บังคับ):

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | เวลาตอบสนอง (SLA Response Time) | จำนวนชั่วโมงสูงสุดในการตอบสนอง | ตัวเลขชั่วโมง |
   | เวลาแก้ไขเสร็จ (SLA Resolution Time) | จำนวนชั่วโมงสูงสุดในการแก้ไขให้เสร็จ | ตัวเลขชั่วโมง |

   > **หมายเหตุ:** ช่องที่มีเครื่องหมาย * เป็นช่องที่ต้องกรอก

9. (ไม่บังคับ) คลิก **คำนวณรอบ (Calculate Rounds)** เพื่อดูตัวอย่างรอบ PM ที่จะถูกสร้าง — ระบบแสดงหมายเลขรอบ วันที่นัดหมาย สินทรัพย์ที่คุ้มครอง และช่าง (ถ้ามอบหมายแล้ว)

   ![ตัวอย่างรอบ PM ก่อนบันทึก](images/07-contract-calculate-rounds.png)

   <!-- 📸 NEED SCREENSHOT: หน้าต่างแสดงตัวอย่างรอบ PM ที่ระบบคำนวณ พร้อมหมายเลขรอบและวันที่นัดหมาย -->
   <!-- ⛔ DEMO BUILD GAP (2026-05-18): โมดูลสัญญาไม่พร้อมใช้ใน demo (`/contracts` และ `/contract` คืน 404, ไม่มีเมนู contract) — ต้อง capture ฟอร์มสร้างสัญญา + ผลคำนวณรอบจาก environment ที่เปิดโมดูลสัญญา -->

10. ตรวจทานข้อมูลทั้งหมด แล้วคลิก **บันทึก (Save)**

### ผลลัพธ์ที่จะเกิดขึ้น

สัญญาถูกสร้างด้วยสถานะ **ร่าง (Draft)** และระบบพากลับไปหน้ารายการสัญญา ในสถานะร่างยังไม่มีงาน PM ถูกสร้าง คุณต้องยืนยัน/เปิดใช้งานสัญญาเพื่อให้ระบบเริ่มสร้างงาน PM (ดูสถานการณ์ถัดไป)

> **คำเตือน:** หากกรอกข้อมูลไม่ครบหรือไม่ถูกต้อง ระบบจะแสดงข้อความผิดพลาดที่ช่องนั้น ให้แก้ไขแล้วบันทึกอีกครั้ง ตรวจสอบวันเริ่ม วันสิ้นสุด และความถี่ให้ถูกต้องก่อนยืนยันสัญญา

---

## สถานการณ์: สร้างตาราง PM อัตโนมัติจากสัญญา

### สิ่งที่คุณต้องการทำ

ยืนยันสัญญาที่เป็นร่าง เพื่อให้ระบบสร้างตารางงานบำรุงรักษาเชิงป้องกัน (PM) อัตโนมัติตลอดอายุสัญญา และเข้าใจว่าระบบสร้างอะไรขึ้นมาบ้าง

### ขั้นตอน

1. ที่หน้ารายการสัญญาบริการ คลิกเมนูการกระทำ (⋮) ของ **สัญญาที่เป็นร่าง (Draft)** ที่ต้องการ แล้วคลิก **ดูรายละเอียด (View Detail)**

   ![สัญญาสถานะร่างพร้อมปุ่มเปิดใช้งาน](images/07-contract-draft-activate.png)

   <!-- 📸 NEED SCREENSHOT: หน้ารายละเอียดสัญญาที่แสดงสถานะร่างและปุ่มเปิดใช้งาน -->

2. ตรวจทานข้อมูลสัญญาเป็นครั้งสุดท้าย — สิ่งเหล่านี้เป็นตัวกำหนดว่าระบบจะสร้างงาน PM อย่างไร:

   | ตรวจสอบ | ทำไมจึงสำคัญ |
   |---------|--------------|
   | วันเริ่ม–วันสิ้นสุดถูกต้อง | ระบบสร้างงาน PM ครอบคลุมช่วงวันที่นี้ทั้งหมด |
   | ความถี่ถูกต้อง | กำหนดจำนวนงานที่สร้าง (รายสัปดาห์ = มาก, รายปี = น้อย) |
   | สินทรัพย์ที่คุ้มครองครบ | ระบบสร้างงาน PM 1 ใบต่อสินทรัพย์ต่อรอบ |
   | เทมเพลตใบตรวจเช็กถูกแนบ | งาน PM ทุกใบที่สร้างจะใช้เทมเพลตนี้ |

3. คลิก **เปิดใช้งาน (Activate)** หรือ **ยืนยัน (Confirm)** เพื่อยืนยันสัญญา

4. ระบบคำนวณและสร้างตารางงาน PM อัตโนมัติจากค่าต่อไปนี้:

   | ข้อมูลที่ใช้ | ใช้ทำอะไร |
   |-------------|-----------|
   | วันเริ่มสัญญา (Start Date) | วันของงาน PM ใบแรก |
   | วันสิ้นสุดสัญญา (End Date) | วันสุดท้ายที่อาจมีงาน PM |
   | ความถี่ (Weekly/Monthly/Yearly) | ช่วงห่างระหว่างงาน PM แต่ละรอบ |
   | สินทรัพย์ที่คุ้มครอง | สร้างงาน PM 1 ใบต่อสินทรัพย์ต่อรอบ |
   | เทมเพลตใบตรวจเช็ก | งาน PM ทุกใบจะแนบเทมเพลตนี้ให้ช่างใช้ตอนปฏิบัติงาน |

   > **หมายเหตุ:** ตัวอย่าง สัญญารายเดือนที่คุ้มครอง 10 สินทรัพย์ เป็นเวลา 12 เดือน ระบบจะสร้างงาน PM ทั้งสิ้น 120 ใบ (10 สินทรัพย์ × 12 เดือน) ทันทีที่ยืนยันสัญญา

5. สถานะสัญญาเปลี่ยนจาก **ร่าง (Draft)** เป็น **ใช้งาน (Active)**

### ผลลัพธ์ที่จะเกิดขึ้น

ระบบสร้างงาน PM ทั้งหมดทันที งานแต่ละใบจะผูกกับสัญญา สินทรัพย์ที่คุ้มครองนั้น และสถานที่ของลูกค้า งาน PM ที่สร้างจะปรากฏใน **ปฏิทิน PM (PM Calendar)** และในรายการงาน โดยเริ่มต้นที่สถานะวางแผน **เลือกช่าง (เหลือง)** รอการมอบหมายช่างและสร้างใบงาน

> **เคล็ดลับ:** หลังยืนยันสัญญา ให้ไปที่ปฏิทิน PM เพื่อตรวจว่างานที่สร้างถูกต้องก่อนมอบหมายช่าง การมอบหมายช่าง สร้างใบงาน เลื่อนวันด้วยลากวาง และอนุมัติทั้งหมด ทำที่ปฏิทิน PM — ดูการใช้งานปฏิทิน PM ในบท [08 — จัดการงาน](08-job-management.md)

> **หมายเหตุ:** ปฏิทิน PM ใช้ป้ายสถานะวางแผน 4 แบบ: เลือกช่าง (ยังไม่มอบหมายช่าง) → รอยืนยัน (มอบหมายแล้ว รอยืนยัน) → ใบงาน (สร้างใบงานแล้ว) → เลยแผน (เลยวันนัดแต่ยังไม่สร้างใบงาน)

---

## สถานการณ์: แก้ไขสัญญาและสร้างตาราง PM ใหม่

### สิ่งที่คุณต้องการทำ

แก้ไขความถี่ ช่วงวันที่ หรือสินทรัพย์ของสัญญาที่ใช้งานอยู่ และให้ระบบสร้างงาน PM ในอนาคตใหม่ตามค่าที่เปลี่ยน

### ขั้นตอน

1. ที่หน้ารายการสัญญาบริการ คลิกเมนูการกระทำ (⋮) ของสัญญาที่ต้องการ แล้วคลิก **แก้ไข (Edit)**

   ![ฟอร์มแก้ไขสัญญาที่ใช้งานอยู่](images/07-contract-edit-form.png)

   <!-- 📸 NEED SCREENSHOT: ฟอร์มแก้ไขสัญญาที่ใช้งานอยู่ แสดงช่องความถี่ วันที่ และแท็บประวัติ -->

2. แก้ไขช่องที่ต้องการเปลี่ยน — สังเกตผลกระทบต่องาน PM:

   | ช่อง | แก้ไขได้ | ผลกระทบ |
   |------|:--------:|---------|
   | เลขสัญญา / ชื่อสัญญา | ได้ | แสดงผลเท่านั้น ไม่กระทบงาน |
   | วันเริ่มสัญญา (Start Date) | จำกัด | เลื่อนเร็วกว่างานที่เสร็จไปแล้วไม่ได้ |
   | วันสิ้นสุดสัญญา (End Date) | ได้ | ขยายออก = เพิ่มงาน PM, ลดสั้นลง = ลบงาน PM ในอนาคต |
   | ความถี่ (Frequency) | ได้ | สร้างงาน PM ในอนาคตใหม่ทั้งหมดตามรอบใหม่ |
   | เงื่อนไข SLA | ได้ | มีผลกับงานในอนาคตเท่านั้น |
   | สินทรัพย์ที่คุ้มครอง | ได้ | เพิ่มสินทรัพย์ = สร้างงานใหม่, ลบสินทรัพย์ = หยุดสร้างงานของสินทรัพย์นั้น |

3. (ไม่บังคับ) เปิดแท็บ **ประวัติ (History)** เพื่อดูประวัติการเปลี่ยนแปลงสัญญา

4. คลิก **บันทึก (Save)** ระบบจะสร้างงาน PM ในอนาคตใหม่ตามค่าที่เปลี่ยน:

   | ประเภทงาน | เกิดอะไรขึ้น |
   |-----------|--------------|
   | งานที่เสร็จไปแล้ว | ไม่กระทบ คงอยู่ในระบบตามเดิม |
   | งานในอนาคตที่ยังไม่ทำ | ถูกลบและสร้างใหม่ตามตารางใหม่ |
   | งานที่กำลังทำอยู่ | ไม่กระทบ ให้ทำต่อจนเสร็จตามปกติ |

### ผลลัพธ์ที่จะเกิดขึ้น

ระบบบันทึกการเปลี่ยนแปลงและแสดงข้อความแจ้งสำเร็จ ปฏิทิน PM จะอัปเดตตามตารางใหม่ ช่างที่ถูกมอบหมายงานในอนาคตที่ถูกลบจะได้รับการแจ้งเตือน

> **คำเตือน:** การเปลี่ยนความถี่ของสัญญาที่มีสินทรัพย์จำนวนมาก อาจสร้างหรือลบงานจำนวนมาก ตรวจสอบค่าให้รอบคอบก่อนบันทึก และตรวจปฏิทิน PM หลังบันทึกเพื่อยืนยันตารางใหม่

---

## สถานการณ์: ต่ออายุหรือยกเลิกสัญญา

### สิ่งที่คุณต้องการทำ

ต่ออายุสัญญาที่ใกล้หมดอายุ หรือยกเลิกสัญญาก่อนกำหนด และเข้าใจวงจรสถานะของสัญญา

### ขั้นตอน

1. ทำความเข้าใจวงจรสถานะของสัญญา:

   | จากสถานะ | ไปสถานะ | เกิดขึ้นเมื่อ |
   |----------|---------|---------------|
   | ร่าง (Draft) | ใช้งาน (Active) | ผู้ดูแลยืนยันสัญญา (ต้องกรอกช่องบังคับครบ) |
   | ใช้งาน (Active) | หมดอายุ (Expired) | ระบบเปลี่ยนอัตโนมัติเมื่อถึงวันสิ้นสุด |
   | ใช้งาน (Active) | ยกเลิก (Terminated) | ผู้ดูแลยกเลิก (พร้อมเหตุผล) |
   | ร่าง (Draft) | ยกเลิก (Terminated) | ผู้ดูแลยกเลิกร่างทิ้ง |

   > **หมายเหตุ:** ระบบแจ้งเตือนผู้ดูแลล่วงหน้า 30 วันก่อนสัญญาหมดอายุ สัญญาที่หมดอายุจะไม่สร้างงาน PM ใหม่อีก

2. **หากต้องการต่ออายุ** ให้เปิดสัญญาที่ใกล้หมดอายุ คลิก **แก้ไข (Edit)** แล้วขยาย **วันสิ้นสุดสัญญา (End Date)** ออกไป จากนั้นบันทึก — ระบบจะสร้างงาน PM เพิ่มสำหรับช่วงเวลาที่ขยาย (ดูสถานการณ์ "แก้ไขสัญญา")

3. **หากต้องการยกเลิก** ให้เปิดสัญญา คลิก **ยกเลิกสัญญา (Terminate)** ระบบจะให้กรอกเหตุผล แล้วยืนยัน

   <!-- VERIFY: ตำแหน่งและชื่อปุ่มยกเลิกสัญญา (Terminate) — UF-021 ระบุการเปลี่ยนสถานะ Active->Terminated พร้อมเหตุผล แต่ไม่ได้ระบุชื่อปุ่ม -->

### ผลลัพธ์ที่จะเกิดขึ้น

สัญญาที่ต่ออายุจะคงสถานะ **ใช้งาน (Active)** พร้อมงาน PM เพิ่มในช่วงที่ขยาย สัญญาที่ยกเลิกจะเปลี่ยนเป็น **ยกเลิก (Terminated)** และหยุดสร้างงาน PM ใหม่ สัญญาที่หมดอายุตามวันสิ้นสุดจะเปลี่ยนเป็น **หมดอายุ (Expired)** โดยอัตโนมัติ

---

## สถานการณ์: ลบสัญญา

### สิ่งที่คุณต้องการทำ

ลบสัญญาที่ไม่ต้องการออกจากระบบ

### ขั้นตอน

1. ที่หน้ารายการสัญญาบริการ คลิกเมนูการกระทำ (⋮) ของสัญญาที่ต้องการ แล้วคลิก **ลบ (Delete)**

2. ระบบตรวจสอบว่าสัญญามีงาน PM ที่กำลังใช้งานหรือกำลังทำอยู่หรือไม่:

   | สถานการณ์ | สิ่งที่เกิดขึ้น |
   |-----------|----------------|
   | มีงาน PM ที่กำลังใช้งาน/กำลังทำ | ลบไม่ได้ ระบบแสดงข้อความเตือน |
   | ไม่มีงาน PM ที่กำลังใช้งาน | ระบบแสดงกล่องยืนยัน "ยืนยันลบสัญญา?" |

3. หากลบได้ ให้คลิก **ยืนยัน (Confirm)** ในกล่องยืนยันเพื่อลบสัญญา

### ผลลัพธ์ที่จะเกิดขึ้น

สัญญาถูกลบออกจากระบบ และงาน PM ที่วางแผนไว้ (planned) ที่ผูกกับสัญญานี้จะถูกลบไปด้วย สัญญาจะหายจากรายการ

> **คำเตือน:** หากสัญญามีงาน PM ที่กำลังใช้งานหรือกำลังทำอยู่ ระบบจะบล็อกการลบ ให้รอจนงานเสร็จ หรือยกเลิกสัญญาแทนการลบ

---

## สถานการณ์: ดาวน์โหลดข้อมูลสัญญา

### สิ่งที่คุณต้องการทำ

ส่งออกรายการสัญญาเป็นไฟล์ CSV เพื่อทำรายงานหรือใช้งานภายนอก

### ขั้นตอน

1. ที่หน้ารายการสัญญาบริการ (ใส่ตัวกรองที่ต้องการก่อนได้)

2. คลิกปุ่ม **ดาวน์โหลด (Download)**

### ผลลัพธ์ที่จะเกิดขึ้น

ระบบสร้างไฟล์ CSV ตามตัวกรองที่ใช้อยู่ และดาวน์โหลดลงอุปกรณ์ของคุณ

---

## เมื่อเกิดปัญหา

| สิ่งที่คุณเห็น | ทำอย่างไร |
|---------------|-----------|
| ไม่มีสินทรัพย์ให้เลือกในช่อง "สินทรัพย์ที่คุ้มครอง" | สินทรัพย์ยังไม่ถูกลงทะเบียนใต้บริษัทลูกค้านี้ ลงทะเบียนสินทรัพย์ก่อน แล้วกลับมาสร้างสัญญาใหม่ |
| บันทึกสัญญาไม่ได้ มีข้อความผิดพลาดที่ช่อง | กรอกช่องที่มีเครื่องหมาย * ให้ครบ ตรวจว่าวันสิ้นสุดอยู่หลังวันเริ่ม และเลขสัญญาไม่ซ้ำ |
| เปิดใช้งานสัญญาแล้วแต่ไม่มีงาน PM ในปฏิทิน | 1. ตรวจว่าตั้งความถี่ PM และเลือกสินทรัพย์ที่คุ้มครองแล้ว 2. ตรวจว่าช่วงวันที่ครอบคลุมเดือนที่ดู 3. ล้างตัวกรองในปฏิทิน PM |
| "ลบไม่ได้ สัญญามีงาน PM ที่กำลังใช้งาน" | สัญญามีงาน PM ที่กำลังใช้งาน/กำลังทำอยู่ รอจนงานเสร็จ หรือยกเลิกสัญญา (Terminate) แทนการลบ |
| งาน PM ถูกสร้างเป็นจำนวนมากเกินคาด | ตรวจความถี่และจำนวนสินทรัพย์ที่คุ้มครอง (งาน = สินทรัพย์ × จำนวนรอบ) แก้ไขสัญญาเพื่อปรับความถี่หากผิด |
| แก้ไขสัญญาแล้วงานในอนาคตหายไป | เป็นปกติ — ระบบลบงานในอนาคตที่ยังไม่ทำและสร้างใหม่ตามตารางใหม่ งานที่เสร็จหรือกำลังทำไม่กระทบ |
| ไม่พบเมนู "สัญญาบริการ" ใน sidebar | บทบาทของคุณไม่มีสิทธิ์ดูสัญญา ติดต่อ SuperAdmin เพื่อตรวจสอบสิทธิ์ |
| "ไม่มีสิทธิ์เข้าถึง" หรือ error 403 | สร้าง/แก้ไขสัญญาต้องมีสิทธิ์ระดับ แก้ไข (EDIT) และลบต้องมีสิทธิ์ ลบ (DELETE) ติดต่อ SuperAdmin |

---

## อ้างอิงด่วน (Quick Reference)

| ต้องการ... | ไปที่ | คลิก |
|------------|-------|------|
| ดูรายการสัญญาทั้งหมด | sidebar → **ลูกค้า → สัญญาบริการ** | (โหลดรายการสัญญา) |
| ค้นหา/กรองสัญญา | หน้ารายการสัญญา | ช่องค้นหา / ตัวกรองสถานะ / ช่วงวันที่ |
| สร้างสัญญาใหม่ | หน้ารายการสัญญา | **+ สร้างสัญญา** → กรอกฟอร์ม → **บันทึก** |
| ดูตัวอย่างรอบ PM ก่อนบันทึก | ฟอร์มสัญญา | **คำนวณรอบ** |
| สร้างตาราง PM อัตโนมัติ | รายละเอียดสัญญา (สถานะร่าง) | **เปิดใช้งาน / ยืนยัน** |
| แก้ไขสัญญา / เปลี่ยนความถี่ | เมนูการกระทำ (⋮) ของสัญญา | **แก้ไข** → แก้ไข → **บันทึก** |
| ต่ออายุสัญญา | สัญญา → **แก้ไข** | ขยายวันสิ้นสุด → **บันทึก** |
| ยกเลิกสัญญา | รายละเอียดสัญญา | **ยกเลิกสัญญา** → กรอกเหตุผล → ยืนยัน |
| ลบสัญญา | เมนูการกระทำ (⋮) ของสัญญา | **ลบ** → **ยืนยัน** |
| ดาวน์โหลดข้อมูลสัญญา | หน้ารายการสัญญา | **ดาวน์โหลด** |
| ใช้งานปฏิทิน PM (มอบหมาย/อนุมัติ) | sidebar → **งาน** | ดูบท [08 — จัดการงาน](08-job-management.md) |
| จัดการบริษัท/สถานที่ลูกค้า | sidebar → **ลูกค้า** | ดูบท [03 — จัดการลูกค้า](03-customer-management.md) |

---

## ภาพหน้าจอที่ต้องเพิ่ม

| # | สิ่งที่ต้องถ่าย | เส้นทางหน้า |
|---|----------------|-------------|
| 1 | หน้ารายการสัญญาบริการพร้อมตารางและป้ายสถานะ | `/contracts` |
| 2 | ฟอร์มสร้างสัญญาแสดงทุกส่วน รวมตัวเลือกความถี่และสินทรัพย์ | `/contracts/create` |
| 3 | หน้าต่างตัวอย่างรอบ PM ที่ระบบคำนวณ | `/contracts/create` (คำนวณรอบ) |
| 4 | หน้ารายละเอียดสัญญาสถานะร่างพร้อมปุ่มเปิดใช้งาน | `/contracts/{id}` |
| 5 | ฟอร์มแก้ไขสัญญาที่ใช้งานอยู่ พร้อมแท็บประวัติ | `/contracts/{id}/edit` |

---

*อ้างอิง: FR-021, FR-009, UF-021, UF-009 · ยึดมาตรฐาน 06-support/user-manual-writing-standard.md*
