brcobranca 6.8.0 → 6.9.0
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/.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
|
[](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
|