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,58 @@
CLASS {{p}}kiln_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_kiln_price.
PRIVATE SECTION.
TYPES ty_amount TYPE p LENGTH 10 DECIMALS 4.
CONSTANTS:
c_base_fee TYPE ty_amount VALUE '40.00',
c_piece_fee TYPE ty_amount VALUE '12.00',
c_free_weight TYPE {{p}}if_kiln_price=>ty_weight VALUE '10.00',
c_kg_fee TYPE ty_amount VALUE '3.00',
c_glaze_fee TYPE ty_amount VALUE '25.00',
c_member_rate TYPE ty_amount VALUE '0.85'.
METHODS clay_factor
IMPORTING iv_clay TYPE {{p}}if_kiln_price=>ty_clay
RETURNING VALUE(rv_factor) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}kiln_pricer IMPLEMENTATION.
METHOD {{p}}if_kiln_price~calculate_price.
IF iv_clay IS INITIAL.
rv_price = 0.
RETURN.
ENDIF.
DATA lv_price TYPE ty_amount.
lv_price = c_base_fee + iv_pieces * c_piece_fee.
IF iv_weight > c_free_weight.
lv_price = lv_price + ( iv_weight - c_free_weight ) * c_kg_fee.
ENDIF.
DATA(lv_factor) = clay_factor( iv_clay ).
lv_price = lv_price * lv_factor.
IF iv_glaze = abap_true.
lv_price = lv_price + c_glaze_fee.
ENDIF.
IF iv_member = abap_true.
lv_price = lv_price * c_member_rate.
ENDIF.
rv_price = round( val = lv_price dec = 2 ).
ENDMETHOD.
METHOD clay_factor.
CASE iv_clay.
WHEN 'ST'.
rv_factor = '1.20'.
WHEN 'PO'.
rv_factor = '1.50'.
WHEN OTHERS.
rv_factor = '1.00'.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,92 @@
CLASS ltc_kiln_pricer DEFINITION FINAL FOR TESTING
DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_kiln_price.
METHODS setup.
METHODS base_fee FOR TESTING.
METHODS piece_fee FOR TESTING.
METHODS weight_surcharge FOR TESTING.
METHODS clay_factor FOR TESTING.
METHODS glaze_fee FOR TESTING.
METHODS member_discount FOR TESTING.
METHODS initial_clay FOR TESTING.
ENDCLASS.
CLASS ltc_kiln_pricer IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}kiln_pricer( ).
ENDMETHOD.
METHOD base_fee.
cl_abap_unit_assert=>assert_equals(
exp = '40.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '0.00'
iv_clay = 'EA'
iv_glaze = abap_false
iv_member = abap_false ) ).
ENDMETHOD.
METHOD piece_fee.
cl_abap_unit_assert=>assert_equals(
exp = '100.00'
act = mo_cut->calculate_price( iv_pieces = 5
iv_weight = '0.00'
iv_clay = 'EA'
iv_glaze = abap_false
iv_member = abap_false ) ).
ENDMETHOD.
METHOD weight_surcharge.
cl_abap_unit_assert=>assert_equals(
exp = '55.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '15.00'
iv_clay = 'EA'
iv_glaze = abap_false
iv_member = abap_false ) ).
ENDMETHOD.
METHOD clay_factor.
cl_abap_unit_assert=>assert_equals(
exp = '60.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '0.00'
iv_clay = 'PO'
iv_glaze = abap_false
iv_member = abap_false ) ).
ENDMETHOD.
METHOD glaze_fee.
cl_abap_unit_assert=>assert_equals(
exp = '65.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '0.00'
iv_clay = 'EA'
iv_glaze = abap_true
iv_member = abap_false ) ).
ENDMETHOD.
METHOD member_discount.
cl_abap_unit_assert=>assert_equals(
exp = '34.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '0.00'
iv_clay = 'EA'
iv_glaze = abap_false
iv_member = abap_true ) ).
ENDMETHOD.
METHOD initial_clay.
cl_abap_unit_assert=>assert_equals(
exp = '0.00'
act = mo_cut->calculate_price( iv_pieces = 0
iv_weight = '0.00'
iv_clay = space
iv_glaze = abap_false
iv_member = abap_false ) ).
ENDMETHOD.
ENDCLASS.