sepa_file_parser 0.9.0 → 0.11.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.
- checksums.yaml +4 -4
- data/lib/sepa_file_parser/camt052/report.rb +4 -0
- data/lib/sepa_file_parser/general/account.rb +7 -1
- data/lib/sepa_file_parser/general/bank_transaction_code.rb +24 -0
- data/lib/sepa_file_parser/general/batch_detail.rb +15 -0
- data/lib/sepa_file_parser/general/creditor_reference_information.rb +23 -0
- data/lib/sepa_file_parser/general/entry.rb +14 -1
- data/lib/sepa_file_parser/general/owner.rb +27 -0
- data/lib/sepa_file_parser/general/return_information.rb +20 -0
- data/lib/sepa_file_parser/general/transaction.rb +40 -2
- data/lib/sepa_file_parser/version.rb +1 -1
- data/lib/sepa_file_parser.rb +4 -0
- metadata +8 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2538b348949805e79a4612d486d7c983b1254981b9d265cf95377b9f65f1ff84
|
|
4
|
+
data.tar.gz: f8b3f1f5c088107de2da1dc8342c7971eae4442b4902eeb6368d9e4ab69354ea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 391584744f49b0e6e9dad59e8ea63d24a67c0970ea93adee87535d8084abcdd6df619d310cd30bf2cbbe0cc586e09d152686b791bd79dc23d27bc1e18ed39d85
|
|
7
|
+
data.tar.gz: 2f33ab86d70d63bd5a6b1af0f4a1257b07ae46a29ba7e8ce2c110e452faa59dc7a94b861b401240d05d7f21f85a2c94af9f29351a8a7678d980d26969c0f8567
|
|
@@ -26,6 +26,10 @@ module SepaFileParser
|
|
|
26
26
|
@entries ||= xml_data.xpath('Ntry').map{ |x| SepaFileParser::Entry.new(x) }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
def electronic_sequence_number
|
|
30
|
+
@electronic_sequence_number ||= xml_data.xpath('ElctrncSeqNb/text()').text
|
|
31
|
+
end
|
|
32
|
+
|
|
29
33
|
def legal_sequence_number
|
|
30
34
|
@legal_sequence_number ||= xml_data.xpath('LglSeqNb/text()').text
|
|
31
35
|
end
|
|
@@ -13,6 +13,7 @@ module SepaFileParser
|
|
|
13
13
|
].reject(&:empty?).first.to_s,
|
|
14
14
|
bank_name: xml_data.xpath('Svcr/FinInstnId/Nm/text()').text,
|
|
15
15
|
currency: xml_data.xpath('Ccy/text()').text,
|
|
16
|
+
owner: SepaFileParser::Owner.new(xml_data.xpath('Ownr'))
|
|
16
17
|
)
|
|
17
18
|
end
|
|
18
19
|
|
|
@@ -25,12 +26,13 @@ module SepaFileParser
|
|
|
25
26
|
)
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
def initialize(iban: nil, other_id: nil, bic:, bank_name:, currency:)
|
|
29
|
+
def initialize(iban: nil, other_id: nil, bic:, bank_name:, currency:, owner: nil)
|
|
29
30
|
@iban = iban
|
|
30
31
|
@other_id = other_id
|
|
31
32
|
@bic = bic
|
|
32
33
|
@bank_name = bank_name
|
|
33
34
|
@currency = currency
|
|
35
|
+
@owner = owner
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
# @return [String]
|
|
@@ -62,5 +64,9 @@ module SepaFileParser
|
|
|
62
64
|
def currency
|
|
63
65
|
@currency.to_s
|
|
64
66
|
end
|
|
67
|
+
|
|
68
|
+
def owner
|
|
69
|
+
@owner
|
|
70
|
+
end
|
|
65
71
|
end
|
|
66
72
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SepaFileParser
|
|
4
|
+
class BankTransactionCode
|
|
5
|
+
|
|
6
|
+
attr_reader :xml_data
|
|
7
|
+
|
|
8
|
+
def initialize(xml_data)
|
|
9
|
+
@xml_data = xml_data
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def domain_code # May be missing
|
|
13
|
+
@domain_code ||= xml_data.xpath('Domn/Cd/text()').text
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def family_code # May be missing
|
|
17
|
+
@family_code ||= xml_data.xpath('Domn/Fmly/Cd/text()').text
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def sub_family_code # May be missing
|
|
21
|
+
@sub_family_code ||= xml_data.xpath('Domn/Fmly/SubFmlyCd/text()').text
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -7,6 +7,20 @@ module SepaFileParser
|
|
|
7
7
|
|
|
8
8
|
def initialize(xml_data)
|
|
9
9
|
@xml_data = xml_data
|
|
10
|
+
@amount = xml_data.xpath('TtlAmt/text()').text
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def total_amount
|
|
14
|
+
SepaFileParser::Misc.to_amount(@amount)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def total_amount_in_cents
|
|
18
|
+
SepaFileParser::Misc.to_amount_in_cents(@amount)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [String]
|
|
22
|
+
def currency
|
|
23
|
+
@currency ||= xml_data.xpath('TtlAmt/@Ccy').text
|
|
10
24
|
end
|
|
11
25
|
|
|
12
26
|
def payment_information_identification
|
|
@@ -16,6 +30,7 @@ module SepaFileParser
|
|
|
16
30
|
def msg_id # may be missing
|
|
17
31
|
@msg_id ||= xml_data.xpath('MsgId/text()').text
|
|
18
32
|
end
|
|
33
|
+
alias_method :message_id, :msg_id # same like in transaction.rb
|
|
19
34
|
|
|
20
35
|
def number_of_transactions
|
|
21
36
|
@number_of_transactions ||= xml_data.xpath('NbOfTxs/text()').text
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SepaFileParser
|
|
4
|
+
class CreditorReferenceInformation
|
|
5
|
+
|
|
6
|
+
attr_reader :xml_data
|
|
7
|
+
|
|
8
|
+
def initialize(xml_data)
|
|
9
|
+
@xml_data = xml_data
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def creditor_reference
|
|
13
|
+
@creditor_reference ||= xml_data.xpath('Ref/text()').text
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def code_or_proprietary
|
|
17
|
+
@code_or_proprietary ||= [
|
|
18
|
+
xml_data.xpath('Tp/CdOrPrtry/Cd/text()').text,
|
|
19
|
+
xml_data.xpath('Tp/CdOrPrtry/Prtry/text()').text,
|
|
20
|
+
].reject(&:empty?).first.to_s
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -100,11 +100,24 @@ module SepaFileParser
|
|
|
100
100
|
end
|
|
101
101
|
# @return [SepaFileParser::BatchDetail, nil]
|
|
102
102
|
def batch_detail
|
|
103
|
-
@batch_detail ||= xml_data.xpath('NtryDtls/Btch').empty? ? nil :
|
|
103
|
+
@batch_detail ||= xml_data.xpath('NtryDtls/Btch').empty? ? nil : parse_batch_detail
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @return [SepaFileParser::BankTransactionCode, nil]
|
|
107
|
+
def bank_transaction_code
|
|
108
|
+
@bank_transaction_code ||= xml_data.xpath('BkTxCd').empty? ? nil : parse_bank_trx_code
|
|
104
109
|
end
|
|
105
110
|
|
|
106
111
|
private
|
|
107
112
|
|
|
113
|
+
def parse_batch_detail
|
|
114
|
+
SepaFileParser::BatchDetail.new(xml_data.xpath('NtryDtls/Btch'))
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def parse_bank_trx_code
|
|
118
|
+
SepaFileParser::BankTransactionCode.new(xml_data.xpath('BkTxCd'))
|
|
119
|
+
end
|
|
120
|
+
|
|
108
121
|
def parse_transactions
|
|
109
122
|
transaction_details = xml_data.xpath('NtryDtls/TxDtls')
|
|
110
123
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SepaFileParser
|
|
4
|
+
|
|
5
|
+
class Owner
|
|
6
|
+
|
|
7
|
+
attr_reader :xml_data
|
|
8
|
+
|
|
9
|
+
def initialize(xml_data)
|
|
10
|
+
@xml_data = xml_data
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @return [String]
|
|
14
|
+
def name
|
|
15
|
+
@name ||= xml_data.xpath('Nm/text()').text
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @return [SepaFileParser::PostalAddress, nil]
|
|
19
|
+
def postal_address # May be missing
|
|
20
|
+
postal_address = xml_data.xpath('PstlAdr')
|
|
21
|
+
|
|
22
|
+
return nil if postal_address == nil || postal_address.empty?
|
|
23
|
+
|
|
24
|
+
@address ||= SepaFileParser::PostalAddress.new(postal_address)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SepaFileParser
|
|
4
|
+
class ReturnInformation
|
|
5
|
+
|
|
6
|
+
attr_reader :xml_data
|
|
7
|
+
|
|
8
|
+
def initialize(xml_data)
|
|
9
|
+
@xml_data = xml_data
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def additional_information # May be missing
|
|
13
|
+
@additional_information ||= xml_data.xpath('AddtlInf/text()').text
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def reason_code
|
|
17
|
+
@reason_code ||= xml_data.xpath('Rsn/Cd/text()').text
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -72,6 +72,10 @@ module SepaFileParser
|
|
|
72
72
|
credit? ? 1 : -1
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
def additional_remittance_information # May be missing
|
|
76
|
+
@additional_remittance_information ||= xml_data.xpath('RmtInf/Strd/AddtlRmtInf/text()').text
|
|
77
|
+
end
|
|
78
|
+
|
|
75
79
|
def remittance_information
|
|
76
80
|
@remittance_information ||= begin
|
|
77
81
|
if (x = xml_data.xpath('RmtInf/Ustrd')).empty?
|
|
@@ -115,7 +119,15 @@ module SepaFileParser
|
|
|
115
119
|
end
|
|
116
120
|
|
|
117
121
|
def creditor_reference # May be missing
|
|
118
|
-
@creditor_reference ||=
|
|
122
|
+
@creditor_reference ||= creditor_reference_information.creditor_reference
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def creditor_reference_information
|
|
126
|
+
if xml_data.xpath('RmtInf/Strd/CdtrRefInf').empty?
|
|
127
|
+
return nil
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
@creditor_reference_information ||= parse_creditor_reference_information
|
|
119
131
|
end
|
|
120
132
|
|
|
121
133
|
def message_id # May be missing
|
|
@@ -137,12 +149,26 @@ module SepaFileParser
|
|
|
137
149
|
@payment_information ||= xml_data.xpath('Refs/PmtInfId/text()').text
|
|
138
150
|
end
|
|
139
151
|
|
|
152
|
+
def uetr # May be missing
|
|
153
|
+
@uetr ||= xml_data.xpath('Refs/UETR/text()').text
|
|
154
|
+
end
|
|
155
|
+
alias_method :unique_e2e_reference, :uetr
|
|
156
|
+
|
|
140
157
|
def additional_information # May be missing
|
|
141
158
|
@addition_information ||= xml_data.xpath('AddtlTxInf/text()').text
|
|
142
159
|
end
|
|
143
160
|
|
|
144
161
|
def reason_code # May be missing
|
|
145
|
-
@reason_code ||=
|
|
162
|
+
@reason_code ||= parse_return_information.reason_code # For compatibility
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def return_information
|
|
166
|
+
@return_information ||= parse_return_information
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @return [SepaFileParser::BankTransactionCode, nil]
|
|
170
|
+
def bank_transaction_code
|
|
171
|
+
@bank_transaction_code ||= xml_data.xpath('BkTxCd').empty? ? nil : parse_bank_trx_code
|
|
146
172
|
end
|
|
147
173
|
|
|
148
174
|
private
|
|
@@ -166,5 +192,17 @@ module SepaFileParser
|
|
|
166
192
|
xml_data.xpath('AmtDtls//Amt/@Ccy').first.text
|
|
167
193
|
end
|
|
168
194
|
end
|
|
195
|
+
|
|
196
|
+
def parse_return_information
|
|
197
|
+
@return_information ||= ReturnInformation.new(xml_data.xpath('RtrInf'))
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def parse_bank_trx_code
|
|
201
|
+
SepaFileParser::BankTransactionCode.new(xml_data.xpath('BkTxCd'))
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def parse_creditor_reference_information
|
|
205
|
+
CreditorReferenceInformation.new(xml_data.xpath('RmtInf/Strd/CdtrRefInf'))
|
|
206
|
+
end
|
|
169
207
|
end
|
|
170
208
|
end
|
data/lib/sepa_file_parser.rb
CHANGED
|
@@ -8,12 +8,15 @@ require_relative 'sepa_file_parser/misc'
|
|
|
8
8
|
require_relative 'sepa_file_parser/version'
|
|
9
9
|
require_relative 'sepa_file_parser/errors'
|
|
10
10
|
require_relative 'sepa_file_parser/general/account_balance'
|
|
11
|
+
require_relative 'sepa_file_parser/general/bank_transaction_code'
|
|
11
12
|
require_relative 'sepa_file_parser/general/creditor'
|
|
13
|
+
require_relative 'sepa_file_parser/general/creditor_reference_information'
|
|
12
14
|
require_relative 'sepa_file_parser/general/debitor'
|
|
13
15
|
require_relative 'sepa_file_parser/general/entry'
|
|
14
16
|
require_relative 'sepa_file_parser/general/record'
|
|
15
17
|
require_relative 'sepa_file_parser/general/charges'
|
|
16
18
|
require_relative 'sepa_file_parser/general/account'
|
|
19
|
+
require_relative 'sepa_file_parser/general/owner'
|
|
17
20
|
require_relative 'sepa_file_parser/general/batch_detail'
|
|
18
21
|
require_relative 'sepa_file_parser/general/group_header'
|
|
19
22
|
require_relative 'sepa_file_parser/general/pain_entry'
|
|
@@ -23,6 +26,7 @@ require_relative 'sepa_file_parser/general/type/builder'
|
|
|
23
26
|
require_relative 'sepa_file_parser/general/type/code'
|
|
24
27
|
require_relative 'sepa_file_parser/general/type/proprietary'
|
|
25
28
|
require_relative 'sepa_file_parser/general/ultimate_debitor'
|
|
29
|
+
require_relative 'sepa_file_parser/general/return_information'
|
|
26
30
|
require_relative 'sepa_file_parser/camt052/report'
|
|
27
31
|
require_relative 'sepa_file_parser/camt052/base'
|
|
28
32
|
require_relative 'sepa_file_parser/camt053/statement'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sepa_file_parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tobias Schoknecht
|
|
@@ -29,14 +29,14 @@ dependencies:
|
|
|
29
29
|
requirements:
|
|
30
30
|
- - "~>"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 3.13.
|
|
32
|
+
version: 3.13.2
|
|
33
33
|
type: :development
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 3.13.
|
|
39
|
+
version: 3.13.2
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: builder
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -111,15 +111,19 @@ files:
|
|
|
111
111
|
- lib/sepa_file_parser/file.rb
|
|
112
112
|
- lib/sepa_file_parser/general/account.rb
|
|
113
113
|
- lib/sepa_file_parser/general/account_balance.rb
|
|
114
|
+
- lib/sepa_file_parser/general/bank_transaction_code.rb
|
|
114
115
|
- lib/sepa_file_parser/general/batch_detail.rb
|
|
115
116
|
- lib/sepa_file_parser/general/charges.rb
|
|
116
117
|
- lib/sepa_file_parser/general/creditor.rb
|
|
118
|
+
- lib/sepa_file_parser/general/creditor_reference_information.rb
|
|
117
119
|
- lib/sepa_file_parser/general/debitor.rb
|
|
118
120
|
- lib/sepa_file_parser/general/entry.rb
|
|
119
121
|
- lib/sepa_file_parser/general/group_header.rb
|
|
122
|
+
- lib/sepa_file_parser/general/owner.rb
|
|
120
123
|
- lib/sepa_file_parser/general/pain_entry.rb
|
|
121
124
|
- lib/sepa_file_parser/general/postal_address.rb
|
|
122
125
|
- lib/sepa_file_parser/general/record.rb
|
|
126
|
+
- lib/sepa_file_parser/general/return_information.rb
|
|
123
127
|
- lib/sepa_file_parser/general/transaction.rb
|
|
124
128
|
- lib/sepa_file_parser/general/type/builder.rb
|
|
125
129
|
- lib/sepa_file_parser/general/type/code.rb
|
|
@@ -158,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
158
162
|
- !ruby/object:Gem::Version
|
|
159
163
|
version: '0'
|
|
160
164
|
requirements: []
|
|
161
|
-
rubygems_version: 4.0.
|
|
165
|
+
rubygems_version: 4.0.10
|
|
162
166
|
specification_version: 4
|
|
163
167
|
summary: Gem for parsing camt, pain, ... files into a speaking object.
|
|
164
168
|
test_files: []
|