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,18 @@
{
"deepseek-v4.1-flash:cloud": {
"score": 95.0,
"parts": {
"correctness": 40.0,
"craft": 20.0,
"clean": 15.0,
"own_tests": 15.0,
"discipline": 5.0,
"total": 95.0,
"note": "own_tests: faulty-reference part not implemented in skeleton"
},
"hidden": "12/12",
"tool_calls": 16,
"seconds": 116.4,
"run_dir": "runs/emp/10005_G0010_llm_deepseek-v4.1-flash_cloud"
}
}

View File

@@ -0,0 +1,16 @@
{
"id": "G0187",
"pool": "eval",
"category": "K",
"base_task": "G0010",
"style": "incomplete",
"tool_schema": "generic_v0",
"attempts": [
{
"stage": "validate",
"oracle": 100.0,
"null": 0
}
],
"accepted": true
}

View File

@@ -0,0 +1,173 @@
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
METHODS setup.
METHODS all_ok FOR TESTING.
METHODS shortage_is_reported FOR TESTING.
METHODS stock_used_in_order FOR TESTING.
METHODS negative_stock_ignored FOR TESTING.
METHODS zero_requirement_invalid FOR TESTING.
METHODS negative_req_invalid FOR TESTING.
METHODS missing_stock_is_short FOR TESTING.
METHODS case_and_blanks_ignored FOR TESTING.
METHODS stock_items_are_summed FOR TESTING.
METHODS no_requirements FOR TESTING.
METHODS shortages_filter_sort FOR TESTING.
METHODS shortages_empty_all_ok FOR TESTING.
ENDCLASS.
CLASS {{p}}t02_hidden IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}stock_cover_checker( ).
ENDMETHOD.
METHOD all_ok.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 )
( material = 'MAT-B' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 30 )
( material = 'MAT-B' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 30 available = 100 shortage = 0 status = 'OK' )
( material = 'MAT-B' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD shortage_is_reported.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 30 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 50 available = 30 shortage = 20 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD stock_used_in_order.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 60 )
( material = 'MAT-A' plant = 'P1' required = 60 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 60 available = 100 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P1' required = 60 available = 40 shortage = 20 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD negative_stock_ignored.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 100 )
( material = 'MAT-A' plant = 'P1' quantity = -40 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 100 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 100 available = 100 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD zero_requirement_invalid.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 0 )
( material = 'MAT-A' plant = 'P1' required = 50 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 0 available = 50 shortage = 0 status = 'INVALID' )
( material = 'MAT-A' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD negative_req_invalid.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 50 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = -10 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = -10 available = 50 shortage = 0 status = 'INVALID' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD missing_stock_is_short.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-X' plant = 'P9' required = 25 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-X' plant = 'P9' required = 25 available = 0 shortage = 25 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD case_and_blanks_ignored.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'mat-a' plant = 'p1' quantity = 80 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = ' MAT-A ' plant = 'P1 ' required = 80 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = ' MAT-A ' plant = 'P1 ' required = 80 available = 80 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD stock_items_are_summed.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 10 )
( material = 'MAT-A' plant = 'P1' quantity = 20 )
( material = 'MAT-A' plant = 'P2' quantity = 5 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 30 )
( material = 'MAT-A' plant = 'P2' required = 5 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 30 available = 30 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P2' required = 5 available = 5 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD no_requirements.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ).
DATA(lt_act) = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ).
ENDMETHOD.
METHOD shortages_filter_sort.
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-D' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' )
( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
ENDMETHOD.
METHOD shortages_empty_all_ok.
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' )
( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( mo_cut->shortages( lt_in ) ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,128 @@
CLASS {{p}}stock_cover_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_stock_cover.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_stock,
material TYPE {{p}}if_stock_cover=>ty_material,
plant TYPE {{p}}if_stock_cover=>ty_plant,
remaining TYPE {{p}}if_stock_cover=>ty_quantity,
END OF ty_stock.
TYPES tt_stock TYPE HASHED TABLE OF ty_stock WITH UNIQUE KEY material plant.
METHODS aggregate
IMPORTING it_stock TYPE {{p}}if_stock_cover=>tt_stock_item
RETURNING VALUE(rt_stock) TYPE tt_stock.
METHODS free_quantity
IMPORTING it_stock TYPE tt_stock
iv_material TYPE {{p}}if_stock_cover=>ty_material
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
RETURNING VALUE(rv_quantity) TYPE {{p}}if_stock_cover=>ty_quantity.
METHODS consume
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
iv_quantity TYPE {{p}}if_stock_cover=>ty_quantity
CHANGING ct_stock TYPE tt_stock.
METHODS normalize_material
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
RETURNING VALUE(rv_material) TYPE {{p}}if_stock_cover=>ty_material.
METHODS normalize_plant
IMPORTING iv_plant TYPE {{p}}if_stock_cover=>ty_plant
RETURNING VALUE(rv_plant) TYPE {{p}}if_stock_cover=>ty_plant.
ENDCLASS.
CLASS {{p}}stock_cover_checker IMPLEMENTATION.
METHOD {{p}}if_stock_cover~check.
DATA(lt_stock) = aggregate( it_stock ).
LOOP AT it_requirement INTO DATA(ls_requirement).
DATA(lv_free) = free_quantity( it_stock = lt_stock
iv_material = ls_requirement-material
iv_plant = ls_requirement-plant ).
DATA(ls_result) = VALUE {{p}}if_stock_cover=>ty_result(
material = ls_requirement-material
plant = ls_requirement-plant
required = ls_requirement-required
available = lv_free ).
IF ls_requirement-required <= 0.
ls_result-status = {{p}}if_stock_cover=>c_status-invalid.
ELSEIF lv_free >= ls_requirement-required.
ls_result-status = {{p}}if_stock_cover=>c_status-ok.
consume( EXPORTING iv_material = ls_requirement-material
iv_plant = ls_requirement-plant
iv_quantity = ls_requirement-required
CHANGING ct_stock = lt_stock ).
ELSE.
ls_result-status = {{p}}if_stock_cover=>c_status-short.
ls_result-shortage = ls_requirement-required - lv_free.
consume( EXPORTING iv_material = ls_requirement-material
iv_plant = ls_requirement-plant
iv_quantity = lv_free
CHANGING ct_stock = lt_stock ).
ENDIF.
APPEND ls_result TO rt_result.
ENDLOOP.
ENDMETHOD.
METHOD {{p}}if_stock_cover~shortages.
rt_shortage = it_result.
DELETE rt_shortage WHERE status <> {{p}}if_stock_cover=>c_status-short.
SORT rt_shortage BY material plant.
ENDMETHOD.
METHOD aggregate.
LOOP AT it_stock INTO DATA(ls_stock).
IF ls_stock-quantity < 0.
CONTINUE.
ENDIF.
DATA(lv_material) = normalize_material( ls_stock-material ).
DATA(lv_plant) = normalize_plant( ls_stock-plant ).
ASSIGN rt_stock[ material = lv_material plant = lv_plant ] TO FIELD-SYMBOL(<ls_stock_sum>).
IF sy-subrc = 0.
<ls_stock_sum>-remaining = <ls_stock_sum>-remaining + ls_stock-quantity.
ELSE.
INSERT VALUE #( material = lv_material
plant = lv_plant
remaining = ls_stock-quantity ) INTO TABLE rt_stock.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD free_quantity.
ASSIGN it_stock[ material = normalize_material( iv_material )
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
IF sy-subrc = 0.
rv_quantity = <ls_stock>-remaining.
ENDIF.
ENDMETHOD.
METHOD consume.
ASSIGN ct_stock[ material = normalize_material( iv_material )
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
IF sy-subrc = 0.
<ls_stock>-remaining = <ls_stock>-remaining - iv_quantity.
ENDIF.
ENDMETHOD.
METHOD normalize_material.
DATA lv_text TYPE string.
lv_text = iv_material.
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
rv_material = to_upper( lv_text ).
ENDMETHOD.
METHOD normalize_plant.
DATA lv_text TYPE string.
lv_text = iv_plant.
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
rv_plant = to_upper( lv_text ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,93 @@
CLASS ltc_stock_cover DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
METHODS setup.
METHODS covered_req_is_ok FOR TESTING.
METHODS shortage_is_reported FOR TESTING.
METHODS stock_shared_in_order FOR TESTING.
METHODS invalid_req_keeps_stock FOR TESTING.
METHODS blanks_and_case_ignored FOR TESTING.
METHODS shortages_are_sorted FOR TESTING.
ENDCLASS.
CLASS ltc_stock_cover IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}stock_cover_checker( ).
ENDMETHOD.
METHOD covered_req_is_ok.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 40 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 40 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 40 available = 40 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD shortage_is_reported.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 5 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 12 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 12 available = 5 shortage = 7 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD stock_shared_in_order.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 6 )
( material = 'MAT-A' plant = 'P1' required = 6 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 6 available = 10 shortage = 0 status = 'OK' )
( material = 'MAT-A' plant = 'P1' required = 6 available = 4 shortage = 2 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD invalid_req_keeps_stock.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'MAT-A' plant = 'P1' quantity = 9 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = 'MAT-A' plant = 'P1' required = 0 )
( material = 'MAT-A' plant = 'P1' required = 9 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P1' required = 0 available = 9 shortage = 0 status = 'INVALID' )
( material = 'MAT-A' plant = 'P1' required = 9 available = 9 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD blanks_and_case_ignored.
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
( material = 'mat-a' plant = 'p1' quantity = 7 ) ).
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
( material = ' MAT-A ' plant = 'P1' required = 7 ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = ' MAT-A ' plant = 'P1' required = 7 available = 7 shortage = 0 status = 'OK' ) ).
cl_abap_unit_assert=>assert_equals(
exp = lt_exp
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
ENDMETHOD.
METHOD shortages_are_sorted.
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' )
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
( material = 'MAT-A' plant = 'P1' required = 1 available = 1 shortage = 0 status = 'OK' ) ).
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' ) ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,7 @@
{
"decision": "accept",
"note": "Ordered stock use, case/blank rules tested; fits C.",
"by": "Claude",
"date": "2026-10-03",
"failed_checks": {}
}

View File

@@ -0,0 +1,46 @@
INTERFACE {{p}}if_stock_cover PUBLIC.
TYPES ty_material TYPE c LENGTH 18.
TYPES ty_plant TYPE c LENGTH 4.
TYPES ty_quantity TYPE p LENGTH 13 DECIMALS 3.
TYPES ty_status TYPE c LENGTH 10.
TYPES: BEGIN OF ty_stock_item,
material TYPE ty_material,
plant TYPE ty_plant,
quantity TYPE ty_quantity,
END OF ty_stock_item.
TYPES tt_stock_item TYPE STANDARD TABLE OF ty_stock_item WITH EMPTY KEY.
TYPES: BEGIN OF ty_requirement,
material TYPE ty_material,
plant TYPE ty_plant,
required TYPE ty_quantity,
END OF ty_requirement.
TYPES tt_requirement TYPE STANDARD TABLE OF ty_requirement WITH EMPTY KEY.
TYPES: BEGIN OF ty_result,
material TYPE ty_material,
plant TYPE ty_plant,
required TYPE ty_quantity,
available TYPE ty_quantity,
shortage TYPE ty_quantity,
status TYPE ty_status,
END OF ty_result.
TYPES tt_result TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY.
CONSTANTS:
BEGIN OF c_status,
ok TYPE ty_status VALUE 'OK',
short TYPE ty_status VALUE 'SHORT',
invalid TYPE ty_status VALUE 'INVALID',
END OF c_status.
METHODS check
IMPORTING it_stock TYPE tt_stock_item
it_requirement TYPE tt_requirement
RETURNING VALUE(rt_result) TYPE tt_result.
METHODS shortages
IMPORTING it_result TYPE tt_result
RETURNING VALUE(rt_shortage) TYPE tt_result.
ENDINTERFACE.

View File

@@ -0,0 +1,15 @@
Create the class {{P}}STOCK_COVER_CHECKER in package $TMP. The class is public and final. It implements the interface {{P}}IF_STOCK_COVER. Do not add other public methods. The class must be creatable with NEW {{P}}STOCK_COVER_CHECKER( ).
A stock item has a material, a plant, and a quantity. Ignore every stock item whose quantity is less than zero. Sum the quantities of the remaining stock items for each material and plant. This sum is the free stock. Compare material and plant without regard to case. Remove all blanks before you compare them.
Process the requirements in the given sequence. The result contains one row for each requirement in the same sequence. The available quantity of a requirement is the free stock of its material and plant at the time of the requirement. If no stock exists for the material and plant, the available quantity is 0.
If the required quantity is less than or equal to 0, the status is INVALID. The requirement does not use free stock. The shortage is 0. Else if the available quantity is greater than or equal to the required quantity, the status is OK. The shortage is 0. The requirement uses the required quantity of the free stock. Else the status is SHORT. The requirement uses all free stock. The shortage is the required quantity minus the available quantity.
A result row contains the material and the plant of the requirement without a change, the required quantity, the available quantity, the shortage, and the status.
The method SHORTAGES returns all rows of the result table whose status is SHORT. Sort these rows by material in ascending order and then by plant in ascending order. The result can be empty.
Release target: 8.16 (SAP_BASIS 816). Use Clean ABAP. Keep method length below 40 statements. Do not use global variables. Do not write comments that restate the code. Do not change {{P}}IF_STOCK_COVER.
The class must be active and have no syntax error. The hidden tests must pass. Write your own ABAP Unit tests for the class.

View File

@@ -0,0 +1,55 @@
{
"id": "G0187",
"category": "K",
"object_type": "CLAS",
"difficulty": 2,
"release_target": "v816",
"expected_outcome": "implement",
"budget": {
"max_tool_calls": 60,
"max_activations": 15
},
"seed": [
{
"type": "INTF",
"name": "{{P}}IF_STOCK_COVER",
"file": "seed/if_stock_cover.intf.abap",
"description": "Stock cover interface with types, constants and two methods"
}
],
"contract": [
{
"type": "CLAS",
"name": "{{P}}STOCK_COVER_CHECKER",
"implements": "{{P}}IF_STOCK_COVER"
}
],
"out_of_scope": [
"{{P}}IF_STOCK_COVER"
],
"hidden_tests": [
{
"type": "CLAS",
"name": "{{P}}T02_HIDDEN",
"file": "hidden/t02_hidden.clas.abap",
"description": "T02 hidden tests for the stock cover checker"
}
],
"reference": [
{
"type": "CLAS",
"name": "{{P}}STOCK_COVER_CHECKER",
"file": "reference/stock_cover_checker.clas.abap",
"description": "Stock cover checker with hashed stock table",
"testclasses_file": "reference/stock_cover_checker.testclasses.abap"
}
],
"craft_checks": [
"table_kind",
"access_path",
"method_length"
],
"base_task": "G0010",
"input_style": "incomplete",
"tool_schema": "generic_v0"
}