Skip to main content

รายได้นักขับ (Driver Income)

เมนู รายได้ของฉัน ใช้สำหรับดูข้อมูลรายได้ที่ backend คำนวณเสร็จแล้ว โดยหน้า UI มีหน้าที่เลือกปี, เรียก API, และ format ข้อมูลเพื่อแสดงผลเท่านั้น

แหล่งข้อมูลของหน้า​

  • หน้าใช้ hook useIncomes(year)
  • hook นี้เรียก GET /trip-records/my-driver-income
  • query param ที่ส่งขึ้นไปคือ year
  • response ที่หน้าใช้จริงเป็นรายการ Income[]

field ที่หน้าใช้จริง​

fieldความหมายในหน้า
monthเดือนที่ใช้สร้างหัวข้อของการ์ด
startDateวันเริ่มต้นของรอบคำนวณ
endDateวันสิ้นสุดของรอบคำนวณ
totalIncomeรายได้รวมของรอบนั้น

พฤติกรรมของหน้า​

ค่าเริ่มต้น​

  • หน้าใช้ dayjs().year() เป็นปีเริ่มต้น
  • เมื่อเปิดหน้า ระบบจะเรียกข้อมูลของปีปัจจุบันทันที

การกรอง​

  • ผู้ใช้เลือกปีผ่าน YearFilter
  • เมื่อเปลี่ยนปี ระบบจะเรียก query ใหม่ด้วย key ["incomes", year]

การแสดงผล​

  • ชื่อเดือนถูกแปลงจาก YYYY-MM ให้เป็นชื่อเดือนภาษาไทย
  • ช่วงวันที่แสดงเป็นข้อความ คำนวณระหว่างวันที่ ...
  • totalIncome ถูก format ด้วย toLocaleString("th-TH", { minimumFractionDigits: 2, maximumFractionDigits: 2 })

สถานะที่หน้าแสดงได้​

กรณีโหลดข้อมูลไม่สำเร็จ​

  • หน้าแสดงข้อความจาก pageMessages.incomeLoadError

กรณีไม่มีข้อมูล​

  • ถ้า query สำเร็จแต่ไม่มีรายการ
  • หน้าแสดงข้อความ ไม่มีข้อมูลรายได้สำหรับปี {selectedYear}

กรณีมีข้อมูล​

  • หน้า render การ์ดรายเดือนทีละใบผ่าน IncomeCard
  • key ของแต่ละรายการถูกประกอบจาก month, startDate, endDate, และ index

สิ่งที่หน้าไม่ได้ทำ​

  • ไม่ได้คำนวณรายได้ใหม่ใน browser
  • ไม่ได้แตกยอดเป็นค่าเที่ยว, ค่า standby, หรือรายการหักใน UI นี้
  • ไม่ได้ใช้ X-Ratio มาคำนวณที่หน้าโดยตรง

ถ้าตัวเลขรายได้ผิด ต้องย้อนตรวจข้อมูลต้นทางที่เกี่ยวข้องในฝั่ง operations หรือ backend calculation ไม่ใช่เริ่มจากหน้า Income อย่างเดียว

X-Ratio คืออะไร​

X-Ratio เป็นตัวชี้วัดที่ไปปรากฏในฝั่ง dashboard และ report ของระบบมากกว่าในหน้า Income

  • หน้า รายได้ของฉัน ไม่ได้คำนวณ X-Ratio เอง
  • หน้า รายได้ของฉัน แสดงเฉพาะยอด totalIncome ที่ backend สรุปมาแล้ว
  • หากต้องวิเคราะห์ความสัมพันธ์ระหว่างรายได้กับพฤติกรรมการขับ ควรตรวจต่อในฝั่งรายงานหรือหน้าที่เกี่ยวกับ KPI

อ้างอิงโค้ด​

  • atp30-tos-driver/src/hooks/query/useIncome.ts
  • atp30-tos-driver/src/views/income/index.tsx
  • atp30-tos-driver/src/constants/errorMessages.ts