Field reference · schema v13 and v12 · 0.2.0

All 125 Buchungsstapel columns, in official output order.

Field numbers, exact German headings, checker types and lengths for format version 13, with the four differences that matter when you target version 12.

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.

This is a technical schema, not accounting guidance

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

125columns in version 13
124columns in version 12
5fields the checker marks required
5logical field types
Field types across the 125 version 13 columns
TypeChecker nameColumnsMeaning
TEXTText84Quoted textual value; the maximum length counts characters.
NUMBERZahl27Unquoted numeric value with an optional comma decimal separator.
DATEDatum7DATEV-formatted date.
ACCOUNTKonto4Numeric account identifier, narrowed further by the account length.
AMOUNTBetrag3Positive 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 headingDatevField constantType
1Umsatz (ohne Soll/Haben-Kz)AMOUNTBetrag
2Soll/Haben-KennzeichenDEBIT_CREDIT_FLAGText
7KontoACCOUNTKonto
8Gegenkonto (ohne BU-Schlüssel)CONTRA_ACCOUNTKonto
10BelegdatumDOCUMENT_DATEDatum

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 1Beleginfo - Inhalt 8 — eight pairs, fields 21–36.
  • Zusatzinformation - Art 1Zusatzinformation- Inhalt 20 — twenty pairs, fields 48–87.
Mind the space

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

DATEV Buchungsstapel columns, format version 13, in output order
#Official headingDatevField constantTypeMax. lengthDecimalsRequiredIn v12
1Umsatz (ohne Soll/Haben-Kz)AMOUNTBetrag102yesyes
2Soll/Haben-KennzeichenDEBIT_CREDIT_FLAGText1yesyes
3WKZ UmsatzCURRENCYText3noyes
4KursEXCHANGE_RATEZahl56noyes
5Basis-UmsatzBASE_AMOUNTBetrag102noyes
6WKZ Basis-UmsatzBASE_CURRENCYText3noyes
7KontoACCOUNTKonto9yesyes
8Gegenkonto (ohne BU-Schlüssel)CONTRA_ACCOUNTKonto9yesyes
9BU-SchlüsselPOSTING_KEYText4noyes
10BelegdatumDOCUMENT_DATEDatum8yesyes
11Belegfeld 1DOCUMENT_FIELD_1Text36noyes
12Belegfeld 2DOCUMENT_FIELD_2Text12noyes
13SkontoCASH_DISCOUNTBetrag82noyes
14BuchungstextPOSTING_TEXTText60noyes
15PostensperreITEM_BLOCKZahl1noyes
16Diverse AdressnummerMISC_ADDRESS_NUMBERText9noyes
17GeschäftspartnerbankPARTNER_BANKZahl3noyes
18SachverhaltMATTER_CODEZahl2noyes
19ZinssperreINTEREST_BLOCKZahl1noyes
20BeleglinkDOCUMENT_LINKText210noyes
21Beleginfo - Art 1DOCUMENT_INFO_TYPE_1Text20noyes
22Beleginfo - Inhalt 1DOCUMENT_INFO_CONTENT_1Text210noyes
23Beleginfo - Art 2DOCUMENT_INFO_TYPE_2Text20noyes
24Beleginfo - Inhalt 2DOCUMENT_INFO_CONTENT_2Text210noyes
25Beleginfo - Art 3DOCUMENT_INFO_TYPE_3Text20noyes
26Beleginfo - Inhalt 3DOCUMENT_INFO_CONTENT_3Text210noyes
27Beleginfo - Art 4DOCUMENT_INFO_TYPE_4Text20noyes
28Beleginfo - Inhalt 4DOCUMENT_INFO_CONTENT_4Text210noyes
29Beleginfo - Art 5DOCUMENT_INFO_TYPE_5Text20noyes
30Beleginfo - Inhalt 5DOCUMENT_INFO_CONTENT_5Text210noyes
31Beleginfo - Art 6DOCUMENT_INFO_TYPE_6Text20noyes
32Beleginfo - Inhalt 6DOCUMENT_INFO_CONTENT_6Text210noyes
33Beleginfo - Art 7DOCUMENT_INFO_TYPE_7Text20noyes
34Beleginfo - Inhalt 7DOCUMENT_INFO_CONTENT_7Text210noyes
35Beleginfo - Art 8DOCUMENT_INFO_TYPE_8Text20noyes
36Beleginfo - Inhalt 8DOCUMENT_INFO_CONTENT_8Text210noyes
37KOST1 - KostenstelleCOST_CENTER_1Text36noyes
38KOST2 - KostenstelleCOST_CENTER_2Text36noyes
39Kost-MengeCOST_QUANTITYZahl124noyes
40EU-Land u. UStID (Bestimmung)EU_COUNTRY_VAT_ID_DESTINATIONText15noyes
41EU-Steuersatz (Bestimmung)EU_TAX_RATE_DESTINATIONZahl22noyes
42Abw. VersteuerungsartDIFFERING_TAXATION_TYPEText1noyes
43Sachverhalt L+LMATTER_CODE_LLZahl3noyes
44Funktionsergänzung L+LFUNCTION_SUPPLEMENT_LLZahl3noyes
45BU 49 HauptfunktionstypBU49_MAIN_FUNCTION_TYPEZahl1noyes
46BU 49 HauptfunktionsnummerBU49_MAIN_FUNCTION_NUMBERZahl2noyes
47BU 49 FunktionsergänzungBU49_FUNCTION_SUPPLEMENTZahl3noyes
48Zusatzinformation - Art 1ADDITIONAL_INFO_TYPE_1Text20noyes
49Zusatzinformation- Inhalt 1ADDITIONAL_INFO_CONTENT_1Text210noyes
50Zusatzinformation - Art 2ADDITIONAL_INFO_TYPE_2Text20noyes
51Zusatzinformation- Inhalt 2ADDITIONAL_INFO_CONTENT_2Text210noyes
52Zusatzinformation - Art 3ADDITIONAL_INFO_TYPE_3Text20noyes
53Zusatzinformation- Inhalt 3ADDITIONAL_INFO_CONTENT_3Text210noyes
54Zusatzinformation - Art 4ADDITIONAL_INFO_TYPE_4Text20noyes
55Zusatzinformation- Inhalt 4ADDITIONAL_INFO_CONTENT_4Text210noyes
56Zusatzinformation - Art 5ADDITIONAL_INFO_TYPE_5Text20noyes
57Zusatzinformation- Inhalt 5ADDITIONAL_INFO_CONTENT_5Text210noyes
58Zusatzinformation - Art 6ADDITIONAL_INFO_TYPE_6Text20noyes
59Zusatzinformation- Inhalt 6ADDITIONAL_INFO_CONTENT_6Text210noyes
60Zusatzinformation - Art 7ADDITIONAL_INFO_TYPE_7Text20noyes
61Zusatzinformation- Inhalt 7ADDITIONAL_INFO_CONTENT_7Text210noyes
62Zusatzinformation - Art 8ADDITIONAL_INFO_TYPE_8Text20noyes
63Zusatzinformation- Inhalt 8ADDITIONAL_INFO_CONTENT_8Text210noyes
64Zusatzinformation - Art 9ADDITIONAL_INFO_TYPE_9Text20noyes
65Zusatzinformation- Inhalt 9ADDITIONAL_INFO_CONTENT_9Text210noyes
66Zusatzinformation - Art 10ADDITIONAL_INFO_TYPE_10Text20noyes
67Zusatzinformation- Inhalt 10ADDITIONAL_INFO_CONTENT_10Text210noyes
68Zusatzinformation - Art 11ADDITIONAL_INFO_TYPE_11Text20noyes
69Zusatzinformation- Inhalt 11ADDITIONAL_INFO_CONTENT_11Text210noyes
70Zusatzinformation - Art 12ADDITIONAL_INFO_TYPE_12Text20noyes
71Zusatzinformation- Inhalt 12ADDITIONAL_INFO_CONTENT_12Text210noyes
72Zusatzinformation - Art 13ADDITIONAL_INFO_TYPE_13Text20noyes
73Zusatzinformation- Inhalt 13ADDITIONAL_INFO_CONTENT_13Text210noyes
74Zusatzinformation - Art 14ADDITIONAL_INFO_TYPE_14Text20noyes
75Zusatzinformation- Inhalt 14ADDITIONAL_INFO_CONTENT_14Text210noyes
76Zusatzinformation - Art 15ADDITIONAL_INFO_TYPE_15Text20noyes
77Zusatzinformation- Inhalt 15ADDITIONAL_INFO_CONTENT_15Text210noyes
78Zusatzinformation - Art 16ADDITIONAL_INFO_TYPE_16Text20noyes
79Zusatzinformation- Inhalt 16ADDITIONAL_INFO_CONTENT_16Text210noyes
80Zusatzinformation - Art 17ADDITIONAL_INFO_TYPE_17Text20noyes
81Zusatzinformation- Inhalt 17ADDITIONAL_INFO_CONTENT_17Text210noyes
82Zusatzinformation - Art 18ADDITIONAL_INFO_TYPE_18Text20noyes
83Zusatzinformation- Inhalt 18ADDITIONAL_INFO_CONTENT_18Text210noyes
84Zusatzinformation - Art 19ADDITIONAL_INFO_TYPE_19Text20noyes
85Zusatzinformation- Inhalt 19ADDITIONAL_INFO_CONTENT_19Text210noyes
86Zusatzinformation - Art 20ADDITIONAL_INFO_TYPE_20Text20noyes
87Zusatzinformation- Inhalt 20ADDITIONAL_INFO_CONTENT_20Text210noyes
88StückPIECESZahl8noyes
89GewichtWEIGHTZahl82noyes
90ZahlweisePAYMENT_METHODZahl2noyes
91ForderungsartRECEIVABLE_TYPEText10noyes
92VeranlagungsjahrASSESSMENT_YEARZahl4noyes
93Zugeordnete FälligkeitASSIGNED_DUE_DATEDatum8noyes
94SkontotypCASH_DISCOUNT_TYPEZahl1noyes
95AuftragsnummerORDER_NUMBERText30noyes
96BuchungstypPOSTING_TYPEText2noyes
97USt-Schlüssel (Anzahlungen)VAT_KEY_PREPAYMENTZahl2noyes
98EU-Land (Anzahlungen)EU_COUNTRY_PREPAYMENTText2noyes
99Sachverhalt L+L (Anzahlungen)MATTER_CODE_LL_PREPAYMENTZahl3noyes
100EU-Steuersatz (Anzahlungen)EU_TAX_RATE_PREPAYMENTZahl22noyes
101Erlöskonto (Anzahlungen)REVENUE_ACCOUNT_PREPAYMENTKonto9noyes
102Herkunft-KzORIGIN_CODEText2noyes
103Buchungs GUIDPOSTING_GUIDText36noyes
104KOST-DatumCOST_DATEDatum8noyes
105SEPA-MandatsreferenzSEPA_MANDATE_REFERENCEText35noyes
106SkontosperreCASH_DISCOUNT_BLOCKZahl1noyes
107GesellschafternameSHAREHOLDER_NAMEText76noyes
108BeteiligtennummerPARTICIPANT_NUMBERZahl4noyes
109IdentifikationsnummerIDENTIFICATION_NUMBERText11noyes
110ZeichnernummerSUBSCRIBER_NUMBERText20noyes
111Postensperre bisITEM_BLOCK_UNTILDatum8noyes
112Bezeichnung SoBil-SachverhaltSOBIL_MATTER_LABELText30noyes
113Kennzeichen SoBil-BuchungSOBIL_POSTING_FLAGZahl2noyes
114FestschreibungFINAL_POSTING_FLAGZahl1noyes
115LeistungsdatumSERVICE_DATEDatum8noyes
116Datum Zuord. SteuerperiodeTAX_PERIOD_DATEDatum8noyes
117FälligkeitDUE_DATEDatum8noyes
118Generalumkehr (GU)GENERAL_REVERSALText1noyes
119SteuersatzTAX_RATEZahl22noyes
120LandCOUNTRYText2noyes
121AbrechnungsreferenzSETTLEMENT_REFERENCEText50noyes
122BVV-PositionBVV_POSITIONZahl1noyes
123EU-Land u. UStID (Ursprung)EU_COUNTRY_VAT_ID_ORIGINText15noyes
124EU-Steuersatz (Ursprung)EU_TAX_RATE_ORIGINZahl22noyes
125Abw. SkontokontoDIFFERING_CASH_DISCOUNT_ACCOUNTKonto8nono

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.