ข้ามไปยังเนื้อหาหลัก

ใบเบิกยืม

ใบเบิกยืมเป็น flow สำหรับเบิกสินค้า/ปลาออกไปก่อนเข้าสู่การขายปกติ จึงคล้ายใบสั่งขายตรงที่เริ่มจากลูกค้า สาขา/คลัง รายการสินค้า จำนวน และภายหลังสามารถแปลงเป็นใบสั่งขายได้ จุดที่ต่างคือประเภทการเบิก เงื่อนไขวันที่มาเบิก/ทะเบียนรถของ SPEC ในสาขาย่อย จำนวนที่คาดว่าจะซื้อ การรับงาน/ตัดสต๊อก การ retry เมื่อ sub-borrow ล้มเหลว และการ convert ไปใบสั่งขาย

จุดเข้าใช้งาน

แอปหน้าจอ
MobileBorrowList -> BorrowDetail
POS TerminalborrowFish -> BorrowDetailForm ใน HomeScreen

ประเภทการเบิก

Typeความหมาย
SPECให้ลูกค้าดู
MARKETเดินตลาด
VIDEOถ่ายวีดีโอ
SEMINARสัมมนา
DESTROYทำลาย
LABวิจัย

ต้องเลือกประเภทก่อนเพิ่มสินค้า ถ้าเป็นสาขาย่อยและจะเปลี่ยนเป็น SPEC แต่มีสินค้าอยู่แล้ว ระบบจะบล็อกและให้ลบสินค้าออกก่อน เพราะ SPEC มีเงื่อนไขเพิ่มเรื่องวันที่มาเบิกและทะเบียนรถลูกค้า

สถานะเอกสาร

Flow การทำงาน

เงื่อนไขหัวเอกสาร

หัวข้อพฤติกรรม
ลูกค้าใบเบิกเริ่มจากลูกค้าที่เลือก และเก็บ customer code/name
สาขาและกลุ่มคลังpayload ส่ง branchId, whGrpCode, whGrpName จากสาขา/เอกสาร
ประเภทการเบิกต้องเลือกก่อนเพิ่มสินค้าและก่อน confirm
หมายเหตุเก็บใน notes และแก้ได้เมื่อ draft ยัง editable
dateOfPickupส่งเฉพาะประเภท SPEC; ถ้าไม่ใช่ SPEC จะส่งเป็น null
ทะเบียนรถลูกค้าสำหรับสาขาย่อย SPEC ต้องกรอกก่อนเพิ่มสินค้า
การล็อกวันที่มาเบิกสาขาย่อย SPEC แก้วันที่ไม่ได้เมื่อมีสินค้าแล้ว
วันที่ย้อนหลังMobile บล็อกวันที่มาเบิกที่น้อยกว่าวันปัจจุบัน

เงื่อนไขสินค้าและจำนวน

กฎสำคัญของสินค้า:

กฎสาขาหลักสาขาย่อย
จำนวนที่คาดว่าจะซื้อไม่บังคับ payload เป็น 0/undefinedบังคับ และต้องมากกว่า 0
จำนวนต่อบรรทัดเฉพาะ SPEC (ให้ลูกค้าดู) สูงสุด 3 ชิ้น; ประเภทอื่นไม่มี limit ต่อบรรทัดสูงสุด 5 ชิ้นทุกประเภท
จำนวนรายการสินค้าเฉพาะ SPEC สูงสุด 3 รายการ; ประเภทอื่นไม่มี limit จำนวนรายการไม่มี guard จำกัด 3 รายการใน UI
SPEC วันที่/ทะเบียนรถไม่ถูกบังคับด้วย branch guard นี้ต้องกรอกก่อนเพิ่มสินค้า
รูปแบบจำนวนจำนวนเต็มบวกเท่านั้นจำนวนเต็มบวกเท่านั้น
stock guardตอนเพิ่มตรวจ onHand - booking; ตอนแก้ใช้ stock ที่เหลือรวมจำนวนเดิมของ item นั้นเหมือนกัน

payload ของ item สร้างจาก product inventory เช่น product code/name, qty, expectedQty, price, amount, weight, warehouse, company, tax/VAT, UOM, weight-base flag, step-price flag และ editPriceBy = null

การแก้ไขสินค้าเดิม

การแก้ item ทำได้เฉพาะตอนเอกสารยังเป็น draft ที่แก้ได้ เมื่อแก้ ระบบโหลด inventory ปัจจุบันจาก product code แล้วคำนวณ maxEditableStock = availableStock + originalQty หากเป็นสินค้าเดิม เพื่อให้ผู้ใช้คงจำนวนเดิมหรือลดจำนวนได้ แต่ยังกันไม่ให้จำนวนสุดท้ายเกิน stock

สำหรับสาขาย่อย expectedQty ยังบังคับมากกว่า 0 และ limit จำนวนต่อบรรทัดยังคงเป็นไม่เกิน 5 ชิ้นทุกประเภท ส่วนสาขาหลักจำกัดไม่เกิน 3 ชิ้นเฉพาะ SPEC; ประเภทอื่นไม่จำกัดจำนวนต่อบรรทัด ทุกประเภทยังต้องเป็นจำนวนเต็มบวกและไม่เกิน stock ที่ใช้ได้

Product Picker และการแสดงสินค้ารายการแรก

  • ถ้าใบเบิกมี borrowId แล้ว การเพิ่มสินค้าจะไม่แสดง loading แบบเต็มหน้าจอที่บังหน้า detail และ product picker จะยังเปิดอยู่หลังเพิ่มสำเร็จ เพื่อให้เลือกเพิ่มได้ต่อเนื่อง
  • Draft ใหม่ใช้การ persist สองช่วง: สร้าง header ของใบเบิกก่อน ใช้ borrowId ที่ API คืนกลับมาเป็น identity สำหรับสร้าง item แล้วจึงสร้างสินค้ารายการแรก
  • borrowNo เป็นเลขเอกสารสำหรับแสดงผล ไม่ใช้แทน borrowId ในการสร้าง item
  • หลังสร้างสินค้ารายการแรก ระบบจะ refresh detail/list ของใบเบิก และ sync route ด้วย identity ที่ได้กลับมา ทำให้เห็น header และสินค้ารายการแรกทันที ไม่ต้องรอเพิ่มสินค้ารายการที่สอง
  • Mobile และ POS Terminal ใช้พฤติกรรมการ persist เดียวกัน

Confirm, Accept, Complete, Retry

ตอน confirm ระบบจะบันทึกหัวเอกสารล่าสุดก่อน แล้วเรียก confirmBorrow หลังจาก confirm แล้วการแก้แบบ draft จะถูกล็อกตามสถานะ การ complete จะเรียก approveBorrow ถ้าไม่มี failed sub-borrow แต่ถ้า hasFailedSubBorrow เป็น true ปุ่ม complete จะกลายเป็น retry และเรียก retryBorrow

แปลงเป็นใบสั่งขาย

ปุ่ม convert แสดงเมื่อเข้าเงื่อนไขครบ:

เงื่อนไขค่าที่ต้องเป็น
สาขาสาขาย่อย
ประเภทการเบิกSPEC
สถานะDONE

การ convert เรียก convertBorrow(borrowId) และควรส่งบริบทลูกค้า สาขา/คลัง สินค้า จำนวน expected quantity และราคาเข้าสู่ flow ใบสั่งขาย หลัง convert สถานะจะเป็น CONVERTED

การพิมพ์

มี 2 เส้นทางพิมพ์:

เอกสารพฤติกรรม
Borrow packพิมพ์เอกสารใบเบิกฝั่งลูกค้า/แพ็กสินค้า
Borrow storageพิมพ์เอกสารใบเบิกฝั่งคลัง

ทั้งสองปุ่มต้องมีสินค้าอย่างน้อย 1 รายการ การพิมพ์ไม่เปลี่ยนสถานะเอกสารเอง

สิทธิ์และ Guard

สิทธิ์กฎ
Terminal menu keyborrowFish
deptCode ที่เห็นเมนู-2, 1, 2, 3, 4, 7, 29, 21, 8, 9, 12, 13, 14, 30, 16, 20, 22, 23, 27, 28
สร้างใบเบิกAdmin หรือ dept -2, 1, 2, 4, 7, 8, 9, 13, 16, 21, 29
ยกเลิก/ลบใบเบิกAdmin; เจ้าของเอกสารเมื่อสถานะ NEW; หรือแผนก/ผู้ใช้ที่อนุญาตเมื่อสถานะ NEW หรือ WAITING
แผนกยกเลิก-2, 1, 2, 4, 9; dept 8 และ 22 override ได้ใน NEW/WAITING
user code override ยกเลิก008045, 012521, 012508, 008051, 012388, 012428, 008060
B1 processingAdmin หรือ dept 2, 8, 12, 22, 28
Owner processingเจ้าของเอกสาร process ได้ถ้า borrow type ไม่ใช่ DESTROY
Main branch processingสาขาหลักต้องมีสิทธิ์ B1 processing
แก้ draftสถานะต้องเป็น NEW และผู้ใช้เป็นเจ้าของ draft หรือเอกสารยังไม่ persist
แก้ประเภทการเบิกทำได้ก่อน persist หรือโดยเจ้าของเอกสาร

Mobile vs POS Terminal

หัวข้อMobilePOS Terminal
การนำทางborrow stack list/detailHomeScreen split-pane menu borrowFish
Product flowborrow detail screen และ product-flow hookborrow detail form, panels, product picker
บันทึกหัวเอกสารบันทึกผ่าน borrow service เมื่อ detail เดิมเปลี่ยนบันทึก raw detail ผ่าน HomeScreen handlers
Validationbusiness rules เดียวกันใน mobile componentsbusiness rules เดียวกันใน HomeScreen handlers
พิมพ์printBorrowPack, printBorrowStorageใช้ print utilities เดียวกัน
Convertเรียก convertBorrow แล้ว refresh detailเรียก convertBorrow แล้ว refresh split list/detail

API และ Data Map

OperationService
ListgetBorrows
DetailgetBorrowDetail(borrowId)
Create/update/delete headercreateBorrow, updateBorrow, deleteBorrow
Item CRUDcreateBorrowItem, updateBorrowItem, deleteBorrowItem
ConfirmconfirmBorrow
AcceptacceptBorrow
Complete/cut stockapproveBorrow
Retry failed sub-borrowretryBorrow
Convert to sales orderconvertBorrow

Developer Handoff Map

ส่วนโค้ด
Mobile permissions/helpersapps/mobile/src/utils/borrow.ts
Mobile list/detailapps/mobile/src/screens/borrowStack/borrowListScreen, borrowDetailScreen
Mobile product flowapps/mobile/src/screens/borrowStack/borrowDetailScreen/useBorrowProductFlow.ts
Terminal permissions/panelsapps/pos-terminal/src/screens/HomeScreen/BorrowPanels.tsx
Terminal detailapps/pos-terminal/src/screens/HomeScreen/BorrowDetailForm.tsx
Terminal handlersapps/pos-terminal/src/screens/HomeScreen/index.tsx
Servicesapps/*/src/services/borrow.ts
Converted targetเอกสารใบสั่งขายและ order services

เอกสารที่เกี่ยวข้อง