Analytics Catalog/SAP S/4HANA/Transaction Tax/Tax Reconciliation
Explore the catalogTax RegisterBSETACDOCACDS viewsExtraction
SAP S/4HANA · Transaction Tax (FI-Tax)

Tax Reconciliation

The control check before you file: the tax the sub-ledger (BSET) says posted, versus the actual balance on each G/L tax account. They must agree to the cent — the variance is what you chase down.

Sample build of the Tax Reconciliation report — BSET tax versus the G/L tax-account balance per account, with the variance highlighted, and rendered tool-neutral so it runs in Power BI, SAC, or Tableau.

Tax Reconciliation sample
Q2 2026 · BSET vs G/L
Filters
Company code
1010
Tax period
Apr–Jun 2026
Tax accounts
All
Tolerance
0.00
1.68M
BSET tax
1.68M
G/L balance
4K
Variance
3
Tax accounts
G/L tax accountBSET taxG/L balanceVariance
175000 · Output VAT950,000950,0000
154000 · Input VAT608,000612,000(4,000)
176000 · Acquisition tax120,000120,0000
AI Analyst · active
reading

Each G/L tax account: the tax the sub-ledger (BSET) says posted, versus the actual G/L balance on that account. They should match to the cent before the return is filed.

flag

Input VAT (154000) shows a 4K variance — the G/L balance exceeds BSET. That is almost always a manual posting to the tax account without a tax code, so it never reached BSET or the return. Locate and correct it before filing.

root cause & next step

A tax account moves two ways — through a tax code (which writes a BSET line and lands on the return) or a direct manual posting (which does not). Reconcile BSET to the tax accounts so nothing on the books is missing from the return, and nothing on the return is missing from the books.

Illustrative data · reconciled to the G/L tax accounts · runs on your warehouse. See it live →
BSET · taxvsACDOCA · tax accounts────▶Tax Reconciliation

The report's query logic — sums tax from BSET by G/L account, sums the ACDOCA balance on those same accounts, and shows the variance side by side. The same SQL becomes a dbt model in your warehouse.

How it interconnects: a posting reaches a tax account two ways — through a tax code (which writes a BSET line and lands on the return) or a direct manual posting (which does not). The reconciliation is what surfaces the second kind, so the books and the return agree.
SQL data set · genericized · parameterized · BSET tax vs G/L balance per account
Show / hide SQL
WITH bset_tax AS (
  SELECT b.hkont                AS gl_account,
         SUM(b.hwste)           AS bset_tax
  FROM   bset b
  JOIN   bkpf k ON k.bukrs = b.bukrs
              AND k.belnr = b.belnr
              AND k.gjahr = b.gjahr
  WHERE  b.bukrs = :P_COMPANY_CODE
    AND  k.budat BETWEEN :P_FROM_DATE AND :P_TO_DATE
  GROUP  BY b.hkont
),
gl_tax AS (
  SELECT a.racct               AS gl_account,
         SUM(a.hsl)            AS gl_balance
  FROM   acdoca a
  WHERE  a.rbukrs = :P_COMPANY_CODE
    AND  a.budat BETWEEN :P_FROM_DATE AND :P_TO_DATE
    AND  a.racct IN (SELECT gl_account FROM bset_tax)   -- the tax accounts
  GROUP  BY a.racct
)
SELECT COALESCE(b.gl_account, g.gl_account)   AS gl_account,
       b.bset_tax,
       g.gl_balance,
       (g.gl_balance - b.bset_tax)            AS variance
FROM   bset_tax b
FULL OUTER JOIN gl_tax g ON b.gl_account = g.gl_account
ORDER  BY ABS(g.gl_balance - b.bset_tax) DESC;
:P_COMPANY_CODE :P_FROM_DATE :P_TO_DATE
Never any customer schema. A non-zero variance means the books and the return disagree on a tax account — usually a manual posting to the tax account without a tax code, or a tax code on an account with no tax category. Find it before filing.

The data-warehouse model — one fact surrounded by conformed dimensions (what you slice by) and measures (what you aggregate), expressed as dbt so it migrates with you. Grain: one row per tax line (document · tax code).

dim_tax_codecode · rate · direction dim_gl_accounttax G/L account dim_company_codeentity · country dim_dateposting · tax date fct_tax_linefact · one row per tax linebset tax · gl balance · variance
●— fact → dimension join
ElementTypeDefinition
dim_tax_codedimensionTax code (MWSKZ) — rate, treatment, and direction (output / input)
dim_gl_accountdimensionThe G/L tax account the amount posted to (HKONT)
dim_company_codedimensionReporting entity & country for the return
dim_datedimensionConformed calendar — posting date & tax reporting date
bset_taxmeasureTax the sub-ledger says posted, per account (BSET HWSTE)
gl_balancemeasureThe actual G/L balance on the tax account (ACDOCA HSL)
variancemeasureG/L tax-account balance less BSET tax — should be zero
Runs on your cloud warehouse — Snowflake, BigQuery, Redshift, or Synapse on AWS, Google Cloud, or Azure. Reconciled to the G/L tax accounts — 0% variance by design. You own the code, the model, and the data.
How the data gets here: a SAP-compliant extract of BSET joined to BKPF — via SLT or Table/Table-CDC — never ODP-RFC (prohibited under SAP Note 3255746, blocked June 2026). See the extraction pattern & data flow →
See the complete model
How this report's tax fact and dimensions fit the full owned model, via conformed keys.
Transaction Tax data model → Enterprise model →

Every source object behind this report. Each linked object has its own page — with its fields and its real S/4HANA status, so you build on the right thing.

ObjectRoleKey fieldsS/4HANA status
BSETTax data document segment — one summarized tax line per code (MWSKZ · KTOSL)4 PK · base/amtTransparent table
BKPFDocument header — posting date, tax reporting date, document typeBUKRS · BELNR · GJAHRTransparent table
BSEGSource line items behind the tax code — joined back for line detailBUKRS · BELNR · GJAHRTransparent table
I_GLAccountLineItemReleased journal-entry line view — carries the tax code at line levelreleasedReleased CDS view
T007ATax codes (Customizing) — the rate and treatment behind each MWSKZconfigCustomizing table
WITH_ITEMWithholding-tax line items — the companion for vendor withholdingreferenceTransparent table
RFUMSV00The VAT-return program (S_ALR_87012357) — SAP's own logic over BSETprogramStandard report
Key fields = the primary key plus the columns this report selects; S/4HANA status = whether the object is a live transparent table, a released CDS view, a Customizing table, or a standard report. Extract the released CDS view or the transparent table directly — never via ODP-RFC.
Want this built & owned?
A reconciled, customer-owned tax layer on BSET and ACDOCA, on your cloud — the variance check wired in, your team owns the code. Ten-day proof of concept.
Download the tax pack → Talk to us →