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.
|
||||
85
tasks_gen/eval/G0150/reference/vet_fee_calc.testclasses.abap
Normal file
85
tasks_gen/eval/G0150/reference/vet_fee_calc.testclasses.abap
Normal file
@@ -0,0 +1,85 @@
|
||||
CLASS ltc_vet_fee_calc DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_vet_fee.
|
||||
METHODS setup.
|
||||
METHODS assert_fee
|
||||
IMPORTING iv_expected TYPE {{p}}if_vet_fee=>ty_amount
|
||||
iv_actual TYPE {{p}}if_vet_fee=>ty_amount.
|
||||
METHODS dog_visit FOR TESTING.
|
||||
METHODS medication_for_started_kg FOR TESTING.
|
||||
METHODS emergency_visit FOR TESTING.
|
||||
METHODS registered_patient FOR TESTING.
|
||||
METHODS unknown_species FOR TESTING.
|
||||
METHODS invalid_weight FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_vet_fee_calc IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}vet_fee_calc( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_fee.
|
||||
cl_abap_unit_assert=>assert_equals( exp = iv_expected act = iv_actual ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dog_visit.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'DOG'
|
||||
iv_weight = '5.000'
|
||||
iv_emergency = abap_false
|
||||
iv_registered = abap_false ).
|
||||
assert_fee( iv_expected = '45.00' iv_actual = ls_result-fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_vet_fee=>c_reason-ok
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD medication_for_started_kg.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'DOG'
|
||||
iv_weight = '7.001'
|
||||
iv_emergency = abap_false
|
||||
iv_registered = abap_false ).
|
||||
assert_fee( iv_expected = '51.00' iv_actual = ls_result-fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD emergency_visit.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'DOG'
|
||||
iv_weight = '5.000'
|
||||
iv_emergency = abap_true
|
||||
iv_registered = abap_false ).
|
||||
assert_fee( iv_expected = '67.50' iv_actual = ls_result-fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD registered_patient.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'CAT'
|
||||
iv_weight = '5.000'
|
||||
iv_emergency = abap_false
|
||||
iv_registered = abap_true ).
|
||||
assert_fee( iv_expected = '31.50' iv_actual = ls_result-fee ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_species.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'HORSE'
|
||||
iv_weight = '10.000'
|
||||
iv_emergency = abap_false
|
||||
iv_registered = abap_false ).
|
||||
assert_fee( iv_expected = '0.00' iv_actual = ls_result-fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_vet_fee=>c_reason-species
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_weight.
|
||||
DATA(ls_result) = mo_cut->calculate(
|
||||
iv_species = 'DOG'
|
||||
iv_weight = '250.000'
|
||||
iv_emergency = abap_false
|
||||
iv_registered = abap_false ).
|
||||
assert_fee( iv_expected = '0.00' iv_actual = ls_result-fee ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}if_vet_fee=>c_reason-weight
|
||||
act = ls_result-reason ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user