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.
@@ -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