ขั้นตอนใบสั่งซ่อม AutoCare
คำสั่งทุกอย่างส่งเข้า POST /api/v1/autocare/action เป็น JSON { "action": "...", ... } จำกัดขนาด body ที่ 2 MB (MaxBytesReader 2<<20) แล้วแยกงานด้วย switch ตามชื่อ action ที่แปลงเป็นตัวพิมพ์เล็กแล้ว (handler.go:975-992) action ส่วนใหญ่จะเรียก rebuildFromRawData ตอนท้ายเพื่อคำนวณยอดและสถานะทั้งระบบใหม่ ดู สต็อกยางตาม DOT/FEFO รับฝากยาง เคลม คูปอง และการ Rebuild ของ AutoCare (sys-autocare-stock-warranty-rebuild)
สถานะของใบงาน (autocare_job_order.status)
| ลำดับ | สถานะ | % ความคืบหน้า | เข้าสถานะนี้ด้วย |
|---|---|---|---|
| 1 | INTAKE_PRECHECK รับรถและตรวจล้อแม็ก 4 ล้อ |
25 | create_intake_job |
| 2 | ESTIMATE_PENDING ตรวจ 35 จุดแล้ว รออนุมัติ |
45 | save_dvi_upsell |
| 3 | IN_BAY_REPAIR กำลังซ่อมบนฮอยท์ |
75 (ถ้าเข้าด้วยการอนุมัติ upsell จะได้อย่างน้อย 65) | approve_lineoa_upsell หรือ advance_job_stage |
| 4 | QC_READY ตรวจ QC พร้อมส่งมอบ |
95 | advance_job_stage |
| 5 | BILLED_POSTED ปิดบิลและลงบัญชีแล้ว |
100 | close_bill_post_account หรือ advance_job_stage ไปที่ BILLED_POSTED |
ค่า % มาจาก handler.go:1278-1290 ถ้าส่ง stage อื่นที่ไม่อยู่ในตารางจะได้ 50 ป้ายภาษาไทยของแต่ละสถานะอยู่ในรายงาน 4.1 (report_menu_autocare.go:42-49)
ทีละขั้น
- รับรถ
create_intake_job(handler.go:993-1109) ต้องส่งทะเบียนรถมา ถ้าไม่มีจะได้ error เลขใบงานคือ"JOB-"ต่อด้วย 9 ตัวแรกของdocno.Stamp("0405")ฟิลด์ที่ไม่ได้ส่งมาจะใช้ค่าเดโม เช่น โหมดtire_fastfit, ยาง 4 เส้น เส้นละ 3990 แล้วทำ 4 อย่าง- เพิ่มหรืออัปเดตรถใน
autocare_vehicleเลขไมล์จะเก็บค่าที่มากกว่าเสมอ - สร้างใบงานสถานะ
INTAKE_PRECHECK25% วิธีชำระเริ่มต้นPROMPTPAY_QRและaccounting_posted = FALSE - เพิ่มบรรทัดยางบรรทัดแรก
- ตั้งช่องซ่อมเป็น
OCCUPIEDยอดเงินที่บันทึกตอนนี้เป็นค่าตั้งต้นเท่านั้นrebuildจะคำนวณใหม่ตามกฎใน ยอดเงิน ส่วนลด VAT และการปิดบิลลงบัญชีของ AutoCare (sys-autocare-billing-gl)
- เพิ่มหรืออัปเดตรถใน
- ตรวจ 35 จุดและเสนอซ่อมเพิ่ม
save_dvi_upsell(handler.go:1111-1165) เพิ่มรายการในupsell_items_jsonโดยตั้งapproved:falseเพิ่มบรรทัด PART ที่is_upsell_approved = FALSEและเปลี่ยนสถานะจาก INTAKE เป็นESTIMATE_PENDING - ลูกค้าอนุมัติผ่าน LINE OA
approve_lineoa_upsell(handler.go:1167-1185 →approveJobUpsellAndRecalchandler.go:2211-2224) ตั้งทุกบรรทัดเป็นis_upsell_approved = TRUEถ้าสถานะยังเป็น INTAKE หรือ ESTIMATE จะย้ายไปIN_BAY_REPAIRแล้วคำนวณยอดใหม่ ในโค้ดไม่มีการเรียก LINE จริง - เพิ่มรายการ
add_job_item(handler.go:1187-1247)line_total = qty × unit_priceค่าแรงช่างต่อบรรทัด 150 ถ้าส่งturn_in_discountมาจะบวกเพิ่มเข้าใบงาน แล้วคำนวณยอดใหม่ - ขอส่วนลดพิเศษจากเจ้าของ
request_owner_discount(handler.go:1314-1333) ตั้งowner_special_discount(ค่าเริ่มต้น 500) และสถานะคำขอเป็นREQUESTED - เจ้าของอนุมัติ
approve_owner_discount(handler.go:1335-1360) ตั้งสถานะเป็นAPPROVEDและบันทึกผู้อนุมัติจากชื่อผู้ใช้ใน token แล้วคำนวณยอดใหม่ ส่วนลดนี้จะหักจริงเฉพาะเมื่อได้สถานะAPPROVEDแล้ว - เลื่อนสถานะ
advance_job_stage(handler.go:1249-1312) ถ้าเลื่อนไปQC_READYจะตั้ง progress ของช่องซ่อมเป็น 95 ถ้าเลื่อนไปBILLED_POSTEDจะโพสต์บัญชีเหมือนการปิดบิล - รับเงินและปิดบิล
close_bill_post_account(handler.go:1362-1385) เรียกpostJobToBCAccountถ้าไม่ได้ส่งวิธีชำระมาจะใช้PROMPTPAY_QRแล้วตอบกลับbc_doc_no,cert_noและtrans_flag: 44ปุ่มขั้นสุดท้ายบนเว็บส่งpayment_methodที่ผู้ใช้เลือกมาด้วย (AutoCareScreenContent.tsx:2340-2360)
แก้ไขและลบ
save_job_orderแก้หัวใบงาน (handler.go:1874-1920)delete_job_orderลบได้เฉพาะใบงานที่accounting_posted = FALSE(handler.go:1922-1943) ใบงานที่ลงบัญชีแล้วลบจากหน้านี้ไม่ได้delete_job_itemลบบรรทัด (handler.go:1945)
ข้อควรรู้
- ใน
postJobToBCAccountไม่มีการเช็กaccounting_postedก่อนโพสต์ ถ้าใบงานมีbc_doc_noอยู่แล้ว ระบบจะใช้เลขเดิมและ SaveTrans แบบแก้ไข แต่จะตัดสต็อก DOT เพิ่มยอดช่อง/ช่าง และเพิ่มแต้มซ้ำอีกรอบ (handler.go:2553-2565, 2608-2613, 2703-2723)
ที่มาในโค้ด
backend/internal/adapter/inbound/http/autocare/handler.go:975-992: Action, decode, switchbackend/internal/adapter/inbound/http/autocare/handler.go:993-1385: action ในวงจรใบงานbackend/internal/adapter/inbound/http/autocare/handler.go:2211-2224: อนุมัติ upsellbackend/internal/application/process/report_menu_autocare.go:42-49: ป้ายสถานะ
ดูเพิ่ม: ระบบศูนย์บริการรถยนต์และร้านยาง BC AutoCare (sys-autocare-overview) · ยอดเงิน ส่วนลด VAT และการปิดบิลลงบัญชีของ AutoCare (sys-autocare-billing-gl) · ตารางข้อมูลของ AutoCare autocare_* และตารางหลักที่ใช้ร่วม (sys-autocare-tables) · แอป Flutter สำหรับหน้างาน 4 บทบาทของ AutoCare (sys-autocare-flutter-app)