สเปคการคำนวณใบวางบิล (Billing Calculation Spec)
เวอร์ชัน: 1.0.0
วันที่อัปเดต: 2026-02-18
จัดทำโดย: ทีมพัฒนา
ผู้รับเอกสาร: QA / BA / ลูกค้า
หมายเหตุการยืนยันโค้ด: เอกสารนี้ถูกอ่านประกอบกับ
src/types/contract.ts,src/views/pages/customer-invoice/*, และsrc/views/pages/home/index.tsxเพื่อให้สูตรและชื่อ field สอดคล้องกับ implementation ล่าสุด
1. ภาพรวมระบบ
ระบบจะคำนวณใบวางบิล (Billing Statement) อัตโนมัติตามวันที่กำหนดในสัญญา (billingDate)
โดยแต่ละสัญญาจะถูกจัดอยู่ใน กลุ่มสัญญา (Contract Group) ซึ่งมีสูตรการคำนวณที่แตกต่างกัน
เงื่อนไขการสร้างใบวางบิล
ระบบจะสร้างใบวางบิลให้สัญญาที่ผ่านเงื่อนไขทั้งหมดดังนี้:
| เงื่อนไข | รายละเอียด |
|---|---|
status = ACTIVE | สัญญาต้องอยู่ในสถานะ Active เท่านั้น |
billingDate ตรงกับวันที่เป้าหมาย | วันที่ออกบิลตรงกับ targetDate ที่ระบุ |
startDate ≤ targetDate | สัญญาเริ่มต้นแล้ว |
endDate ≥ billingStartDate | สัญญายังไม่หมดอายุ |
| ยังไม่มีใบวางบิลในรอบนี้ | ป้องกันการสร้างซ้ำ |
ช่วงเวลาการคำนวณ
billingEndDate = targetDate
billingStartDate = targetDate - 1 เดือน + 1 วัน
ตัวอย่าง: targetDate = 2026-02-28
billingStartDate = 2026-01-29
billingEndDate = 2026-02-28
หมายเหตุ: ถ้า
targetDateเป็นวันสุดท้ายของเดือน ระบบจะรวมสัญญาที่มีbillingDate ≥ วันนั้นด้วย (End-of-Month Logic)
2. โครงสร้างใบวางบิล
ใบวางบิลแต่ละใบประกอบด้วย 2 ส่วน:
BillingStatement
├── MainBillingStatement[] ← รายการหลัก (ค่าบริการ)
└── PartnerInvoice[] ← ใบแจ้งหนี้รถร่วม
สูตรคำนวณยอดรวม MainBillingStatement
ยอดรวมแต่ละรายการ = amount × price
สิ่งที่ยืนยันจากหน้าจอปัจจุบัน
- หน้าบิลของกลุ่ม A1, A2, A3, B1, B2, D, E และ F แสดงยอดรวมจาก
amount × price - หน้าบิลของกลุ่ม C แสดงยอดรวมจาก
amount × price × oilRate - ยอดภาษีหัก ณ ที่จ่ายในหน้าสรุปคำนวณเป็น
1%ของยอดก่อนหัก - ยอดสุทธิถูกปัดเศษเป็น
2ตำแหน่ง แล้วแปลงเป็นข้อความภาษาไทยด้วยbahttext
3. กลุ่มสัญญา (Contract Groups)
🔵 Group A1 — ราคาคงที่ต่อเที่ยว
ลักษณะ: นับจำนวนเที่ยวที่วิ่งจริงในช่วงเวลา แล้วคูณด้วยราคาต่อเที่ยวที่กำหนดไว้คงที่
สูตรคำนวณ Main Billing
สำหรับแต่ละ ContractBillingDetail:
จำนวนเที่ยว = COUNT(TripRecordVehicle)
WHERE routeRound.contractRouteId = contractRouteId
AND vehicle.vehicleTypeId = vehicleTypeId
AND date BETWEEN billingStartDate AND billingEndDate
AND isApproved = true
ยอดรายการ = จำนวนเที่ยว × pricePerRound
ตัวอย่าง
| สาย | ประเภทรถ | จำนวนเที่ยว | ราคา/เที่ยว | ยอด |
|---|---|---|---|---|
| สาย A (ดอนเมือง) | Van | 50 | 500 | 25,000 |
| สาย B (ลาดพร้าว) | Bus | 30 | 800 | 24,000 |
| รวม | 49,000 |
ข้อมูลที่ต้องกำหนดในสัญญา
contractRouteId— สายรถvehicleTypeId— ประเภทรถpricePerRound— ราคาต่อเที่ยว (บาท)
🟠 Group A2 — ราคาลอยตัวตามราคาน้ำมัน
ลักษณะ: นับจำนวนเที่ยวเหมือน A1 แต่ราคาต่อเที่ยวจะเปลี่ยนตามช่วงราคาน้ำมัน
สูตรคำนวณ Main Billing
1. ดึงราคาน้ำมัน (fuelPrice) ตาม fuelCalculatorType:
- FIXED_DATE: ราคาน้ำมัน ณ วันที่ fixedDate ของเดือนนั้น (เช่น วันที่ 1)
- AVERAGE_PRICE: ค่าเฉลี่ยราคาน้ำมันระหว่างวันที่ avgDateStart ถึง avgDateEnd ของเดือนนั้น
2. หาราคาต่อเที่ยวจาก Fuel Range Table:
- กำหนด range: fuelRangeStart ถึง fuelRangeEnd ทุก fuelRangeInterval บาท
- ตรวจว่า fuelPrice อยู่ใน range ไหน → ใช้ pricePerFuelRange[i]
3. จำนวนเที่ยว = COUNT(TripRecordVehicle) [เงื่อนไขเดียวกับ A1]
4. ยอดรายการ = จำนวนเที่ยว × pricePerFuelRange[i]
ตัวอย่าง Fuel Range Table
| ช่วงราคาน้ำมัน (บาท/ลิตร) | ราคาต่อเที่ยว (บาท) |
|---|---|
| 30.01 – 35.00 | 480 |
| 35.01 – 40.00 | 520 |
| 40.01 – 45.00 | 560 |
ถ้าราคาน้ำมัน = 36.50 บาท → ตกช่วงที่ 2 → ราคา 520 บาท/เที่ยว
ข้อมูลที่ต้องกำหนดในสัญญา
fuelCalculatorType— วิธีคำนวณราคาน้ำมัน (FIXED_DATE/AVG_DATE)fixedDate— วันที่ดึงราคาน้ำมัน (ใช้เมื่อFIXED_DATE)avgDateStart,avgDateEnd— ช่วงวันที่เฉลี่ย (ใช้เมื่อAVG_DATE)fuelRangeStart,fuelRangeEnd,fuelRangeInterval— ช่วงราคาน้ำมันpricePerFuelRange[]— ราคาต่อเที่ยวในแต่ละช่วง
🟡 Group A3 — ราคาคงที่ต่อเที่ยว แยกตามรอบเวลา
ลักษณะ: เหมือน A1 แต่แยกนับเที่ยวตาม รอบเวลา (tripTime) เช่น รอบ 05:00, รอบ 08:00 มีราคาต่างกัน
สูตรคำนวณ Main Billing
สำหรับแต่ละ ContractBillingDetail (แต่ละรอบเวลา):
จำนวนเที่ยว = COUNT(TripRecordVehicle)
WHERE routeRound.contractRouteId = contractRouteId
AND routeRound.time = tripTime ← กรองเฉพาะรอบเวลานี้
AND vehicle.vehicleTypeId = vehicleTypeId
AND date BETWEEN billingStartDate AND billingEndDate
AND isApproved = true
ยอดรายการ = จำนวนเที่ยว × pricePerRound
ตัวอย่าง
| สาย | รอบเวลา | จำนวนเที่ยว | ราคา/เที่ยว | ยอด |
|---|---|---|---|---|
| สาย A | 05:00 | 20 | 600 | 12,000 |
| สาย A | 08:00 | 18 | 600 | 10,800 |
| สาย A | 17:00 | 22 | 700 | 15,400 |
| รวม | 38,200 |
ข้อมูลที่ต้องกำหนดในสัญญา
tripTime— รอบเวลา (format:HH:mmเช่น"05:00")pricePerRound— ราคาต่อเที่ยวของรอบนั้นtripRoundPerRoute— จำนวนรอบต่อสาย (ใช้แสดงผล)
⚪ เที่ยวตีเปล่า (Pass Price)
ลักษณะ: กรณีที่มีการวิ่งรถเปล่าเพื่อไปรับพนักงานหรือหลังส่งพนักงานเสร็จ ซึ่งมีการกำหนดราคาแยกต่างหากจากราคาเที่ยวปกติ
สูตรคำนวณ
- ระบบจะนับจำนวนเที่ยวที่มีสถานะ
passPrice(ตีเปล่า) ในบันทึกการวิ่ง - ยอดเงิน: จำนวนเที่ยวตีเปล่า ×
passPriceที่ระบุในสัญญา
⚪ ประเภทงาน (Shift vs Office)
ระบบรองรับการกรองเที่ยวตามประเภทบันทึก:
- งานกะ (Shift): งานที่วิ่งตามกะโรงงาน (เช้า/บ่าย/ดึก)
- งานออฟฟิศ (Office): งานรับส่งพนักงานออฟฟิศทั่วไป
- สัญญาบางฉบับอาจกำหนดราคาแยกตาม
isShiftหรือisOffice(รอยืนยัน Logic การแยกยอดในบิล)
🟢 Group B1 — ราคาเหมาคงที่
ลักษณะ: ไม่นับเที่ยว แต่คิดราคาเหมาตามประเภทรถหรือแพ็กเกจ
B1 แบบ VEHICLE_TYPE — แยกตามประเภทรถ
สำหรับแต่ละ ContractBillingDetail:
ยอดรายการ = vehicleAmount × pricePerRound
โดย:
vehicleAmount = จำนวนรถประเภทนั้น (กำหนดในสัญญา ไม่ใช่นับจริง)
pricePerRound = ราคาต่อคัน/เดือน
B1 แบบ PACKAGE_PRICE — ราคาเหมาแพ็กเกจ
ยอดรายการ = 1 × pricePerRound (ราคาเหมาทั้งหมด)
ชื่อรายการ = รายการรถทุกประเภท เช่น "Van 3, Bus 2"
ค่าใช้จ่ายอื่นๆ (Other Expenses) — ใช้ใน B1, B2, C
| ประเภท | ชื่อรายการที่ปรากฏในบิล | สูตร |
|---|---|---|
| ค่าพนักงานขับรถ (DRIVER) | ค่าพนักงานขับรถ | unit × pricePerUnit |
| ค่าเจ้าหน้าที่ความปลอดภัย (SECURITY_GUARD) | ค่าเจ้าหน้าที่ความปลอดภัย | unit × pricePerUnit |
| ค่าผู้ประสานงาน (COORDINATOR) | ค่าจ้างผู้ประสานงาน | unit × pricePerUnit |
| ค่าล้างรถ (CAR_WASH) | ค่าล้างรถ | unit × pricePerUnit (แยกตามประเภทรถ) |
| ค่าบริหารจัดการ (MANAGEMENT) | ค่าบริหารจัดการการเดินรถ | 1 × price (ราคาคงที่) |
| ค่าทางด่วน (TOLLWAY) | ค่าทางด่วน | 1 × price (ราคาคงที่) |
🔵 Group B2 — ราคาเหมา + ลอยตัวตามน้ำมัน
ลักษณะ: เหมือน B1 แต่ราคาต่อคันขึ้นกับราคาน้ำมัน (ใช้ Fuel Range Table เดียวกับ A2)
B2 แบบ VEHICLE_TYPE
fuelPrice = ดึงจาก fuelCalculatorType (เหมือน A2)
สำหรับแต่ละ ContractBillingDetail:
ราคาต่อคัน = pricePerFuelRange[i] ← จาก Fuel Range Table
ยอดรายการ = 1 × ราคาต่อคัน
B2 แบบ PACKAGE_PRICE
ยอดรายการ = 1 × pricePerRound (ราคาเหมา ไม่ขึ้นกับน้ำมัน)
🟣 Group C — ราคาต่อกิโลเมตร + ค่าน้ำมัน
ลักษณะ: คิดราคาตามระยะทาง (กิโลเมตร) บวกค่าน้ำมันเฉลี่ย
สูตรคำนวณ Main Billing
ส่วนที่ 1 — ค่าประเภทรถ (จาก contractBillingDetails)
สำหรับแต่ละ ContractBillingDetail:
ยอดรายการ = vehicleAmount × pricePerVehicle
ส่วนที่ 2 — ค่าสายรถตามระยะทาง (จาก contractRouteCalculations)
oilRate = flatRate + ((ราคา ณ วันที่ 5 + ราคา ณ วันที่ 15 + ราคา ณ วันที่ 25) / 3)
ยอดรายการ = จำนวนเที่ยวที่วิ่งจริง × pricePerKilometer
ระบบจะนับจำนวนเที่ยวของสายนั้นๆ ที่ได้รับการอนุมัติ (Approved) ในช่วงรอบบิล
ส่วนที่ 3 — ค่าใช้จ่ายอื่นๆ (เหมือน B1)
ข้อมูลที่ต้องกำหนดในสัญญา
flatRate— ค่าคงที่สำหรับคำนวณ oilRatepricePerKilometer— ราคาต่อกิโลเมตร (ต่อสาย)pricePerVehicle— ราคาต่อคัน (ต่อประเภทรถ)
🔴 Group D — ราคาเหมาแพ็กเกจ (มี OT)
ลักษณะ: คิดราคาเหมาต่อประเภทรถ รองรับค่าล่วงเวลา (OT)
D แบบ VEHICLE_TYPE
สำหรับแต่ละ ContractBillingDetail:
ยอดรายการ = 1 × packagePrice
ชื่อรายการ = "ประเภทรถ - สาย"
หมายเหตุ: D แบบ FUEL_PRICE ยังอยู่ระหว่างพัฒนา (TODO)
ข้อมูลที่ต้องกำหนดในสัญญา
packagePrice— ราคาเหมาต่อแพ็กเกจholidayOverTimeRatePerHour— ค่า OT วันหยุด (บาท/ชั่วโมง)workingDayOverTimeRatePerHour— ค่า OT วันทำงาน (บาท/ชั่วโมง)
🛠 ส่วนขยาย Group D (Advanced Standby Logic)
ตามโครงสร้างใหม่ของระบบ (D-Form) สัญญากลุ่ม D สามารถเลือกเปิดใช้งานเงื่อนไขดังนี้:
| หมวดหมู่ | เงื่อนไขตัวเลือก (Enums) | รายละเอียด |
|---|---|---|
| ระยะทาง (KM) | KM, OVER_KM | คิดตามกิโลเมตร หรือคิดเฉพาะส่วนที่เกิน |
| การคิดราคา | PER_VEHICLE, BASED_PRICE | คิดต่อคัน หรือคิดตามราคาฐาน |
| ราคาน้ำมัน | FLUCTUATE, NOT_FLUCTUATE | ราคาผันแปรตามน้ำมัน หรือน้ำมันคงที่ |
| ล่วงเวลา (OT) | TIME_PERIOD, OVER_HOUR | คิดตามช่วงเวลา หรือคิดตามจำนวนชั่วโมงส่วนเกิน |
| ประเภท OT | HOUR, ROUND | คำนวณยอด OT เป็นรายชั่วโมง หรือรายรอบ |
| วันหยุด | NOT_CAL, CAL_WEEKEND | เปิด/ปิดการคำนวณเบี้ยเลี้ยงวันหยุด |
สูตร OT ที่ระบบใช้จริง
1. OVER_HOUR
ใช้กติกา "เกิน 8+1 ชั่วโมง" โดยคำนวณจาก:
ช่วงเวลางานของวัน = standby.startAt รายการแรก -> standby.endAt รายการสุดท้าย
OT Minutes = max(0, ช่วงเวลางานรวมเป็นนาที - 540)
โดย 540 นาที = 9 ชั่วโมง
การปัดเศษเมื่อคิดเป็นชั่วโมง
ถ้าเศษนาที < 15 => ไม่ปัดเพิ่ม
ถ้าเศษนาที >= 15 => +0.5 ชั่วโมง
ถ้าเศษนาที >= 45 => +1 ชั่วโมง
ตัวอย่าง:
9 ชั่วโมง 10 นาที=> OT0 ชั่วโมง9 ชั่วโมง 20 นาที=> OT0.5 ชั่วโมง9 ชั่วโมง 50 นาที=> OT1 ชั่วโมง10 ชั่วโมง 20 นาที=> OT1.5 ชั่วโมง
2. TIME_PERIOD
ไม่ดูว่าเกิน 9 ชั่วโมงหรือไม่ แต่ดูว่าเวลาทำงานอยู่นอกกรอบเวลาที่กำหนดในสัญญาหรือไม่
ตัวอย่างเช่น ถ้ากำหนดเวลาปกติเป็น 08:00 - 17:00
- ทำงาน
06:30 - 08:00=> นับ OT - ทำงาน
17:30 - 19:00=> นับ OT - ทำงาน
08:00 - 17:00=> ไม่นับ OT
ข้อสังเกตจากโค้ด: ถ้า
TIME_PERIODถูกเลือก ระบบจะรวมเฉพาะนาทีที่อยู่นอกช่วงotStartTimeและotEndTime
อ้างอิงโค้ด
/Users/chanchaitasujai/Project-ATP30/atp30-core-api/src/contracts/contracts.service.ts/Users/chanchaitasujai/Project-ATP30/atp30-core-api/src/trip-records/utils/ot-calculation.util.ts
💸 ค่าจ้างพนักงานใน Group D
สามารถเลือกเปิดใช้งาน driverSalaryEnabled เพื่อคิดค่าใช้จ่ายพนักงานเพิ่มเติม:
- วันธรรมดา:
driverNumber×driverPrice - วันหยุด:
holidayDriverNumber×holidayDriverPrice
⚫ Group E — ราคาเหมางานประจำ (Full-time Service)
ลักษณะ: ใช้สำหรับสัญญาดูแลงานประจำแบบรายเดือนที่มีความซับซ้อนสูง แยกตามระยะทางและรอบวิ่ง
กลไกการคำนวณ (Advanced E Logic)
-
กิโลเมตรงานประจำ (Full-time KM):
- สามารถเลือกคิดเป็น
Price per KMหรือOver KM Condition - รองรับการกำหนด
Normal KM PriceและOver KM Priceแยกกัน
- สามารถเลือกคิดเป็น
-
รถทำงานวันหยุด (Full-time Weekend):
- กำหนดราคาต่อสายรถ (
Price per Route) สำหรับงานที่วิ่งในวันหยุด
- กำหนดราคาต่อสายรถ (
-
ค่าเที่ยวที่แน่นอน (Full-time Trip Round):
- กำหนดจำนวนรถรวม (
Vehicle Amount) - กำหนดราคาต่อเที่ยว (
Price per Round) และราคาเที่ยวตีเปล่า (Pass Price)
- กำหนดจำนวนรถรวม (
4. เงื่อนไขรายได้และเบี้ยเลี้ยงเพิ่มเติม (Income Conditions)
สัญญาสามารถกำหนด "เงื่อนไขรายได้พิเศษ" ซึ่งมักเป็นเบี้ยเลี้ยงหรือค่าล่วงเวลาที่นอกเหนือจากราคาเที่ยวปกติ:
| รายการ | ฟิลด์ข้อมูล | รายละเอียด |
|---|---|---|
| Bus 87% ต่อเดือน | bus87PerMonthEnabled / Rate | รายได้ประกันขั้นต่ำ 87% ของจำนวนวันในเดือนสำหรับรถ Bus (ถ้ากำหนด) |
| Van 5 เที่ยวต่อวัน | van5PerDayEnabled / Rate | รายได้ประกันขั้นต่ำ 5 เที่ยวต่อวันสำหรับรถ Van (ถ้ากำหนด) |
| วิ่งรอบที่ 3 | round3Enabled / Rate | เบี้ยเลี้ยงพิเศษสำหรับการวิ่งรอบที่ 3 เป็นต้นไป |
| ระยะทางเกินกิโลเมตร | overKilometerEnabled / Rate | ค่าบริการส่วนเกินกรณีวิ่งระยะทางรวมเกินที่กำหนดในสัญญา |
| Standby เกินกิโลเมตร | stbKilometerEnabled / Rate | ค่าบริการส่วนเกินสำหรับงาน Standby ที่วิ่งเกินระยะทางที่กำหนด |
| ค่าล่วงเวลา (OT Hour) | otHourEnabled / Rate | ค่าล่วงเวลาคิดตามจำนวนชั่วโมง (แยกเป็น otHourRate และ otHourCustomerRate) |
| กำหนดเวลาทำงาน (Working Hours) | dayHours (JSON) | กำหนดช่วงเวลาทำงานปกติในแต่ละวัน (จันทร์-อาทิตย์) เพื่อใช้คำนวณ OT |
| วิ่งวันอาทิตย์ (Sunday) | sundayEnabled / Rate | เบี้ยเลี้ยงพิเศษสำหรับการวิ่งงานในวันอาทิตย์ |
| วิ่งวันหยุดนักขัตฤกษ์ (Public Holiday) | publicHolidayEnabled / Rate | เบี้ยเลี้ยงพิเศษสำหรับการวิ่งงานในวันหยุดนักขัตฤกษ์ |
5. ใบแจ้งหนี้รถร่วม (Partner Invoice)
ทุก group (ยกเว้น D, E) จะสร้าง Partner Invoice สำหรับรถร่วมโดยอัตโนมัติ
วิธีคำนวณ
สำหรับแต่ละ ContractPartnerInvoiceDetail:
ดึง TripRecordVehicle GROUP BY (driverId, vehicleId)
WHERE routeRound.contractRouteId = contractRouteId
AND vehicle.vehicleTypeId = vehicleTypeId
AND date BETWEEN billingStartDate AND billingEndDate
AND isApproved = true
[AND routeRound.time = tripTime] ← เฉพาะ A3
สำหรับแต่ละ (driver, vehicle):
ถ้า priceType = FIXED:
amount = COUNT(trips) × fixedPrice
ถ้า priceType = PERCENTAGE:
amount = COUNT(trips) × (mainPrice × percentage / 100)
ข้อมูล Partner Invoice ที่สร้าง
| Field | รายละเอียด |
|---|---|
partnerCompanyId | บริษัทรถร่วม |
vehicleId | ทะเบียนรถ |
driverId | พนักงานขับรถ |
contractRouteId | สายรถ |
amount | ยอดเงิน (บาท) |
6. สรุปเปรียบเทียบทุก Group
| Group | วิธีนับ | ราคาต่อหน่วย | ค่าใช้จ่ายอื่น | รายได้พิเศษ (Income) |
|---|---|---|---|---|
| A1 | นับเที่ยวจริง | Fixed | ❌ | ✅ (ถ้ากำหนด) |
| A2 | นับเที่ยวจริง | ตามน้ำมัน | ❌ | ✅ (ถ้ากำหนด) |
| A3 | นับเที่ยวจริง (แยกรอบ) | Fixed | ❌ | ✅ (ถ้ากำหนด) |
| B1 | ไม่นับ (เหมา) | Fixed | ✅ | ✅ (ถ้ากำหนด) |
| B2 | ไม่นับ (เหมา) | ตามน้ำมัน | ✅ | ✅ (ถ้ากำหนด) |
| C | นับเที่ยว + กิโลเมตร | Fixed + น้ำมัน | ✅ | ✅ (ถ้ากำหนด) |
| D | ผสม (Standby) | Fixed/KM | ✅ | ✅ (OT/Weekend) |
| E | ผสม (Full-time) | Fixed/KM/รอบ | ✅ | ✅ (OT/Weekend) |
7. คำถามที่ต้องยืนยันกับ BA / ลูกค้า
| # | คำถาม | Group | สถานะ |
|---|---|---|---|
| 1 | A3: tripTime ที่ frontend ส่งมาเป็น ID ของรอบเวลา ถูกต้องไหม? | A3 | ✅ ยืนยันตามโค้ด |
| 2 | C: oilRate คำนวณจากราคาน้ำมัน 3 วัน (5, 15, 25) ถูกต้องไหม? | C | ✅ ยืนยันตามโค้ด |
| 3 | D: ภาคขยาย Advance Standby รองรับการคิด OT และรายคนแล้ว? | D | ✅ ยืนยันตามโค้ด |
| 4 | E: กลุ่มงานประจำ Full-time มีหน้าจอให้กรอกชุดใหญ่แล้ว? | E | ✅ ยืนยันตามโค้ด |
| 5 | C: isApproved ใช้ในการกรองเที่ยวของ Group C ด้วยไหม? | C | ⚠️ รอยืนยัน |
| 6 | Fuel Range: ถ้าราคาน้ำมันอยู่นอก range ที่กำหนด ระบบจะ Error? | A2, B2 | ✅ ยืนยัน (Throw Error) |
8. Glossary
| คำศัพท์ | ความหมาย |
|---|---|
BillingStatement | ใบวางบิลรายเดือน |
MainBillingStatement | รายการในใบวางบิลหลัก |
PartnerInvoice | ใบแจ้งหนี้สำหรับรถร่วม |
ContractBillingDetail | รายละเอียดการคิดราคาในสัญญา |
TripRecordVehicle | บันทึกการวิ่งรถแต่ละเที่ยว |
RouteRound | รอบการวิ่งของสาย (มีเวลาและประเภท) |
isApproved | เที่ยวที่ได้รับการอนุมัติแล้ว |
pricePerRound | ราคาต่อเที่ยว |
pricePerFuelRange | ราคาต่อเที่ยวในแต่ละช่วงราคาน้ำมัน |
fuelRangeInterval | ช่วงห่างของ range ราคาน้ำมัน (บาท) |
tripTime | รอบเวลาของเที่ยว (format: HH:mm) |
vehicleAmount | จำนวนรถที่กำหนดในสัญญา |
packagePrice | ราคาเหมาแพ็กเกจ |
oilRate | อัตราน้ำมันสำหรับ Group C |
OT Hour | ค่าล่วงเวลาคิดรายชั่วโมง |
passPrice | ราคาสำหรับเที่ยวตีเปล่า |
driverPrice | ค่าจ้างพนักงานขับรถ (รายคน) |
isShift | เครื่องหมายว่าเป็นงานกะ |
isOffice | เครื่องหมายว่าเป็นงานออฟฟิศ |
STBPrice | ราคากิโลเมตรสำหรับงาน Standby |
overKmPrice | ราคาต่อกิโลเมตรส่วนที่เกิน |