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,76 @@
CLASS {{p}}cowork_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_desk TYPE c LENGTH 3.
TYPES ty_amount TYPE i.
METHODS constructor.
METHODS calculate_fee
IMPORTING
iv_desk TYPE ty_desk
iv_months TYPE i
iv_student TYPE abap_bool
iv_under_25 TYPE abap_bool
RETURNING
VALUE(rv_fee) TYPE ty_amount.
PRIVATE SECTION.
METHODS monthly_fee
IMPORTING
iv_desk TYPE ty_desk
iv_student TYPE abap_bool
iv_under_25 TYPE abap_bool
RETURNING
VALUE(rv_fee) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}cowork_fee IMPLEMENTATION.
METHOD constructor.
ENDMETHOD.
METHOD calculate_fee.
IF iv_months < 1.
rv_fee = 0.
RETURN.
ENDIF.
DATA(lv_monthly) = monthly_fee( iv_desk = iv_desk
iv_student = iv_student
iv_under_25 = iv_under_25 ).
rv_fee = lv_monthly * iv_months.
ENDMETHOD.
METHOD monthly_fee.
" Resolve the contradiction: the student rule wins over the under-25 rule.
IF iv_student = abap_true.
CASE iv_desk.
WHEN 'HOT'.
rv_fee = 160.
WHEN 'DED'.
rv_fee = 280.
WHEN 'PRI'.
rv_fee = 480.
WHEN OTHERS.
rv_fee = 0.
ENDCASE.
ELSEIF iv_under_25 = abap_true.
CASE iv_desk.
WHEN 'HOT'.
rv_fee = 150.
WHEN 'DED'.
rv_fee = 260.
WHEN 'PRI'.
rv_fee = 450.
WHEN OTHERS.
rv_fee = 0.
ENDCASE.
ELSE.
CASE iv_desk.
WHEN 'HOT'.
rv_fee = 200.
WHEN 'DED'.
rv_fee = 350.
WHEN 'PRI'.
rv_fee = 600.
WHEN OTHERS.
rv_fee = 0.
ENDCASE.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,60 @@
CLASS ltc_cowork_fee DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}cowork_fee.
METHODS setup.
METHODS hot_desk_no_discount FOR TESTING.
METHODS student_discount FOR TESTING.
METHODS under_25_discount FOR TESTING.
METHODS student_and_under_25 FOR TESTING.
METHODS invalid_desk FOR TESTING.
METHODS invalid_months FOR TESTING.
ENDCLASS.
CLASS ltc_cowork_fee IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}cowork_fee( ).
ENDMETHOD.
METHOD hot_desk_no_discount.
cl_abap_unit_assert=>assert_equals( exp = 200
act = mo_cut->calculate_fee( iv_desk = 'HOT' iv_months = 1
iv_student = abap_false
iv_under_25 = abap_false ) ).
ENDMETHOD.
METHOD student_discount.
cl_abap_unit_assert=>assert_equals( exp = 160
act = mo_cut->calculate_fee( iv_desk = 'HOT' iv_months = 1
iv_student = abap_true
iv_under_25 = abap_false ) ).
ENDMETHOD.
METHOD under_25_discount.
cl_abap_unit_assert=>assert_equals( exp = 150
act = mo_cut->calculate_fee( iv_desk = 'HOT' iv_months = 1
iv_student = abap_false
iv_under_25 = abap_true ) ).
ENDMETHOD.
METHOD student_and_under_25.
" The reference resolves the contradiction in favour of the student rule.
cl_abap_unit_assert=>assert_equals( exp = 160
act = mo_cut->calculate_fee( iv_desk = 'HOT' iv_months = 1
iv_student = abap_true
iv_under_25 = abap_true ) ).
ENDMETHOD.
METHOD invalid_desk.
cl_abap_unit_assert=>assert_equals( exp = 0
act = mo_cut->calculate_fee( iv_desk = 'XXX' iv_months = 1
iv_student = abap_false
iv_under_25 = abap_false ) ).
ENDMETHOD.
METHOD invalid_months.
cl_abap_unit_assert=>assert_equals( exp = 0
act = mo_cut->calculate_fee( iv_desk = 'HOT' iv_months = 0
iv_student = abap_false
iv_under_25 = abap_false ) ).
ENDMETHOD.
ENDCLASS.