sps_king 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +32 -0
  5. data/CONTRIBUTING.md +38 -0
  6. data/Gemfile +2 -0
  7. data/LICENSE.txt +24 -0
  8. data/README.md +246 -0
  9. data/Rakefile +6 -0
  10. data/gemfiles/Gemfile-activemodel-3.1.x +5 -0
  11. data/gemfiles/Gemfile-activemodel-3.2.x +5 -0
  12. data/gemfiles/Gemfile-activemodel-4.0.x +5 -0
  13. data/gemfiles/Gemfile-activemodel-4.1.x +5 -0
  14. data/gemfiles/Gemfile-activemodel-4.2.x +5 -0
  15. data/gemfiles/Gemfile-activemodel-5.0.x +5 -0
  16. data/gemfiles/Gemfile-activemodel-5.1.x +5 -0
  17. data/gemfiles/Gemfile-activemodel-5.2.x +5 -0
  18. data/lib/schema/pain.001.001.03.ch.02.xsd +1212 -0
  19. data/lib/schema/pain.008.001.02.ch.03.xsd +784 -0
  20. data/lib/sps_king.rb +22 -0
  21. data/lib/sps_king/account.rb +24 -0
  22. data/lib/sps_king/account/creditor_account.rb +11 -0
  23. data/lib/sps_king/account/creditor_address.rb +37 -0
  24. data/lib/sps_king/account/debtor_account.rb +5 -0
  25. data/lib/sps_king/account/debtor_address.rb +34 -0
  26. data/lib/sps_king/converter.rb +53 -0
  27. data/lib/sps_king/error.rb +4 -0
  28. data/lib/sps_king/message.rb +163 -0
  29. data/lib/sps_king/message/credit_transfer.rb +140 -0
  30. data/lib/sps_king/message/direct_debit.rb +177 -0
  31. data/lib/sps_king/structured_remittance_information.rb +20 -0
  32. data/lib/sps_king/transaction.rb +59 -0
  33. data/lib/sps_king/transaction/credit_transfer_transaction.rb +19 -0
  34. data/lib/sps_king/transaction/direct_debit_transaction.rb +58 -0
  35. data/lib/sps_king/validator.rb +55 -0
  36. data/lib/sps_king/version.rb +3 -0
  37. data/spec/examples/pain.001.001.03.ch.02.xml +172 -0
  38. data/spec/examples/pain.008.001.02.ch.03.xml +240 -0
  39. data/spec/lib/sps_king/account/creditor_account_spec.rb +52 -0
  40. data/spec/lib/sps_king/account/creditor_address_spec.rb +14 -0
  41. data/spec/lib/sps_king/account/debtor_account_spec.rb +14 -0
  42. data/spec/lib/sps_king/account/debtor_address_spec.rb +14 -0
  43. data/spec/lib/sps_king/account_spec.rb +42 -0
  44. data/spec/lib/sps_king/converter_spec.rb +88 -0
  45. data/spec/lib/sps_king/message/credit_transfer_spec.rb +350 -0
  46. data/spec/lib/sps_king/message/direct_debit_spec.rb +483 -0
  47. data/spec/lib/sps_king/message_spec.rb +128 -0
  48. data/spec/lib/sps_king/structured_remittance_information_spec.rb +32 -0
  49. data/spec/lib/sps_king/transaction/credit_transfer_transaction_spec.rb +53 -0
  50. data/spec/lib/sps_king/transaction/direct_debit_transaction_spec.rb +56 -0
  51. data/spec/lib/sps_king/transaction_spec.rb +133 -0
  52. data/spec/lib/sps_king/validation_spec.rb +23 -0
  53. data/spec/lib/sps_king/validator_spec.rb +78 -0
  54. data/spec/spec_helper.rb +33 -0
  55. data/spec/support/active_model.rb +30 -0
  56. data/spec/support/custom_matcher.rb +60 -0
  57. data/spec/support/factories.rb +33 -0
  58. data/spec/support/validations.rb +27 -0
  59. data/sps_king.gemspec +31 -0
  60. metadata +237 -0
@@ -0,0 +1,177 @@
1
+ # encoding: utf-8
2
+
3
+ module SPS
4
+ class DirectDebit < Message
5
+ self.account_class = CreditorAccount
6
+ self.transaction_class = DirectDebitTransaction
7
+ self.xml_main_tag = 'CstmrDrctDbtInitn'
8
+ self.known_schemas = [
9
+ PAIN_008_001_02_CH_03
10
+ ]
11
+
12
+ validate do |record|
13
+ if record.transactions.map(&:local_instrument).uniq.size > 1
14
+ errors.add(
15
+ :base,
16
+ 'different local_instruments (e.g. LSV+, BDD) must not be mixed in one message!'
17
+ )
18
+ end
19
+ end
20
+
21
+ private
22
+ # Find groups of transactions which share the same values of some attributes
23
+ def transaction_group(transaction)
24
+ {
25
+ requested_date: transaction.requested_date,
26
+ service_level: transaction.service_level,
27
+ local_instrument: transaction.local_instrument,
28
+ account: transaction.creditor_account || account
29
+ }
30
+ end
31
+
32
+ def creditor_scheme_name(service_level)
33
+ case service_level
34
+ when 'CHDD' # PAIN_008_001_02_CH_03 only
35
+ return 'CHDD'
36
+ when 'CHTA' # PAIN_008_001_02_CH_03 only
37
+ return 'CHLS'
38
+ end
39
+ end
40
+
41
+ # For IBANs from Switzerland or Liechtenstein the clearing system member id can be retrieved
42
+ # as the 5th to 9th digit of the IBAN, which is the local bank code.
43
+ def clearing_system_member_id_from_iban(iban)
44
+ return iban.to_s[4..8].sub(/^0*/, '')
45
+ end
46
+
47
+ def build_payment_informations(builder)
48
+ # Build a PmtInf block for every group of transactions
49
+ grouped_transactions.each do |group, transactions|
50
+ builder.PmtInf do
51
+ builder.PmtInfId(payment_information_identification(group))
52
+ builder.PmtMtd('DD')
53
+ builder.PmtTpInf do
54
+ builder.SvcLvl do
55
+ builder.Prtry(group[:service_level])
56
+ end
57
+ builder.LclInstrm do
58
+ builder.Prtry(group[:local_instrument])
59
+ end
60
+ end
61
+ builder.ReqdColltnDt(group[:requested_date].iso8601)
62
+ builder.Cdtr do
63
+ builder.Nm(group[:account].name)
64
+ end
65
+ builder.CdtrAcct do
66
+ builder.Id do
67
+ builder.IBAN(group[:account].iban)
68
+ end
69
+ end
70
+ builder.CdtrAgt do
71
+ builder.FinInstnId do
72
+ builder.ClrSysMmbId do
73
+ builder.MmbId(clearing_system_member_id_from_iban(group[:account].iban))
74
+ end
75
+ if group[:account].isr_participant_number
76
+ builder.Othr do
77
+ builder.Id(group[:account].isr_participant_number)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ builder.CdtrSchmeId do
83
+ builder.Id do
84
+ builder.PrvtId do
85
+ builder.Othr do
86
+ builder.Id(group[:account].creditor_identifier)
87
+ builder.SchmeNm do
88
+ builder.Prtry(creditor_scheme_name(group[:service_level]))
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ transactions.each do |transaction|
96
+ build_transaction(builder, transaction)
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ def build_transaction(builder, transaction)
103
+ builder.DrctDbtTxInf do
104
+ builder.PmtId do
105
+ builder.InstrId(transaction.instruction)
106
+ builder.EndToEndId(transaction.reference)
107
+ end
108
+ builder.InstdAmt('%.2f' % transaction.amount, Ccy: transaction.currency)
109
+ builder.DbtrAgt do
110
+ builder.FinInstnId do
111
+ builder.ClrSysMmbId do
112
+ builder.MmbId(clearing_system_member_id_from_iban(transaction.iban))
113
+ end
114
+ end
115
+ end
116
+ builder.Dbtr do
117
+ builder.Nm(transaction.name)
118
+ if transaction.debtor_address
119
+ builder.PstlAdr do
120
+ # Only set the fields that are actually provided.
121
+ # StrtNm, BldgNb, PstCd, TwnNm provide a structured address
122
+ # separated into its individual fields.
123
+ # AdrLine provides the address in free format text.
124
+ # Both are currently allowed and the actual preference depends on the bank.
125
+ # Also the fields that are required legally may vary depending on the country
126
+ # or change over time.
127
+ if transaction.debtor_address.street_name
128
+ builder.StrtNm transaction.debtor_address.street_name
129
+ end
130
+
131
+ if transaction.debtor_address.post_code
132
+ builder.PstCd transaction.debtor_address.post_code
133
+ end
134
+
135
+ if transaction.debtor_address.town_name
136
+ builder.TwnNm transaction.debtor_address.town_name
137
+ end
138
+
139
+ if transaction.debtor_address.country_code
140
+ builder.Ctry transaction.debtor_address.country_code
141
+ end
142
+
143
+ if transaction.debtor_address.address_line1
144
+ builder.AdrLine transaction.debtor_address.address_line1
145
+ end
146
+
147
+ if transaction.debtor_address.address_line2
148
+ builder.AdrLine transaction.debtor_address.address_line2
149
+ end
150
+ end
151
+ end
152
+ end
153
+ builder.DbtrAcct do
154
+ builder.Id do
155
+ builder.IBAN(transaction.iban)
156
+ end
157
+ end
158
+ builder.RmtInf do
159
+ if transaction.remittance_information
160
+ builder.Ustrd(transaction.remittance_information)
161
+ end
162
+
163
+ builder.Strd do
164
+ builder.CdtrRefInf do
165
+ builder.Tp do
166
+ builder.CdOrPrtry do
167
+ builder.Prtry(transaction.structured_remittance_information.proprietary)
168
+ end
169
+ end
170
+ builder.Ref(transaction.structured_remittance_information.reference)
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,20 @@
1
+ module SPS
2
+ class StructuredRemittanceInformation
3
+ include ActiveModel::Validations
4
+ extend Converter
5
+
6
+ attr_accessor :proprietary,
7
+ :reference
8
+
9
+ validates_inclusion_of :proprietary, in: %w(ESR IPI)
10
+ validates_length_of :reference, within: 1..35
11
+
12
+ convert :proprietary, :reference, to: :text
13
+
14
+ def initialize(attributes = {})
15
+ attributes.each do |name, value|
16
+ public_send("#{name}=", value)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ module SPS
3
+ class Transaction
4
+ include ActiveModel::Validations
5
+ extend Converter
6
+
7
+ DEFAULT_REQUESTED_DATE = Date.new(1999, 1, 1).freeze
8
+
9
+ attr_accessor :name,
10
+ :iban,
11
+ :bic,
12
+ :amount,
13
+ :instruction,
14
+ :reference,
15
+ :remittance_information,
16
+ :structured_remittance_information,
17
+ :requested_date,
18
+ :batch_booking,
19
+ :currency,
20
+ :debtor_address,
21
+ :creditor_address
22
+
23
+ convert :name, :instruction, :reference, :remittance_information, to: :text
24
+ convert :amount, to: :decimal
25
+
26
+ validates_length_of :name, within: 1..70
27
+ validates_length_of :currency, is: 3
28
+ validates_length_of :instruction, within: 1..35, allow_nil: true
29
+ validates_length_of :reference, within: 1..35, allow_nil: true
30
+ validates_length_of :remittance_information, within: 1..140, allow_nil: true
31
+ validates_numericality_of :amount, greater_than: 0
32
+ validates_presence_of :requested_date
33
+ validates_inclusion_of :batch_booking, :in => [true, false]
34
+ validates_with BICValidator,
35
+ IBANValidator,
36
+ message: "%{value} is invalid"
37
+
38
+ def initialize(attributes = {})
39
+ attributes.each do |name, value|
40
+ send("#{name}=", value)
41
+ end
42
+
43
+ self.requested_date ||= DEFAULT_REQUESTED_DATE
44
+ self.reference ||= 'NOTPROVIDED'
45
+ self.batch_booking = true if self.batch_booking.nil?
46
+ self.currency ||= 'EUR'
47
+ end
48
+
49
+ protected
50
+
51
+ def validate_requested_date_after(min_requested_date)
52
+ return unless requested_date.is_a?(Date)
53
+
54
+ if requested_date != DEFAULT_REQUESTED_DATE && requested_date < min_requested_date
55
+ errors.add(:requested_date, "must be greater or equal to #{min_requested_date}, or nil")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ module SPS
3
+ class CreditTransferTransaction < Transaction
4
+ attr_accessor :service_level,
5
+ :creditor_address,
6
+ :category_purpose
7
+
8
+ validates_length_of :category_purpose, within: 1..4, allow_nil: true
9
+
10
+ validate { |t| t.validate_requested_date_after(Date.today) }
11
+
12
+ def schema_compatible?(schema_name)
13
+ case schema_name
14
+ when PAIN_001_001_03_CH_02
15
+ !self.bic.nil?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ module SPS
3
+ class DirectDebitTransaction < Transaction
4
+ SERVICE_LEVELS = %w(CHDD CHTA)
5
+
6
+ LOCAL_INSTRUMENTS_FOR_SERVICE_LEVELS = {
7
+ 'CHDD' => %w(DDCOR1 DDB2B),
8
+ 'CHTA' => %w(LSV+ BDD)
9
+ }
10
+
11
+ attr_accessor :service_level,
12
+ :local_instrument,
13
+ :creditor_account,
14
+ :debtor_address
15
+
16
+ validates_format_of :iban, with: /\A(CH|LI)/
17
+
18
+ validates_presence_of :instruction,
19
+ :structured_remittance_information
20
+
21
+ validates_inclusion_of :service_level, in: SERVICE_LEVELS, allow_nil: true
22
+ validate { |t| t.validate_local_instrument }
23
+ validate { |t| t.validate_requested_date_after(Date.today.next) }
24
+
25
+ validate do |t|
26
+ if creditor_account
27
+ errors.add(:creditor_account, 'is not correct') unless creditor_account.valid?
28
+ end
29
+ end
30
+
31
+ def initialize(attributes = {})
32
+ super
33
+ self.service_level ||= 'CHTA'
34
+ self.local_instrument ||= 'LSV+'
35
+ end
36
+
37
+ def schema_compatible?(schema_name)
38
+ case schema_name
39
+ when PAIN_008_001_02_CH_03
40
+ self.structured_remittance_information.present? &&
41
+ self.structured_remittance_information.valid?
42
+ end
43
+ end
44
+
45
+ def validate_local_instrument
46
+ if SERVICE_LEVELS.include?(self.service_level)
47
+ allowed_local_instruments = LOCAL_INSTRUMENTS_FOR_SERVICE_LEVELS[self.service_level]
48
+
49
+ if !allowed_local_instruments.include?(self.local_instrument)
50
+ errors.add(
51
+ :local_instrument,
52
+ "is not correct. Must be one of #{allowed_local_instruments.join(', ')}"
53
+ )
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module SPS
3
+ class IBANValidator < ActiveModel::Validator
4
+ # IBAN2007Identifier (taken from schema)
5
+ REGEX = /\A[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}\z/
6
+
7
+ def validate(record)
8
+ field_name = options[:field_name] || :iban
9
+ value = record.send(field_name).to_s
10
+
11
+ unless IBANTools::IBAN.valid?(value) && value.match(REGEX)
12
+ record.errors.add(field_name, :invalid, message: options[:message])
13
+ end
14
+ end
15
+ end
16
+
17
+ class BICValidator < ActiveModel::Validator
18
+ # AnyBICIdentifier (taken from schema)
19
+ REGEX = /\A[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}\z/
20
+
21
+ def validate(record)
22
+ field_name = options[:field_name] || :bic
23
+ value = record.send(field_name)
24
+
25
+ if value
26
+ unless value.to_s.match(REGEX)
27
+ record.errors.add(field_name, :invalid, message: options[:message])
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ class CreditorIdentifierValidator < ActiveModel::Validator
34
+ REGEX = /\A[a-zA-Z]{2,2}[0-9]{2,2}([A-Za-z0-9]|[\+|\?|\/|\-|\:|\(|\)|\.|,|']){3,3}([A-Za-z0-9]|[\+|\?|\/|\-|:|\(|\)|\.|,|']){1,28}\z|\A[A-Z0-9]{5,5}\z/
35
+
36
+ def validate(record)
37
+ field_name = options[:field_name] || :creditor_identifier
38
+ value = record.send(field_name)
39
+
40
+ unless valid?(value)
41
+ record.errors.add(field_name, :invalid, message: options[:message])
42
+ end
43
+ end
44
+
45
+ def valid?(creditor_identifier)
46
+ if ok = creditor_identifier.to_s.match(REGEX)
47
+ # In Germany, the identifier has to be exactly 18 chars long
48
+ if creditor_identifier[0..1].match(/DE/i)
49
+ ok = creditor_identifier.length == 18
50
+ end
51
+ end
52
+ ok
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module SPS
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,172 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ (C) Copyright 2010, SKSF, www.sksf.ch
4
+
5
+ Anregungen und Fragen zu diesem Dokument können an das jeweilige Finanzinstitut gerichtet werden.
6
+ Allgemeine Anregungen können auch bei der SIX Interbank Clearing AG unter folgender Adresse angebracht werden:
7
+ pm@six-group.com
8
+ -->
9
+ <Document xmlns="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd pain.001.001.03.ch.02.xsd">
10
+ <CstmrCdtTrfInitn>
11
+ <GrpHdr>
12
+ <MsgId>MSG-01</MsgId>
13
+ <CreDtTm>2010-02-15T07:30:00</CreDtTm>
14
+ <NbOfTxs>3</NbOfTxs>
15
+ <CtrlSum>15850.00</CtrlSum>
16
+ <InitgPty>
17
+ <Nm>MUSTER AG</Nm>
18
+ </InitgPty>
19
+ </GrpHdr>
20
+ <PmtInf>
21
+ <PmtInfId>PMTINF-01</PmtInfId>
22
+ <PmtMtd>TRF</PmtMtd>
23
+ <BtchBookg>true</BtchBookg>
24
+ <ReqdExctnDt>2010-02-22</ReqdExctnDt>
25
+ <Dbtr>
26
+ <Nm>MUSTER AG</Nm>
27
+ <PstlAdr>
28
+ <Ctry>CH</Ctry>
29
+ <AdrLine>SELDWYLA</AdrLine>
30
+ </PstlAdr>
31
+ </Dbtr>
32
+ <DbtrAcct>
33
+ <Id>
34
+ <IBAN>CH5481230000001998736</IBAN>
35
+ </Id>
36
+ </DbtrAcct>
37
+ <DbtrAgt>
38
+ <FinInstnId>
39
+ <BIC>RAIFCH22</BIC>
40
+ </FinInstnId>
41
+ </DbtrAgt>
42
+ <CdtTrfTxInf>
43
+ <PmtId>
44
+ <InstrId>INSTRID-01-01</InstrId>
45
+ <EndToEndId>ENDTOENDID-001</EndToEndId>
46
+ </PmtId>
47
+ <PmtTpInf>
48
+ <LclInstrm>
49
+ <Prtry>CH01</Prtry>
50
+ </LclInstrm>
51
+ </PmtTpInf>
52
+ <Amt>
53
+ <InstdAmt Ccy="CHF">3949.75</InstdAmt>
54
+ </Amt>
55
+ <CdtrAcct>
56
+ <Id>
57
+ <Othr>
58
+ <Id>01-39139-1</Id>
59
+ </Othr>
60
+ </Id>
61
+ </CdtrAcct>
62
+ <RmtInf>
63
+ <Strd>
64
+ <CdtrRefInf>
65
+ <Ref>210000000003139471430009017</Ref>
66
+ </CdtrRefInf>
67
+ </Strd>
68
+ </RmtInf>
69
+ </CdtTrfTxInf>
70
+ </PmtInf>
71
+ <PmtInf>
72
+ <PmtInfId>PMTINF-02</PmtInfId>
73
+ <PmtMtd>TRF</PmtMtd>
74
+ <BtchBookg>true</BtchBookg>
75
+ <ReqdExctnDt>2010-02-18</ReqdExctnDt>
76
+ <Dbtr>
77
+ <Nm>MUSTER AG</Nm>
78
+ <PstlAdr>
79
+ <Ctry>CH</Ctry>
80
+ <AdrLine>SELDWYLA</AdrLine>
81
+ </PstlAdr>
82
+ </Dbtr>
83
+ <DbtrAcct>
84
+ <Id>
85
+ <IBAN>CH5481230000001998736</IBAN>
86
+ </Id>
87
+ </DbtrAcct>
88
+ <DbtrAgt>
89
+ <FinInstnId>
90
+ <BIC>RAIFCH22</BIC>
91
+ </FinInstnId>
92
+ </DbtrAgt>
93
+ <CdtTrfTxInf>
94
+ <PmtId>
95
+ <InstrId>INSTRID-02-01</InstrId>
96
+ <EndToEndId>ENDTOENDID-002</EndToEndId>
97
+ </PmtId>
98
+ <PmtTpInf>
99
+ <LclInstrm>
100
+ <Prtry>CH02</Prtry>
101
+ </LclInstrm>
102
+ </PmtTpInf>
103
+ <Amt>
104
+ <InstdAmt Ccy="CHF">8479.25</InstdAmt>
105
+ </Amt>
106
+ <Cdtr>
107
+ <Nm>Robert Scheider SA</Nm>
108
+ <PstlAdr>
109
+ <StrtNm>Rue de la gare</StrtNm>
110
+ <BldgNb>24</BldgNb>
111
+ <PstCd>2501</PstCd>
112
+ <TwnNm>Biel</TwnNm>
113
+ <Ctry>CH</Ctry>
114
+ </PstlAdr>
115
+ </Cdtr>
116
+ <CdtrAcct>
117
+ <Id>
118
+ <Othr>
119
+ <Id>25-9034-2</Id>
120
+ </Othr>
121
+ </Id>
122
+ </CdtrAcct>
123
+ <RmtInf>
124
+ <Ustrd>Rechnung Nr. 408</Ustrd>
125
+ </RmtInf>
126
+ </CdtTrfTxInf>
127
+ <CdtTrfTxInf>
128
+ <PmtId>
129
+ <InstrId>INSTRID-02-02</InstrId>
130
+ <EndToEndId>ENDTOENDID-003</EndToEndId>
131
+ </PmtId>
132
+ <PmtTpInf>
133
+ <SvcLvl>
134
+ <Cd>SEPA</Cd>
135
+ </SvcLvl>
136
+ </PmtTpInf>
137
+ <Amt>
138
+ <InstdAmt Ccy="EUR">3421.00</InstdAmt>
139
+ </Amt>
140
+ <CdtrAgt>
141
+ <FinInstnId>
142
+ <BIC>DEUTDEFF</BIC>
143
+ </FinInstnId>
144
+ </CdtrAgt>
145
+ <Cdtr>
146
+ <Nm>Peter Haller</Nm>
147
+ <PstlAdr>
148
+ <AdrLine>Rosenauweg 4</AdrLine>
149
+ <AdrLine>DE-80036 München</AdrLine>
150
+ </PstlAdr>
151
+ </Cdtr>
152
+ <CdtrAcct>
153
+ <Id>
154
+ <IBAN>DE62007620110623852957</IBAN>
155
+ </Id>
156
+ </CdtrAcct>
157
+ <RmtInf>
158
+ <Strd>
159
+ <CdtrRefInf>
160
+ <Tp>
161
+ <CdOrPrtry>
162
+ <Cd>SCOR</Cd>
163
+ </CdOrPrtry>
164
+ </Tp>
165
+ <Ref>RF712348231</Ref>
166
+ </CdtrRefInf>
167
+ </Strd>
168
+ </RmtInf>
169
+ </CdtTrfTxInf>
170
+ </PmtInf>
171
+ </CstmrCdtTrfInitn>
172
+ </Document>