SAMPLE FUNCTIONAL SPECIFICATION
This is a sample FS I authored as a methodology exercise, specifying a real enhancement from a system I built on XeerSoft, in the format an SAP project uses. It shows how I write a developer-ready spec — not a claim of a delivered SAP production object.
Functional Specification · RICEFW Enhancement
The artifact that turns a requirement into developer-ready code

Functional Specification

The Functional Specification (FS / FSD) is the document a functional consultant owns: it translates a business requirement into a design an ABAP developer can build against, unambiguously. This is a complete worked FS for the tiered-pricing enhancement whose ABAP you can already read on the SAP-design page — document control, business requirement, field mapping, processing logic, message handling, authorization, test scenarios and sign-off. Every design point carries a requirement ID, and the same IDs reappear in the test table, so the whole chain from requirement to code to test is traceable end to end.

Object ZTIR_PRICE_001 · pricing routine
RICEFW Enhancement (E) · SD pricing
Source system Strategic Pricing & AR · XeerSoft
Status Sample FS · methodology exercise
01 · Requirement Business need §2 below 02 · Functional spec This document you are here 03 · Technical / ABAP The code VOFM routine 601 04 · Test / UAT Executed tests defect log
1

Document control

Object ID
ZTIR_PRICE_001
Object name
Tiered volume price (sibling-aware)
RICEFW type
E · Enhancement
Module
SD pricing → FI-AR
Complexity
Medium
Priority
High
Author (functional)
Chatree Kengpipat
Version
1.0
Status
Approved

Related objects: pricing procedure config V/08 (condition ZTIR), custom scale table ZTIR_SCALE, and the revenue-account determination VKOA that receives the priced value downstream. No standard SAP object is modified.

2

Business requirement

Corporate customers buy across several related accounts (a parent and its branch “siblings”). The business wants the price tier to reflect their combined volume, not each account’s volume in isolation — and it wants to maintain those tiers itself, without a developer, every time the commercial team re-negotiates.

As-is. Standard condition records price each sold-to on its own. A customer splitting the same order across three branches lands in a lower tier on each, so they overpay versus the deal that was agreed — and disputes land in AR as short-payments and credit notes.

To-be. A pricing enhancement pools the customer’s sibling volume, resolves the correct tier from a business-maintained scale table, and returns that price to the standard pricing engine — leaving billing and revenue postings untouched.

Requirements register — click an ID to trace it through the design and tests:

  • R1Price is a tiered unit rate resolved by purchased volume band.
  • R2Volume is pooled across the customer’s sibling accounts, not per sold-to.
  • R3Tier boundaries are maintained by the business in a table, with no code change or transport.
  • R4If no tier is configured for a volume, the order does not price silently wrong — it alerts and falls back to list price.
  • R5No change to downstream billing, revenue determination or FI-AR postings.

Tip: the same R-tags appear on the processing steps (§4) and every test case (§7).

3

Scope & assumptions

In scopeOut of scopeAssumptions & dependencies
VOFM value routine for condition ZTIR; the ZTIR_SCALE table & maintenance view. Changes to the pricing procedure sequence or to any standard condition type. Sibling accounts are linked on the customer master via a partner / hierarchy relationship that the routine can read.
Reading rolled-up sibling quantity; resolving and returning the tier value. Billing (VF01), revenue determination (VKOA), AR postings — unchanged by design (R5). Scale is per sales org; currency & UoM follow the sales document. Table maintenance is authorization-controlled.
4

Functional design

Trigger. The routine is called by the pricing engine during sales-document processing (VA01 / VA02) for every line carrying condition type ZTIR, via VOFM value formula 601 assigned in V/08.

Field mapping — where each value comes from and where it lands:

SourceFieldTargetRule
Header (KOMK)KUNNRsibling rollup keyread the customer’s sibling set R2
Item (KOMP)MGAMEvolume for tieringsummed across siblings R2
Table ZTIR_SCALEQTY_FROM / QTY_TOtier band matchband where rolled-up qty falls R1 R3
Table ZTIR_SCALEKBETRlv_tierresolved unit rate R1
Routine resultlv_tier × MGAMEXKWERTcondition value returned to pricing R5

Processing logic — each step links to the line in the delivered ABAP:

  1. Roll up sibling quantity. Read the customer’s linked sibling accounts and sum their order quantity into a single volume for tiering.
  2. Resolve the tier. Select the scale row from ZTIR_SCALE for the sales org where the rolled-up volume falls between QTY_FROM and QTY_TO.
  3. Compute & return the value. Multiply the resolved unit rate by the line quantity and place the result in XKWERT — the value SAP posts as the condition, which then flows to billing and revenue unchanged.
  4. No-tier fallback. If no scale row matches, do not return zero. Raise message ZTIR 001 E, leave XKWERT untouched so the list-price condition applies, and let the pricing analyst maintain the missing band.
    R4defensive design
Design decision

The tier scale lives in ZTIR_SCALE, not in the ABAP. That is a deliberate call: it satisfies R3 (business maintains tiers with no transport) and keeps the enhancement thin — the code resolves and applies a tier, it never defines one.

5

Messages & error handling

IDTypeMessage textUser action
ZTIR 001ENo price tier maintained for volume &1 in sales org &2.Pricing team maintains the band in ZTIR_SCALE; order falls back to list price meanwhile.
ZTIR 002WSibling roll-up (&1 units) crosses the top tier ceiling.Informational; confirm the deal genuinely reaches the top band.
ZTIR 003STier &1 applied on rolled-up volume of &2 units.None — confirmation shown in the pricing analysis.
6

Authorization & performance

ConcernDesign
Table maintenanceMaintenance view for ZTIR_SCALE is guarded by auth object S_TABU_NAM (auth group ZTIR) — only the pricing team maintains tiers.
Runtime readThe routine only reads; it runs under the sales-order user’s context and adds no new authorization requirement to order entry.
PerformanceOne indexed SELECT SINGLE per line on a small scale table; sibling roll-up buffered per document. Negligible added runtime vs standard pricing.
7

Test scenarios

Each scenario maps back to a requirement, and to the executed sub-unit tests and defect log on the delivered system.

#ScenarioTracesExpected result
T01Single account, volume in mid tierR1Mid-tier unit rate applied; value = rate × qty.
T02Order split across 3 sibling accountsR2Pooled volume lifts all lines to the correct higher tier.
T03Volume exactly on a tier boundaryR1Boundary resolves to the correct single band (no overlap / gap).
T04Tier edited in ZTIR_SCALE, re-priceR3New rate applies immediately; no transport required.
T05Volume with no maintained bandR4ZTIR 001 raised; list price applies, not zero.
T06Bill & post the priced orderR5Billing, VKOA revenue & AR posting identical to standard flow.
8

Sign-off

RoleResponsibilityStatus
Functional consultantAuthors this FS; owns the design & test scenariosSigned
ABAP developerBuilds the VOFM routine & table to this specAccepted
Business process ownerConfirms tiers & sibling logic match the commercial dealApproved
Test leadExecutes T01–T06, logs & retests defectsIn UAT
ABOUT THIS SPECIFICATION

This is a sample Functional Specification authored as a methodology exercise. The enhancement it describes is real — I designed and delivered the equivalent tiered, sibling-aware pricing on XeerSoft Cloud ERP — and the FS is written in the exact format an SAP project uses so it’s developer-ready. The object IDs, T-codes, RICEFW classification and test structure are the genuine SAP mechanism; the document is a proposal artifact, not a delivered SAP production object.

See the delivered track record behind it — 6 capabilities, verified →