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,127 @@
CLASS {{p}}frame_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_moulding TYPE c LENGTH 1.
TYPES ty_glass TYPE c LENGTH 1.
TYPES ty_amount TYPE p LENGTH 9 DECIMALS 2.
METHODS calculate_price
IMPORTING iv_width_cm TYPE i
iv_height_cm TYPE i
iv_moulding TYPE ty_moulding
iv_glass TYPE ty_glass
iv_quantity TYPE i
RETURNING VALUE(rv_price) TYPE ty_amount.
PRIVATE SECTION.
CONSTANTS:
c_rate_standard TYPE ty_amount VALUE '0.08',
c_rate_premium TYPE ty_amount VALUE '0.15',
c_rate_gold TYPE ty_amount VALUE '0.28'.
DATA gv_width TYPE ty_amount.
DATA gv_height TYPE ty_amount.
DATA gv_perimeter TYPE ty_amount.
DATA gv_area TYPE ty_amount.
ENDCLASS.
CLASS {{p}}frame_pricer IMPLEMENTATION.
METHOD calculate_price.
DATA lv_frame TYPE ty_amount.
DATA lv_glass TYPE ty_amount.
DATA lv_extra TYPE ty_amount.
DATA lv_sum TYPE ty_amount.
DATA lv_qty TYPE ty_amount.
DATA lv_factor TYPE ty_amount.
DATA lv_base TYPE ty_amount.
DATA lv_labour TYPE ty_amount.
DATA lv_small TYPE ty_amount.
DATA lv_big TYPE ty_amount.
DATA lv_setup TYPE ty_amount.
DATA lv_limit_s TYPE ty_amount.
DATA lv_limit_b TYPE ty_amount.
CLEAR rv_price.
* check the input data
IF iv_width_cm LT 1 OR iv_height_cm LT 1.
rv_price = 0.
RETURN.
ENDIF.
IF iv_quantity LT 1.
rv_price = 0.
RETURN.
ENDIF.
IF iv_moulding NE 'S' AND iv_moulding NE 'P' AND iv_moulding NE 'G'.
rv_price = 0.
RETURN.
ENDIF.
IF iv_glass NE 'N' AND iv_glass NE 'S' AND iv_glass NE 'A'.
rv_price = 0.
RETURN.
ENDIF.
MOVE iv_width_cm TO gv_width.
MOVE iv_height_cm TO gv_height.
MOVE 2 TO lv_factor.
COMPUTE gv_perimeter = ( gv_width + gv_height ) * lv_factor.
COMPUTE gv_area = gv_width * gv_height.
* the price of the moulding
IF iv_moulding = 'S'.
COMPUTE lv_frame = gv_perimeter * c_rate_standard.
ELSE.
IF iv_moulding = 'P'.
COMPUTE lv_frame = gv_perimeter * c_rate_premium.
ELSE.
COMPUTE lv_frame = gv_perimeter * c_rate_gold.
ENDIF.
ENDIF.
* the price of the glass
IF iv_glass = 'N'.
MOVE 0 TO lv_glass.
ELSE.
IF iv_glass = 'S'.
MOVE 18 TO lv_glass.
ELSE.
MOVE 34 TO lv_glass.
ENDIF.
ENDIF.
* the extras
MOVE 3 TO lv_base.
MOVE 12 TO lv_labour.
MOVE 4 TO lv_small.
MOVE 25 TO lv_big.
MOVE 50 TO lv_limit_s.
MOVE 20000 TO lv_limit_b.
COMPUTE lv_extra = lv_base + lv_labour.
IF gv_perimeter LT lv_limit_s.
COMPUTE lv_extra = lv_extra + lv_small.
ENDIF.
IF gv_area GT lv_limit_b.
COMPUTE lv_extra = lv_extra + lv_big.
ENDIF.
COMPUTE lv_sum = lv_frame + lv_glass + lv_extra.
MOVE iv_quantity TO lv_qty.
COMPUTE lv_sum = lv_sum * lv_qty.
MOVE 15 TO lv_setup.
IF iv_quantity LT 5.
COMPUTE lv_sum = lv_sum + lv_setup.
ENDIF.
rv_price = lv_sum.
ENDMETHOD.
ENDCLASS.