Skip to main content

สเปคการคำนวณใบวางบิล (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 (ดอนเมือง)Van5050025,000
สาย B (ลาดพร้าว)Bus3080024,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.00480
35.01 – 40.00520
40.01 – 45.00560

ถ้าราคาน้ำมัน = 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

ตัวอย่าง​

สายรอบเวลาจำนวนเที่ยวราคา/เที่ยวยอด
สาย A05:002060012,000
สาย A08:001860010,800
สาย A17:002270015,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 — ค่าคงที่สำหรับคำนวณ oilRate
  • pricePerKilometer — ราคาต่อกิโลเมตร (ต่อสาย)
  • 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คิดตามช่วงเวลา หรือคิดตามจำนวนชั่วโมงส่วนเกิน
ประเภท OTHOUR, 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 นาที => OT 0 ชั่วโมง
  • 9 ชั่วโมง 20 นาที => OT 0.5 ชั่วโมง
  • 9 ชั่วโมง 50 นาที => OT 1 ชั่วโมง
  • 10 ชั่วโมง 20 นาที => OT 1.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)​

  1. กิโลเมตรงานประจำ (Full-time KM):

    • สามารถเลือกคิดเป็น Price per KM หรือ Over KM Condition
    • รองรับการกำหนด Normal KM Price และ Over KM Price แยกกัน
  2. รถทำงานวันหยุด (Full-time Weekend):

    • กำหนดราคาต่อสายรถ (Price per Route) สำหรับงานที่วิ่งในวันหยุด
  3. ค่าเที่ยวที่แน่นอน (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 (ถ้ากำหนด)
วิ่งรอบที่ 3round3Enabled / 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สถานะ
1A3: tripTime ที่ frontend ส่งมาเป็น ID ของรอบเวลา ถูกต้องไหม?A3✅ ยืนยันตามโค้ด
2C: oilRate คำนวณจากราคาน้ำมัน 3 วัน (5, 15, 25) ถูกต้องไหม?C✅ ยืนยันตามโค้ด
3D: ภาคขยาย Advance Standby รองรับการคิด OT และรายคนแล้ว?D✅ ยืนยันตามโค้ด
4E: กลุ่มงานประจำ Full-time มีหน้าจอให้กรอกชุดใหญ่แล้ว?E✅ ยืนยันตามโค้ด
5C: isApproved ใช้ในการกรองเที่ยวของ Group C ด้วยไหม?C⚠️ รอยืนยัน
6Fuel 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ราคาต่อกิโลเมตรส่วนที่เกิน