Feldreferenz · Schema v13 und v12 · 0.2.0

Alle 125 Buchungsstapel-Spalten in amtlicher Reihenfolge.

Feldnummern, exakte Überschriften, Prüfprogramm-Typen und Längen für Formatversion 13 — mit den Unterschieden, die bei Formatversion 12 zählen.

Was diese Tabelle ist

Eine Buchungszeile im DATEV-Buchungsstapel hat eine feste Anzahl Spalten in fester Reihenfolge. Formatversion 13 definiert 125 Spalten, Version 12 die ersten 124 und lässt Abw. Skontokonto weg. Die Reihenfolge trägt Bedeutung: eine Zeile ist positionsbasiert, Feld 7 ist Konto — unabhängig davon, ob Feld 6 gefüllt wurde.

Die Tabelle wird aus DatevFieldSpecs erzeugt, der einzigen kanonischen Schemakopie, aus der sich jedes Modul dieser Bibliothek ableitet. Sie ist keine handgepflegte Abschrift und kann daher nicht von dem abweichen, was die Exporter tatsächlich schreiben.

Ein technisches Schema, keine buchhalterische Anleitung

Zu wissen, dass Feld 9 BU-Schlüssel heißt, sagt nichts darüber, welcher Buchungsschlüssel im konkreten Fall richtig ist. Kontenzuordnung, steuerliche Behandlung und Buchungslogik bleiben bei der aufrufenden Anwendung und der steuerlichen Beratung.

Aufbau des Schemas

125Spalten in Version 13
124Spalten in Version 12
5vom Prüfprogramm als notwendig markiert
5logische Feldtypen
Feldtypen über die 125 Spalten der Version 13
TypName im PrüfprogrammSpaltenBedeutung
TEXTText84Gequoteter Textwert; die maximale Länge zählt Zeichen.
NUMBERZahl27Ungequoteter numerischer Wert mit optionalem Komma als Dezimaltrenner.
DATEDatum7Datum im DATEV-Format.
ACCOUNTKonto4Numerische Kontonummer, zusätzlich durch die Sachkontenlänge eingegrenzt.
AMOUNTBetrag3Positiver Betrag; das Vorzeichen steht im Soll/Haben-Kennzeichen.

Die fünf Pflichtfelder

Die strikte Validierung meldet einen leeren Wert in diesen Spalten als REQUIRED_FIELD. Jede andere Spalte darf leer bleiben.

#Amtliche ÜberschriftDatevField-KonstanteTyp
1Umsatz (ohne Soll/Haben-Kz)AMOUNTBetrag
2Soll/Haben-KennzeichenDEBIT_CREDIT_FLAGText
7KontoACCOUNTKonto
8Gegenkonto (ohne BU-Schlüssel)CONTRA_ACCOUNTKonto
10BelegdatumDOCUMENT_DATEDatum

Wiederholende Gruppen und eine Schreibweisen-Falle

Zwei Spaltenfamilien wiederholen sich als Art-/Inhalt-Paare. Wird nur eine Hälfte gefüllt, meldet der strikte Modus DEPENDENT_FIELD_MISSING.

  • Beleginfo - Art 1Beleginfo - Inhalt 8 — acht Paare, Felder 21–36.
  • Zusatzinformation - Art 1Zusatzinformation- Inhalt 20 — zwanzig Paare, Felder 48–87.
Auf das Leerzeichen achten

DATEV schreibt das Paar uneinheitlich: Zusatzinformation - Art 1 mit Leerzeichen um den Bindestrich, Zusatzinformation- Inhalt 1 ohne. Beide Schreibweisen werden exakt reproduziert. Mit den DatevField-Konstanten wird ein Tippfehler zum Compile-Fehler statt zu einer abgelehnten Datei.

Vollständige Feldtabelle

Spalten des DATEV-Buchungsstapels, Formatversion 13, in Ausgabereihenfolge
#Amtliche ÜberschriftDatevField-KonstanteTypMax. LängeNachkommastellenPflichtIn v12
1Umsatz (ohne Soll/Haben-Kz)AMOUNTBetrag102jaja
2Soll/Haben-KennzeichenDEBIT_CREDIT_FLAGText1jaja
3WKZ UmsatzCURRENCYText3neinja
4KursEXCHANGE_RATEZahl56neinja
5Basis-UmsatzBASE_AMOUNTBetrag102neinja
6WKZ Basis-UmsatzBASE_CURRENCYText3neinja
7KontoACCOUNTKonto9jaja
8Gegenkonto (ohne BU-Schlüssel)CONTRA_ACCOUNTKonto9jaja
9BU-SchlüsselPOSTING_KEYText4neinja
10BelegdatumDOCUMENT_DATEDatum8jaja
11Belegfeld 1DOCUMENT_FIELD_1Text36neinja
12Belegfeld 2DOCUMENT_FIELD_2Text12neinja
13SkontoCASH_DISCOUNTBetrag82neinja
14BuchungstextPOSTING_TEXTText60neinja
15PostensperreITEM_BLOCKZahl1neinja
16Diverse AdressnummerMISC_ADDRESS_NUMBERText9neinja
17GeschäftspartnerbankPARTNER_BANKZahl3neinja
18SachverhaltMATTER_CODEZahl2neinja
19ZinssperreINTEREST_BLOCKZahl1neinja
20BeleglinkDOCUMENT_LINKText210neinja
21Beleginfo - Art 1DOCUMENT_INFO_TYPE_1Text20neinja
22Beleginfo - Inhalt 1DOCUMENT_INFO_CONTENT_1Text210neinja
23Beleginfo - Art 2DOCUMENT_INFO_TYPE_2Text20neinja
24Beleginfo - Inhalt 2DOCUMENT_INFO_CONTENT_2Text210neinja
25Beleginfo - Art 3DOCUMENT_INFO_TYPE_3Text20neinja
26Beleginfo - Inhalt 3DOCUMENT_INFO_CONTENT_3Text210neinja
27Beleginfo - Art 4DOCUMENT_INFO_TYPE_4Text20neinja
28Beleginfo - Inhalt 4DOCUMENT_INFO_CONTENT_4Text210neinja
29Beleginfo - Art 5DOCUMENT_INFO_TYPE_5Text20neinja
30Beleginfo - Inhalt 5DOCUMENT_INFO_CONTENT_5Text210neinja
31Beleginfo - Art 6DOCUMENT_INFO_TYPE_6Text20neinja
32Beleginfo - Inhalt 6DOCUMENT_INFO_CONTENT_6Text210neinja
33Beleginfo - Art 7DOCUMENT_INFO_TYPE_7Text20neinja
34Beleginfo - Inhalt 7DOCUMENT_INFO_CONTENT_7Text210neinja
35Beleginfo - Art 8DOCUMENT_INFO_TYPE_8Text20neinja
36Beleginfo - Inhalt 8DOCUMENT_INFO_CONTENT_8Text210neinja
37KOST1 - KostenstelleCOST_CENTER_1Text36neinja
38KOST2 - KostenstelleCOST_CENTER_2Text36neinja
39Kost-MengeCOST_QUANTITYZahl124neinja
40EU-Land u. UStID (Bestimmung)EU_COUNTRY_VAT_ID_DESTINATIONText15neinja
41EU-Steuersatz (Bestimmung)EU_TAX_RATE_DESTINATIONZahl22neinja
42Abw. VersteuerungsartDIFFERING_TAXATION_TYPEText1neinja
43Sachverhalt L+LMATTER_CODE_LLZahl3neinja
44Funktionsergänzung L+LFUNCTION_SUPPLEMENT_LLZahl3neinja
45BU 49 HauptfunktionstypBU49_MAIN_FUNCTION_TYPEZahl1neinja
46BU 49 HauptfunktionsnummerBU49_MAIN_FUNCTION_NUMBERZahl2neinja
47BU 49 FunktionsergänzungBU49_FUNCTION_SUPPLEMENTZahl3neinja
48Zusatzinformation - Art 1ADDITIONAL_INFO_TYPE_1Text20neinja
49Zusatzinformation- Inhalt 1ADDITIONAL_INFO_CONTENT_1Text210neinja
50Zusatzinformation - Art 2ADDITIONAL_INFO_TYPE_2Text20neinja
51Zusatzinformation- Inhalt 2ADDITIONAL_INFO_CONTENT_2Text210neinja
52Zusatzinformation - Art 3ADDITIONAL_INFO_TYPE_3Text20neinja
53Zusatzinformation- Inhalt 3ADDITIONAL_INFO_CONTENT_3Text210neinja
54Zusatzinformation - Art 4ADDITIONAL_INFO_TYPE_4Text20neinja
55Zusatzinformation- Inhalt 4ADDITIONAL_INFO_CONTENT_4Text210neinja
56Zusatzinformation - Art 5ADDITIONAL_INFO_TYPE_5Text20neinja
57Zusatzinformation- Inhalt 5ADDITIONAL_INFO_CONTENT_5Text210neinja
58Zusatzinformation - Art 6ADDITIONAL_INFO_TYPE_6Text20neinja
59Zusatzinformation- Inhalt 6ADDITIONAL_INFO_CONTENT_6Text210neinja
60Zusatzinformation - Art 7ADDITIONAL_INFO_TYPE_7Text20neinja
61Zusatzinformation- Inhalt 7ADDITIONAL_INFO_CONTENT_7Text210neinja
62Zusatzinformation - Art 8ADDITIONAL_INFO_TYPE_8Text20neinja
63Zusatzinformation- Inhalt 8ADDITIONAL_INFO_CONTENT_8Text210neinja
64Zusatzinformation - Art 9ADDITIONAL_INFO_TYPE_9Text20neinja
65Zusatzinformation- Inhalt 9ADDITIONAL_INFO_CONTENT_9Text210neinja
66Zusatzinformation - Art 10ADDITIONAL_INFO_TYPE_10Text20neinja
67Zusatzinformation- Inhalt 10ADDITIONAL_INFO_CONTENT_10Text210neinja
68Zusatzinformation - Art 11ADDITIONAL_INFO_TYPE_11Text20neinja
69Zusatzinformation- Inhalt 11ADDITIONAL_INFO_CONTENT_11Text210neinja
70Zusatzinformation - Art 12ADDITIONAL_INFO_TYPE_12Text20neinja
71Zusatzinformation- Inhalt 12ADDITIONAL_INFO_CONTENT_12Text210neinja
72Zusatzinformation - Art 13ADDITIONAL_INFO_TYPE_13Text20neinja
73Zusatzinformation- Inhalt 13ADDITIONAL_INFO_CONTENT_13Text210neinja
74Zusatzinformation - Art 14ADDITIONAL_INFO_TYPE_14Text20neinja
75Zusatzinformation- Inhalt 14ADDITIONAL_INFO_CONTENT_14Text210neinja
76Zusatzinformation - Art 15ADDITIONAL_INFO_TYPE_15Text20neinja
77Zusatzinformation- Inhalt 15ADDITIONAL_INFO_CONTENT_15Text210neinja
78Zusatzinformation - Art 16ADDITIONAL_INFO_TYPE_16Text20neinja
79Zusatzinformation- Inhalt 16ADDITIONAL_INFO_CONTENT_16Text210neinja
80Zusatzinformation - Art 17ADDITIONAL_INFO_TYPE_17Text20neinja
81Zusatzinformation- Inhalt 17ADDITIONAL_INFO_CONTENT_17Text210neinja
82Zusatzinformation - Art 18ADDITIONAL_INFO_TYPE_18Text20neinja
83Zusatzinformation- Inhalt 18ADDITIONAL_INFO_CONTENT_18Text210neinja
84Zusatzinformation - Art 19ADDITIONAL_INFO_TYPE_19Text20neinja
85Zusatzinformation- Inhalt 19ADDITIONAL_INFO_CONTENT_19Text210neinja
86Zusatzinformation - Art 20ADDITIONAL_INFO_TYPE_20Text20neinja
87Zusatzinformation- Inhalt 20ADDITIONAL_INFO_CONTENT_20Text210neinja
88StückPIECESZahl8neinja
89GewichtWEIGHTZahl82neinja
90ZahlweisePAYMENT_METHODZahl2neinja
91ForderungsartRECEIVABLE_TYPEText10neinja
92VeranlagungsjahrASSESSMENT_YEARZahl4neinja
93Zugeordnete FälligkeitASSIGNED_DUE_DATEDatum8neinja
94SkontotypCASH_DISCOUNT_TYPEZahl1neinja
95AuftragsnummerORDER_NUMBERText30neinja
96BuchungstypPOSTING_TYPEText2neinja
97USt-Schlüssel (Anzahlungen)VAT_KEY_PREPAYMENTZahl2neinja
98EU-Land (Anzahlungen)EU_COUNTRY_PREPAYMENTText2neinja
99Sachverhalt L+L (Anzahlungen)MATTER_CODE_LL_PREPAYMENTZahl3neinja
100EU-Steuersatz (Anzahlungen)EU_TAX_RATE_PREPAYMENTZahl22neinja
101Erlöskonto (Anzahlungen)REVENUE_ACCOUNT_PREPAYMENTKonto9neinja
102Herkunft-KzORIGIN_CODEText2neinja
103Buchungs GUIDPOSTING_GUIDText36neinja
104KOST-DatumCOST_DATEDatum8neinja
105SEPA-MandatsreferenzSEPA_MANDATE_REFERENCEText35neinja
106SkontosperreCASH_DISCOUNT_BLOCKZahl1neinja
107GesellschafternameSHAREHOLDER_NAMEText76neinja
108BeteiligtennummerPARTICIPANT_NUMBERZahl4neinja
109IdentifikationsnummerIDENTIFICATION_NUMBERText11neinja
110ZeichnernummerSUBSCRIBER_NUMBERText20neinja
111Postensperre bisITEM_BLOCK_UNTILDatum8neinja
112Bezeichnung SoBil-SachverhaltSOBIL_MATTER_LABELText30neinja
113Kennzeichen SoBil-BuchungSOBIL_POSTING_FLAGZahl2neinja
114FestschreibungFINAL_POSTING_FLAGZahl1neinja
115LeistungsdatumSERVICE_DATEDatum8neinja
116Datum Zuord. SteuerperiodeTAX_PERIOD_DATEDatum8neinja
117FälligkeitDUE_DATEDatum8neinja
118Generalumkehr (GU)GENERAL_REVERSALText1neinja
119SteuersatzTAX_RATEZahl22neinja
120LandCOUNTRYText2neinja
121AbrechnungsreferenzSETTLEMENT_REFERENCEText50neinja
122BVV-PositionBVV_POSITIONZahl1neinja
123EU-Land u. UStID (Ursprung)EU_COUNTRY_VAT_ID_ORIGINText15neinja
124EU-Steuersatz (Ursprung)EU_TAX_RATE_ORIGINZahl22neinja
125Abw. SkontokontoDIFFERING_CASH_DISCOUNT_ACCOUNTKonto8neinnein

Ein Feld aus Java ansprechen

Jede DatevColumn-Factory akzeptiert entweder die Enum-Konstante oder die Überschrift als Zeichenkette; beide erzeugen identische Ausgabe. Die Konstante wird zur Übersetzungszeit geprüft.

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

Die DatevField-Konstanten sind in Ausgabereihenfolge deklariert, daher ist ordinal() + 1 die DATEV-Feldnummer. isPresentIn(DatevSchema.LEGACY_V12) beantwortet die Version-12-Frage für jedes Feld.