Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' OR iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price + '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax = abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_true.
lv_price = round( val = lv_price * 85 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' AND iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price - '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax = abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_true.
lv_price = round( val = lv_price * 85 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' AND iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price + '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax <> abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_true.
lv_price = round( val = lv_price * 85 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' AND iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price + '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax = abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_false.
lv_price = round( val = lv_price * 85 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' AND iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price + '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax = abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_true.
lv_price = round( val = lv_price * 85 / 100 dec = 3 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,24 @@
{
"id": "G1103",
"pool": "train",
"object_type": "FUNC",
"category": "A",
"attempts": [
{
"stage": "validate",
"oracle": 85.0,
"null": 0
},
{
"stage": "validate",
"oracle": 100.0,
"null": 0,
"mutation": {
"valid": 5,
"killed": 5,
"ok": true
}
}
],
"accepted": true
}

View File

@@ -0,0 +1,100 @@
CLASS {{p}}t37_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS call
IMPORTING iv_program TYPE string
iv_vehicle TYPE string
iv_wax TYPE abap_bool DEFAULT abap_false
iv_fleet TYPE abap_bool DEFAULT abap_false
iv_price TYPE decfloat34 DEFAULT 99
EXPORTING ev_price TYPE decfloat34
ev_reject TYPE abap_bool
ev_subrc TYPE sysubrc.
METHODS basic_small_price FOR TESTING.
METHODS plus_medium_price FOR TESTING.
METHODS premium_wax_free FOR TESTING.
METHODS fleet_discount_rounds FOR TESTING.
METHODS fleet_rounds_up FOR TESTING.
METHODS large_basic_rejected FOR TESTING.
METHODS invalid_program_raises FOR TESTING.
METHODS invalid_vehicle_raises FOR TESTING.
METHODS reject_flag_false FOR TESTING.
ENDCLASS.
CLASS {{p}}t37_hidden IMPLEMENTATION.
METHOD call.
ev_price = iv_price.
CALL FUNCTION '{{P}}WASH_FEE'
EXPORTING
iv_program = iv_program
iv_vehicle = iv_vehicle
iv_extra_wax = iv_wax
iv_fleet = iv_fleet
IMPORTING
ev_reject = ev_reject
CHANGING
cv_price = ev_price
EXCEPTIONS
invalid_program = 1
invalid_vehicle = 2
OTHERS = 3.
ev_subrc = sy-subrc.
ENDMETHOD.
METHOD basic_small_price.
call( EXPORTING iv_program = `BASIC` iv_vehicle = `S`
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '8.50' ) act = lv_price ).
ENDMETHOD.
METHOD plus_medium_price.
call( EXPORTING iv_program = `PLUS` iv_vehicle = `M`
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '15.00' ) act = lv_price ).
ENDMETHOD.
METHOD premium_wax_free.
call( EXPORTING iv_program = `PREMIUM` iv_vehicle = `S` iv_wax = abap_true
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.50' ) act = lv_price ).
ENDMETHOD.
METHOD fleet_discount_rounds.
call( EXPORTING iv_program = `BASIC` iv_vehicle = `S` iv_fleet = abap_true
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '7.23' ) act = lv_price ).
ENDMETHOD.
METHOD fleet_rounds_up.
call( EXPORTING iv_program = `PREMIUM` iv_vehicle = `S` iv_wax = abap_true
iv_fleet = abap_true
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '15.73' ) act = lv_price ).
ENDMETHOD.
METHOD large_basic_rejected.
call( EXPORTING iv_program = `BASIC` iv_vehicle = `L`
IMPORTING ev_price = DATA(lv_price) ev_reject = DATA(lv_reject) ).
cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_reject ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_price ).
ENDMETHOD.
METHOD invalid_program_raises.
call( EXPORTING iv_program = `GOLD` iv_vehicle = `S`
IMPORTING ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_subrc ).
ENDMETHOD.
METHOD invalid_vehicle_raises.
call( EXPORTING iv_program = `BASIC` iv_vehicle = `XL`
IMPORTING ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_subrc ).
ENDMETHOD.
METHOD reject_flag_false.
call( EXPORTING iv_program = `PLUS` iv_vehicle = `M`
IMPORTING ev_reject = DATA(lv_reject) ).
cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_reject ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,66 @@
{
"task": "G1103",
"mutants": [
{
"object": "{{P}}WASH_FEE",
"mutant": "line 23: AND -> OR (logic)",
"status": "killed",
"hidden": "3/9",
"failed_tests": [
"BASIC_SMALL_PRICE",
"FLEET_DISCOUNT_ROUNDS",
"FLEET_ROUNDS_UP",
"LARGE_BASIC_REJECTED",
"PLUS_MEDIUM_PRICE",
"PREMIUM_WAX_FREE"
]
},
{
"object": "{{P}}WASH_FEE",
"mutant": "line 44: + -> - (arith)",
"status": "killed",
"hidden": "8/9",
"failed_tests": [
"PLUS_MEDIUM_PRICE"
]
},
{
"object": "{{P}}WASH_FEE",
"mutant": "line 49: = -> <> (eq)",
"status": "killed",
"hidden": "6/9",
"failed_tests": [
"BASIC_SMALL_PRICE",
"FLEET_DISCOUNT_ROUNDS",
"PLUS_MEDIUM_PRICE"
]
},
{
"object": "{{P}}WASH_FEE",
"mutant": "line 53: abap_true -> abap_false (bool)",
"status": "killed",
"hidden": "4/9",
"failed_tests": [
"BASIC_SMALL_PRICE",
"FLEET_DISCOUNT_ROUNDS",
"FLEET_ROUNDS_UP",
"PLUS_MEDIUM_PRICE",
"PREMIUM_WAX_FREE"
]
},
{
"object": "{{P}}WASH_FEE",
"mutant": "line 54: 2 -> 3 (const)",
"status": "killed",
"hidden": "7/9",
"failed_tests": [
"FLEET_DISCOUNT_ROUNDS",
"FLEET_ROUNDS_UP"
]
}
],
"valid": 5,
"killed": 5,
"kill_rate": 1.0,
"ok": true
}

View File

@@ -0,0 +1,101 @@
CLASS {{p}}t37_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS price_for
IMPORTING iv_program TYPE string
iv_vehicle TYPE string
iv_wax TYPE abap_bool DEFAULT abap_false
iv_fleet TYPE abap_bool DEFAULT abap_false
EXPORTING ev_price TYPE decfloat34
ev_reject TYPE abap_bool
ev_subrc TYPE sysubrc.
METHODS base_prices FOR TESTING.
METHODS vehicle_surcharge FOR TESTING.
METHODS extra_wax FOR TESTING.
METHODS fleet_discount FOR TESTING.
METHODS large_basic_rejected FOR TESTING.
METHODS invalid_program FOR TESTING.
METHODS invalid_vehicle FOR TESTING.
ENDCLASS.
CLASS {{p}}t37_test IMPLEMENTATION.
METHOD price_for.
ev_price = 0.
CALL FUNCTION '{{P}}WASH_FEE'
EXPORTING
iv_program = iv_program
iv_vehicle = iv_vehicle
iv_extra_wax = iv_wax
iv_fleet = iv_fleet
IMPORTING
ev_reject = ev_reject
CHANGING
cv_price = ev_price
EXCEPTIONS
invalid_program = 1
invalid_vehicle = 2
OTHERS = 3.
ev_subrc = sy-subrc.
ENDMETHOD.
METHOD base_prices.
price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S'
IMPORTING ev_price = DATA(lv_basic) ev_subrc = DATA(lv_rc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '8.50' ) act = lv_basic ).
price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'S'
IMPORTING ev_price = DATA(lv_plus) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.50' ) act = lv_plus ).
price_for( EXPORTING iv_program = 'PREMIUM' iv_vehicle = 'S'
IMPORTING ev_price = DATA(lv_premium) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.50' ) act = lv_premium ).
ENDMETHOD.
METHOD vehicle_surcharge.
price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'M'
IMPORTING ev_price = DATA(lv_medium) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '15.00' ) act = lv_medium ).
price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'L'
IMPORTING ev_price = DATA(lv_large) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.00' ) act = lv_large ).
ENDMETHOD.
METHOD extra_wax.
price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S' iv_wax = abap_true
IMPORTING ev_price = DATA(lv_basic) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = lv_basic ).
price_for( EXPORTING iv_program = 'PREMIUM' iv_vehicle = 'S' iv_wax = abap_true
IMPORTING ev_price = DATA(lv_premium) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.50' ) act = lv_premium ).
ENDMETHOD.
METHOD fleet_discount.
price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S' iv_fleet = abap_true
IMPORTING ev_price = DATA(lv_price) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '7.23' ) act = lv_price ).
ENDMETHOD.
METHOD large_basic_rejected.
price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'L'
IMPORTING ev_price = DATA(lv_price) ev_reject = DATA(lv_reject) ).
cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_reject ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_price ).
ENDMETHOD.
METHOD invalid_program.
price_for( EXPORTING iv_program = 'GOLD' iv_vehicle = 'S'
IMPORTING ev_subrc = DATA(lv_rc) ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
ENDMETHOD.
METHOD invalid_vehicle.
price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'XL'
IMPORTING ev_subrc = DATA(lv_rc) ).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,59 @@
FUNCTION {{p}}wash_fee
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
DATA lv_price TYPE decfloat34.
ev_reject = abap_false.
IF iv_program <> 'BASIC' AND iv_program <> 'PLUS' AND iv_program <> 'PREMIUM'.
RAISE invalid_program.
ENDIF.
IF iv_vehicle <> 'S' AND iv_vehicle <> 'M' AND iv_vehicle <> 'L'.
RAISE invalid_vehicle.
ENDIF.
IF iv_vehicle = 'L' AND iv_program = 'BASIC'.
ev_reject = abap_true.
cv_price = 0.
RETURN.
ENDIF.
CASE iv_program.
WHEN 'BASIC'.
lv_price = '8.50'.
WHEN 'PLUS'.
lv_price = '12.50'.
WHEN 'PREMIUM'.
lv_price = '18.50'.
ENDCASE.
CASE iv_vehicle.
WHEN 'M'.
lv_price = lv_price + '2.50'.
WHEN 'L'.
lv_price = lv_price + '5.50'.
ENDCASE.
IF iv_extra_wax = abap_true AND iv_program <> 'PREMIUM'.
lv_price = lv_price + '3.50'.
ENDIF.
IF iv_fleet = abap_true.
lv_price = round( val = lv_price * 85 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
ENDIF.
cv_price = lv_price.
ENDFUNCTION.

View File

@@ -0,0 +1,17 @@
FUNCTION {{p}}wash_sample
IMPORTING
iv_program TYPE string
iv_vehicle TYPE string
iv_extra_wax TYPE abap_bool
iv_fleet TYPE abap_bool
EXPORTING
ev_reject TYPE abap_bool
CHANGING
cv_price TYPE decfloat34
EXCEPTIONS
invalid_program
invalid_vehicle.
ev_reject = abap_false.
ENDFUNCTION.

View File

@@ -0,0 +1,47 @@
# 1. Goal
Calculate the price of a car wash order. The checkout program of the car wash
calls one function module for each order. The function module also tells the
checkout program if the wash tunnel cannot take the vehicle.
# 2. Open questions
None.
# 3. Context
- Function group {{P}}FG_WASH exists in package $TMP.
- Function module {{P}}WASH_SAMPLE exists in this group. It is the sample wash
module. Its interface is the interface that all wash modules must use.
# 4. Contract
- Create the function module {{P}}WASH_FEE in function group {{P}}FG_WASH.
- Use exactly the interface of {{P}}WASH_SAMPLE: the same parameter names,
kinds, types and exceptions.
# 5. Business rules
1. If the wash program is not BASIC, PLUS or PREMIUM, raise the exception
INVALID_PROGRAM.
2. If the vehicle category is not S, M or L, raise the exception
INVALID_VEHICLE. Check the wash program (rule 1) before the vehicle
category.
3. Set the reject flag to false, except in rule 5.
4. Base price of the wash program: BASIC 8.50, PLUS 12.50, PREMIUM 18.50.
5. If the vehicle category is L and the wash program is BASIC, the wash tunnel
cannot take the vehicle. Set the reject flag to true and set the price to
0.00. Rules 6 to 8 do not apply.
6. Vehicle surcharge: category S 0.00, category M 2.50, category L 5.50. Add
the surcharge to the base price.
7. Extra wax: add 3.50 to the price. For the wash program PREMIUM the wax is
included in the price, so add nothing.
8. Fleet discount: if the fleet flag is true, the customer pays 85 % of the
price after rules 4 to 7, rounded half up to 2 decimals. All prices are in
euro.
# 6. Constraints
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
- Coding standards: Clean ABAP. Keep every method below 40 statements. Do not
create ATC findings of priority 1 or 2.
- Out of scope: do not change {{P}}WASH_SAMPLE.
# 7. Acceptance
- The function module is active and has no syntax error.
- The hidden tests pass.
- Write ABAP Unit tests for the function module in a global test class.

View File

@@ -0,0 +1,88 @@
{
"id": "G1103",
"category": "A",
"object_type": "FUNC",
"difficulty": 2,
"release_target": "v816",
"expected_outcome": "implement",
"budget": {
"max_tool_calls": 60,
"max_activations": 15
},
"seed": [
{
"type": "FUGR",
"name": "{{P}}FG_WASH",
"description": "Car wash fee modules"
},
{
"type": "FUNC",
"name": "{{P}}WASH_SAMPLE",
"functionGroup": "{{P}}FG_WASH",
"file": "seed/wash_sample.func.abap",
"description": "Sample wash module"
}
],
"contract": [
{
"type": "FUNC",
"name": "{{P}}WASH_FEE",
"functionGroup": "{{P}}FG_WASH",
"params": [
{
"name": "iv_program",
"type": "string"
},
{
"name": "iv_vehicle",
"type": "string"
},
{
"name": "iv_extra_wax",
"type": "abap_bool"
},
{
"name": "iv_fleet",
"type": "abap_bool"
},
{
"name": "ev_reject",
"type": "abap_bool"
},
{
"name": "cv_price",
"type": "decfloat34"
}
]
}
],
"out_of_scope": [
"{{P}}WASH_SAMPLE"
],
"hidden_tests": [
{
"type": "CLAS",
"name": "{{P}}T37_HIDDEN",
"file": "hidden/t37_hidden.clas.abap",
"description": "T37 hidden tests"
}
],
"reference": [
{
"type": "FUNC",
"name": "{{P}}WASH_FEE",
"functionGroup": "{{P}}FG_WASH",
"file": "reference/wash_fee.func.abap",
"description": "Car wash price module"
},
{
"type": "CLAS",
"name": "{{P}}T37_TEST",
"file": "reference/t37_test.clas.abap",
"description": "T37 own tests"
}
],
"craft_checks": [
"method_length"
]
}