# 1. Goal A bookbinding workshop prices binding jobs. The order desk calls one function module for each job. The function module calculates the fee of the job and reports whether the job is a rush job. # 2. Open questions None. # 3. Context - Function group {{P}}FG_BIND exists in package $TMP. - Function module {{P}}BIND_SAMPLE exists in this group. It shows the interface that the order desk uses. # 4. Contract - Create the function module {{P}}BIND_FEE in function group {{P}}FG_BIND. - The interface of {{P}}BIND_FEE: - importing iv_binding TYPE string - importing iv_pages TYPE i - importing iv_member TYPE abap_bool - exporting ev_rush TYPE abap_bool - changing cv_fee TYPE decfloat34 - exceptions invalid_pages # 5. Business rules 1. If the number of pages is less than 1, raise the exception INVALID_PAGES. 2. Set the rush flag to false, except in rule 7. 3. Binding type PB: the fee is 0.05 per page, rounded half up to 2 decimals. 4. Binding type HB: the fee is 0.12 per page, rounded half up to 2 decimals. The minimum fee for hardback binding is 15.00. 5. A member receives a discount of 10 % on the fee. The discount is the last step of the calculation and is applied after the minimum fee of rule 4. 6. The minimum fee of rule 4 is the last step of the calculation and is applied after all discounts. 7. Binding type EX: set the rush flag to true. The fee is 0.20 per page, rounded half up to 2 decimals. 8. Other binding types: the fee is 0. # 6. Constraints - Release target: 8.16. - Coding standards: Clean ABAP. - Out of scope: do not change {{P}}BIND_SAMPLE. # 7. Acceptance - The function module is active and has no syntax error. - Write ABAP Unit tests for the function module in a global test class.