Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
68 lines
3.0 KiB
Markdown
68 lines
3.0 KiB
Markdown
# 1. Goal
|
|
A car park operator calculates the parking fee of a car. The calculation uses
|
|
the entry time and the exit time of the car. A payment terminal calls the
|
|
calculation before it charges the driver. The terminal needs the fee and a
|
|
reason code for each parking event.
|
|
|
|
# 2. Open questions
|
|
None.
|
|
|
|
# 3. Context
|
|
- The interface {{P}}IF_PARK_FEE exists in package $TMP. It is active.
|
|
- The interface contains the type TY_AMOUNT (a packed number, length 8, 2
|
|
decimals), the type TY_REASON (a character field, length 10), the structure
|
|
TY_RESULT with the components REASON (TY_REASON) and FEE (TY_AMOUNT), and the
|
|
constant structure C_REASON with the components OK, BAD_TIME and TOO_LONG.
|
|
- The interface contains one method:
|
|
CALCULATE
|
|
IMPORTING iv_entry_date TYPE d
|
|
iv_entry_time TYPE t
|
|
iv_exit_date TYPE d
|
|
iv_exit_time TYPE t
|
|
iv_lost_ticket TYPE abap_bool
|
|
iv_discount TYPE abap_bool
|
|
RETURNING VALUE(rs_result) TYPE ty_result.
|
|
|
|
# 4. Contract
|
|
- Create the class {{P}}PARK_FEE_CALCULATOR in package $TMP.
|
|
- The class is public and final. It has a public constructor without
|
|
parameters.
|
|
- The class implements the interface {{P}}IF_PARK_FEE.
|
|
- Do not add other public methods.
|
|
|
|
# 5. Business rules
|
|
The method CALCULATE applies the rules in this sequence. It returns the reason
|
|
and the fee of the first rule that applies.
|
|
1. The duration is the number of whole minutes between the entry and the exit.
|
|
Ignore the seconds of the two time fields. Example: the entry 10:00:30 and
|
|
the exit 10:01:20 give the duration 1 minute. The entry 10:00:00 and the
|
|
exit 10:30:00 give the duration 30 minutes.
|
|
2. If the exit is before the entry, return the reason BAD_TIME and the fee
|
|
0.00.
|
|
3. If the duration is more than 43200 minutes, return the reason TOO_LONG and
|
|
the fee 0.00.
|
|
4. If the ticket is lost (iv_lost_ticket = abap_true), the fee is 45.00 and the
|
|
reason is OK. Rules 5 to 9 do not apply.
|
|
5. If the duration is 15 minutes or less, the fee is 0.00 and the reason is OK.
|
|
6. If the entry date is a Sunday, the fee is 0.00 and the reason is OK.
|
|
7. Else the fee is the number of started hours multiplied by 2.50. A started
|
|
hour is a full hour or a part of an hour. Example: 61 minutes are 2 started
|
|
hours and give the fee 5.00. 30 minutes are 1 started hour and give the fee
|
|
2.50.
|
|
8. If the driver uses the discount card (iv_discount = abap_true), reduce the
|
|
fee by 25 percent. Round the result to 2 decimals, half up. Example: the fee
|
|
5.00 becomes 3.75. The fee 2.50 becomes 1.88.
|
|
9. The fee never exceeds 60.00. If the fee is higher, it is 60.00.
|
|
10. The reason is OK.
|
|
|
|
# 6. Constraints
|
|
- Release target: 8.16.
|
|
- Coding standards: Clean ABAP. Keep every method below 40 statements. Do not
|
|
use global variables. Do not write comments that restate the code.
|
|
- Out of scope: do not change the interface {{P}}IF_PARK_FEE.
|
|
|
|
# 7. Acceptance
|
|
- The class is active and has no syntax error.
|
|
- The hidden tests pass.
|
|
- Write your own ABAP Unit tests for the class.
|