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:
Kral
2026-10-03 08:44:35 +02:00
parent fb576b0954
commit 03ab36149e
388 changed files with 28620 additions and 339 deletions

View File

@@ -0,0 +1,68 @@
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_media TYPE c LENGTH 8.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
days_overdue TYPE i,
chargeable_days TYPE i,
fine TYPE ty_amount,
END OF ty_result.
METHODS calculate
IMPORTING iv_due_date TYPE d
iv_return_date TYPE d
iv_media TYPE ty_media
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_media_rule,
media TYPE ty_media,
rate TYPE ty_amount,
grace_days TYPE i,
END OF ty_media_rule,
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
CONSTANTS:
c_max_fine TYPE ty_amount VALUE '25.00',
c_reminder_fee TYPE ty_amount VALUE '5.00',
c_reminder_day TYPE i VALUE 30.
METHODS media_rule
IMPORTING iv_media TYPE ty_media
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
ENDCLASS.
CLASS {{p}}overdue_fine IMPLEMENTATION.
METHOD calculate.
rs_result-days_overdue = iv_return_date - iv_due_date.
IF rs_result-days_overdue > 0.
CLEAR rs_result.
RETURN.
ENDIF.
DATA(ls_rule) = media_rule( iv_media ).
IF ls_rule IS INITIAL.
RETURN.
ENDIF.
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue - ls_rule-grace_days
val2 = 0 ).
rs_result-fine = rs_result-chargeable_days * ls_rule-rate.
IF rs_result-days_overdue > c_reminder_day.
rs_result-fine = rs_result-fine + c_reminder_fee.
ENDIF.
rs_result-fine = nmin( val1 = rs_result-fine
val2 = c_max_fine ).
ENDMETHOD.
METHOD media_rule.
DATA(lt_rules) = VALUE tt_media_rule(
( media = 'BOOK' rate = '0.30' grace_days = 7 )
( media = 'DVD' rate = '1.50' grace_days = 2 )
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,68 @@
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_media TYPE c LENGTH 8.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
days_overdue TYPE i,
chargeable_days TYPE i,
fine TYPE ty_amount,
END OF ty_result.
METHODS calculate
IMPORTING iv_due_date TYPE d
iv_return_date TYPE d
iv_media TYPE ty_media
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_media_rule,
media TYPE ty_media,
rate TYPE ty_amount,
grace_days TYPE i,
END OF ty_media_rule,
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
CONSTANTS:
c_max_fine TYPE ty_amount VALUE '25.00',
c_reminder_fee TYPE ty_amount VALUE '5.00',
c_reminder_day TYPE i VALUE 30.
METHODS media_rule
IMPORTING iv_media TYPE ty_media
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
ENDCLASS.
CLASS {{p}}overdue_fine IMPLEMENTATION.
METHOD calculate.
rs_result-days_overdue = iv_return_date - iv_due_date.
IF rs_result-days_overdue <= 0.
CLEAR rs_result.
RETURN.
ENDIF.
DATA(ls_rule) = media_rule( iv_media ).
IF ls_rule IS INITIAL.
RETURN.
ENDIF.
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue + ls_rule-grace_days
val2 = 0 ).
rs_result-fine = rs_result-chargeable_days * ls_rule-rate.
IF rs_result-days_overdue > c_reminder_day.
rs_result-fine = rs_result-fine + c_reminder_fee.
ENDIF.
rs_result-fine = nmin( val1 = rs_result-fine
val2 = c_max_fine ).
ENDMETHOD.
METHOD media_rule.
DATA(lt_rules) = VALUE tt_media_rule(
( media = 'BOOK' rate = '0.30' grace_days = 7 )
( media = 'DVD' rate = '1.50' grace_days = 2 )
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,68 @@
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_media TYPE c LENGTH 8.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
days_overdue TYPE i,
chargeable_days TYPE i,
fine TYPE ty_amount,
END OF ty_result.
METHODS calculate
IMPORTING iv_due_date TYPE d
iv_return_date TYPE d
iv_media TYPE ty_media
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_media_rule,
media TYPE ty_media,
rate TYPE ty_amount,
grace_days TYPE i,
END OF ty_media_rule,
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
CONSTANTS:
c_max_fine TYPE ty_amount VALUE '25.00',
c_reminder_fee TYPE ty_amount VALUE '5.00',
c_reminder_day TYPE i VALUE 30.
METHODS media_rule
IMPORTING iv_media TYPE ty_media
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
ENDCLASS.
CLASS {{p}}overdue_fine IMPLEMENTATION.
METHOD calculate.
rs_result-days_overdue = iv_return_date - iv_due_date.
IF rs_result-days_overdue <= 0.
CLEAR rs_result.
RETURN.
ENDIF.
DATA(ls_rule) = media_rule( iv_media ).
IF ls_rule IS INITIAL.
RETURN.
ENDIF.
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue - ls_rule-grace_days
val2 = 0 ).
rs_result-fine = rs_result-chargeable_days / ls_rule-rate.
IF rs_result-days_overdue > c_reminder_day.
rs_result-fine = rs_result-fine + c_reminder_fee.
ENDIF.
rs_result-fine = nmin( val1 = rs_result-fine
val2 = c_max_fine ).
ENDMETHOD.
METHOD media_rule.
DATA(lt_rules) = VALUE tt_media_rule(
( media = 'BOOK' rate = '0.30' grace_days = 7 )
( media = 'DVD' rate = '1.50' grace_days = 2 )
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,68 @@
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_media TYPE c LENGTH 8.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
days_overdue TYPE i,
chargeable_days TYPE i,
fine TYPE ty_amount,
END OF ty_result.
METHODS calculate
IMPORTING iv_due_date TYPE d
iv_return_date TYPE d
iv_media TYPE ty_media
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_media_rule,
media TYPE ty_media,
rate TYPE ty_amount,
grace_days TYPE i,
END OF ty_media_rule,
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
CONSTANTS:
c_max_fine TYPE ty_amount VALUE '25.00',
c_reminder_fee TYPE ty_amount VALUE '5.00',
c_reminder_day TYPE i VALUE 30.
METHODS media_rule
IMPORTING iv_media TYPE ty_media
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
ENDCLASS.
CLASS {{p}}overdue_fine IMPLEMENTATION.
METHOD calculate.
rs_result-days_overdue = iv_return_date - iv_due_date.
IF rs_result-days_overdue <= 0.
CLEAR rs_result.
RETURN.
ENDIF.
DATA(ls_rule) = media_rule( iv_media ).
IF ls_rule IS INITIAL.
RETURN.
ENDIF.
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue - ls_rule-grace_days
val2 = 0 ).
rs_result-fine = rs_result-chargeable_days * ls_rule-rate.
IF rs_result-days_overdue > c_reminder_day.
rs_result-fine = rs_result-fine - c_reminder_fee.
ENDIF.
rs_result-fine = nmin( val1 = rs_result-fine
val2 = c_max_fine ).
ENDMETHOD.
METHOD media_rule.
DATA(lt_rules) = VALUE tt_media_rule(
( media = 'BOOK' rate = '0.30' grace_days = 7 )
( media = 'DVD' rate = '1.50' grace_days = 2 )
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,68 @@
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_media TYPE c LENGTH 8.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
days_overdue TYPE i,
chargeable_days TYPE i,
fine TYPE ty_amount,
END OF ty_result.
METHODS calculate
IMPORTING iv_due_date TYPE d
iv_return_date TYPE d
iv_media TYPE ty_media
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_media_rule,
media TYPE ty_media,
rate TYPE ty_amount,
grace_days TYPE i,
END OF ty_media_rule,
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
CONSTANTS:
c_max_fine TYPE ty_amount VALUE '25.00',
c_reminder_fee TYPE ty_amount VALUE '5.00',
c_reminder_day TYPE i VALUE 30.
METHODS media_rule
IMPORTING iv_media TYPE ty_media
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
ENDCLASS.
CLASS {{p}}overdue_fine IMPLEMENTATION.
METHOD calculate.
rs_result-days_overdue = iv_return_date - iv_due_date.
IF rs_result-days_overdue <= 0.
CLEAR rs_result.
RETURN.
ENDIF.
DATA(ls_rule) = media_rule( iv_media ).
IF ls_rule IS INITIAL.
RETURN.
ENDIF.
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue - ls_rule-grace_days
val2 = 0 ).
rs_result-fine = rs_result-chargeable_days * ls_rule-rate.
IF rs_result-days_overdue > c_reminder_day.
rs_result-fine = rs_result-fine + c_reminder_fee.
ENDIF.
rs_result-fine = nmin( val1 = rs_result-fine
val2 = c_max_fine ).
ENDMETHOD.
METHOD media_rule.
DATA(lt_rules) = VALUE tt_media_rule(
( media = 'BOOK' rate = '0.30' grace_days = 8 )
( media = 'DVD' rate = '1.50' grace_days = 2 )
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
ENDMETHOD.
ENDCLASS.