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.
- 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
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.
| Column | Type | Keys |
|---|---|---|
| revenue_contract_key | bigint | PK |
| company_code_key | bigint | |
| customer_key | bigint | |
| accounting_principle_key | bigint | |
| contract_id | varchar | BK |
| source_document_type | varchar | |
| contract_start_date | date | |
| contract_status | varchar | |
| total_transaction_price | decimal | |
| currency | varchar | |
| is_combined_contract | boolean |
performance_obligation
Grain: one row per performance obligation (pob_id)
SAP FARR_D_POB — performance obligation.
| Column | Type | Keys |
|---|---|---|
| performance_obligation_key | bigint | PK |
| revenue_contract_key | bigint | |
| material_key | bigint | |
| pob_id | varchar | BK |
| pob_type | varchar | |
| fulfillment_type | varchar | |
| fulfillment_event | varchar | |
| standalone_selling_price | decimal | |
| allocated_transaction_price | decimal | |
| allocated_amount | decimal | |
| start_date | date | |
| end_date | date | |
| pob_status | varchar | |
| currency | varchar |
price_allocation
Grain: one row per price allocation line (allocation_id)
SAP FARR_D_DEFITEM — transaction price allocation / deferral item.
| Column | Type | Keys |
|---|---|---|
| price_allocation_key | bigint | PK |
| performance_obligation_key | bigint | |
| revenue_contract_key | bigint | |
| allocation_id | varchar | BK |
| allocation_method | varchar | |
| allocation_amount | decimal | |
| discount_allocated | decimal | |
| currency | varchar |
fulfillment
Grain: one row per fulfillment event (fulfillment_id)
SAP FARR_D_FULFILLMT — performance obligation fulfillment.
| Column | Type | Keys |
|---|---|---|
| fulfillment_key | bigint | PK |
| performance_obligation_key | bigint | |
| fulfillment_id | varchar | BK |
| fulfillment_date | date | |
| fulfilled_quantity | decimal | |
| fulfilled_percentage | decimal | |
| fulfillment_event_type | varchar | |
| recognized_amount | decimal | |
| currency | varchar |
invoice_item
Grain: one row per revenue invoice item (invoice_item_id)
SAP FARR_D_INVOICE — revenue accounting invoice item.
| Column | Type | Keys |
|---|---|---|
| invoice_item_key | bigint | PK |
| performance_obligation_key | bigint | |
| revenue_contract_key | bigint | |
| invoice_item_id | varchar | BK |
| billing_document | varchar | |
| billing_item | varchar | |
| invoice_date | date | |
| invoiced_amount | decimal | |
| currency | varchar |
revenue_posting
Grain: one row per revenue posting (posting_id)
SAP FARR_D_POSTING — recognized/deferred revenue postings into ACDOCA.
| Column | Type | Keys |
|---|---|---|
| revenue_posting_key | bigint | PK |
| performance_obligation_key | bigint | |
| revenue_contract_key | bigint | |
| gl_account_key | bigint | |
| company_code_key | bigint | |
| posting_id | varchar | BK |
| fiscal_year | varchar | |
| fiscal_period | varchar | |
| posting_category | varchar | |
| recognized_revenue | decimal | |
| deferred_revenue | decimal | |
| posting_date | date | |
| currency | varchar |
contract_balance
Grain: one row per contract per fiscal period (balance_id)
Period-level revenue contract balance snapshot for IFRS 15 disclosures.
| Column | Type | Keys |
|---|---|---|
| contract_balance_key | bigint | PK |
| revenue_contract_key | bigint | |
| balance_id | varchar | BK |
| fiscal_year | varchar | |
| fiscal_period | varchar | |
| contract_asset | decimal | |
| contract_liability | decimal | |
| deferred_revenue_balance | decimal | |
| cumulative_recognized | decimal | |
| currency | varchar |
Lookup tables (5)
company_code
Grain: one row per company code
SAP T001 — company code check table.
| Column | Type | Keys |
|---|---|---|
| company_code_key | bigint | PK |
| bukrs | varchar | BK |
| butxt | varchar | |
| land1 | varchar | |
| waers | varchar |
customer
Grain: one row per customer master general record
SAP KNA1 — customer master (general), referenced as a lookup here.
| Column | Type | Keys |
|---|---|---|
| customer_key | bigint | PK |
| kunnr | varchar | BK |
| name1 | varchar | PII |
| land1 | varchar |
material
Grain: one row per material master general record
SAP MARA/MAKT — material master (general + description), referenced as a lookup here.
| Column | Type | Keys |
|---|---|---|
| material_key | bigint | PK |
| matnr | varchar | BK |
| maktx | varchar | |
| mtart | varchar |
gl_account
Grain: one row per G/L account
SAP SKA1/SKAT — G/L account master, referenced as a lookup here.
| Column | Type | Keys |
|---|---|---|
| gl_account_key | bigint | PK |
| saknr | varchar | BK |
| txt50 | varchar | |
| account_type | varchar |
accounting_principle
Grain: one row per accounting principle
SAP accounting principle / ledger group — parallel accounting determination.
| Column | Type | Keys |
|---|---|---|
| accounting_principle_key | bigint | PK |
| accounting_principle | varchar | BK |
| description | varchar | |
| standard | varchar |
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 →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.
