Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
96
tasks_gen/eval/G0104/reference/insurance_premium.clas.abap
Normal file
96
tasks_gen/eval/G0104/reference/insurance_premium.clas.abap
Normal file
@@ -0,0 +1,96 @@
|
||||
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
|
||||
OR 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.
|
||||
Reference in New Issue
Block a user