brcobranca 6.8.0 → 6.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +2 -2
- data/Gemfile +2 -1
- data/README.md +2 -2
- data/lib/brcobranca.rb +7 -6
- data/lib/brcobranca/boleto/banestes.rb +14 -10
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +156 -0
- data/lib/brcobranca/remessa/pagamento.rb +2 -0
- data/lib/brcobranca/version.rb +1 -1
- data/spec/brcobranca/boleto/banestes_spec.rb +26 -4
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +186 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +4 -0
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
- data/spec/spec_helper.rb +1 -2
- data/spec/support/shared_examples/cnab400.rb +13 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a722e7c65b7479bb404b83e6c2776ae80aa016d7
|
4
|
+
data.tar.gz: de04d218b6c147ac63f85c81f019abb55f5817b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23d2284c3458658fd324d05de70ab94573880ac4db977b77d03b6938a0187ac513d71f0381cd0996d99228d800e7f646ffbb6ad4c03e81eda6a7cff693c0e06e
|
7
|
+
data.tar.gz: b38f1ccf11579bf96bfca9714342808098d3fc93a1198ce7699afd76dade100b50d4f70ed7c94757db16d2eb96c4e0ce2cbb7b3c117c772e9e318fae2ae50ab1
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.3
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros.
|
|
24
24
|
| Bancos | Carteiras | Documentações |
|
25
25
|
|-----------------------|-------------------|----------------|
|
26
26
|
| 001 - Banco do Brasil | Todas as carteiras presentes na documentação | [pdf](http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc5175Bloqueto.pdf) |
|
27
|
-
| 021 - Banestes | Todas as carteiras presentes na documentação | |
|
27
|
+
| 021 - Banestes | Todas as carteiras presentes na documentação | |
|
28
28
|
| 033 - Santander | Todas as carteiras presentes na documentação - [Ronaldo Araujo](https://github.com/ronaldoaraujo) | [pdf](http://177.69.143.161:81/Treinamento/SisMoura/Documentação%20Boleto%20Remessa/Documentacao_SANTANDER/Layout%20de%20Cobrança%20-%20Código%20de%20Barras%20Santander%20Setembro%202012%20v%202%203.pdf) |
|
29
29
|
| 104 - Caixa | Todas as carteiras presentes na documentação - [Túlio Ornelas](https://github.com/tulios) | [pdf](http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF) |
|
30
30
|
| 237 - Bradesco | Todas as carteiras presentes na documentação | [pdf](http://www.bradesco.com.br/portal/PDF/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo/cobranca/4008-524-0121-08-layout-cobranca-versao-portugues.pdf) |
|
@@ -64,7 +64,7 @@ Caso queira verificar(ou adicionar) alguma documentação, acesse [nosso wiki](h
|
|
64
64
|
|
65
65
|
[![RubyMine](http://www.jetbrains.com/ruby/features/ruby_banners/ruby1/ruby468x60_rubin.gif)](http://www.jetbrains.com/ruby/features?utm_source=RubyMineUser&utm_medium=Banner&utm_campaign=RubyMine)
|
66
66
|
|
67
|
-
[Boleto Simples](https://
|
67
|
+
[Boleto Simples](https://www.boletosimples.com.br)
|
68
68
|
|
69
69
|
### Licença
|
70
70
|
|
data/lib/brcobranca.rb
CHANGED
@@ -148,12 +148,13 @@ module Brcobranca
|
|
148
148
|
autoload :Pagamento, 'brcobranca/remessa/pagamento'
|
149
149
|
|
150
150
|
module Cnab400
|
151
|
-
autoload :Base,
|
152
|
-
autoload :Bradesco,
|
153
|
-
autoload :Itau,
|
154
|
-
autoload :Citibank,
|
155
|
-
autoload :Santander,
|
156
|
-
autoload :Sicoob,
|
151
|
+
autoload :Base, 'brcobranca/remessa/cnab400/base'
|
152
|
+
autoload :Bradesco, 'brcobranca/remessa/cnab400/bradesco'
|
153
|
+
autoload :Itau, 'brcobranca/remessa/cnab400/itau'
|
154
|
+
autoload :Citibank, 'brcobranca/remessa/cnab400/citibank'
|
155
|
+
autoload :Santander, 'brcobranca/remessa/cnab400/santander'
|
156
|
+
autoload :Sicoob, 'brcobranca/remessa/cnab400/sicoob'
|
157
|
+
autoload :BancoBrasil, 'brcobranca/remessa/cnab400/banco_brasil'
|
157
158
|
end
|
158
159
|
|
159
160
|
module Cnab240
|
@@ -1,12 +1,17 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
module Brcobranca
|
3
3
|
module Boleto
|
4
|
-
class Banestes < Base #
|
4
|
+
class Banestes < Base # Banestes
|
5
|
+
|
6
|
+
# <b>REQUERIDO</b>: digito verificador da conta corrente
|
7
|
+
attr_accessor :digito_conta_corrente
|
8
|
+
|
5
9
|
validates_length_of :agencia, maximum: 4, message: "deve ser menor ou igual a 4 dígitos."
|
6
|
-
validates_length_of :conta_corrente, maximum:
|
10
|
+
validates_length_of :conta_corrente, maximum: 10, message: "deve ser menor ou igual a 10 dígitos."
|
7
11
|
validates_length_of :numero_documento, maximum: 8, message: "deve ser menor ou igual a 8 dígitos."
|
8
12
|
validates_length_of :variacao, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
|
9
13
|
validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
14
|
+
validates_length_of :digito_conta_corrente, is: 1, message: 'deve ser igual a 1 dígitos.'
|
10
15
|
|
11
16
|
def initialize(campos = {})
|
12
17
|
campos = { carteira: "11", variacao: '2' }.merge!(campos)
|
@@ -38,7 +43,7 @@ module Brcobranca
|
|
38
43
|
#
|
39
44
|
# @return [String] 7 caracteres numéricos.
|
40
45
|
def conta_corrente=(valor)
|
41
|
-
@conta_corrente = valor.to_s.rjust(
|
46
|
+
@conta_corrente = valor.to_s.rjust(10, "0") if valor
|
42
47
|
end
|
43
48
|
|
44
49
|
# Número documento
|
@@ -63,17 +68,16 @@ module Brcobranca
|
|
63
68
|
end
|
64
69
|
|
65
70
|
def agencia_conta_boleto
|
66
|
-
"#{agencia} / #{conta_corrente}"
|
71
|
+
"#{agencia.to_i} / #{conta_corrente.to_i}#{digito_conta_corrente}"
|
67
72
|
end
|
68
73
|
|
69
|
-
|
70
|
-
#
|
71
|
-
# Conta corrente 'C' | No da conta corrente | 11
|
74
|
+
# Nosso Numero 'N' | Nosso número sem os dígitos | 08
|
75
|
+
# Conta corrente 'C' | No da conta corrente com DV | 11
|
72
76
|
# Tipo Cobranca 'R' | (2) Sem registro - (3) Caucionada - (4, 5, 6 e 7) Com registro | 01
|
73
|
-
# Codigo do banco cedente | Código do BANESTES '021'
|
74
|
-
# Digitos | Dígitos verificadores
|
77
|
+
# Codigo do banco cedente | Código do BANESTES '021' | 03
|
78
|
+
# Digitos | Dígitos verificadores | 02
|
75
79
|
def codigo_barras_segunda_parte
|
76
|
-
campo_livre = "#{numero_documento}#{conta_corrente}#{variacao}021"
|
80
|
+
campo_livre = "#{numero_documento}#{conta_corrente}#{digito_conta_corrente}#{variacao}021"
|
77
81
|
campo_livre + campo_livre.duplo_digito
|
78
82
|
end
|
79
83
|
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Brcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class BancoBrasil < Brcobranca::Remessa::Cnab400::Base
|
6
|
+
|
7
|
+
#
|
8
|
+
# Documentacao para a geracao do arquivo pode ser encontrada em:
|
9
|
+
# http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc2627CBR641Pos7.pdf
|
10
|
+
#
|
11
|
+
|
12
|
+
# Convenio
|
13
|
+
attr_accessor :convenio
|
14
|
+
# Variacao da carteira
|
15
|
+
attr_accessor :variacao_carteira
|
16
|
+
# OPCIONAL Convenio lider
|
17
|
+
attr_accessor :convenio_lider
|
18
|
+
# Tipo de cobranca
|
19
|
+
#
|
20
|
+
# a) Carteiras 11 ou 17:
|
21
|
+
# - 04DSC: Solicitação de registro na Modalidade Descontada
|
22
|
+
# - 08VDR: Solicitação de registro na Modalidade BBVendor
|
23
|
+
# - 02VIN: solicitação de registro na Modalidade Vinculada
|
24
|
+
# - BRANCOS: Registro na Modalidade Simples
|
25
|
+
# b) Carteiras 12, 31, 51:
|
26
|
+
# - Brancos
|
27
|
+
#
|
28
|
+
attr_accessor :tipo_cobranca
|
29
|
+
|
30
|
+
validates_presence_of :agencia, :conta_corrente, :convenio, :variacao_carteira, :documento_cedente, message: 'não pode estar em branco.'
|
31
|
+
|
32
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser igual a 4 digítos.'
|
33
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
34
|
+
validates_length_of :variacao_carteira, is: 3, message: 'deve ser igual a 3 digítos.'
|
35
|
+
validates_length_of :carteira, is: 2, message: 'deve ser igual a 2 digítos.'
|
36
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
37
|
+
|
38
|
+
# Conta corrente
|
39
|
+
#
|
40
|
+
# Obs: formata para o padrao com 8 caracteres
|
41
|
+
#
|
42
|
+
def conta_corrente=(valor)
|
43
|
+
@conta_corrente = valor.to_s.rjust(8, '0') if valor
|
44
|
+
end
|
45
|
+
|
46
|
+
# Retorna dígito verificador da agência
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
def agencia_dv
|
51
|
+
agencia.modulo11(mapeamento: { 10 => 'X' })
|
52
|
+
end
|
53
|
+
|
54
|
+
# Dígito verificador da conta corrente
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
#
|
58
|
+
def conta_corrente_dv
|
59
|
+
conta_corrente.modulo11(mapeamento: { 10 => 'X' })
|
60
|
+
end
|
61
|
+
|
62
|
+
# Codigo do banco
|
63
|
+
#
|
64
|
+
def cod_banco
|
65
|
+
'001'
|
66
|
+
end
|
67
|
+
|
68
|
+
# Nome por extenso do banco
|
69
|
+
#
|
70
|
+
def nome_banco
|
71
|
+
'BANCODOBRASIL'.ljust(15, ' ')
|
72
|
+
end
|
73
|
+
|
74
|
+
# Informacoes da conta corrente do cedente
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
#
|
78
|
+
def info_conta
|
79
|
+
# CAMPO TAMANHO
|
80
|
+
# agencia 4
|
81
|
+
# digito agencia 1
|
82
|
+
# conta corrente 8
|
83
|
+
# digito da conta 1
|
84
|
+
# numero convenio 6
|
85
|
+
cc = conta_corrente.to_s.rjust(8, '0')
|
86
|
+
"#{agencia}#{agencia_dv}#{cc}#{conta_corrente_dv}#{''.rjust(6, '0')}"
|
87
|
+
end
|
88
|
+
|
89
|
+
def complemento
|
90
|
+
ret = ''
|
91
|
+
ret << sequencial_remessa.to_s.rjust(7, '0') # sequencial da remessa (nao controlado pelo banco) 9[007]
|
92
|
+
ret << ''.ljust(22, ' ') # complemento (brancos) X[022]
|
93
|
+
ret << convenio_lider.to_s.rjust(7, '0') # numero do convenio lider (opcional) 9[007]
|
94
|
+
ret << ''.ljust(258, ' ') # complemento (brancos) X[258]
|
95
|
+
end
|
96
|
+
|
97
|
+
def monta_detalhe(pagamento, sequencial)
|
98
|
+
fail Brcobranca::RemessaInvalida.new(pagamento) if pagamento.invalid?
|
99
|
+
|
100
|
+
detalhe = '7' # identificacao do registro 9[1] 001 a 001
|
101
|
+
detalhe << Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02] 002 a 003
|
102
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14] 004 a 017
|
103
|
+
detalhe << agencia # agencia 9[04] 018 a 021
|
104
|
+
detalhe << agencia_dv.to_s # digito agencia X[01] 022 a 022
|
105
|
+
detalhe << conta_corrente.to_s.rjust(8, '0') # conta corrente 9[08] 023 a 030
|
106
|
+
detalhe << conta_corrente_dv.to_s # digito conta corrente X[01] 031 a 031
|
107
|
+
detalhe << convenio.to_s.rjust(7, '0') # convenio de cobranca da empresa 9[07] 032 a 038
|
108
|
+
detalhe << ''.ljust(25, ' ') # controle do participante X[25] 039 a 063
|
109
|
+
detalhe << convenio.to_s.rjust(7, '0') # convenio (montagem nosso numero) 9[07] 064 a 070
|
110
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(10, '0') # nosso numero 9[10] 071 a 080
|
111
|
+
detalhe << '00' # numero da prestacao (zeros) 9[02] 081 a 082
|
112
|
+
detalhe << '00' # grupo de valor (zeros) 9[02] 083 a 084
|
113
|
+
detalhe << ' ' # brancos X[03] 085 a 087
|
114
|
+
detalhe << ' ' # mensagem ou sacador/avalista X[01] 088 a 088
|
115
|
+
detalhe << ' ' # prefixo do titulo (brancos) X[03] 089 a 091
|
116
|
+
detalhe << variacao_carteira # variacao da carteira 9[03] 092 a 094
|
117
|
+
detalhe << '0' # conta caucao 9[01] 095 a 095
|
118
|
+
detalhe << '000000' # numero do bordero (zeros) 9[06] 096 a 101
|
119
|
+
detalhe << tipo_cobranca.to_s.ljust(5, ' ') # tipo de cobranca 9[05] 102 a 106
|
120
|
+
detalhe << carteira # carteira 9[02] 107 a 108
|
121
|
+
detalhe << '01' # comando (01 = registro de titulo) 9[02] 109 a 110
|
122
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(10, '0') # numero atribuido pela empresa X[10] 111 a 120
|
123
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data de vencimento 9[06] 121 a 126
|
124
|
+
detalhe << pagamento.formata_valor # valor do titulo 9[13] 127 a 139
|
125
|
+
detalhe << cod_banco # numero do banco 9[03] 140 a 142
|
126
|
+
detalhe << '0000' # prefixo da agencia cobradora 9[04] 143 a 146
|
127
|
+
detalhe << ' ' # digito da agencia cobradora X[01] 147 a 147
|
128
|
+
detalhe << pagamento.especie_titulo # especie do titulo 9[02] 148 a 149
|
129
|
+
detalhe << aceite # aceite do titulo X[01] 150 a 150
|
130
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06] 151 a 156
|
131
|
+
detalhe << pagamento.cod_primeira_instrucao.to_s.rjust(2, '0') # cod. primeira instrucao 9[02] 157 a 158
|
132
|
+
detalhe << pagamento.cod_segunda_instrucao.to_s.rjust(2, '0') # cod. segunda instrucao 9[02] 159 a 160
|
133
|
+
detalhe << pagamento.formata_valor_mora # valor de mora por dia 9[13] 161 a 173
|
134
|
+
detalhe << pagamento.formata_data_desconto # data para o desconto 9[06] 174 a 179
|
135
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13] 180 a 192
|
136
|
+
detalhe << pagamento.formata_valor_iof # valor do IOF 9[13] 193 a 205
|
137
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13] 206 a 218
|
138
|
+
detalhe << pagamento.identificacao_sacado # tipo pagador 9[02] 219 a 220
|
139
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14] 221 a 234
|
140
|
+
detalhe << pagamento.nome_sacado.format_size(37) # nome do pagador 9[37] 235 a 271
|
141
|
+
detalhe << ' ' # complemento (brancos) X[03] 272 a 274
|
142
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[52] 275 a 314
|
143
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12] 315 a 326
|
144
|
+
detalhe << pagamento.cep_sacado.gsub(/[.-]/i, '') # CEP do pagador X[08] 327 a 334
|
145
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15] 335 a 349
|
146
|
+
detalhe << pagamento.uf_sacado # UF do pagador X[02] 350 a 351
|
147
|
+
detalhe << ''.ljust(40, ' ') # informacoes avalista X[40] 352 a 393 TODO implementar avalista
|
148
|
+
detalhe << pagamento.dias_protesto.to_s.ljust(2, ' ') # numero de dias para protesto X[02] 392 a 393
|
149
|
+
detalhe << ' ' # complemento (brancos) X[01] 394 a 394
|
150
|
+
detalhe << sequencial.to_s.rjust(6, '0') # sequencial do registro 9[06] 395 a 400
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -69,6 +69,8 @@ module Brcobranca
|
|
69
69
|
attr_accessor :data_multa
|
70
70
|
# <b>OPCIONAL</b>: Número da Parcela
|
71
71
|
attr_accessor :parcela
|
72
|
+
# <b>OPCIONAL</b>: Dias para o protesto
|
73
|
+
attr_accessor :dias_protesto
|
72
74
|
|
73
75
|
validates_presence_of :nosso_numero, :data_vencimento, :valor,
|
74
76
|
:documento_sacado, :nome_sacado, :endereco_sacado,
|
data/lib/brcobranca/version.rb
CHANGED
@@ -11,7 +11,8 @@ RSpec.describe Brcobranca::Boleto::Banestes do #:nodoc:[all]
|
|
11
11
|
sacado: "Claudio Pozzebom",
|
12
12
|
sacado_documento: "12345678900",
|
13
13
|
agencia: "274",
|
14
|
-
conta_corrente: "
|
14
|
+
conta_corrente: "1454204",
|
15
|
+
digito_conta_corrente: "7",
|
15
16
|
numero_documento: "69240101"
|
16
17
|
} }
|
17
18
|
|
@@ -48,7 +49,8 @@ RSpec.describe Brcobranca::Boleto::Banestes do #:nodoc:[all]
|
|
48
49
|
expect(boleto_novo.documento_cedente).to eql("12345678912")
|
49
50
|
expect(boleto_novo.sacado).to eql("Claudio Pozzebom")
|
50
51
|
expect(boleto_novo.sacado_documento).to eql("12345678900")
|
51
|
-
expect(boleto_novo.conta_corrente).to eql("
|
52
|
+
expect(boleto_novo.conta_corrente).to eql("0001454204")
|
53
|
+
expect(boleto_novo.digito_conta_corrente).to eql("7")
|
52
54
|
expect(boleto_novo.agencia).to eql("0274")
|
53
55
|
expect(boleto_novo.numero_documento).to eql("69240101")
|
54
56
|
expect(boleto_novo.nosso_numero_boleto).to eql("69240101-68")
|
@@ -60,10 +62,30 @@ RSpec.describe Brcobranca::Boleto::Banestes do #:nodoc:[all]
|
|
60
62
|
it "Não permitir gerar boleto com atributos inválido" do
|
61
63
|
boleto_novo = described_class.new
|
62
64
|
expect { boleto_novo.codigo_barras }.to raise_error(Brcobranca::BoletoInvalido)
|
63
|
-
expect(boleto_novo.errors.count).to eql(
|
65
|
+
expect(boleto_novo.errors.count).to eql(6)
|
64
66
|
end
|
65
67
|
|
66
68
|
it "Montar nosso_numero_boleto" do
|
69
|
+
valid_attributes[:numero_documento] = "00000040"
|
70
|
+
boleto_novo = described_class.new(valid_attributes)
|
71
|
+
expect(boleto_novo.nosso_numero_boleto).to eql("00000040-06")
|
72
|
+
|
73
|
+
valid_attributes[:numero_documento] = "00000068"
|
74
|
+
boleto_novo = described_class.new(valid_attributes)
|
75
|
+
expect(boleto_novo.nosso_numero_boleto).to eql("00000068-07")
|
76
|
+
|
77
|
+
valid_attributes[:numero_documento] = "00000006"
|
78
|
+
boleto_novo = described_class.new(valid_attributes)
|
79
|
+
expect(boleto_novo.nosso_numero_boleto).to eql("00000006-04")
|
80
|
+
|
81
|
+
valid_attributes[:numero_documento] = "00000281"
|
82
|
+
boleto_novo = described_class.new(valid_attributes)
|
83
|
+
expect(boleto_novo.nosso_numero_boleto).to eql("00000281-00")
|
84
|
+
|
85
|
+
valid_attributes[:numero_documento] = "00000023"
|
86
|
+
boleto_novo = described_class.new(valid_attributes)
|
87
|
+
expect(boleto_novo.nosso_numero_boleto).to eql("00000023-05")
|
88
|
+
|
67
89
|
valid_attributes[:numero_documento] = "00000337"
|
68
90
|
boleto_novo = described_class.new(valid_attributes)
|
69
91
|
expect(boleto_novo.nosso_numero_boleto).to eql("00000337-90")
|
@@ -96,7 +118,7 @@ RSpec.describe Brcobranca::Boleto::Banestes do #:nodoc:[all]
|
|
96
118
|
it "Montar agencia_conta_boleto" do
|
97
119
|
boleto_novo = described_class.new(valid_attributes)
|
98
120
|
|
99
|
-
expect(boleto_novo.agencia_conta_boleto).to eql("
|
121
|
+
expect(boleto_novo.agencia_conta_boleto).to eql("274 / 14542047")
|
100
122
|
end
|
101
123
|
|
102
124
|
describe 'Busca logotipo do banco' do
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Brcobranca::Remessa::Cnab400::BancoBrasil do
|
5
|
+
let(:pagamento) do
|
6
|
+
Brcobranca::Remessa::Pagamento.new(valor: 199.9,
|
7
|
+
data_vencimento: Date.current,
|
8
|
+
nosso_numero: 123,
|
9
|
+
documento_sacado: '12345678901',
|
10
|
+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
|
11
|
+
endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
|
12
|
+
bairro_sacado: 'São josé dos quatro apostolos magros',
|
13
|
+
cep_sacado: '12345678',
|
14
|
+
cidade_sacado: 'Santa rita de cássia maria da silva',
|
15
|
+
uf_sacado: 'SP')
|
16
|
+
end
|
17
|
+
let(:params) do
|
18
|
+
{ carteira: '12',
|
19
|
+
agencia: '1234',
|
20
|
+
variacao_carteira: '123',
|
21
|
+
convenio: '1234567',
|
22
|
+
convenio_lider: '7654321',
|
23
|
+
conta_corrente: '1234',
|
24
|
+
empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
|
25
|
+
documento_cedente: '12345678910',
|
26
|
+
sequencial_remessa: '1',
|
27
|
+
pagamentos: [pagamento],
|
28
|
+
tipo_cobranca: '04DSC' }
|
29
|
+
end
|
30
|
+
let(:banco_brasil) { subject.class.new(params) }
|
31
|
+
|
32
|
+
context 'validacoes dos campos' do
|
33
|
+
context '@agencia' do
|
34
|
+
it 'deve ser invalido se nao possuir uma agencia' do
|
35
|
+
object = subject.class.new(params.merge!(agencia: nil))
|
36
|
+
expect(object.invalid?).to be true
|
37
|
+
expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
|
41
|
+
banco_brasil.agencia = '12345'
|
42
|
+
expect(banco_brasil.invalid?).to be true
|
43
|
+
expect(banco_brasil.errors.full_messages).to include('Agencia deve ser igual a 4 digítos.')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context '@conta_corrente' do
|
48
|
+
it 'deve ser invalido se nao possuir uma conta corrente' do
|
49
|
+
object = subject.class.new(params.merge!(conta_corrente: nil))
|
50
|
+
expect(object.invalid?).to be true
|
51
|
+
expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
|
55
|
+
banco_brasil.conta_corrente = '123456789'
|
56
|
+
expect(banco_brasil.invalid?).to be true
|
57
|
+
expect(banco_brasil.errors.full_messages).to include('Conta corrente deve ser menor ou igual a 8 dígitos.')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context '@carteira' do
|
62
|
+
it 'deve ser invalido se nao possuir uma carteira' do
|
63
|
+
object = subject.class.new(params.merge!(carteira: nil))
|
64
|
+
expect(object.invalid?).to be true
|
65
|
+
expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'deve ser invalido se a carteira nao tiver 2 digitos' do
|
69
|
+
banco_brasil.carteira = '123'
|
70
|
+
expect(banco_brasil.invalid?).to be true
|
71
|
+
expect(banco_brasil.errors.full_messages).to include('Carteira deve ser igual a 2 digítos.')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context '@convenio' do
|
76
|
+
it 'deve ser invalido se nao possuir o convenio' do
|
77
|
+
object = subject.class.new(params.merge!(convenio: nil))
|
78
|
+
expect(object.invalid?).to be true
|
79
|
+
expect(object.errors.full_messages).to include('Convenio não pode estar em branco.')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context '@variacao_carteira' do
|
84
|
+
it 'deve ser invalido se nao possuir a variacao da carteira' do
|
85
|
+
object = subject.class.new(params.merge!(variacao_carteira: nil))
|
86
|
+
expect(object.invalid?).to be true
|
87
|
+
expect(object.errors.full_messages).to include('Variacao carteira não pode estar em branco.')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'deve ser invalido se a carteira nao tiver 3 digitos' do
|
91
|
+
banco_brasil.variacao_carteira = '1234'
|
92
|
+
expect(banco_brasil.invalid?).to be true
|
93
|
+
expect(banco_brasil.errors.full_messages).to include('Variacao carteira deve ser igual a 3 digítos.')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context '@documento_cedente' do
|
98
|
+
it 'deve ser invalido se nao possuir o documento cedente' do
|
99
|
+
object = subject.class.new(params.merge!(documento_cedente: nil))
|
100
|
+
expect(object.invalid?).to be true
|
101
|
+
expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
|
105
|
+
banco_brasil.documento_cedente = '123'
|
106
|
+
expect(banco_brasil.invalid?).to be true
|
107
|
+
expect(banco_brasil.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'formatacoes dos valores' do
|
113
|
+
it 'cod_banco deve ser 001' do
|
114
|
+
expect(banco_brasil.cod_banco).to eq '001'
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'nome_banco deve ser BANCODOBRASIL com 15 posicoes' do
|
118
|
+
nome_banco = banco_brasil.nome_banco
|
119
|
+
expect(nome_banco.size).to eq 15
|
120
|
+
expect(nome_banco.strip).to eq 'BANCODOBRASIL'
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'complemento deve retornar 294 posicoes com as suas informacoes' do
|
124
|
+
complemento = banco_brasil.complemento
|
125
|
+
expect(complemento.size).to eq 294
|
126
|
+
expect(complemento[0..6]).to eq '0000001' # sequencial de remessa
|
127
|
+
expect(complemento[29..35]).to eq '7654321' # numero do convenio lider
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
|
131
|
+
info_conta = banco_brasil.info_conta
|
132
|
+
expect(info_conta.size).to eq 20
|
133
|
+
expect(info_conta[0..3]).to eq '1234' # num. da agencia
|
134
|
+
expect(info_conta[4]).to eq banco_brasil.agencia_dv.to_s # digito da agencia
|
135
|
+
expect(info_conta[5..12]).to eq '00001234' # num. da conta corrente
|
136
|
+
expect(info_conta[13]).to eq banco_brasil.conta_corrente_dv.to_s # digito da conta corrente
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
context 'monta remessa' do
|
142
|
+
it_behaves_like 'cnab400'
|
143
|
+
|
144
|
+
context 'header' do
|
145
|
+
it 'informacoes devem estar posicionadas corretamente no header' do
|
146
|
+
header = banco_brasil.monta_header
|
147
|
+
expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
|
148
|
+
expect(header[2..8]).to eq 'REMESSA' # literal da operacao
|
149
|
+
expect(header[26..45]).to eq banco_brasil.info_conta # informacoes da conta
|
150
|
+
expect(header[46..75]).to eq 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA'[0..29] # nome da empresa cedente
|
151
|
+
expect(header[76..78]).to eq '001' # codigo do banco
|
152
|
+
expect(header[79..93]).to eq 'BANCODOBRASIL'.ljust(15, ' ') # nome do banco
|
153
|
+
expect(header[100..393]).to eq banco_brasil.complemento # complemento
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context 'detalhe' do
|
158
|
+
it 'informacoes devem estar posicionadas corretamente no detalhe' do
|
159
|
+
detalhe = banco_brasil.monta_detalhe pagamento, 1
|
160
|
+
expect(detalhe[3..16]).to eq '00012345678910' # documento do cedente
|
161
|
+
expect(detalhe[17..20]).to eq '1234' # agencia
|
162
|
+
expect(detalhe[21]).to eq banco_brasil.agencia_dv.to_s # digito da agencia
|
163
|
+
expect(detalhe[22..29]).to eq '00001234' # num. da conta corrente
|
164
|
+
expect(detalhe[30]).to eq banco_brasil.conta_corrente_dv.to_s # digito da conta corrente
|
165
|
+
expect(detalhe[31..37]).to eq '1234567' # convenio da empresa
|
166
|
+
expect(detalhe[70..79]).to eq '0000000123' # nosso numero
|
167
|
+
expect(detalhe[91..93]).to eq '123' # variacao da carteira
|
168
|
+
expect(detalhe[101..105]).to eq '04DSC' # tipo de cobranca
|
169
|
+
expect(detalhe[106..107]).to eq '12' # carteira
|
170
|
+
expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
|
171
|
+
expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
|
172
|
+
expect(detalhe[156..157]).to eq '00' # primeira instrucao
|
173
|
+
expect(detalhe[158..159]).to eq '00' # segunda instrucao
|
174
|
+
expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
|
175
|
+
expect(detalhe[234..270]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA J' # nome do pagador
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'arquivo' do
|
180
|
+
before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
|
181
|
+
after { Timecop.return }
|
182
|
+
|
183
|
+
it { expect(banco_brasil.gera_arquivo).to eq(read_remessa('remessa-banco-brasil-cnab400.rem', banco_brasil.gera_arquivo)) }
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -117,6 +117,10 @@ RSpec.describe Brcobranca::Remessa::Pagamento do
|
|
117
117
|
it 'valor do abatimento padrao deve ser zero' do
|
118
118
|
expect(pagamento.valor_abatimento).to eq 0.0
|
119
119
|
end
|
120
|
+
|
121
|
+
it 'numero da parcela deve ser 01' do
|
122
|
+
expect(pagamento.parcela).to eq '01'
|
123
|
+
end
|
120
124
|
end
|
121
125
|
|
122
126
|
context 'formatacoes dos valores' do
|
@@ -0,0 +1,3 @@
|
|
1
|
+
01REMESSA01COBRANCA 12343000012343000000SOCIEDADE BRASILEIRA DE ZOOLOG001BANCODOBRASIL 1407150000001 7654321 000001
|
2
|
+
70100012345678910123430000123431234567 123456700000001230000 123000000004DSC1201000000012314071500000000199900010000 01N140715000000000000000000000000000000000000000000000000000000000000000100012345678901PABLO DIEGO JOSE FRANCISCO DE PAULA J RUA RIO GRANDE DO SUL SAO PAULO MINAS CASAO JOSE DOS12345678SANTA RITA DE CSP 000002
|
3
|
+
9 000003
|
data/spec/spec_helper.rb
CHANGED
@@ -50,6 +50,18 @@ shared_examples_for 'cnab400' do
|
|
50
50
|
documento_cedente: '12345678910',
|
51
51
|
convenio: '123456789',
|
52
52
|
pagamentos: [pagamento] }
|
53
|
+
elsif subject.class == Brcobranca::Remessa::Cnab400::BancoBrasil
|
54
|
+
{ carteira: '12',
|
55
|
+
agencia: '1234',
|
56
|
+
variacao_carteira: '123',
|
57
|
+
convenio: '1234567',
|
58
|
+
convenio_lider: '7654321',
|
59
|
+
conta_corrente: '1234',
|
60
|
+
empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
|
61
|
+
documento_cedente: '12345678910',
|
62
|
+
sequencial_remessa: '1',
|
63
|
+
pagamentos: [pagamento]
|
64
|
+
}
|
53
65
|
else
|
54
66
|
{ carteira: '123',
|
55
67
|
agencia: '4327',
|
@@ -81,7 +93,7 @@ shared_examples_for 'cnab400' do
|
|
81
93
|
|
82
94
|
it 'informacoes devem estar posicionadas corretamente no trailer' do
|
83
95
|
trailer = objeto.monta_trailer 3
|
84
|
-
expect(trailer[0]).to eq '9'
|
96
|
+
expect(trailer[0]).to eq '9' # identificacao registro
|
85
97
|
expect(trailer[394..399]).to eq '000003' # numero sequencial do registro
|
86
98
|
end
|
87
99
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brcobranca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kivanio Barbosa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rghost
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/brcobranca/remessa/cnab240/base.rb
|
168
168
|
- lib/brcobranca/remessa/cnab240/caixa.rb
|
169
169
|
- lib/brcobranca/remessa/cnab240/sicoob.rb
|
170
|
+
- lib/brcobranca/remessa/cnab400/banco_brasil.rb
|
170
171
|
- lib/brcobranca/remessa/cnab400/base.rb
|
171
172
|
- lib/brcobranca/remessa/cnab400/bradesco.rb
|
172
173
|
- lib/brcobranca/remessa/cnab400/citibank.rb
|
@@ -218,6 +219,7 @@ files:
|
|
218
219
|
- spec/brcobranca/remessa/cnab240/base_spec.rb
|
219
220
|
- spec/brcobranca/remessa/cnab240/caixa_spec.rb
|
220
221
|
- spec/brcobranca/remessa/cnab240/sicoob_spec.rb
|
222
|
+
- spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb
|
221
223
|
- spec/brcobranca/remessa/cnab400/base_spec.rb
|
222
224
|
- spec/brcobranca/remessa/cnab400/bradesco_spec.rb
|
223
225
|
- spec/brcobranca/remessa/cnab400/citibank_spec.rb
|
@@ -238,6 +240,7 @@ files:
|
|
238
240
|
- spec/brcobranca/util/empresa_spec.rb
|
239
241
|
- spec/brcobranca_spec.rb
|
240
242
|
- spec/fixtures/remessa/.keep
|
243
|
+
- spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem
|
241
244
|
- spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem
|
242
245
|
- spec/fixtures/remessa/remessa-bancoob-cnab240.rem
|
243
246
|
- spec/fixtures/remessa/remessa-bradesco-cnab400.rem
|
@@ -273,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
276
|
requirements:
|
274
277
|
- GhostScript > 9.0, para gear PDF e código de Barras
|
275
278
|
rubyforge_project:
|
276
|
-
rubygems_version: 2.6.
|
279
|
+
rubygems_version: 2.6.8
|
277
280
|
signing_key:
|
278
281
|
specification_version: 4
|
279
282
|
summary: Gem que permite trabalhar com bloquetos de cobranca para bancos brasileiros.
|
@@ -309,6 +312,7 @@ test_files:
|
|
309
312
|
- spec/brcobranca/remessa/cnab240/base_spec.rb
|
310
313
|
- spec/brcobranca/remessa/cnab240/caixa_spec.rb
|
311
314
|
- spec/brcobranca/remessa/cnab240/sicoob_spec.rb
|
315
|
+
- spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb
|
312
316
|
- spec/brcobranca/remessa/cnab400/base_spec.rb
|
313
317
|
- spec/brcobranca/remessa/cnab400/bradesco_spec.rb
|
314
318
|
- spec/brcobranca/remessa/cnab400/citibank_spec.rb
|
@@ -329,6 +333,7 @@ test_files:
|
|
329
333
|
- spec/brcobranca/util/empresa_spec.rb
|
330
334
|
- spec/brcobranca_spec.rb
|
331
335
|
- spec/fixtures/remessa/.keep
|
336
|
+
- spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem
|
332
337
|
- spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem
|
333
338
|
- spec/fixtures/remessa/remessa-bancoob-cnab240.rem
|
334
339
|
- spec/fixtures/remessa/remessa-bradesco-cnab400.rem
|