king_dtaus 2.0.2.pre → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +9 -0
- data/Gemfile +1 -6
- data/README.markdown +59 -59
- data/Rakefile +11 -24
- data/king_dtaus.gemspec +22 -65
- data/lib/king_dta/account.rb +53 -27
- data/lib/king_dta/dta.rb +10 -0
- data/lib/king_dta/dtaus.rb +121 -130
- data/lib/king_dta/dtazv.rb +185 -226
- data/lib/king_dta/version.rb +3 -0
- data/spec/account_spec.rb +72 -21
- data/spec/dtaus_spec.rb +35 -12
- data/spec/dtazv_spec.rb +9 -12
- data/spec/spec_helper.rb +37 -36
- metadata +115 -119
- data/VERSION +0 -1
- data/docs/dtazv.pdf +0 -0
- data/docs/dtazv_bank_bbk.pdf +0 -0
- data/docs/example.output +0 -7
- data/spec/dtazv_test.rb +0 -105
data/lib/king_dta/dtaus.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
#Erstelle eine DTAUS-Datei.
|
3
|
-
#Typ ist 'LK' (Lastschrift Kunde) oder 'GK' (Gutschrift Kunde)
|
4
|
-
#
|
5
|
-
#Infos zu DTAUS: http://www.infodrom.org/projects/dtaus/dtaus.php3
|
6
|
-
|
7
2
|
module KingDta
|
3
|
+
#Create a DTAUS string.
|
4
|
+
# == infos
|
5
|
+
# https://www.ksk-koeln.de/formatbeschreibung_datentraegeraustausch.pdfx
|
6
|
+
# http://www.infodrom.org/projects/dtaus/dtaus.html
|
8
7
|
class Dtaus < KingDta::Dta
|
9
8
|
attr_reader :sum_bank_account_numbers, :sum_bank_numbers, :sum_values
|
10
9
|
|
@@ -13,13 +12,9 @@ module KingDta
|
|
13
12
|
# typ<String>:: valid strings are 'LK' (Lastschrift Kunde) and 'GK' (Gutschrift Kunde)
|
14
13
|
# typ<Date>:: date when the the transfer is to be created
|
15
14
|
def initialize( typ, date=Date.today )
|
16
|
-
raise ArgumentError.new("Wrong date format. Make it a Time or Date object with yyyy-mm-dd") unless date.respond_to?(:strftime)
|
17
15
|
raise ArgumentError.new("Unknown order type: #{typ}. Allowed Values are LK, GK") unless ['LK','GK'].include?(typ)
|
18
|
-
@
|
19
|
-
|
20
|
-
@value_pos = true #all values are positive by default. Variable changes with first booking entry
|
21
|
-
@closed = false
|
22
|
-
@default_text = '' # default verwendungzweck
|
16
|
+
@typ = typ
|
17
|
+
super(date)
|
23
18
|
end
|
24
19
|
|
25
20
|
# Creates the whole dta string(in the right order) and returns it
|
@@ -41,108 +36,107 @@ module KingDta
|
|
41
36
|
def set_checksums
|
42
37
|
@sum_bank_account_numbers, @sum_bank_numbers, @sum_values = 0,0,0
|
43
38
|
bookings.each do |b|
|
44
|
-
@sum_bank_account_numbers += b.account.
|
45
|
-
@sum_bank_numbers += b.account.bank_number
|
39
|
+
@sum_bank_account_numbers += b.account.bank_account_number
|
40
|
+
@sum_bank_numbers += b.account.bank_number
|
46
41
|
@sum_values += b.value
|
47
42
|
end
|
48
43
|
end
|
49
44
|
|
50
45
|
#Erstellen A-Segment der DTAUS-Datei
|
51
46
|
#Aufbau des Segments:
|
52
|
-
# Nr.
|
53
|
-
# 1 0 4
|
54
|
-
# 2 4 1
|
55
|
-
# 3 5 2
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
# 4 7
|
61
|
-
# 5 15 8
|
62
|
-
# 6 23 27
|
63
|
-
# 7 50 6
|
64
|
-
# 8 56 4
|
65
|
-
# 9 60 10
|
66
|
-
# 10 70 10
|
67
|
-
# 11a 80 15
|
68
|
-
# 11b 95 8
|
69
|
-
# 11c 103
|
70
|
-
# 12 127
|
71
|
-
#
|
72
|
-
# "1" = Euro
|
47
|
+
# Nr. Start Länge Beschreibung
|
48
|
+
# 1 0 4 Länge des Datensatzes, immer 128 Bytes, also immer "0128"
|
49
|
+
# 2 4 1 Datensatz-Typ, immer 'A'
|
50
|
+
# 3 5 2 Art der Transaktionen
|
51
|
+
# "LB" für Lastschriften Bankseitig
|
52
|
+
# "LK" für Lastschriften Kundenseitig
|
53
|
+
# "GB" für Gutschriften Bankseitig
|
54
|
+
# "GK" für Gutschriften Kundenseitig
|
55
|
+
# 4 7 8 Bankleitzahl des Auftraggebers
|
56
|
+
# 5 15 8 CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
|
57
|
+
# 6 23 27 Name des Auftraggebers
|
58
|
+
# 7 50 6 aktuelles Datum im Format DDMMJJ
|
59
|
+
# 8 56 4 CST, " " (Blanks)
|
60
|
+
# 9 60 10 Kontonummer des Auftraggebers
|
61
|
+
# 10 70 10 Optionale Referenznummer
|
62
|
+
# 11a 80 15 Reserviert, 15 Blanks
|
63
|
+
# 11b 95 8 Ausführungsdatum Format DDMMJJJJ. max A7 + 15 Tage. Default Blanks.
|
64
|
+
# 11c 103 24 Reserviert, 24 Blanks
|
65
|
+
# 12 127 1 Währungskennzeichen "1" = Euro
|
66
|
+
#
|
73
67
|
# Insgesamt 128 Zeichen
|
74
68
|
def add_a
|
75
69
|
data = '0128'
|
76
|
-
data += 'A'
|
77
|
-
data += @typ
|
78
|
-
data += '%8i' % @account.bank_number #.rjust(8)
|
79
|
-
data += '%08i' % 0
|
80
|
-
data += '%-27.27s' % @account.
|
81
|
-
data += @date.strftime("%d%m%y")
|
82
|
-
data += ' ' * 4
|
83
|
-
data += '%010i' % @account.
|
84
|
-
data += '%010i' % 0
|
85
|
-
data += ' ' * 15
|
86
|
-
data += '%8s' % @date.strftime("%d%m%Y") #Ausführungsdatum
|
87
|
-
data += ' ' * 24
|
88
|
-
data += '1'
|
70
|
+
data += 'A'
|
71
|
+
data += @typ
|
72
|
+
data += '%8i' % @account.bank_number #.rjust(8)
|
73
|
+
data += '%08i' % 0
|
74
|
+
data += '%-27.27s' % @account.owner_name
|
75
|
+
data += @date.strftime("%d%m%y") # creation date - today
|
76
|
+
data += ' ' * 4
|
77
|
+
data += '%010i' % @account.bank_account_number
|
78
|
+
data += '%010i' % 0
|
79
|
+
data += ' ' * 15
|
80
|
+
data += '%8s' % @date.strftime("%d%m%Y") #Ausführungsdatum - ja hier 8 Stellen
|
81
|
+
data += ' ' * 24
|
82
|
+
data += '1'
|
89
83
|
raise "DTAUS: Längenfehler A (#{data.size} <> 128)\n" if data.size != 128
|
90
84
|
dta_string << data
|
91
85
|
end #dataA
|
92
86
|
|
93
87
|
#Erstellen C-Segmente (Buchungen mit Texten) der DTAUS-Datei
|
94
88
|
#Aufbau:
|
95
|
-
# Nr.
|
96
|
-
# 1 0 4
|
97
|
-
# 2 4 1
|
98
|
-
# 3 5 8
|
99
|
-
# 4 13
|
100
|
-
# 5 21
|
101
|
-
# 6 31
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
120
|
-
# 11
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
124
|
-
#
|
89
|
+
# Nr. St Länge Beschreibung
|
90
|
+
# 1 0 4 Länge des Datensatzes, 187 + x * 29 (x..Anzahl Erweiterungsteile)
|
91
|
+
# 2 4 1 Datensatz-Typ, immer 'C'
|
92
|
+
# 3 5 8 Bankleitzahl des Auftraggebers (optional)
|
93
|
+
# 4 13 8 Bankleitzahl des Kunden
|
94
|
+
# 5 21 10 Kontonummer des Kunden
|
95
|
+
# 6 31 13 Verschiedenes
|
96
|
+
# 1. Zeichen: "0"
|
97
|
+
# 2. - 12. Zeichen: interne Kundennummer oder Nullen
|
98
|
+
# 13. Zeichen: "0"
|
99
|
+
# Die interne Nummer wird vom erstbeauftragten Institut zum endbegünstigten Institut weitergeleitet.
|
100
|
+
# Die Weitergabe der internenen Nummer an den Überweisungsempfänger ist der Zahlstelle freigestellt.
|
101
|
+
# 7 44 5 Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
|
102
|
+
# "04000" Lastschrift des Abbuchungsauftragsverfahren
|
103
|
+
# "05000" Lastschrift des Einzugsermächtigungsverfahren
|
104
|
+
# "05005" Lastschrift aus Verfügung im elektronischen Cash-System
|
105
|
+
# "05006" Wie 05005 mit ausländischen Karten
|
106
|
+
# "51000" Überweisungs-Gutschrift
|
107
|
+
# "53000" Überweisung Lohn/Gehalt/Rente
|
108
|
+
# "5400J" Vermögenswirksame Leistung (VL) ohne Sparzulage
|
109
|
+
# "5400J" Vermögenswirksame Leistung (VL) mit Sparzulage
|
110
|
+
# "56000" Überweisung öffentlicher Kassen
|
111
|
+
# Die im Textschlüssel mit J bezeichnete Stelle, wird bei Übernahme
|
112
|
+
# in eine Zahlung automatisch mit der jeweils aktuellen Jahresendziffer (7, wenn 97) ersetzt.
|
113
|
+
# 8 49 1 Reserviert, " " (Blank)
|
114
|
+
# 9 50 11 Betrag in DM
|
115
|
+
# 10 61 8 Bankleitzahl des Auftraggebers
|
116
|
+
# 11 69 10 Kontonummer des Auftraggebers
|
117
|
+
# 12 79 11 Betrag in Euro einschließlich Nachkommastellen
|
118
|
+
# 13 90 3 Reserviert, 3 Blanks
|
119
|
+
# 14a 93 27 Name des Kunden
|
120
|
+
# 14b 120 8 Reserviert, 8 Blanks
|
125
121
|
# Insgesamt 128 Zeichen
|
126
122
|
#
|
127
|
-
# 15 128 27
|
128
|
-
# 16 155 27
|
129
|
-
# 17a 182 1
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
136
|
-
#
|
137
|
-
#
|
138
|
-
#
|
139
|
-
#
|
140
|
-
# 22 218 27 Zeichen wie C20, oder Blanks
|
141
|
-
# 23 245 11 Zeichen 11 Blanks
|
123
|
+
# 15 128 27 Name des Auftraggebers
|
124
|
+
# 16 155 27 Verwendungszweck
|
125
|
+
# 17a 182 1 Währungskennzeichen "1" = Euro
|
126
|
+
# 17b 183 2 Reserviert, 2 Blanks
|
127
|
+
# 18 185 2 Anzahl der Erweiterungsdatensätze, "00" bis "15"
|
128
|
+
# 19 187 2 Typ (1. Erweiterungsdatensatz)
|
129
|
+
# "01" Name des Kunden
|
130
|
+
# "02" Verwendungszweck
|
131
|
+
# "03" Name des Auftraggebers
|
132
|
+
# 20 189 27 Beschreibung gemäß Typ
|
133
|
+
# 21 216 2 wie C19, oder Blanks (2. Erweiterungsdatensatz)
|
134
|
+
# 22 218 27 wie C20, oder Blanks
|
135
|
+
# 23 245 11 Blanks
|
142
136
|
# Insgesamt 256 Zeichen, kann wiederholt werden (max 3 mal)
|
143
137
|
#
|
144
138
|
# === Parameter
|
145
|
-
# booking<Object>::Booking object to be written to c-
|
139
|
+
# booking<Object>::Booking object to be written to c-section
|
146
140
|
#
|
147
141
|
# === Returns
|
148
142
|
# <String>:: The current dta_string
|
@@ -153,48 +147,45 @@ module KingDta
|
|
153
147
|
booking.account_key || Booking::UEBERWEISUNG_GUTSCHRIFT
|
154
148
|
end
|
155
149
|
#Extended segments Long name & booking texts
|
156
|
-
exts = []
|
157
|
-
# 1.
|
150
|
+
exts = []
|
151
|
+
# 1. Part
|
158
152
|
#data1 = '%4i' % ?? #Satzlänge kommt später
|
159
153
|
data1 = 'C'
|
160
|
-
data1 += '%08i' % 0
|
161
|
-
data1 += '
|
162
|
-
data1 += '%010i' % booking.account.
|
163
|
-
|
164
|
-
# Ruby 1.9 '0%011i0' % nil => Exception
|
165
|
-
# Ruby 1.8 '0%011i0' % nil => "00000000000"
|
166
|
-
data1 += '0%011i0' % (booking.account.client_number || 0) #interne Kundennummer
|
154
|
+
data1 += '%08i' % 0
|
155
|
+
data1 += '%-08i' % booking.account.bank_number
|
156
|
+
data1 += '%010i' % booking.account.bank_account_number
|
157
|
+
data1 += '0%011i0' % (booking.account.owner_number || 0) #interne Kundennummer
|
167
158
|
data1 += zahlungsart
|
168
|
-
data1 += ' '
|
169
|
-
data1 += '0' * 11
|
159
|
+
data1 += ' '
|
160
|
+
data1 += '0' * 11
|
170
161
|
data1 += '%08i' % @account.bank_number
|
171
|
-
data1 += '%010i' % @account.
|
162
|
+
data1 += '%010i' % @account.bank_account_number
|
172
163
|
data1 += '%011i' % booking.value #Betrag in Euro einschl. Nachkomma
|
173
164
|
data1 += ' ' * 3
|
174
|
-
data1 += '%-27.27s' % booking.account.
|
175
|
-
exts << ['01', booking.account.
|
165
|
+
data1 += '%-27.27s' % booking.account.owner_name
|
166
|
+
exts << ['01', booking.account.owner_name[27..999] ] if booking.account.owner_name.size > 27
|
176
167
|
data1 += ' ' * 8
|
177
168
|
#Einfügen erst möglich, wenn Satzlänge bekannt
|
178
169
|
|
179
|
-
# 2.
|
180
|
-
data2 = "%27.27s" % @account.
|
170
|
+
# 2. Part
|
171
|
+
data2 = "%27.27s" % @account.owner_name
|
181
172
|
booking_txt = booking.text || default_text
|
182
173
|
#Erste 27 Zeichen
|
183
|
-
#
|
184
|
-
data2 +=
|
174
|
+
#if text < 26 fill with spaces
|
175
|
+
data2 += booking_txt[0..26].ljust(27)
|
185
176
|
booking_txt = booking_txt[27..999]
|
186
|
-
#
|
177
|
+
# cut text into 27 long pieces
|
187
178
|
while booking_txt && booking_txt.size > 0 && exts.size < 13
|
188
179
|
exts << ['02', booking_txt.ljust(27) ]
|
189
180
|
booking_txt = booking_txt[27..999]
|
190
181
|
end
|
191
|
-
exts << ['03', @account.
|
182
|
+
exts << ['03', @account.owner_name[27..999] ] if @account.owner_name.size > 27
|
192
183
|
|
193
|
-
data2 += '1'
|
184
|
+
data2 += '1' #EUR
|
194
185
|
data2 += ' ' * 2
|
195
186
|
# Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
|
196
|
-
data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size+ 2 + exts.size * 29 )
|
197
|
-
raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.
|
187
|
+
data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size + 2 + exts.size * 29 )
|
188
|
+
raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner_name}" unless data1.size == 128
|
198
189
|
dta_string << data1
|
199
190
|
#Anzahl Erweiterungen anfügen
|
200
191
|
data2 += '%02i' % exts.size #Anzahl Erweiterungsteile
|
@@ -205,9 +196,9 @@ module KingDta
|
|
205
196
|
exts[0..1].each{|e| data2 += "%2.2s%-27.27s" % format_ext(e[0], e[1]) }
|
206
197
|
data2 += ' ' * 11
|
207
198
|
# add the final piece of the second C section
|
208
|
-
raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.
|
199
|
+
raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.owner_name}" unless data2.size == 128
|
209
200
|
dta_string << data2
|
210
|
-
#
|
201
|
+
#Create 4 text extensions
|
211
202
|
add_ext( exts[2..5] )
|
212
203
|
add_ext( exts[6..9] )
|
213
204
|
add_ext( exts[10..13] )
|
@@ -243,27 +234,27 @@ module KingDta
|
|
243
234
|
|
244
235
|
#Erstellen E-Segment (Prüfsummen) der DTAUS-Datei
|
245
236
|
#Aufbau:
|
246
|
-
# Nr.
|
247
|
-
# 1 0 4
|
248
|
-
# 2 4 1
|
249
|
-
# 3 5 5
|
250
|
-
# 4 10
|
251
|
-
# 5 17
|
252
|
-
# 6 30
|
253
|
-
# 7 47
|
254
|
-
# 8 64
|
255
|
-
# 9 77
|
237
|
+
# Nr. Start Länge Beschreibung
|
238
|
+
# 1 0 4 Länge des Datensatzes, immer 128 Bytes, also immer "0128"
|
239
|
+
# 2 4 1 Datensatz-Typ, immer 'E'
|
240
|
+
# 3 5 5 " " (Blanks)
|
241
|
+
# 4 10 7 Anzahl der Datensätze vom Typ C
|
242
|
+
# 5 17 13 Kontrollsumme Beträge
|
243
|
+
# 6 30 17 Kontrollsumme Kontonummern
|
244
|
+
# 7 47 17 Kontrollsumme Bankleitzahlen
|
245
|
+
# 8 64 13 Kontrollsumme Euro
|
246
|
+
# 9 77 51 Blanks
|
256
247
|
# Insgesamt 128 Zeichen
|
257
248
|
def add_e
|
258
249
|
str = '0128'
|
259
250
|
str += 'E'
|
260
251
|
str += ' ' * 5
|
261
252
|
str += '%07i' % @bookings.size
|
262
|
-
str += '0' * 13
|
253
|
+
str += '0' * 13
|
263
254
|
str += '%017i' % @sum_bank_account_numbers
|
264
255
|
str += '%017i' % @sum_bank_numbers
|
265
256
|
str += '%013i' % @sum_values
|
266
|
-
str += ' ' * 51
|
257
|
+
str += ' ' * 51
|
267
258
|
raise "DTAUS: Längenfehler E #{str.size} <> 128" if str.size != 128
|
268
259
|
dta_string << str
|
269
260
|
end
|
data/lib/king_dta/dtazv.rb
CHANGED
@@ -2,17 +2,6 @@
|
|
2
2
|
module KingDta
|
3
3
|
class Dtazv < Dta
|
4
4
|
|
5
|
-
# Create a new dtazv file/string.
|
6
|
-
# ===Parameter
|
7
|
-
# typ<Date>:: date when the the transfer is to be created
|
8
|
-
def initialize(date=Date.today)
|
9
|
-
raise ArgumentError.new("Wrong date format. Make it a Time or Date object with yyyy-mm-dd") unless date.respond_to?(:strftime)
|
10
|
-
@date = date
|
11
|
-
@value_pos = true #all values are positive by default. Variable changes with first booking entry
|
12
|
-
@closed = false
|
13
|
-
@default_text = 'Want some? Come, get some!' # default verwendungzweck
|
14
|
-
end
|
15
|
-
|
16
5
|
# Creates the whole dta string(in the right order) and returns it
|
17
6
|
# === Raises
|
18
7
|
# error if there are no bookings
|
@@ -26,104 +15,61 @@ module KingDta
|
|
26
15
|
add_z(bookings)
|
27
16
|
end
|
28
17
|
|
29
|
-
#Erstellen P-Segment der DTAZV-Datei
|
30
|
-
# - P Datei-Vorsatz mit 256 Bytes
|
31
|
-
# === Parameter
|
32
|
-
# booking<Object>::Booking object to be written to c-sektion
|
33
|
-
#
|
34
|
-
# === Returns
|
35
|
-
# <String>:: The current dta_string
|
36
|
-
# Aufbau und Erläuterungen der Datei
|
37
|
-
# Datensatz P (Datei-Vorsatz)
|
38
|
-
|
39
|
-
# Der Vorsatz enthält Informationen über ein Institut, das Kundendatensätze Q, T, V und W als Meldung
|
40
|
-
# nach §§ 59 ff. der AWV weiterleitet. Der Vorsatz bezieht sich auf alle unmittelbar folgen den
|
41
|
-
# Kundendatensätze, deren Folge mit einem Datei-Nachsatz Y abgeschlossen wird.
|
42
|
-
|
43
|
-
# Legende:
|
44
|
-
# K = Kannfeld
|
45
|
-
# P = Pflichtfeld
|
46
|
-
# K/P = Pflichtfeld in Abhängigkeit von bestimmten Kriterien
|
47
|
-
# N = nicht belegbares Feld
|
48
|
-
# alpha = alphanumerische Daten (linksbündig, nicht belegte Stellen: Leerzeichen)
|
49
|
-
# num = numerische Daten (rechtsbündig, nicht belegte Stellen Nullen)
|
50
|
-
|
51
|
-
# Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
|
52
|
-
# 1 4 1 P binär/num Satzlänge Längenangabe des Satzes nach den Konventionen für variable Satzlänge (binär bei Bändern 3, numerisch bei Disketten und DFÜ)
|
53
|
-
# 2 1 5 P alpha Satzart Konstante 'P'
|
54
|
-
# 3 8 6 K/P num Bankleitzahl BLZ des Einreichinstituts
|
55
|
-
# 4 4x35 14 P alpha Einreichinstitut Zeile 1 u. 2: Name; Zeile 3: Straße Postfach; Zeile 4: Ort
|
56
|
-
# 5 6 154 P num Erstellungsdatum In der Form JJMMTT
|
57
|
-
# 6 2 160 P num laufende Nummer Laufende Tagesnummer
|
58
|
-
# 7 95 162 N alpha Reserve
|
59
|
-
def add_p
|
60
|
-
# data = '0256' # Länge des Datensatzes, PFLICHT
|
61
|
-
# data += 'P' # Satzart, PFLICHT
|
62
|
-
# data += '%8i' % @account.bank_number # BLZ des Einreichinstituts, KANN
|
63
|
-
# data += '%70s' % @account.bank_name # Einreichinstitut Zeile 1 u. 2: Name; PFLICHT
|
64
|
-
# data += '%35s' % @account.account_street_zip # Einreichinstitut Straße Postfach; Ort PFLICHT
|
65
|
-
# data += '%35s' % @account.city # Einreichinstitut Zeile 4: Ort PFLICHT
|
66
|
-
# data += @date.strftime("%y%m%d") # Erstellungsdatum In der Form JJMMTT, PFLICHT
|
67
|
-
# data += '01' # laufende Nummer Laufende Tagesnummer, PFLICHT
|
68
|
-
# data += '%095s' % '' # Reserve
|
69
|
-
# raise "DTAUS: Längenfehler P (#{data.size} <> 256)\n" if data.size != 256
|
70
|
-
# dta_string << data
|
71
|
-
end
|
72
18
|
|
73
|
-
#Erstellen Q-Segment der DTAZV-Datei
|
19
|
+
# Erstellen Q-Segment der DTAZV-Datei
|
74
20
|
# - Q Auftraggebersatz mit 256 oder 246 Bytes (= Datei-Vorsatz aus dem Datenaustausch zwischen Kunde und Bank)
|
21
|
+
#
|
75
22
|
# === Parameter
|
76
23
|
# booking<Object>::Booking object to be written to c-sektion
|
77
24
|
#
|
78
25
|
# === Returns
|
79
26
|
# <String>:: The current dta_string
|
80
|
-
|
27
|
+
#
|
28
|
+
# === Info
|
81
29
|
# 5.2 Datensatz Q - lange Variante - (Identifikation des Auftraggebers)
|
82
30
|
# Die Bundesbank nimmt Q-Sätze in 2 Varianten entgegen. Die lange Variante ist identisch mit den von
|
83
31
|
# den Auftraggebern gelieferten Q-Sätzen. In der kurzen Variante sind nur die Felder enthalten,
|
84
32
|
# die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden (siehe 5.3).
|
85
33
|
# Beide Varianten dürfen in einer Datei vorkommen.
|
86
|
-
|
34
|
+
#
|
87
35
|
# Datensatz Q - kurze Variante
|
88
36
|
# Die Bundesbank nimmt Q-Sätze in 2 Varianten entgegen. Die lange Variante ist identisch mit
|
89
37
|
# den von den Auftraggebern gelieferten Q-Sätzen. In der kurzen Variante sind nur die Felder
|
90
|
-
# enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden
|
91
|
-
#
|
92
|
-
# kenntlich gemacht. Beide Varianten dürfen in einer Datei vorkommen.
|
93
|
-
|
38
|
+
# enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden.
|
39
|
+
# Beide Varianten dürfen in einer Datei vorkommen.
|
94
40
|
# [ Anmerk.: Bei der Kurzen Variante entfällt die Kundennummer ]
|
95
|
-
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
# 4
|
102
|
-
#
|
103
|
-
#
|
104
|
-
# 6
|
105
|
-
# 7
|
106
|
-
# 8
|
107
|
-
# 9
|
108
|
-
# 10
|
109
|
-
# 11
|
110
|
-
# 12
|
41
|
+
#
|
42
|
+
# === Fields
|
43
|
+
# Nr Start Länge Inhalt
|
44
|
+
# 1 1 4 Satzlänge numerisch bei Disketten und DFÜ
|
45
|
+
# 2 5 1 Satzart Konstante "Q"
|
46
|
+
# 3 6 8 BLZ Erstbeauftragtes Kreditinstitut
|
47
|
+
# 4 14 10 Kontonummer Auftraggeber Entfällt bei der kurzen Variante
|
48
|
+
# 5 24 4x35 Auftraggeberdaten Zeile 1 und 2: Name;
|
49
|
+
# Zeile 3: Straße/Postfach; Zeile 4: Ort
|
50
|
+
# 6 164 6 Erstellungsdatum Format: JJMMTT
|
51
|
+
# 7 170 2 Laufende Tagesnummer bei mehreren Überweisungen/Tag
|
52
|
+
# 8 172 6 Ausführungstermin Datei, Format: JJMMTT; max Feld Q6 + 15 Tage
|
53
|
+
# 9 178 1 Weiterleitung an die Meldebehörde, 'N' Nein, 'J' Ja
|
54
|
+
# 10 179 2 optional Bundeslandschlüssel Zwingend bei 'J' in Feld Q9
|
55
|
+
# 11 181 8 optional Firmennummer / BLZ des Auftraggebers Siehe Feld Q10
|
56
|
+
# 12 189 68 Reserve
|
111
57
|
def add_q
|
112
|
-
data1 = '0256'
|
113
|
-
data1 += 'Q'
|
114
|
-
data1 += '%08i' % @account.bank_number
|
115
|
-
data1 += '%010i' % @account.
|
116
|
-
data1 += '%-035s'
|
117
|
-
data1 += '%-035s'
|
118
|
-
data1 += '%-035s'
|
119
|
-
data1 += '%-035s'
|
120
|
-
data1 += @date.strftime("%y%m%d") # Erstellungsdatum
|
121
|
-
data1 += '01'
|
122
|
-
data1 += @date.strftime("%y%m%d") #
|
123
|
-
data1 += "N"
|
124
|
-
data1 += "%02i"
|
125
|
-
data1 += '%08i'
|
126
|
-
data1 += '%068s'
|
58
|
+
data1 = '0256'
|
59
|
+
data1 += 'Q'
|
60
|
+
data1 += '%08i' % @account.bank_number
|
61
|
+
data1 += '%010i' % @account.bank_account_number
|
62
|
+
data1 += '%-035s' % @account.owner_name[0..34]
|
63
|
+
data1 += '%-035s' % @account.owner_name[25..69]
|
64
|
+
data1 += '%-035s' % @account.owner_street
|
65
|
+
data1 += '%-035s' % @account.owner_zip_city
|
66
|
+
data1 += @date.strftime("%y%m%d") # Erstellungsdatum
|
67
|
+
data1 += '01'
|
68
|
+
data1 += @date.strftime("%y%m%d") # Ausführungstermin
|
69
|
+
data1 += "N"
|
70
|
+
data1 += "%02i" % 0
|
71
|
+
data1 += '%08i' % 0
|
72
|
+
data1 += '%068s' % ''
|
127
73
|
raise "DTAUS: Längenfehler Q (#{data.size} <> 256)\n" if data1.size != 256
|
128
74
|
dta_string << data1
|
129
75
|
end
|
@@ -148,60 +94,28 @@ module KingDta
|
|
148
94
|
# die Felder enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt
|
149
95
|
# werden. Die in der kurzen Variante nicht enthaltenen Felder sind in der folgenden Tabelle
|
150
96
|
# durch Schattierung und Kursivschrift kenntlich gemacht. Beide Varianten dürfen in einer Datei vorkommen.
|
151
|
-
|
152
|
-
#
|
153
|
-
# 1
|
154
|
-
|
155
|
-
#
|
156
|
-
#
|
157
|
-
#
|
158
|
-
#
|
159
|
-
#
|
160
|
-
#
|
161
|
-
#
|
162
|
-
#
|
163
|
-
#
|
164
|
-
#
|
165
|
-
#
|
166
|
-
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
171
|
-
#
|
172
|
-
#
|
173
|
-
# belastenden Kontos. (belegt, wenn dieses Konto
|
174
|
-
# abweicht von Auftragswertkonto)
|
175
|
-
# 7b 10 44 num Kontonummer Kontonummer des mit Entgelten und Auslagen zu K/P N - K/P Nur 'EUR' zulässig
|
176
|
-
# belastenden Kontos. (belegt, wenn dieses Konto
|
177
|
-
# abweicht von Auftragswertkonto)
|
178
|
-
# /Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
|
179
|
-
# 8 11 54 alpha Bank Identifier Code (BIC) Sofern die Zahlung an einen deutschen
|
180
|
-
# des Zahlungsdienstleisters Zahlungsdienstleister erfolgt, alternativ auch K/P P Bank Identifier Code P (BIC) P Bank Identifier Code (BIC) ist Pflicht.
|
181
|
-
# des Zahlungsempfängers oder die BLZ des Zahlungsdienstleisters des ist Pflicht. Zahlungsdienstleister
|
182
|
-
# sonstige Identifikation, z.B. Zahlungsempfängers, wobei dieser drei des Zahlungsempfängers muss in
|
183
|
-
# CHIPS-ID Schrägstriche voranzustellen sind. einem der Län der gemäß Anhang
|
184
|
-
# (Nicht zu belegen bei Scheckziehungen, 4 ansässig sein.
|
185
|
-
# d.h. bei den Zahlungsartschlüsseln
|
186
|
-
# 20-23 und 30-33 in Feld T22)
|
187
|
-
# 9a 3 65 alpha Ländercode für den 2-stelliger ISO-alpha-Ländercode gemäß
|
188
|
-
# Zahlungsdienstleister des Länderverzeichnis für die Zahlungsbilanzstatistik; K/P N - N -
|
189
|
-
# Zahlungsempfängers linksbündig zu belegen; 3. Stelle Leerzeichen
|
190
|
-
# (Pflichtfeld, wenn Feld T8 nicht belegt; nicht zu
|
191
|
-
# belegen bei Scheckziehungen, d.h. bei den
|
192
|
-
# Zahlungsartschlüsseln 20-23 und 30-33 in Feld T22)
|
193
|
-
# 9b 4x35 68 alpha Anschrift des Pflichtfeld, wenn Feld T8 nicht mit BIC- Adresse
|
194
|
-
# Zahlungsdienstleisters bzw. - bei Zahlungen an einen deutschen K/P N - N -
|
195
|
-
# des Zahlungsempfängers Zahlungsdienstleister - nicht mit BLZ belegt;
|
196
|
-
# sofern Anschrift nicht bekannt, Konstante
|
197
|
-
# „UNBEKANNT" Zeile 1 und 2: Name Zeile 3 :
|
198
|
-
# Straße Zeile 4 : Ort (Nicht zu belegen
|
199
|
-
# bei Scheckziehungen, d.h. bei den
|
200
|
-
# Zahlungsartschlüsseln 20-23 und 30-33 in Feld T22)
|
201
|
-
# 10a 3 208 alpha Ländercode für Land des 2-stelliger ISO-alpha-Ländercode gemäß P P - P
|
202
|
-
# Zahlungsempfängers bzw. Länderverzeichnis für die Zahlungsbilanzstatistik;
|
203
|
-
# Scheckempfängers linksbündig zu belegen; 3. Stelle Leerzeichen
|
204
|
-
# 10b 4x35 211 alpha Zahlungsempfänger bzw. Bei Zahlungsauftrag: Zahlungsempfänger Bei P P Angabe eines Scheckempfängers nicht P Angabe eines Scheck empfängers nicht möglich
|
97
|
+
#
|
98
|
+
# Nr Start Länge Inhalt
|
99
|
+
# 1 1 4 Satzlänge
|
100
|
+
# 2 5 1 Konstante "T"
|
101
|
+
# 3 6 8 BLZ des zu belastenden Kontos
|
102
|
+
# 4a 14 3 Währungscode nur EUR - Entfällt bei der kurzen Variante
|
103
|
+
# 4b 17 10 Kontonummer des zu belastenden Konto - Entfällt bei der kurzen Variante
|
104
|
+
# 5 27 6 Ausführungstermin Format: JJMMTT; Q6 + max 15 Tage; default: Q8
|
105
|
+
# 6 33 8 BLZ des zu belastenden Kontos - wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
|
106
|
+
# 7a 41 3 ISO-Währungscode EUR, wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
|
107
|
+
# 7b 44 10 Kontonummer, wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
|
108
|
+
# 8 54 11 BIC des Zahlungsempfängers Wenn BLZ(DE only) sind drei Schrägstriche voranzustellen
|
109
|
+
# Nicht zu belegen bei Scheckziehungen,d.h. bei den Zahlungsartschlüsseln 20-23 und 30-33 in Feld T22)
|
110
|
+
# 9a 65 3 2-stelliger ISO-alpha-Ländercode Zahlungsempfängers, siehe Länderverzeichnis für die Zahlungsbilanzstatistik;
|
111
|
+
# Pflicht, wenn T8 nicht belegt; nicht zu belegen bei Scheckziehungen,
|
112
|
+
# 9b 68 4x35 Anschrift Bank des Zahlungsempfängers. Pflicht wenn T8 nicht belegt
|
113
|
+
# Wenn Anschrift nicht bekannt„UNBEKANNT"
|
114
|
+
# Zeile 1 und 2: Name Zeile 3: Straße Zeile 4: Ort
|
115
|
+
# Nicht zu belegen bei Scheckziehungen
|
116
|
+
#
|
117
|
+
# 10a 208 3 2-stelliger ISO-alpha-Ländercode des Zahlungsempfänger gemäß Länderverzeichnis für die Zahlungsbilanzstatistik; linksbündig zu belegen; 3. Stelle Leerzeichen
|
118
|
+
# 10b 211 4x35 alpha Zahlungsempfänger bzw. Bei Zahlungsauftrag: Zahlungsempfänger Bei P P Angabe eines Scheckempfängers nicht P Angabe eines Scheck empfängers nicht möglich
|
205
119
|
# Scheckempfänger Scheckziehung: Scheckempfänger Zeile 1 und 2: möglich
|
206
120
|
# Name Zeile 3 : Straße Zeile 4 : Ort/Land.
|
207
121
|
# Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
|
@@ -281,48 +195,141 @@ module KingDta
|
|
281
195
|
# 27 2 767 num Erweiterungskennzeichen 00 = es folgt kein Meldeteil P N - P -
|
282
196
|
#
|
283
197
|
def add_t(booking)
|
284
|
-
data2 = '0768'
|
285
|
-
data2 += 'T'
|
286
|
-
data2 += '%08i' % @account.bank_number
|
287
|
-
data2 += 'EUR'
|
288
|
-
data2 += '%010i' % @account.
|
289
|
-
data2 += @date.strftime("%y%m%d")
|
290
|
-
data2 += '%08i' % 0
|
291
|
-
data2 += '%03s' % ''
|
292
|
-
data2 += '%010i' % 0
|
293
|
-
data2 += '%-011s' % booking.account.
|
294
|
-
data2 += '%-03s' %
|
295
|
-
data2 += '
|
296
|
-
data2 += '
|
297
|
-
data2 += '
|
298
|
-
data2 += '%-03s' % booking.account.
|
299
|
-
data2 += '%-035.35s' % booking.account.
|
300
|
-
data2 += '%-035.35s' % booking.account.
|
301
|
-
data2 += '%-035.35s' % booking.account.
|
302
|
-
data2 += '%-035.35s' % booking.account.
|
303
|
-
data2 += '%070s' % ''
|
304
|
-
data2 += '/%-034s' % booking.account.
|
305
|
-
data2 += 'EUR'
|
306
|
-
data2 += '%014i' % booking.value.divmod(100)[0]
|
307
|
-
data2 += '%02i0' % booking.value.divmod(100)[1]
|
308
|
-
data2 += '
|
198
|
+
data2 = '0768'
|
199
|
+
data2 += 'T'
|
200
|
+
data2 += '%08i' % @account.bank_number
|
201
|
+
data2 += 'EUR'
|
202
|
+
data2 += '%010i' % @account.bank_account_number
|
203
|
+
data2 += @date.strftime("%y%m%d") # KANN, 5 Ausführungstermin Einzelzahlung, wenn abweichend von Q8
|
204
|
+
data2 += '%08i' % 0 # KANN/PFLICHT 6 BLZ
|
205
|
+
data2 += '%03s' % '' # KANN/PFLICHT 7a ISO-Währungscode
|
206
|
+
data2 += '%010i' % 0 # KANN/PFLICHT 7b BLZ
|
207
|
+
data2 += '%-011s' % booking.account.bank_bic
|
208
|
+
data2 += '%-03s' % booking.account.bank_country_code # Pflichtfelder wenn T8 leer
|
209
|
+
data2 += '%-070s' % booking.account.bank_name
|
210
|
+
data2 += '%-035.35s' % booking.account.bank_street
|
211
|
+
data2 += '%-035.35s' % booking.account.bank_zip_city
|
212
|
+
data2 += '%-03s' % booking.account.owner_country_code # PFLICHT 10a Ländercode für Land des Zahlungsempfängers
|
213
|
+
data2 += '%-035.35s' % booking.account.owner_name[0..34] # Zahlungsempfänger
|
214
|
+
data2 += '%-035.35s' % booking.account.owner_name[35..69]
|
215
|
+
data2 += '%-035.35s' % booking.account.owner_street
|
216
|
+
data2 += '%-035.35s' % booking.account.owner_zip_city
|
217
|
+
data2 += '%070s' % '' # KANN/PFLICHT 11 Ordervermerk
|
218
|
+
data2 += '/%-034s' % booking.account.bank_iban # PFLICHT 12 35 IBAN bzw. Kontonummer des
|
219
|
+
data2 += 'EUR' # KANN/PFLICHT 13 3 Auftragswährung "EUR"
|
220
|
+
data2 += '%014i' % booking.value.divmod(100)[0] # PFLICHT 14a 14 Betrag (Vorkommastellen) Rechtsbündig
|
221
|
+
data2 += '%02i0' % booking.value.divmod(100)[1] # PFLICHT 14b 3 Betrag (Nachkommastellen) Linksbündig
|
222
|
+
data2 += '%-0140s' % (booking.text || default_text)
|
309
223
|
data2 += "%02i" % 0 # N 16 Weisungsschlüssel 1 (gem. Anhang 2)
|
310
224
|
data2 += "%02i" % 0 # N 17 Weisungsschlüssel 2 (gem. Anhang 2)
|
311
225
|
data2 += "%02i" % 0 # N 18 Weisungsschlüssel 3 (gem. Anhang 2)
|
312
226
|
data2 += "%02i" % 0 # N 19 Weisungsschlüssel 4 (gem. Anhang 2 und 2a)
|
313
227
|
data2 += '%025s' % '' # N 20 Zusatzinformationen zum Weisungsschlüssel
|
314
|
-
data2 += "%02i" % 0
|
315
|
-
data2 += "%02i" % 13
|
316
|
-
data2 += '%027s' % ''
|
228
|
+
data2 += "%02i" % 0 # PFLICHT 21 Entgeltregelung
|
229
|
+
data2 += "%02i" % 13 # PFLICHT 22 Kennzeichnung der Zahlungsart Gemäß Anhang 1; Zahlungen, die weder '11' noch '13' als Zahlungsartschlüssel enthalten
|
230
|
+
data2 += '%027s' % '' # KANN 23 Variabler Text nur für Auftraggeberabrechnung
|
317
231
|
# i dont know what to do.
|
318
|
-
data2 += '%035s' % ''
|
319
|
-
data2 += '%01i' % 0
|
320
|
-
data2 += '%051s' % ''
|
321
|
-
data2 += '%02i' % 0 #
|
232
|
+
data2 += '%035s' % '' # KANN/PFLICHT 24 35 Name und Telefonnummer sowie ggf. Stellvertretungsmeldung
|
233
|
+
data2 += '%01i' % 0 # KANN/NICHT 25 Meldeschlüssel
|
234
|
+
data2 += '%051s' % ''
|
235
|
+
data2 += '%02i' % 0 # Erweiterungskennzeichen 00 = es folgt kein Meldeteil
|
322
236
|
raise "DTAUS: Längenfehler T (#{data2.size} <> 768)\n" if data2.size != 768
|
323
237
|
dta_string << data2
|
324
238
|
end
|
325
239
|
|
240
|
+
|
241
|
+
|
242
|
+
#Erstellen Y-Segment der DTAZV-Datei
|
243
|
+
# - Y Datei-Nachsatz mit 256 Bytes
|
244
|
+
# === Parameter
|
245
|
+
# booking<Object>::Booking object to be written to c-sektion
|
246
|
+
#
|
247
|
+
# === Returns
|
248
|
+
# <String>:: The current dta_string
|
249
|
+
#Aufbau des Segments:
|
250
|
+
# Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
|
251
|
+
# 1 4 1 P binär/num Satzlänge Längenangabe des Satzes nach den Konventionen für variable Satzlänge (binär bei Bändern, numerisch bei Disketten und DFÜ)
|
252
|
+
# 2 1 5 P alpha Satzart Konstante Y
|
253
|
+
# 3 15 6 P num Betragssumme Aus Datensätzen U Feld 5 ( = 0, falls keine U-Sätze vorhanden)
|
254
|
+
# 4 15 21 P num Betragssumme Aus Datensätzen V Feld 7
|
255
|
+
# 5 15 36 P num Betragssumme Aus Datensätzen V Feld 17
|
256
|
+
# 6 15 51 P num Betragssumme Aus Datensätzen W Feld 9
|
257
|
+
# 7 6 66 P num Anzahl der Datensätze Anzahl Datensätze U, V, W
|
258
|
+
# 8 6 72 P num Anzahl der Datensätze Anzahl Datensätze T
|
259
|
+
# 9 179 78 P alpha Leerzeichen Reserve
|
260
|
+
def add_y(bookings)
|
261
|
+
data3 = '0256'
|
262
|
+
data3 += 'Y'
|
263
|
+
data3 += '%015i' % 0
|
264
|
+
data3 += '%015i' % 0
|
265
|
+
data3 += '%015i' % 0
|
266
|
+
data3 += '%015i' % 0
|
267
|
+
data3 += '%06i' % 0 # 7 Anzahl der Datensätze
|
268
|
+
data3 += '%06i' % bookings.count # 8 Anzahl der Datensätze
|
269
|
+
data3 += '%0179s' % ''
|
270
|
+
raise "DTAUS: Längenfehler T (#{data3.size} <> 256)\n" if data3.size != 256
|
271
|
+
dta_string << data3
|
272
|
+
end
|
273
|
+
|
274
|
+
# THE MAGICAL Z SEGMENT
|
275
|
+
def add_z(bookings)
|
276
|
+
data3 = '0256'
|
277
|
+
data3 += 'Z'
|
278
|
+
sum = 0
|
279
|
+
bookings.each do |b|
|
280
|
+
sum += b.value.divmod(100)[0]
|
281
|
+
end
|
282
|
+
data3 += '%015i' % sum
|
283
|
+
data3 += '%015i' % bookings.count
|
284
|
+
data3 += '%0221s' % ''
|
285
|
+
raise "DTAUS: Längenfehler Z (#{data3.size} <> 256)\n" if data3.size != 256
|
286
|
+
dta_string << data3
|
287
|
+
end
|
288
|
+
|
289
|
+
# Erstellen P-Segment der DTAZV-Datei
|
290
|
+
# - P Datei-Vorsatz mit 256 Bytes
|
291
|
+
#
|
292
|
+
# === Parameter
|
293
|
+
# booking<Object>::Booking object to be written to c-sektion
|
294
|
+
#
|
295
|
+
# === Returns
|
296
|
+
# <String>:: The current dta_string
|
297
|
+
# Aufbau und Erläuterungen der Datei
|
298
|
+
# Datensatz P (Datei-Vorsatz)
|
299
|
+
|
300
|
+
# Der Vorsatz enthält Informationen über ein Institut, das Kundendatensätze Q, T, V und W als Meldung
|
301
|
+
# nach §§ 59 ff. der AWV weiterleitet. Der Vorsatz bezieht sich auf alle unmittelbar folgen den
|
302
|
+
# Kundendatensätze, deren Folge mit einem Datei-Nachsatz Y abgeschlossen wird.
|
303
|
+
|
304
|
+
# Legende:
|
305
|
+
# K = Kannfeld
|
306
|
+
# P = Pflichtfeld
|
307
|
+
# K/P = Pflichtfeld in Abhängigkeit von bestimmten Kriterien
|
308
|
+
# N = nicht belegbares Feld
|
309
|
+
# alpha = alphanumerische Daten (linksbündig, nicht belegte Stellen: Leerzeichen)
|
310
|
+
# num = numerische Daten (rechtsbündig, nicht belegte Stellen Nullen)
|
311
|
+
|
312
|
+
# Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
|
313
|
+
# 1 4 1 P binär/num Satzlänge Längenangabe des Satzes nach den Konventionen für variable Satzlänge (binär bei Bändern 3, numerisch bei Disketten und DFÜ)
|
314
|
+
# 2 1 5 P alpha Satzart Konstante 'P'
|
315
|
+
# 3 8 6 K/P num Bankleitzahl BLZ des Einreichinstituts
|
316
|
+
# 4 4x35 14 P alpha Einreichinstitut Zeile 1 u. 2: Name; Zeile 3: Straße Postfach; Zeile 4: Ort
|
317
|
+
# 5 6 154 P num Erstellungsdatum In der Form JJMMTT
|
318
|
+
# 6 2 160 P num laufende Nummer Laufende Tagesnummer
|
319
|
+
# 7 95 162 N alpha Reserve
|
320
|
+
def add_p
|
321
|
+
# data = '0256' # Länge des Datensatzes, PFLICHT
|
322
|
+
# data += 'P' # Satzart, PFLICHT
|
323
|
+
# data += '%8i' % @account.bank_number # BLZ des Einreichinstituts, KANN
|
324
|
+
# data += '%70s' % @account.bank_name # Einreichinstitut Zeile 1 u. 2: Name; PFLICHT
|
325
|
+
# data += '%35s' % @account.account_street_zip # Einreichinstitut Straße Postfach; Ort PFLICHT
|
326
|
+
# data += '%35s' % @account.city # Einreichinstitut Zeile 4: Ort PFLICHT
|
327
|
+
# data += @date.strftime("%y%m%d") # Erstellungsdatum In der Form JJMMTT, PFLICHT
|
328
|
+
# data += '01' # laufende Nummer Laufende Tagesnummer, PFLICHT
|
329
|
+
# data += '%095s' % '' # Reserve
|
330
|
+
# raise "DTAUS: Längenfehler P (#{data.size} <> 256)\n" if data.size != 256
|
331
|
+
# dta_string << data
|
332
|
+
end
|
326
333
|
#Erstellen V-Segment der DTAZV-Datei
|
327
334
|
# - V Meldedatensatz zum Transithandel mit 256 Bytes
|
328
335
|
# === Parameter
|
@@ -418,53 +425,5 @@ module KingDta
|
|
418
425
|
# data += '%0140s' # 10 nähere Angaben zur zugrunde liegenden Leistung
|
419
426
|
# data += '%075s' # 11 Reserve
|
420
427
|
end
|
421
|
-
|
422
|
-
#Erstellen Y-Segment der DTAZV-Datei
|
423
|
-
# - Y Datei-Nachsatz mit 256 Bytes
|
424
|
-
# === Parameter
|
425
|
-
# booking<Object>::Booking object to be written to c-sektion
|
426
|
-
#
|
427
|
-
# === Returns
|
428
|
-
# <String>:: The current dta_string
|
429
|
-
#Aufbau des Segments:
|
430
|
-
# Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
|
431
|
-
# 1 4 1 P binär/num Satzlänge Längenangabe des Satzes nach den Konventionen für variable Satzlänge (binär bei Bändern, numerisch bei Disketten und DFÜ)
|
432
|
-
# 2 1 5 P alpha Satzart Konstante Y
|
433
|
-
# 3 15 6 P num Betragssumme Aus Datensätzen U Feld 5 ( = 0, falls keine U-Sätze vorhanden)
|
434
|
-
# 4 15 21 P num Betragssumme Aus Datensätzen V Feld 7
|
435
|
-
# 5 15 36 P num Betragssumme Aus Datensätzen V Feld 17
|
436
|
-
# 6 15 51 P num Betragssumme Aus Datensätzen W Feld 9
|
437
|
-
# 7 6 66 P num Anzahl der Datensätze Anzahl Datensätze U, V, W
|
438
|
-
# 8 6 72 P num Anzahl der Datensätze Anzahl Datensätze T
|
439
|
-
# 9 179 78 P alpha Leerzeichen Reserve
|
440
|
-
def add_y(bookings)
|
441
|
-
data3 = '0256' # 1 Länge des Datensatzes
|
442
|
-
data3 += 'Y' # 2 Satzart
|
443
|
-
data3 += '%015i' % 0 # 3 Betragssumme
|
444
|
-
data3 += '%015i' % 0 # 4 Betragssumme
|
445
|
-
data3 += '%015i' % 0 # 5 Betragssumme
|
446
|
-
data3 += '%015i' % 0 # 6 Betragssumme
|
447
|
-
data3 += '%06i' % 0 # 7 Anzahl der Datensätze
|
448
|
-
data3 += '%06i' % bookings.count # 8 Anzahl der Datensätze
|
449
|
-
data3 += '%0179s' % '' # 9 Leerzeichen Reserve
|
450
|
-
raise "DTAUS: Längenfehler T (#{data3.size} <> 256)\n" if data3.size != 256
|
451
|
-
dta_string << data3
|
452
|
-
end
|
453
|
-
|
454
|
-
# THE MAGICAL Z SEGMENT
|
455
|
-
def add_z(bookings)
|
456
|
-
data3 = '0256'
|
457
|
-
data3 += 'Z'
|
458
|
-
sum = 0
|
459
|
-
bookings.each do |b|
|
460
|
-
sum += b.value.divmod(100)[0]
|
461
|
-
end
|
462
|
-
data3 += '%015i' % sum
|
463
|
-
data3 += '%015i' % bookings.count
|
464
|
-
data3 += '%0221s' % ''
|
465
|
-
raise "DTAUS: Längenfehler Z (#{data3.size} <> 256)\n" if data3.size != 256
|
466
|
-
dta_string << data3
|
467
|
-
end
|
468
|
-
|
469
428
|
end
|
470
429
|
end
|