Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View 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.