Corin1998 commited on
Commit
5a131e7
·
verified ·
1 Parent(s): 062eb58

Create costs.py

Browse files
Files changed (1) hide show
  1. services/costs.py +32 -0
services/costs.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from typing import Literal
5
+
6
+ Mode = Literal["Walk", "Transit", "Drive/Taxi"]
7
+
8
+ def _get_float(name: str, default: float) -> float:
9
+ try:
10
+ return float(os.getenv(name, default))
11
+ except Exception:
12
+ return default
13
+
14
+ # デフォルト(東京の概算)— 環境変数で上書き可
15
+ TAXI_BASE_FARE = _get_float("TAXI_BASE_FARE", 500.0) # 初乗り
16
+ TAXI_PER_KM = _get_float("TAXI_PER_KM", 320.0) # 1kmあたり
17
+ TAXI_PER_MIN = _get_float("TAXI_PER_MIN", 0.0) # 分課金があれば
18
+
19
+ TRANSIT_BASE = _get_float("TRANSIT_BASE_FARE", 210.0) # 乗車初乗り
20
+ TRANSIT_PER_KM= _get_float("TRANSIT_PER_KM", 25.0) # 1kmあたり(概算)
21
+
22
+ def estimate_leg_cost(mode: Mode, distance_km: float, duration_min: float, fare_hint: float | None = None) -> float:
23
+ """1区間の概算費用(JPY)を返す。公共交通はAPIのfare_hint優先。"""
24
+ if mode == "Walk":
25
+ return 0.0
26
+ if mode == "Drive/Taxi":
27
+ return TAXI_BASE_FARE + TAXI_PER_KM * max(0.0, distance_km) + TAXI_PER_MIN * max(0.0, duration_min)
28
+ if mode == "Transit":
29
+ if fare_hint is not None:
30
+ return float(fare_hint)
31
+ return TRANSIT_BASE + TRANSIT_PER_KM * max(0.0, distance_km)
32
+ return 0.0