Reverse Lab 2

Master Data ไม่ใช่แค่ทะเบียน: มันคือภาษากลางของโรงงาน

อ่าน QS-TOI-109 → 101 → 104 → 102 เพื่อเห็นว่าประเภทสินค้า ลายสี และ BOM ประกอบเป็น product identity อย่างไร

ลำดับที่ต้องสอน

109
ประเภทและคุณลักษณะวัสดุ
101
ทะเบียนสินค้า/วัตถุดิบ
104
ลาย สี งานชุบ และเจ้าของ
102
BOM version และ component

ถ้าสอน BOM ก่อน master data ผู้เรียนจะเข้าใจ BOM เป็นเพียง tree แต่จะไม่เห็นว่าแต่ละ node มีหน่วย นโยบายจัดหา ลายสี เวอร์ชัน วันมีผล และเจ้าของข้อมูลกำกับอยู่

Case 1: ชื่อ field ไม่เท่ากับความหมาย

Legacy conceptความหมายจากการ reverseชื่อใหม่ที่เสนอ
VersionBOM/product version แบบรุ่นรถ ไม่ใช่ revision workflow ซับซ้อนbom_version
StatusWeight A/B/Cpriority จากราคา/ระยะเวลา และสัมพันธ์ระยะขนส่งในคลังhandling_priority_class + mapping note
ProcessTimeค่าเฉลี่ยเวลาต่อหน่วยสำหรับ backward/forward planningprocess_time_seconds
ProcessSetupTimeเวลาตั้งเครื่องต่อ batch แต่บางหน้าเก่าเคยใช้ผิดเป็น Lead Timesetup_time_seconds
SourceBUY/MADE/SUBCONTRACT policysupply_method

Case 2: BOM ที่ปลอดภัย

สิ่งที่ระบบเดิมทำได้ดี

  • เห็นโครงสร้างยาวทั้งต้น
  • รองรับ BOM หลายชั้นและสถานะอะไหล่
  • เชื่อม quantity, unit conversion และ stock
  • ใช้ tree เดียวกันในต้นทุนและวางแผน

สิ่งที่ต้องเสริม

  • cycle detection ตอนบันทึกและตอน query
  • effective date และ soft delete
  • เลือก BOM active version อย่าง deterministic
  • เก็บ reason/audit เมื่อเปลี่ยน component

Lab: สร้าง BOM migration oracle

  1. เลือกสินค้า 3 แบบ: BOM ปกติ, หลายชั้น, และมี cycle จำลอง
  2. สร้าง expected flattened rows: depth, path, cumulative quantity และ unit
  3. เปรียบเทียบ recursive SQL กับ array preload เพื่อตรวจ N+1
  4. ทดสอบ quantity rounding policy ของ PCS/KG/หน่วยแปลง
  5. เปรียบเทียบผลก่อนและหลัง soft delete component
  6. ยืนยันว่า legacy key ทุก node trace กลับได้
ประเด็นอภิปราย
Normalization ที่ดีไม่ได้หมายถึงเอาความซับซ้อนออกทั้งหมด แต่ทำให้ความซับซ้อนมีชื่อ มีขอบเขต และตรวจย้อนหลังได้ โดย UI ยังต้องง่ายสำหรับพนักงานหน้างาน

คำถามประเมินความเข้าใจ

  1. ทำไมลาย/สีควรเป็น variant ไม่ใช่ข้อความใน item master?
  2. เมื่อ BOM มีสอง version ที่วันมีผลทับกัน ระบบควรทำอย่างไร?
  3. การปัดจำนวน component ควรเกิดก่อนหรือหลังหัก stock?
  4. orphan component ควรถูกซ่อน ลบ หรือแสดงพร้อมสถานะ?