king_dtaus 2.0.0 → 2.0.1.pre

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.
@@ -2,6 +2,17 @@
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
+
5
16
  # Creates the whole dta string(in the right order) and returns it
6
17
  # === Raises
7
18
  # error if there are no bookings
@@ -15,62 +26,104 @@ module KingDta
15
26
  add_z(bookings)
16
27
  end
17
28
 
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
18
72
 
19
- # Erstellen Q-Segment der DTAZV-Datei
73
+ #Erstellen Q-Segment der DTAZV-Datei
20
74
  # - Q Auftraggebersatz mit 256 oder 246 Bytes (= Datei-Vorsatz aus dem Datenaustausch zwischen Kunde und Bank)
21
- #
22
75
  # === Parameter
23
76
  # booking<Object>::Booking object to be written to c-sektion
24
77
  #
25
78
  # === Returns
26
79
  # <String>:: The current dta_string
27
- #
28
- # === Info
80
+
29
81
  # 5.2 Datensatz Q - lange Variante - (Identifikation des Auftraggebers)
30
82
  # Die Bundesbank nimmt Q-Sätze in 2 Varianten entgegen. Die lange Variante ist identisch mit den von
31
83
  # den Auftraggebern gelieferten Q-Sätzen. In der kurzen Variante sind nur die Felder enthalten,
32
84
  # die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden (siehe 5.3).
33
85
  # Beide Varianten dürfen in einer Datei vorkommen.
34
- #
86
+
35
87
  # Datensatz Q - kurze Variante
36
88
  # Die Bundesbank nimmt Q-Sätze in 2 Varianten entgegen. Die lange Variante ist identisch mit
37
89
  # den von den Auftraggebern gelieferten Q-Sätzen. In der kurzen Variante sind nur die Felder
38
90
  # enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden; das in der
39
91
  # kurzen Variante nicht enthaltene Feld ist in der folgenden Tabelle durch Schattierung und Kursivschrift
40
92
  # kenntlich gemacht. Beide Varianten dürfen in einer Datei vorkommen.
93
+
41
94
  # [ Anmerk.: Bei der Kurzen Variante entfällt die Kundennummer ]
42
- #
43
- # === Fields
44
- # Nr Start Länge Inhalt
45
- # 1 1 4 Satzlänge numerisch bei Disketten und DFÜ
46
- # 2 5 1 Satzart Konstante "Q"
47
- # 3 6 8 BLZ Erstbeauftragtes Kreditinstitut
48
- # 4 14 10 Kundennummer Entfällt bei der kurzen Variante
49
- # 5 24 4x35 Auftraggeberdaten Zeile 1 und 2: Name;
50
- # Zeile 3: Straße/Postfach; Zeile 4: Ort
51
- # 6 164 6 Erstellungsdatum Format: JJMMTT
52
- # 7 170 2 Laufende Tagesnummer bei mehreren Überweisungen/Tag
53
- # 8 172 6 Ausführungstermin Datei, Format: JJMMTT; max Feld Q6 + 15 Tage
54
- # 9 178 1 Weiterleitung an die Meldebehörde, 'N' Nein, 'J' Ja
55
- # 10 179 2 optional Bundeslandschlüssel Zwingend bei 'J' in Feld Q9
56
- # 11 181 8 optional Firmennummer / BLZ des Auftraggebers Siehe Feld Q10
57
- # 12 189 68 Reserve
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
58
111
  def add_q
59
- data1 = '0256'
60
- data1 += 'Q'
61
- data1 += '%08i' % @account.bank_number
62
- data1 += '%010i' % @account.bank_account_number
63
- data1 += '%-035s' % @account.owner_name[0..34]
64
- data1 += '%-035s' % @account.owner_name[25..69]
65
- data1 += '%-035s' % @account.owner_street
66
- data1 += '%-035s' % @account.owner_zip_city
67
- data1 += @date.strftime("%y%m%d") # Erstellungsdatum
68
- data1 += '01'
69
- data1 += @date.strftime("%y%m%d") # Ausführungstermin
70
- data1 += "N"
71
- data1 += "%02i" % 0
72
- data1 += '%08i' % 0
73
- data1 += '%068s' % ''
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_1 # Einreichinstitut Zeile 1 u. 2: Name, PFLICHT
117
+ data1 += '%-035s' % @account.client_name_2 # Einreichinstitut Zeile 1 u. 2: Name, PFLICHT
118
+ data1 += '%-035s' % @account.client_street # Einreichinstitut Zeile 3: Straße Postfach, PFLICHT
119
+ data1 += '%-035s' % @account.client_zip_city # Einreichinstitut 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
74
127
  raise "DTAUS: Längenfehler Q (#{data.size} <> 256)\n" if data1.size != 256
75
128
  dta_string << data1
76
129
  end
@@ -78,7 +131,7 @@ module KingDta
78
131
  #Erstellen T-Segment der DTAZV-Datei
79
132
  # - T Einzelzahlungssatz mit 768 oder 572 Bytes
80
133
  # === Parameter
81
- # booking<Object>::Booking object to be written to c-section
134
+ # booking<Object>::Booking object to be written to c-sektion
82
135
  #
83
136
  # === Returns
84
137
  # <String>:: The current dta_string
@@ -95,27 +148,57 @@ module KingDta
95
148
  # die Felder enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt
96
149
  # werden. Die in der kurzen Variante nicht enthaltenen Felder sind in der folgenden Tabelle
97
150
  # durch Schattierung und Kursivschrift kenntlich gemacht. Beide Varianten dürfen in einer Datei vorkommen.
98
- #
99
- # Nr Start Länge Inhalt
100
- # 1 1 4 Satzlänge
101
- # 2 5 1 Konstante "T"
102
- # 3 6 8 BLZ des zu belastenden Kontos
103
- # 4a 14 3 Währungscode nur EUR - Entfällt bei der kurzen Variante
104
- # 4b 17 10 Kontonummer des zu belastenden Konto - Entfällt bei der kurzen Variante
105
- # 5 27 6 Ausführungstermin Format: JJMMTT; Q6 + max 15 Tage; default: Q8
106
- # 6 33 8 BLZ des zu belastenden Kontos - wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
107
- # 7a 41 3 ISO-Währungscode EUR, wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
108
- # 7b 44 10 Kontonummer, wenn Konto abweicht von Auftragswertkonto - Entfällt bei der kurzen Variante
109
- # 8 54 11 BIC des Zahlungsempfängers Wenn BLZ(DE only) sind drei Schrägstriche voranzustellen
110
- # Nicht zu belegen bei Scheckziehungen,d.h. bei den Zahlungsartschlüsseln 20-23 und 30-33 in Feld T22)
111
- # 9a 65 3 2-stelliger ISO-alpha-Ländercode Zahlungsempfängers, siehe Länderverzeichnis für die Zahlungsbilanzstatistik;
112
- # Pflicht, wenn T8 nicht belegt; nicht zu belegen bei Scheckziehungen,
113
- # 9b 68 4x35 Anschrift Bank des Zahlungsempfängers. Pflicht wenn T8 nicht belegt
114
- # Wenn Anschrift nicht bekannt„UNBEKANNT"
115
- # Zeile 1 und 2: Name Zeile 3: Straße Zeile 4: Ort
116
- # Nicht zu belegen bei Scheckziehungen
117
- #
118
- # 10a 3 208 alpha Ländercode für Land des 2-stelliger ISO-alpha-Ländercode gemäß P P - P
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
119
202
  # Zahlungsempfängers bzw. Länderverzeichnis für die Zahlungsbilanzstatistik;
120
203
  # Scheckempfängers linksbündig zu belegen; 3. Stelle Leerzeichen
121
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
@@ -198,141 +281,48 @@ module KingDta
198
281
  # 27 2 767 num Erweiterungskennzeichen 00 = es folgt kein Meldeteil P N - P -
199
282
  #
200
283
  def add_t(booking)
201
- data2 = '0768'
202
- data2 += 'T'
203
- data2 += '%08i' % @account.bank_number
204
- data2 += 'EUR'
205
- data2 += '%010i' % @account.bank_account_number
206
- data2 += @date.strftime("%y%m%d") # KANN, 5 Ausführungstermin Einzelzahlung, wenn abweichend von Q8
207
- data2 += '%08i' % 0 # KANN/PFLICHT 6 BLZ
208
- data2 += '%03s' % '' # KANN/PFLICHT 7a ISO-Währungscode
209
- data2 += '%010i' % 0 # KANN/PFLICHT 7b BLZ
210
- data2 += '%-011s' % booking.account.bank_bic
211
- data2 += '%-03s' % booking.account.bank_country_code # Pflichtfelder wenn T8 leer
212
- data2 += '%-070s' % booking.account.bank_name
213
- data2 += '%-035.35s' % booking.account.bank_street
214
- data2 += '%-035.35s' % booking.account.bank_zip_city
215
- data2 += '%-03s' % booking.account.owner_country_code # PFLICHT 10a Ländercode für Land des Zahlungsempfängers
216
- data2 += '%-035.35s' % booking.account.owner_name[0..34] # Zahlungsempfänger
217
- data2 += '%-035.35s' % booking.account.owner_name[35..69]
218
- data2 += '%-035.35s' % booking.account.owner_street
219
- data2 += '%-035.35s' % booking.account.owner_zip_city
220
- data2 += '%070s' % '' # KANN/PFLICHT 11 Ordervermerk
221
- data2 += '/%-034s' % booking.account.bank_iban # PFLICHT 12 35 IBAN bzw. Kontonummer des
222
- data2 += 'EUR' # KANN/PFLICHT 13 3 Auftragswährung "EUR"
223
- data2 += '%014i' % booking.value.divmod(100)[0] # PFLICHT 14a 14 Betrag (Vorkommastellen) Rechtsbündig
224
- data2 += '%02i0' % booking.value.divmod(100)[1] # PFLICHT 14b 3 Betrag (Nachkommastellen) Linksbündig
225
- data2 += '%-0140s' % (booking.text || default_text)
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 += '%035s' % '' #booking.account.street # KANN/PFLICHT 9b Name Zeile 3 : Straße Zeile
297
+ data2 += '%035s' % '' #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 += '%-035s' % booking.account.client_name_1 # KANN/PFLICHT 10b 4x35 Anschrift des Zahlungsdienstleisters des Zahlungsempfängers - Pflichtfeld wenn T8 nich belegt Zeile 1 und 2:
300
+ data2 += '%-035s' % booking.account.client_name_2 # KANN/PFLICHT 10b 4x35 Anschrift des Zahlungsdienstleisters des Zahlungsempfängers - Pflichtfeld wenn T8 nich belegt Zeile 1 und 2:
301
+ data2 += '%-035s' % booking.account.client_street # KANN/PFLICHT 10b Name Zeile 3 : Straße Zeile
302
+ data2 += '%-035s' % booking.account.client_zip_city # KANN/PFLICHT 10b 4 : Ort
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
226
309
  data2 += "%02i" % 0 # N 16 Weisungsschlüssel 1 (gem. Anhang 2)
227
310
  data2 += "%02i" % 0 # N 17 Weisungsschlüssel 2 (gem. Anhang 2)
228
311
  data2 += "%02i" % 0 # N 18 Weisungsschlüssel 3 (gem. Anhang 2)
229
312
  data2 += "%02i" % 0 # N 19 Weisungsschlüssel 4 (gem. Anhang 2 und 2a)
230
313
  data2 += '%025s' % '' # N 20 Zusatzinformationen zum Weisungsschlüssel
231
- data2 += "%02i" % 0 # PFLICHT 21 Entgeltregelung
232
- data2 += "%02i" % 13 # PFLICHT 22 Kennzeichnung der Zahlungsart Gemäß Anhang 1; Zahlungen, die weder '11' noch '13' als Zahlungsartschlüssel enthalten
233
- data2 += '%027s' % '' # KANN 23 Variabler Text nur für Auftraggeberabrechnung
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
234
317
  # i dont know what to do.
235
- data2 += '%035s' % '' # KANN/PFLICHT 24 35 Name und Telefonnummer sowie ggf. Stellvertretungsmeldung
236
- data2 += '%01i' % 0 # KANN/NICHT 25 Meldeschlüssel
237
- data2 += '%051s' % ''
238
- data2 += '%02i' % 0 # Erweiterungskennzeichen 00 = es folgt kein Meldeteil
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
239
322
  raise "DTAUS: Längenfehler T (#{data2.size} <> 768)\n" if data2.size != 768
240
323
  dta_string << data2
241
324
  end
242
325
 
243
-
244
-
245
- #Erstellen Y-Segment der DTAZV-Datei
246
- # - Y Datei-Nachsatz mit 256 Bytes
247
- # === Parameter
248
- # booking<Object>::Booking object to be written to c-sektion
249
- #
250
- # === Returns
251
- # <String>:: The current dta_string
252
- #Aufbau des Segments:
253
- # Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
254
- # 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Ü)
255
- # 2 1 5 P alpha Satzart Konstante Y
256
- # 3 15 6 P num Betragssumme Aus Datensätzen U Feld 5 ( = 0, falls keine U-Sätze vorhanden)
257
- # 4 15 21 P num Betragssumme Aus Datensätzen V Feld 7
258
- # 5 15 36 P num Betragssumme Aus Datensätzen V Feld 17
259
- # 6 15 51 P num Betragssumme Aus Datensätzen W Feld 9
260
- # 7 6 66 P num Anzahl der Datensätze Anzahl Datensätze U, V, W
261
- # 8 6 72 P num Anzahl der Datensätze Anzahl Datensätze T
262
- # 9 179 78 P alpha Leerzeichen Reserve
263
- def add_y(bookings)
264
- data3 = '0256'
265
- data3 += 'Y'
266
- data3 += '%015i' % 0
267
- data3 += '%015i' % 0
268
- data3 += '%015i' % 0
269
- data3 += '%015i' % 0
270
- data3 += '%06i' % 0 # 7 Anzahl der Datensätze
271
- data3 += '%06i' % bookings.count # 8 Anzahl der Datensätze
272
- data3 += '%0179s' % ''
273
- raise "DTAUS: Längenfehler T (#{data3.size} <> 256)\n" if data3.size != 256
274
- dta_string << data3
275
- end
276
-
277
- # THE MAGICAL Z SEGMENT
278
- def add_z(bookings)
279
- data3 = '0256'
280
- data3 += 'Z'
281
- sum = 0
282
- bookings.each do |b|
283
- sum += b.value.divmod(100)[0]
284
- end
285
- data3 += '%015i' % sum
286
- data3 += '%015i' % bookings.count
287
- data3 += '%0221s' % ''
288
- raise "DTAUS: Längenfehler Z (#{data3.size} <> 256)\n" if data3.size != 256
289
- dta_string << data3
290
- end
291
-
292
- # Erstellen P-Segment der DTAZV-Datei
293
- # - P Datei-Vorsatz mit 256 Bytes
294
- #
295
- # === Parameter
296
- # booking<Object>::Booking object to be written to c-sektion
297
- #
298
- # === Returns
299
- # <String>:: The current dta_string
300
- # Aufbau und Erläuterungen der Datei
301
- # Datensatz P (Datei-Vorsatz)
302
-
303
- # Der Vorsatz enthält Informationen über ein Institut, das Kundendatensätze Q, T, V und W als Meldung
304
- # nach §§ 59 ff. der AWV weiterleitet. Der Vorsatz bezieht sich auf alle unmittelbar folgen­ den
305
- # Kundendatensätze, deren Folge mit einem Datei-Nachsatz Y abgeschlossen wird.
306
-
307
- # Legende:
308
- # K = Kannfeld
309
- # P = Pflichtfeld
310
- # K/P = Pflichtfeld in Abhängigkeit von bestimmten Kriterien
311
- # N = nicht belegbares Feld
312
- # alpha = alphanumerische Daten (linksbündig, nicht belegte Stellen: Leerzeichen)
313
- # num = numerische Daten (rechtsbündig, nicht belegte Stellen Nullen)
314
-
315
- # Feld Länge in Bytes 1. Stelle im Satz Feldart Datenformat Inhalt Erläuterungen
316
- # 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Ü)
317
- # 2 1 5 P alpha Satzart Konstante 'P'
318
- # 3 8 6 K/P num Bankleitzahl BLZ des Einreichinstituts
319
- # 4 4x35 14 P alpha Einreichinstitut Zeile 1 u. 2: Name; Zeile 3: Straße Postfach; Zeile 4: Ort
320
- # 5 6 154 P num Erstellungsdatum In der Form JJMMTT
321
- # 6 2 160 P num laufende Nummer Laufende Tagesnummer
322
- # 7 95 162 N alpha Reserve
323
- def add_p
324
- # data = '0256' # Länge des Datensatzes, PFLICHT
325
- # data += 'P' # Satzart, PFLICHT
326
- # data += '%8i' % @account.bank_number # BLZ des Einreichinstituts, KANN
327
- # data += '%70s' % @account.bank_name # Einreichinstitut Zeile 1 u. 2: Name; PFLICHT
328
- # data += '%35s' % @account.account_street_zip # Einreichinstitut Straße Postfach; Ort PFLICHT
329
- # data += '%35s' % @account.city # Einreichinstitut Zeile 4: Ort PFLICHT
330
- # data += @date.strftime("%y%m%d") # Erstellungsdatum In der Form JJMMTT, PFLICHT
331
- # data += '01' # laufende Nummer Laufende Tagesnummer, PFLICHT
332
- # data += '%095s' % '' # Reserve
333
- # raise "DTAUS: Längenfehler P (#{data.size} <> 256)\n" if data.size != 256
334
- # dta_string << data
335
- end
336
326
  #Erstellen V-Segment der DTAZV-Datei
337
327
  # - V Meldedatensatz zum Transithandel mit 256 Bytes
338
328
  # === Parameter
@@ -428,5 +418,53 @@ module KingDta
428
418
  # data += '%0140s' # 10 nähere Angaben zur zugrunde liegenden Leistung
429
419
  # data += '%075s' # 11 Reserve
430
420
  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
+
431
469
  end
432
470
  end
@@ -13,9 +13,7 @@ module KingDta
13
13
  text.gsub!('ü', 'UE')
14
14
  text.gsub!('ö', 'OE')
15
15
  text.gsub!('ß', 'SS')
16
-
17
- text = I18n.transliterate(text)
18
-
16
+
19
17
  text.gsub! /[^a-zA-Z0-9\ \.\,\&\-\/\+\*\$\%]/, '' # Remove all invalid chars
20
18
  text.upcase.strip
21
19
  end
data/lib/king_dtaus.rb CHANGED
@@ -1,4 +1,3 @@
1
- require "i18n"
2
1
  require "bigdecimal"
3
2
  require "king_dta/helper"
4
3
  require "king_dta/dta"