king_dtaus 2.0.2.pre → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|