hbci 0.2.0

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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rubocop.yml +26 -0
  4. data/.rubocop_todo.yml +26 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +1 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +107 -0
  10. data/Rakefile +8 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +7 -0
  13. data/examples/credentials.rb +62 -0
  14. data/examples/get_accounts.rb +11 -0
  15. data/examples/get_balance.rb +8 -0
  16. data/examples/get_system_id.rb +6 -0
  17. data/examples/get_transactions.rb +15 -0
  18. data/hbci.gemspec +36 -0
  19. data/lib/development_profiler.rb +26 -0
  20. data/lib/hbci.rb +66 -0
  21. data/lib/hbci/connector.rb +33 -0
  22. data/lib/hbci/dialog.rb +77 -0
  23. data/lib/hbci/element_group.rb +93 -0
  24. data/lib/hbci/element_groups/generated_element_groups.rb +969 -0
  25. data/lib/hbci/element_groups/segment_head.rb +12 -0
  26. data/lib/hbci/element_groups/unknown.rb +11 -0
  27. data/lib/hbci/element_unparser.rb +21 -0
  28. data/lib/hbci/message.rb +47 -0
  29. data/lib/hbci/message_factory.rb +17 -0
  30. data/lib/hbci/parser.rb +114 -0
  31. data/lib/hbci/request.rb +32 -0
  32. data/lib/hbci/response.rb +25 -0
  33. data/lib/hbci/segment.rb +118 -0
  34. data/lib/hbci/segment_factory.rb +15 -0
  35. data/lib/hbci/segments/hikaz.rb +29 -0
  36. data/lib/hbci/segments/hikazs.rb +31 -0
  37. data/lib/hbci/segments/hirmg.rb +10 -0
  38. data/lib/hbci/segments/hirms.rb +17 -0
  39. data/lib/hbci/segments/hisal.rb +100 -0
  40. data/lib/hbci/segments/hisals.rb +19 -0
  41. data/lib/hbci/segments/hisyn.rb +11 -0
  42. data/lib/hbci/segments/hiupa.rb +12 -0
  43. data/lib/hbci/segments/hiupd.rb +37 -0
  44. data/lib/hbci/segments/hkend.rb +14 -0
  45. data/lib/hbci/segments/hkidn.rb +22 -0
  46. data/lib/hbci/segments/hkkaz.rb +25 -0
  47. data/lib/hbci/segments/hksal.rb +31 -0
  48. data/lib/hbci/segments/hksyn.rb +12 -0
  49. data/lib/hbci/segments/hkvvb.rb +18 -0
  50. data/lib/hbci/segments/hnhbk.rb +27 -0
  51. data/lib/hbci/segments/hnhbs.rb +14 -0
  52. data/lib/hbci/segments/hnsha.rb +31 -0
  53. data/lib/hbci/segments/hnshk.rb +79 -0
  54. data/lib/hbci/segments/hnvsd.rb +50 -0
  55. data/lib/hbci/segments/hnvsk.rb +60 -0
  56. data/lib/hbci/segments/segment_head.rb +11 -0
  57. data/lib/hbci/segments/unknown.rb +21 -0
  58. data/lib/hbci/services/accounts_receiver.rb +19 -0
  59. data/lib/hbci/services/balance_receiver.rb +69 -0
  60. data/lib/hbci/services/base_receiver.rb +43 -0
  61. data/lib/hbci/services/system_id_receiver.rb +35 -0
  62. data/lib/hbci/services/transactions_receiver.rb +75 -0
  63. data/lib/hbci/version.rb +5 -0
  64. metadata +315 -0
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'singleton'
4
+
5
+ module Hbci
6
+ class Connector
7
+ include Singleton
8
+
9
+ attr_accessor :message_number
10
+ attr_reader :credentials
11
+
12
+ def initialize
13
+ reset_message_number
14
+ end
15
+
16
+ def credentials=(credentials)
17
+ raise ArgumentError, "#{self.class.name}#initialize expects a BankCredentials::Hbci object" unless credentials.is_a?(BankCredentials::Hbci)
18
+ credentials.validate!
19
+ @credentials = credentials
20
+ end
21
+
22
+ def reset_message_number
23
+ @message_number = 1
24
+ end
25
+
26
+ def post(request_message)
27
+ req = HTTParty.post(@credentials.url, body: request_message.to_base64)
28
+ @message_number += 1
29
+ raise "Error in https communication with bank: #{req.response.inspect}" unless req.success?
30
+ Base64.decode64(req.response.body)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hbci
4
+ class Dialog
5
+ attr_reader :id
6
+ attr_reader :hbci_version
7
+ attr_reader :system_id
8
+ attr_reader :tan_mechanism
9
+ attr_reader :response
10
+ attr_reader :connector
11
+
12
+ def self.open(system_id: 0)
13
+ dialog = Dialog.new(system_id: system_id)
14
+ dialog.initiate
15
+ yield dialog
16
+ dialog.finish
17
+ end
18
+
19
+ def initialize(system_id: 0)
20
+ @connector = Connector.instance
21
+ @initiated = false
22
+ @hbci_version = '3.0'
23
+ @system_id = system_id
24
+ @tan_mechanism = nil
25
+ @id = 0
26
+ @response = nil
27
+ end
28
+
29
+ def credentials
30
+ @connector.credentials
31
+ end
32
+
33
+ def initiated?
34
+ @initiated
35
+ end
36
+
37
+ def initiate
38
+ request_message = MessageFactory.build(self) do |hnvsd|
39
+ hnvsd.add_segment(Segments::HKIDNv2.new)
40
+ hnvsd.add_segment(Segments::HKVVBv3.new)
41
+ end
42
+ request_message.compile
43
+
44
+ @response = Response.new(@connector.post(request_message))
45
+
46
+ raise @response.to_s unless initialization_successful?
47
+
48
+ @id = @response.find('HNHBK').dialog_id
49
+ @tan_mechanism = @response.find('HNVSD').find('HIRMS').allowed_tan_mechanism
50
+ @initiated = true
51
+ end
52
+
53
+ def finish
54
+ request_message = MessageFactory.build(self) do |hnvsd|
55
+ hnvsd.add_segment(Segments::HKENDv1.new)
56
+ end
57
+ request_message.compile
58
+
59
+ Response.new(@connector.post(request_message))
60
+
61
+ @connector.reset_message_number
62
+ end
63
+
64
+ private
65
+
66
+ def initialization_successful?
67
+ hirmg = response.find('HIRMG')
68
+ return false if hirmg && hirmg.ret_val_1.code[0].to_i == 9
69
+
70
+ hnvsd = response.find('HNVSD')
71
+ hirmg = hnvsd.find('HIRMG')
72
+ return false if hirmg && hirmg.ret_val_1.code[0].to_i == 9
73
+
74
+ true
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hbci
4
+ class ElementGroup
5
+ extend Forwardable
6
+ def_delegator :@elements, :[]
7
+ def_delegator :@elements, :[]=
8
+ attr_accessor :elements
9
+ attr_accessor :defined_elements
10
+
11
+ def self.elements_to_be_defined
12
+ @elements_to_be_defined ||= []
13
+ end
14
+
15
+ def self.element(name, definition = {})
16
+ elements_to_be_defined << definition.merge(name: name)
17
+ end
18
+
19
+ def element(name, definition = {})
20
+ define_element(definition.merge(name: name))
21
+ end
22
+
23
+ def define_elements
24
+ self.class.elements_to_be_defined.each { |el| define_element(el) }
25
+ end
26
+
27
+ def define_element(definition)
28
+ defined_elements << definition
29
+ apply_element_default(definition)
30
+ end
31
+
32
+ def to_s
33
+ element_strings = elements.each_with_index.map do |element, index|
34
+ ElementUnparser.new(element, defined_elements[index][:type]).unparse
35
+ end
36
+ element_strings.join(':').gsub(/:*$/, '')
37
+ end
38
+
39
+ def initialize
40
+ @defined_elements = []
41
+ @elements = []
42
+
43
+ define_elements
44
+ end
45
+
46
+ def respond_to?(name, include_all = false)
47
+ potential_element_name = name.to_s.split('=').first.to_sym
48
+
49
+ index_for_element(potential_element_name) || super
50
+ end
51
+
52
+ private
53
+
54
+ def get_element(name)
55
+ elements[index_for_element(name)]
56
+ end
57
+
58
+ def set_element(name, value)
59
+ elements[index_for_element(name)] = value
60
+ end
61
+
62
+ def method_missing(name, *args)
63
+ potential_element_name = name.to_s.split('=').first.to_sym
64
+ is_writer = (name[-1..-1] == '=')
65
+
66
+ index = index_for_element(potential_element_name)
67
+ if index
68
+ return set_element(potential_element_name, args.first) if is_writer && args.count == 1
69
+ return get_element(potential_element_name)
70
+ end
71
+
72
+ super
73
+ end
74
+
75
+ def respond_to_missing?(method_name, include_private = false)
76
+ potential_element_name = method_name.to_s.split('=').first.to_sym
77
+
78
+ index_for_element(potential_element_name) || super
79
+ end
80
+
81
+ def apply_element_default(definition)
82
+ if definition[:default].is_a?(Proc)
83
+ set_element(definition[:name], definition[:default].call(self))
84
+ else
85
+ set_element(definition[:name], definition[:default])
86
+ end
87
+ end
88
+
89
+ def index_for_element(name)
90
+ defined_elements.index { |el| el[:name] == name }
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,969 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hbci
4
+ module ElementGroups
5
+ class AllowedGV < ElementGroup
6
+ element :code
7
+ element :req_sigs
8
+ element :limittype
9
+ element :value
10
+ element :curr
11
+ element :limitdays
12
+ end
13
+
14
+ class BTG < ElementGroup
15
+ element :value
16
+ element :curr
17
+ end
18
+
19
+ class Cert < ElementGroup
20
+ element :type
21
+ element :cert
22
+ end
23
+
24
+ class KeyName < ElementGroup
25
+ element :country
26
+ element :blz
27
+ element :userid
28
+ element :keytype
29
+ element :keynum
30
+ element :keyversion
31
+ end
32
+
33
+ class KIK < ElementGroup
34
+ element :country
35
+ element :blz
36
+ end
37
+
38
+ class KLimit < ElementGroup
39
+ element :limittype
40
+ element :value
41
+ element :curr
42
+ element :limitdays
43
+ end
44
+
45
+ class MsgRef < ElementGroup
46
+ element :dialogid
47
+ element :msgnum
48
+ end
49
+
50
+ class PubKey < ElementGroup
51
+ element :usage
52
+ element :mode
53
+ element :method
54
+ element :modulus
55
+ element :modname
56
+ element :exponent
57
+ element :expname
58
+ end
59
+
60
+ class RetVal < ElementGroup
61
+ element :code
62
+ element :ref
63
+ element :text
64
+ element :parm
65
+ end
66
+
67
+ class SecTimestamp < ElementGroup
68
+ element :type
69
+ element :date
70
+ element :time
71
+ end
72
+
73
+ class SuppCompMethods < ElementGroup
74
+ element :func
75
+ element :version
76
+ end
77
+
78
+ class SuppLangs < ElementGroup
79
+ element :lang
80
+ end
81
+
82
+ class SuppSecMethods < ElementGroup
83
+ element :method
84
+ element :version
85
+ end
86
+
87
+ class SuppVersions < ElementGroup
88
+ element :version
89
+ end
90
+
91
+ class Address2 < ElementGroup
92
+ element :name1
93
+ element :name2
94
+ element :street_pf
95
+ element :plz
96
+ element :ort
97
+ element :country
98
+ element :tel
99
+ element :fax
100
+ element :email
101
+ end
102
+
103
+ class Aussetzung1 < ElementGroup
104
+ element :annual
105
+ element :startdate
106
+ element :enddate
107
+ element :number
108
+ end
109
+
110
+ class Aussetzung2 < ElementGroup
111
+ element :annual
112
+ element :startdate
113
+ element :enddate
114
+ element :number
115
+ element :newvalue_value
116
+ element :newvalue_curr
117
+ end
118
+
119
+ class Aussetzung3 < ElementGroup
120
+ element :annual
121
+ element :startdate
122
+ element :enddate
123
+ element :number
124
+ element :value
125
+ element :curr
126
+ end
127
+
128
+ class Berechtigter1 < ElementGroup
129
+ element :name
130
+ element :name2
131
+ element :berechtigter
132
+ element :berechtigung
133
+ element :btg_value
134
+ element :btg_curr
135
+ element :risiko
136
+ end
137
+
138
+ class Berechtigter2 < ElementGroup
139
+ element :name
140
+ element :name2
141
+ element :berechtigter
142
+ element :berechtigung
143
+ element :value
144
+ element :curr
145
+ element :risiko
146
+ end
147
+
148
+ class ChallengeValidity < ElementGroup
149
+ element :date
150
+ element :time
151
+ end
152
+
153
+ class CommParam < ElementGroup
154
+ element :dienst
155
+ element :addr
156
+ element :addr2
157
+ element :filter
158
+ element :filterversion
159
+ end
160
+
161
+ class DauerDetails < ElementGroup
162
+ element :firstdate
163
+ element :timeunit
164
+ element :turnus
165
+ element :execday
166
+ element :lastdate
167
+ end
168
+
169
+ class FestCond1 < ElementGroup
170
+ element :anlagedate
171
+ element :ablaufdate
172
+ element :zinssatz
173
+ element :zinsmethode
174
+ element :value
175
+ element :curr
176
+ element :value
177
+ element :curr
178
+ element :condid
179
+ element :condbez
180
+ end
181
+
182
+ class FestCond2 < ElementGroup
183
+ element :anlagedate
184
+ element :ablaufdate
185
+ element :zinssatz
186
+ element :zinsmethode
187
+ element :value
188
+ element :curr
189
+ element :value
190
+ element :curr
191
+ element :condid
192
+ element :condbez
193
+ end
194
+
195
+ class FestCondVersion < ElementGroup
196
+ element :version
197
+ element :date
198
+ element :time
199
+ end
200
+
201
+ class Info < ElementGroup
202
+ element :code
203
+ element :msg
204
+ end
205
+
206
+ class InfoInfo < ElementGroup
207
+ element :code
208
+ element :descr
209
+ element :type
210
+ element :version
211
+ element :format
212
+ element :comment
213
+ end
214
+
215
+ class KTO < ElementGroup
216
+ element :number
217
+ element :country
218
+ element :blz
219
+ end
220
+
221
+ class KTV2 < ElementGroup
222
+ element :number
223
+ element :subnumber
224
+ element :kik_country, default: 280
225
+ element :kik_blz
226
+ end
227
+
228
+ class KTV3 < ElementGroup
229
+ element :number
230
+ element :subnumber
231
+ element :country
232
+ element :blz
233
+ end
234
+
235
+ class KTVInt < ElementGroup
236
+ element :iban
237
+ element :bic
238
+ element :number
239
+ element :subnumber
240
+ element :kik_country
241
+ element :kik_blz
242
+ end
243
+
244
+ class KTVZVInt < ElementGroup
245
+ element :sepa
246
+ element :iban
247
+ element :bic
248
+ element :number
249
+ element :subnumber
250
+ element :country
251
+ element :blz
252
+ end
253
+
254
+ class ParCustomMsg < ElementGroup
255
+ element :maxlen
256
+ end
257
+
258
+ class ParDauerDel < ElementGroup
259
+ element :minpretime
260
+ element :maxpretime
261
+ element :cantermdel
262
+ end
263
+
264
+ class ParDauerSEPADel < ElementGroup
265
+ element :minpretime
266
+ element :maxpretime
267
+ element :cantermdel
268
+ element :orderdata_required
269
+ end
270
+
271
+ class ParDauerEdit < ElementGroup
272
+ element :numtermchanges
273
+ element :minpretime
274
+ element :maxpretime
275
+ element :recktoeditable
276
+ element :recnameeditable
277
+ element :valueeditable
278
+ element :keyeditable
279
+ element :usageeditable
280
+ element :firstexeceditable
281
+ element :timeuniteditable
282
+ element :turnuseditable
283
+ element :execdayeditable
284
+ element :lastexeceditable
285
+ element :maxusage
286
+ element :turnusmonths
287
+ element :dayspermonth
288
+ element :turnusweeks
289
+ element :daysperweek
290
+ element :textkey
291
+ end
292
+
293
+ class ParDauerSEPAEdit < ElementGroup
294
+ element :numtermchanges
295
+ element :minpretime
296
+ element :maxpretime
297
+ element :recktoeditable
298
+ element :recnameeditable
299
+ element :valueeditable
300
+ element :usageeditable
301
+ element :firstexeceditable
302
+ element :timeuniteditable
303
+ element :turnuseditable
304
+ element :execdayeditable
305
+ element :lastexeceditable
306
+ element :turnusmonths
307
+ element :dayspermonth
308
+ element :turnusweeks
309
+ element :daysperweek
310
+ end
311
+
312
+ class ParDauerNew < ElementGroup
313
+ element :maxusage
314
+ element :minpretime
315
+ element :maxpretime
316
+ element :turnusmonths
317
+ element :dayspermonth
318
+ element :turnusweeks
319
+ element :daysperweek
320
+ element :textkey
321
+ end
322
+
323
+ class ParDauerSEPANew < ElementGroup
324
+ element :maxusage
325
+ element :minpretime
326
+ element :maxpretime
327
+ element :turnusmonths
328
+ element :dayspermonth
329
+ element :turnusweeks
330
+ element :daysperweek
331
+ end
332
+
333
+ class ParFestCondList < ElementGroup
334
+ element :curr
335
+ end
336
+
337
+ class ParFestNew1 < ElementGroup
338
+ element :canotherausbuchungskto
339
+ element :canotherzinskto
340
+ element :kontoauszug
341
+ end
342
+
343
+ class ParFestNew2 < ElementGroup
344
+ element :canexistinganlkto
345
+ element :canotherausbuchungskto
346
+ element :canotherzinskto
347
+ element :kontoauszug
348
+ end
349
+
350
+ class ParKontoauszug < ElementGroup
351
+ element :canindex
352
+ element :needreceipt
353
+ element :canmaxentries
354
+ element :format
355
+ end
356
+
357
+ class ParKUmsNew1 < ElementGroup
358
+ element :timerange
359
+ element :canmaxentries
360
+ end
361
+
362
+ class ParKUmsNew2 < ElementGroup
363
+ element :timerange
364
+ element :canmaxentries
365
+ element :canallaccounts
366
+ end
367
+
368
+ class ParKUmsZeit1 < ElementGroup
369
+ element :timerange
370
+ element :canmaxentries
371
+ end
372
+
373
+ class ParKUmsZeit2 < ElementGroup
374
+ element :timerange
375
+ element :canmaxentries
376
+ element :canallaccounts
377
+ end
378
+
379
+ class ParLast < ElementGroup
380
+ element :maxusage
381
+ element :key
382
+ end
383
+
384
+ class ParLastObjection < ElementGroup
385
+ element :value
386
+ element :curr
387
+ element :key
388
+ end
389
+
390
+ class ParOrderHistory < ElementGroup
391
+ element :timerange
392
+ element :canmaxentries
393
+ end
394
+
395
+ class ParPinTan2 < ElementGroup
396
+ element :pinlen_min
397
+ element :pinlen_max
398
+ element :tanlen_max
399
+ element :info_userid
400
+ element :info_customerid
401
+ element :segcode
402
+ element :needtan
403
+ end
404
+
405
+ class ParSammelLast < ElementGroup
406
+ element :maxcsets
407
+ element :maxusage
408
+ element :key
409
+ end
410
+
411
+ class ParSammelUeb < ElementGroup
412
+ element :maxcsets
413
+ element :maxusage
414
+ element :key
415
+ end
416
+
417
+ class ParSammelUebSEPA < ElementGroup
418
+ element :maxnum
419
+ element :needtotal
420
+ element :cansingletransfer
421
+ end
422
+
423
+ class ParSEPAInfo < ElementGroup
424
+ element :cansingleaccquery
425
+ element :cannationalacc
426
+ element :canstructusage
427
+ element :suppformats
428
+ end
429
+
430
+ class ParTermSepaEinzelLast < ElementGroup
431
+ element :min_vorl_zeit_fnalrcur
432
+ element :max_vorl_zeit_fnalrcur
433
+ element :min_vorl_zeit_frstooff
434
+ element :max_vorl_zeit_frstooff
435
+ end
436
+
437
+ class ParTermSepaCOR1 < ElementGroup
438
+ element :min_vorl_zeit_fnalrcur
439
+ element :max_vorl_zeit_fnalrcur
440
+ element :min_vorl_zeit_frstooff
441
+ element :max_vorl_zeit_frstooff
442
+ element :purpose_codes
443
+ element :suppformats
444
+ end
445
+
446
+ class ParTermSepaB2B < ElementGroup
447
+ element :min_vorl_zeit_fnalrcur
448
+ element :max_vorl_zeit_fnalrcur
449
+ element :min_vorl_zeit_frstooff
450
+ element :max_vorl_zeit_frstooff
451
+ end
452
+
453
+ class ParSammelLastSEPA < ElementGroup
454
+ element :min_vorl_zeit_fnalrcur
455
+ element :max_vorl_zeit_fnalrcur
456
+ element :min_vorl_zeit_frstooff
457
+ element :max_vorl_zeit_frstooff
458
+ element :maxnum
459
+ element :needtotal
460
+ element :cansingletransfer
461
+ end
462
+
463
+ class ParSammelLastCOR1SEPA < ElementGroup
464
+ element :maxnum
465
+ element :needtotal
466
+ element :cansingletransfer
467
+ element :min_vorl_zeit_fnalrcur
468
+ element :max_vorl_zeit_fnalrcur
469
+ element :min_vorl_zeit_frstooff
470
+ element :max_vorl_zeit_frstooff
471
+ element :purpose_codes
472
+ element :suppformats
473
+ end
474
+
475
+ class ParSammelLastB2BSEPA < ElementGroup
476
+ element :min_vorl_zeit_fnalrcur
477
+ element :max_vorl_zeit_fnalrcur
478
+ element :min_vorl_zeit_frstooff
479
+ element :max_vorl_zeit_frstooff
480
+ element :maxnum
481
+ element :needtotal
482
+ element :cansingletransfer
483
+ end
484
+
485
+ class ParUmbSepa < ElementGroup
486
+ element :purpose_codes
487
+ element :suppformats
488
+ end
489
+
490
+ class ParTAN2Step1 < ElementGroup
491
+ element :can1step
492
+ element :canmultitangvs
493
+ element :orderhashmode
494
+ element :instsig
495
+ element :secfunc
496
+ element :process
497
+ element :id
498
+ element :name
499
+ element :maxlentan2step
500
+ element :tanformat
501
+ element :inputinfo
502
+ element :maxleninput2step
503
+ element :noftanlists
504
+ element :canmultitan
505
+ element :cantandelay
506
+ end
507
+
508
+ class ParTAN2Step2 < ElementGroup
509
+ element :can1step
510
+ element :canmultitangvs
511
+ element :orderhashmode
512
+ element :secfunc
513
+ element :process
514
+ element :id
515
+ element :name
516
+ element :maxlentan2step
517
+ element :tanformat
518
+ element :inputinfo
519
+ element :maxleninput2step
520
+ element :noftanlists
521
+ element :canmultitan
522
+ element :cantandelay
523
+ element :needtanlistidx
524
+ element :canstorno
525
+ element :needchallengeklass
526
+ element :needchallengevalue
527
+ end
528
+
529
+ class ParTAN2Step3 < ElementGroup
530
+ element :can1step
531
+ element :canmultitangvs
532
+ element :orderhashmode
533
+ element :secfunc
534
+ element :process
535
+ element :id
536
+ element :name
537
+ element :maxlentan2step
538
+ element :tanformat
539
+ element :inputinfo
540
+ element :maxleninput2step
541
+ element :noftanlists
542
+ element :canmultitan
543
+ element :cantandelay
544
+ element :needtanlistidx
545
+ element :canstorno
546
+ element :needchallengeklass
547
+ element :needchallengevalue
548
+ element :initmode
549
+ element :needtanmedia
550
+ element :nofactivetanmedia
551
+ end
552
+
553
+ class ParTAN2Step4 < ElementGroup
554
+ element :can1step
555
+ element :canmultitangvs
556
+ element :orderhashmode
557
+ element :secfunc
558
+ element :process
559
+ element :id
560
+ element :zkamethod_name
561
+ element :zkamethod_version
562
+ element :name
563
+ element :maxlentan2step
564
+ element :tanformat
565
+ element :inputinfo
566
+ element :maxleninput2step
567
+ element :noftanlists
568
+ element :canmultitan
569
+ element :cantandelay
570
+ element :needtanlistidx
571
+ element :canstorno
572
+ element :needsmsaccount
573
+ element :needchallengeklass
574
+ element :needchallengevalue
575
+ element :ischallengestructured
576
+ element :initmode
577
+ element :needtanmedia
578
+ element :nofactivetanmedia
579
+ end
580
+
581
+ class ParTAN2Step5 < ElementGroup
582
+ element :can1step
583
+ element :canmultitangvs
584
+ element :orderhashmode
585
+ element :secfunc
586
+ element :process
587
+ element :id
588
+ element :zkamethod_name
589
+ element :zkamethod_version
590
+ element :name
591
+ element :maxlentan2step
592
+ element :tanformat
593
+ element :inputinfo
594
+ element :maxleninput2step
595
+ element :noftanlists
596
+ element :canmultitan
597
+ element :cantandelay
598
+ element :needtanlistidx
599
+ element :canstorno
600
+ element :needsmsaccount
601
+ element :needorderaccount
602
+ element :needchallengeklass
603
+ element :ischallengestructured
604
+ element :initmode
605
+ element :needtanmedia
606
+ element :nofactivetanmedia
607
+ end
608
+
609
+ class ParTermSammelLast < ElementGroup
610
+ element :minpretime
611
+ element :maxpretime
612
+ element :maxcsets
613
+ element :maxusage
614
+ element :key
615
+ end
616
+
617
+ class ParTermSammelLastList < ElementGroup
618
+ element :cantimerange
619
+ end
620
+
621
+ class ParTermSammelUeb < ElementGroup
622
+ element :minpretime
623
+ element :maxpretime
624
+ element :maxcsets
625
+ element :maxusage
626
+ element :key
627
+ end
628
+
629
+ class ParTermSammelUebList < ElementGroup
630
+ element :cantimerange
631
+ end
632
+
633
+ class ParTermUeb < ElementGroup
634
+ element :minpretime
635
+ element :maxpretime
636
+ element :maxusage
637
+ element :key
638
+ end
639
+
640
+ class ParTermUebSEPA < ElementGroup
641
+ element :minpretime
642
+ element :maxpretime
643
+ end
644
+
645
+ class ParTermUebEdit < ElementGroup
646
+ element :minpretime
647
+ element :maxpretime
648
+ element :maxusage
649
+ element :key
650
+ end
651
+
652
+ class ParTermUebList < ElementGroup
653
+ element :cantimerange
654
+ end
655
+
656
+ class ParTermUebSEPAList < ElementGroup
657
+ element :canmaxentries
658
+ element :cantimerange
659
+ end
660
+
661
+ class ParTermUebSEPADel < ElementGroup
662
+ element :orderdata_required
663
+ end
664
+
665
+ class ParTermUebSEPAEdit < ElementGroup
666
+ element :minpretime
667
+ element :maxpretime
668
+ end
669
+
670
+ class ParUeb < ElementGroup
671
+ element :maxusage
672
+ element :key
673
+ end
674
+
675
+ class ParUebForeign < ElementGroup
676
+ element :caniban
677
+ element :countryinfo
678
+ end
679
+
680
+ class ParUmb < ElementGroup
681
+ element :maxusage
682
+ element :key
683
+ end
684
+
685
+ class ParVormerkposten < ElementGroup
686
+ element :canmaxentries
687
+ element :canallaccounts
688
+ end
689
+
690
+ class ParWPDepotList1 < ElementGroup
691
+ element :canmaxentries
692
+ end
693
+
694
+ class ParWPDepotList2 < ElementGroup
695
+ element :canmaxentries
696
+ element :cancurr
697
+ element :canquality
698
+ end
699
+
700
+ class ParWPDepotUms < ElementGroup
701
+ element :timerange
702
+ end
703
+
704
+ class ParWPInfoList < ElementGroup
705
+ element :needdepot
706
+ end
707
+
708
+ class ParWPKursList1 < ElementGroup
709
+ element :availboerses
710
+ element :kurspaket
711
+ end
712
+
713
+ class ParWPKursList2 < ElementGroup
714
+ element :needdepot
715
+ element :canquality
716
+ element :availboerses
717
+ element :kurspaket
718
+ end
719
+
720
+ class ParWPRefList < ElementGroup
721
+ element :searchallowed
722
+ element :regionallowed
723
+ element :standardallowed
724
+ element :newallowed
725
+ element :availboerses
726
+ element :availtypes
727
+ end
728
+
729
+ class ParWPStammList < ElementGroup
730
+ element :needdepot
731
+ element :risikodescr
732
+ end
733
+
734
+ class Prolong < ElementGroup
735
+ element :laufzeit
736
+ element :value
737
+ element :curr
738
+ element :wiederanlage
739
+ end
740
+
741
+ class Saldo < ElementGroup
742
+ element :credit_debit
743
+ element :btg_value
744
+ element :btg_curr
745
+ element :date
746
+ element :time
747
+ end
748
+
749
+ class Saldo2 < ElementGroup
750
+ element :credit_debit
751
+ element :value
752
+ element :curr
753
+ element :date
754
+ element :time
755
+ end
756
+
757
+ class TANInfo < ElementGroup
758
+ element :usagecode
759
+ element :usagetxt
760
+ element :tan
761
+ element :usagedate
762
+ element :usagetime
763
+ end
764
+
765
+ class TANMediaInfo1 < ElementGroup
766
+ element :mediacategory
767
+ element :status
768
+ element :cardnumber
769
+ element :cardseqnumber
770
+ element :tanlistnumber
771
+ element :freetans
772
+ element :lastuse
773
+ element :activatedon
774
+ end
775
+
776
+ class TANMediaInfo2 < ElementGroup
777
+ element :mediacategory
778
+ element :status
779
+ element :cardnumber
780
+ element :cardseqnumber
781
+ element :cardtype
782
+ element :number
783
+ element :subnumber
784
+ element :kik_country
785
+ element :kik_blz
786
+ element :validfrom
787
+ element :validto
788
+ element :tanlistnumber
789
+ element :medianame
790
+ element :iban
791
+ element :bic
792
+ element :number
793
+ element :subnumber
794
+ element :kik_country
795
+ element :kik_blz
796
+ element :freetans
797
+ element :lastuse
798
+ element :activatedon
799
+ end
800
+
801
+ class TANMediaInfo3 < ElementGroup
802
+ element :mediacategory
803
+ element :status
804
+ element :cardnumber
805
+ element :cardseqnumber
806
+ element :cardtype
807
+ element :number
808
+ element :subnumber
809
+ element :kik_country
810
+ element :kik_blz
811
+ element :validfrom
812
+ element :validto
813
+ element :tanlistnumber
814
+ element :medianame
815
+ element :mobilenumber_secure
816
+ element :iban
817
+ element :bic
818
+ element :number
819
+ element :subnumber
820
+ element :kik_country
821
+ element :kik_blz
822
+ element :freetans
823
+ element :lastuse
824
+ element :activatedon
825
+ end
826
+
827
+ class TANMediaInfo4 < ElementGroup
828
+ element :mediacategory
829
+ element :status
830
+ element :cardnumber
831
+ element :cardseqnumber
832
+ element :cardtype
833
+ element :number
834
+ element :subnumber
835
+ element :kik_country
836
+ element :kik_blz
837
+ element :validfrom
838
+ element :validto
839
+ element :tanlistnumber
840
+ element :medianame
841
+ element :mobilenumber_secure
842
+ element :mobilenumber
843
+ element :iban
844
+ element :bic
845
+ element :number
846
+ element :subnumber
847
+ element :kik_country
848
+ element :kik_blz
849
+ element :freetans
850
+ element :lastuse
851
+ element :activatedon
852
+ end
853
+
854
+ class TimeRange < ElementGroup
855
+ element :startdate
856
+ element :enddate
857
+ end
858
+
859
+ class Timestamp < ElementGroup
860
+ element :date
861
+ element :time
862
+ end
863
+
864
+ class Usage1 < ElementGroup
865
+ element :usage
866
+ end
867
+
868
+ class Usage2 < ElementGroup
869
+ element :usage
870
+ end
871
+
872
+ class Usage3 < ElementGroup
873
+ element :usage
874
+ end
875
+
876
+ class WPBInfo1 < ElementGroup
877
+ element :boerse
878
+ element :curr
879
+ element :smallestunit
880
+ element :marktsegment
881
+ end
882
+
883
+ class WPBInfo2 < ElementGroup
884
+ element :boerse
885
+ element :curr
886
+ element :type
887
+ element :type_xetra
888
+ element :smallestunit
889
+ element :marktsegmentausland
890
+ element :marktsegment
891
+ end
892
+
893
+ class WPBKurs < ElementGroup
894
+ element :kurs
895
+ element :curr
896
+ element :addkurs
897
+ element :date
898
+ element :time
899
+ element :boerse
900
+ end
901
+
902
+ class WPKursData < ElementGroup
903
+ element :boerse
904
+ element :notizeinheit
905
+ element :curr
906
+ element :date
907
+ element :time
908
+ element :kassakurs_kurs
909
+ element :vorboerse_kurs
910
+ element :openkurs_kurs
911
+ element :lastkurs_kurs
912
+ element :addkurs
913
+ element :nachboerse_kurs
914
+ element :zeitbezug
915
+ element :annmax_kurs
916
+ element :annmin_kurs
917
+ element :prevdaykurs_kurs
918
+ element :outputprice_kurs
919
+ element :retprice_kurs
920
+ end
921
+
922
+ class WPRef < ElementGroup
923
+ element :type
924
+ element :code
925
+ end
926
+
927
+ class WPStammAktien < ElementGroup
928
+ element :boerse
929
+ element :nennwert_value
930
+ element :kapitalchange
931
+ element :kapitalchangevalue_value
932
+ element :dividende_value
933
+ element :hvtermin
934
+ end
935
+
936
+ class WPStammFonds < ElementGroup
937
+ element :faelligkeit
938
+ element :wiederanlagerabattvon
939
+ element :wiederanlagerabatt_bis
940
+ element :wiederanlagerabatt
941
+ element :ausgabeaufschlag
942
+ element :verwaltungsgebuehr
943
+ element :depotbankgebuehr
944
+ element :info
945
+ end
946
+
947
+ class WPStammOptions < ElementGroup
948
+ element :boerse
949
+ element :faelligkeit
950
+ element :underlying
951
+ element :bezugsverhaeltnis
952
+ end
953
+
954
+ class WPStammRenten < ElementGroup
955
+ element :boerse
956
+ element :zinssatz
957
+ element :emissdate
958
+ element :faelligkeit
959
+ element :firstzinstermin
960
+ element :zinsperiode
961
+ element :einloesungskurs
962
+ element :einloesungstype
963
+ end
964
+
965
+ class WPZinsTermine < ElementGroup
966
+ element :termin
967
+ end
968
+ end
969
+ end