# 1. Goal A pet grooming salon bills its customers for the grooming of their pets. The salon uses the report {{P}}GROOM_BILL_OLD to see the charge of each grooming order of one day. # 2. Open questions None. # 3. Context - The legacy report {{P}}GROOM_BILL_OLD exists in package $TMP. It is active. It reads the table {{P}}GROOM and shows the result with CL_SALV_TABLE. - The table {{P}}GROOM contains data. Fields: GROOM_ID (INT4, key), PET (CHAR 10), COAT (CHAR 8), WEIGHT_KG (DEC 5,1), SERVICE (CHAR 6), VISIT_DATE (DATS). - The legacy report has a selection screen with the parameter P_DATE and the select-option S_PET. # 4. Contract - Refactor the report {{P}}GROOM_BILL_OLD in package $TMP. The name stays the same. - The selection screen stays the same: - Parameter P_DATE, type DATS, mandatory: the visit date to include. - Select-option S_PET for the pet kind. - The ALV output stays the same. The output table has these columns with these names: GROOM_ID, PET, SERVICE, CHARGE. # 5. Business rules The behavior of the report stays the same. The rules are in the legacy code of {{P}}GROOM_BILL_OLD. Read the legacy code and keep every rule. # 6. Constraints - Release target: 7.58. - Coding standards: Clean ABAP. Read the data with one database access. Keep every method below 40 statements. Do not use a database access in a loop. - Out of scope: do not change {{P}}GROOM and {{P}}GROOM_SEED. # 7. Acceptance - The report is active and has no syntax error. - The behavior of the report is unchanged. - The hidden tests pass. - Write ABAP Unit tests as local test classes in the report.