// เพิ่มจำนวน - เพิ่มโดยตรง
จำนวนเพิ่ม = newQTY - (MOQTY - MODIQTY)
IF LOT มีอยู่ THENUPDATE LOT SET LOTSIZE += จำนวนเพิ่ม
ELSEINSERT LOT (สร้างบันทึกแบตช์ใหม่)
END IFUPDATE MODETAIL SET PLANRELEASEQTY += จำนวนเพิ่ม
5.2 กรณีหักจำนวน
newQTY < (MOQTY - MODIQTY)
// หักจำนวน - ต้องตรวจสอบวงเงินที่เปลี่ยนแปลงได้
วงเงินเปลี่ยนแปลงสูงสุด = MOQTY - MOREQTY - BATQTY
จำนวนเปลี่ยนแปลงครั้งนี้ = MOQTY - newQTY - MODIQTY
IF วงเงินเปลี่ยนแปลงสูงสุด >= จำนวนเปลี่ยนแปลงครั้งนี้ THEN// สามารถหักได้IF LOTQTY - จำนวนเปลี่ยนแปลงครั้งนี้ > 0 THENUPDATE LOT SET LOTSIZE -= จำนวนเปลี่ยนแปลงครั้งนี้
ELSEDELETE FROM LOT // จำนวนเป็นศูนย์หรือติดลบหลังหักEND IFUPDATE MODETAIL SET PLANRELEASEQTY -= จำนวนเปลี่ยนแปลงครั้งนี้
ELSE// ไม่สามารถหักได้ - ปล่อยแล้วหรือแยกแบตช์เกินวงเงินที่เปลี่ยนแปลงได้Throw Exception("JS_0126_00060")
END IF
ข้อจำกัดสำคัญ
ถ้าจำนวนที่ปล่อยแล้ว + จำนวนแยกแบตช์ฝั่ง MES > จำนวนผลิตใหม่ จะไม่สามารถหักได้ จะโยนข้อผิดพลาด JS_0126_00060