Files
abap-llm/tasks_gen/eval/G0104/faulty/m0_insurance_premium.clas.abap

97 lines
2.5 KiB
ABAP

CLASS {{p}}insurance_premium DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_region TYPE c LENGTH 2,
ty_premium TYPE p LENGTH 8 DECIMALS 2.
METHODS calculate_premium
IMPORTING iv_age TYPE i
iv_power_kw TYPE i
iv_region TYPE ty_region
iv_claim_free_years TYPE i
RETURNING VALUE(rv_premium) TYPE ty_premium.
PRIVATE SECTION.
METHODS get_base_premium
IMPORTING iv_region TYPE ty_region
RETURNING VALUE(rv_base) TYPE ty_premium.
METHODS get_age_factor
IMPORTING iv_age TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
METHODS get_power_factor
IMPORTING iv_power_kw TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
METHODS get_discount_factor
IMPORTING iv_claim_free_years TYPE i
RETURNING VALUE(rv_factor) TYPE decfloat34.
ENDCLASS.
CLASS {{p}}insurance_premium IMPLEMENTATION.
METHOD calculate_premium.
IF iv_age < 18 OR iv_age > 99
AND iv_power_kw <= 0
OR iv_claim_free_years < 0.
rv_premium = 0.
RETURN.
ENDIF.
DATA(lv_base) = get_base_premium( iv_region ).
IF lv_base = 0.
rv_premium = 0.
RETURN.
ENDIF.
DATA(lv_premium) = CONV decfloat34( lv_base )
* get_age_factor( iv_age )
* get_power_factor( iv_power_kw )
* get_discount_factor( iv_claim_free_years ).
rv_premium = lv_premium.
IF rv_premium < 100.
rv_premium = 100.
ENDIF.
ENDMETHOD.
METHOD get_base_premium.
CASE iv_region.
WHEN 'A1'.
rv_base = 150.
WHEN 'B2'.
rv_base = 200.
WHEN 'C3'.
rv_base = 250.
WHEN 'D4'.
rv_base = 300.
WHEN 'E5'.
rv_base = 350.
WHEN OTHERS.
rv_base = 0.
ENDCASE.
ENDMETHOD.
METHOD get_age_factor.
IF iv_age < 25.
rv_factor = '1.5'.
ELSEIF iv_age > 65.
rv_factor = '1.2'.
ELSE.
rv_factor = '1.0'.
ENDIF.
ENDMETHOD.
METHOD get_power_factor.
IF iv_power_kw <= 50.
rv_factor = '0.9'.
ELSEIF iv_power_kw <= 100.
rv_factor = '1.0'.
ELSEIF iv_power_kw <= 150.
rv_factor = '1.3'.
ELSE.
rv_factor = '1.6'.
ENDIF.
ENDMETHOD.
METHOD get_discount_factor.
DATA(lv_discount) = iv_claim_free_years * 5.
IF lv_discount > 30.
lv_discount = 30.
ENDIF.
rv_factor = CONV decfloat34( 100 - lv_discount ) / 100.
ENDMETHOD.
ENDCLASS.