Files

2.2 KiB

1. Goal

An energy supplier bills households for electricity. The billing program calls one function module for each household. The function module calculates the bill of one month.

2. Open questions

None.

3. Context

  • The function group {{P}}FG_BILL exists in package $TMP. The group is empty.
  • The billing program calls the function module once for each household. It passes the consumption of the month, the tariff, and the payment method.
  • The consumption is a quantity in kilowatt hours (kWh).
  • The bill is an amount in euro.

4. Contract

  • Create the function module {{P}}ENERGY_BILL in function group {{P}}FG_BILL.
  • Use this interface:
Parameter Kind Type Meaning
iv_consumption Importing decfloat34 Consumption of the month in kWh
iv_tariff Importing string Tariff code
iv_direct_debit Importing abap_bool abap_true if the customer pays by direct debit
ev_bill Exporting decfloat34 Bill in euro
invalid_consumption Exception See rule 1
invalid_tariff Exception See rule 2

5. Business rules

  1. If the consumption is less than zero, raise the exception INVALID_CONSUMPTION. Do not set the bill.
  2. The valid tariff codes are BASIC, GREEN, and NIGHT. Any other tariff code raises the exception INVALID_TARIFF. Do not set the bill.
  3. Every bill contains a base fee of 12.00 euro.
  4. The working price for one kWh is:
    • BASIC: 0.32 euro
    • GREEN: 0.38 euro
    • NIGHT: 0.24 euro
  5. For a consumption above 300 kWh, the working price of the part above 300 kWh is 80 % of the working price of the tariff.
  6. If the customer pays by direct debit, the bill is 2 % lower.
  7. Round the bill half up to 2 decimals.

6. Constraints

  • Release target: ABAP Platform 2025 (SAP_BASIS 816).
  • Package: $TMP. Do not use transports.
  • Coding standard: Clean ABAP. Keep every method below 40 statements.
  • Out of scope: database access, CDS views, reports, ALV, dynpro, and changes to other objects.

7. Acceptance

  • The function module {{P}}ENERGY_BILL is active and has no syntax error.
  • The hidden tests pass.
  • Write ABAP Unit tests for the function module in a global test class.