sps_king 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +32 -0
- data/CONTRIBUTING.md +38 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +24 -0
- data/README.md +246 -0
- data/Rakefile +6 -0
- data/gemfiles/Gemfile-activemodel-3.1.x +5 -0
- data/gemfiles/Gemfile-activemodel-3.2.x +5 -0
- data/gemfiles/Gemfile-activemodel-4.0.x +5 -0
- data/gemfiles/Gemfile-activemodel-4.1.x +5 -0
- data/gemfiles/Gemfile-activemodel-4.2.x +5 -0
- data/gemfiles/Gemfile-activemodel-5.0.x +5 -0
- data/gemfiles/Gemfile-activemodel-5.1.x +5 -0
- data/gemfiles/Gemfile-activemodel-5.2.x +5 -0
- data/lib/schema/pain.001.001.03.ch.02.xsd +1212 -0
- data/lib/schema/pain.008.001.02.ch.03.xsd +784 -0
- data/lib/sps_king.rb +22 -0
- data/lib/sps_king/account.rb +24 -0
- data/lib/sps_king/account/creditor_account.rb +11 -0
- data/lib/sps_king/account/creditor_address.rb +37 -0
- data/lib/sps_king/account/debtor_account.rb +5 -0
- data/lib/sps_king/account/debtor_address.rb +34 -0
- data/lib/sps_king/converter.rb +53 -0
- data/lib/sps_king/error.rb +4 -0
- data/lib/sps_king/message.rb +163 -0
- data/lib/sps_king/message/credit_transfer.rb +140 -0
- data/lib/sps_king/message/direct_debit.rb +177 -0
- data/lib/sps_king/structured_remittance_information.rb +20 -0
- data/lib/sps_king/transaction.rb +59 -0
- data/lib/sps_king/transaction/credit_transfer_transaction.rb +19 -0
- data/lib/sps_king/transaction/direct_debit_transaction.rb +58 -0
- data/lib/sps_king/validator.rb +55 -0
- data/lib/sps_king/version.rb +3 -0
- data/spec/examples/pain.001.001.03.ch.02.xml +172 -0
- data/spec/examples/pain.008.001.02.ch.03.xml +240 -0
- data/spec/lib/sps_king/account/creditor_account_spec.rb +52 -0
- data/spec/lib/sps_king/account/creditor_address_spec.rb +14 -0
- data/spec/lib/sps_king/account/debtor_account_spec.rb +14 -0
- data/spec/lib/sps_king/account/debtor_address_spec.rb +14 -0
- data/spec/lib/sps_king/account_spec.rb +42 -0
- data/spec/lib/sps_king/converter_spec.rb +88 -0
- data/spec/lib/sps_king/message/credit_transfer_spec.rb +350 -0
- data/spec/lib/sps_king/message/direct_debit_spec.rb +483 -0
- data/spec/lib/sps_king/message_spec.rb +128 -0
- data/spec/lib/sps_king/structured_remittance_information_spec.rb +32 -0
- data/spec/lib/sps_king/transaction/credit_transfer_transaction_spec.rb +53 -0
- data/spec/lib/sps_king/transaction/direct_debit_transaction_spec.rb +56 -0
- data/spec/lib/sps_king/transaction_spec.rb +133 -0
- data/spec/lib/sps_king/validation_spec.rb +23 -0
- data/spec/lib/sps_king/validator_spec.rb +78 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/support/active_model.rb +30 -0
- data/spec/support/custom_matcher.rb +60 -0
- data/spec/support/factories.rb +33 -0
- data/spec/support/validations.rb +27 -0
- data/sps_king.gemspec +31 -0
- 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,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>
|