skr-journal-mapping
Map German SKR03/SKR04 ledger accounts to journal entries, tax keys (19/7, 16/1, 19/0, 06/0, 09/0, 13/0) and automatic Buchungszeilen; build and validate period-lock and closing-concept rules. Use whe
Files14
View on GitHubSKILL.mdskills/business-de/skr-journal-mapping/SKILL.md
GitHubskr-journal-mapping
When to use this skill
Use this skill when an agent must map a German invoice line to an SKR03 or SKR04 ledger account, pick the correct Steuerschluessel (tax key), generate an automatic journal (Buchungszeile) or enforce a period lock before the fiscal close.
Do not use it for US GAAP, IFRS consolidation, non-German VAT, or balance-sheet preparation (that is a separate skill).
Procedure
- Pick the account set — SKR03 (small, 93 accounts) or SKR04 (large, ~260 accounts). Default to SKR04 unless the entity runs SKR03.
- Classify the line — asset / liability / income / expense / tax / equity
per the table in
references/procedures.md§2. - Assign the tax key — pick from the set {19, 7, 16/1, 06/0, 09/0, 13/0} according to the rate and the supply type. Never guess a key, since it feeds the USt-Anmeldung directly.
- Generate the journal — debit/credit side, account, tax key, amount,
reference. Validate with
scripts/journal_check.py. - Lock the period — mark the month as closed, block new postings for
it, run
scripts/period_lock_check.py, then close. Seereferences/procedures.md§5 for the full Monatsschluss sequence.
Decision tables
Tax keys (Steuerschluessel)
Six keys are in use; the rate column is read from config, never typed into a
script. The full table with legal sources and worked examples is in
references/procedures.md §3.
| Key | Rate | Use |
|---|---|---|
| 19 | 19% | domestic standard-rate sales |
| 7 | 7% | reduced-rate items |
| 16/1 | 16%/1% | legacy split from the pre-2020 rates — do not apply to new postings |
| 06/0 | 0% | intra-EU B2B supply; the buyer may self-assess |
| 09/0 | 0% | internal / intercompany service |
| 13/0 | 19% split | installment booking (Soll/IST) |
Account-to-tax-key mapping (SKR04, default)
| Account | Meaning | Default tax key | When it changes |
|---|---|---|---|
| 4000 | Sales — domestic | 19% | intra-EU customer => 0% |
| 4100 | Sales — intra-EU | 0% | domestic customer => 19% |
| 4200 | Sales — exports (non-EU) | 0% | domestic customer => 19% |
| 4300 | Sales — reduced rate | 7% | standard-rate item => 19% |
| 8000 | Other income | 19% | exempt services => 0% |
Account-to-tax-key mapping (SKR03, alternative)
| Account | Meaning | Default tax key |
|---|---|---|
| 4000 | Sales (all) | 19% |
| 4100 | Sales — intra-EU | 0% |
| 4200 | Sales — exports | 0% |
| 4300 | Sales — reduced rate | 7% |
| 8000 | Other income | 19% |
Accounts 4000/4100 exist in both frameworks with different semantics
(SKR03 4000 = all sales, SKR04 4000 = domestic sales). The skill pins the
Kontenrahmen in config and refuses to guess. Worked examples are in
references/procedures.md §3-§4.
Period lock states
| State | Meaning | Next allowed action |
|---|---|---|
locked: false |
period open | bookings allowed; --action lock |
locked: true |
period closed | no bookings; --action override with --evidence |
locked: true + override |
correcting entry approved | bookings resume for that entry only |
A lock requires --approver and records locked_at, locked_by, and
lock_reason. An override requires --evidence pointing at a documented
review record. Re-locking with --force clears the override audit trail — do
it only after a documented re-close.
Retention periods (AO §147 Abs. 3 n.F., effective 2025-01-01)
| Material | Retention | From |
|---|---|---|
| Books / journals / annual financial statements | 10 years | calendar year-end |
| Vouchers (Belege) | 8 years | calendar year-end |
| Business letters / other records | 6 years | calendar year-end |
| Electronic storage / GoBD exports | 10 years | calendar year-end |
Every retained journal carries a checksum and a retrieval path recorded in the export manifest.
Pitfalls from research
Three traps recur; the full list with sources is in
references/procedures.md §3 and §5:
- SKR03 and SKR04 are not mixable — the 1xxx asset range differs between the two sets.
- The tax key 16/1 is legacy (pre-2020); do not apply it to new postings.
- A taxed key without an amount on the tax account (1570/1571/1572) fails the USt-Anmeldung plausibility check.
- Retention is not optional: AO §147 Abs. 3 n.F. sets 8 years for vouchers and 10 years for books. Record the checksum and retrieval path at export time, not at audit time.
Verification checklist
- Account set chosen (SKR03 or SKR04)
- Line classified per decision table
- Tax key matches the legal rate
- Journal balances (sum debit = sum credit)
- Period lock applied before close
-
scripts/journal_check.pyexits 0 - Retention period recorded (10y books, 8y vouchers, 6y letters) with checksum and retrieval path
Related skills
datev-extf — emit the generated journals as a DATEV EXTF Buchungsstapel gobd-archive — generated journals and period-lock records are books (10y)