Files
abap-llm/tasks_gen/train/G1061/spec.md
2026-10-05 18:02:52 +02:00

3.1 KiB

1. Goal

A watch and clock workshop repairs customer orders. Two intake points send their order lists: the front desk and a partner shop. The workshop program needs one merged list of all orders and the total repair time of each customer. The class {{P}}WATCH_ORDER_POOL does this work.

2. Open questions

None.

3. Context

  • The interface {{P}}IF_WATCH_ORDER exists in package $TMP. It is active.
  • The interface contains the types TY_ORDER_ID (CHAR 10), TY_CUSTOMER (CHAR 20), TY_STATUS (CHAR 1), TY_ORDER, TT_ORDERS, TY_CUSTOMER_TOTAL and TT_CUSTOMER_TOTALS. Read the interface for the exact definition.
  • TY_ORDER has the components ORDER_ID, CUSTOMER, DURATION_MIN (integer) and STATUS.
  • TY_CUSTOMER_TOTAL has the components CUSTOMER and TOTAL_MIN (integer).
  • The interface contains the constant structure C_STATUS with the components OPEN (value 'O') and CLOSED (value 'C').
  • All objects are in package $TMP.

4. Contract

  • Create the class {{P}}WATCH_ORDER_POOL in package $TMP.
  • The class is public and final. It has a public constructor without parameters.
  • The class implements the interface {{P}}IF_WATCH_ORDER.
  • Do not add other public methods.

The interface methods do these tasks:

  • merge_orders: merge the two intake lists into one order list.
  • open_orders: select the open orders of one order list.
  • customer_totals: calculate the total repair time of each customer.
  • find_order: find one order in a list by its order ID.

5. Business rules

General:

  • An order ID is never empty. A customer name is never empty.
  • DURATION_MIN is never negative.

merge_orders:

  1. Read the orders of IT_INTAKE first. Then read the orders of IT_WORKSHOP.
  2. If one order ID occurs more than once, keep the first occurrence and ignore all later occurrences. This rule holds inside one list and across the two lists.
  3. The result contains all orders. The result is sorted in ascending order of ORDER_ID.

open_orders:

  1. Use the orders of IT_ORDERS.
  2. If one order ID occurs more than once, keep the first occurrence.
  3. Keep only the orders with STATUS = C_STATUS-OPEN.
  4. The result is sorted in ascending order of ORDER_ID.

customer_totals:

  1. Use only the orders of IT_ORDERS with STATUS = C_STATUS-OPEN.
  2. If one order ID occurs more than once, count it one time only (the first occurrence).
  3. Sum DURATION_MIN for each customer.
  4. The result has one row for each customer with at least one open order.
  5. The result is sorted in ascending order of CUSTOMER.

find_order:

  1. Search IT_ORDERS for the order with ORDER_ID = IV_ORDER_ID.
  2. If one order ID occurs more than once, return the first occurrence.
  3. If no order has this order ID, return a structure with initial components: ORDER_ID initial, CUSTOMER initial, DURATION_MIN = 0, STATUS initial.

6. Constraints

  • Release target: SAP_BASIS 816 (ABAP Platform 2025).
  • 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_WATCH_ORDER.

7. Acceptance

  • The class is active and has no syntax error.
  • The hidden tests pass.
  • Write your own ABAP Unit tests for the class.