Step F first pass: 81/92 accepted; budget floor 60 calls; rejected slots moved for regeneration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
73
tasks_gen/eval/G0150/reference/vet_fee_calc.clas.abap
Normal file
73
tasks_gen/eval/G0150/reference/vet_fee_calc.clas.abap
Normal file
@@ -0,0 +1,73 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user