2.2 KiB
2.2 KiB
1. Goal
Calculate the toll that a vehicle pays for one journey on a toll road. A billing program calls the calculation for each journey. The program needs the toll in cents and one reason code for each journey.
2. Open questions
None.
3. Context
- The interface {{P}}IF_TOLL_PRICER exists in package $TMP. It is active.
- The interface contains the type TY_JOURNEY for the input, the type TY_RESULT for the output, the constant structure C_CLASS with the vehicle classes, the constant structure C_REASON with the reason codes, and one method: PRICE_JOURNEY IMPORTING is_journey TYPE ty_journey RETURNING VALUE(rs_result) TYPE ty_result.
4. Contract
- Create the class {{P}}TOLL_PRICER in package $TMP.
- The class is public, final and has a public constructor without parameters.
- The class implements {{P}}IF_TOLL_PRICER.
- Do not add other public methods.
5. Business rules
Apply the rules in this sequence. All amounts are in cents. Use integer arithmetic and discard remainders.
- Convert the vehicle class to upper case. The valid classes are M (motorcycle), C (car), V (van) and L (lorry). If the class is not valid, return the reason VEHICLE and the amount 0.
- The distance must be 1 kilometre or more and 130 kilometres or less. If not, return the reason DISTANCE and the amount 0.
- The rate for each kilometre is 5 cents for M, 10 cents for C, 18 cents for V and 30 cents for L. The toll is the distance multiplied by the rate.
- If the toll is below 100 cents, set the toll to 100 cents.
- If the vehicle has a transponder, subtract one tenth of the toll from the toll. Example: a toll of 1000 cents becomes 900 cents.
- If the journey is at night and the vehicle class is L, add one quarter of the toll to the toll. Example: a toll of 3000 cents becomes 3750 cents.
- Return the reason OK and the toll in the component amount_cents.
6. Constraints
- Release target: 8.16 (SAP_BASIS 816).
- Coding standards: Clean ABAP. Method length below 40 statements. No global variables. No comment that restates the code.
- Out of scope: do not change {{P}}IF_TOLL_PRICER.
7. Acceptance
- The class is active and has no syntax error.
- The hidden tests pass.
- Write your own ABAP Unit tests for the class.