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.
@@ -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
- @date = date
19
- @typ = typ
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.account_number.to_i
45
- @sum_bank_numbers += b.account.bank_number.to_i
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. Start Länge Beschreibung
53
- # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
54
- # 2 4 1 Zeichen Datensatz-Typ, immer 'A'
55
- # 3 5 2 Zeichen Art der Transaktionen
56
- # "LB" für Lastschriften Bankseitig
57
- # "LK" für Lastschriften Kundenseitig
58
- # "GB" für Gutschriften Bankseitig
59
- # "GK" für Gutschriften Kundenseitig
60
- # 4 7 8 Zeichen Bankleitzahl des Auftraggebers
61
- # 5 15 8 Zeichen CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
62
- # 6 23 27 Zeichen Name des Auftraggebers
63
- # 7 50 6 Zeichen aktuelles Datum im Format DDMMJJ
64
- # 8 56 4 Zeichen CST, " " (Blanks)
65
- # 9 60 10 Zeichen Kontonummer des Auftraggebers
66
- # 10 70 10 Zeichen Optionale Referenznummer
67
- # 11a 80 15 Zeichen Reserviert, 15 Blanks
68
- # 11b 95 8 Zeichen Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
69
- # 11c 103 24 Zeichen Reserviert, 24 Blanks
70
- # 12 127 1 Zeichen Währungskennzeichen
71
- # " " = DM
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' #Segment
77
- data += @typ #Lastschriften Kunde
78
- data += '%8i' % @account.bank_number #.rjust(8) #bank_number
79
- data += '%08i' % 0 #belegt, wenn Bank
80
- data += '%-27.27s' % @account.client_name
81
- data += @date.strftime("%d%m%y") #aktuelles Datum im Format DDMMJJ
82
- data += ' ' * 4 #bankinternes Feld
83
- data += '%010i' % @account.account_number.to_i
84
- data += '%010i' % 0 #Referenznummer
85
- data += ' ' * 15 #Reserve
86
- data += '%8s' % @date.strftime("%d%m%Y") #Ausführungsdatum (ja hier 8 Stellen, Erzeugungsdat. hat 6 Stellen)
87
- data += ' ' * 24 #Reserve
88
- data += '1' #Kennzeichen Euro
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. St Länge Beschreibung
96
- # 1 0 4 Zeichen Länge des Datensatzes, 187 + x * 29 (x..Anzahl Erweiterungsteile)
97
- # 2 4 1 Zeichen Datensatz-Typ, immer 'C'
98
- # 3 5 8 Zeichen Bankleitzahl des Auftraggebers (optional)
99
- # 4 13 8 Zeichen Bankleitzahl des Kunden
100
- # 5 21 10 Zeichen Kontonummer des Kunden
101
- # 6 31 13 Zeichen Verschiedenes
102
- # 1. Zeichen: "0"
103
- # 2. - 12. Zeichen: interne Kundennummer oder Nullen
104
- # 13. Zeichen: "0"
105
- # Die interne Nummer wird vom erstbeauftragten Institut zum endbegünstigten Institut weitergeleitet. Die Weitergabe der internenen Nummer an den Überweisungsempfänger ist der Zahlstelle freigestellt.
106
- # 7 44 5 Zeichen Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
107
- # "04000" Lastschrift des Abbuchungsauftragsverfahren
108
- # "05000" Lastschrift des Einzugsermächtigungsverfahren
109
- # "05005" Lastschrift aus Verfügung im elektronischen Cash-System
110
- # "05006" Wie 05005 mit ausländischen Karten
111
- # "51000" Überweisungs-Gutschrift
112
- # "53000" Überweisung Lohn/Gehalt/Rente
113
- # "5400J" Vermögenswirksame Leistung (VL) ohne Sparzulage
114
- # "5400J" Vermögenswirksame Leistung (VL) mit Sparzulage
115
- # "56000" Überweisung öffentlicher Kassen
116
- # Die im Textschlüssel mit J bezeichnete Stelle, wird bei Übernahme in eine Zahlung automatisch mit der jeweils aktuellen Jahresendziffer (7, wenn 97) ersetzt.
117
- # 8 49 1 Zeichen Reserviert, " " (Blank)
118
- # 9 50 11 Zeichen Betrag in DM
119
- # 10 61 8 Zeichen Bankleitzahl des Auftraggebers
120
- # 11 69 10 Zeichen Kontonummer des Auftraggebers
121
- # 12 79 11 Zeichen Betrag in Euro einschließlich Nachkommastellen, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a), sonst Nullen
122
- # 13 90 3 Zeichen Reserviert, 3 Blanks
123
- # 14a 93 27 Zeichen Name des Kunden
124
- # 14b 120 8 Zeichen Reserviert, 8 Blanks
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 Zeichen Name des Auftraggebers
128
- # 16 155 27 Zeichen Verwendungszweck
129
- # 17a 182 1 Zeichen Währungskennzeichen
130
- # " " = DM
131
- # "1" = Euro
132
- # 17b 183 2 Zeichen Reserviert, 2 Blanks
133
- # 18 185 2 Zeichen Anzahl der Erweiterungsdatensätze, "00" bis "15"
134
- # 19 187 2 Zeichen Typ (1. Erweiterungsdatensatz)
135
- # "01" Name des Kunden
136
- # "02" Verwendungszweck
137
- # "03" Name des Auftraggebers
138
- # 20 189 27 Zeichen Beschreibung gemäß Typ
139
- # 21 216 2 Zeichen wie C19, oder Blanks (2. Erweiterungsdatensatz)
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-sektion
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 = [] #('xx', 'inhalt') xx: 01=Name 02=Verwendung 03=Name
157
- # 1. Satzabschnitt
150
+ exts = []
151
+ # 1. Part
158
152
  #data1 = '%4i' % ?? #Satzlänge kommt später
159
153
  data1 = 'C'
160
- data1 += '%08i' % 0 #freigestellt
161
- data1 += '%08i' % booking.account.bank_number
162
- data1 += '%010i' % booking.account.account_number.to_i
163
- # RUBY 1.9 workaround => || 0
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 += ' ' #bankintern
169
- data1 += '0' * 11 #Reserve
159
+ data1 += ' '
160
+ data1 += '0' * 11
170
161
  data1 += '%08i' % @account.bank_number
171
- data1 += '%010i' % @account.account_number.to_i
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.client_name #Name Begünstigter/Zahlungspflichtiger
175
- exts << ['01', booking.account.client_name[27..999] ] if booking.account.client_name.size > 27
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. Satzabschnitt
180
- data2 = "%27.27s" % @account.client_name
170
+ # 2. Part
171
+ data2 = "%27.27s" % @account.owner_name
181
172
  booking_txt = booking.text || default_text
182
173
  #Erste 27 Zeichen
183
- #Wenn text < 26 Zeichen, dann mit spaces auffüllen.
184
- data2 += booking_txt[0..26].ljust(27)
174
+ #if text < 26 fill with spaces
175
+ data2 += booking_txt[0..26].ljust(27)
185
176
  booking_txt = booking_txt[27..999]
186
- # cur text into 27 long pieces
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.client_name[27..999] ] if @account.client_name.size > 27
182
+ exts << ['03', @account.owner_name[27..999] ] if @account.owner_name.size > 27
192
183
 
193
- data2 += '1' #Währungskennzeichen
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.client_name}" unless data1.size == 128
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.client_name}" unless data2.size == 128
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
- #Erstellen der Texterweiterungen à vier Stück
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. Start Länge Beschreibung
247
- # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
248
- # 2 4 1 Zeichen Datensatz-Typ, immer 'E'
249
- # 3 5 5 Zeichen " " (Blanks)
250
- # 4 10 7 Zeichen Anzahl der Datensätze vom Typ C
251
- # 5 17 13 Zeichen Kontrollsumme Beträge
252
- # 6 30 17 Zeichen Kontrollsumme Kontonummern
253
- # 7 47 17 Zeichen Kontrollsumme Bankleitzahlen
254
- # 8 64 13 Zeichen Kontrollsumme Euro, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a)
255
- # 9 77 51 Zeichen 51 Blanks
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 #Reserve
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 #Abgrenzung Datensatz
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
@@ -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; das in der
91
- # kurzen Variante nicht enthaltene Feld ist in der folgenden Tabelle durch Schattierung und Kursivschrift
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
- # Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
97
- # 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Ü)
98
- # 2 1 5 P alpha Satzart Konstante "Q"
99
- # 3 8 6 P num BLZ Erstbeauftragtes Kreditinstitut
100
- # Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN --------------------------------------------------------------------------------------------------------
101
- # 4 10 14 P num Kundennummer Ordnungsnummer gemäß Vereinbarung mit dem erstbeauftragten Kreditinstitut (ggf. Kontonummer)
102
- # /Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
103
- # 5 4x35 24 P alpha Auftraggeberdaten Zeile 1 und 2: Name; Zeile 3: Straße / Postfach; Zeile 4: Ort
104
- # 6 6 164 P num Erstellungsdatum Format: JJMMTT
105
- # 7 2 170 P num laufende Nummer Laufende Tagesnummer
106
- # 8 6 172 P num (erster) Ausführungstermin Datei Format: JJMMTT; gleich oder bis zu höchstens 15 Kalendertage nach dem Datum aus Feld Q6
107
- # 9 1 178 P alpha Weiterleitung an die Meldebehörde Soll das erstbeauftragte Kreditinstitut Meldedaten zu den nachfolgenden Zahlungen an die Bundesbank weiterleiten ? (siehe Erläuterungen im Anhang 3). 'J' Ja 'N' Nein
108
- # 10 2 179 K/P num Bundeslandschlüssel Zwingend belegt, wenn Meldedaten zu den Zahlungen an die Bundesbank weitergeleitet wer­ den sollen. ('J' in Feld Q9)
109
- # 11 8 181 K/P num Firmennummer / BLZ des Auftraggebers Siehe Erläuterungen Feld Q10
110
- # 12 68 189 N alpha Reserve
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' # Länge des Datensatzes, PFLICHT
113
- data1 += 'Q' # Satzart, PFLICHT
114
- data1 += '%08i' % @account.bank_number # BLZ des Einreichinstituts, PFLICHT
115
- data1 += '%010i' % @account.account_number # Kundennummer, PFLICHT
116
- data1 += '%-035s' % @account.client_name[0..34] # Sender Name, PFLICHT
117
- data1 += '%-035s' % @account.client_name[25..69]
118
- data1 += '%-035s' % @account.client_street # Sender 3: Straße Postfach, PFLICHT
119
- data1 += '%-035s' % @account.client_zip_city # Sender Zeile 4: Ort, PFLICHT
120
- data1 += @date.strftime("%y%m%d") # Erstellungsdatum In der Form JJMMTT, PFLICHT
121
- data1 += '01' # laufende Nummer Laufende Tagesnummer, PFLICHT
122
- data1 += @date.strftime("%y%m%d") # (erster) Ausführungstermin Datei, PFLICHT
123
- data1 += "N" # Weiterleitung an die Meldebehörde, PFLICHT
124
- data1 += "%02i" % 0 # Bundeslandschlüssel, KANN, NICHT BELEGT, KEINE MELDUNG
125
- data1 += '%08i' % 0 # @account.bank_number # Firmennummer / BLZ des Auftraggebers, KANN, NICHT BELEGT, KEINE MELDUNG
126
- data1 += '%068s' % '' # Reserve
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
- # Feld Länge in Bytes 1. Stelle im Satz Datenformat Inhalt Erläuterungen allg. Feldart allg. EU-Std.Ü. Feldart EU-Std.Ü. Besondere Belegungsvorschriften EUE-Ü. Feldart EUE-Ü. Besondere Belegungsvorschriften
153
- # 1 4 1 binär/num Satzlänge Längenangabe des Satzes nach den Kon­ ventionen P P - P -
154
- # für variable Satzlänge (binär bei Bändern
155
- # numerisch bei Disketten und DFÜ)
156
- # 2 1 5 alpha Satzart Konstante "T" P P - P -
157
- # 3 8 6 num BLZ BLZ der kontoführenden Stelle des mit dem
158
- # Auftragswert zu belastenden Kontos (Feld T4b) P P - P -
159
- # Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
160
- # 4a 3 14 alpha ISO-Währungscode Für mit Auftragswert zu belastendes Konto. P P Nur "EUR" zulälssig P Nur "EUR" zulässig
161
- # 4b 10 17 num Kontonummer Mit Auftragswert zu belastendes Konto P P - P -
162
- # /Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
163
- # 5 6 27 num Ausführungstermin Format: JJMMTT; gleich oder nach dem Datum aus K K - K -
164
- # Einzelzahlung, wenn Feld Q8, jedoch bis zu höchstens 15 Kalendertage
165
- # abweichend von Feld Q8 nach dem Datum aus Feld Q6; fehlt der Termin in
166
- # T5, so wird das Datum in Q8 als Ausführungstermin
167
- # angenommen.
168
- # Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
169
- # 6 8 33 num BLZ BLZ der kontoführenden Stelle des mit Entgelten K/P N - K/P -
170
- # und Auslagen zu belastenden Kontos. (belegt,
171
- # wenn dieses Konto abweicht von Auftragswertkonto)
172
- # 7a 3 41 alpha ISO-Währungscode Währungscode des mit Entgelten und Aus­ lagen zu K/P N - K/P Nur 'EUR' zulässig
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' # PFLICHT, 1 Länge des Datensatzes
285
- data2 += 'T' # PFLICHT, 2 Satzart
286
- data2 += '%08i' % @account.bank_number # PFLICHT, 3 BLZ des Einreichinstituts
287
- data2 += 'EUR' # PFLICHT, 4a ISO-Währungscode
288
- data2 += '%010i' % @account.account_number # PFLICHT, 4b Kontonummer
289
- data2 += @date.strftime("%y%m%d") # KANN, 5 Ausführungstermin Einzelzahlung, wenn abweichend von Feld Q8
290
- data2 += '%08i' % 0 # KANN/PFLICHT 6 BLZ
291
- data2 += '%03s' % '' # KANN/PFLICHT 7a ISO-Währungscode
292
- data2 += '%010i' % 0 # KANN/PFLICHT 7b BLZ
293
- data2 += '%-011s' % booking.account.bank_number # KANN/PFLICHT 8 11 Bank Identifier Code (BIC) des Zahlungsdienstleisters des Zahlungsempfängers (AUCH BLZ denke ich)
294
- data2 += '%-03s' % '' #booking.account.bank_country_code # KANN/PFLICHT 9a 3 Ländercode für den Zahlungsdienstleister des Zahlungsempfängers
295
- data2 += '%070s' % '' #booking.account.bank_name # KANN/PFLICHT 9b 4x35 Anschrift des Zahlungsdienstleisters des Zahlungsempfängers - Pflichtfeld wenn T8 nich belegt Zeile 1 und 2:
296
- data2 += '%035.35s' % '' #booking.account.street # KANN/PFLICHT 9b Name Zeile 3 : Straße Zeile
297
- data2 += '%035.35s' % '' #booking.account.zip_city # KANN/PFLICHT 9b 4 : Ort
298
- data2 += '%-03s' % booking.account.client_country_code # PFLICHT 10a Ländercode für Land des Zahlungsempfängers bzw. Scheckempfängers
299
- data2 += '%-035.35s' % booking.account.client_name[0..34] # KANN/PFLICHT 10b 4x35 Anschrift des Zahlungsdienstleisters des Zahlungsempfängers - Pflichtfeld wenn T8 nich belegt Zeile 1 und 2:
300
- data2 += '%-035.35s' % booking.account.client_name[35..69]
301
- data2 += '%-035.35s' % booking.account.client_street
302
- data2 += '%-035.35s' % booking.account.client_zip_city
303
- data2 += '%070s' % '' # KANN/PFLICHT 11 Ordervermerk
304
- data2 += '/%-034s' % booking.account.account_number # PFLICHT 12 35 IBAN bzw. Kontonummer des
305
- data2 += 'EUR' # KANN/PFLICHT 13 3 Auftragswährung "EUR"
306
- data2 += '%014i' % booking.value.divmod(100)[0] # PFLICHT 14a 14 Betrag (Vorkommastellen) Rechtsbündig
307
- data2 += '%02i0' % booking.value.divmod(100)[1] # PFLICHT 14b 3 Betrag (Nachkommastellen) Linksbündig
308
- data2 += '%0140s' % booking.text || default_text # KANN 15 4x35 Verwendungszweck
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 # PFLICHT 21 Entgeltregelung
315
- data2 += "%02i" % 13 # PFLICHT 22 Kennzeichnung der Zahlungsart Gemäß Anhang 1; Zahlungen, die weder '11' noch '13' als Zahlungsartschlüssel enthalten
316
- data2 += '%027s' % '' # KANN 23 Variabler Text nur für Auftraggeberabrechnung
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' % '' # KANN/PFLICHT 24 35 Name und Telefonnummer sowie ggf. Stellvertretungsmeldung
319
- data2 += '%01i' % 0 # KANN/NICHT 25 Meldeschlüssel
320
- data2 += '%051s' % '' # N 26 Reserve
321
- data2 += '%02i' % 0 # PFLICHT/NICHT 27 2 Erweiterungskennzeichen 00 = es folgt kein Meldeteil
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