brcobranca 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +3 -2
- data/Gemfile.lock +13 -9
- data/README.md +5 -1
- data/brcobranca.gemspec +2 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +209 -0
- data/lib/brcobranca/boleto/bradesco.rb +20 -0
- data/lib/brcobranca/boleto/sicoob.rb +80 -0
- data/lib/brcobranca/remessa/base.rb +1 -1
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +7 -2
- data/lib/brcobranca/remessa/cnab240/base.rb +133 -134
- data/lib/brcobranca/remessa/cnab240/caixa.rb +6 -1
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +128 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +5 -5
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +5 -3
- data/lib/brcobranca/remessa/cnab400/citibank.rb +140 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +4 -11
- data/lib/brcobranca/remessa/pagamento.rb +39 -5
- data/lib/brcobranca/retorno/base.rb +1 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +40 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +117 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +136 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -1
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/version.rb +1 -1
- data/lib/brcobranca.rb +19 -5
- data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
- data/spec/arquivos/CNAB400ITAU.RET +54 -0
- data/spec/brcobranca/base_spec.rb +175 -179
- data/spec/brcobranca/{banco_bradesco_spec.rb → boleto/banco_bradesco_spec.rb} +80 -53
- data/spec/brcobranca/{banco_brasil_spec.rb → boleto/banco_brasil_spec.rb} +2 -2
- data/spec/brcobranca/{banco_caixa_spec.rb → boleto/banco_caixa_spec.rb} +1 -1
- data/spec/brcobranca/{banco_hsbc_spec.rb → boleto/banco_hsbc_spec.rb} +2 -2
- data/spec/brcobranca/{banco_itau_spec.rb → boleto/banco_itau_spec.rb} +2 -2
- data/spec/brcobranca/{banco_santander_spec.rb → boleto/banco_santander_spec.rb} +2 -2
- data/spec/brcobranca/boleto/banco_sicoob_spec.rb +132 -0
- data/spec/brcobranca/{banco_sicredi_spec.rb → boleto/banco_sicredi_spec.rb} +2 -2
- data/spec/brcobranca/boletos_em_lote_spec.rb +2 -2
- data/spec/brcobranca/core_ext_spec.rb +198 -199
- data/spec/brcobranca/currency_spec.rb +67 -71
- data/spec/brcobranca/remessa/base_spec.rb +1 -17
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +22 -13
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +28 -27
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +13 -4
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +155 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -17
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +15 -2
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +117 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +15 -10
- data/spec/brcobranca/remessa/pagamento_spec.rb +6 -8
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +35 -0
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +55 -0
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +55 -0
- data/spec/brcobranca/{retorno_cbr643_spec.rb → retorno/retorno_cbr643_spec.rb} +3 -3
- data/spec/brcobranca/{retorno_cnab400_spec.rb → retorno/retorno_cnab400_spec.rb} +3 -3
- data/spec/brcobranca/{retorno_cnab_240_spec.rb → retorno/retorno_cnab_240_spec.rb} +3 -3
- data/spec/brcobranca/rghost_spec.rb +2 -2
- data/spec/brcobranca/util/empresa_spec.rb +35 -0
- data/spec/brcobranca_spec.rb +25 -10
- data/spec/fixtures/remessa/.keep +0 -0
- data/spec/fixtures/remessa/remessa-bancoob.rem +6 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/remessa_helpers.rb +12 -0
- data/spec/{shared_examples → support/shared_examples}/cnab240.rb +17 -15
- data/spec/{shared_examples → support/shared_examples}/cnab400.rb +11 -3
- metadata +72 -26
@@ -29,8 +29,11 @@ module Brcobranca
|
|
29
29
|
attr_accessor :distribuicao_boleto
|
30
30
|
# especie do titulo (verificar o padrao nas classes referentes aos bancos)
|
31
31
|
attr_accessor :especie_titulo
|
32
|
+
# tipo de documento (verificar o padrao nas classes referentes aos bancos)
|
33
|
+
attr_accessor :tipo_documento
|
32
34
|
|
33
|
-
validates_presence_of :
|
35
|
+
validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
|
36
|
+
validates_presence_of :documento_cedente, message: 'não pode estar em branco.'
|
34
37
|
validates_length_of :codigo_carteira, is: 1, message: 'deve ter 1 dígito.'
|
35
38
|
validates_length_of :forma_cadastramento, is: 1, message: 'deve ter 1 dígito.'
|
36
39
|
validates_length_of :emissao_boleto, is: 1, message: 'deve ter 1 dígito.'
|
@@ -38,19 +41,11 @@ module Brcobranca
|
|
38
41
|
|
39
42
|
def initialize(campos = {})
|
40
43
|
campos = { codigo_carteira: '1',
|
41
|
-
|
44
|
+
forma_cadastramento: '1',
|
45
|
+
tipo_documento: ' '}.merge!(campos)
|
42
46
|
super(campos)
|
43
47
|
end
|
44
48
|
|
45
|
-
# Tipo de inscricao do cedente
|
46
|
-
# (pessoa fisica ou juridica)
|
47
|
-
#
|
48
|
-
# @return [String]
|
49
|
-
#
|
50
|
-
def tipo_inscricao
|
51
|
-
documento_cedente.to_s.delete('./-').size <= 11 ? '1' : '2'
|
52
|
-
end
|
53
|
-
|
54
49
|
# Data de geracao do arquivo
|
55
50
|
#
|
56
51
|
# @return [String]
|
@@ -72,27 +67,27 @@ module Brcobranca
|
|
72
67
|
# @return [String]
|
73
68
|
#
|
74
69
|
def monta_header_arquivo
|
75
|
-
header_arquivo = ''
|
76
|
-
header_arquivo << cod_banco
|
77
|
-
header_arquivo << '0000'
|
78
|
-
header_arquivo << '0'
|
79
|
-
header_arquivo << ''.rjust(9, ' ')
|
80
|
-
header_arquivo <<
|
81
|
-
header_arquivo << documento_cedente.to_s.rjust(14, '0')
|
82
|
-
header_arquivo << codigo_convenio
|
83
|
-
header_arquivo << info_conta
|
84
|
-
header_arquivo << empresa_mae.format_size(30)
|
85
|
-
header_arquivo << nome_banco
|
86
|
-
header_arquivo << ''.rjust(10, ' ')
|
87
|
-
header_arquivo << '1'
|
88
|
-
header_arquivo << data_geracao
|
89
|
-
header_arquivo << hora_geracao
|
90
|
-
header_arquivo << sequencial_remessa.to_s.rjust(6, '0')
|
91
|
-
header_arquivo <<
|
92
|
-
header_arquivo << ''.rjust(5, '0')
|
93
|
-
header_arquivo << ''.rjust(20, '0')
|
94
|
-
header_arquivo << ''.rjust(20, '0')
|
95
|
-
header_arquivo << complemento_header
|
70
|
+
header_arquivo = '' # CAMPO TAMANHO
|
71
|
+
header_arquivo << cod_banco # codigo do banco 3
|
72
|
+
header_arquivo << '0000' # lote do servico 4
|
73
|
+
header_arquivo << '0' # tipo de registro 1
|
74
|
+
header_arquivo << ''.rjust(9, ' ') # uso exclusivo FEBRABAN 9
|
75
|
+
header_arquivo << Brcobranca::Util::Empresa.new(documento_cedente, false).tipo # tipo inscricao 1
|
76
|
+
header_arquivo << documento_cedente.to_s.rjust(14, '0') # numero de inscricao 14
|
77
|
+
header_arquivo << codigo_convenio # codigo do convenio no banco 20
|
78
|
+
header_arquivo << info_conta # informacoes da conta 20
|
79
|
+
header_arquivo << empresa_mae.format_size(30) # nome da empresa 30
|
80
|
+
header_arquivo << nome_banco.format_size(30) # nome do banco 30
|
81
|
+
header_arquivo << ''.rjust(10, ' ') # uso exclusivo FEBRABAN 10
|
82
|
+
header_arquivo << '1' # codigo remessa 1
|
83
|
+
header_arquivo << data_geracao # data geracao 8
|
84
|
+
header_arquivo << hora_geracao # hora geracao 6
|
85
|
+
header_arquivo << sequencial_remessa.to_s.rjust(6, '0') # numero seq. arquivo 6
|
86
|
+
header_arquivo << versao_layout_arquivo # num. versao arquivo 3
|
87
|
+
header_arquivo << ''.rjust(5, '0') # densidade gravacao 5
|
88
|
+
header_arquivo << ''.rjust(20, '0') # uso exclusivo 20
|
89
|
+
header_arquivo << ''.rjust(20, '0') # uso exclusivo 20
|
90
|
+
header_arquivo << complemento_header # complemento do arquivo 29
|
96
91
|
header_arquivo.upcase
|
97
92
|
end
|
98
93
|
|
@@ -104,26 +99,26 @@ module Brcobranca
|
|
104
99
|
# @return [String]
|
105
100
|
#
|
106
101
|
def monta_header_lote(nro_lote)
|
107
|
-
header_lote = ''
|
108
|
-
header_lote << cod_banco
|
109
|
-
header_lote << nro_lote.to_s.rjust(4, '0')
|
110
|
-
header_lote << '1'
|
111
|
-
header_lote << 'R'
|
112
|
-
header_lote << '01'
|
113
|
-
header_lote << '
|
114
|
-
header_lote <<
|
115
|
-
header_lote << ' '
|
116
|
-
header_lote <<
|
117
|
-
header_lote << documento_cedente.to_s.rjust(15, '0')
|
118
|
-
header_lote << convenio_lote
|
119
|
-
header_lote << info_conta
|
120
|
-
header_lote << empresa_mae.ljust(30, ' ')
|
121
|
-
header_lote << mensagem_1.to_s.format_size(40)
|
122
|
-
header_lote << mensagem_2.to_s.format_size(40)
|
123
|
-
header_lote << sequencial_remessa.to_s.rjust(8, '0')
|
124
|
-
header_lote << data_geracao
|
125
|
-
header_lote << ''.rjust(8, '0')
|
126
|
-
header_lote << ''.rjust(33, ' ')
|
102
|
+
header_lote = '' # CAMPO TAMANHO
|
103
|
+
header_lote << cod_banco # codigo banco 3
|
104
|
+
header_lote << nro_lote.to_s.rjust(4, '0') # lote servico 4
|
105
|
+
header_lote << '1' # tipo de registro 1
|
106
|
+
header_lote << 'R' # tipo de operacao 1
|
107
|
+
header_lote << '01' # tipo de servico 2
|
108
|
+
header_lote << ' ' # uso exclusivo 2
|
109
|
+
header_lote << versao_layout_lote # num.versao layout lote 3
|
110
|
+
header_lote << ' ' # uso exclusivo 1
|
111
|
+
header_lote << Brcobranca::Util::Empresa.new(documento_cedente, false).tipo # tipo de inscricao 1
|
112
|
+
header_lote << documento_cedente.to_s.rjust(15, '0') # inscricao cedente 15
|
113
|
+
header_lote << convenio_lote # codigo do convenio 20
|
114
|
+
header_lote << info_conta # informacoes conta 20
|
115
|
+
header_lote << empresa_mae.ljust(30, ' ') # nome empresa 30
|
116
|
+
header_lote << mensagem_1.to_s.format_size(40) # 1a mensagem 40
|
117
|
+
header_lote << mensagem_2.to_s.format_size(40) # 2a mensagem 40
|
118
|
+
header_lote << sequencial_remessa.to_s.rjust(8, '0') # numero remessa 8
|
119
|
+
header_lote << data_geracao # data gravacao 8
|
120
|
+
header_lote << ''.rjust(8, '0') # data do credito 8
|
121
|
+
header_lote << ''.rjust(33, ' ') # complemento 33
|
127
122
|
header_lote.upcase
|
128
123
|
end
|
129
124
|
|
@@ -141,46 +136,45 @@ module Brcobranca
|
|
141
136
|
def monta_segmento_p(pagamento, nro_lote, sequencial)
|
142
137
|
# campos com * na frente nao foram implementados
|
143
138
|
# # DESCRICAO TAMANHO
|
144
|
-
segmento_p =
|
145
|
-
segmento_p << nro_lote.to_s.rjust(4, '0')
|
146
|
-
segmento_p << '3'
|
147
|
-
segmento_p << sequencial.to_s.rjust(5, '0')
|
148
|
-
segmento_p << 'P'
|
149
|
-
segmento_p << ' '
|
150
|
-
segmento_p << '01'
|
151
|
-
segmento_p << agencia.to_s.rjust(5, '0')
|
152
|
-
segmento_p << digito_agencia.to_s
|
153
|
-
segmento_p << complemento_p(pagamento)
|
154
|
-
segmento_p << codigo_carteira
|
155
|
-
segmento_p << forma_cadastramento
|
156
|
-
segmento_p <<
|
157
|
-
segmento_p << emissao_boleto
|
158
|
-
segmento_p << distribuicao_boleto
|
159
|
-
segmento_p << pagamento.
|
160
|
-
segmento_p <<
|
161
|
-
segmento_p << pagamento.
|
162
|
-
segmento_p <<
|
163
|
-
segmento_p << ''
|
164
|
-
segmento_p <<
|
165
|
-
segmento_p <<
|
166
|
-
segmento_p <<
|
167
|
-
segmento_p <<
|
168
|
-
segmento_p << '0'
|
169
|
-
segmento_p << ''.rjust(
|
170
|
-
segmento_p <<
|
171
|
-
segmento_p << pagamento.
|
172
|
-
segmento_p << pagamento.
|
173
|
-
segmento_p << pagamento.
|
174
|
-
segmento_p << pagamento.
|
175
|
-
segmento_p <<
|
176
|
-
segmento_p << ''
|
177
|
-
segmento_p << '
|
178
|
-
segmento_p << '
|
179
|
-
segmento_p << '
|
180
|
-
segmento_p << '
|
181
|
-
segmento_p << '
|
182
|
-
segmento_p << ''
|
183
|
-
segmento_p << ' ' # uso exclusivo 1
|
139
|
+
segmento_p = cod_banco # codigo banco 3
|
140
|
+
segmento_p << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
141
|
+
segmento_p << '3' # tipo de registro 1
|
142
|
+
segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
143
|
+
segmento_p << 'P' # cod. segmento 1
|
144
|
+
segmento_p << ' ' # uso exclusivo 1
|
145
|
+
segmento_p << '01' # cod. movimento remessa 2
|
146
|
+
segmento_p << agencia.to_s.rjust(5, '0') # agencia 5
|
147
|
+
segmento_p << digito_agencia.to_s # dv agencia 1
|
148
|
+
segmento_p << complemento_p(pagamento) # informacoes da conta 34
|
149
|
+
segmento_p << codigo_carteira # codigo da carteira 1
|
150
|
+
segmento_p << forma_cadastramento # forma de cadastro do titulo 1
|
151
|
+
segmento_p << tipo_documento # tipo de documento 1
|
152
|
+
segmento_p << emissao_boleto # identificaco emissao 1
|
153
|
+
segmento_p << distribuicao_boleto # indentificacao entrega 1
|
154
|
+
segmento_p << pagamento.numero_documento.to_s.rjust(15, '0') # uso exclusivo 4
|
155
|
+
segmento_p << pagamento.data_vencimento.strftime('%d%m%Y') # data de venc. 8
|
156
|
+
segmento_p << pagamento.formata_valor(15) # valor documento 15
|
157
|
+
segmento_p << ''.rjust(5, '0') # agencia cobradora 5
|
158
|
+
segmento_p << '0' # dv agencia cobradora 1
|
159
|
+
segmento_p << especie_titulo # especie do titulo 2
|
160
|
+
segmento_p << aceite # aceite 1
|
161
|
+
segmento_p << pagamento.data_emissao.strftime('%d%m%Y') # data de emissao titulo 8
|
162
|
+
segmento_p << '0' # cod. do juros 1 *
|
163
|
+
segmento_p << ''.rjust(8, '0') # data juros 8 *
|
164
|
+
segmento_p << ''.rjust(15, '0') # valor juros 15 *
|
165
|
+
segmento_p << pagamento.cod_desconto # cod. do desconto 1
|
166
|
+
segmento_p << pagamento.formata_data_desconto('%d%m%Y') # data desconto 8
|
167
|
+
segmento_p << pagamento.formata_valor_desconto(15) # valor desconto 15
|
168
|
+
segmento_p << pagamento.formata_valor_iof(15) # valor IOF 15
|
169
|
+
segmento_p << pagamento.formata_valor_abatimento(15) # valor abatimento 15
|
170
|
+
segmento_p << ''.rjust(25, ' ') # identificacao titulo empresa 25 *
|
171
|
+
segmento_p << '0' # cod. para protesto 1 *
|
172
|
+
segmento_p << '00' # dias para protesto 2 *
|
173
|
+
segmento_p << '0' # cod. para baixa 1 *
|
174
|
+
segmento_p << '000' # dias para baixa 2 *
|
175
|
+
segmento_p << '09' # cod. da moeda 2
|
176
|
+
segmento_p << ''.rjust(10, '0') # uso exclusivo 10
|
177
|
+
segmento_p << ' ' # uso exclusivo 1
|
184
178
|
segmento_p.upcase
|
185
179
|
end
|
186
180
|
|
@@ -196,29 +190,29 @@ module Brcobranca
|
|
196
190
|
# @return [String]
|
197
191
|
#
|
198
192
|
def monta_segmento_q(pagamento, nro_lote, sequencial)
|
199
|
-
segmento_q = ''
|
200
|
-
segmento_q << cod_banco
|
201
|
-
segmento_q << nro_lote.to_s.rjust(4, '0')
|
202
|
-
segmento_q << '3'
|
203
|
-
segmento_q << sequencial.to_s.rjust(5, '0')
|
204
|
-
segmento_q << 'Q'
|
205
|
-
segmento_q << ' '
|
206
|
-
segmento_q << '01'
|
207
|
-
segmento_q << pagamento.identificacao_sacado(
|
208
|
-
segmento_q << pagamento.documento_sacado.to_s.rjust(15, '0')
|
209
|
-
segmento_q << pagamento.nome_sacado.format_size(40)
|
210
|
-
segmento_q << pagamento.endereco_sacado.format_size(40)
|
211
|
-
segmento_q << pagamento.bairro_sacado.format_size(15)
|
212
|
-
segmento_q << pagamento.cep_sacado[0..4]
|
213
|
-
segmento_q << pagamento.cep_sacado[5..7]
|
214
|
-
segmento_q << pagamento.cidade_sacado.format_size(15)
|
215
|
-
segmento_q << pagamento.uf_sacado
|
216
|
-
segmento_q << pagamento.identificacao_avalista(
|
217
|
-
segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0')
|
218
|
-
segmento_q << pagamento.nome_avalista.format_size(40)
|
219
|
-
segmento_q << ''.rjust(3, '0')
|
220
|
-
segmento_q << ''.rjust(20, ' ')
|
221
|
-
segmento_q << ''.rjust(8, ' ')
|
193
|
+
segmento_q = '' # CAMPO TAMANHO
|
194
|
+
segmento_q << cod_banco # codigo banco 3
|
195
|
+
segmento_q << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
196
|
+
segmento_q << '3' # tipo de registro 1
|
197
|
+
segmento_q << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
198
|
+
segmento_q << 'Q' # cod. segmento 1
|
199
|
+
segmento_q << ' ' # uso exclusivo 1
|
200
|
+
segmento_q << '01' # cod. movimento remessa 2
|
201
|
+
segmento_q << pagamento.identificacao_sacado(false) # tipo insc. sacado 1
|
202
|
+
segmento_q << pagamento.documento_sacado.to_s.rjust(15, '0') # documento sacado 14
|
203
|
+
segmento_q << pagamento.nome_sacado.format_size(40) # nome cliente 40
|
204
|
+
segmento_q << pagamento.endereco_sacado.format_size(40) # endereco cliente 40
|
205
|
+
segmento_q << pagamento.bairro_sacado.format_size(15) # bairro 15
|
206
|
+
segmento_q << pagamento.cep_sacado[0..4] # cep 5
|
207
|
+
segmento_q << pagamento.cep_sacado[5..7] # sufixo cep 3
|
208
|
+
segmento_q << pagamento.cidade_sacado.format_size(15) # cidade 15
|
209
|
+
segmento_q << pagamento.uf_sacado # uf 2
|
210
|
+
segmento_q << pagamento.identificacao_avalista(false) # identificacao do sacador 1
|
211
|
+
segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0') # documento sacador 15
|
212
|
+
segmento_q << pagamento.nome_avalista.format_size(40) # nome avalista 40
|
213
|
+
segmento_q << ''.rjust(3, '0') # cod. banco correspondente 3
|
214
|
+
segmento_q << ''.rjust(20, ' ') # nosso numero banco correspondente 20
|
215
|
+
segmento_q << ''.rjust(8, ' ') # uso exclusivo 8
|
222
216
|
segmento_q.upcase
|
223
217
|
end
|
224
218
|
|
@@ -233,13 +227,13 @@ module Brcobranca
|
|
233
227
|
# @return [String]
|
234
228
|
#
|
235
229
|
def monta_trailer_lote(nro_lote, nro_registros)
|
236
|
-
trailer_lote = ''
|
237
|
-
trailer_lote << cod_banco
|
238
|
-
trailer_lote << nro_lote.to_s.rjust(4, '0')
|
239
|
-
trailer_lote << '5'
|
240
|
-
trailer_lote << ''.rjust(9, ' ')
|
241
|
-
trailer_lote << nro_registros.to_s.rjust(6, '0')
|
242
|
-
trailer_lote << complemento_trailer
|
230
|
+
trailer_lote = '' # CAMPO # TAMANHO
|
231
|
+
trailer_lote << cod_banco # codigo banco 3
|
232
|
+
trailer_lote << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
233
|
+
trailer_lote << '5' # tipo de servico 1
|
234
|
+
trailer_lote << ''.rjust(9, ' ') # uso exclusivo 9
|
235
|
+
trailer_lote << nro_registros.to_s.rjust(6, '0') # qtde de registros lote 6
|
236
|
+
trailer_lote << complemento_trailer # uso exclusivo 217
|
243
237
|
end
|
244
238
|
|
245
239
|
# Monta o registro trailer do arquivo
|
@@ -280,13 +274,12 @@ module Brcobranca
|
|
280
274
|
contador = 1
|
281
275
|
|
282
276
|
lote = [monta_header_lote(nro_lote)]
|
283
|
-
contador += 1
|
284
277
|
|
285
278
|
lote << monta_segmento_p(pagamento, nro_lote, contador)
|
286
279
|
contador += 1
|
287
280
|
|
288
281
|
lote << monta_segmento_q(pagamento, nro_lote, contador)
|
289
|
-
contador +=
|
282
|
+
contador += 2 #header + trailer
|
290
283
|
|
291
284
|
lote << monta_trailer_lote(nro_lote, contador)
|
292
285
|
|
@@ -300,22 +293,20 @@ module Brcobranca
|
|
300
293
|
def gera_arquivo
|
301
294
|
fail Brcobranca::RemessaInvalida.new(self) if self.invalid?
|
302
295
|
|
303
|
-
# contador
|
296
|
+
# contador de do lotes
|
304
297
|
contador = 1
|
305
298
|
|
306
299
|
arquivo = [monta_header_arquivo]
|
307
|
-
contador += 1
|
308
300
|
|
309
|
-
pagamentos.
|
310
|
-
novo_lote = monta_lote(pagamento,
|
301
|
+
pagamentos.each do |pagamento|
|
302
|
+
novo_lote = monta_lote(pagamento, contador)
|
311
303
|
arquivo.push novo_lote
|
312
|
-
novo_lote.each { |_lote| contador += 1 }
|
313
304
|
end
|
314
305
|
|
315
|
-
arquivo << monta_trailer_arquivo(pagamentos.
|
306
|
+
arquivo << monta_trailer_arquivo(contador, (arquivo.size + (pagamentos.size * 4)))
|
316
307
|
|
317
|
-
|
318
|
-
|
308
|
+
remessa = arquivo.join("\n")
|
309
|
+
remessa
|
319
310
|
end
|
320
311
|
|
321
312
|
# Complemento do registro
|
@@ -326,11 +317,19 @@ module Brcobranca
|
|
326
317
|
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
327
318
|
end
|
328
319
|
|
329
|
-
# Numero da versao do layout
|
320
|
+
# Numero da versao do layout do arquivo
|
321
|
+
#
|
322
|
+
# Este metodo deve ser sobrescrevido na classe do banco
|
323
|
+
#
|
324
|
+
def versao_layout_arquivo
|
325
|
+
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
326
|
+
end
|
327
|
+
|
328
|
+
# Numero da versao do layout do lote
|
330
329
|
#
|
331
330
|
# Este metodo deve ser sobrescrevido na classe do banco
|
332
331
|
#
|
333
|
-
def
|
332
|
+
def versao_layout_lote
|
334
333
|
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
335
334
|
end
|
336
335
|
|
@@ -29,6 +29,7 @@ module Brcobranca
|
|
29
29
|
# ‘4’ = Sacado via SMS
|
30
30
|
|
31
31
|
validates_presence_of :versao_aplicativo, :digito_agencia, message: 'não pode estar em branco.'
|
32
|
+
validates_presence_of :convenio, message: 'não pode estar em branco.'
|
32
33
|
validates_length_of :convenio, maximum: 6, message: 'não deve ter mais de 6 dígitos.'
|
33
34
|
validates_length_of :versao_aplicativo, maximum: 4, message: 'não deve ter mais de 4 dígitos.'
|
34
35
|
validates_length_of :digito_agencia, is: 1, message: 'deve ter 1 dígito.'
|
@@ -59,10 +60,14 @@ module Brcobranca
|
|
59
60
|
'CAIXA ECONOMICA FEDERAL'.ljust(30, ' ')
|
60
61
|
end
|
61
62
|
|
62
|
-
def
|
63
|
+
def versao_layout_arquivo
|
63
64
|
'050'
|
64
65
|
end
|
65
66
|
|
67
|
+
def versao_layout_lote
|
68
|
+
'030'
|
69
|
+
end
|
70
|
+
|
66
71
|
def codigo_convenio
|
67
72
|
''.rjust(20, '0')
|
68
73
|
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Brcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab240
|
5
|
+
class Sicoob < Brcobranca::Remessa::Cnab240::Base
|
6
|
+
|
7
|
+
attr_accessor :modalidade_carteira
|
8
|
+
# identificacao da emissao do boleto (attr na classe base)
|
9
|
+
# opcoes:
|
10
|
+
# ‘1’ = Banco Emite
|
11
|
+
# ‘2’ = Cliente Emite
|
12
|
+
#
|
13
|
+
# identificacao da distribuicao do boleto (attr na classe base)
|
14
|
+
# opcoes:
|
15
|
+
# ‘1’ = Banco distribui
|
16
|
+
# ‘2’ = Cliente distribui
|
17
|
+
|
18
|
+
attr_accessor :tipo_formulario
|
19
|
+
# Tipo Formulário - 01 posição (15 a 15):
|
20
|
+
# "1" -auto-copiativo
|
21
|
+
# "3" -auto-envelopável
|
22
|
+
# "4" -A4 sem envelopamento
|
23
|
+
# "6" -A4 sem envelopamento 3 vias
|
24
|
+
|
25
|
+
attr_accessor :parcela
|
26
|
+
# Parcela - 02 posições (11 a 12) - "01" se parcela única
|
27
|
+
|
28
|
+
validates_presence_of :modalidade_carteira, :tipo_formulario, :parcela, message: 'não pode estar em branco.'
|
29
|
+
validates_length_of :conta_corrente, is: 5, message: 'deve ter 5 dígitos.'
|
30
|
+
validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
|
31
|
+
validates_length_of :modalidade_carteira, is: 2, message: 'deve ter 2 dígitos.'
|
32
|
+
|
33
|
+
def initialize(campos = {})
|
34
|
+
campos = { emissao_boleto: '2',
|
35
|
+
distribuicao_boleto: '2',
|
36
|
+
especie_titulo: '02',
|
37
|
+
tipo_formulario: '4',
|
38
|
+
parcela: '01',
|
39
|
+
modalidade_carteira: '01',
|
40
|
+
forma_cadastramento: '0'}.merge!(campos)
|
41
|
+
super(campos)
|
42
|
+
end
|
43
|
+
|
44
|
+
def cod_banco
|
45
|
+
'756'
|
46
|
+
end
|
47
|
+
|
48
|
+
def nome_banco
|
49
|
+
'SICOOB'.ljust(30, ' ')
|
50
|
+
end
|
51
|
+
|
52
|
+
def versao_layout_arquivo
|
53
|
+
'081'
|
54
|
+
end
|
55
|
+
|
56
|
+
def versao_layout_lote
|
57
|
+
'040'
|
58
|
+
end
|
59
|
+
|
60
|
+
def digito_agencia
|
61
|
+
# utilizando a agencia com 4 digitos
|
62
|
+
# para calcular o digito
|
63
|
+
agencia.modulo11(mapeamento: { 10 => 'X' }).to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
def digito_conta
|
67
|
+
# utilizando a conta corrente com 5 digitos
|
68
|
+
# para calcular o digito
|
69
|
+
conta_corrente.modulo11(mapeamento: { 10 => 'X' }).to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
def codigo_convenio
|
73
|
+
# CAMPO TAMANHO
|
74
|
+
# num. convenio 20 BRANCOS
|
75
|
+
''.rjust(20, ' ')
|
76
|
+
end
|
77
|
+
|
78
|
+
alias_method :convenio_lote, :codigo_convenio
|
79
|
+
|
80
|
+
def info_conta
|
81
|
+
# CAMPO TAMANHO
|
82
|
+
# agencia 5
|
83
|
+
# digito agencia 1
|
84
|
+
# conta corrente 12
|
85
|
+
# digito conta 1
|
86
|
+
# digito agencia/conta 1
|
87
|
+
"#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{digito_conta} "
|
88
|
+
end
|
89
|
+
|
90
|
+
def complemento_header
|
91
|
+
''.rjust(29, ' ')
|
92
|
+
end
|
93
|
+
|
94
|
+
def complemento_trailer
|
95
|
+
''.rjust(217, ' ')
|
96
|
+
end
|
97
|
+
|
98
|
+
def complemento_p(pagamento)
|
99
|
+
# CAMPO TAMANHO
|
100
|
+
# conta corrente 12
|
101
|
+
# digito conta 1
|
102
|
+
# digito agencia/conta 1
|
103
|
+
# ident. titulo no banco 20
|
104
|
+
"#{conta_corrente.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
|
105
|
+
end
|
106
|
+
|
107
|
+
# Retorna o nosso numero
|
108
|
+
#
|
109
|
+
# @return [String]
|
110
|
+
#
|
111
|
+
# Nosso Número:
|
112
|
+
# - Se emissão a cargo do Cedente (vide planilha "Capa" deste arquivo):
|
113
|
+
# NumTitulo - 10 posições (1 a 10)
|
114
|
+
# Parcela - 02 posições (11 a 12) - "01" se parcela única
|
115
|
+
# Modalidade - 02 posições (13 a 14) - vide planilha "Capa" deste arquivo
|
116
|
+
# Tipo Formulário - 01 posição (15 a 15):
|
117
|
+
# "1" -auto-copiativo
|
118
|
+
# "3" -auto-envelopável
|
119
|
+
# "4" -A4 sem envelopamento
|
120
|
+
# "6" -A4 sem envelopamento 3 vias
|
121
|
+
# Em branco - 05 posições (16 a 20)
|
122
|
+
def formata_nosso_numero(nosso_numero)
|
123
|
+
"#{nosso_numero.to_s.rjust(10, '0')}#{parcela}#{modalidade_carteira}#{tipo_formulario} "
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -3,8 +3,8 @@ module Brcobranca
|
|
3
3
|
module Remessa
|
4
4
|
module Cnab400
|
5
5
|
class Base < Brcobranca::Remessa::Base
|
6
|
-
|
7
|
-
|
6
|
+
require "unidecoder"
|
7
|
+
validates_presence_of :carteira, message: 'não pode estar em branco.'
|
8
8
|
|
9
9
|
# Data da geracao do arquivo seguindo o padrao DDMMAA
|
10
10
|
#
|
@@ -20,7 +20,7 @@ module Brcobranca
|
|
20
20
|
#
|
21
21
|
def monta_header
|
22
22
|
# CAMPO TAMANHO VALOR
|
23
|
-
# tipo do registro [1]
|
23
|
+
# tipo do registro [1] 0
|
24
24
|
# operacao [1] 1
|
25
25
|
# literal remessa [7] REMESSA
|
26
26
|
# cod. servico [15] COBRANCA
|
@@ -31,7 +31,7 @@ module Brcobranca
|
|
31
31
|
# data geracao [6] formato DDMMAA
|
32
32
|
# complemento registro [294]
|
33
33
|
# num. sequencial [6] 000001
|
34
|
-
"
|
34
|
+
"01REMESSA01COBRANCA #{info_conta}#{empresa_mae.to_s.ljust(30, ' ')}#{cod_banco}#{nome_banco}#{data_geracao}#{complemento}000001"
|
35
35
|
end
|
36
36
|
|
37
37
|
# Trailer do arquivo remessa
|
@@ -72,7 +72,7 @@ module Brcobranca
|
|
72
72
|
end
|
73
73
|
ret << monta_trailer(contador + 1)
|
74
74
|
retorno = ret.join("\n")
|
75
|
-
retorno
|
75
|
+
retorno.to_ascii.upcase
|
76
76
|
end
|
77
77
|
|
78
78
|
# Informacoes referentes a conta do cedente
|
@@ -6,6 +6,7 @@ module Brcobranca
|
|
6
6
|
# codigo da empresa (informado pelo Bradesco no cadastramento)
|
7
7
|
attr_accessor :codigo_empresa
|
8
8
|
|
9
|
+
validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
|
9
10
|
validates_presence_of :codigo_empresa, :sequencial_remessa,
|
10
11
|
:digito_conta, message: 'não pode estar em branco.'
|
11
12
|
validates_length_of :codigo_empresa, maximum: 20, message: 'deve ser menor ou igual a 20 dígitos.'
|
@@ -13,6 +14,7 @@ module Brcobranca
|
|
13
14
|
validates_length_of :conta_corrente, maximum: 7, message: 'deve ter 7 dígitos.'
|
14
15
|
validates_length_of :sequencial_remessa, maximum: 7, message: 'deve ter 7 dígitos.'
|
15
16
|
validates_length_of :carteira, maximum: 2, message: 'deve ter no máximo 2 dígitos.'
|
17
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
16
18
|
|
17
19
|
def agencia=(valor)
|
18
20
|
@agencia = valor.to_s.rjust(5, '0') if valor
|
@@ -83,17 +85,17 @@ module Brcobranca
|
|
83
85
|
detalhe << ''.rjust(1, '0') # digito da conta corrente (op) X[01] 020 a 020
|
84
86
|
detalhe << identificacao_empresa # identficacao da empresa X[17] 021 a 037
|
85
87
|
detalhe << ''.rjust(25, ' ') # num. controle X[25] 038 a 062
|
86
|
-
detalhe <<
|
88
|
+
detalhe << ''.rjust(3, '0') # codigo do banco (debito automatico apenas) 9[03] 063 a 065
|
87
89
|
detalhe << ''.rjust(1, '0') # campo da multa 9[01] 066 a 066 *
|
88
90
|
detalhe << ''.rjust(4, '0') # percentual multa 9[04] 067 a 070 *
|
89
91
|
detalhe << pagamento.nosso_numero.to_s.rjust(11, '0') # identificacao do titulo (nosso numero) 9[11] 071 a 081
|
90
|
-
detalhe << digito_nosso_numero(pagamento.nosso_numero)
|
92
|
+
detalhe << digito_nosso_numero(pagamento.nosso_numero).to_s # digito de conferencia do nosso numero (dv) X[01] 082 a 082
|
91
93
|
detalhe << ''.rjust(10, '0') # desconto por dia 9[10] 083 a 092
|
92
94
|
detalhe << '2' # condicao emissao boleto (2 = cliente) 9[01] 093 a 093
|
93
95
|
detalhe << 'N' # emite boleto para debito X[01] 094 a 094
|
94
96
|
detalhe << ''.rjust(10, ' ') # operacao no banco (brancos) X[10] 095 a 104
|
95
97
|
detalhe << ' ' # indicador rateio X[01] 105 a 105
|
96
|
-
detalhe << '
|
98
|
+
detalhe << '2' # endereco para aviso debito (op 2 = ignora) 9[01] 106 a 106
|
97
99
|
detalhe << ''.rjust(2, ' ') # brancos X[02] 107 a 108
|
98
100
|
detalhe << '01' # identif. da ocorrencia 9[02] 109 a 110
|
99
101
|
detalhe << pagamento.nosso_numero.to_s.rjust(10, ' ') # numero do documento alfanum. X[10] 111 a 120
|