What this table is
A DATEV Buchungsstapel booking row has a fixed number of columns in a fixed order. Format version 13 defines 125 columns; version 12 defines the first 124 and omits Abw. Skontokonto. Column order carries meaning: a row is positional, so field 7 is Konto whether or not you supplied field 6.
The table below is generated from DatevFieldSpecs, the single canonical copy of the schema that every module in this library derives from. It is not a hand-maintained transcription, so it cannot drift away from what the exporters actually write.
Knowing that field 9 is BU-Schlüssel does not tell you which posting key your case needs. Account mapping, tax treatment and posting logic stay with your application and your tax adviser.
Shape of the schema
| Type | Checker name | Columns | Meaning |
|---|---|---|---|
TEXT | Text | 84 | Quoted textual value; the maximum length counts characters. |
NUMBER | Zahl | 27 | Unquoted numeric value with an optional comma decimal separator. |
DATE | Datum | 7 | DATEV-formatted date. |
ACCOUNT | Konto | 4 | Numeric account identifier, narrowed further by the account length. |
AMOUNT | Betrag | 3 | Positive monetary value; the sign lives in Soll/Haben-Kennzeichen. |
The five required fields
Strict validation reports an empty value in these columns as REQUIRED_FIELD. Every other column may be left empty.
| # | Official heading | DatevField constant | Type |
|---|---|---|---|
| 1 | Umsatz (ohne Soll/Haben-Kz) | AMOUNT | Betrag |
| 2 | Soll/Haben-Kennzeichen | DEBIT_CREDIT_FLAG | Text |
| 7 | Konto | ACCOUNT | Konto |
| 8 | Gegenkonto (ohne BU-Schlüssel) | CONTRA_ACCOUNT | Konto |
| 10 | Belegdatum | DOCUMENT_DATE | Datum |
Repeating groups and one spelling trap
Two column families repeat as type/content pairs. Supplying one half without the other is reported as DEPENDENT_FIELD_MISSING in strict mode.
Beleginfo - Art 1…Beleginfo - Inhalt 8— eight pairs, fields 21–36.Zusatzinformation - Art 1…Zusatzinformation- Inhalt 20— twenty pairs, fields 48–87.
DATEV spells the pair inconsistently: Zusatzinformation - Art 1 has spaces around the dash, but Zusatzinformation- Inhalt 1 has none. Both spellings are reproduced exactly. Use the DatevField constants and a typo becomes a compile error instead of a rejected file.
Full field table
| # | Official heading | DatevField constant | Type | Max. length | Decimals | Required | In v12 |
|---|---|---|---|---|---|---|---|
| 1 | Umsatz (ohne Soll/Haben-Kz) | AMOUNT | Betrag | 10 | 2 | yes | yes |
| 2 | Soll/Haben-Kennzeichen | DEBIT_CREDIT_FLAG | Text | 1 | — | yes | yes |
| 3 | WKZ Umsatz | CURRENCY | Text | 3 | — | no | yes |
| 4 | Kurs | EXCHANGE_RATE | Zahl | 5 | 6 | no | yes |
| 5 | Basis-Umsatz | BASE_AMOUNT | Betrag | 10 | 2 | no | yes |
| 6 | WKZ Basis-Umsatz | BASE_CURRENCY | Text | 3 | — | no | yes |
| 7 | Konto | ACCOUNT | Konto | 9 | — | yes | yes |
| 8 | Gegenkonto (ohne BU-Schlüssel) | CONTRA_ACCOUNT | Konto | 9 | — | yes | yes |
| 9 | BU-Schlüssel | POSTING_KEY | Text | 4 | — | no | yes |
| 10 | Belegdatum | DOCUMENT_DATE | Datum | 8 | — | yes | yes |
| 11 | Belegfeld 1 | DOCUMENT_FIELD_1 | Text | 36 | — | no | yes |
| 12 | Belegfeld 2 | DOCUMENT_FIELD_2 | Text | 12 | — | no | yes |
| 13 | Skonto | CASH_DISCOUNT | Betrag | 8 | 2 | no | yes |
| 14 | Buchungstext | POSTING_TEXT | Text | 60 | — | no | yes |
| 15 | Postensperre | ITEM_BLOCK | Zahl | 1 | — | no | yes |
| 16 | Diverse Adressnummer | MISC_ADDRESS_NUMBER | Text | 9 | — | no | yes |
| 17 | Geschäftspartnerbank | PARTNER_BANK | Zahl | 3 | — | no | yes |
| 18 | Sachverhalt | MATTER_CODE | Zahl | 2 | — | no | yes |
| 19 | Zinssperre | INTEREST_BLOCK | Zahl | 1 | — | no | yes |
| 20 | Beleglink | DOCUMENT_LINK | Text | 210 | — | no | yes |
| 21 | Beleginfo - Art 1 | DOCUMENT_INFO_TYPE_1 | Text | 20 | — | no | yes |
| 22 | Beleginfo - Inhalt 1 | DOCUMENT_INFO_CONTENT_1 | Text | 210 | — | no | yes |
| 23 | Beleginfo - Art 2 | DOCUMENT_INFO_TYPE_2 | Text | 20 | — | no | yes |
| 24 | Beleginfo - Inhalt 2 | DOCUMENT_INFO_CONTENT_2 | Text | 210 | — | no | yes |
| 25 | Beleginfo - Art 3 | DOCUMENT_INFO_TYPE_3 | Text | 20 | — | no | yes |
| 26 | Beleginfo - Inhalt 3 | DOCUMENT_INFO_CONTENT_3 | Text | 210 | — | no | yes |
| 27 | Beleginfo - Art 4 | DOCUMENT_INFO_TYPE_4 | Text | 20 | — | no | yes |
| 28 | Beleginfo - Inhalt 4 | DOCUMENT_INFO_CONTENT_4 | Text | 210 | — | no | yes |
| 29 | Beleginfo - Art 5 | DOCUMENT_INFO_TYPE_5 | Text | 20 | — | no | yes |
| 30 | Beleginfo - Inhalt 5 | DOCUMENT_INFO_CONTENT_5 | Text | 210 | — | no | yes |
| 31 | Beleginfo - Art 6 | DOCUMENT_INFO_TYPE_6 | Text | 20 | — | no | yes |
| 32 | Beleginfo - Inhalt 6 | DOCUMENT_INFO_CONTENT_6 | Text | 210 | — | no | yes |
| 33 | Beleginfo - Art 7 | DOCUMENT_INFO_TYPE_7 | Text | 20 | — | no | yes |
| 34 | Beleginfo - Inhalt 7 | DOCUMENT_INFO_CONTENT_7 | Text | 210 | — | no | yes |
| 35 | Beleginfo - Art 8 | DOCUMENT_INFO_TYPE_8 | Text | 20 | — | no | yes |
| 36 | Beleginfo - Inhalt 8 | DOCUMENT_INFO_CONTENT_8 | Text | 210 | — | no | yes |
| 37 | KOST1 - Kostenstelle | COST_CENTER_1 | Text | 36 | — | no | yes |
| 38 | KOST2 - Kostenstelle | COST_CENTER_2 | Text | 36 | — | no | yes |
| 39 | Kost-Menge | COST_QUANTITY | Zahl | 12 | 4 | no | yes |
| 40 | EU-Land u. UStID (Bestimmung) | EU_COUNTRY_VAT_ID_DESTINATION | Text | 15 | — | no | yes |
| 41 | EU-Steuersatz (Bestimmung) | EU_TAX_RATE_DESTINATION | Zahl | 2 | 2 | no | yes |
| 42 | Abw. Versteuerungsart | DIFFERING_TAXATION_TYPE | Text | 1 | — | no | yes |
| 43 | Sachverhalt L+L | MATTER_CODE_LL | Zahl | 3 | — | no | yes |
| 44 | Funktionsergänzung L+L | FUNCTION_SUPPLEMENT_LL | Zahl | 3 | — | no | yes |
| 45 | BU 49 Hauptfunktionstyp | BU49_MAIN_FUNCTION_TYPE | Zahl | 1 | — | no | yes |
| 46 | BU 49 Hauptfunktionsnummer | BU49_MAIN_FUNCTION_NUMBER | Zahl | 2 | — | no | yes |
| 47 | BU 49 Funktionsergänzung | BU49_FUNCTION_SUPPLEMENT | Zahl | 3 | — | no | yes |
| 48 | Zusatzinformation - Art 1 | ADDITIONAL_INFO_TYPE_1 | Text | 20 | — | no | yes |
| 49 | Zusatzinformation- Inhalt 1 | ADDITIONAL_INFO_CONTENT_1 | Text | 210 | — | no | yes |
| 50 | Zusatzinformation - Art 2 | ADDITIONAL_INFO_TYPE_2 | Text | 20 | — | no | yes |
| 51 | Zusatzinformation- Inhalt 2 | ADDITIONAL_INFO_CONTENT_2 | Text | 210 | — | no | yes |
| 52 | Zusatzinformation - Art 3 | ADDITIONAL_INFO_TYPE_3 | Text | 20 | — | no | yes |
| 53 | Zusatzinformation- Inhalt 3 | ADDITIONAL_INFO_CONTENT_3 | Text | 210 | — | no | yes |
| 54 | Zusatzinformation - Art 4 | ADDITIONAL_INFO_TYPE_4 | Text | 20 | — | no | yes |
| 55 | Zusatzinformation- Inhalt 4 | ADDITIONAL_INFO_CONTENT_4 | Text | 210 | — | no | yes |
| 56 | Zusatzinformation - Art 5 | ADDITIONAL_INFO_TYPE_5 | Text | 20 | — | no | yes |
| 57 | Zusatzinformation- Inhalt 5 | ADDITIONAL_INFO_CONTENT_5 | Text | 210 | — | no | yes |
| 58 | Zusatzinformation - Art 6 | ADDITIONAL_INFO_TYPE_6 | Text | 20 | — | no | yes |
| 59 | Zusatzinformation- Inhalt 6 | ADDITIONAL_INFO_CONTENT_6 | Text | 210 | — | no | yes |
| 60 | Zusatzinformation - Art 7 | ADDITIONAL_INFO_TYPE_7 | Text | 20 | — | no | yes |
| 61 | Zusatzinformation- Inhalt 7 | ADDITIONAL_INFO_CONTENT_7 | Text | 210 | — | no | yes |
| 62 | Zusatzinformation - Art 8 | ADDITIONAL_INFO_TYPE_8 | Text | 20 | — | no | yes |
| 63 | Zusatzinformation- Inhalt 8 | ADDITIONAL_INFO_CONTENT_8 | Text | 210 | — | no | yes |
| 64 | Zusatzinformation - Art 9 | ADDITIONAL_INFO_TYPE_9 | Text | 20 | — | no | yes |
| 65 | Zusatzinformation- Inhalt 9 | ADDITIONAL_INFO_CONTENT_9 | Text | 210 | — | no | yes |
| 66 | Zusatzinformation - Art 10 | ADDITIONAL_INFO_TYPE_10 | Text | 20 | — | no | yes |
| 67 | Zusatzinformation- Inhalt 10 | ADDITIONAL_INFO_CONTENT_10 | Text | 210 | — | no | yes |
| 68 | Zusatzinformation - Art 11 | ADDITIONAL_INFO_TYPE_11 | Text | 20 | — | no | yes |
| 69 | Zusatzinformation- Inhalt 11 | ADDITIONAL_INFO_CONTENT_11 | Text | 210 | — | no | yes |
| 70 | Zusatzinformation - Art 12 | ADDITIONAL_INFO_TYPE_12 | Text | 20 | — | no | yes |
| 71 | Zusatzinformation- Inhalt 12 | ADDITIONAL_INFO_CONTENT_12 | Text | 210 | — | no | yes |
| 72 | Zusatzinformation - Art 13 | ADDITIONAL_INFO_TYPE_13 | Text | 20 | — | no | yes |
| 73 | Zusatzinformation- Inhalt 13 | ADDITIONAL_INFO_CONTENT_13 | Text | 210 | — | no | yes |
| 74 | Zusatzinformation - Art 14 | ADDITIONAL_INFO_TYPE_14 | Text | 20 | — | no | yes |
| 75 | Zusatzinformation- Inhalt 14 | ADDITIONAL_INFO_CONTENT_14 | Text | 210 | — | no | yes |
| 76 | Zusatzinformation - Art 15 | ADDITIONAL_INFO_TYPE_15 | Text | 20 | — | no | yes |
| 77 | Zusatzinformation- Inhalt 15 | ADDITIONAL_INFO_CONTENT_15 | Text | 210 | — | no | yes |
| 78 | Zusatzinformation - Art 16 | ADDITIONAL_INFO_TYPE_16 | Text | 20 | — | no | yes |
| 79 | Zusatzinformation- Inhalt 16 | ADDITIONAL_INFO_CONTENT_16 | Text | 210 | — | no | yes |
| 80 | Zusatzinformation - Art 17 | ADDITIONAL_INFO_TYPE_17 | Text | 20 | — | no | yes |
| 81 | Zusatzinformation- Inhalt 17 | ADDITIONAL_INFO_CONTENT_17 | Text | 210 | — | no | yes |
| 82 | Zusatzinformation - Art 18 | ADDITIONAL_INFO_TYPE_18 | Text | 20 | — | no | yes |
| 83 | Zusatzinformation- Inhalt 18 | ADDITIONAL_INFO_CONTENT_18 | Text | 210 | — | no | yes |
| 84 | Zusatzinformation - Art 19 | ADDITIONAL_INFO_TYPE_19 | Text | 20 | — | no | yes |
| 85 | Zusatzinformation- Inhalt 19 | ADDITIONAL_INFO_CONTENT_19 | Text | 210 | — | no | yes |
| 86 | Zusatzinformation - Art 20 | ADDITIONAL_INFO_TYPE_20 | Text | 20 | — | no | yes |
| 87 | Zusatzinformation- Inhalt 20 | ADDITIONAL_INFO_CONTENT_20 | Text | 210 | — | no | yes |
| 88 | Stück | PIECES | Zahl | 8 | — | no | yes |
| 89 | Gewicht | WEIGHT | Zahl | 8 | 2 | no | yes |
| 90 | Zahlweise | PAYMENT_METHOD | Zahl | 2 | — | no | yes |
| 91 | Forderungsart | RECEIVABLE_TYPE | Text | 10 | — | no | yes |
| 92 | Veranlagungsjahr | ASSESSMENT_YEAR | Zahl | 4 | — | no | yes |
| 93 | Zugeordnete Fälligkeit | ASSIGNED_DUE_DATE | Datum | 8 | — | no | yes |
| 94 | Skontotyp | CASH_DISCOUNT_TYPE | Zahl | 1 | — | no | yes |
| 95 | Auftragsnummer | ORDER_NUMBER | Text | 30 | — | no | yes |
| 96 | Buchungstyp | POSTING_TYPE | Text | 2 | — | no | yes |
| 97 | USt-Schlüssel (Anzahlungen) | VAT_KEY_PREPAYMENT | Zahl | 2 | — | no | yes |
| 98 | EU-Land (Anzahlungen) | EU_COUNTRY_PREPAYMENT | Text | 2 | — | no | yes |
| 99 | Sachverhalt L+L (Anzahlungen) | MATTER_CODE_LL_PREPAYMENT | Zahl | 3 | — | no | yes |
| 100 | EU-Steuersatz (Anzahlungen) | EU_TAX_RATE_PREPAYMENT | Zahl | 2 | 2 | no | yes |
| 101 | Erlöskonto (Anzahlungen) | REVENUE_ACCOUNT_PREPAYMENT | Konto | 9 | — | no | yes |
| 102 | Herkunft-Kz | ORIGIN_CODE | Text | 2 | — | no | yes |
| 103 | Buchungs GUID | POSTING_GUID | Text | 36 | — | no | yes |
| 104 | KOST-Datum | COST_DATE | Datum | 8 | — | no | yes |
| 105 | SEPA-Mandatsreferenz | SEPA_MANDATE_REFERENCE | Text | 35 | — | no | yes |
| 106 | Skontosperre | CASH_DISCOUNT_BLOCK | Zahl | 1 | — | no | yes |
| 107 | Gesellschaftername | SHAREHOLDER_NAME | Text | 76 | — | no | yes |
| 108 | Beteiligtennummer | PARTICIPANT_NUMBER | Zahl | 4 | — | no | yes |
| 109 | Identifikationsnummer | IDENTIFICATION_NUMBER | Text | 11 | — | no | yes |
| 110 | Zeichnernummer | SUBSCRIBER_NUMBER | Text | 20 | — | no | yes |
| 111 | Postensperre bis | ITEM_BLOCK_UNTIL | Datum | 8 | — | no | yes |
| 112 | Bezeichnung SoBil-Sachverhalt | SOBIL_MATTER_LABEL | Text | 30 | — | no | yes |
| 113 | Kennzeichen SoBil-Buchung | SOBIL_POSTING_FLAG | Zahl | 2 | — | no | yes |
| 114 | Festschreibung | FINAL_POSTING_FLAG | Zahl | 1 | — | no | yes |
| 115 | Leistungsdatum | SERVICE_DATE | Datum | 8 | — | no | yes |
| 116 | Datum Zuord. Steuerperiode | TAX_PERIOD_DATE | Datum | 8 | — | no | yes |
| 117 | Fälligkeit | DUE_DATE | Datum | 8 | — | no | yes |
| 118 | Generalumkehr (GU) | GENERAL_REVERSAL | Text | 1 | — | no | yes |
| 119 | Steuersatz | TAX_RATE | Zahl | 2 | 2 | no | yes |
| 120 | Land | COUNTRY | Text | 2 | — | no | yes |
| 121 | Abrechnungsreferenz | SETTLEMENT_REFERENCE | Text | 50 | — | no | yes |
| 122 | BVV-Position | BVV_POSITION | Zahl | 1 | — | no | yes |
| 123 | EU-Land u. UStID (Ursprung) | EU_COUNTRY_VAT_ID_ORIGIN | Text | 15 | — | no | yes |
| 124 | EU-Steuersatz (Ursprung) | EU_TAX_RATE_ORIGIN | Zahl | 2 | 2 | no | yes |
| 125 | Abw. Skontokonto | DIFFERING_CASH_DISCOUNT_ACCOUNT | Konto | 8 | — | no | no |
Addressing a field from Java
Every DatevColumn factory accepts either the enum constant or the raw heading string, and both produce identical output. The constant is checked at compile time.
import io.github.mrtyldr.datev.core.DatevColumn;
import io.github.mrtyldr.datev.core.DatevField;
import io.github.mrtyldr.datev.core.DatevSchema;
// Field 7, "Konto" — compile-checked.
DatevColumn account = DatevColumn.account(DatevField.ACCOUNT, 1000);
// Identical output, but a typo would only surface at runtime.
DatevColumn same = DatevColumn.account("Konto", 1000);
int number = DatevField.ACCOUNT.fieldNumber(); // 7
String heading = DatevField.ACCOUNT.heading(); // "Konto"
boolean inLegacy = DatevField.DIFFERING_CASH_DISCOUNT_ACCOUNT
.isPresentIn(DatevSchema.LEGACY_V12); // false
DatevField constants are declared in output order, so ordinal() + 1 is the DATEV field number, and isPresentIn(DatevSchema.LEGACY_V12) answers the version-12 question for any field.