# 1. Goal Calculate the overdue fine of a returned library item. The lending desk calls the calculation before it prints the receipt. The result gives the days overdue, the chargeable days, and the fine. # 2. Open questions None. # 3. Context - Package $TMP contains no object for this task. - The class is new. No other object is necessary. # 4. Contract - Create the class {{P}}OVERDUE_FINE in package $TMP. - The class is public and final. You can create it with NEW {{P}}OVERDUE_FINE( ) without parameters. - The class has these public types: - TY_MEDIA: character field, length 8. - TY_AMOUNT: packed number, length 8, 2 decimal places. - TY_RESULT: structure with the components DAYS_OVERDUE (type i), CHARGEABLE_DAYS (type i), and FINE (type TY_AMOUNT). - The class has one public method: CALCULATE IMPORTING iv_due_date TYPE d iv_return_date TYPE d iv_media TYPE ty_media RETURNING VALUE(rs_result) TYPE ty_result. - Do not add other public methods or public components. # 5. Business rules Apply the rules in this sequence. 1. If iv_return_date is earlier than or equal to iv_due_date, return DAYS_OVERDUE = 0, CHARGEABLE_DAYS = 0, and FINE = 0.00. Stop. 2. DAYS_OVERDUE is the number of calendar days from iv_due_date to iv_return_date. 3. The media code gives the daily rate and the grace days: - BOOK: daily rate 0.30, grace 7 days - DVD: daily rate 1.50, grace 2 days - GAME: daily rate 2.50, grace 0 days Compare the media code exactly. If the media code is not in this list, return CHARGEABLE_DAYS = 0 and FINE = 0.00. Keep DAYS_OVERDUE from rule 2. Stop. 4. CHARGEABLE_DAYS is DAYS_OVERDUE minus the grace days. If this value is less than 0, CHARGEABLE_DAYS is 0. 5. FINE is CHARGEABLE_DAYS multiplied by the daily rate. 6. If DAYS_OVERDUE is greater than 30, add a reminder fee of 5.00 to FINE. 7. If FINE is greater than 25.00, FINE is 25.00. # 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: no other object. # 7. Acceptance - The class is active and has no syntax error. - The hidden tests pass. - Write your own ABAP Unit tests for the class.