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 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