sepa_file_parser 0.10.0 → 0.11.1

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: 3bc89d325dfff3184b2c7c1e9246bf300624cec80eb694371b8ffed66a86ff3b
4
- data.tar.gz: ce7ed8c47d0c158a235f662fd8af44148fce23f5c46b6a31c96559ea146ce126
3
+ metadata.gz: e3d4c9dd4f2835c1bd8e01abfe30067f0781287be95a49cc7f1f85a469c174c1
4
+ data.tar.gz: 181904b224d038fd2c8ff609b4917b2979b7056cd8ad48f87951a657822a781a
5
5
  SHA512:
6
- metadata.gz: aa561758b2159891d6bb31e9282e8f9466e6156f86f96d61e2070388f5fcb34654347bb8c769ba797e70dbf64a78e5e0f4fa002b592d228298852615cc380fdd
7
- data.tar.gz: f82b5c6a1599d02b59e408b4cc734a362294bcd443e647c0d8ff798087d756b52358ef4cefdc6b52b88e2bd8b64d3b858127c6c6be71aeb4b06029e9e22e6df4
6
+ metadata.gz: a30180907db45a71a6954bd158ead499e69f6511259e6b0068e688dfd4e3fea2b835b73eecd47e0d26cf8908f61c7aa502733d547f2945a414001bd2ab22cc52
7
+ data.tar.gz: 601ee6524df3c9cc7fbf8ec2362ccf9ed0f799e545273324b7e4891d9c421347a75553c07ace3bfd1bb86afa68a3dd9787bd7d7b1e67019b591bd3f7bca63f90
@@ -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
@@ -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
@@ -147,7 +159,16 @@ module SepaFileParser
147
159
  end
148
160
 
149
161
  def reason_code # May be missing
150
- @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
151
172
  end
152
173
 
153
174
  private
@@ -171,5 +192,17 @@ module SepaFileParser
171
192
  xml_data.xpath('AmtDtls//Amt/@Ccy').first.text
172
193
  end
173
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
174
207
  end
175
208
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SepaFileParser
4
4
 
5
- VERSION = '0.10.0'
5
+ VERSION = '0.11.1'
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.10.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schoknecht
@@ -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