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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e40fc8a0165c3f5b1aba430178939203b07da1a0b6f21b91e48423ffb4bcb1b0
4
- data.tar.gz: d37ea47f3cbe7a854e7b9f0ac2d3d016118e9dbf5303d87bf7d07ca220899b54
3
+ metadata.gz: 2538b348949805e79a4612d486d7c983b1254981b9d265cf95377b9f65f1ff84
4
+ data.tar.gz: f8b3f1f5c088107de2da1dc8342c7971eae4442b4902eeb6368d9e4ab69354ea
5
5
  SHA512:
6
- metadata.gz: '02799607e177916a7a18302cee158c19761b5192bf5aaf783df67d975a43c96511aedf7179bd83a7441ad2049e95a8f436d3b2d56ab9850fe5d6b1b7ed4204d4'
7
- data.tar.gz: a2b9649705ecf4c765cf4dd58cf151206034fd73f9d5f76877c7b36ccf46af95fa9477c7f207d051a5c7b9c766c0e60d0f86005c2510b20cbc405ba561694c8c
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 : SepaFileParser::BatchDetail.new(@xml_data.xpath('NtryDtls/Btch'))
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 ||= xml_data.xpath('RmtInf/Strd/CdtrRefInf/Ref/text()').text
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 ||= xml_data.xpath('RtrInf/Rsn/Cd/text()').text
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SepaFileParser
4
4
 
5
- VERSION = '0.9.0'
5
+ VERSION = '0.11.0'
6
6
 
7
7
  end
@@ -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.9.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.0
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.0
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.3
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: []