Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 13:35:54 +02:00
parent 1c4667a0fc
commit 13360292dd
781 changed files with 50211 additions and 22 deletions

View File

@@ -0,0 +1,86 @@
CLASS {{p}}snow_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_area TYPE i.
TYPES ty_priority TYPE c LENGTH 1.
TYPES ty_distance TYPE i.
TYPES ty_fee TYPE p LENGTH 9 DECIMALS 2.
METHODS calculate
IMPORTING iv_area TYPE ty_area
iv_priority TYPE ty_priority
iv_distance TYPE ty_distance
RETURNING VALUE(rv_fee) TYPE ty_fee.
PRIVATE SECTION.
CONSTANTS:
c_rate_small TYPE ty_fee VALUE '0.20',
c_rate_medium TYPE ty_fee VALUE '0.16',
c_rate_large TYPE ty_fee VALUE '0.12',
c_rate_per_km TYPE ty_fee VALUE '0.40',
c_minimum_fee TYPE ty_fee VALUE '45.00',
c_free_km TYPE ty_distance VALUE 10,
c_priority_expr TYPE ty_priority VALUE 'E',
c_priority_emerg TYPE ty_priority VALUE 'X'.
METHODS base_fee
IMPORTING iv_area TYPE ty_area
iv_priority TYPE ty_priority
RETURNING VALUE(rv_fee) TYPE ty_fee.
METHODS rate_per_sqm
IMPORTING iv_area TYPE ty_area
RETURNING VALUE(rv_rate) TYPE ty_fee.
METHODS surcharge_factor
IMPORTING iv_priority TYPE ty_priority
RETURNING VALUE(rv_factor) TYPE i.
METHODS travel_cost
IMPORTING iv_distance TYPE ty_distance
RETURNING VALUE(rv_cost) TYPE ty_fee.
ENDCLASS.
CLASS {{p}}snow_fee IMPLEMENTATION.
METHOD calculate.
IF iv_area <= 0.
rv_fee = 0.
RETURN.
ENDIF.
rv_fee = base_fee( iv_area = iv_area iv_priority = iv_priority )
+ travel_cost( iv_distance = iv_distance ).
ENDMETHOD.
METHOD base_fee.
DATA(lv_amount) = iv_area * rate_per_sqm( iv_area ).
IF lv_amount < c_minimum_fee.
lv_amount = c_minimum_fee.
ENDIF.
rv_fee = lv_amount * surcharge_factor( iv_priority ) / 100.
ENDMETHOD.
METHOD rate_per_sqm.
IF iv_area <= 500.
rv_rate = c_rate_small.
ELSEIF iv_area <= 2000.
rv_rate = c_rate_medium.
ELSE.
rv_rate = c_rate_large.
ENDIF.
ENDMETHOD.
METHOD surcharge_factor.
CASE iv_priority.
WHEN c_priority_expr.
rv_factor = 125.
WHEN c_priority_emerg.
rv_factor = 150.
WHEN OTHERS.
rv_factor = 100.
ENDCASE.
ENDMETHOD.
METHOD travel_cost.
DATA(lv_chargeable_km) = iv_distance - c_free_km.
IF lv_chargeable_km > 0.
rv_cost = lv_chargeable_km * c_rate_per_km.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,59 @@
CLASS ltc_snow_fee DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}snow_fee.
METHODS setup.
METHODS assert_fee
IMPORTING iv_area TYPE {{p}}snow_fee=>ty_area
iv_priority TYPE {{p}}snow_fee=>ty_priority
iv_distance TYPE {{p}}snow_fee=>ty_distance
iv_expected TYPE {{p}}snow_fee=>ty_fee.
METHODS minimum_charge FOR TESTING.
METHODS small_area_rate FOR TESTING.
METHODS express_surcharge FOR TESTING.
METHODS travel_charged FOR TESTING.
METHODS zero_area_returns_zero FOR TESTING.
METHODS unknown_priority FOR TESTING.
ENDCLASS.
CLASS ltc_snow_fee IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}snow_fee( ).
ENDMETHOD.
METHOD assert_fee.
DATA lv_expected TYPE {{p}}snow_fee=>ty_fee.
lv_expected = iv_expected.
cl_abap_unit_assert=>assert_equals(
exp = lv_expected
act = mo_cut->calculate( iv_area = iv_area
iv_priority = iv_priority
iv_distance = iv_distance ) ).
ENDMETHOD.
METHOD minimum_charge.
assert_fee( iv_area = 100 iv_priority = 'S' iv_distance = 0 iv_expected = '45.00' ).
ENDMETHOD.
METHOD small_area_rate.
assert_fee( iv_area = 500 iv_priority = 'S' iv_distance = 0 iv_expected = '100.00' ).
ENDMETHOD.
METHOD express_surcharge.
assert_fee( iv_area = 1000 iv_priority = 'E' iv_distance = 0 iv_expected = '200.00' ).
ENDMETHOD.
METHOD travel_charged.
assert_fee( iv_area = 1000 iv_priority = 'S' iv_distance = 30 iv_expected = '168.00' ).
ENDMETHOD.
METHOD zero_area_returns_zero.
assert_fee( iv_area = 0 iv_priority = 'X' iv_distance = 30 iv_expected = '0.00' ).
ENDMETHOD.
METHOD unknown_priority.
assert_fee( iv_area = 1000 iv_priority = 'Z' iv_distance = 0 iv_expected = '160.00' ).
ENDMETHOD.
ENDCLASS.