ข้ามไปที่เนื้อหา

สัญญาบริการ: กระบวนการทำงาน

สถานะตลอดวงจรชีวิต

       draft  ───  date_start ≤ today ≤ date_end  ───►  active
        │                                                  │
        │                              date_end < today    │
        ▼                                                  ▼
   cancelled  ◄───  manual only (sticky)           expired

สี่สถานะ การเปลี่ยนผ่านอัตโนมัติสองแบบ การเปลี่ยนด้วยตนเองหนึ่งแบบ

สถานะ ตั้งโดย ความหมาย
draft การคำนวณเริ่มต้น (และการรีเซ็ตด้วยตนเอง) สัญญาในอนาคตหรือไม่สมบูรณ์
active cron รายวัน + การคำนวณเริ่มต้น อยู่ในช่วงความถูกต้อง
expired cron รายวัน + การคำนวณเริ่มต้น เลย date_end แล้ว
cancelled การกระทำของผู้ใช้เท่านั้น ยุติก่อนกำหนด; ยึดติด

การร่างสัญญา

  1. Maintenance → Service Contracts → :guilabel:New
  2. กรอก Name, Vendor, Contract Type, Date Start, Date End
  3. เพิ่ม Equipment ในแท็บ Equipment
  4. เพิ่มบรรทัด Coverage ต่อการซ่อมบำรุงแต่ละประเภท
  5. บันทึก — สัญญาจะได้รับเลขอ้างอิง (SC/YYYY/NNNNN) และ สถานะจะคำนวณจากวันที่

เครื่องมือแพทย์รายการเดียว → ผู้ขายกรอกอัตโนมัติ

หากคุณเพิ่มเครื่องมือแพทย์เพียงรายการเดียวลงในสัญญาใหม่ขณะที่ฟิลด์ Vendor ว่าง assigned_partner_id ของเครื่องมือแพทย์จะ กรอกให้โดยอัตโนมัติ

การเปิดใช้งาน

มีสองเส้นทางการเปิดใช้งาน:

เส้นทางที่ 1 — อัตโนมัติ (cron รายวัน)

หาก date_start ≤ today ≤ date_end เมื่อบันทึกสัญญา การคำนวณ เริ่มต้นจะตั้งสถานะเป็น active ทันที cron รายวันจะ ประเมินสัญญาทุกฉบับใหม่วันละครั้งเพื่อให้ฉบับร่างที่วันที่เริ่ม มาถึงภายหลังได้รับการเลื่อนสถานะโดยไม่ต้องดำเนินการ

เส้นทางที่ 2 — ด้วยตนเอง

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

พฤติกรรมแบนเนอร์ความครอบคลุม

เมื่อ maintenance.request ถูกเปิดบนเครื่องมือแพทย์ที่อยู่ในความครอบคลุม แบนเนอร์ จะปรากฏเหนือชื่อพร้อมข้อความที่เป็นไปตามเมทริกซ์นี้:

มีสัญญาบนเครื่องมือแพทย์? ประเภทบนคำขอ? ครอบคลุม? เรียกเก็บได้? แบนเนอร์
True อยู่นอกสัญญา — โรงพยาบาลชำระ
n/a True ✅ ครอบคลุมโดย SC/X — โรงพยาบาลต้องชำระ
True ⚠ ครอบคลุมโดย SC/X แต่ประเภทไม่อยู่ในความครอบคลุม
✅, billable=True True ✅ ครอบคลุมโดย SC/X — โรงพยาบาลต้องชำระ
✅, billable=False False ✅ ครอบคลุมโดย SC/X (ผู้ขาย) — ผู้ขายชำระ

สัญญาที่เลือกสำหรับคำขอคือ roots_active_contract_id ของเครื่องมือแพทย์ — สัญญาที่ใช้งานอยู่ล่าสุดตาม date_start หากสัญญาสองฉบับ ครอบคลุมเครื่องมือแพทย์เดียวกันด้วยช่วงเวลาที่ทับซ้อน สัญญาที่ เริ่มใหม่กว่า จะชนะ ช่างเทคนิคสามารถแทนที่ด้วยตนเองได้

กระบวนการต่ออายุ

date_end - 60d           date_end             date_end + 1
     │                       │                      │
     ▼                       ▼                      ▼
  Alert On            Renewal target            Auto-expire
     │                       │                      │
     └─ cron fires           ├─ procurement         └─ state=expired
        mail.activity        │  finalises renewal      cron sets
        on Responsible       │  (extends contract      roots_renewal_
        + sets               │  or signs new one)      alerted intact
        roots_renewal_       │
        alerted=True         │
                       ┌──────────────┐
                       │ Option A     │ Option B
                       │ Extend       │ Replace
                       │ existing     │ with new
                       │ contract     │ contract
                       │              │
                       │ Edit dates,  │ Create new
                       │ reset        │ contract,
                       │ roots_       │ leave old
                       │ renewal_     │ one to
                       │ alerted=False│ auto-expire
                       └──────────────┘

ตัวเลือก A — ขยายเวลา (พบบ่อยที่สุดสำหรับการรับประกัน)

  1. เปิดฟอร์มสัญญา
  2. เลื่อน Date End ไปข้างหน้า (เช่น เพิ่ม 12 เดือน)
  3. รีเซ็ต Renewal Alerted เป็น False (ในกลุ่ม Validity)
  4. บันทึก — สัญญายังคง active, Alert On คำนวณใหม่ และ รอบการต่ออายุครั้งถัดไปพร้อมทำงาน

ตัวเลือก B — แทนที่ (พบบ่อยที่สุดสำหรับ MA)

  1. สร้างสัญญาใหม่ที่เริ่มในวันถัดจากวันที่สัญญาเก่าสิ้นสุด
  2. เพิ่มเครื่องมือแพทย์ชุดเดียวกันลงในสัญญาใหม่
  3. คัดลอกบรรทัดความครอบคลุม (หรือปรับปรุงตามการเจรจาใหม่)
  4. ปล่อยสัญญาเก่าไว้ — มันจะหมดอายุโดยอัตโนมัติเมื่อ date_end ผ่านไป
  5. roots_active_contract_id ของเครื่องมือแพทย์จะสลับไปยังสัญญาใหม่ โดยอัตโนมัติ (สัญญาที่เริ่มใหม่กว่าชนะ)

การยกเลิก

หากต้องการยุติสัญญาก่อนกำหนด (เช่น เครื่องมือแพทย์ถูกปลดระวาง ผู้ขาย ผิดสัญญา):

  1. เปิดฟอร์มสัญญา
  2. คลิก :guilabel:Cancel Contract ในส่วนหัว
  3. ยืนยัน

สถานะจะกลายเป็น cancelled (ยึดติด — การคำนวณใหม่ตามวันที่จะ ไม่ ยกเลิกการยกเลิก) roots_active_contract_id ของเครื่องมือแพทย์จะ ทิ้งสัญญานี้ไป (cancelled ไม่ถือว่า active) คำขอที่เชื่อมโยงกับ สัญญาที่ยกเลิกแล้วจะคงการเชื่อมโยงไว้เว้นแต่จะมีการคำนวณใหม่

หากต้องการคืนสัญญาที่ยกเลิกกลับเข้าสู่วงจรชีวิตตามวันที่:

  1. เปิดฟอร์มสัญญา (ยังอยู่ในสถานะ cancelled)
  2. คลิก :guilabel:Reset to Draft
  3. การคำนวณจะรันใหม่ตามวันที่ — สัญญาจะกลายเป็น draft, active หรือ expired ตามที่ปฏิทินกำหนด

สถานการณ์หลายสัญญา

เครื่องมือแพทย์หนึ่งรายการครอบคลุมโดยสองสัญญา (รับประกัน + MA)

สถานการณ์ที่พบบ่อย: การรับประกันจากผู้ผลิต 2 ปี + MA ส่วนขยาย 5 ปี ที่ซื้อแยกกัน ทั้งสองครอบคลุม MRI เครื่องเดียวกัน

  • เพิ่มเครื่องมือแพทย์ลงในสัญญาทั้งสอง
  • สัญญาทั้งสองจะ active หากช่วงเวลารวมวันนี้
  • roots_active_contract_id ของเครื่องมือแพทย์จะแปลงเป็น สัญญาที่เริ่มใหม่กว่า (date_start ล่าสุด)
  • คำขอเชื่อมโยงอัตโนมัติกับสัญญาที่ ใหม่กว่า
  • ช่างเทคนิคสามารถแทนที่ด้วยตนเองไปยังสัญญารับประกันได้หาก ข้อบกพร่องควรเรียกร้องกับสัญญานั้น

สัญญาหนึ่งฉบับครอบคลุมเครื่องมือแพทย์หลายรายการ (MA แบบฟลีต)

สถานการณ์ที่พบบ่อย: MA หนึ่งฉบับครอบคลุมเครื่องช่วยหายใจทั้ง 4 เครื่องใน ICU

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

สัญญาเฉพาะอะไหล่ที่ใช้เครื่องมือแพทย์ร่วมกับ MA ค่าแรง

สถานการณ์ที่พบบ่อย: อะไหล่จัดหาโดยผู้ขายเฉพาะทาง ค่าแรง ครอบคลุมโดยหน่วยงานอื่น

  • สร้างสองสัญญา ทั้งสองครอบคลุมเครื่องมือแพทย์เดียวกัน
  • สัญญาที่เริ่มใหม่กว่าชนะสำหรับการเชื่อมโยงอัตโนมัติ
  • แบนเนอร์ความครอบคลุมสะท้อนสัญญาที่เชื่อมโยงอัตโนมัติ — ช่างเทคนิค สลับด้วยตนเองเมื่อทำงาน "อีกครึ่งหนึ่ง"
  • ตรรกะเมทริกซ์การตัดสินใจ (Q4) สำหรับการกำหนดเส้นทางใบเบิก-จ่ายสินค้าไปยัง RFQ แทน สต็อก ไม่ได้ ถูกนำไปใช้ใน Q3 — มีเพียงแบนเนอร์ที่สะท้อน สถานการณ์ในวันนี้

การกำจัดการแจ้งเตือนการต่ออายุซ้ำ

หาก cron รายวันทำงานหนึ่งครั้ง กิจกรรมจะถูกสร้างและ roots_renewal_alerted จะเปลี่ยนเป็น True ในการรันครั้งต่อ ๆ ไป cron จะเห็น True และข้าม หากต้องการเปิดใช้การแจ้งเตือนใหม่ (เช่น คุณขยายเวลา สัญญาและต้องการการเตือนใหม่ใกล้ date_end ใหม่):

  1. เปิดฟอร์มสัญญา
  2. ในกลุ่ม Validity ยกเลิกการกาเครื่องหมาย Renewal Alerted
  3. บันทึก — การรัน cron ครั้งถัดไปจะสร้างกิจกรรมใหม่หาก today >= Alert On

นี่เป็นการรีเซ็ตด้วยตนเองเพียงอย่างเดียวบนสัญญา; ทุกอย่างที่เหลือ ขับเคลื่อนด้วยวันที่