CLASS {{p}}overdraft_calc DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_overdraft. PRIVATE SECTION. CONSTANTS: c_free_days TYPE i VALUE 3, c_percent_divisor TYPE i VALUE 100, c_days_per_year TYPE i VALUE 360, c_business_discount TYPE p LENGTH 3 DECIMALS 2 VALUE '2.00', c_min_rate TYPE p LENGTH 3 DECIMALS 2 VALUE '5.00'. TYPES: ty_rate TYPE p LENGTH 5 DECIMALS 2, ty_interest TYPE p LENGTH 15 DECIMALS 6. METHODS chargeable_days IMPORTING iv_days TYPE i RETURNING VALUE(rv_days) TYPE i. METHODS base_rate IMPORTING iv_amount TYPE {{p}}if_overdraft=>ty_amount RETURNING VALUE(rv_rate) TYPE ty_rate. METHODS interest_rate IMPORTING iv_amount TYPE {{p}}if_overdraft=>ty_amount iv_segment TYPE {{p}}if_overdraft=>ty_segment RETURNING VALUE(rv_rate) TYPE ty_rate. ENDCLASS. CLASS {{p}}overdraft_calc IMPLEMENTATION. METHOD {{p}}if_overdraft~calculate. DATA: lv_days TYPE i, lv_rate TYPE ty_rate, lv_annual TYPE ty_interest. IF iv_amount <= 0 OR iv_days <= 0. rv_interest = 0. RETURN. ENDIF. lv_days = chargeable_days( iv_days ). lv_rate = interest_rate( iv_amount = iv_amount iv_segment = iv_segment ). lv_annual = iv_amount * lv_rate / c_percent_divisor. rv_interest = lv_annual * lv_days / c_days_per_year. IF rv_interest > 0 AND rv_interest < {{p}}if_overdraft=>c_min_interest. rv_interest = {{p}}if_overdraft=>c_min_interest. ENDIF. ENDMETHOD. METHOD chargeable_days. rv_days = iv_days - c_free_days. IF rv_days < 0. rv_days = 0. ENDIF. ENDMETHOD. METHOD base_rate. IF iv_amount <= 1000. rv_rate = '12.00'. ELSEIF iv_amount <= 5000. rv_rate = '10.00'. ELSEIF iv_amount <= 20000. rv_rate = '8.00'. ELSE. rv_rate = '6.50'. ENDIF. ENDMETHOD. METHOD interest_rate. rv_rate = base_rate( iv_amount ). IF iv_segment <> {{p}}if_overdraft=>c_segment_business. rv_rate = rv_rate - c_business_discount. IF rv_rate < c_min_rate. rv_rate = c_min_rate. ENDIF. ENDIF. ENDMETHOD. ENDCLASS.