cnab240 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -2
- data/cnab240.gemspec +10 -12
- data/lib/cnab240.rb +108 -91
- data/lib/cnab240/arquivo/arquivo.rb +6 -9
- data/lib/cnab240/arquivo/builder.rb +111 -90
- data/lib/cnab240/arquivo/estrutura.rb +161 -99
- data/lib/cnab240/arquivo/v40/header.rb +27 -29
- data/lib/cnab240/arquivo/v40/trailer.rb +8 -10
- data/lib/cnab240/arquivo/v60/header.rb +38 -0
- data/lib/cnab240/arquivo/v60/trailer.rb +17 -0
- data/lib/cnab240/arquivo/v80/header.rb +23 -26
- data/lib/cnab240/arquivo/v80/trailer.rb +8 -9
- data/lib/cnab240/arquivo/v81/header.rb +37 -0
- data/lib/cnab240/arquivo/v81/trailer.rb +17 -0
- data/lib/cnab240/arquivo/v83/header.rb +25 -26
- data/lib/cnab240/arquivo/v83/trailer.rb +9 -9
- data/lib/cnab240/arquivo/v86/header.rb +25 -26
- data/lib/cnab240/arquivo/v86/trailer.rb +9 -10
- data/lib/cnab240/arquivo/v87/header.rb +25 -26
- data/lib/cnab240/arquivo/v87/trailer.rb +9 -10
- data/lib/cnab240/ext/attribute_accessors.rb +4 -4
- data/lib/cnab240/ext/bindata.rb +4 -4
- data/lib/cnab240/ext/default_mixin.rb +2 -4
- data/lib/cnab240/ext/filler.rb +1 -3
- data/lib/cnab240/ext/lstring.rb +9 -10
- data/lib/cnab240/ext/segmento_mixin.rb +1 -3
- data/lib/cnab240/helper/boleto_bancoob.rb +60 -0
- data/lib/cnab240/helper/helper.rb +1 -1
- data/lib/cnab240/helper/pagamento_bb.rb +7 -9
- data/lib/cnab240/helper/pagamento_bradesco.rb +6 -8
- data/lib/cnab240/helper/pagamento_itau.rb +6 -8
- data/lib/cnab240/helper/transferencia_citibank.rb +56 -0
- data/lib/cnab240/helper/{pagamento_sicoob.rb → transferencia_sicoob.rb} +8 -15
- data/lib/cnab240/{arquivo/lote.rb → lote.rb} +29 -14
- data/lib/cnab240/lote/v40/boletos/header.rb +46 -0
- data/lib/cnab240/lote/v40/boletos/trailer.rb +29 -0
- data/lib/cnab240/pagamentos/v40/header.rb +30 -32
- data/lib/cnab240/pagamentos/v40/trailer.rb +10 -11
- data/lib/cnab240/pagamentos/v60/header.rb +43 -0
- data/lib/cnab240/pagamentos/v60/trailer.rb +17 -0
- data/lib/cnab240/pagamentos/v80/header.rb +35 -37
- data/lib/cnab240/pagamentos/v80/trailer.rb +10 -11
- data/lib/cnab240/pagamentos/v83/header.rb +33 -35
- data/lib/cnab240/pagamentos/v83/trailer.rb +11 -12
- data/lib/cnab240/pagamentos/v86/header.rb +34 -36
- data/lib/cnab240/pagamentos/v86/titulos/header.rb +28 -30
- data/lib/cnab240/pagamentos/v86/titulos/trailer.rb +11 -12
- data/lib/cnab240/pagamentos/v86/trailer.rb +11 -12
- data/lib/cnab240/pagamentos/v86/tributos/header.rb +35 -37
- data/lib/cnab240/pagamentos/v86/tributos/trailer.rb +9 -10
- data/lib/cnab240/pagamentos/v87/header.rb +34 -36
- data/lib/cnab240/pagamentos/v87/titulos/header.rb +28 -30
- data/lib/cnab240/pagamentos/v87/titulos/trailer.rb +11 -12
- data/lib/cnab240/pagamentos/v87/trailer.rb +11 -12
- data/lib/cnab240/pagamentos/v87/tributos/header.rb +35 -37
- data/lib/cnab240/pagamentos/v87/tributos/trailer.rb +9 -10
- data/lib/cnab240/segmentos/v40/segmento_a.rb +40 -41
- data/lib/cnab240/segmentos/v60/segmento_a.rb +43 -0
- data/lib/cnab240/segmentos/v60/segmento_b.rb +38 -0
- data/lib/cnab240/segmentos/v60/segmento_j.rb +32 -0
- data/lib/cnab240/segmentos/v80/agencia_itau.rb +8 -9
- data/lib/cnab240/segmentos/v80/agencia_outros.rb +6 -7
- data/lib/cnab240/segmentos/v80/segmento_a.rb +30 -32
- data/lib/cnab240/segmentos/v81/segmento_p.rb +79 -0
- data/lib/cnab240/segmentos/v81/segmento_q.rb +36 -0
- data/lib/cnab240/segmentos/v81/segmento_r.rb +49 -0
- data/lib/cnab240/segmentos/v81/segmento_s.rb +37 -0
- data/lib/cnab240/segmentos/v83/segmento_a.rb +35 -36
- data/lib/cnab240/segmentos/v83/segmento_b.rb +33 -34
- data/lib/cnab240/segmentos/v83/segmento_j.rb +22 -23
- data/lib/cnab240/segmentos/v83/segmento_z.rb +10 -11
- data/lib/cnab240/segmentos/v86/segmento_a.rb +37 -38
- data/lib/cnab240/segmentos/v86/segmento_b.rb +33 -34
- data/lib/cnab240/segmentos/v86/segmento_c.rb +19 -20
- data/lib/cnab240/segmentos/v86/segmento_j.rb +22 -23
- data/lib/cnab240/segmentos/v86/segmento_j52.rb +19 -20
- data/lib/cnab240/segmentos/v86/segmento_n.rb +17 -18
- data/lib/cnab240/segmentos/v86/segmento_n1.rb +10 -11
- data/lib/cnab240/segmentos/v86/segmento_n2.rb +12 -13
- data/lib/cnab240/segmentos/v86/segmento_n3.rb +12 -13
- data/lib/cnab240/segmentos/v86/segmento_n4.rb +14 -15
- data/lib/cnab240/segmentos/v86/segmento_n5.rb +12 -13
- data/lib/cnab240/segmentos/v86/segmento_n6.rb +12 -13
- data/lib/cnab240/segmentos/v86/segmento_n7.rb +13 -14
- data/lib/cnab240/segmentos/v86/segmento_n8.rb +12 -14
- data/lib/cnab240/segmentos/v86/segmento_o.rb +17 -18
- data/lib/cnab240/segmentos/v86/segmento_w.rb +12 -13
- data/lib/cnab240/segmentos/v86/segmento_w1.rb +9 -10
- data/lib/cnab240/segmentos/v86/segmento_z.rb +10 -11
- data/lib/cnab240/segmentos/v87/segmento_a.rb +37 -38
- data/lib/cnab240/segmentos/v87/segmento_b.rb +33 -34
- data/lib/cnab240/segmentos/v87/segmento_c.rb +19 -20
- data/lib/cnab240/segmentos/v87/segmento_j.rb +22 -23
- data/lib/cnab240/segmentos/v87/segmento_j52.rb +19 -20
- data/lib/cnab240/segmentos/v87/segmento_n.rb +17 -18
- data/lib/cnab240/segmentos/v87/segmento_n1.rb +10 -11
- data/lib/cnab240/segmentos/v87/segmento_n2.rb +12 -13
- data/lib/cnab240/segmentos/v87/segmento_n3.rb +12 -13
- data/lib/cnab240/segmentos/v87/segmento_n4.rb +14 -15
- data/lib/cnab240/segmentos/v87/segmento_n5.rb +12 -13
- data/lib/cnab240/segmentos/v87/segmento_n6.rb +12 -13
- data/lib/cnab240/segmentos/v87/segmento_n7.rb +13 -14
- data/lib/cnab240/segmentos/v87/segmento_n8.rb +12 -14
- data/lib/cnab240/segmentos/v87/segmento_o.rb +17 -18
- data/lib/cnab240/segmentos/v87/segmento_w.rb +12 -13
- data/lib/cnab240/segmentos/v87/segmento_w1.rb +9 -10
- data/lib/cnab240/segmentos/v87/segmento_z.rb +10 -11
- data/lib/cnab240/version.rb +1 -1
- metadata +30 -40
data/lib/cnab240/ext/bindata.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module BinData
|
2
2
|
class Record < BinData::Struct
|
3
3
|
def linha # lulz
|
4
|
-
|
4
|
+
auto_fill if self.respond_to?(:auto_fill) && Cnab240.auto_fill_enabled
|
5
5
|
s = StringIO.new
|
6
|
-
|
7
|
-
|
6
|
+
write(s)
|
7
|
+
fail "Invalid line length #{s.string.length}" unless (s.string.length == 240) || self.respond_to?(:lote)
|
8
8
|
s.string
|
9
9
|
end
|
10
10
|
end
|
11
|
-
end
|
11
|
+
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module Cnab240
|
2
2
|
module DefaultMixin
|
3
|
-
|
4
3
|
def initialize_instance
|
5
4
|
super
|
6
5
|
Cnab240.defaults.each do |k, v|
|
7
6
|
if self.respond_to?("#{k}=")
|
8
|
-
|
7
|
+
send("#{k}=", v)
|
9
8
|
end
|
10
9
|
end
|
11
10
|
yield self if block_given?
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
|
-
end
|
13
|
+
end
|
data/lib/cnab240/ext/filler.rb
CHANGED
data/lib/cnab240/ext/lstring.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
|
-
require
|
1
|
+
require 'bindata/base_primitive'
|
2
2
|
|
3
3
|
module BinData
|
4
|
-
|
5
4
|
# I didn't want to monkey patch bindata's String primitive.
|
6
5
|
class Lstring < BinData::BasePrimitive
|
7
|
-
|
8
6
|
optional_parameters :read_length, :length, :trim_padding
|
9
|
-
default_parameters :
|
7
|
+
default_parameters pad_byte: "\0"
|
10
8
|
mutually_exclusive_parameters :read_length, :length
|
11
9
|
mutually_exclusive_parameters :length, :value
|
12
10
|
|
13
11
|
class << self
|
14
|
-
|
15
12
|
def sanitize_parameters!(params) #:nodoc:
|
16
13
|
params.warn_replacement_parameter(:initial_length, :read_length)
|
17
14
|
|
@@ -24,18 +21,19 @@ module BinData
|
|
24
21
|
end
|
25
22
|
|
26
23
|
#-------------
|
24
|
+
|
27
25
|
private
|
28
26
|
|
29
27
|
def sanitized_pad_byte(byte)
|
30
28
|
result = byte.is_a?(Integer) ? byte.chr : byte_string(byte.to_s.dup)
|
31
29
|
if result.length > 1
|
32
|
-
|
30
|
+
fail ArgumentError, ':pad_byte must not contain more than 1 byte'
|
33
31
|
end
|
34
32
|
result
|
35
33
|
end
|
36
34
|
|
37
35
|
def byte_string(str)
|
38
|
-
if RUBY_VERSION >=
|
36
|
+
if RUBY_VERSION >= '1.9'
|
39
37
|
str.force_encoding(Encoding::BINARY)
|
40
38
|
else
|
41
39
|
str
|
@@ -59,10 +57,11 @@ module BinData
|
|
59
57
|
end
|
60
58
|
|
61
59
|
#---------------
|
60
|
+
|
62
61
|
private
|
63
62
|
|
64
63
|
def byte_string(str)
|
65
|
-
if RUBY_VERSION >=
|
64
|
+
if RUBY_VERSION >= '1.9'
|
66
65
|
str.force_encoding(Encoding::BINARY)
|
67
66
|
else
|
68
67
|
str
|
@@ -83,7 +82,7 @@ module BinData
|
|
83
82
|
end
|
84
83
|
|
85
84
|
def trim_padding(str)
|
86
|
-
str.sub(/#{eval_parameter(:pad_byte)}*$/,
|
85
|
+
str.sub(/#{eval_parameter(:pad_byte)}*$/, '')
|
87
86
|
end
|
88
87
|
|
89
88
|
def value_to_binary_string(val)
|
@@ -96,7 +95,7 @@ module BinData
|
|
96
95
|
end
|
97
96
|
|
98
97
|
def sensible_default
|
99
|
-
|
98
|
+
''
|
100
99
|
end
|
101
100
|
end
|
102
101
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Cnab240
|
2
|
+
class BoletoBancoob < Helper
|
3
|
+
def initialize(campos = {})
|
4
|
+
campos[:controle_banco] ||= '756'
|
5
|
+
campos[:banco_nome] ||= 'BANCO COOPERATIVO DO BRASIL S/A.'
|
6
|
+
campos[:empresa_tipo] ||= '2'
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
9
|
+
campos[:arquivo_codigo] ||= '1'
|
10
|
+
|
11
|
+
@arquivo = Cnab240::Arquivo::Arquivo.new('V81')
|
12
|
+
|
13
|
+
fill campos, arquivo.header, arquivo.trailer
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_lote(campos = {})
|
17
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :boleto, tipo: :remessa, versao: 'V81')
|
18
|
+
|
19
|
+
campos[:controle_banco] ||= '756'
|
20
|
+
campos[:controle_lote] = (@arquivo.lotes.length).to_s
|
21
|
+
|
22
|
+
fill campos, lote.header, lote.trailer
|
23
|
+
end
|
24
|
+
|
25
|
+
def <<(campos)
|
26
|
+
lote = @arquivo.lotes.last
|
27
|
+
|
28
|
+
campos[:controle_banco] ||= '756'
|
29
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
30
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
31
|
+
# 01 - Entrada de títulos
|
32
|
+
campos[:servico_codigo_movimento] ||= '01'
|
33
|
+
|
34
|
+
segmento_p = Cnab240::V81::SegmentoP.new
|
35
|
+
fill campos, segmento_p
|
36
|
+
lote << segmento_p
|
37
|
+
|
38
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
39
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
40
|
+
|
41
|
+
segmento_q = Cnab240::V81::SegmentoQ.new
|
42
|
+
fill campos, segmento_q
|
43
|
+
lote << segmento_q
|
44
|
+
|
45
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
46
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
47
|
+
|
48
|
+
segmento_r = Cnab240::V81::SegmentoR.new
|
49
|
+
fill campos, segmento_r
|
50
|
+
lote << segmento_r
|
51
|
+
|
52
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
53
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
54
|
+
|
55
|
+
segmento_s = Cnab240::V81::SegmentoS.new
|
56
|
+
fill campos, segmento_s
|
57
|
+
lote << segmento_s
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,16 +1,15 @@
|
|
1
1
|
module Cnab240
|
2
2
|
class PagamentoBb < Helper
|
3
|
-
|
4
3
|
def initialize(campos = {})
|
5
4
|
campos[:controle_banco] ||= '001'
|
6
5
|
campos[:banco_nome] ||= 'BANCO DO BRASIL S.A.'
|
7
6
|
campos[:empresa_tipo] ||= '2'
|
8
|
-
campos[:arquivo_data_geracao] ||= Time.now.strftime(
|
9
|
-
campos[:arquivo_hora_geracao] ||= Time.now.strftime(
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
10
9
|
campos[:arquivo_codigo] ||= '1'
|
11
10
|
|
12
11
|
@arquivo = Cnab240::Arquivo::Arquivo.new('V86')
|
13
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
12
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V86')
|
14
13
|
|
15
14
|
fill campos, arquivo.header, arquivo.trailer
|
16
15
|
|
@@ -21,7 +20,7 @@ module Cnab240
|
|
21
20
|
end
|
22
21
|
|
23
22
|
def add_lote(campos = {})
|
24
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
23
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V86')
|
25
24
|
|
26
25
|
campos[:servico_operacao] ||= 'C'
|
27
26
|
campos[:controle_lote] ||= '0001'
|
@@ -34,7 +33,7 @@ module Cnab240
|
|
34
33
|
|
35
34
|
campos[:controle_banco] ||= '001'
|
36
35
|
campos[:controle_lote] ||= @arquivo.lotes.length.to_s
|
37
|
-
campos[:servico_numero_registro] ||= (lote.segmentos.length+1).to_s
|
36
|
+
campos[:servico_numero_registro] ||= (lote.segmentos.length + 1).to_s
|
38
37
|
# 000 para inclusao e 999 para exclusao
|
39
38
|
campos[:servico_tipo_movimento] ||= '000'
|
40
39
|
campos[:credito_moeda_tipo] ||= 'BRL'
|
@@ -42,10 +41,9 @@ module Cnab240
|
|
42
41
|
|
43
42
|
segmento_a = Cnab240::V86::SegmentoA.new
|
44
43
|
fill campos, segmento_a
|
45
|
-
#fill campos, segmento_a.favorecido_agencia_conta
|
44
|
+
# fill campos, segmento_a.favorecido_agencia_conta
|
46
45
|
|
47
46
|
lote << segmento_a
|
48
47
|
end
|
49
|
-
|
50
48
|
end
|
51
|
-
end
|
49
|
+
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
module Cnab240
|
2
2
|
class PagamentoBradesco < Helper
|
3
|
-
|
4
3
|
def initialize(campos = {})
|
5
4
|
campos[:controle_banco] ||= '237'
|
6
5
|
campos[:arquivo_codigo] ||= '1'
|
7
6
|
campos[:banco_nome] ||= 'BANCO BRADESCO'
|
8
|
-
campos[:arquivo_data_geracao] ||= Time.now.strftime(
|
9
|
-
campos[:arquivo_hora_geracao] ||= Time.now.strftime(
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
10
9
|
|
11
10
|
@arquivo = Cnab240::Arquivo::Arquivo.new('V80')
|
12
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
11
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V80')
|
13
12
|
|
14
13
|
fill campos, arquivo.header, arquivo.trailer
|
15
14
|
|
@@ -20,7 +19,7 @@ module Cnab240
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def add_lote(campos = {})
|
23
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
22
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V80')
|
24
23
|
|
25
24
|
campos[:servico_operacao] ||= 'C'
|
26
25
|
campos[:controle_lote] ||= '0001'
|
@@ -33,7 +32,7 @@ module Cnab240
|
|
33
32
|
|
34
33
|
campos[:controle_banco] ||= '237'
|
35
34
|
campos[:controle_lote] ||= @arquivo.lotes.length.to_s
|
36
|
-
campos[:servico_numero_registro] ||= (lote.segmentos.length+1).to_s
|
35
|
+
campos[:servico_numero_registro] ||= (lote.segmentos.length + 1).to_s
|
37
36
|
campos[:servico_tipo_movimento] ||= '000'
|
38
37
|
campos[:credito_moeda_tipo] ||= 'REA'
|
39
38
|
campos[:totais_qtde_registros] ||= (lote.segmentos.length + 2).to_s
|
@@ -44,6 +43,5 @@ module Cnab240
|
|
44
43
|
|
45
44
|
lote << segmento_a
|
46
45
|
end
|
47
|
-
|
48
46
|
end
|
49
|
-
end
|
47
|
+
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
module Cnab240
|
2
2
|
class PagamentoItau < Helper
|
3
|
-
|
4
3
|
def initialize(campos = {})
|
5
4
|
campos[:controle_banco] ||= '341'
|
6
5
|
campos[:arquivo_codigo] ||= '1'
|
7
6
|
campos[:banco_nome] ||= 'BANCO ITAU'
|
8
|
-
campos[:arquivo_data_geracao] ||= Time.now.strftime(
|
9
|
-
campos[:arquivo_hora_geracao] ||= Time.now.strftime(
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
10
9
|
|
11
10
|
@arquivo = Cnab240::Arquivo::Arquivo.new('V80')
|
12
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
11
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V80')
|
13
12
|
|
14
13
|
fill campos, arquivo.header, arquivo.trailer
|
15
14
|
|
@@ -20,7 +19,7 @@ module Cnab240
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def add_lote(campos = {})
|
23
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
22
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V80')
|
24
23
|
|
25
24
|
campos[:servico_operacao] ||= 'C'
|
26
25
|
campos[:controle_lote] ||= '0001'
|
@@ -33,7 +32,7 @@ module Cnab240
|
|
33
32
|
|
34
33
|
campos[:controle_banco] ||= '341'
|
35
34
|
campos[:controle_lote] ||= @arquivo.lotes.length.to_s
|
36
|
-
campos[:servico_numero_registro] ||= (lote.segmentos.length+1).to_s
|
35
|
+
campos[:servico_numero_registro] ||= (lote.segmentos.length + 1).to_s
|
37
36
|
campos[:servico_tipo_movimento] ||= '000'
|
38
37
|
campos[:credito_moeda_tipo] ||= 'REA'
|
39
38
|
campos[:totais_qtde_registros] ||= (lote.segmentos.length + 2).to_s
|
@@ -44,6 +43,5 @@ module Cnab240
|
|
44
43
|
|
45
44
|
lote << segmento_a
|
46
45
|
end
|
47
|
-
|
48
46
|
end
|
49
|
-
end
|
47
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Cnab240
|
2
|
+
class TransferenciaCitibank < Helper
|
3
|
+
def initialize(campos = {})
|
4
|
+
campos[:controle_banco] ||= '745'
|
5
|
+
campos[:banco_nome] ||= 'BANCO CITIBANK S/A'
|
6
|
+
campos[:empresa_tipo] ||= '2'
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
9
|
+
campos[:arquivo_codigo] ||= '1'
|
10
|
+
|
11
|
+
@arquivo = Cnab240::Arquivo::Arquivo.new('V60')
|
12
|
+
|
13
|
+
fill campos, arquivo.header, arquivo.trailer
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_lote(campos = {})
|
17
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V60')
|
18
|
+
|
19
|
+
campos[:controle_banco] ||= '745'
|
20
|
+
campos[:servico_operacao] ||= 'C'
|
21
|
+
campos[:controle_lote] = (@arquivo.lotes.length).to_s
|
22
|
+
|
23
|
+
fill campos, lote.header, lote.trailer
|
24
|
+
end
|
25
|
+
|
26
|
+
def <<(campos)
|
27
|
+
lote = @arquivo.lotes.last
|
28
|
+
|
29
|
+
campos[:controle_banco] ||= '745'
|
30
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
31
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
32
|
+
# 000 para inclusao e 999 para exclusao
|
33
|
+
campos[:servico_tipo_movimento] ||= '000'
|
34
|
+
campos[:credito_moeda_tipo] ||= 'BRL'
|
35
|
+
# [018] TED (STR,CIP) ou [700] DOC.
|
36
|
+
campos[:favorecido_camara] = favorecido_camara(lote, campos)
|
37
|
+
|
38
|
+
segmento_a = Cnab240::V60::SegmentoA.new
|
39
|
+
fill campos, segmento_a
|
40
|
+
lote << segmento_a
|
41
|
+
|
42
|
+
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
43
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
44
|
+
campos[:pagamento_data_vencimento] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
45
|
+
|
46
|
+
segmento_b = Cnab240::V60::SegmentoB.new
|
47
|
+
fill campos, segmento_b
|
48
|
+
lote << segmento_b
|
49
|
+
end
|
50
|
+
|
51
|
+
# [018] TED (STR,CIP) ou [700] DOC (COMPE)
|
52
|
+
def favorecido_camara(lote, campos)
|
53
|
+
lote.header[:servico_forma] == '01' ? '000' : (campos[:credito_valor_pagamento].to_i < 749) ? '700' : '018'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,28 +1,22 @@
|
|
1
1
|
module Cnab240
|
2
|
-
class
|
3
|
-
|
2
|
+
class TransferenciaSicoob < Helper
|
4
3
|
def initialize(campos = {})
|
5
4
|
campos[:controle_banco] ||= '756'
|
6
5
|
campos[:banco_nome] ||= 'BANCO COOPERATIVO DO BRASIL S.A.'
|
7
6
|
campos[:empresa_tipo] ||= '2'
|
8
|
-
campos[:arquivo_data_geracao] ||= Time.now.strftime(
|
9
|
-
campos[:arquivo_hora_geracao] ||= Time.now.strftime(
|
7
|
+
campos[:arquivo_data_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%d%m%Y')
|
8
|
+
campos[:arquivo_hora_geracao] ||= (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
|
10
9
|
campos[:arquivo_codigo] ||= '1'
|
11
10
|
|
12
11
|
@arquivo = Cnab240::Arquivo::Arquivo.new('V87')
|
13
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:operacao => :pagamento, :tipo => :remessa, :versao => 'V87')
|
14
12
|
|
15
13
|
fill campos, arquivo.header, arquivo.trailer
|
16
|
-
|
17
|
-
campos[:servico_operacao] ||= 'C'
|
18
|
-
campos[:controle_lote] ||= '0001'
|
19
|
-
|
20
|
-
fill campos, lote.header, lote.trailer
|
21
14
|
end
|
22
15
|
|
23
16
|
def add_lote(campos = {})
|
24
|
-
@arquivo.lotes << lote = Cnab240::Lote.new(:
|
17
|
+
@arquivo.lotes << lote = Cnab240::Lote.new(operacao: :pagamento, tipo: :remessa, versao: 'V87')
|
25
18
|
|
19
|
+
campos[:controle_banco] ||= '756'
|
26
20
|
campos[:servico_operacao] ||= 'C'
|
27
21
|
campos[:controle_lote] = (@arquivo.lotes.length).to_s
|
28
22
|
|
@@ -34,7 +28,7 @@ module Cnab240
|
|
34
28
|
|
35
29
|
campos[:controle_banco] ||= '756'
|
36
30
|
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
37
|
-
campos[:servico_numero_registro] = (lote.segmentos.length+1).to_s
|
31
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
38
32
|
# 000 para inclusao e 999 para exclusao
|
39
33
|
campos[:servico_tipo_movimento] ||= '000'
|
40
34
|
campos[:credito_moeda_tipo] ||= 'BRL'
|
@@ -44,12 +38,11 @@ module Cnab240
|
|
44
38
|
lote << segmento_a
|
45
39
|
|
46
40
|
campos[:controle_lote] = @arquivo.lotes.length.to_s
|
47
|
-
campos[:servico_numero_registro] = (lote.segmentos.length+1).to_s
|
41
|
+
campos[:servico_numero_registro] = (lote.segmentos.length + 1).to_s
|
48
42
|
|
49
43
|
segmento_b = Cnab240::V87::SegmentoB.new
|
50
44
|
fill campos, segmento_b
|
51
45
|
lote << segmento_b
|
52
46
|
end
|
53
|
-
|
54
47
|
end
|
55
|
-
end
|
48
|
+
end
|