# 1. Goal A warehouse planner checks if the free stock covers the requirements of a production run. The planner sends a list of stock items and a list of requirements to a class. The class returns one result row for each requirement. # 2. Open questions None. # 3. Context - The interface {{P}}IF_STOCK_COVER exists in package $TMP. It is active. - The interface contains the types TY_MATERIAL (CHAR 18), TY_PLANT (CHAR 4), TY_QUANTITY (PACKED 13, 3) and TY_STATUS (CHAR 10). - The interface contains the structures TY_STOCK_ITEM, TY_REQUIREMENT and TY_RESULT and the table types TT_STOCK_ITEM, TT_REQUIREMENT and TT_RESULT. - The interface contains the constant structure C_STATUS with the values OK, SHORT and INVALID. - The interface has the method CHECK. It imports a stock table and a requirement table and returns a result table. - The interface has the method SHORTAGES. It imports a result table and returns a result table. # 4. Contract - Create the class {{P}}STOCK_COVER_CHECKER in package $TMP. - The class is public and final. - The class implements {{P}}IF_STOCK_COVER. - Do not add other public methods. - The hidden tests create the class with NEW {{P}}STOCK_COVER_CHECKER( ). # 5. Business rules ## Stock 1. Each stock item has a material, a plant and a quantity. Ignore every stock item whose quantity is less than zero. 2. Sum the quantities of the remaining stock items for each combination of material and plant. This sum is the free stock of the material and plant. 3. Compare material and plant without regard to case. Remove all blanks before you compare them. ## Requirements 4. Process the requirements in the given sequence. The result contains one row for each requirement in the same sequence. 5. 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. 6. 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. 7. 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. 8. Else the status is SHORT. The requirement uses all free stock. The shortage is the required quantity minus the available quantity. ## Result 9. 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. 10. 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. # 6. Constraints - Release target: 8.16 (SAP_BASIS 816). - Coding standards: Clean ABAP. Method length below 40 statements. No global variables. No comment that restates the code. - Out of scope: do not change {{P}}IF_STOCK_COVER. # 7. Acceptance - The class is active and has no syntax error. - The hidden tests pass. - Write your own ABAP Unit tests for the class.