lib/datev/base/booking.rb
module Datev
class Booking < Base
# http://www.datev.de/dnlexom/client/app/index.html#/document/1036228/D103622800010
# 1
field 'Umsatz (ohne Soll/Haben-Kz)', :decimal, precision: 12, scale: 2, required: true
# Beispiel: 1234567890,12
# Muss immer ein positiver Wert sein
# 2
field 'Soll/Haben-Kennzeichen', :string, limit: 1, required: true
# Die Soll-/Haben-Kennzeichnung des Umsatzes bezieht sich auf das Konto, das im Feld Konto angegeben wird:
# S = Soll
# H = Haben
# 3
field 'WKZ Umsatz', :string, limit: 3
# Dreistelliger ISO-Code der Währung (Dok.-Nr. 1080170); gibt an, welche Währung dem Betrag zugrunde liegt.
# Wenn kein Wert angegeben ist, wird das WKZ aus dem Header übernommen.
# 4
field 'Kurs', :decimal, precision: 10, scale: 6
# Der Fremdwährungskurs bestimmt, wie der angegebene Umsatz, der in Fremdwährung übergeben wird, in die Basiswährung umzurechnen ist, wenn es sich um ein Nicht-EWU-Land handelt.
# Beispiel: 1123,123456
# Achtung: Der Wert 0 ist unzulässig.
# 5
field 'Basisumsatz', :decimal, precision: 12, scale: 2
# Wenn das Feld Basisumsatz verwendet wird, muss auch das Feld WKZ Basisumsatz gefüllt werden.
# Beispiel: 1123123123,12
# 6
field 'WKZ Basisumsatz', :string, limit: 3
# Währungskennzeichen der hinterlegten Basiswährung. Wenn das Feld WKZ Basisumsatz verwendet wird, muss auch das Feld Basisumsatz verwendet werden.
# ISO-Code beachten (siehe Dok.-Nr.1080170)
# 7
field 'Konto', :integer, limit: 9, required: true do
# Sach- oder Personen-Kontonummer
# Darf max. 8- bzw. max. 9-stellig sein (abhängig von der Information im Header)
# Die Personenkontenlänge darf nur 1 Stelle länger sein als die definierte Sachkontennummernlänge.
def output(value, context)
length = context['Sachkontenlänge']
value.to_s.rjust(length, '0')
end
end
# 8
field 'Gegenkonto (ohne BU-Schlüssel)', :integer, limit: 9, required: true do
# Sach- oder Personen-Kontonummer
# Darf max. 8- bzw. max. 9-stellig sein (abhängig von der Information im Header)
# Die Personenkontenlänge darf nur 1 Stelle länger sein als die definierte Sachkontennummernlänge.
def output(value, context)
length = context['Sachkontenlänge']
value.to_s.rjust(length, '0')
end
end
# 9
field 'BU-Schlüssel', :string, limit: 4
# Steuerschlüssel und/oder Berichtigungsschlüssel
# 10
field 'Belegdatum', :date, format: '%d%m', required: true
# Achtung: Auch bei individueller Feldformatierung mit vierstelliger Jahreszahl wird immer in das aktuelle Wirtschaftsjahr importiert, wenn Tag und Monat des Datums im bebuchbaren Zeitraum liegen, da die Jahreszahl nicht berücksichtigt wird.
# 11
field 'Belegfeld 1', :string, limit: 36, regex: %r{\A[a-zA-Z0-9\$\&\%\*\+\-\/]*\z}
# Rechnungs-/Belegnummer
# Das Belegfeld 1 ist der "Schlüssel" für die Verwaltung von Offenen Posten.
# Bei einer Zahlung oder Gutschrift erfolgt nur dann ein OP-Ausgleich, wenn die Belegnummer mit dem Belegfeld 1 identisch ist.
# 12
field 'Belegfeld 2', :string, limit: 12, regex: %r{\A[a-zA-Z0-9\$\&\%\*\+\-\/]*\z}
# Belegnummer oder OPOS-Verarbeitungsinformationen
# 13
field 'Skonto', :decimal, precision: 10, scale: 2
# Skonto-Betrag/-Abzug
# Nur bei Zahlungen zulässig.
# Beispiel 12123123,12
# Achtung: Der Wert 0 ist unzulässig.
# 14
field 'Buchungstext', :string, limit: 60
# 15
field 'Postensperre', :boolean
# Mahn-/Zahl-Sperre
# Die Rechnung kann aus dem Mahnwesen / Zahlungsvorschlag ausgeschlossen werden.
# true = Postensperre
# false/keine Angabe = keine Sperre
# Nur in Verbindung mit einer Rechnungsbuchung und Personenkonto (OPOS) relevant.
# 16
field 'Diverse Adressnummer', :string, limit: 9
# Adressnummer einer diversen Adresse
# Nur in Verbindung mit OPOS relevant.
# 17
field 'Geschäftspartnerbank', :integer, limit: 3
# Wenn für eine Lastschrift oder Überweisung eine bestimmte Bank des Geschäftspartners genutzt werden soll.
# Nur in Verbindung mit OPOS relevant.
# 18
field 'Sachverhalt', :integer, limit: 2
# Der Sachverhalt wird in Rechnungswesen pro verwendet, um Buchungen/Posten als Mahnzins/Mahngebühr zu identifizieren.
# Für diese Posten werden z. B. beim Erstellen von Mahnungen keine Mahnzinsen berechnet.
# 31 = Mahnzins
# 40 = Mahngebühr
# Nur in Verbindung mit OPOS relevant.
# 19
field 'Zinssperre', :boolean
# Hier kann eine Zinssperre übergeben werden; dadurch werden für diesen Posten bei Erstellung einer Mahnung keine Mahnzinsen ermittelt.
# Nur in Verbindung mit OPOS relevant.
# keine Angabe und 0 = keine Sperre
# 1 = Zinssperre
# 20
field 'Beleglink', :string, limit: 210
# Link auf den Buchungsbeleg, der digital in einem Dokumenten-Management-System (z. B. DATEV Dokumentenablage, DATEV DMS classic) abgelegt wurde.
# Der Beleglink hat folgenden Aufbau:
# 4-stelliges Kürzel für Dokumentenmanagementsystem (siehe unten)
# Leerzeichen
# Anführungszeichen
# Beleglink (GUID, Dateiname des Belegs), max. 36 Zeichen
# Schlusszeichen
# Beispiel für einen Beleglink aus Belege online:
# BEDI “CB6A8F8F-099A-B3A9-2BAA-0CB64E299BA”
# Das Kürzel bezeichnet das Quellsystem (Dokumentenmanagement), indem die digitalen Belege abgelegt sind.
# DATEV verwendet für seine Dokumentenmanagement-Systeme folgende Kürzel:
# Belegverwaltung online → BEDI
# DATEV DMS → DDMS
# Dokumentenablage → DDMS (vormals DORG)
# 21 bis 36
(1..8).each do |number|
field "Beleginfo – Art #{number}", :string, limit: 20
field "Beleginfo – Inhalt #{number}", :string, limit: 210
end
# Bei einem ASCII-Format, das aus einem DATEV pro-Rechnungswesen-Programm erstellt wurde, können diese Felder Informationen aus einem Beleg (z. B. einem elektronischen Kontoumsatz) enthalten.
# Wenn die Feldlänge eines Beleginfo-Inhalts-Felds überschritten wird, wird die Information im nächsten Beleginfo-Feld weitergeführt.
# Wichtiger Hinweis
# Eine Beleginfo besteht immer aus den Bestandteilen Beleginfo-Art und Beleginfo-Inhalt. Wenn Sie die Beleginfo nutzen möchten, befüllen Sie immer beide Felder.
# Beispiel:
# Beleginfo-Art:
# Kontoumsätze der jeweiligen Bank
# Beleginfo-Inhalt:
# Buchungsspezifische Inhalte zu den oben genannten Informationsarten
# 37
field 'KOST1 – Kostenstelle', :string, limit: 8
# Über KOST1 erfolgt die Zuordnung des Geschäftsvorfalls für die anschließende Kostenrechnung.
# 38
field 'KOST2 – Kostenstelle', :string, limit: 8
# Über KOST2 erfolgt die Zuordnung des Geschäftsvorfalls für die anschließende Kostenrechnung.
# 39
field 'Kost Menge', :decimal, precision: 11, scale: 2
# Im KOST-Mengenfeld wird die Wertgabe zu einer bestimmten Bezugsgröße für eine Kostenstelle erfasst. Diese Bezugsgröße kann z. B. kg, g, cm, m, % sein. Die Bezugsgröße ist definiert in den Kostenrechnungs-Stammdaten.
# Beispiel: 123123123,12
# 40
field 'EU-Land u. USt-IdNr.', :string, limit: 15
# Die USt-IdNr. besteht aus:
# 2-stelligen Länderkürzel (siehe Dok.-Nr. 1080169; Ausnahme Griechenland: Das Länderkürzel lautet EL)
# 13-stelliger USt-IdNr.
# 41
field 'EU-Steuersatz', :decimal, precision: 4, scale: 2
# Nur für entsprechende EU-Buchungen:
# Der im EU-Bestimmungsland gültige Steuersatz.
# Beispiel: 12,12
# 42
field 'Abw. Versteuerungsart', :string, limit: 1
# Für Buchungen, die in einer von der Mandantenstammdaten-Schlüsselung abweichenden Umsatzsteuerart verarbeitet werden sollen, kann die abweichende Versteuerungsart im Buchungssatz übergeben werden:
# I = Ist-Versteuerung
# K = keine Umsatzsteuerrechnung
# P = Pauschalierung (z. B. für Land- und Forstwirtschaft)
# S = Soll-Versteuerung
# 43
field 'Sachverhalt L+L', :integer, limit: 3
# Sachverhalte gem. § 13b Abs. 1 Satz 1 Nrn. 1.ff UStG
# Achtung: Der Wert 0 ist unzulässig.
# (siehe Dok.-Nr. 1034915)
# 44
field 'Funktionsergänzung L+L', :integer, limit: 3
# Steuersatz/Funktion zum L+L-Sachverhalt
# Achtung: Der Wert 0 ist unzulässig.
# (siehe Dok.-Nr. 1034915)
# 45
field 'BU 49 Hauptfunktionstyp', :integer, limit: 1
# Bei Verwendung des BU-Schlüssels 49 für "andere Steuersätze" muss der steuerliche Sachverhalt mitgegeben werden.
# 46
field 'BU 49 Hauptfunktionsnummer', :integer, limit: 2
# 47
field 'BU 49 Funktionsergänzung', :integer, limit: 3
# 48 bis 87
(1..20).each do |number|
field "Zusatzinformation – Art #{number}", :string, limit: 20
field "Zusatzinformation – Inhalt #{number}", :string, limit: 210
end
# Zusatzinformationen, die zu Buchungssätzen erfasst werden können.
# Diese Zusatzinformationen besitzen den Charakter eines Notizzettels und können frei erfasst werden.
# Wichtiger Hinweis
# Eine Zusatzinformation besteht immer aus den Bestandteilen Informationsart und Informationsinhalt. Wenn Sie die Zusatzinformation nutzen möchten, füllen Sie immer beide Felder.
# Beispiel:
# Informationsart, z. B. Filiale oder Mengengrößen (qm)
# Informationsinhalt: Buchungsspezifische Inhalte zu den oben genannten Informationsarten.
# 88
field 'Stück', :integer, limit: 8
# Wirkt sich nur bei Sachverhalt mit SKR14 Land- und Forstwirtschaft aus, für andere SKR werden die Felder beim Import/Export überlesen bzw. leer exportiert.
# 89
field 'Gewicht', :decimal, limit: 10, scale: 2
# 90
field 'Zahlweise', :integer, limit: 2
# OPOS-Informationen kommunal
# 1 = Lastschrift
# 2 = Mahnung
# 3 = Zahlung
# 91
field 'Forderungsart', :string, limit: 10
# OPOS-Informationen kommunal
# 92
field 'Veranlagungsjahr', :date, format: '%Y'
# OPOS-Informationen kommunal
# 93
field 'Zugeordnete Fälligkeit', :date, format: '%d%m%Y'
# OPOS-Informationen kommunal
# 94
field 'Skontotyp', :integer, limit: 1
# 1 = Einkauf von Waren
# 2 = Erwerb von Roh-Hilfs- und Betriebsstoffen
# 95
field 'Auftragsnummer', :string, limit: 30
# Allgemeine Bezeichnung, des Auftrags/Projekts
# 96
field 'Buchungstyp', :string, limit: 2
# AA = Angeforderte Anzahlung/Abschlagsrechnung
# AG = Erhaltene Anzahlung (Geldeingang)
# AV = Erhaltene Anzahlung (Verbindlichkeit)
# SR = Schlussrechnung
# SU = Schlussrechnung (Umbuchung)
# SG = Schlussrechnung (Geldeingang)
# SO = Sonstige
# 97
field 'USt-Schlüssel (Anzahlungen)', :integer, limit: 2
# USt-Schlüssel der späteren Schlussrechnung
# 98
field 'EU-Mitgliedstaat (Anzahlungen)', :string, limit: 2
# EU-Mitgliedstaat der späteren Schlussrechnung
# (siehe Dok.-Nr. 1080169)
# 99
field 'Sachverhalt L+L (Anzahlungen)', :integer, limit: 3
# L+L-Sachverhalt der späteren Schlussrechnung
# Sachverhalte gem. § 13b Abs. 1 Satz 1 Nrn. 1.-5. UStG
# Achtung: Der Wert 0 ist unzulässig.
# 100
field 'EU-Steuersatz (Anzahlungen)', :decimal, precision: 4, scale: 2
# EU-Steuersatz der späteren Schlussrechnung
# Nur für entsprechende EU-Buchungen: Der im EU-Bestimmungsland gültige Steuersatz.
# Beispiel: 12,12
# 101
field 'Erlöskonto (Anzahlungen)', :integer, limit: 9
# Erlöskonto der späteren Schlussrechnung
# 102
field 'Herkunft-Kz', :string, limit: 2
# Wird beim Import durch SV (Stapelverarbeitung) ersetzt.
# 103
field 'Leerfeld', :string, limit: 36
# Wird von DATEV verwendet.
# 104
field 'KOST-Datum', :date, format: '%d%m%Y'
# Format TTMMJJJJ
# 105
field 'SEPA-Mandatsreferenz', :string, limit: 35
# Vom Zahlungsempfänger individuell vergebenes Kennzeichen eines Mandats (z. B. Rechnungs- oder Kundennummer).
# 106
field 'Skontosperre', :boolean
# 0 = keine Skontosperre
# 1 = Skontosperre
# 107
field 'Gesellschaftername', :string, limit: 76
# 108
field 'Beteiligtennummer', :integer, limit: 4
# 109
field 'Identifikationsnummer', :string, limit: 11
# 110
field 'Zeichnernummer', :string, limit: 20
# 111
field 'Postensperre bis', :date, format: '%d%m%Y'
# 112
field 'Bezeichnung', :string, limit: 30
# SoBil-Sachverhalt
# 113
field 'Kennzeichen', :integer, limit: 2
# SoBil-Buchung
# 114
field 'Festschreibung', :boolean
# leer = nicht definiert; wird ab Jahreswechselversion 2016/2017 automatisch festgeschrieben
# 0 = keine Festschreibung
# 1 = Festschreibung
# Hat ein Buchungssatz in diesem Feld den Inhalt 1, so wird der gesamte Stapel nach dem Import festgeschrieben.
# Ab Jahreswechselversion 2016/2017 gilt das auch bei Inhalt = leer.
# 115
field 'Leistungsdatum', :date, format: '%d%m%Y'
# 116
field 'Datum Zuord.', :date, format: '%d%m%Y'
# Steuerperiode
# Neue Felder ab Programmversion 7.1
# 117
field 'Fälligkeit', :date, format: '%d%m%Y'
# OPOS Informationen
# 118
field 'Generalumkehr', :string, limit: 1
# 1 = Generalumkehr
# 0 = keine Generalumkehr
# 119
field 'Steuersatz', :decimal, precision: 4, scale: 2
# 120
field 'Land', :string, limit: 2
# Beispiel: DE für Deutschland
end
end