Files
abap-llm/tasks_gen/eval/G0150/faulty/m3_vet_fee_calc.clas.abap

74 lines
2.5 KiB
ABAP

CLASS {{p}}vet_fee_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_vet_fee.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_base_fee,
species TYPE {{p}}if_vet_fee=>ty_species,
amount TYPE {{p}}if_vet_fee=>ty_amount,
END OF ty_base_fee,
tt_base_fee TYPE HASHED TABLE OF ty_base_fee WITH UNIQUE KEY species.
CONSTANTS:
c_free_kg TYPE i VALUE 5,
c_max_kg TYPE i VALUE 200,
c_fee_per_kg TYPE {{p}}if_vet_fee=>ty_amount VALUE '2.00'.
METHODS normalize_species
IMPORTING iv_species TYPE {{p}}if_vet_fee=>ty_species
RETURNING VALUE(rv_species) TYPE {{p}}if_vet_fee=>ty_species.
METHODS base_fees
RETURNING VALUE(rt_base_fee) TYPE tt_base_fee.
METHODS medication_fee
IMPORTING iv_weight TYPE {{p}}if_vet_fee=>ty_weight
RETURNING VALUE(rv_fee) TYPE {{p}}if_vet_fee=>ty_amount.
ENDCLASS.
CLASS {{p}}vet_fee_calc IMPLEMENTATION.
METHOD {{p}}if_vet_fee~calculate.
DATA(lv_species) = normalize_species( iv_species ).
DATA(lt_base_fee) = base_fees( ).
ASSIGN lt_base_fee[ species = lv_species ] TO FIELD-SYMBOL(<ls_base_fee>).
IF sy-subrc <> 0.
rs_result = VALUE #( reason = {{p}}if_vet_fee=>c_reason-species ).
RETURN.
ENDIF.
IF iv_weight <= 0 OR iv_weight > c_max_kg.
rs_result = VALUE #( reason = {{p}}if_vet_fee=>c_reason-weight ).
RETURN.
ENDIF.
DATA(lv_medication) = medication_fee( iv_weight ).
DATA lv_fee TYPE {{p}}if_vet_fee=>ty_amount.
lv_fee = <ls_base_fee>-amount + lv_medication.
IF iv_emergency = abap_true.
lv_fee = lv_fee + <ls_base_fee>-amount / 2.
ENDIF.
IF iv_registered = abap_true.
lv_fee = lv_fee + ( <ls_base_fee>-amount + lv_medication ) / 10.
ENDIF.
rs_result = VALUE #( fee = lv_fee reason = {{p}}if_vet_fee=>c_reason-ok ).
ENDMETHOD.
METHOD normalize_species.
rv_species = to_upper( replace( val = iv_species sub = ` ` with = `` occ = 0 ) ).
ENDMETHOD.
METHOD base_fees.
rt_base_fee = VALUE #( ( species = 'DOG' amount = '45.00' )
( species = 'CAT' amount = '35.00' )
( species = 'RABBIT' amount = '25.00' )
( species = 'BIRD' amount = '18.00' )
( species = 'REPTILE' amount = '30.00' ) ).
ENDMETHOD.
METHOD medication_fee.
DATA lv_kg TYPE i.
lv_kg = ceil( iv_weight - c_free_kg ).
IF lv_kg > 0.
rv_fee = lv_kg * c_fee_per_kg.
ENDIF.
ENDMETHOD.
ENDCLASS.