Snapshot: new training tasks (balanced generation), docs

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 22:08:59 +02:00
parent eb13453097
commit 6984fc7917
572 changed files with 30024 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
CLASS {{p}}chimney_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_sweep_check.
PRIVATE SECTION.
CONSTANTS c_discount TYPE p LENGTH 3 DECIMALS 2 VALUE '0.90'.
METHODS flue_fee
IMPORTING iv_kind TYPE {{p}}if_sweep_check=>ty_flue_kind
RETURNING VALUE(rv_fee) TYPE {{p}}if_sweep_check=>ty_amount.
METHODS is_known_kind
IMPORTING iv_kind TYPE {{p}}if_sweep_check=>ty_flue_kind
RETURNING VALUE(rv_known) TYPE abap_bool.
ENDCLASS.
CLASS {{p}}chimney_checker IMPLEMENTATION.
METHOD {{p}}if_sweep_check~check_order.
IF iv_flues < 1.
rv_reason = {{p}}if_sweep_check=>c_reason-no_flues.
ELSEIF iv_flues > {{p}}if_sweep_check=>c_max_flues.
rv_reason = {{p}}if_sweep_check=>c_reason-too_many.
ELSEIF is_known_kind( iv_kind ) = abap_false.
rv_reason = {{p}}if_sweep_check=>c_reason-bad_kind.
ELSEIF iv_blocked = abap_true.
rv_reason = {{p}}if_sweep_check=>c_reason-blocked.
ELSEIF iv_year - iv_last_sweep > 2.
rv_reason = {{p}}if_sweep_check=>c_reason-old_sweep.
ELSE.
rv_reason = {{p}}if_sweep_check=>c_reason-ok.
ENDIF.
ENDMETHOD.
METHOD {{p}}if_sweep_check~fee.
IF iv_flues < 1.
rv_fee = 0.
RETURN.
ENDIF.
DATA lv_total TYPE {{p}}if_sweep_check=>ty_amount.
lv_total = flue_fee( iv_kind ) * iv_flues.
IF iv_flues >= 5.
lv_total = lv_total * c_discount.
ENDIF.
rv_fee = round( val = lv_total dec = 2 ).
ENDMETHOD.
METHOD flue_fee.
IF iv_kind = {{p}}if_sweep_check=>c_kind-open.
rv_fee = '60.00'.
ELSEIF iv_kind = {{p}}if_sweep_check=>c_kind-closed.
rv_fee = '45.00'.
ELSEIF iv_kind = {{p}}if_sweep_check=>c_kind-indust.
rv_fee = '120.00'.
ELSE.
rv_fee = 0.
ENDIF.
ENDMETHOD.
METHOD is_known_kind.
rv_known = xsdbool( iv_kind = {{p}}if_sweep_check=>c_kind-open
OR iv_kind = {{p}}if_sweep_check=>c_kind-closed
OR iv_kind = {{p}}if_sweep_check=>c_kind-indust ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,102 @@
CLASS ltc_chimney_checker DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_sweep_check.
METHODS setup.
METHODS order_is_ok FOR TESTING.
METHODS no_flues FOR TESTING.
METHODS too_many_flues FOR TESTING.
METHODS unknown_kind FOR TESTING.
METHODS blocked_order FOR TESTING.
METHODS stale_sweep FOR TESTING.
METHODS fee_by_kind FOR TESTING.
METHODS fee_with_discount FOR TESTING.
METHODS fee_without_flues FOR TESTING.
ENDCLASS.
CLASS ltc_chimney_checker IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}chimney_checker( ).
ENDMETHOD.
METHOD order_is_ok.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-ok
act = mo_cut->check_order( iv_flues = 2
iv_kind = {{p}}if_sweep_check=>c_kind-open
iv_last_sweep = 2024
iv_year = 2025
iv_blocked = abap_false ) ).
ENDMETHOD.
METHOD no_flues.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-no_flues
act = mo_cut->check_order( iv_flues = 0
iv_kind = {{p}}if_sweep_check=>c_kind-closed
iv_last_sweep = 2025
iv_year = 2025
iv_blocked = abap_false ) ).
ENDMETHOD.
METHOD too_many_flues.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-too_many
act = mo_cut->check_order( iv_flues = 13
iv_kind = {{p}}if_sweep_check=>c_kind-open
iv_last_sweep = 2025
iv_year = 2025
iv_blocked = abap_false ) ).
ENDMETHOD.
METHOD unknown_kind.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-bad_kind
act = mo_cut->check_order( iv_flues = 2
iv_kind = 'GAS'
iv_last_sweep = 2025
iv_year = 2025
iv_blocked = abap_false ) ).
ENDMETHOD.
METHOD blocked_order.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-blocked
act = mo_cut->check_order( iv_flues = 2
iv_kind = {{p}}if_sweep_check=>c_kind-open
iv_last_sweep = 2024
iv_year = 2025
iv_blocked = abap_true ) ).
ENDMETHOD.
METHOD stale_sweep.
cl_abap_unit_assert=>assert_equals(
exp = {{p}}if_sweep_check=>c_reason-old_sweep
act = mo_cut->check_order( iv_flues = 2
iv_kind = {{p}}if_sweep_check=>c_kind-indust
iv_last_sweep = 2022
iv_year = 2025
iv_blocked = abap_false ) ).
ENDMETHOD.
METHOD fee_by_kind.
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_sweep_check=>ty_amount( '240.00' )
act = mo_cut->fee( iv_flues = 4 iv_kind = {{p}}if_sweep_check=>c_kind-open ) ).
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_sweep_check=>ty_amount( '180.00' )
act = mo_cut->fee( iv_flues = 4 iv_kind = {{p}}if_sweep_check=>c_kind-closed ) ).
ENDMETHOD.
METHOD fee_with_discount.
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_sweep_check=>ty_amount( '243.00' )
act = mo_cut->fee( iv_flues = 6 iv_kind = {{p}}if_sweep_check=>c_kind-closed ) ).
ENDMETHOD.
METHOD fee_without_flues.
cl_abap_unit_assert=>assert_equals(
exp = CONV {{p}}if_sweep_check=>ty_amount( '0.00' )
act = mo_cut->fee( iv_flues = 0 iv_kind = {{p}}if_sweep_check=>c_kind-open ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,37 @@
INTERFACE {{p}}if_sweep_check PUBLIC.
TYPES ty_reason TYPE c LENGTH 10.
TYPES ty_flue_kind TYPE c LENGTH 4.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
CONSTANTS:
BEGIN OF c_reason,
ok TYPE ty_reason VALUE 'OK',
no_flues TYPE ty_reason VALUE 'NO_FLUES',
too_many TYPE ty_reason VALUE 'TOO_MANY',
bad_kind TYPE ty_reason VALUE 'BAD_KIND',
blocked TYPE ty_reason VALUE 'BLOCKED',
old_sweep TYPE ty_reason VALUE 'OLD_SWEEP',
END OF c_reason.
CONSTANTS:
BEGIN OF c_kind,
open TYPE ty_flue_kind VALUE 'OPEN',
closed TYPE ty_flue_kind VALUE 'CLOS',
indust TYPE ty_flue_kind VALUE 'INDU',
END OF c_kind.
CONSTANTS c_max_flues TYPE i VALUE 12.
METHODS check_order
IMPORTING iv_flues TYPE i
iv_kind TYPE ty_flue_kind
iv_last_sweep TYPE i
iv_year TYPE i
iv_blocked TYPE abap_bool
RETURNING VALUE(rv_reason) TYPE ty_reason.
METHODS fee
IMPORTING iv_flues TYPE i
iv_kind TYPE ty_flue_kind
RETURNING VALUE(rv_fee) TYPE ty_amount.
ENDINTERFACE.