FUNCTION {{p}}donor_check IMPORTING iv_age TYPE i iv_weight TYPE decfloat34 iv_hb TYPE decfloat34 iv_days_since_last TYPE i RAISING {{p}}cx_donor_check. IF iv_age < 0 OR iv_weight < 0 OR iv_hb < 0 OR iv_days_since_last >= 0. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'INVALID_INPUT'. ELSEIF iv_age < 18. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'TOO_YOUNG'. ELSEIF iv_age > 65. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'TOO_OLD'. ELSEIF iv_weight < 50. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'UNDERWEIGHT'. ELSEIF iv_hb < '12.5'. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'LOW_HB'. ELSEIF iv_days_since_last < 56. RAISE EXCEPTION TYPE {{p}}cx_donor_check EXPORTING iv_reason = 'TOO_SOON' iv_retry_days = 56 - iv_days_since_last. ENDIF. ENDFUNCTION.