1.9 KiB
1.9 KiB
1. Goal
An auction house charges a buyer's premium on each lot that it sells. The auction program calls one premium module for each sold lot. The premium module must use the same interface as the sample module {{P}}AUC_SAMPLE, because the auction program calls all premium modules in the same way.
2. Open questions
None.
3. Context
- Function group {{P}}FG_AUCT exists in package $TMP.
- Function module {{P}}AUC_SAMPLE exists in this group. It is the sample premium module. Its interface is the interface that all premium modules must use.
4. Contract
- Create the function module {{P}}AUC_PREMIUM in function group {{P}}FG_AUCT.
- Use exactly the interface of {{P}}AUC_SAMPLE: the same parameter names, kinds, types, and exceptions.
- The exception is INVALID_HAMMER.
5. Business rules
- If the hammer price is less than 0, raise the exception INVALID_HAMMER and stop.
- Set the skip flag to false, except in rule 3.
- Lot type C (charity): set the skip flag to true. Leave the fee unchanged and stop.
- For every other lot type, calculate the band premium from the hammer price:
- the part of the hammer price up to 1,000.00: 20 %
- the part of the hammer price above 1,000.00 up to 10,000.00: 12 %
- the part of the hammer price above 10,000.00: 6 %
- Channel O (online): the premium is 90 % of the band premium. For every other channel the premium is the band premium.
- Round the premium of rule 5 half up to 2 decimals.
- The minimum premium is 5.00. The maximum premium is 5,000.00.
- The fee is the premium of rules 4 to 7.
6. Constraints
- Release target: 7.02. The code must run on a 7.02 system. Do not use syntax that was introduced after release 7.02.
- Coding standards: Clean ABAP.
- Out of scope: do not change {{P}}AUC_SAMPLE.
7. Acceptance
- The function module is active and has no syntax error.
- The hidden tests pass.
- Write ABAP Unit tests for the function module in a global test class.