cfonb 0.0.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cfonb/line_parser/base.rb +1 -1
  3. data/lib/cfonb/line_parser/operation.rb +1 -1
  4. data/lib/cfonb/line_parser/{operation_detail.rb → operation_details.rb} +1 -1
  5. data/lib/cfonb/operation.rb +6 -1
  6. data/lib/cfonb/operation_details/base.rb +19 -0
  7. data/lib/cfonb/operation_details/fee.rb +18 -0
  8. data/lib/cfonb/operation_details/ibe.rb +16 -0
  9. data/lib/cfonb/operation_details/ipy.rb +16 -0
  10. data/lib/cfonb/operation_details/lc2.rb +15 -0
  11. data/lib/cfonb/operation_details/lcc.rb +15 -0
  12. data/lib/cfonb/operation_details/lcs.rb +15 -0
  13. data/lib/cfonb/operation_details/lib.rb +15 -0
  14. data/lib/cfonb/operation_details/mmo.rb +26 -0
  15. data/lib/cfonb/operation_details/nbe.rb +15 -0
  16. data/lib/cfonb/operation_details/nbu.rb +15 -0
  17. data/lib/cfonb/operation_details/npo.rb +15 -0
  18. data/lib/cfonb/operation_details/npy.rb +15 -0
  19. data/lib/cfonb/operation_details/rcn.rb +18 -0
  20. data/lib/cfonb/operation_details/ref.rb +17 -0
  21. data/lib/cfonb/{operation_detail.rb → operation_details.rb} +2 -2
  22. data/lib/cfonb.rb +17 -12
  23. data/spec/cfonb/line_parser/{operation_detail_spec.rb → operation_details_spec.rb} +1 -1
  24. data/spec/cfonb/operation_spec.rb +97 -16
  25. data/spec/cfonb/parser_spec.rb +120 -41
  26. metadata +22 -17
  27. data/lib/cfonb/operation_detail/fee.rb +0 -18
  28. data/lib/cfonb/operation_detail/lc2.rb +0 -13
  29. data/lib/cfonb/operation_detail/lcc.rb +0 -13
  30. data/lib/cfonb/operation_detail/lcs.rb +0 -13
  31. data/lib/cfonb/operation_detail/lib.rb +0 -13
  32. data/lib/cfonb/operation_detail/mmo.rb +0 -28
  33. data/lib/cfonb/operation_detail/nbe.rb +0 -15
  34. data/lib/cfonb/operation_detail/npy.rb +0 -15
  35. data/lib/cfonb/operation_detail/rcn.rb +0 -22
  36. data/lib/cfonb/operation_detail/ref.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92590bdbb35e07a65cd7b8dbb244a276a5efdcb05c424b0a3372f562742dc79e
4
- data.tar.gz: 73d29480cb94c937a465f31b3342ff7bc4cdb4df23a6ad9b6c47db624cdf8488
3
+ metadata.gz: f80902862080f864dd6e69edc2f15d1d07d863fef754f47eb70bf052d4628cc2
4
+ data.tar.gz: 3258fdf0214ee434a09643ce033cc4fbf56500ad5d3633b3e424ed36f0d0a93d
5
5
  SHA512:
6
- metadata.gz: 8e893921454fdfb646796d64a0cf0d1a1150488ccf73952d23e55db36d2d5e7551eab014550006195cbde4c2915aa52e6a50253605d98d2f1edc3871baf58ed1
7
- data.tar.gz: a44a4b448a3bcb560bd0f4bc61dbd7beb1bf5083ffcb72be1862546af6d0f59dd549e758e796f0e3ff5e6915b94e46ac4fb3fa0b2c1d3f4c81f9c9f28cb263e0
6
+ metadata.gz: f0b35b9c4d7aa76957195c087e26f9777dad59308fcdb12a02c77da031d86798c726b3dc90e9fb9756c995414d34ce92f7d35638bed80fe10f5ff5c64e332659
7
+ data.tar.gz: b55fa730f6659cd878fa46a965a832bc3eb3b26e0fca3182a43af4b04bb4827995d73bfee61c7c1cb39674f01074f31a255ab060caf3fd0b3c0dc05a9c563f46
@@ -12,7 +12,7 @@ module CFONB
12
12
  ['bank', (2..6)],
13
13
  ['branch', (11..15)],
14
14
  ['currency', (16..18)],
15
- ['scale', 19, proc { _1.to_i }],
15
+ ['scale', 19, proc { _1.to_i }], # rubocop:disable Style/SymbolProc
16
16
  ['account', (21..31)],
17
17
  ['date', (34..39), proc { |value, instance| instance.send(:parse_date, value) }],
18
18
  ].freeze
@@ -9,7 +9,7 @@ module CFONB
9
9
  ['rejection_code', (40..41)],
10
10
  ['value_date', (42..47), proc { |value, instance| instance.send(:parse_date, value) }],
11
11
  ['label', (48..79)],
12
- ['number', (81..87), proc { _1.to_i }],
12
+ ['number', (81..87), proc { _1.to_i }], # rubocop:disable Style/SymbolProc
13
13
  ['exoneration_code', 88],
14
14
  ['unavailability_code', 89],
15
15
  ['reference', (104..119)],
@@ -2,7 +2,7 @@
2
2
 
3
3
  module CFONB
4
4
  module LineParser
5
- class OperationDetail < Base
5
+ class OperationDetails < Base
6
6
  DICTIONARY = [
7
7
  ['internal_operation_code', (7..10)],
8
8
  ['interbank_operation_code', (32..33)],
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CFONB
4
+ Details = Class.new
5
+
4
6
  class Operation
5
7
  BASE_ATTRIBUTES = %i[
6
8
  raw
@@ -16,6 +18,7 @@ module CFONB
16
18
  rejection_code
17
19
  unavailability_code
18
20
  value_date
21
+ details
19
22
  ].freeze
20
23
 
21
24
  attr_accessor(*BASE_ATTRIBUTES)
@@ -34,11 +37,13 @@ module CFONB
34
37
  self.label = line.label.strip
35
38
  self.number = line.number
36
39
  self.reference = line.reference
40
+ self.details = Details.new
37
41
  end
38
42
 
39
43
  def merge_detail(line)
40
44
  self.raw += "\n#{line.body}"
41
- OperationDetail.for(line)&.apply(self, line)
45
+
46
+ OperationDetails.for(line)&.apply(details, line)
42
47
  end
43
48
 
44
49
  def type_code
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class Base
6
+ def self.inherited(base)
7
+ base.singleton_class.prepend(
8
+ Module.new do
9
+ def apply(details, line)
10
+ details.instance_variable_set(:"@#{line.detail_code}", line.detail)
11
+
12
+ super
13
+ end
14
+ end,
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class FEE < Base
6
+ ATTRIBUTES = %i[fee fee_currency].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.fee_currency = line.detail[0..2]
10
+ scale = line.detail[3].to_i
11
+
12
+ details.fee = BigDecimal(line.detail[4..17]) / (10**scale)
13
+ end
14
+
15
+ CFONB::OperationDetails.register('FEE', self)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class IBE < Base
6
+ ATTRIBUTES = %i[creditor_identifier creditor_identifier_type].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.creditor_identifier = line.detail[0..34].strip
10
+ details.creditor_identifier_type = line.detail[35..-1].strip
11
+ end
12
+
13
+ CFONB::OperationDetails.register('IBE', self)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class IPY < Base
6
+ ATTRIBUTES = %i[debtor_identifier debtor_identifier_type].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.debtor_identifier = line.detail[0..34].strip
10
+ details.debtor_identifier_type = line.detail[35..-1].strip
11
+ end
12
+
13
+ CFONB::OperationDetails.register('IPY', self)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class LC2 < Base
6
+ ATTRIBUTES = %i[unstructured_label_2].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.unstructured_label_2 = line.detail.strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('LC2', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class LCC < Base
6
+ ATTRIBUTES = %i[unstructured_label].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.unstructured_label = line.detail.strip.to_s
10
+ end
11
+
12
+ CFONB::OperationDetails.register('LCC', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class LCS < Base
6
+ ATTRIBUTES = %i[structured_label].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.structured_label = line.detail[0..35].strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('LCS', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class LIB < Base
6
+ ATTRIBUTES = %i[free_label].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.free_label = [details.free_label, line.detail.strip].compact.join("\n")
10
+ end
11
+
12
+ CFONB::OperationDetails.register('LIB', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bigdecimal'
4
+
5
+ module CFONB
6
+ module OperationDetails
7
+ class MMO < Base
8
+ ATTRIBUTES = %i[original_currency original_amount exchange_rate].freeze
9
+
10
+ def self.apply(details, line)
11
+ details.original_currency = line.detail[0..2]
12
+ scale = line.detail[3].to_i
13
+
14
+ details.original_amount = BigDecimal(line.detail[4..17]) / (10**scale)
15
+ exchange_rate_value = line.detail[26..29]
16
+
17
+ return if exchange_rate_value.nil? || exchange_rate_value.strip.empty?
18
+
19
+ exchange_rate_scale = line.detail[18]
20
+ details.exchange_rate = BigDecimal(exchange_rate_value) / (10**BigDecimal(exchange_rate_scale))
21
+ end
22
+
23
+ CFONB::OperationDetails.register('MMO', self)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class NBE < Base
6
+ ATTRIBUTES = %i[creditor].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.creditor = line.detail.strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('NBE', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class NBU < Base
6
+ ATTRIBUTES = %i[ultimate_creditor].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.ultimate_creditor = line.detail.strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('NBU', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class NPO < Base
6
+ ATTRIBUTES = %i[ultimate_debtor].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.ultimate_debtor = line.detail.strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('NPO', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class NPY < Base
6
+ ATTRIBUTES = %i[debtor].freeze
7
+
8
+ def self.apply(details, line)
9
+ details.debtor = line.detail.strip
10
+ end
11
+
12
+ CFONB::OperationDetails.register('NPY', self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class RCN < Base
6
+ using CFONB::Refinements::Strings
7
+
8
+ ATTRIBUTES = %i[client_reference purpose].freeze
9
+
10
+ def self.apply(details, line)
11
+ details.client_reference = line.detail[0..34].strip
12
+ details.purpose = line.detail[35..-1]&.strip
13
+ end
14
+
15
+ CFONB::OperationDetails.register('RCN', self)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CFONB
4
+ module OperationDetails
5
+ class REF < Base
6
+ using CFONB::Refinements::Strings
7
+
8
+ ATTRIBUTES = %i[operation_reference].freeze
9
+
10
+ def self.apply(details, line)
11
+ details.operation_reference = line.detail.strip
12
+ end
13
+
14
+ CFONB::OperationDetails.register('REF', self)
15
+ end
16
+ end
17
+ end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CFONB
4
- module OperationDetail
4
+ module OperationDetails
5
5
  @details = {}
6
6
 
7
7
  def self.register(code, klass)
8
8
  if klass.const_defined?(:ATTRIBUTES)
9
- Operation.class_eval do
9
+ CFONB::Details.class_eval do
10
10
  attr_accessor(*klass::ATTRIBUTES)
11
11
  end
12
12
  end
data/lib/cfonb.rb CHANGED
@@ -8,25 +8,30 @@ require_relative 'cfonb/error'
8
8
  require_relative 'cfonb/parser'
9
9
  require_relative 'cfonb/statement'
10
10
  require_relative 'cfonb/operation'
11
- require_relative 'cfonb/operation_detail'
11
+ require_relative 'cfonb/operation_details'
12
12
 
13
13
  require_relative 'cfonb/line_parser'
14
14
  require_relative 'cfonb/line_parser/base'
15
15
  require_relative 'cfonb/line_parser/previous_balance'
16
16
  require_relative 'cfonb/line_parser/operation'
17
- require_relative 'cfonb/line_parser/operation_detail'
17
+ require_relative 'cfonb/line_parser/operation_details'
18
18
  require_relative 'cfonb/line_parser/new_balance'
19
19
 
20
- require_relative 'cfonb/operation_detail/lib'
21
- require_relative 'cfonb/operation_detail/lcc'
22
- require_relative 'cfonb/operation_detail/lc2'
23
- require_relative 'cfonb/operation_detail/lcs'
24
- require_relative 'cfonb/operation_detail/mmo'
25
- require_relative 'cfonb/operation_detail/nbe'
26
- require_relative 'cfonb/operation_detail/npy'
27
- require_relative 'cfonb/operation_detail/rcn'
28
- require_relative 'cfonb/operation_detail/ref'
29
- require_relative 'cfonb/operation_detail/fee'
20
+ require_relative 'cfonb/operation_details/base'
21
+ require_relative 'cfonb/operation_details/lib'
22
+ require_relative 'cfonb/operation_details/lcc'
23
+ require_relative 'cfonb/operation_details/lc2'
24
+ require_relative 'cfonb/operation_details/lcs'
25
+ require_relative 'cfonb/operation_details/mmo'
26
+ require_relative 'cfonb/operation_details/nbe'
27
+ require_relative 'cfonb/operation_details/npy'
28
+ require_relative 'cfonb/operation_details/ipy'
29
+ require_relative 'cfonb/operation_details/rcn'
30
+ require_relative 'cfonb/operation_details/ref'
31
+ require_relative 'cfonb/operation_details/fee'
32
+ require_relative 'cfonb/operation_details/ibe'
33
+ require_relative 'cfonb/operation_details/npo'
34
+ require_relative 'cfonb/operation_details/nbu'
30
35
 
31
36
  module CFONB
32
37
  def self.parse(input, optimistic: false)
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'cfonb'
4
4
 
5
- describe CFONB::LineParser::OperationDetail do
5
+ describe CFONB::LineParser::OperationDetails do
6
6
  describe '.initialize' do
7
7
  subject(:line) { described_class.new(input) }
8
8
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfonb'
4
+ require 'securerandom'
4
5
  require 'ostruct'
5
6
 
6
7
  describe CFONB::Operation do
@@ -36,6 +37,9 @@ describe CFONB::Operation do
36
37
 
37
38
  expect(operation.label).to eq(<<~TXT.strip)
38
39
  A random operation label
40
+ TXT
41
+
42
+ expect(operation.details.free_label).to eq(<<~TXT.strip)
39
43
  Extra label
40
44
  TXT
41
45
  end
@@ -49,6 +53,9 @@ describe CFONB::Operation do
49
53
 
50
54
  expect(operation.label).to eq(<<~TXT.strip)
51
55
  A random operation label
56
+ TXT
57
+
58
+ expect(operation.details.unstructured_label).to eq(<<~TXT.strip)
52
59
  Extra label
53
60
  TXT
54
61
  end
@@ -62,6 +69,9 @@ describe CFONB::Operation do
62
69
 
63
70
  expect(operation.label).to eq(<<~TXT.strip)
64
71
  A random operation label
72
+ TXT
73
+
74
+ expect(operation.details.unstructured_label_2).to eq(<<~TXT.strip)
65
75
  Extra label
66
76
  TXT
67
77
  end
@@ -75,6 +85,9 @@ describe CFONB::Operation do
75
85
 
76
86
  expect(operation.label).to eq(<<~TXT.strip)
77
87
  A random operation label
88
+ TXT
89
+
90
+ expect(operation.details.structured_label).to eq(<<~TXT.strip)
78
91
  Extra label
79
92
  TXT
80
93
  end
@@ -86,9 +99,9 @@ describe CFONB::Operation do
86
99
  it 'Adds the original currency information' do
87
100
  operation.merge_detail(detail)
88
101
 
89
- expect(operation).to have_attributes(
102
+ expect(operation.details).to have_attributes(
90
103
  original_currency: 'USD',
91
- original_amount: -12.34,
104
+ original_amount: 12.34,
92
105
  exchange_rate: nil,
93
106
  )
94
107
  end
@@ -99,9 +112,9 @@ describe CFONB::Operation do
99
112
  it 'Adds the original currency information' do
100
113
  operation.merge_detail(detail)
101
114
 
102
- expect(operation).to have_attributes(
115
+ expect(operation.details).to have_attributes(
103
116
  original_currency: 'USD',
104
- original_amount: -8358,
117
+ original_amount: 8358,
105
118
  exchange_rate: 1.077,
106
119
  )
107
120
  end
@@ -112,10 +125,9 @@ describe CFONB::Operation do
112
125
 
113
126
  it 'Adds the original currency information' do
114
127
  operation.merge_detail(detail)
115
-
116
- expect(operation).to have_attributes(
128
+ expect(operation.details).to have_attributes(
117
129
  original_currency: 'EUR',
118
- original_amount: -18_756.25,
130
+ original_amount: 18_756.25,
119
131
  exchange_rate: nil,
120
132
  )
121
133
  end
@@ -128,7 +140,7 @@ describe CFONB::Operation do
128
140
  it 'Adds the debtor information' do
129
141
  operation.merge_detail(detail)
130
142
 
131
- expect(operation).to have_attributes(debtor: 'Patrick')
143
+ expect(operation.details).to have_attributes(debtor: 'Patrick')
132
144
  end
133
145
  end
134
146
 
@@ -138,7 +150,7 @@ describe CFONB::Operation do
138
150
  it 'Adds the creditor information' do
139
151
  operation.merge_detail(detail)
140
152
 
141
- expect(operation).to have_attributes(creditor: 'Jean-Pierre')
153
+ expect(operation.details).to have_attributes(creditor: 'Jean-Pierre')
142
154
  end
143
155
  end
144
156
 
@@ -151,11 +163,11 @@ describe CFONB::Operation do
151
163
  )
152
164
  end
153
165
 
154
- it 'adds the reference information' do
166
+ it 'adds the client reference information' do
155
167
  operation.merge_detail(detail)
156
168
 
157
- expect(operation.reference).to eq('42 - SWILE-CMD-TR-YPDHMA')
158
- expect(operation.purpose).to eq('TICKET RESTO')
169
+ expect(operation.details.client_reference).to eq('SWILE-CMD-TR-YPDHMA')
170
+ expect(operation.details.purpose).to eq('TICKET RESTO')
159
171
  end
160
172
  end
161
173
 
@@ -168,10 +180,10 @@ describe CFONB::Operation do
168
180
  )
169
181
  end
170
182
 
171
- it 'adds the reference information' do
183
+ it 'adds the operation reference information' do
172
184
  operation.merge_detail(detail)
173
185
 
174
- expect(operation.reference).to eq('42 - PENNYLANE B13A93908C36C82DF5C319/1')
186
+ expect(operation.details.operation_reference).to eq('PENNYLANE B13A93908C36C82DF5C319/1')
175
187
  end
176
188
  end
177
189
 
@@ -187,8 +199,77 @@ describe CFONB::Operation do
187
199
  it 'adds the fee information' do
188
200
  operation.merge_detail(detail)
189
201
 
190
- expect(operation.fee_currency).to eq('EUR')
191
- expect(operation.fee).to eq(7.4)
202
+ expect(operation.details.fee_currency).to eq('EUR')
203
+ expect(operation.details.fee).to eq(7.4)
204
+ end
205
+ end
206
+
207
+ context 'with a IPY detail' do
208
+ let(:debtor_identifier) { SecureRandom.alphanumeric(35) }
209
+ let(:debtor_identifier_type) { SecureRandom.alphanumeric(35) }
210
+
211
+ let(:detail) do
212
+ OpenStruct.new(
213
+ body: "0530004411001871EUR2 0001016255614090823 IPY#{debtor_identifier}#{debtor_identifier_type}",
214
+ detail_code: 'IPY',
215
+ detail: "#{debtor_identifier}#{debtor_identifier_type}",
216
+ )
217
+ end
218
+
219
+ it 'adds the debtor_identifier' do
220
+ operation.merge_detail(detail)
221
+
222
+ expect(operation.details.debtor_identifier).to eq(debtor_identifier)
223
+ expect(operation.details.debtor_identifier_type).to eq(debtor_identifier_type)
224
+ end
225
+ end
226
+
227
+ context 'with a IBE detail' do
228
+ let(:creditor_identifier) { SecureRandom.alphanumeric(35) }
229
+ let(:creditor_identifier_type) { SecureRandom.alphanumeric(35) }
230
+
231
+ let(:detail) do
232
+ OpenStruct.new(
233
+ detail_code: 'IBE',
234
+ detail: "#{creditor_identifier}#{creditor_identifier_type}",
235
+ )
236
+ end
237
+
238
+ it 'adds the IBE information' do
239
+ operation.merge_detail(detail)
240
+
241
+ expect(operation.details.creditor_identifier).to eq(creditor_identifier)
242
+ expect(operation.details.creditor_identifier_type).to eq(creditor_identifier_type)
243
+ end
244
+ end
245
+
246
+ context 'with a NPO detail' do
247
+ let(:detail) do
248
+ OpenStruct.new(
249
+ detail_code: 'NPO',
250
+ detail: 'Patrick ',
251
+ )
252
+ end
253
+
254
+ it 'adds the NPO information' do
255
+ operation.merge_detail(detail)
256
+
257
+ expect(operation.details.ultimate_debtor).to eq('Patrick')
258
+ end
259
+ end
260
+
261
+ context 'with a NBU detail' do
262
+ let(:detail) do
263
+ OpenStruct.new(
264
+ detail_code: 'NBU',
265
+ detail: 'Patrick ',
266
+ )
267
+ end
268
+
269
+ it 'adds the NBU information' do
270
+ operation.merge_detail(detail)
271
+
272
+ expect(operation.details.ultimate_creditor).to eq('Patrick')
192
273
  end
193
274
  end
194
275
  end
@@ -35,16 +35,19 @@ describe CFONB::Parser do
35
35
  exoneration_code: '0',
36
36
  interbank_code: 'B1',
37
37
  internal_code: '9162',
38
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133",
38
+ label: 'PRLV SEPA TEST CABINET',
39
39
  number: 0,
40
- reference: 'REFERENCE - OTHER REFERENCE',
41
- purpose: 'PURPOSE',
42
40
  rejection_code: '',
43
41
  unavailability_code: '0',
44
42
  value_date: Date.new(2019, 5, 16),
43
+ reference: '',
44
+ )
45
+ expect(statements[0].operations[0].details).to have_attributes(
46
+ free_label: 'MENSUEAUHTR13133',
45
47
  original_currency: nil,
46
48
  original_amount: nil,
47
49
  exchange_rate: nil,
50
+ purpose: 'PURPOSE',
48
51
  debtor: 'INTERNET SFR',
49
52
  )
50
53
 
@@ -57,14 +60,19 @@ describe CFONB::Parser do
57
60
  internal_code: '9162',
58
61
  label: 'VIR SEPA DEMONSTRATION',
59
62
  number: 0,
60
- reference: 'REFERENCE',
61
63
  rejection_code: '',
62
64
  unavailability_code: '0',
63
65
  value_date: Date.new(2019, 5, 16),
66
+ reference: 'REFERENCE',
67
+ )
68
+
69
+ expect(statements[0].operations[1].details).to have_attributes(
70
+ debtor: 'ELEC ERDF',
71
+ free_label: nil,
64
72
  original_currency: nil,
65
73
  original_amount: nil,
66
74
  exchange_rate: nil,
67
- debtor: 'ELEC ERDF',
75
+ purpose: nil,
68
76
  )
69
77
 
70
78
  expect(statements[0].operations[2]).to have_attributes(
@@ -76,10 +84,15 @@ describe CFONB::Parser do
76
84
  internal_code: '0117',
77
85
  label: 'F COMMISSION D INTERVENTION',
78
86
  number: 0,
79
- reference: '',
80
87
  rejection_code: '',
81
88
  unavailability_code: '0',
82
89
  value_date: Date.new(2019, 5, 15),
90
+ reference: '',
91
+ )
92
+
93
+ expect(statements[0].operations[2].details).to have_attributes(
94
+ free_label: nil,
95
+ purpose: nil,
83
96
  original_currency: nil,
84
97
  original_amount: nil,
85
98
  exchange_rate: nil,
@@ -105,15 +118,21 @@ describe CFONB::Parser do
105
118
  exoneration_code: '',
106
119
  interbank_code: 'A3',
107
120
  internal_code: '0158',
108
- label: "PRLV SEPA GROUPAMA CEN\nP051928612 22793301700040",
121
+ label: 'PRLV SEPA GROUPAMA CEN',
109
122
  number: 0,
110
- reference: '',
111
123
  rejection_code: '',
112
124
  unavailability_code: '0',
113
125
  value_date: Date.new(2019, 5, 15),
126
+ reference: '',
127
+ )
128
+
129
+ expect(statements[1].operations[0].details).to have_attributes(
130
+ free_label: 'P051928612 22793301700040',
114
131
  original_currency: nil,
115
132
  original_amount: nil,
116
133
  exchange_rate: nil,
134
+ purpose: nil,
135
+ debtor: nil,
117
136
  )
118
137
 
119
138
  expect(statements[1].operations[1]).to have_attributes(
@@ -125,13 +144,19 @@ describe CFONB::Parser do
125
144
  internal_code: '0337',
126
145
  label: 'F FRAIS PRLV IMP 97 49EUR',
127
146
  number: 0,
128
- reference: '',
129
147
  rejection_code: '',
130
148
  unavailability_code: '0',
131
149
  value_date: Date.new(2019, 5, 15),
150
+ reference: '',
151
+ )
152
+
153
+ expect(statements[1].operations[1].details).to have_attributes(
154
+ free_label: nil,
132
155
  original_currency: nil,
133
156
  original_amount: nil,
134
157
  exchange_rate: nil,
158
+ purpose: nil,
159
+ debtor: nil,
135
160
  )
136
161
 
137
162
  expect(statements[1].operations[2]).to have_attributes(
@@ -143,13 +168,19 @@ describe CFONB::Parser do
143
168
  internal_code: '0117',
144
169
  label: 'F COMMISSION D INTERVENTION',
145
170
  number: 0,
146
- reference: '',
147
171
  rejection_code: '',
148
172
  unavailability_code: '0',
149
173
  value_date: Date.new(2019, 5, 16),
174
+ reference: '',
175
+ )
176
+
177
+ expect(statements[1].operations[2].details).to have_attributes(
178
+ free_label: nil,
150
179
  original_currency: nil,
151
180
  original_amount: nil,
152
181
  exchange_rate: nil,
182
+ purpose: nil,
183
+ debtor: nil,
153
184
  )
154
185
  end
155
186
  end
@@ -232,18 +263,22 @@ describe CFONB::Parser do
232
263
  exoneration_code: '0',
233
264
  interbank_code: 'B1',
234
265
  internal_code: '9162',
235
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133",
266
+ label: 'PRLV SEPA TEST CABINET',
236
267
  number: 0,
237
- reference: 'REFERENCE - OTHER REFERENCE',
238
268
  rejection_code: '',
239
269
  unavailability_code: '0',
240
270
  value_date: Date.new(2019, 5, 16),
271
+ )
272
+
273
+ expect(statements[0].operations[0].details).to have_attributes(
274
+ operation_reference: 'REFERENCE',
275
+ free_label: 'MENSUEAUHTR13133',
276
+ debtor: 'INTERNET SFR',
277
+ client_reference: 'OTHER REFERENCE',
241
278
  original_currency: nil,
242
279
  original_amount: nil,
243
280
  exchange_rate: nil,
244
- debtor: 'INTERNET SFR',
245
281
  )
246
-
247
282
  expect(statements[0].operations[1]).to have_attributes(
248
283
  amount: -10.7,
249
284
  currency: 'EUR',
@@ -253,10 +288,13 @@ describe CFONB::Parser do
253
288
  internal_code: '9162',
254
289
  label: 'VIR SEPA DEMONSTRATION',
255
290
  number: 0,
256
- reference: 'REFERENCE',
257
291
  rejection_code: '',
258
292
  unavailability_code: '0',
259
293
  value_date: Date.new(2019, 5, 16),
294
+ reference: 'REFERENCE',
295
+ )
296
+
297
+ expect(statements[0].operations[1].details).to have_attributes(
260
298
  original_currency: nil,
261
299
  original_amount: nil,
262
300
  exchange_rate: nil,
@@ -272,10 +310,13 @@ describe CFONB::Parser do
272
310
  internal_code: '0117',
273
311
  label: 'F COMMISSION D INTERVENTION',
274
312
  number: 0,
275
- reference: '',
276
313
  rejection_code: '',
277
314
  unavailability_code: '0',
278
315
  value_date: Date.new(2019, 5, 15),
316
+ reference: '',
317
+ )
318
+
319
+ expect(statements[0].operations[2].details).to have_attributes(
279
320
  original_currency: nil,
280
321
  original_amount: nil,
281
322
  exchange_rate: nil,
@@ -301,12 +342,16 @@ describe CFONB::Parser do
301
342
  exoneration_code: '',
302
343
  interbank_code: 'A3',
303
344
  internal_code: '0158',
304
- label: "PRLV SEPA GROUPAMA CEN\nP051928612 22793301700040",
345
+ label: 'PRLV SEPA GROUPAMA CEN',
305
346
  number: 0,
306
- reference: '',
307
347
  rejection_code: '',
308
348
  unavailability_code: '0',
309
349
  value_date: Date.new(2019, 5, 15),
350
+ reference: '',
351
+ )
352
+
353
+ expect(statements[1].operations[0].details).to have_attributes(
354
+ free_label: 'P051928612 22793301700040',
310
355
  original_currency: nil,
311
356
  original_amount: nil,
312
357
  exchange_rate: nil,
@@ -321,10 +366,13 @@ describe CFONB::Parser do
321
366
  internal_code: '0337',
322
367
  label: 'F FRAIS PRLV IMP 97 49EUR',
323
368
  number: 0,
324
- reference: '',
325
369
  rejection_code: '',
326
370
  unavailability_code: '0',
327
371
  value_date: Date.new(2019, 5, 15),
372
+ reference: '',
373
+ )
374
+
375
+ expect(statements[1].operations[1].details).to have_attributes(
328
376
  original_currency: nil,
329
377
  original_amount: nil,
330
378
  exchange_rate: nil,
@@ -339,10 +387,13 @@ describe CFONB::Parser do
339
387
  internal_code: '0117',
340
388
  label: 'F COMMISSION D INTERVENTION',
341
389
  number: 0,
342
- reference: '',
343
390
  rejection_code: '',
344
391
  unavailability_code: '0',
345
392
  value_date: Date.new(2019, 5, 16),
393
+ reference: '',
394
+ )
395
+
396
+ expect(statements[1].operations[2].details).to have_attributes(
346
397
  original_currency: nil,
347
398
  original_amount: nil,
348
399
  exchange_rate: nil,
@@ -365,14 +416,17 @@ describe CFONB::Parser do
365
416
  internal_code: '9162',
366
417
  label: 'VIR SEPA DEMONSTRATION',
367
418
  number: 0,
368
- reference: '',
369
419
  rejection_code: '',
370
420
  unavailability_code: '0',
371
421
  value_date: Date.new(2019, 5, 16),
422
+ reference: '',
423
+ )
424
+
425
+ expect(statements[0].operations[0].details).to have_attributes(
426
+ debtor: 'ELEC ERDF',
372
427
  original_currency: nil,
373
428
  original_amount: nil,
374
429
  exchange_rate: nil,
375
- debtor: 'ELEC ERDF',
376
430
  )
377
431
  end
378
432
  end
@@ -392,14 +446,16 @@ describe CFONB::Parser do
392
446
  internal_code: '9162',
393
447
  label: 'VIR SEPA DEMONSTRATION',
394
448
  number: 0,
395
- reference: '',
396
449
  rejection_code: '',
397
450
  unavailability_code: '0',
398
451
  value_date: Date.new(2019, 5, 16),
452
+ reference: '',
453
+ )
454
+ expect(statements[0].operations[0].details).to have_attributes(
455
+ debtor: 'ELEC ERDF',
399
456
  original_currency: nil,
400
457
  original_amount: nil,
401
458
  exchange_rate: nil,
402
- debtor: 'ELEC ERDF',
403
459
  )
404
460
  end
405
461
  end
@@ -419,14 +475,16 @@ describe CFONB::Parser do
419
475
  internal_code: '9162',
420
476
  label: 'VIR SEPA DEMONSTRATION',
421
477
  number: 0,
422
- reference: '',
423
478
  rejection_code: '',
424
479
  unavailability_code: '0',
425
480
  value_date: Date.new(2019, 5, 16),
481
+ reference: '',
482
+ )
483
+ expect(statements[0].operations[0].details).to have_attributes(
484
+ debtor: 'ELEC ERDF',
426
485
  original_currency: nil,
427
486
  original_amount: nil,
428
487
  exchange_rate: nil,
429
- debtor: 'ELEC ERDF',
430
488
  )
431
489
  end
432
490
  end
@@ -446,14 +504,16 @@ describe CFONB::Parser do
446
504
  internal_code: '9162',
447
505
  label: 'VIR SEPA DEMONSTRATION',
448
506
  number: 0,
449
- reference: '',
450
507
  rejection_code: '',
451
508
  unavailability_code: '0',
452
509
  value_date: Date.new(2019, 5, 16),
510
+ reference: '',
511
+ )
512
+ expect(statements[0].operations[0].details).to have_attributes(
513
+ debtor: 'ELEC ERDF',
453
514
  original_currency: nil,
454
515
  original_amount: nil,
455
516
  exchange_rate: nil,
456
- debtor: 'ELEC ERDF',
457
517
  )
458
518
  expect(statements[0].operations[1]).to have_attributes(
459
519
  amount: -7.9,
@@ -464,10 +524,12 @@ describe CFONB::Parser do
464
524
  internal_code: '0117',
465
525
  label: 'F COMMISSION D INTERVENTION',
466
526
  number: 0,
467
- reference: '',
468
527
  rejection_code: '',
469
528
  unavailability_code: '0',
470
529
  value_date: Date.new(2019, 5, 16),
530
+ reference: '',
531
+ )
532
+ expect(statements[0].operations[1].details).to have_attributes(
471
533
  original_currency: nil,
472
534
  original_amount: nil,
473
535
  exchange_rate: nil,
@@ -503,16 +565,20 @@ describe CFONB::Parser do
503
565
  exoneration_code: '0',
504
566
  interbank_code: 'B1',
505
567
  internal_code: '9162',
506
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133",
568
+ label: 'PRLV SEPA TEST CABINET',
507
569
  number: 0,
508
- reference: 'REFERENCE - OTHER REFERENCE',
509
570
  rejection_code: '',
510
571
  unavailability_code: '0',
511
572
  value_date: Date.new(2019, 5, 16),
573
+ )
574
+ expect(operation.details).to have_attributes(
575
+ operation_reference: 'REFERENCE',
576
+ client_reference: 'OTHER REFERENCE',
577
+ debtor: 'INTERNET SFR',
578
+ free_label: 'MENSUEAUHTR13133',
512
579
  original_currency: nil,
513
580
  original_amount: nil,
514
581
  exchange_rate: nil,
515
- debtor: 'INTERNET SFR',
516
582
  )
517
583
  end
518
584
  end
@@ -563,16 +629,20 @@ describe CFONB::Parser do
563
629
  exoneration_code: '0',
564
630
  interbank_code: 'B1',
565
631
  internal_code: '9162',
566
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133",
632
+ label: 'PRLV SEPA TEST CABINET',
567
633
  number: 0,
568
- reference: 'REFERENCE - OTHER REFERENCE',
569
634
  rejection_code: '',
570
635
  unavailability_code: '0',
571
636
  value_date: Date.new(2019, 5, 16),
637
+ )
638
+ expect(operation.details).to have_attributes(
639
+ operation_reference: 'REFERENCE',
640
+ client_reference: 'OTHER REFERENCE',
641
+ free_label: 'MENSUEAUHTR13133',
642
+ debtor: 'INTERNET SFR',
572
643
  original_currency: nil,
573
644
  original_amount: nil,
574
645
  exchange_rate: nil,
575
- debtor: 'INTERNET SFR',
576
646
  )
577
647
  end
578
648
  end
@@ -588,16 +658,20 @@ describe CFONB::Parser do
588
658
  exoneration_code: '0',
589
659
  interbank_code: 'B1',
590
660
  internal_code: '9162',
591
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133",
661
+ label: 'PRLV SEPA TEST CABINET',
592
662
  number: 0,
593
- reference: 'REFERENCE - OTHER REFERENCE',
594
663
  rejection_code: '',
595
664
  unavailability_code: '0',
596
665
  value_date: Date.new(2019, 5, 16),
666
+ )
667
+ expect(operation.details).to have_attributes(
668
+ client_reference: 'OTHER REFERENCE',
669
+ operation_reference: 'REFERENCE',
670
+ free_label: 'MENSUEAUHTR13133',
671
+ debtor: 'INTERNET SFR',
597
672
  original_currency: nil,
598
673
  original_amount: nil,
599
674
  exchange_rate: nil,
600
- debtor: 'INTERNET SFR',
601
675
  )
602
676
  end
603
677
  end
@@ -621,16 +695,21 @@ describe CFONB::Parser do
621
695
  exoneration_code: '0',
622
696
  interbank_code: 'B1',
623
697
  internal_code: '9162',
624
- label: "PRLV SEPA TEST CABINET\nMENSUEAUHTR13133\nP051928612 22793301700040",
698
+ label: 'PRLV SEPA TEST CABINET',
625
699
  number: 0,
626
- reference: 'REFERENCE - OTHER REFERENCE',
627
700
  rejection_code: '',
628
701
  unavailability_code: '0',
629
702
  value_date: Date.new(2019, 5, 16),
703
+ )
704
+
705
+ expect(operation.details).to have_attributes(
706
+ operation_reference: 'REFERENCE',
707
+ client_reference: 'OTHER REFERENCE',
708
+ free_label: "MENSUEAUHTR13133\nP051928612 22793301700040",
709
+ debtor: 'ELEC ERDF',
630
710
  original_currency: nil,
631
711
  original_amount: nil,
632
712
  exchange_rate: nil,
633
- debtor: 'ELEC ERDF',
634
713
  )
635
714
  end
636
715
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfonb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johan Le Bray
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-20 00:00:00.000000000 Z
12
+ date: 2024-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: license_finder
@@ -93,25 +93,30 @@ files:
93
93
  - lib/cfonb/line_parser/base.rb
94
94
  - lib/cfonb/line_parser/new_balance.rb
95
95
  - lib/cfonb/line_parser/operation.rb
96
- - lib/cfonb/line_parser/operation_detail.rb
96
+ - lib/cfonb/line_parser/operation_details.rb
97
97
  - lib/cfonb/line_parser/previous_balance.rb
98
98
  - lib/cfonb/operation.rb
99
- - lib/cfonb/operation_detail.rb
100
- - lib/cfonb/operation_detail/fee.rb
101
- - lib/cfonb/operation_detail/lc2.rb
102
- - lib/cfonb/operation_detail/lcc.rb
103
- - lib/cfonb/operation_detail/lcs.rb
104
- - lib/cfonb/operation_detail/lib.rb
105
- - lib/cfonb/operation_detail/mmo.rb
106
- - lib/cfonb/operation_detail/nbe.rb
107
- - lib/cfonb/operation_detail/npy.rb
108
- - lib/cfonb/operation_detail/rcn.rb
109
- - lib/cfonb/operation_detail/ref.rb
99
+ - lib/cfonb/operation_details.rb
100
+ - lib/cfonb/operation_details/base.rb
101
+ - lib/cfonb/operation_details/fee.rb
102
+ - lib/cfonb/operation_details/ibe.rb
103
+ - lib/cfonb/operation_details/ipy.rb
104
+ - lib/cfonb/operation_details/lc2.rb
105
+ - lib/cfonb/operation_details/lcc.rb
106
+ - lib/cfonb/operation_details/lcs.rb
107
+ - lib/cfonb/operation_details/lib.rb
108
+ - lib/cfonb/operation_details/mmo.rb
109
+ - lib/cfonb/operation_details/nbe.rb
110
+ - lib/cfonb/operation_details/nbu.rb
111
+ - lib/cfonb/operation_details/npo.rb
112
+ - lib/cfonb/operation_details/npy.rb
113
+ - lib/cfonb/operation_details/rcn.rb
114
+ - lib/cfonb/operation_details/ref.rb
110
115
  - lib/cfonb/parser.rb
111
116
  - lib/cfonb/refinements/strings.rb
112
117
  - lib/cfonb/statement.rb
113
118
  - spec/cfonb/line_parser/new_balance_spec.rb
114
- - spec/cfonb/line_parser/operation_detail_spec.rb
119
+ - spec/cfonb/line_parser/operation_details_spec.rb
115
120
  - spec/cfonb/line_parser/operation_spec.rb
116
121
  - spec/cfonb/line_parser/previous_balance_spec.rb
117
122
  - spec/cfonb/operation_spec.rb
@@ -129,14 +134,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
134
  requirements:
130
135
  - - ">="
131
136
  - !ruby/object:Gem::Version
132
- version: 3.2.2
137
+ version: '3.2'
133
138
  required_rubygems_version: !ruby/object:Gem::Requirement
134
139
  requirements:
135
140
  - - ">="
136
141
  - !ruby/object:Gem::Version
137
142
  version: '0'
138
143
  requirements: []
139
- rubygems_version: 3.4.10
144
+ rubygems_version: 3.5.16
140
145
  signing_key:
141
146
  specification_version: 4
142
147
  summary: CFONB parser
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class FEE
6
- ATTRIBUTES = %i[fee fee_currency].freeze
7
-
8
- def self.apply(operation, line)
9
- operation.fee_currency = line.detail[0..2]
10
- scale = line.detail[3].to_i
11
-
12
- operation.fee = BigDecimal(line.detail[4..17]) / (10**scale)
13
- end
14
-
15
- CFONB::OperationDetail.register('FEE', self)
16
- end
17
- end
18
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class LC2
6
- def self.apply(operation, line)
7
- operation.label += "\n#{line.detail.strip}"
8
- end
9
-
10
- CFONB::OperationDetail.register('LC2', self)
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class LCC
6
- def self.apply(operation, line)
7
- operation.label += "\n#{line.detail.strip}"
8
- end
9
-
10
- CFONB::OperationDetail.register('LCC', self)
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class LCS
6
- def self.apply(operation, line)
7
- operation.label += "\n#{line.detail[0..35].strip}"
8
- end
9
-
10
- CFONB::OperationDetail.register('LCS', self)
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class LIB
6
- def self.apply(operation, line)
7
- operation.label += "\n#{line.detail.strip}"
8
- end
9
-
10
- CFONB::OperationDetail.register('LIB', self)
11
- end
12
- end
13
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bigdecimal'
4
-
5
- module CFONB
6
- module OperationDetail
7
- class MMO
8
- ATTRIBUTES = %i[original_currency original_amount exchange_rate].freeze
9
-
10
- def self.apply(operation, line)
11
- operation.original_currency = line.detail[0..2]
12
-
13
- scale = line.detail[3].to_i
14
- sign = operation.amount <=> 0 # the detail amount is unsigned
15
-
16
- operation.original_amount = sign * BigDecimal(line.detail[4..17]) / (10**scale)
17
- exchange_rate_value = line.detail[26..29]
18
-
19
- return if exchange_rate_value.nil? || exchange_rate_value.strip.empty?
20
-
21
- exchange_rate_scale = line.detail[18]
22
- operation.exchange_rate = BigDecimal(exchange_rate_value) / (10**BigDecimal(exchange_rate_scale))
23
- end
24
-
25
- CFONB::OperationDetail.register('MMO', self)
26
- end
27
- end
28
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class NBE
6
- ATTRIBUTES = %i[creditor].freeze
7
-
8
- def self.apply(operation, line)
9
- operation.creditor = line.detail.strip
10
- end
11
-
12
- CFONB::OperationDetail.register('NBE', self)
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class NPY
6
- ATTRIBUTES = %i[debtor].freeze
7
-
8
- def self.apply(operation, line)
9
- operation.debtor = line.detail.strip
10
- end
11
-
12
- CFONB::OperationDetail.register('NPY', self)
13
- end
14
- end
15
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class RCN
6
- using CFONB::Refinements::Strings
7
-
8
- ATTRIBUTES = %i[reference purpose].freeze
9
-
10
- def self.apply(operation, line)
11
- operation.reference = [
12
- operation.reference,
13
- line.detail[0..34].strip,
14
- ].filter_map(&:presence).join(' - ')
15
-
16
- operation.purpose = line.detail[35..-1]&.strip
17
- end
18
-
19
- CFONB::OperationDetail.register('RCN', self)
20
- end
21
- end
22
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CFONB
4
- module OperationDetail
5
- class REF
6
- using CFONB::Refinements::Strings
7
-
8
- ATTRIBUTES = %i[reference].freeze
9
-
10
- def self.apply(operation, line)
11
- operation.reference = [
12
- operation.reference,
13
- line.detail.strip,
14
- ].filter_map(&:presence).join(' - ')
15
- end
16
-
17
- CFONB::OperationDetail.register('REF', self)
18
- end
19
- end
20
- end