cnab_rb 0.1.0 → 0.1.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +19 -4
- data/lib/cnab_rb.rb +10 -4
- data/lib/cnab_rb/format/field.rb +2 -2
- data/lib/cnab_rb/format/file.rb +7 -3
- data/lib/cnab_rb/format/line.rb +4 -0
- data/lib/cnab_rb/format/picture.rb +0 -1
- data/lib/cnab_rb/format/picture_formats/float.rb +1 -1
- data/lib/cnab_rb/layouts/cnab240/generic/header_batch.rb +1 -1
- data/lib/cnab_rb/layouts/cnab240/generic/header_file.rb +4 -4
- data/lib/cnab_rb/layouts/cnab240/generic/return/segment_t.rb +1 -1
- data/lib/cnab_rb/layouts/layout.rb +1 -1
- data/lib/cnab_rb/return/cnab240/batch.rb +41 -0
- data/lib/cnab_rb/return/cnab240/caixa_return.rb +1 -1
- data/lib/cnab_rb/return/cnab240/detail.rb +103 -0
- data/lib/cnab_rb/return/cnab240/generic_return.rb +93 -1
- data/lib/cnab_rb/return/return_factory.rb +4 -1
- data/lib/cnab_rb/version.rb +1 -1
- metadata +4 -3
- data/lib/cnab_rb/layouts/cnab240/generic/return/segment_a.rb +0 -163
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d125b4600942c6b69ac39a1258d3f16e08e7365a46bd613e4bdcf3e520f33a11
|
|
4
|
+
data.tar.gz: c06a22ec4306e80703e7f8b712ac9bb96d419ef341be462c8b31cfc8091cd29a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cc2df7ccf2bc907830033a59d68d47acda402fb38a7b81808b399381453cf947e46df5fc742d5dd5a231eefe8b3bcc57a3555b53acaa243bb2a8ed5f9fdbe65e
|
|
7
|
+
data.tar.gz: b9fbd01403a202db938b1351e6e723c45cf073e88efa9c6908dfe62f858afb095ec557254d5b7d2d877a104a06fd3046bc47e422e607adc6b8f7aa25cde9fb30
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# CnabRb
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
|
3
|
+
Project to create and read CNAB files
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
@@ -22,7 +20,24 @@ Or install it yourself as:
|
|
|
22
20
|
|
|
23
21
|
## Usage
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
Read return files:
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
require 'cnab_rb'
|
|
27
|
+
|
|
28
|
+
factory = CnabRb::Return::ReturnFactory.new
|
|
29
|
+
file = factory.make_return('path/to/file.ret')
|
|
30
|
+
|
|
31
|
+
file.details.each do |detail|
|
|
32
|
+
received_amount = detail.net_amount
|
|
33
|
+
is_write_off = detail.is_write_off
|
|
34
|
+
our_number = detail.our_number
|
|
35
|
+
|
|
36
|
+
if is_write_off && received_amount
|
|
37
|
+
# your title is paid
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
```
|
|
26
41
|
|
|
27
42
|
## Development
|
|
28
43
|
|
data/lib/cnab_rb.rb
CHANGED
|
@@ -20,10 +20,9 @@ module CnabRb
|
|
|
20
20
|
module Cnab240
|
|
21
21
|
module Generic
|
|
22
22
|
module Return
|
|
23
|
-
autoload :
|
|
24
|
-
autoload :
|
|
25
|
-
autoload :
|
|
26
|
-
autoload :SegmentW, 'cnab_rb/layouts/cnab240/generic/segment_w'
|
|
23
|
+
autoload :SegmentT, 'cnab_rb/layouts/cnab240/generic/return/segment_t'
|
|
24
|
+
autoload :SegmentU, 'cnab_rb/layouts/cnab240/generic/return/segment_u'
|
|
25
|
+
autoload :SegmentW, 'cnab_rb/layouts/cnab240/generic/return/segment_w'
|
|
27
26
|
end
|
|
28
27
|
|
|
29
28
|
autoload :HeaderFile, 'cnab_rb/layouts/cnab240/generic/header_file'
|
|
@@ -36,6 +35,13 @@ module CnabRb
|
|
|
36
35
|
end
|
|
37
36
|
|
|
38
37
|
module Return
|
|
38
|
+
module Cnab240
|
|
39
|
+
autoload :GenericReturn, 'cnab_rb/return/cnab240/generic_return'
|
|
40
|
+
autoload :Batch, 'cnab_rb/return/cnab240/batch'
|
|
41
|
+
autoload :Detail, 'cnab_rb/return/cnab240/detail'
|
|
42
|
+
autoload :CaixaReturn, 'cnab_rb/return/cnab240/caixa_return'
|
|
43
|
+
end
|
|
44
|
+
|
|
39
45
|
autoload :ReturnFactory, 'cnab_rb/return/return_factory'
|
|
40
46
|
end
|
|
41
47
|
end
|
data/lib/cnab_rb/format/field.rb
CHANGED
|
@@ -36,8 +36,8 @@ module CnabRb::Format
|
|
|
36
36
|
def decode(value)
|
|
37
37
|
decoded = @picture.decode(value)
|
|
38
38
|
|
|
39
|
-
unless @date_format.nil?
|
|
40
|
-
DateTime.strptime(decoded.to_s, @date_format)
|
|
39
|
+
unless @date_format.nil? || decoded == 0
|
|
40
|
+
DateTime.strptime(decoded.to_s.rjust(length, '0'), @date_format)
|
|
41
41
|
else
|
|
42
42
|
decoded
|
|
43
43
|
end
|
data/lib/cnab_rb/format/file.rb
CHANGED
|
@@ -15,10 +15,14 @@ module CnabRb::Format
|
|
|
15
15
|
def decode(text)
|
|
16
16
|
@lines = text.split(LINE_BREAK).map do |line_text|
|
|
17
17
|
layout = get_line_layout(line_text)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
unless layout.nil?
|
|
19
|
+
line = Line.new(layout)
|
|
20
|
+
line.decode(line_text)
|
|
21
|
+
line
|
|
22
|
+
end
|
|
21
23
|
end
|
|
24
|
+
|
|
25
|
+
@lines = @lines.filter {|n| !n.nil?}
|
|
22
26
|
end
|
|
23
27
|
|
|
24
28
|
def get_line_layout(line_text)
|
data/lib/cnab_rb/format/line.rb
CHANGED
|
@@ -164,10 +164,10 @@ module CnabRb::Layouts::Cnab240::Generic
|
|
|
164
164
|
# Número seqüencial adotado e controlado pelo responsável pela geração do arquivo para ordenar a
|
|
165
165
|
# disposição dos arquivos encaminhados.
|
|
166
166
|
# Evoluir um número seqüencial a cada header de arquivo.
|
|
167
|
-
pos:
|
|
167
|
+
pos: 158..163,
|
|
168
168
|
picture: '9(6)'
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
field :layout_version,
|
|
171
171
|
# Código adotado pela FEBRABAN para identificar qual a versão de layout do arquivo encaminhado. O
|
|
172
172
|
# código é composto de:
|
|
173
173
|
# Versão = 2 dígitos
|
|
@@ -177,7 +177,7 @@ module CnabRb::Layouts::Cnab240::Generic
|
|
|
177
177
|
picture: '9(3)',
|
|
178
178
|
default: '030'
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
field :density_file,
|
|
181
181
|
# Densidade de gravação (bpi), do arquivo encaminhado. Pode ser:
|
|
182
182
|
# 1600 BPI
|
|
183
183
|
# 6250 BPI
|
|
@@ -201,7 +201,7 @@ module CnabRb::Layouts::Cnab240::Generic
|
|
|
201
201
|
picture: 'X(20)',
|
|
202
202
|
default: 'REMESSA-PRODUCAO'
|
|
203
203
|
|
|
204
|
-
field :
|
|
204
|
+
field :exclusive_use_febraban_3,
|
|
205
205
|
# Texto de observações destinado para uso exclusivo da FEBRABAN. Preencher com Brancos.
|
|
206
206
|
pos: 212..240,
|
|
207
207
|
picture: 'X(29)',
|
|
@@ -29,7 +29,7 @@ module CnabRb::Layouts
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
if expected_line_length != actual_line_length
|
|
32
|
-
raise CnabRb::Error.new("Invalid layout length, expected #{expected_line_length}, actual #{actual_line_length}")
|
|
32
|
+
raise CnabRb::Error.new("Invalid layout length, expected #{expected_line_length}, actual #{actual_line_length}, layout: #{self.class}")
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module CnabRb::Return::Cnab240
|
|
2
|
+
class Batch
|
|
3
|
+
attr_accessor :segments, :header, :trailer
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@segments = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def details
|
|
10
|
+
unless @details.nil?
|
|
11
|
+
return @details
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
lastDetail = nil
|
|
15
|
+
@details = []
|
|
16
|
+
|
|
17
|
+
@segments.each do |s|
|
|
18
|
+
if s.segment_code == 'T'
|
|
19
|
+
lastDetail = Detail.new
|
|
20
|
+
@details << lastDetail
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
unless lastDetail.nil?
|
|
24
|
+
if s.segment_code == 'T'
|
|
25
|
+
lastDetail.segment_t = s
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
if s.segment_code == 'U'
|
|
29
|
+
lastDetail.segment_u = s
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
if s.segment_code == 'W'
|
|
33
|
+
lastDetail.segment_w = s
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@details
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
module CnabRb::Return::Cnab240
|
|
2
|
+
class Detail
|
|
3
|
+
attr_accessor :segment_t, :segment_u, :segment_w
|
|
4
|
+
|
|
5
|
+
def is_write_off
|
|
6
|
+
[6, 9, 17, 25].include?(@segment_t.movement_code)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def is_rejected_write_off
|
|
10
|
+
[3, 26, 30].include?(@segment_t.movement_code)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def movement_code
|
|
14
|
+
@segment_t.movement_code
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def net_amount
|
|
18
|
+
@segment_u.net_amount
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def title_amount
|
|
22
|
+
@segment_t.title_amount
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def paid_amount
|
|
26
|
+
@segment_u.paid_amount
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def tax_amount
|
|
30
|
+
@segment_t.tax_amount
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def iof_amount
|
|
34
|
+
@segment_u.iof_amount
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def discount_amount
|
|
38
|
+
@segment_u.discount_amount
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def abatement_amount
|
|
42
|
+
@segment_u.abatement_amount
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def other_expenses_amount
|
|
46
|
+
@segment_u.other_expenses_amount
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def other_credits_amount
|
|
50
|
+
@segment_u.other_credits_amount
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def document_number
|
|
54
|
+
@segment_t.document_number
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def our_number
|
|
58
|
+
@segment_t.our_number
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def due_date
|
|
62
|
+
@segment_t.due_date
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def credit_date
|
|
66
|
+
@segment_u.credit_date
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def fine_amount
|
|
70
|
+
@segment_u.additions_amount
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def ocurrency_date
|
|
74
|
+
@segment_u.ocurrency_date
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def wallet_code
|
|
78
|
+
if @segment_t.field_exists(:wallet_code)
|
|
79
|
+
@segment_t.wallet_code
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def agency
|
|
84
|
+
@segment_t.agency
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def agency_cd
|
|
88
|
+
@segment_t.agency_cd
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def collector_agency
|
|
92
|
+
@segment_t.collector_agency
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def collector_agency_cd
|
|
96
|
+
@segment_t.collector_agency_cd
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def sequential_number
|
|
100
|
+
@segment_t.sequential_number_batch
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -1,4 +1,96 @@
|
|
|
1
1
|
module CnabRb::Return::Cnab240
|
|
2
|
-
class GenericReturn <
|
|
2
|
+
class GenericReturn < CnabRb::Format::File
|
|
3
|
+
def get_line_layout(line_text)
|
|
4
|
+
registry_type_table = {
|
|
5
|
+
'0' => :header_file,
|
|
6
|
+
'1' => :header_batch,
|
|
7
|
+
'3' => :segment,
|
|
8
|
+
'5' => :trailer_batch,
|
|
9
|
+
'9' => :trailer_file
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
registry_type = registry_type_table[line_text[7, 1]]
|
|
13
|
+
segment_code = line_text[13, 1]
|
|
14
|
+
|
|
15
|
+
unless registry_type.nil?
|
|
16
|
+
if :segment == registry_type
|
|
17
|
+
method_name = "segment_#{segment_code.downcase}_layout"
|
|
18
|
+
else
|
|
19
|
+
method_name = "#{registry_type}_layout"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if respond_to?(method_name)
|
|
23
|
+
send(method_name)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def header_file_layout
|
|
29
|
+
CnabRb::Layouts::Cnab240::Generic::HeaderFile.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def header_batch_layout
|
|
33
|
+
CnabRb::Layouts::Cnab240::Generic::HeaderBatch.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def segment_t_layout
|
|
37
|
+
CnabRb::Layouts::Cnab240::Generic::Return::SegmentT.new
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def segment_u_layout
|
|
41
|
+
CnabRb::Layouts::Cnab240::Generic::Return::SegmentU.new
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def segment_w_layout
|
|
45
|
+
CnabRb::Layouts::Cnab240::Generic::Return::SegmentW.new
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def trailer_batch_layout
|
|
49
|
+
CnabRb::Layouts::Cnab240::Generic::TrailerBatch.new
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def trailer_file_layout
|
|
53
|
+
CnabRb::Layouts::Cnab240::Generic::TrailerFile.new
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def batches
|
|
57
|
+
unless @batches.nil?
|
|
58
|
+
return @batches
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
lastBatch = nil
|
|
62
|
+
@batches = []
|
|
63
|
+
|
|
64
|
+
@lines.each do |line|
|
|
65
|
+
if line.registry_type == 1
|
|
66
|
+
lastBatch = Batch.new
|
|
67
|
+
@batches.push(lastBatch)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
unless lastBatch.nil?
|
|
71
|
+
if line.registry_type == 1
|
|
72
|
+
lastBatch.header = line
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
if line.registry_type == 3
|
|
76
|
+
lastBatch.segments << line
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if line.registry_type == 5
|
|
80
|
+
lastBatch.trailer = line
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
@batches
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def details
|
|
89
|
+
unless @details.nil?
|
|
90
|
+
return @details
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
@details = batches.map{|b| b.details}.flatten
|
|
94
|
+
end
|
|
3
95
|
end
|
|
4
96
|
end
|
|
@@ -2,7 +2,7 @@ module CnabRb::Return
|
|
|
2
2
|
class ReturnFactory
|
|
3
3
|
def make_return(file_name)
|
|
4
4
|
first_line = File.open(file_name, &:readline)
|
|
5
|
-
format = first_line.gsub(/(\r|\n)
|
|
5
|
+
format = first_line.gsub(/(\r|\n)/, '').length
|
|
6
6
|
bank_code = first_line[0, 3]
|
|
7
7
|
method = "make_cnab#{format}_#{bank_code}"
|
|
8
8
|
|
|
@@ -14,6 +14,9 @@ module CnabRb::Return
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def make_cnab240_104(file_name)
|
|
17
|
+
file = CnabRb::Return::Cnab240::CaixaReturn.new
|
|
18
|
+
file.decode(File.read(file_name))
|
|
19
|
+
file
|
|
17
20
|
end
|
|
18
21
|
end
|
|
19
22
|
end
|
data/lib/cnab_rb/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cnab_rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Anderson Danilo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-08-
|
|
11
|
+
date: 2019-08-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -81,14 +81,15 @@ files:
|
|
|
81
81
|
- lib/cnab_rb/format/picture_formats/text.rb
|
|
82
82
|
- lib/cnab_rb/layouts/cnab240/generic/header_batch.rb
|
|
83
83
|
- lib/cnab_rb/layouts/cnab240/generic/header_file.rb
|
|
84
|
-
- lib/cnab_rb/layouts/cnab240/generic/return/segment_a.rb
|
|
85
84
|
- lib/cnab_rb/layouts/cnab240/generic/return/segment_t.rb
|
|
86
85
|
- lib/cnab_rb/layouts/cnab240/generic/return/segment_u.rb
|
|
87
86
|
- lib/cnab_rb/layouts/cnab240/generic/return/segment_w.rb
|
|
88
87
|
- lib/cnab_rb/layouts/cnab240/generic/trailer_batch.rb
|
|
89
88
|
- lib/cnab_rb/layouts/cnab240/generic/trailer_file.rb
|
|
90
89
|
- lib/cnab_rb/layouts/layout.rb
|
|
90
|
+
- lib/cnab_rb/return/cnab240/batch.rb
|
|
91
91
|
- lib/cnab_rb/return/cnab240/caixa_return.rb
|
|
92
|
+
- lib/cnab_rb/return/cnab240/detail.rb
|
|
92
93
|
- lib/cnab_rb/return/cnab240/generic_return.rb
|
|
93
94
|
- lib/cnab_rb/return/return_factory.rb
|
|
94
95
|
- lib/cnab_rb/version.rb
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
module CnabRb::Layouts::Cnab240::Generic::Return
|
|
2
|
-
class SegmentA < CnabRb::Layouts::Layout
|
|
3
|
-
def init_fields
|
|
4
|
-
field :bank_code,
|
|
5
|
-
# codigo_banco
|
|
6
|
-
pos: 1..3,
|
|
7
|
-
picture: '9(3)'
|
|
8
|
-
|
|
9
|
-
field :service_batch,
|
|
10
|
-
# lote_servico
|
|
11
|
-
pos: 4..7,
|
|
12
|
-
picture: '9(4)'
|
|
13
|
-
|
|
14
|
-
field :registry_type,
|
|
15
|
-
# tipo_registro
|
|
16
|
-
pos: 8..8,
|
|
17
|
-
picture: '9(1)',
|
|
18
|
-
default: '3'
|
|
19
|
-
|
|
20
|
-
field :sequential_number_batch,
|
|
21
|
-
# numero_sequencial_lote
|
|
22
|
-
pos: 9..13,
|
|
23
|
-
picture: '9(5)'
|
|
24
|
-
|
|
25
|
-
field :segment_code,
|
|
26
|
-
# codigo_segmento
|
|
27
|
-
pos: 14..14,
|
|
28
|
-
picture: 'X(1)',
|
|
29
|
-
default: 'A'
|
|
30
|
-
|
|
31
|
-
field :movement_type,
|
|
32
|
-
# tipo_movimento
|
|
33
|
-
pos: 15..15,
|
|
34
|
-
picture: '9(1)',
|
|
35
|
-
default: ''
|
|
36
|
-
|
|
37
|
-
field :movement_instruction_code,
|
|
38
|
-
# codigo_instrucao_movimento
|
|
39
|
-
pos: 16..17,
|
|
40
|
-
picture: '9(2)'
|
|
41
|
-
|
|
42
|
-
field :centering_chamber,
|
|
43
|
-
# camara_centralizadora
|
|
44
|
-
pos: 18..20,
|
|
45
|
-
picture: '9(3)'
|
|
46
|
-
|
|
47
|
-
field :favored_bank,
|
|
48
|
-
# banco_favorecido
|
|
49
|
-
pos: 21..23,
|
|
50
|
-
picture: '9(3)'
|
|
51
|
-
|
|
52
|
-
field :favored_agency,
|
|
53
|
-
# agencia_favorecido
|
|
54
|
-
pos: 24..28,
|
|
55
|
-
picture: '9(5)'
|
|
56
|
-
|
|
57
|
-
field :favored_agency_cd,
|
|
58
|
-
# agencia_dv_favorecido
|
|
59
|
-
pos: 29..29,
|
|
60
|
-
picture: 'X(1)'
|
|
61
|
-
|
|
62
|
-
field :favored_account,
|
|
63
|
-
# conta_favorecido
|
|
64
|
-
pos: 30..41,
|
|
65
|
-
picture: '9(12)'
|
|
66
|
-
|
|
67
|
-
field :favored_account_cd,
|
|
68
|
-
# conta_dv_favorecido
|
|
69
|
-
pos: 42..42,
|
|
70
|
-
picture: 'X(1)'
|
|
71
|
-
|
|
72
|
-
field :favored_agency_account_cd,
|
|
73
|
-
# agencia_conta_dv_favorecido
|
|
74
|
-
pos: 43..43,
|
|
75
|
-
picture: 'X(1)'
|
|
76
|
-
|
|
77
|
-
field :favored_name,
|
|
78
|
-
# nome_favorecido
|
|
79
|
-
pos: 44..73,
|
|
80
|
-
picture: 'X(30)'
|
|
81
|
-
|
|
82
|
-
field :document_number,
|
|
83
|
-
# numero_documento
|
|
84
|
-
pos: 74..93,
|
|
85
|
-
picture: 'X(20)'
|
|
86
|
-
|
|
87
|
-
field :payment_date,
|
|
88
|
-
# data_pagamento
|
|
89
|
-
pos: 94..101,
|
|
90
|
-
picture: '9(8)',
|
|
91
|
-
date_format: '%d%m%Y'
|
|
92
|
-
|
|
93
|
-
field :currency_code,
|
|
94
|
-
# tipo_moeda
|
|
95
|
-
pos: 102..104,
|
|
96
|
-
picture: 'X(3)',
|
|
97
|
-
default: 'BRL'
|
|
98
|
-
|
|
99
|
-
field :coin_quantity,
|
|
100
|
-
# quantidade_moeda
|
|
101
|
-
pos: 105..119,
|
|
102
|
-
picture: '9(10)V9(5)'
|
|
103
|
-
|
|
104
|
-
field :payment_amount,
|
|
105
|
-
# valor_pagamento
|
|
106
|
-
pos: 120..134,
|
|
107
|
-
picture: '9(13)V9(2)'
|
|
108
|
-
|
|
109
|
-
field :our_number,
|
|
110
|
-
# nosso_numero
|
|
111
|
-
pos: 135..154,
|
|
112
|
-
picture: 'X(20)'
|
|
113
|
-
|
|
114
|
-
field :real_date,
|
|
115
|
-
# data_real
|
|
116
|
-
pos: 155..162,
|
|
117
|
-
picture: '9(8)',
|
|
118
|
-
date_format: '%d%m%Y'
|
|
119
|
-
|
|
120
|
-
field :real_amount,
|
|
121
|
-
# valor_real
|
|
122
|
-
pos: 163..177,
|
|
123
|
-
picture: '9(13)V9(2)'
|
|
124
|
-
|
|
125
|
-
field :information_2,
|
|
126
|
-
# informacao_2
|
|
127
|
-
pos: 178..217,
|
|
128
|
-
picture: 'X(40)'
|
|
129
|
-
|
|
130
|
-
field :document_finality,
|
|
131
|
-
# finalidade_doc
|
|
132
|
-
pos: 218..219,
|
|
133
|
-
picture: 'X(2)'
|
|
134
|
-
|
|
135
|
-
field :ted_finality,
|
|
136
|
-
# finalidade_ted
|
|
137
|
-
pos: 220..224,
|
|
138
|
-
picture: 'X(5)'
|
|
139
|
-
|
|
140
|
-
field :complementary_finality,
|
|
141
|
-
# finalidade_complementar
|
|
142
|
-
pos: 225..226,
|
|
143
|
-
picture: 'X(2)'
|
|
144
|
-
|
|
145
|
-
field :exclusive_use_febraban_1,
|
|
146
|
-
# uso_exclusivo_febraban
|
|
147
|
-
pos: 227..229,
|
|
148
|
-
picture: 'X(3)',
|
|
149
|
-
default: ''
|
|
150
|
-
|
|
151
|
-
field :notice,
|
|
152
|
-
# aviso
|
|
153
|
-
pos: 230..230,
|
|
154
|
-
picture: '9(1)'
|
|
155
|
-
|
|
156
|
-
field :ocurrences,
|
|
157
|
-
# ocorencias
|
|
158
|
-
pos: 231..240,
|
|
159
|
-
picture: 'X(10)',
|
|
160
|
-
default: ''
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|