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

อะไหล่: กระบวนการทำงาน

กระบวนการ PM แบบครบวงจร

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

┌──────────────────────────────────────────────────────────────────────────┐
│  PM Plan (maintenance.plan)                                              │
│  "Calibration every 3 months"                                            │
└───────────────────────────────┬──────────────────────────────────────────┘
                                │ OCA cron fires (daily)
┌──────────────────────────────────────────────────────────────────────────┐
│  maintenance.request created                                             │
│  maintenance_plan_id = plan, maintenance_kind_id = "Calibration"        │
└───────────────────────────────┬──────────────────────────────────────────┘
                                │ roots_hemms_spare_parts create() hook
                                │ (equipment.allow_consumptions = True AND
                                │  equipment.roots_auto_generate_picking = True)
┌──────────────────────────────────────────────────────────────────────────┐
│  stock.picking created (draft, Consumption type)                         │
│  roots_request_no = "SR/2026/00001"                                      │
│  Moves: lines where kind_ids is empty OR "Calibration" ∈ kind_ids        │
└───────────────────────────────┬──────────────────────────────────────────┘
                                │ Technician receives notification
┌──────────────────────────────────────────────────────────────────────────┐
│  Technician reviews draft picking                                        │
│  • Can increase qty (e.g., found more battery drain than expected)       │
│  • Can remove lines not needed on this visit                             │
│  • Can add ad-hoc lines (parts found broken during inspection)           │
└───────────────────────────────┬──────────────────────────────────────────┘
                                │ Technician clicks "Validate"
┌──────────────────────────────────────────────────────────────────────────┐
│  stock.move → Done                                                       │
│  On-hand qty decremented in the source location                          │
│  roots_pending_move_count on the picking → 0                             │
│  Pending SR stat button on maintenance.request → 0                       │
└──────────────────────────────────────────────────────────────────────────┘

ทีละขั้นตอน: ช่างเทคนิคทำใบเบิก-จ่ายสินค้า PM ให้เสร็จ

  1. เปิด :menuselection:Maintenance --> Maintenance Requests แล้วค้นหา คำขอ PM (อยู่ในขั้น "PM Scheduled")
  2. คลิกปุ่มสถิติ Pending SR (แสดงจำนวนใบเบิก-จ่ายสินค้าที่กำลังดำเนินการ)
  3. ใบเบิก-จ่ายสินค้าแบบร่างจะเปิดขึ้น — ตรวจสอบรายการที่กรอกไว้ล่วงหน้า:
    • ตรวจ Product และ Demand (default_qty จากเทมเพลต)
    • คอลัมน์ On Hand แสดงสต็อกปัจจุบัน — ตรวจว่าไม่มีรายการใดเป็นศูนย์
    • ปรับจำนวนหากจำเป็น (แตะที่ฟิลด์จำนวน)
    • หากต้องการเพิ่มรายการ: คลิก :guilabel:Add a line → ค้นหาสินค้า → ตั้งจำนวน
    • หากต้องการลบรายการ: คลิกไอคอนถังขยะ
  4. เมื่อพร้อม คลิก :guilabel:Validate
  5. Odoo จะขอให้ยืนยัน; คลิก :guilabel:Apply
  6. ใบเบิก-จ่ายสินค้าย้ายไปสถานะ Done และสต็อกถูกหักลด

การจัดการ backorder

หากสินค้าหมดสต็อกและคุณยืนยันด้วยจำนวนบางส่วน Odoo จะเสนอให้สร้าง backorder สำหรับความต้องการที่เหลือ ยอมรับ backorder เพื่อติดตามจำนวนที่ยังไม่ได้จัดสรรต่อไป หรือ ปฏิเสธเพื่อตัดส่วนที่ขาดออกจากบัญชี

จะเกิดอะไรขึ้นหากเครื่องมือแพทย์ไม่มีรายการเทมเพลตอะไหล่?

หาก roots_spare_line_ids ว่างเปล่าเมื่อ PM cron ทำงาน _roots_auto_create_spare_picking() จะคืนค่าโดยไม่สร้างใบเบิก-จ่ายสินค้า — ไม่มีข้อผิดพลาดเกิดขึ้น คำขอ PM ถูก สร้างตามปกติ; ช่างเทคนิคสามารถเปิดใบเบิก-จ่ายสินค้าด้วยตนเองได้หากจำเป็น

จะเกิดอะไรขึ้นหากเทมเพลตมีรายการแต่ไม่มีรายการใดตรงกับประเภทของคำขอ?

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

คำขอซ่อมแก้ไข: การสร้างใบเบิก-จ่ายสินค้าด้วยตนเอง

สำหรับคำขอซ่อมแก้ไขที่ไม่ได้วางแผน (ไม่มี maintenance_plan_id) จะไม่มีการสร้าง ใบเบิก-จ่ายสินค้าอัตโนมัติ ช่างเทคนิคสร้างด้วยตนเอง:

  1. เปิดฟอร์มคำขอซ่อมบำรุง
  2. คลิก :guilabel:Create Picking (หากปุ่มมีให้ใช้) หรือ ไปที่ :menuselection:Inventory --> Operations --> Transfers → คลิก :guilabel:New
  3. ตั้ง Operation Type เป็นประเภทใบเบิก-จ่ายสินค้า Consumption ของคลังของเครื่องมือแพทย์
  4. ตั้ง Maintenance Request เป็นคำขอซ่อมแก้ไขที่เปิดอยู่
  5. เพิ่มรายการสินค้าสำหรับอะไหล่ที่จะเบิกใช้
  6. บันทึก — hook stock.picking.create() กำหนดหมายเลข SR ทันที
  7. ยืนยันเมื่อดึงอะไหล่ออกจากห้องเก็บของจริง

หมายเลข SR บนคำขอซ่อมแก้ไขด้วย

หมายเลข SR (SR/yyyy/nnnnn) ถูกกำหนดให้กับใบเบิก-จ่ายสินค้า ใด ๆ ที่เชื่อมโยงกับ คำขอซ่อมบำรุง — ไม่เพียงแต่ที่สร้างจาก PM เท่านั้น หมายความว่าการเบิกใช้อะไหล่ทุกครั้ง ไม่ว่าจะวางแผนไว้หรือซ่อมแก้ไข จะได้รับหมายเลขอ้างอิงแบบเรียงลำดับสำหรับร่องรอยการตรวจสอบ

หมายเลข Stock Request

หมายเลข SR ปรากฏที่ใด

ฟิลด์ roots_request_no มองเห็นได้ในสามที่:

  1. มุมมองรายการใบเบิก-จ่ายสินค้า — :menuselection:Maintenance --> Operations --> Stock Requests — คอลัมน์ SR No. ในรายการ
  2. ส่วนหัวฟอร์มใบเบิก-จ่ายสินค้า — ถัดจากการอ้างอิงใบเบิก-จ่ายสินค้าและฟิลด์ origin
  3. ฟอร์มคำขอซ่อมบำรุง — ผ่านรายการที่เชื่อมโยงของปุ่มสถิติ Pending SR

ทำไมหมายเลข SR จึงสำคัญต่อการตรวจสอบ

โรงพยาบาลที่อยู่ภายใต้การตรวจประเมินของ HA Thailand หรือ JCI จำเป็นต้องแสดงให้เห็นว่า การเบิกใช้อะไหล่สามารถสืบย้อนกลับไปยังใบสั่งงานที่เฉพาะเจาะจงได้ หมายเลข SR สร้างการเชื่อมโยงโดยตรง:

  • SR/2026/00042 ถูกเบิกใช้สำหรับ คำขอซ่อมบำรุง "MAINT-00153" (Calibration บน Vital Monitor #3, 2026-05-15)
  • ใบเบิก-จ่ายสินค้าแสดง: สาย ECG 2 ชิ้น, อะแดปเตอร์สอบเทียบ 1 ชิ้น — ยืนยันโดย ช่างเทคนิค "Somchai K." เวลา 14:32

ห่วงโซ่นี้ — PM plan → คำขอ PM → ใบเบิก-จ่ายสินค้า SR → stock move — เป็นไปตาม ข้อกำหนดด้านการสืบย้อนกลับ HA 3.3.2 (บันทึกการซ่อมบำรุงเชิงป้องกัน)

หมายเลข SR ไม่ถูกนำกลับมาใช้ซ้ำ

การใช้งาน ir.sequence ใช้ no_gap=False (โหมดมาตรฐาน) ดังนั้น หมายเลขอาจมีช่องว่างหากใบเบิก-จ่ายสินค้าถูกยกเลิก หากนโยบายการตรวจสอบของคุณ ต้องการการกำหนดหมายเลขแบบไม่มีช่องว่าง ให้เปลี่ยนการใช้งานลำดับเลขเป็น no_gap (ดู การตั้งค่า → ลำดับเลข Stock Request)

กิจกรรมสต็อกต่ำ

อะไรเป็นตัวกระตุ้น

งานตามเวลา (ir.cron) ทำงานรายวันด้วยโค้ด hemms.equipment.spare.line._cron_check_critical_low_stock() โดยจะค้นหา รายการอะไหล่ทั้งหมดที่:

[("roots_is_critical", "=", True), ("qty_available", "<=", 0)]

สำหรับแต่ละรายการที่ตรงกัน จะสร้าง กิจกรรมแจ้งเตือน (warning activity) บนเรกคอร์ด เครื่องมือแพทย์ — แต่เฉพาะเมื่อยังไม่มีกิจกรรมเหมือนกัน (ชื่อสินค้าเดียวกันในหมายเหตุ) อยู่บนเครื่องมือแพทย์นั้นเท่านั้น

กิจกรรมถูกมอบหมายให้ใคร

กิจกรรมถูกมอบหมายให้ equipment.technician_user_id — บุคคลที่ ระบุไว้ในฟิลด์ Responsible Technician บนฟอร์มเครื่องมือแพทย์ หาก ไม่มีช่างเทคนิคที่ถูกมอบหมาย กิจกรรมจะถอยกลับไปยังผู้ใช้ที่รัน cron (โดยทั่วไปคือผู้ดูแลระบบ admin)

มอบหมาย Responsible Technician ให้กับเครื่องมือแพทย์แต่ละรายการ

หากไม่มีการตั้งช่างเทคนิค การแจ้งเตือนสต็อกต่ำจะไปที่ admin และพลาดได้ง่าย ไปที่ :menuselection:Maintenance --> Equipment เปิดเครื่องมือแพทย์ แต่ละรายการ และกรอก Responsible Technician

กิจกรรมมีหน้าตาอย่างไร

กิจกรรมที่กำหนดเวลาไว้จะปรากฏใน chatter ของเครื่องมือแพทย์และใน มุมมอง Activities ของช่างเทคนิค (:menuselection:Discuss --> Activities):

Warning — Critical spare low stock: ECG Cable (5-lead)

ECG Cable (5-lead) on Vital Signs Monitor #3 has 0.0 units on hand.

กิจกรรมเป็นประเภท Warning (ไอคอนสีส้ม) ช่างเทคนิคสามารถ Mark Done เมื่อสั่งซื้ออะไหล่ซ้ำแล้ว หรือ Schedule Activity เพื่อ ติดตามผลพร้อมการอ้างอิงใบสั่งซื้อ

การระงับรายการซ้ำ

ก่อนสร้างกิจกรรม cron จะตรวจหากิจกรรมแจ้งเตือนที่เปิดอยู่และมีอยู่แล้ว บนเครื่องมือแพทย์เดียวกันซึ่ง note มีชื่อสินค้านั้น หาก มีอยู่แล้ว จะไม่สร้างการแจ้งเตือนซ้ำ การทำเช่นนี้ป้องกันไม่ให้ chatter ถูกถล่มด้วยการรัน cron รายวันต่อเนื่องกัน

การกำจัดรายการซ้ำจะถูกล้างโดยอัตโนมัติเมื่อช่างเทคนิคทำเครื่องหมาย กิจกรรมที่มีอยู่ว่าเสร็จแล้ว

ตารางเวลา cron

cron สำหรับสต็อกต่ำถูกกำหนดไว้ใน addons/roots/roots_hemms_spare_parts/data/ir_cron_data.xml และทำงานเวลา เที่ยงคืนทุกวัน (เขตเวลาของเซิร์ฟเวอร์) วิธีเปลี่ยนตารางเวลา:

  1. :menuselection:Settings --> Technical --> Scheduled Actions
  2. ค้นหา "HEMMS: Check critical spare low stock"
  3. ปรับ Interval Number และ Interval Type (เช่น ทุก 6 ชั่วโมง สำหรับโรงพยาบาลที่มี PM ลำดับความสำคัญสูงบ่อยครั้ง)

กรณีพิเศษ

เครื่องมือแพทย์ถูกเก็บถาวร — การแจ้งเตือนยังทำงานอยู่หรือไม่?

ใช่ cron ค้นหา hemms.equipment.spare.line โดยไม่กรองตาม สถานะ active ของเครื่องมือแพทย์ หากคุณเก็บถาวรเครื่องมือแพทย์ รายการอะไหล่จะยังคงอยู่ และ cron จะยังคงแจ้งเตือนหากสต็อกอะไหล่สำคัญวิกฤตเป็นศูนย์ วิธีหยุดการแจ้งเตือน ให้ลบรายการอะไหล่หรือเก็บถาวรสินค้า

สินค้าที่มีสต็อกเป็นศูนย์แต่มีใบสั่งซื้อที่ค้างอยู่

cron ไม่ตรวจสอบใบสั่งซื้อที่เปิดอยู่หรือการรับสินค้าที่กำลังเข้ามา — มันอ่านค่า qty_available แบบดิบ (สต็อกในมือเท่านั้น) หากคุณมีสต็อกที่สั่งซื้อแล้ว คุณสามารถปิด กิจกรรมด้วยตนเองพร้อมหมายเหตุ ("PO-00123 มาถึง 2026-05-28")

เครื่องมือแพทย์หลายเครื่องใช้อะไหล่สำคัญวิกฤตเดียวกัน

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

ขั้นตอนถัดไป