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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6384ab9e89d07cd0d51a0fdea4b72d9337eb9e7d
4
- data.tar.gz: dbf7cdb133ff2f98c844a75a7f1c3b7515315c10
3
+ metadata.gz: a722e7c65b7479bb404b83e6c2776ae80aa016d7
4
+ data.tar.gz: de04d218b6c147ac63f85c81f019abb55f5817b8
5
5
  SHA512:
6
- metadata.gz: 6db33d48ef3fe1aadfbb4c9a1abba4372c9185712893455b9f33bf8b585e38fa036ee015ff17de787b231c0550c06e014f0c2971e0db9e596aa7911801d7ebc4
7
- data.tar.gz: 5d15d334a8cb7b6653ea63da7ad0e6aeaa3def6b177b4034f528c864cf8b6917509b16461a200c16c416e2a3fa19a75fce63c48f21ce328b4ee940991820b83f
6
+ metadata.gz: 23d2284c3458658fd324d05de70ab94573880ac4db977b77d03b6938a0187ac513d71f0381cd0996d99228d800e7f646ffbb6ad4c03e81eda6a7cff693c0e06e
7
+ data.tar.gz: b38f1ccf11579bf96bfca9714342808098d3fc93a1198ce7699afd76dade100b50d4f70ed7c94757db16d2eb96c4e0ce2cbb7b3c117c772e9e318fae2ae50ab1
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.3.3
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  rvm:
4
- - '2.3.0'
4
+ - '2.3.3'
5
5
  - '2.2.3'
6
6
  - 'jruby'
7
7
  - 'rbx'
@@ -14,4 +14,4 @@ addons:
14
14
  matrix:
15
15
  allow_failures:
16
16
  - rvm: jruby
17
- - rvm: rbx
17
+ - rvm: rbx
data/Gemfile CHANGED
@@ -10,8 +10,9 @@ group :development do
10
10
  end
11
11
 
12
12
  group :test do
13
- gem 'codeclimate-test-reporter', require: nil
14
13
  gem 'coveralls', require: false
14
+ gem 'simplecov'
15
+ gem 'codeclimate-test-reporter', '~> 1.0.0'
15
16
  gem 'rspec'
16
17
  gem 'rake'
17
18
  gem 'timecop'
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://wwww.boletosimples.com.br)
67
+ [Boleto Simples](https://www.boletosimples.com.br)
68
68
 
69
69
  ### Licença
70
70
 
@@ -148,12 +148,13 @@ module Brcobranca
148
148
  autoload :Pagamento, 'brcobranca/remessa/pagamento'
149
149
 
150
150
  module Cnab400
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'
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 # Sicoob (Bancoob)
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: 11, message: "deve ser menor ou igual a 11 dígitos."
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(11, "0") if valor
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
- # Nosso Numero 'N' | Nosso número sem os dígitos | 08
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' | 03
74
- # Digitos | Dígitos verificadores | 02
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,
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module Brcobranca
4
- VERSION = '6.8.0'
4
+ VERSION = '6.9.0'
5
5
  end
@@ -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: "14542047",
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("00014542047")
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(5)
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("0274 / 00014542047")
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
@@ -2,8 +2,7 @@
2
2
  require 'coveralls'
3
3
  Coveralls.wear!
4
4
 
5
- require 'codeclimate-test-reporter'
6
- CodeClimate::TestReporter.start
5
+ SimpleCov.start
7
6
 
8
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
8
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -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' # identificacao registro
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.8.0
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-10-04 00:00:00.000000000 Z
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.4
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