สัญญาบริการ: การตั้งค่า¶
หน้านี้ครอบคลุมทุกแง่มุมที่ปรับตั้งค่าได้ของโมดูลสัญญาบริการ
ประเภทสัญญา¶
hemms.contract.type คือ master vocabulary ขนาดเล็กที่จำแนก สัญญาทุกฉบับ โมดูลมาพร้อมกับ ประเภทตั้งต้น 5 ประเภท (ผู้ดูแลขยายได้):
| Code | English Name | Thai Name | การใช้งานทั่วไป |
|---|---|---|---|
warranty | Manufacturer Warranty | รับประกันจากผู้ผลิต | รวมมากับการซื้อ 1–3 ปี |
ext_warranty | Extended Warranty | รับประกันแบบขยายเวลา | ส่วนขยายที่ซื้อหลังการรับประกันพื้นฐาน |
ma | Maintenance Agreement (MA) | สัญญาบำรุงรักษา | PM + ซ่อมแก้ไขครบวงจร; พบบ่อยใน MRI/CT |
spare_only | Spare Parts Only | เฉพาะอะไหล่ | ผู้ขายจัดหาอะไหล่ โรงพยาบาลทำงานเอง |
labor_only | Labor Only | เฉพาะค่าแรง | ผู้ขายให้ความเชี่ยวชาญ อะไหล่เรียกเก็บตามการใช้ |
การเพิ่มประเภทสัญญากำหนดเอง¶
- นำทางไปยัง :menuselection:
Maintenance --> Configuration --> Contract Types - คลิก :guilabel:
New - กรอกข้อมูล:
- Name (แปลได้, ภาษาอังกฤษ)
- Thai Name (
roots_name_th) - Code — ตัวระบุที่เสถียรและไม่ซ้ำ เป็นตัวพิมพ์เล็ก ไม่มีช่องว่าง (ใช้ โดยตรรกะปลายทาง เช่น ข้อความแบนเนอร์ Q3.5 และการกำหนดเส้นทาง Q4)
- Description — เมื่อใดควรใช้ประเภทนี้
- Sequence — การจัดลำดับการแสดงผล
- บันทึก
Code ขับเคลื่อนตรรกะ — เลือกค่าที่เสถียร
ฟิลด์ code ถูกอ้างอิงโดยตรรกะปลายทาง (เช่น ค่าคงที่ _WARRANTY_CODES = ("warranty", "ext_warranty") ใน maintenance_equipment.py กำหนดว่าป้าย Under-Warranty จะปรากฏบนฟอร์มเครื่องมือแพทย์หรือไม่) การเปลี่ยนชื่อ code หลังจากมีข้อมูล อยู่แล้วต้องใช้สคริปต์ migration แบบครั้งเดียว
การเก็บถาวรประเภทที่ไม่ใช้งาน¶
ปิด Active บนประเภทสัญญาเพื่อซ่อนจากดรอปดาวน์สัญญา ใหม่ สัญญาที่มีอยู่ของประเภทนั้นจะไม่ได้รับผลกระทบ
ลำดับเลขสัญญาบริการ (SC/2026/00001)¶
เลขอ้างอิงสัญญาถูกกำหนดเมื่อสร้างจากเรกคอร์ด ir.sequence (code hemms.service.contract)
รูปแบบเริ่มต้น¶
| การตั้งค่า | ค่า |
|---|---|
| Code | hemms.service.contract |
| Prefix | SC/%(year)s/ |
| Padding | 5 |
| Company | (ใช้ร่วมกันทุกบริษัท — company_id=False) |
การปรับแต่งคำนำหน้า¶
ลำดับเลขผู้ดูแลแก้ไขได้ผ่าน:
:menuselection:Settings --> Technical --> Sequences & Identifiers --> Sequences
ค้นหา HEMMS Service Contract การปรับแต่งทั่วไป:
- เพิ่มรหัสบริษัท:
SC/%(year)s/HMS/→SC/2026/HMS/00001 - สลับไปเป็นปีพุทธศักราช: คำนำหน้า
SC/2569/(คุณต้องอัปเดต รายปี; หรือเขียน server action ที่เปลี่ยนคำนำหน้าในวันที่ 1 มกราคม) - เพิ่ม padding มากขึ้นสำหรับโรงพยาบาลที่ออกสัญญาหลายพันฉบับ: ตั้ง padding เป็น 7
ลำดับเลขต่อบริษัท
หากต้องการให้มีลำดับเลขหนึ่งชุดต่อบริษัท ให้ทำสำเนาเรกคอร์ดลำดับเลข ตั้ง company_id บนแต่ละสำเนา และ Odoo จะกำหนดเส้นทางตาม บริษัทที่ใช้งานอยู่เมื่อสร้าง
ระดับ SLA¶
สัญญาทุกฉบับมี Selection roots_sla_tier สี่ระดับ:
| Tier | การตอบสนองทั่วไป | กรณีใช้งาน |
|---|---|---|
| Bronze | 24-72 ชั่วโมง | เครื่องมือแพทย์ความเสี่ยงต่ำ เครื่องมอนิเตอร์ระดับหอผู้ป่วย |
| Silver | 8-24 ชั่วโมง | เครื่องสร้างภาพ เครื่องวิเคราะห์ทางห้องปฏิบัติการ |
| Gold | 4-8 ชั่วโมง | อุปกรณ์ห้องผ่าตัด เครื่องช่วยหายใจ |
| Platinum | <4 ชั่วโมง | อุปกรณ์ค้ำจุนชีวิต ICU |
roots_sla_response_hours แบบอิสระ (Float) ให้คุณบันทึก ข้อผูกพันที่แน่นอนของผู้ขาย Q3 แสดงสิ่งเหล่านี้บนฟอร์มสัญญาและ ตัวกรองค้นหา; การตรวจจับการละเมิด SLA เป็นของ Q4
การแจ้งเตือนการต่ออายุ¶
สัญญาแต่ละฉบับมี roots_renewal_alert_days (Integer, ค่าเริ่มต้น 60) — จำนวนวันก่อน date_end ที่ cron รายวัน จะสร้างกิจกรรมการต่ออายุ
วิธีปรับแต่งต่อสัญญา:
- เปิดฟอร์มสัญญา
- ในกลุ่ม Validity เปลี่ยน Renewal Alert (days before end)
- ฟิลด์ Alert On จะคำนวณใหม่เป็น
date_end - roots_renewal_alert_days - บันทึก
วิธีปรับแต่งแบบทั่วทั้งระบบ ให้ตั้งค่าเริ่มต้นในนิยามโมเดล hemms.service.contract (ต้องใช้โมดูลกำหนดเองหรือเรกคอร์ด ir.default) เกณฑ์แบบหลายระยะ (90/60/30/7) ถูกเลื่อนไปเป็น Q4
cron รายวัน¶
HEMMS Service Contract — daily state + renewal alert ทำงานวันละ ครั้งและทำสองสิ่งในธุรกรรมเดียว:
- การเปลี่ยนสถานะ (draft → active → expired) ตาม
date_start/date_endสถานะ Cancelled จะยึดติด - การแจ้งเตือนการต่ออายุ สำหรับสัญญาที่ใช้งานอยู่ที่ถึงหรือเลยวันที่แจ้งเตือน หาก
roots_renewal_alerted=False
หากต้องการหยุด cron ชั่วคราว ให้แก้ไขผ่าน :menuselection:Settings --> Technical --> Automation --> Scheduled Actions และปิด Active
การตั้งค่าสองภาษา¶
โมดูลแสดงป้ายภาษาไทยบนสามเรกคอร์ด:
| ฟิลด์ | สองภาษา? | ที่ใด |
|---|---|---|
hemms.contract.type.name | แปลได้ | ต่อประเภทตั้งต้น |
hemms.contract.type.roots_name_th | ใช่ | ต่อประเภทตั้งต้น |
hemms.service.contract.name | ไม่แปล (ภาษาอังกฤษ) | ต่อสัญญา |
hemms.service.contract.roots_name_th | ใช่ | ต่อสัญญา |
การค้นหาบน hemms.service.contract จะดูที่ reference + name + roots_name_th ดังนั้นผู้ใช้ที่พิมพ์ข้อความภาษาไทยจะพบสัญญา
หากต้องการเพิ่มภาษาของหน่วยงานคุณ ให้ติดตั้ง language pack base ที่ตรงกันและแปลฟิลด์ Name ของประเภทสัญญาในแต่ละ locale
ACL / กลุ่มความปลอดภัย¶
มีกฎการเข้าถึงสองกฎมาพร้อมโมดูล:
| Group | Read | Write | Create | Unlink |
|---|---|---|---|---|
base.group_user (ผู้ใช้ภายในใด ๆ) | ✅ | ❌ | ❌ | ❌ |
maintenance.group_equipment_manager | ✅ | ✅ | ✅ | ✅ |
รูปแบบเดียวกันใช้กับทั้งสามโมเดล (hemms.contract.type, hemms.service.contract, hemms.service.contract.coverage.line)
การจำกัดการมองเห็นสัญญาเพิ่มเติม
สำหรับโรงพยาบาลขนาดใหญ่ที่มีทีม BME หลายทีม ให้ซ้อนกฎเรกคอร์ด (record rule) บน ACL — เช่น แสดงเฉพาะสัญญาที่ user_id = uid หรือผู้ใช้สังกัดทีม เพิ่มผ่าน :menuselection:Settings --> Technical --> Security --> Record Rules
ตัวกรองผู้ขาย — supplier domain ถูกเลื่อน¶
ปัจจุบันโมดูล ไม่ จำกัดตัวเลือก Vendor ให้เป็น partner ที่เป็น "supplier" ฟิลด์ supplier_rank มาจากโมดูล purchase ซึ่งเป็นทางเลือก และไม่อยู่ใน depends ของโมดูลนี้ สองวิธีในการ เพิ่มตัวกรองเมื่อคุณต้องการ:
- เพิ่ม
purchaseลงใน depends — ตัวเลือกที่หนักที่สุด; กระบวนการ PO เต็มรูปแบบจะพร้อมใช้งาน - เพิ่มบูลีน
roots_is_vendorบนres.partnerจากโมดูลติดตามผล เล็ก ๆ — เบากว่า เฉพาะเจาะจงต่อโรงพยาบาล
ทั้งสองตัวเลือกถูกติดตามเป็นงานติดตามผลของ Q3