# 1. Goal A safety-services company inspects fire extinguishers at customer sites. The inspection office runs the report {{P}}EXT_CHECK_OLD in package $TMP to see which extinguishers need attention. The report works, but the source is a legacy tangle. Rewrite the source so that a colleague can read it and change it. The observable behavior of the report must not change. # 2. Open questions None. # 3. Context - {{P}}EXT_CHECK_OLD is an executable program in package $TMP. It is active. - {{P}}EXTING is a database table in package $TMP with the inspection master data: EXT_ID (INT4, key), SITE (CHAR 6), EXT_TYPE (CHAR 2), WEIGHT_G (INT4), PRESSURE_BAR (INT4), LAST_CHECK (DATS), NEXT_CHECK (DATS). - The program reads the table and writes one output line for each extinguisher. # 4. Contract - Keep the program name {{P}}EXT_CHECK_OLD and the package $TMP. - Keep the selection screen unchanged: - P_FROM, type DATS, obligatory. - P_TO, type DATS, obligatory. - S_SITE, select-option for SITE. - P_DEFECT, checkbox. - The output is an ALV list (CL_SALV_TABLE). One output line has the columns EXT_ID, SITE, EXT_TYPE, WEIGHT_G, PRESSURE_BAR, STATE and URGENCY. - No other public name of the program changes. # 5. Business rules The present source of {{P}}EXT_CHECK_OLD defines the rules. Read that source before you change anything. Every rule stays in force: the selection logic, the special cases, the values of the columns STATE and URGENCY, and the order of the output lines. # 6. Constraints - Release target: 7.58. - Coding standards: Clean ABAP. Split the logic into small methods with clear names. No method has 40 statements or more. Read the database with a single SELECT. Do not use obsolete language elements. - Out of scope: do not change the table {{P}}EXTING and the seed class {{P}}EXT_SEED. # 7. Acceptance - The program is active and free of syntax errors. - The output is identical to the output before the change. - The hidden tests pass. - Add ABAP Unit tests as local test classes in the program.