Files
abap-llm/tasks_gen/train/G1150/faulty/m1_farrier_fee.func.abap
2026-10-05 18:02:52 +02:00

72 lines
2.0 KiB
ABAP

FUNCTION {{p}}farrier_fee
IMPORTING
iv_horses TYPE i
iv_km TYPE decfloat34
iv_new_shoes TYPE abap_bool
iv_contract TYPE abap_bool
EXPORTING
ev_fee TYPE decfloat34
ev_weeks TYPE i
ev_reject TYPE abap_bool
EXCEPTIONS
invalid_horses.
CONSTANTS c_shoeing_rate TYPE decfloat34 VALUE '45'.
CONSTANTS c_bulk_rate TYPE decfloat34 VALUE '40'.
CONSTANTS c_bulk_from TYPE i VALUE 5.
CONSTANTS c_new_shoes_rate TYPE decfloat34 VALUE '30'.
CONSTANTS c_km_rate TYPE decfloat34 VALUE '0.6'.
CONSTANTS c_travel_minimum TYPE decfloat34 VALUE '10'.
CONSTANTS c_contract_percent TYPE decfloat34 VALUE '88'.
CONSTANTS c_full_percent TYPE decfloat34 VALUE '100'.
CONSTANTS c_weeks_standard TYPE i VALUE 6.
CONSTANTS c_weeks_contract TYPE i VALUE 4.
IF iv_horses < 0.
RAISE invalid_horses.
ENDIF.
IF iv_horses = 0.
ev_reject = abap_true.
ev_fee = 0.
ev_weeks = 0.
RETURN.
ENDIF.
ev_reject = abap_false.
* Next visit: every six weeks, contract stables every four weeks.
ev_weeks = c_weeks_standard.
IF iv_contract = abap_false.
ev_weeks = c_weeks_contract.
ENDIF.
* Shoeing fee: the first four horses cost the standard rate, every further
* horse costs the bulk rate.
DATA(lv_bulk_horses) = iv_horses - c_bulk_from + 1.
IF lv_bulk_horses < 0.
lv_bulk_horses = 0.
ENDIF.
DATA(lv_standard_horses) = iv_horses - lv_bulk_horses.
ev_fee = lv_standard_horses * c_shoeing_rate + lv_bulk_horses * c_bulk_rate.
* New shoes are charged for every horse.
IF iv_new_shoes = abap_true.
ev_fee = ev_fee + iv_horses * c_new_shoes_rate.
ENDIF.
* Travel: a rate per kilometre, at least the minimum, rounded up to a whole
* euro.
DATA(lv_travel) = iv_km * c_km_rate.
IF lv_travel < c_travel_minimum.
lv_travel = c_travel_minimum.
ENDIF.
ev_fee = ev_fee + ceil( lv_travel ).
* Contract stables get a discount on the whole visit.
IF iv_contract = abap_true.
ev_fee = ev_fee * c_contract_percent / c_full_percent.
ENDIF.
ENDFUNCTION.