Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
93
tasks_gen/train/G1043/faulty/m0_med_copay.clas.abap
Normal file
93
tasks_gen/train/G1043/faulty/m0_med_copay.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}med_copay DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_med_copay.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_percent_standard TYPE i VALUE 30,
|
||||
c_percent_chronic TYPE i VALUE 10,
|
||||
c_min_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '50.00',
|
||||
c_min_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '10.00'.
|
||||
|
||||
METHODS copay_for_tier
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS percentage
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_percent TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS apply_limits
|
||||
IMPORTING iv_amount TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_min TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_max TYPE {{p}}if_med_copay=>ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS is_known_tier
|
||||
IMPORTING iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_known) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}med_copay IMPLEMENTATION.
|
||||
METHOD {{p}}if_med_copay~calculate.
|
||||
IF iv_price <= 0.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-price ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_quantity >= 1.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-quantity ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_known_tier( iv_tier ) = abap_false.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-tier ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_total TYPE {{p}}if_med_copay=>ty_amount.
|
||||
lv_total = iv_price * iv_quantity.
|
||||
rs_result = VALUE #( copay = copay_for_tier( iv_total = lv_total iv_tier = iv_tier )
|
||||
reason = {{p}}if_med_copay=>c_reason-ok ).
|
||||
IF rs_result-copay > lv_total.
|
||||
rs_result-copay = lv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD copay_for_tier.
|
||||
CASE iv_tier.
|
||||
WHEN {{p}}if_med_copay=>c_tier-exempt.
|
||||
rv_amount = 0.
|
||||
WHEN {{p}}if_med_copay=>c_tier-chronic.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_chronic )
|
||||
iv_min = c_min_chronic
|
||||
iv_max = c_max_chronic ).
|
||||
WHEN {{p}}if_med_copay=>c_tier-standard.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_standard )
|
||||
iv_min = c_min_standard
|
||||
iv_max = c_max_standard ).
|
||||
WHEN OTHERS.
|
||||
rv_amount = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD percentage.
|
||||
rv_amount = round( val = iv_total * iv_percent / 100 dec = 2 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_limits.
|
||||
rv_amount = iv_amount.
|
||||
IF rv_amount < iv_min.
|
||||
rv_amount = iv_min.
|
||||
ELSEIF rv_amount > iv_max.
|
||||
rv_amount = iv_max.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_known_tier.
|
||||
rv_known = xsdbool( iv_tier = {{p}}if_med_copay=>c_tier-standard
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-chronic
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-exempt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
93
tasks_gen/train/G1043/faulty/m1_med_copay.clas.abap
Normal file
93
tasks_gen/train/G1043/faulty/m1_med_copay.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}med_copay DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_med_copay.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_percent_standard TYPE i VALUE 30,
|
||||
c_percent_chronic TYPE i VALUE 10,
|
||||
c_min_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '50.00',
|
||||
c_min_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '10.00'.
|
||||
|
||||
METHODS copay_for_tier
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS percentage
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_percent TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS apply_limits
|
||||
IMPORTING iv_amount TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_min TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_max TYPE {{p}}if_med_copay=>ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS is_known_tier
|
||||
IMPORTING iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_known) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}med_copay IMPLEMENTATION.
|
||||
METHOD {{p}}if_med_copay~calculate.
|
||||
IF iv_price <= 0.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-price ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_quantity < 1.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-quantity ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_known_tier( iv_tier ) = abap_true.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-tier ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_total TYPE {{p}}if_med_copay=>ty_amount.
|
||||
lv_total = iv_price * iv_quantity.
|
||||
rs_result = VALUE #( copay = copay_for_tier( iv_total = lv_total iv_tier = iv_tier )
|
||||
reason = {{p}}if_med_copay=>c_reason-ok ).
|
||||
IF rs_result-copay > lv_total.
|
||||
rs_result-copay = lv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD copay_for_tier.
|
||||
CASE iv_tier.
|
||||
WHEN {{p}}if_med_copay=>c_tier-exempt.
|
||||
rv_amount = 0.
|
||||
WHEN {{p}}if_med_copay=>c_tier-chronic.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_chronic )
|
||||
iv_min = c_min_chronic
|
||||
iv_max = c_max_chronic ).
|
||||
WHEN {{p}}if_med_copay=>c_tier-standard.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_standard )
|
||||
iv_min = c_min_standard
|
||||
iv_max = c_max_standard ).
|
||||
WHEN OTHERS.
|
||||
rv_amount = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD percentage.
|
||||
rv_amount = round( val = iv_total * iv_percent / 100 dec = 2 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_limits.
|
||||
rv_amount = iv_amount.
|
||||
IF rv_amount < iv_min.
|
||||
rv_amount = iv_min.
|
||||
ELSEIF rv_amount > iv_max.
|
||||
rv_amount = iv_max.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_known_tier.
|
||||
rv_known = xsdbool( iv_tier = {{p}}if_med_copay=>c_tier-standard
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-chronic
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-exempt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
93
tasks_gen/train/G1043/faulty/m2_med_copay.clas.abap
Normal file
93
tasks_gen/train/G1043/faulty/m2_med_copay.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}med_copay DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_med_copay.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_percent_standard TYPE i VALUE 30,
|
||||
c_percent_chronic TYPE i VALUE 10,
|
||||
c_min_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '50.00',
|
||||
c_min_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '10.00'.
|
||||
|
||||
METHODS copay_for_tier
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS percentage
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_percent TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS apply_limits
|
||||
IMPORTING iv_amount TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_min TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_max TYPE {{p}}if_med_copay=>ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS is_known_tier
|
||||
IMPORTING iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_known) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}med_copay IMPLEMENTATION.
|
||||
METHOD {{p}}if_med_copay~calculate.
|
||||
IF iv_price <= 0.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-price ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_quantity < 1.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-quantity ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_known_tier( iv_tier ) = abap_false.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-tier ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_total TYPE {{p}}if_med_copay=>ty_amount.
|
||||
lv_total = iv_price * iv_quantity.
|
||||
rs_result = VALUE #( copay = copay_for_tier( iv_total = lv_total iv_tier = iv_tier )
|
||||
reason = {{p}}if_med_copay=>c_reason-ok ).
|
||||
IF rs_result-copay > lv_total.
|
||||
rs_result-copay = lv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD copay_for_tier.
|
||||
CASE iv_tier.
|
||||
WHEN {{p}}if_med_copay=>c_tier-exempt.
|
||||
rv_amount = 0.
|
||||
WHEN {{p}}if_med_copay=>c_tier-chronic.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_chronic )
|
||||
iv_min = c_min_chronic
|
||||
iv_max = c_max_chronic ).
|
||||
WHEN {{p}}if_med_copay=>c_tier-standard.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_standard )
|
||||
iv_min = c_min_standard
|
||||
iv_max = c_max_standard ).
|
||||
WHEN OTHERS.
|
||||
rv_amount = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD percentage.
|
||||
rv_amount = round( val = iv_total / iv_percent / 100 dec = 2 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_limits.
|
||||
rv_amount = iv_amount.
|
||||
IF rv_amount < iv_min.
|
||||
rv_amount = iv_min.
|
||||
ELSEIF rv_amount > iv_max.
|
||||
rv_amount = iv_max.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_known_tier.
|
||||
rv_known = xsdbool( iv_tier = {{p}}if_med_copay=>c_tier-standard
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-chronic
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-exempt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
93
tasks_gen/train/G1043/faulty/m3_med_copay.clas.abap
Normal file
93
tasks_gen/train/G1043/faulty/m3_med_copay.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}med_copay DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_med_copay.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_percent_standard TYPE i VALUE 30,
|
||||
c_percent_chronic TYPE i VALUE 10,
|
||||
c_min_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '50.00',
|
||||
c_min_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '10.00'.
|
||||
|
||||
METHODS copay_for_tier
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS percentage
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_percent TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS apply_limits
|
||||
IMPORTING iv_amount TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_min TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_max TYPE {{p}}if_med_copay=>ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS is_known_tier
|
||||
IMPORTING iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_known) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}med_copay IMPLEMENTATION.
|
||||
METHOD {{p}}if_med_copay~calculate.
|
||||
IF iv_price <= 0.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-price ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_quantity < 1.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-quantity ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_known_tier( iv_tier ) = abap_false.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-tier ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_total TYPE {{p}}if_med_copay=>ty_amount.
|
||||
lv_total = iv_price * iv_quantity.
|
||||
rs_result = VALUE #( copay = copay_for_tier( iv_total = lv_total iv_tier = iv_tier )
|
||||
reason = {{p}}if_med_copay=>c_reason-ok ).
|
||||
IF rs_result-copay > lv_total.
|
||||
rs_result-copay = lv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD copay_for_tier.
|
||||
CASE iv_tier.
|
||||
WHEN {{p}}if_med_copay=>c_tier-exempt.
|
||||
rv_amount = 0.
|
||||
WHEN {{p}}if_med_copay=>c_tier-chronic.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_chronic )
|
||||
iv_min = c_min_chronic
|
||||
iv_max = c_max_chronic ).
|
||||
WHEN {{p}}if_med_copay=>c_tier-standard.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_standard )
|
||||
iv_min = c_min_standard
|
||||
iv_max = c_max_standard ).
|
||||
WHEN OTHERS.
|
||||
rv_amount = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD percentage.
|
||||
rv_amount = round( val = iv_total * iv_percent / 100 dec = 2 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_limits.
|
||||
rv_amount = iv_amount.
|
||||
IF rv_amount < iv_min.
|
||||
rv_amount = iv_min.
|
||||
ELSEIF rv_amount > iv_max.
|
||||
rv_amount = iv_max.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_known_tier.
|
||||
rv_known = xsdbool( iv_tier = {{p}}if_med_copay=>c_tier-standard
|
||||
AND iv_tier = {{p}}if_med_copay=>c_tier-chronic
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-exempt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
93
tasks_gen/train/G1043/faulty/m4_med_copay.clas.abap
Normal file
93
tasks_gen/train/G1043/faulty/m4_med_copay.clas.abap
Normal file
@@ -0,0 +1,93 @@
|
||||
CLASS {{p}}med_copay DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_med_copay.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_percent_standard TYPE i VALUE 30,
|
||||
c_percent_chronic TYPE i VALUE 10,
|
||||
c_min_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_standard TYPE {{p}}if_med_copay=>ty_amount VALUE '50.00',
|
||||
c_min_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '5.00',
|
||||
c_max_chronic TYPE {{p}}if_med_copay=>ty_amount VALUE '10.00'.
|
||||
|
||||
METHODS copay_for_tier
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS percentage
|
||||
IMPORTING iv_total TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_percent TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS apply_limits
|
||||
IMPORTING iv_amount TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_min TYPE {{p}}if_med_copay=>ty_amount
|
||||
iv_max TYPE {{p}}if_med_copay=>ty_amount
|
||||
RETURNING VALUE(rv_amount) TYPE {{p}}if_med_copay=>ty_amount.
|
||||
METHODS is_known_tier
|
||||
IMPORTING iv_tier TYPE {{p}}if_med_copay=>ty_tier
|
||||
RETURNING VALUE(rv_known) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}med_copay IMPLEMENTATION.
|
||||
METHOD {{p}}if_med_copay~calculate.
|
||||
IF iv_price <= 0.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-price ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF iv_quantity < 1.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-quantity ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
IF is_known_tier( iv_tier ) = abap_false.
|
||||
rs_result = VALUE #( copay = 0 reason = {{p}}if_med_copay=>c_reason-tier ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
DATA lv_total TYPE {{p}}if_med_copay=>ty_amount.
|
||||
lv_total = iv_price * iv_quantity.
|
||||
rs_result = VALUE #( copay = copay_for_tier( iv_total = lv_total iv_tier = iv_tier )
|
||||
reason = {{p}}if_med_copay=>c_reason-ok ).
|
||||
IF rs_result-copay > lv_total.
|
||||
rs_result-copay = lv_total.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD copay_for_tier.
|
||||
CASE iv_tier.
|
||||
WHEN {{p}}if_med_copay=>c_tier-exempt.
|
||||
rv_amount = 0.
|
||||
WHEN {{p}}if_med_copay=>c_tier-chronic.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_chronic )
|
||||
iv_min = c_min_chronic
|
||||
iv_max = c_max_chronic ).
|
||||
WHEN {{p}}if_med_copay=>c_tier-standard.
|
||||
rv_amount = apply_limits(
|
||||
iv_amount = percentage( iv_total = iv_total iv_percent = c_percent_standard )
|
||||
iv_min = c_min_standard
|
||||
iv_max = c_max_standard ).
|
||||
WHEN OTHERS.
|
||||
rv_amount = 0.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD percentage.
|
||||
rv_amount = round( val = iv_total * iv_percent / 100 dec = 2 ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD apply_limits.
|
||||
rv_amount = iv_amount.
|
||||
IF rv_amount < iv_min.
|
||||
rv_amount = iv_min.
|
||||
ELSEIF rv_amount > iv_max.
|
||||
rv_amount = iv_max.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_known_tier.
|
||||
rv_known = xsdbool( iv_tier = {{p}}if_med_copay=>c_tier-standard
|
||||
OR iv_tier = {{p}}if_med_copay=>c_tier-chronic
|
||||
OR iv_tier <> {{p}}if_med_copay=>c_tier-exempt ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user