# 1. Goal A recruitment agency scores job applicants. A recruitment program calls one function module for each applicant. The function module returns a score and a recommendation. The score calculation is pure logic. Put this logic in a new global class. The function module calls this class. Do not put the calculation in the function module. # 2. Open questions None. # 3. Context - Function group {{P}}FG_HR exists in package $TMP. - Function module {{P}}APPL_SAMPLE exists in this group. It shows the parameter style of the group. - Create all new objects in package $TMP. # 4. Contract ## 4.1 Function module {{P}}APPL_SCORE Create the function module {{P}}APPL_SCORE in function group {{P}}FG_HR. Use this interface: ``` FUNCTION {{p}}appl_score IMPORTING iv_years TYPE i iv_degree TYPE string iv_match TYPE i EXPORTING ev_score TYPE i ev_rating TYPE string EXCEPTIONS invalid_years invalid_match invalid_degree. ``` ## 4.2 Class {{P}}APP_SCORER Create the class {{P}}APP_SCORER. The class is public and final. The class has a public constructor without parameters. Public type TY_RESULT has these components: | Component | Type | Meaning | |-----------|-----------|---------------------------| | STATUS | TY_STATUS | Result of the input check | | SCORE | i | Score from 0 to 100 | | RATING | string | Recommendation | TY_STATUS is a character type of length 4. The values of STATUS are 'OK', 'YEAR', 'MATC' and 'DEGR'. Public method EVALUATE: ``` METHODS evaluate IMPORTING iv_years TYPE i iv_degree TYPE string iv_match TYPE i RETURNING VALUE(rs_result) TYPE ty_result. ``` The method does not raise an exception. # 5. Business rules 1. Input check. Use this order: 1. If IV_YEARS is less than 0, STATUS is 'YEAR'. 2. Else if IV_MATCH is less than 0 or greater than 100, STATUS is 'MATC'. 3. Else if IV_DEGREE is not 'PHD', 'MAS', 'BAC' or 'VOC', STATUS is 'DEGR'. 4. Else STATUS is 'OK'. 2. If STATUS is not 'OK', SCORE is 0 and RATING is empty. 3. Experience points: 8 points for each full year of experience. The maximum is 40 points. 4. Education points: 'PHD' gives 30 points, 'MAS' 25 points, 'BAC' 20 points and 'VOC' 10 points. 5. Skill points: IV_MATCH percent of 30 points. Round the result half up to a whole number. 6. SCORE is the sum of the experience points, the education points and the skill points. 7. RATING depends on SCORE: - SCORE 75 or more: 'INVITE' - SCORE 50 to 74: 'REVIEW' - SCORE less than 50: 'REJECT' 8. The function module raises the exception that belongs to STATUS: - 'YEAR' raises INVALID_YEARS - 'MATC' raises INVALID_MATCH - 'DEGR' raises INVALID_DEGREE For STATUS 'OK' the function module raises no exception. It exports SCORE and RATING. # 6. Constraints - Release target: ABAP Platform 2025 (SAP_BASIS 816). - Coding standard: Clean ABAP. Each method has less than 40 statements. - No ATC finding of priority 1 or 2. - Out of scope: do not change {{P}}APPL_SAMPLE. # 7. Acceptance - {{P}}APPL_SCORE and {{P}}APP_SCORER are active and have no syntax error. - The hidden tests pass. - Write ABAP Unit tests for the class in local test classes of the class. - Write ABAP Unit tests for the function module in a global test class.