offdataai
SAP · data model template

SAP Revenue Accounting (RAR / IFRS 15) data model

Third-normal-form mirror of the SAP RAR FARR_D_* tables as they land from the source ERP. Each table becomes its own entity with a warehouse surrogate key plus the genuine SAP business key(s); performance obligations reference their contract, and allocation/fulfillment/invoice/posting child tables reference their obligation, contract and master tables via foreign keys. The five-step IFRS 15 model is materialized as contract → POB → allocation → fulfillment → posting, with parallel accounting via accounting principle and contract asset/liability balances for disclosures. Customer name is PII-masked.

Normalized replica of SAP Revenue Accounting and Reporting (RAR) source tables for a warehouse staging/replication layer implementing the IFRS 15 / ASC 606 five-step model: revenue contract (FARR_D_CONTRACT) → performance obligation (FARR_D_POB) → price allocation (FARR_D_DEFITEM) → fulfillment (FARR_D_FULFILLMT) and invoice (FARR_D_INVOICE) → recognized/deferred revenue postings (FARR_D_POSTING → ACDOCA), with period-level contract asset/liability balances — keyed by the real SAP business keys and anchored to company code (T001), customer (KNA1), material (MARA), G/L account (SKA1) and accounting principle check/master tables. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFSAPIFRSASC 606SOX
12
tables
95
columns
15
relationships
1
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: PostgreSQL). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

contractsfulfillment_billingrevenue_postingsmaster_data

Design decisions

  • IFRS 15 five-step model materialized as a normalized chain

    SAP RAR operationalizes the IFRS 15 / ASC 606 five steps as distinct tables: revenue contract (FARR_D_CONTRACT) → performance obligation (FARR_D_POB) → price allocation (FARR_D_DEFITEM) → fulfillment (FARR_D_FULFILLMT) → posting (FARR_D_POSTING); replicating that chain 1:1 keeps the staging layer lossless and reconcilable against the source RAR tables.

  • Performance obligation as the unit of revenue recognition

    IFRS 15 recognizes revenue per performance obligation, either point-in-time or over-time; modeling the POB as its own entity with fulfillment_type and fulfillment_event lets fulfillment and postings hang off the obligation rather than the contract, matching how SAP RAR satisfies and recognizes each POB.

  • Parallel accounting via accounting principle per contract

    SAP RAR runs parallel ledgers so the same contract is recognized differently under IFRS vs US-GAAP vs local GAAP; carrying an accounting_principle FK on the revenue contract preserves that determination and keeps recognition figures separable by standard for reporting.

  • Deferred revenue and contract asset/liability balances for disclosures

    IFRS 15 requires disclosure of contract assets, contract liabilities and deferred revenue; a period-level contract_balance snapshot plus posting categories (recognized/deferred/contract-asset/contract-liability) makes the disclosure figures derivable without re-aggregating every posting.

  • RAI-fed replica preserving FARR_D_* keys

    Revenue Accounting Items (RAI) feed the RAR contracts and obligations; keeping each FARR_D_* table as its own entity with the source business keys preserves the lineage from operational documents through to the recognized/deferred postings that flow into ACDOCA.

Tables in the SAP Revenue Accounting (RAR / IFRS 15) model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Tables (7)

revenue_contract

Grain: one row per revenue accounting contract (contract_id)

SAP FARR_D_CONTRACT — revenue accounting contract.

ColumnTypeKeys
revenue_contract_keybigintPK
company_code_keybigint
customer_keybigint
accounting_principle_keybigint
contract_idvarcharBK
source_document_typevarchar
contract_start_datedate
contract_statusvarchar
total_transaction_pricedecimal
currencyvarchar
is_combined_contractboolean

performance_obligation

Grain: one row per performance obligation (pob_id)

SAP FARR_D_POB — performance obligation.

ColumnTypeKeys
performance_obligation_keybigintPK
revenue_contract_keybigint
material_keybigint
pob_idvarcharBK
pob_typevarchar
fulfillment_typevarchar
fulfillment_eventvarchar
standalone_selling_pricedecimal
allocated_transaction_pricedecimal
allocated_amountdecimal
start_datedate
end_datedate
pob_statusvarchar
currencyvarchar

price_allocation

Grain: one row per price allocation line (allocation_id)

SAP FARR_D_DEFITEM — transaction price allocation / deferral item.

ColumnTypeKeys
price_allocation_keybigintPK
performance_obligation_keybigint
revenue_contract_keybigint
allocation_idvarcharBK
allocation_methodvarchar
allocation_amountdecimal
discount_allocateddecimal
currencyvarchar

fulfillment

Grain: one row per fulfillment event (fulfillment_id)

SAP FARR_D_FULFILLMT — performance obligation fulfillment.

ColumnTypeKeys
fulfillment_keybigintPK
performance_obligation_keybigint
fulfillment_idvarcharBK
fulfillment_datedate
fulfilled_quantitydecimal
fulfilled_percentagedecimal
fulfillment_event_typevarchar
recognized_amountdecimal
currencyvarchar

invoice_item

Grain: one row per revenue invoice item (invoice_item_id)

SAP FARR_D_INVOICE — revenue accounting invoice item.

ColumnTypeKeys
invoice_item_keybigintPK
performance_obligation_keybigint
revenue_contract_keybigint
invoice_item_idvarcharBK
billing_documentvarchar
billing_itemvarchar
invoice_datedate
invoiced_amountdecimal
currencyvarchar

revenue_posting

Grain: one row per revenue posting (posting_id)

SAP FARR_D_POSTING — recognized/deferred revenue postings into ACDOCA.

ColumnTypeKeys
revenue_posting_keybigintPK
performance_obligation_keybigint
revenue_contract_keybigint
gl_account_keybigint
company_code_keybigint
posting_idvarcharBK
fiscal_yearvarchar
fiscal_periodvarchar
posting_categoryvarchar
recognized_revenuedecimal
deferred_revenuedecimal
posting_datedate
currencyvarchar

contract_balance

Grain: one row per contract per fiscal period (balance_id)

Period-level revenue contract balance snapshot for IFRS 15 disclosures.

ColumnTypeKeys
contract_balance_keybigintPK
revenue_contract_keybigint
balance_idvarcharBK
fiscal_yearvarchar
fiscal_periodvarchar
contract_assetdecimal
contract_liabilitydecimal
deferred_revenue_balancedecimal
cumulative_recognizeddecimal
currencyvarchar

Lookup tables (5)

company_code

Grain: one row per company code

SAP T001 — company code check table.

ColumnTypeKeys
company_code_keybigintPK
bukrsvarcharBK
butxtvarchar
land1varchar
waersvarchar

customer

Grain: one row per customer master general record

SAP KNA1 — customer master (general), referenced as a lookup here.

ColumnTypeKeys
customer_keybigintPK
kunnrvarcharBK
name1varcharPII
land1varchar

material

Grain: one row per material master general record

SAP MARA/MAKT — material master (general + description), referenced as a lookup here.

ColumnTypeKeys
material_keybigintPK
matnrvarcharBK
maktxvarchar
mtartvarchar

gl_account

Grain: one row per G/L account

SAP SKA1/SKAT — G/L account master, referenced as a lookup here.

ColumnTypeKeys
gl_account_keybigintPK
saknrvarcharBK
txt50varchar
account_typevarchar

accounting_principle

Grain: one row per accounting principle

SAP accounting principle / ledger group — parallel accounting determination.

ColumnTypeKeys
accounting_principle_keybigintPK
accounting_principlevarcharBK
descriptionvarchar
standardvarchar

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • revenue_contract.company_code_key → company_code (many-to-one)
  • revenue_contract.customer_key → customer (many-to-one)
  • revenue_contract.accounting_principle_key → accounting_principle (many-to-one)
  • performance_obligation.revenue_contract_key → revenue_contract (many-to-one)
  • performance_obligation.material_key → material (many-to-one)
  • price_allocation.performance_obligation_key → performance_obligation (many-to-one)
  • price_allocation.revenue_contract_key → revenue_contract (many-to-one)
  • fulfillment.performance_obligation_key → performance_obligation (many-to-one)
  • invoice_item.performance_obligation_key → performance_obligation (many-to-one)
  • invoice_item.revenue_contract_key → revenue_contract (many-to-one)
  • revenue_posting.performance_obligation_key → performance_obligation (many-to-one)
  • revenue_posting.revenue_contract_key → revenue_contract (many-to-one)
  • revenue_posting.gl_account_key → gl_account (many-to-one)
  • revenue_posting.company_code_key → company_code (many-to-one)
  • contract_balance.revenue_contract_key → revenue_contract (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time