billing.js 747 B

1234567891011121314151617181920212223
  1. function roundKm(value) {
  2. const n = Number(value)
  3. if (!Number.isFinite(n)) return 0
  4. return Math.round(n * 100) / 100
  5. }
  6. /**
  7. * 乐跑扣费:跑前按预计距离预扣,结算时按 min(预计, 实际) 计费。
  8. * 多扣退还差额,少扣不补收。
  9. * @returns {{ plannedKm: number, actualKm: number, billableKm: number, refundKm: number }}
  10. */
  11. function resolveLepaoBilling(plannedKm, actualKm) {
  12. const planned = roundKm(plannedKm)
  13. const actual = roundKm(actualKm)
  14. const billableKm = roundKm(Math.min(planned, actual))
  15. const refundKm = roundKm(Math.max(0, planned - actual))
  16. return { plannedKm: planned, actualKm: actual, billableKm, refundKm }
  17. }
  18. module.exports = {
  19. roundKm,
  20. resolveLepaoBilling
  21. }