Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
79
tasks_gen/train/G1036/spec.md
Normal file
79
tasks_gen/train/G1036/spec.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 1. Goal
|
||||
A riding stable sells riding lessons. A booking program calls the class
|
||||
{{P}}RIDE_BOOKING for each booking request. The class checks the request and
|
||||
returns the price that one rider pays. The class stops the booking with a
|
||||
class-based exception if the request is not correct.
|
||||
|
||||
# 2. Open questions
|
||||
None.
|
||||
|
||||
# 3. Context
|
||||
- The interface {{P}}IF_RIDE_BOOKING is in package $TMP. It is active.
|
||||
- The interface has these types:
|
||||
TY_DISCIPLINE (character 4), TY_LEVEL (character 1), TY_REASON
|
||||
(character 10), TY_AMOUNT (packed number, length 8, 2 decimal places).
|
||||
- The interface has these constants:
|
||||
C_DISCIPLINE: DRESSAGE 'DRES', JUMPING 'SHOW', WESTERN 'WEST',
|
||||
VAULTING 'VOLT'.
|
||||
C_LEVEL: BASIC 'B', LIGHT 'L', MEDIUM 'M', ADVANCED 'S'.
|
||||
C_REASON: NAME 'NAME', DISCIPLINE 'DISCIPLINE', LEVEL 'LEVEL',
|
||||
MINUTES 'MINUTES', RIDERS 'RIDERS', SHOW_LEVEL 'SHOW_LEVEL',
|
||||
VOLT_GROUP 'VOLT_GROUP'.
|
||||
- The interface has one method:
|
||||
BOOK IMPORTING iv_rider_name TYPE string
|
||||
iv_discipline TYPE ty_discipline
|
||||
iv_level TYPE ty_level
|
||||
iv_minutes TYPE i
|
||||
iv_riders TYPE i
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount
|
||||
RAISING {{P}}CX_RIDE_INPUT
|
||||
{{P}}CX_RIDE_LIMIT.
|
||||
- The exception classes {{P}}CX_RIDE_BOOKING, {{P}}CX_RIDE_INPUT and
|
||||
{{P}}CX_RIDE_LIMIT are in package $TMP. They are active.
|
||||
- {{P}}CX_RIDE_BOOKING inherits from CX_STATIC_CHECK. It has the type
|
||||
TY_REASON (character 10), the read-only attribute REASON of type TY_REASON
|
||||
and the constructor with the importing parameter IV_REASON of type TY_REASON.
|
||||
- {{P}}CX_RIDE_INPUT and {{P}}CX_RIDE_LIMIT inherit from
|
||||
{{P}}CX_RIDE_BOOKING. They add nothing.
|
||||
|
||||
# 4. Contract
|
||||
- Create the class {{P}}RIDE_BOOKING in package $TMP.
|
||||
- The class is public, final, and has a public constructor without parameters.
|
||||
- The class implements {{P}}IF_RIDE_BOOKING.
|
||||
- Do not add other public methods.
|
||||
|
||||
# 5. Business rules
|
||||
Apply the rules in this sequence. Raise the exception of the first rule that
|
||||
fails.
|
||||
1. If the rider name is empty, raise {{P}}CX_RIDE_INPUT with the reason NAME.
|
||||
2. The discipline must be DRES, SHOW, WEST or VOLT. Else raise
|
||||
{{P}}CX_RIDE_INPUT with the reason DISCIPLINE.
|
||||
3. The level must be B, L, M or S. Else raise {{P}}CX_RIDE_INPUT with the
|
||||
reason LEVEL.
|
||||
4. The number of minutes must be 30, 60, 90 or 120. Else raise
|
||||
{{P}}CX_RIDE_INPUT with the reason MINUTES.
|
||||
5. The number of riders must be between 1 and 6. Else raise
|
||||
{{P}}CX_RIDE_INPUT with the reason RIDERS.
|
||||
6. Show jumping (SHOW) is only for the levels M and S. Else raise
|
||||
{{P}}CX_RIDE_LIMIT with the reason SHOW_LEVEL.
|
||||
7. Vaulting (VOLT) is only for a group lesson with 3 or more riders. Else
|
||||
raise {{P}}CX_RIDE_LIMIT with the reason VOLT_GROUP.
|
||||
8. Calculate the price that one rider pays:
|
||||
a. The base rate for 30 minutes: DRES 20, SHOW 25, WEST 18, VOLT 15.
|
||||
b. The level surcharge for 30 minutes: B 0, L 2, M 4, S 6.
|
||||
c. The gross price = (base rate + level surcharge) * (minutes / 30).
|
||||
d. The group discount: 1 or 2 riders 0 percent, 3 or 4 riders 20 percent,
|
||||
5 or 6 riders 40 percent.
|
||||
e. The price = gross price * (100 - group discount) / 100.
|
||||
|
||||
# 6. Constraints
|
||||
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
|
||||
- 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_RIDE_BOOKING, {{P}}CX_RIDE_BOOKING,
|
||||
{{P}}CX_RIDE_INPUT and {{P}}CX_RIDE_LIMIT.
|
||||
|
||||
# 7. Acceptance
|
||||
- The class is active and has no syntax error.
|
||||
- The hidden tests pass.
|
||||
- Write your own ABAP Unit tests for the class.
|
||||
Reference in New Issue
Block a user