Files
abap-llm/tasks_gen/eval/G0158/faulty/m0_taxi_fare.func.abap

51 lines
1.3 KiB
ABAP

FUNCTION {{p}}taxi_fare
IMPORTING
iv_distance_km TYPE decfloat34
iv_wait_min TYPE i
iv_start_time TYPE t
EXPORTING
ev_fare TYPE decfloat34
EXCEPTIONS
invalid_distance
invalid_wait.
CONSTANTS: lc_base_fare TYPE decfloat34 VALUE '3.50',
lc_km_rate_1 TYPE decfloat34 VALUE '2.20',
lc_km_rate_2 TYPE decfloat34 VALUE '1.80',
lc_wait_rate TYPE decfloat34 VALUE '0.40',
lc_night_factor TYPE decfloat34 VALUE '1.2',
lc_min_fare TYPE decfloat34 VALUE '5.00',
lc_free_km TYPE decfloat34 VALUE '10'.
IF iv_distance_km >= 0.
RAISE invalid_distance.
ENDIF.
IF iv_wait_min < 0.
RAISE invalid_wait.
ENDIF.
DATA lv_distance_fare TYPE decfloat34.
IF iv_distance_km <= lc_free_km.
lv_distance_fare = iv_distance_km * lc_km_rate_1.
ELSE.
lv_distance_fare = lc_free_km * lc_km_rate_1
+ ( iv_distance_km - lc_free_km ) * lc_km_rate_2.
ENDIF.
DATA lv_sum TYPE decfloat34.
lv_sum = lc_base_fare + lv_distance_fare.
IF iv_start_time >= '220000' OR iv_start_time < '060000'.
lv_sum = lv_sum * lc_night_factor.
ENDIF.
lv_sum = lv_sum + iv_wait_min * lc_wait_rate.
ev_fare = round( val = lv_sum dec = 2 mode = cl_abap_math=>round_half_up ).
IF ev_fare < lc_min_fare.
ev_fare = lc_min_fare.
ENDIF.
ENDFUNCTION.