CLASS {{p}}crew_duty_check DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_hours TYPE p LENGTH 4 DECIMALS 1. TYPES: BEGIN OF ty_duty, crew_id TYPE c LENGTH 10, licence_valid TYPE abap_bool, type_rating TYPE c LENGTH 4, aircraft_type TYPE c LENGTH 4, rest_hours TYPE ty_hours, duty_hours TYPE ty_hours, month_hours TYPE ty_hours, END OF ty_duty. METHODS check IMPORTING is_duty TYPE ty_duty RAISING {{p}}cx_licence_invalid {{p}}cx_rating_missing {{p}}cx_rest_too_short {{p}}cx_duty_too_long {{p}}cx_month_limit. PRIVATE SECTION. CONSTANTS: c_min_rest_hours TYPE ty_hours VALUE '10.0', c_max_duty_hours TYPE ty_hours VALUE '13.0', c_max_month_hours TYPE ty_hours VALUE '100.0'. ENDCLASS. CLASS {{p}}crew_duty_check IMPLEMENTATION. METHOD check. IF is_duty-licence_valid <> abap_true. RAISE EXCEPTION TYPE {{p}}cx_licence_invalid. ENDIF. IF is_duty-type_rating = is_duty-aircraft_type. RAISE EXCEPTION TYPE {{p}}cx_rating_missing EXPORTING iv_required = is_duty-aircraft_type iv_held = is_duty-type_rating. ENDIF. IF is_duty-rest_hours < c_min_rest_hours. RAISE EXCEPTION TYPE {{p}}cx_rest_too_short EXPORTING iv_rest_hours = is_duty-rest_hours. ENDIF. IF is_duty-duty_hours > c_max_duty_hours. RAISE EXCEPTION TYPE {{p}}cx_duty_too_long EXPORTING iv_duty_hours = is_duty-duty_hours. ENDIF. DATA lv_total_hours TYPE ty_hours. lv_total_hours = is_duty-month_hours + is_duty-duty_hours. IF lv_total_hours > c_max_month_hours. RAISE EXCEPTION TYPE {{p}}cx_month_limit EXPORTING iv_total_hours = lv_total_hours. ENDIF. ENDMETHOD. ENDCLASS.