2.9 KiB
2.9 KiB
1. Goal
A vehicle recovery service charges a call-out fee for a breakdown tow. A dispatch program calls the calculation for each completed tow. The program needs the fee and one status code for each call.
2. Open questions
None.
3. Context
- Package $TMP is available.
- The class is self-contained. No other object is necessary.
4. Contract
- Create the class {{P}}TOWING_FEE in package $TMP.
- The class is public and final. It has a public constructor without parameters.
- The class has these public types:
- TY_STATUS: character field, length 8.
- TY_AMOUNT: integer.
- TY_CLASS: character field, length 1.
- TY_RESULT: structure with the components STATUS (type TY_STATUS) and FEE (type TY_AMOUNT).
- The class has the public constant structure C_STATUS with the components OK, BAD_CLASS, BAD_DISTANCE and BAD_HOUR. The values are 'OK', 'CLASS', 'DISTANCE' and 'HOUR'.
- The class has exactly one public method: CALCULATE IMPORTING iv_vehicle_class TYPE ty_class iv_distance_km TYPE i iv_hour TYPE i iv_is_weekend TYPE abap_bool RETURNING VALUE(rs_result) TYPE ty_result.
- Do not add other public methods.
5. Business rules
The method CALCULATE applies the rules in this sequence.
- Check the input. Return the status of the first check that fails: 1.1 The vehicle class must be 'S', 'M' or 'L'. Else return BAD_CLASS. 1.2 The distance must be from 1 to 500 kilometres. Else return BAD_DISTANCE. 1.3 The hour must be from 0 to 23. Else return BAD_HOUR. If a check fails, the fee is 0.
- The base fee comes from the vehicle class: S = 60 EUR, M = 90 EUR, L = 140 EUR.
- The distance charge: the first 10 kilometres are free. Each kilometre above 10 kilometres costs 2 EUR.
- Add the base fee and the distance charge. The result is the subtotal.
- The night is the hour 22, the hour 23 and the hours 0 to 5. If the call is at night, calculate 25 percent of the subtotal. Round this night surcharge down to a full euro.
- If the call is on a weekend, calculate 15 percent of the subtotal. Round this weekend surcharge down to a full euro. The night surcharge and the weekend surcharge can apply together. Calculate both surcharges from the subtotal.
- Add the subtotal and all surcharges. The result is the total.
- If the total is below 80 EUR, the total is 80 EUR.
- Round the total up to a full 5 EUR. If the total is already a full 5 EUR, the total does not change.
- Return the status OK and the fee.
6. Constraints
- Release target: ABAP Platform 2025 (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 create other objects.
7. Acceptance
- The class is active and has no syntax error.
- The hidden tests pass.
- Write your own ABAP Unit tests for the class.