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:
Kral
2026-10-03 12:10:52 +02:00
parent d3250acfb8
commit 39769afce8
741 changed files with 40573 additions and 317 deletions

View 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.

View 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.