Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
133
tasks_gen/train/G1064/reference/care_visit_checker.clas.abap
Normal file
133
tasks_gen/train/G1064/reference/care_visit_checker.clas.abap
Normal file
@@ -0,0 +1,133 @@
|
||||
CLASS {{p}}care_visit_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_visit,
|
||||
visit_id TYPE string,
|
||||
client_id TYPE string,
|
||||
carer_id TYPE string,
|
||||
start_hour TYPE i,
|
||||
end_hour TYPE i,
|
||||
END OF ty_visit,
|
||||
tt_visit TYPE STANDARD TABLE OF ty_visit WITH EMPTY KEY.
|
||||
|
||||
METHODS check_visit
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
it_plan TYPE tt_visit
|
||||
RAISING {{p}}cx_care_visit.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_day_start TYPE i VALUE 7,
|
||||
c_day_end TYPE i VALUE 20,
|
||||
c_max_hours TYPE i VALUE 4.
|
||||
|
||||
METHODS validate_fields
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
RAISING {{p}}cx_care_visit.
|
||||
|
||||
METHODS validate_times
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
RAISING {{p}}cx_care_visit.
|
||||
|
||||
METHODS has_carer_overlap
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
it_plan TYPE tt_visit
|
||||
RETURNING VALUE(rv_overlap) TYPE abap_bool.
|
||||
|
||||
METHODS has_client_overlap
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
it_plan TYPE tt_visit
|
||||
RETURNING VALUE(rv_overlap) TYPE abap_bool.
|
||||
|
||||
METHODS periods_overlap
|
||||
IMPORTING is_visit TYPE ty_visit
|
||||
is_other TYPE ty_visit
|
||||
RETURNING VALUE(rv_overlap) TYPE abap_bool.
|
||||
|
||||
METHODS raise_reason
|
||||
IMPORTING iv_reason TYPE {{p}}if_care_reason=>ty_reason
|
||||
iv_visit_id TYPE string
|
||||
RAISING {{p}}cx_care_visit.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}care_visit_checker IMPLEMENTATION.
|
||||
METHOD check_visit.
|
||||
validate_fields( is_visit ).
|
||||
validate_times( is_visit ).
|
||||
|
||||
IF has_carer_overlap( is_visit = is_visit it_plan = it_plan ).
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-carer_overlap
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
|
||||
IF has_client_overlap( is_visit = is_visit it_plan = it_plan ).
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-client_overlap
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate_fields.
|
||||
IF is_visit-visit_id IS INITIAL.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-no_visit_id
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
|
||||
IF is_visit-client_id IS INITIAL.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-no_client
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
|
||||
IF is_visit-carer_id IS INITIAL.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-no_carer
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate_times.
|
||||
IF is_visit-start_hour < c_day_start OR is_visit-end_hour > c_day_end.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-outside_hours
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
|
||||
IF is_visit-end_hour <= is_visit-start_hour.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-bad_duration
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
|
||||
IF is_visit-end_hour - is_visit-start_hour > c_max_hours.
|
||||
raise_reason( iv_reason = {{p}}if_care_reason=>c_reason-too_long
|
||||
iv_visit_id = is_visit-visit_id ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD has_carer_overlap.
|
||||
LOOP AT it_plan INTO DATA(ls_plan) WHERE carer_id = is_visit-carer_id.
|
||||
IF periods_overlap( is_visit = is_visit is_other = ls_plan ).
|
||||
rv_overlap = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD has_client_overlap.
|
||||
LOOP AT it_plan INTO DATA(ls_plan) WHERE client_id = is_visit-client_id.
|
||||
IF periods_overlap( is_visit = is_visit is_other = ls_plan ).
|
||||
rv_overlap = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD periods_overlap.
|
||||
rv_overlap = xsdbool( is_visit-start_hour < is_other-end_hour
|
||||
AND is_other-start_hour < is_visit-end_hour ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD raise_reason.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_care_visit
|
||||
EXPORTING
|
||||
iv_reason = iv_reason
|
||||
iv_visit_id = iv_visit_id.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,114 @@
|
||||
CLASS ltc_care_visit_checker DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}care_visit_checker.
|
||||
|
||||
METHODS setup.
|
||||
METHODS valid_visit_passes FOR TESTING.
|
||||
METHODS empty_visit_id FOR TESTING.
|
||||
METHODS outside_hours FOR TESTING.
|
||||
METHODS bad_duration FOR TESTING.
|
||||
METHODS too_long FOR TESTING.
|
||||
METHODS carer_overlap FOR TESTING.
|
||||
METHODS client_overlap FOR TESTING.
|
||||
METHODS touching_visits FOR TESTING.
|
||||
|
||||
METHODS expect_reason
|
||||
IMPORTING is_visit TYPE {{p}}care_visit_checker=>ty_visit
|
||||
it_plan TYPE {{p}}care_visit_checker=>tt_visit
|
||||
iv_reason TYPE {{p}}if_care_reason=>ty_reason.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_care_visit_checker IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}care_visit_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_visit_passes.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 11 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ).
|
||||
TRY.
|
||||
mo_cut->check_visit( is_visit = ls_visit it_plan = lt_plan ).
|
||||
CATCH {{p}}cx_care_visit INTO DATA(lx).
|
||||
cl_abap_unit_assert=>fail( msg = |unexpected reason { lx->mv_reason }| ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_visit_id.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = '' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 11 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-no_visit_id ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD outside_hours.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 5 end_hour = 7 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-outside_hours ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_duration.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 10 end_hour = 10 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-bad_duration ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD too_long.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 14 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-too_long ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD carer_overlap.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K2' carer_id = 'C1' start_hour = 9 end_hour = 11 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit(
|
||||
( visit_id = 'P1' client_id = 'K1' carer_id = 'C1' start_hour = 10 end_hour = 12 ) ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-carer_overlap ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD client_overlap.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C2' start_hour = 9 end_hour = 11 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit(
|
||||
( visit_id = 'P1' client_id = 'K1' carer_id = 'C1' start_hour = 10 end_hour = 12 ) ).
|
||||
expect_reason( is_visit = ls_visit
|
||||
it_plan = lt_plan
|
||||
iv_reason = {{p}}if_care_reason=>c_reason-client_overlap ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD touching_visits.
|
||||
DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit(
|
||||
visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 12 end_hour = 14 ).
|
||||
DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit(
|
||||
( visit_id = 'P1' client_id = 'K1' carer_id = 'C1' start_hour = 10 end_hour = 12 ) ).
|
||||
TRY.
|
||||
mo_cut->check_visit( is_visit = ls_visit it_plan = lt_plan ).
|
||||
CATCH {{p}}cx_care_visit INTO DATA(lx).
|
||||
cl_abap_unit_assert=>fail( msg = |unexpected reason { lx->mv_reason }| ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expect_reason.
|
||||
TRY.
|
||||
mo_cut->check_visit( is_visit = is_visit it_plan = it_plan ).
|
||||
cl_abap_unit_assert=>fail( msg = 'exception expected' ).
|
||||
CATCH {{p}}cx_care_visit INTO DATA(lx).
|
||||
cl_abap_unit_assert=>assert_equals( exp = iv_reason act = lx->mv_reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user