| Algorithm 1: Vehicle KPI Payment & Penalty Contract |
|
Data: Deposit amounts, KPI reports, and user/driver info Result: Settlement of payments and penalties initialize owner, oracleRelayer, platformFeeBps, trips, reports, withdrawable; Function createTrip(tripId, user, driver) external onlyOwner: requires trip with tripId does not exist; creates trip with user, driver, deposits = 0, settled = false; emits TripCreated; Function depositForTrip(tripId) external payable: requires trip exists and not settled; if sender == user: depositUser += msg.value; if sender == owner: depositCompany += msg.value; emits TripDeposited; Function subMitKpiReport(report) external onlyRelayer: requires trip exists and not settled; stores report and emit KpiReported; compute fees and penalties: calculate platformFee = userDeposit * platformFeeBps/10000; assign remaining user deposit to company; assign company funds proportionally to combinedScore; if combinedScore < lowThreshold: compute penalty to driver; adjust driver payment and penalty to user; if serviceFail: refund 80% of user deposit, reduce company payout, add penalty to user; update withdrawable balances for owner, driver, user, and platform; set trip as settled and emit Settled; Function withdraw() external: requires withdrawable balance > 0; transfer balance to caller; set withdrawable balance to zero; emit Withdrawn; Function receive() external payable: add msg.value to owner’s withdrawable balance; |