king_dtaus 2.0.1.pre → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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_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
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
@@ -131,7 +77,7 @@ module KingDta
131
77
  #Erstellen T-Segment der DTAZV-Datei
132
78
  # - T Einzelzahlungssatz mit 768 oder 572 Bytes
133
79
  # === Parameter
134
- # booking<Object>::Booking object to be written to c-sektion
80
+ # booking<Object>::Booking object to be written to c-section
135
81
  #
136
82
  # === Returns
137
83
  # <String>:: The current dta_string
@@ -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 += '%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
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
@@ -13,7 +13,9 @@ module KingDta
13
13
  text.gsub!('ü', 'UE')
14
14
  text.gsub!('ö', 'OE')
15
15
  text.gsub!('ß', 'SS')
16
-
16
+
17
+ text = I18n.transliterate(text)
18
+
17
19
  text.gsub! /[^a-zA-Z0-9\ \.\,\&\-\/\+\*\$\%]/, '' # Remove all invalid chars
18
20
  text.upcase.strip
19
21
  end
@@ -0,0 +1,3 @@
1
+ module KingDta
2
+ VERSION='2.0.1'
3
+ end
data/lib/king_dtaus.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "i18n"
1
2
  require "bigdecimal"
2
3
  require "king_dta/helper"
3
4
  require "king_dta/dta"