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,122 @@
CLASS {{p}}marina_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_boat_type TYPE c LENGTH 1.
TYPES ty_season TYPE c LENGTH 1.
TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2.
METHODS calculate_fee
IMPORTING
iv_length_m TYPE i
iv_nights TYPE i
iv_boat_type TYPE ty_boat_type
iv_season TYPE ty_season
iv_power TYPE abap_bool
RETURNING
VALUE(rv_fee) TYPE ty_fee.
PRIVATE SECTION.
CONSTANTS:
c_length_small TYPE i VALUE 8,
c_length_medium TYPE i VALUE 12,
c_length_large TYPE i VALUE 18,
c_rate_small TYPE ty_fee VALUE '20.00',
c_rate_medium TYPE ty_fee VALUE '32.00',
c_rate_large TYPE ty_fee VALUE '48.00',
c_rate_xlarge TYPE ty_fee VALUE '75.00',
c_factor_sail TYPE ty_fee VALUE '1.00',
c_factor_motor TYPE ty_fee VALUE '1.20',
c_factor_cat TYPE ty_fee VALUE '1.50',
c_factor_high TYPE ty_fee VALUE '1.40',
c_factor_low TYPE ty_fee VALUE '1.00',
c_power_fee TYPE ty_fee VALUE '5.00',
c_discount TYPE ty_fee VALUE '0.90',
c_discount_days TYPE i VALUE 7,
c_min_fee TYPE ty_fee VALUE '30.00',
c_no_fee TYPE ty_fee VALUE '0.00'.
METHODS base_rate
IMPORTING iv_length_m TYPE i
RETURNING VALUE(rv_rate) TYPE ty_fee.
METHODS type_factor
IMPORTING iv_boat_type TYPE ty_boat_type
RETURNING VALUE(rv_factor) TYPE ty_fee.
METHODS season_factor
IMPORTING iv_season TYPE ty_season
RETURNING VALUE(rv_factor) TYPE ty_fee.
METHODS nightly_rate
IMPORTING iv_length_m TYPE i
iv_boat_type TYPE ty_boat_type
iv_season TYPE ty_season
iv_power TYPE abap_bool
RETURNING VALUE(rv_rate) TYPE ty_fee.
METHODS total_fee
IMPORTING iv_nightly TYPE ty_fee
iv_nights TYPE i
RETURNING VALUE(rv_total) TYPE ty_fee.
ENDCLASS.
CLASS {{p}}marina_fee IMPLEMENTATION.
METHOD calculate_fee.
IF iv_length_m <= 0 OR iv_nights <= 0.
rv_fee = c_no_fee.
RETURN.
ENDIF.
DATA(lv_nightly) = nightly_rate( iv_length_m = iv_length_m
iv_boat_type = iv_boat_type
iv_season = iv_season
iv_power = iv_power ).
rv_fee = total_fee( iv_nightly = lv_nightly
iv_nights = iv_nights ).
ENDMETHOD.
METHOD base_rate.
IF iv_length_m <= c_length_small.
rv_rate = c_rate_small.
ELSEIF iv_length_m <= c_length_medium.
rv_rate = c_rate_medium.
ELSEIF iv_length_m <= c_length_large.
rv_rate = c_rate_large.
ELSE.
rv_rate = c_rate_xlarge.
ENDIF.
ENDMETHOD.
METHOD type_factor.
CASE iv_boat_type.
WHEN 'C'.
rv_factor = c_factor_cat.
WHEN 'M'.
rv_factor = c_factor_motor.
WHEN OTHERS.
rv_factor = c_factor_sail.
ENDCASE.
ENDMETHOD.
METHOD season_factor.
IF iv_season = 'H'.
rv_factor = c_factor_high.
ELSE.
rv_factor = c_factor_low.
ENDIF.
ENDMETHOD.
METHOD nightly_rate.
rv_rate = base_rate( iv_length_m ) * type_factor( iv_boat_type ) * season_factor( iv_season ).
IF iv_power = abap_true.
rv_rate = rv_rate + c_power_fee.
ENDIF.
ENDMETHOD.
METHOD total_fee.
DATA lv_total TYPE ty_fee.
lv_total = iv_nightly * iv_nights.
IF iv_nights >= c_discount_days.
lv_total = round( val = lv_total * c_discount dec = 2 ).
ENDIF.
IF lv_total < c_min_fee.
rv_total = c_min_fee.
ELSE.
rv_total = lv_total.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,64 @@
CLASS ltc_marina_fee DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}marina_fee.
METHODS setup.
METHODS minimum_fee_applies FOR TESTING.
METHODS week_discount FOR TESTING.
METHODS motor_in_high_season FOR TESTING.
METHODS invalid_input_returns_zero FOR TESTING.
ENDCLASS.
CLASS ltc_marina_fee IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}marina_fee( ).
ENDMETHOD.
METHOD minimum_fee_applies.
DATA lv_exp TYPE {{p}}marina_fee=>ty_fee.
lv_exp = '30.00'.
cl_abap_unit_assert=>assert_equals(
exp = lv_exp
act = mo_cut->calculate_fee( iv_length_m = 6
iv_nights = 1
iv_boat_type = 'S'
iv_season = 'L'
iv_power = abap_false ) ).
ENDMETHOD.
METHOD week_discount.
DATA lv_exp TYPE {{p}}marina_fee=>ty_fee.
lv_exp = '201.60'.
cl_abap_unit_assert=>assert_equals(
exp = lv_exp
act = mo_cut->calculate_fee( iv_length_m = 12
iv_nights = 7
iv_boat_type = 'S'
iv_season = 'L'
iv_power = abap_false ) ).
ENDMETHOD.
METHOD motor_in_high_season.
DATA lv_exp TYPE {{p}}marina_fee=>ty_fee.
lv_exp = '107.52'.
cl_abap_unit_assert=>assert_equals(
exp = lv_exp
act = mo_cut->calculate_fee( iv_length_m = 10
iv_nights = 2
iv_boat_type = 'M'
iv_season = 'H'
iv_power = abap_false ) ).
ENDMETHOD.
METHOD invalid_input_returns_zero.
DATA lv_exp TYPE {{p}}marina_fee=>ty_fee.
lv_exp = '0.00'.
cl_abap_unit_assert=>assert_equals(
exp = lv_exp
act = mo_cut->calculate_fee( iv_length_m = 0
iv_nights = 3
iv_boat_type = 'S'
iv_season = 'L'
iv_power = abap_false ) ).
ENDMETHOD.
ENDCLASS.