brcobranca 7.2.2 → 7.3.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: be39b6c9af13f25fd769bf4921f6d6880eadcab0
4
- data.tar.gz: 2cfed9e162541fb050f7ee766e775ac0a80f7c49
3
+ metadata.gz: e60af310245b6b49e8a67c848f646fb639365ac7
4
+ data.tar.gz: d9d725c1e54701ff10aeb9488ffc18e3e1f80fed
5
5
  SHA512:
6
- metadata.gz: fde86b9312080dfa6ff9e6ebd14e44f4104f2c5e0e1b1a2646830e773b7c4f5a73d321202496ad27c3188931c96803301d5184ae003b23ad3bfbe73fe808cecb
7
- data.tar.gz: 0b0ef5ff3ba0a288c33daddf0eec11828abf8cb90caff7ab64ff5a6623fa57b01ac865a2a6eaa4c6dc6adfc6b94611b28007be7542aa0d52822d90a5c99720e1
6
+ metadata.gz: c51a8c61fc8044564172b0592e788c90710d8477009f91f0169013c139fb511be621b252c9684da814234d83e12c0ea76cb91ae3430b3c56c09fb2e4f0db8dcc
7
+ data.tar.gz: ce9984679c2a1647ca76aca89fc3a3ad817e30d1b504a1eaa16d48fafcec90199c060112d37f992f298e66b98f4cb55cffaf2f2aee21a2b4c6796ac251999916
data/.travis.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  rvm:
4
+ - '2.4.1'
4
5
  - '2.3.3'
5
6
  - '2.2.3'
6
7
  - '1.9.3'
data/lib/brcobranca.rb CHANGED
@@ -146,8 +146,8 @@ module Brcobranca
146
146
 
147
147
  # Módulos para as classes que geram os arquivos remessa
148
148
  module Remessa
149
- autoload :Base, 'brcobranca/remessa/base'
150
- autoload :Pagamento, 'brcobranca/remessa/pagamento'
149
+ autoload :Base, 'brcobranca/remessa/base'
150
+ autoload :Pagamento, 'brcobranca/remessa/pagamento'
151
151
 
152
152
  module Cnab400
153
153
  autoload :Base, 'brcobranca/remessa/cnab400/base'
@@ -157,6 +157,7 @@ module Brcobranca
157
157
  autoload :Santander, 'brcobranca/remessa/cnab400/santander'
158
158
  autoload :Sicoob, 'brcobranca/remessa/cnab400/sicoob'
159
159
  autoload :BancoBrasil, 'brcobranca/remessa/cnab400/banco_brasil'
160
+ autoload :BancoNordeste, 'brcobranca/remessa/cnab400/banco_nordeste'
160
161
  end
161
162
 
162
163
  module Cnab240
@@ -3,11 +3,15 @@
3
3
  module Brcobranca
4
4
  module Boleto
5
5
  class Banrisul < Base # Banrisul
6
+ # <b>REQUERIDO</b>: digito verificador do convenio
7
+ attr_accessor :digito_convenio
8
+
6
9
  validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
7
10
  validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
8
11
  validates_length_of :numero_documento, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
9
12
  validates_length_of :carteira, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
10
13
  validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
14
+ validates_length_of :digito_convenio, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
11
15
 
12
16
  def initialize(campos = {})
13
17
  campos = { carteira: '2' }.merge!(campos)
@@ -49,12 +53,18 @@ module Brcobranca
49
53
  @numero_documento = valor.to_s.rjust(8, '0') if valor
50
54
  end
51
55
 
52
- # Número do convênio/contrato do cliente junto ao banco.
56
+ # Número do convênio do cliente junto ao banco.
53
57
  # @return [String] 7 caracteres numéricos.
54
58
  def convenio=(valor)
55
59
  @convenio = valor.to_s.rjust(7, '0') if valor
56
60
  end
57
61
 
62
+ # Digito do convênio do cliente junto ao banco.
63
+ # @return [String] 2 caracteres numéricos.
64
+ def digito_convenio=(valor)
65
+ @digito_convenio = valor.to_s.rjust(2, '0') if valor
66
+ end
67
+
58
68
  # Nosso número para exibição no boleto.
59
69
  #
60
70
  # @return [String] caracteres numéricos.
@@ -63,7 +73,7 @@ module Brcobranca
63
73
  end
64
74
 
65
75
  def agencia_conta_boleto
66
- "#{agencia} / #{convenio}"
76
+ "#{agencia} / #{convenio[0..5]}.#{convenio[6]}.#{digito_convenio}"
67
77
  end
68
78
 
69
79
  # Posições 20 a 20 - Produto:
@@ -52,19 +52,13 @@ module Brcobranca
52
52
  # @return [Integer]
53
53
  # @example
54
54
  # 1 #=> 1
55
- # 11 (1+1) #=> 2
56
- # 13 (1+3) #=> 4
55
+ # 11 (-9 ) #=> 2
56
+ # 13 (-9 ) #=> 4
57
+ # 18 (-9 ) #=> 9
57
58
  def soma_digitos
58
- total = case to_i
59
- when (0..9)
60
- self
61
- else
62
- numero = to_s
63
- total = 0
64
- 0.upto(numero.size - 1) { |digito| total += numero[digito, 1].to_i }
65
- total
66
- end
67
- total.to_i
59
+ total = self.to_i
60
+ total = total - 9 if total > 9
61
+ total
68
62
  end
69
63
 
70
64
  # Faz a multiplicação de um número pelos fatores passados como parâmetro.
@@ -97,7 +91,7 @@ module Brcobranca
97
91
  raise ArgumentError, 'Número inválido' unless is_number?
98
92
 
99
93
  digito_1 = modulo10
100
- digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) { |total| (total % 11) }
94
+ digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) { |total| (total < 11 ? total : total % 11) }
101
95
 
102
96
  while digito_2 == 1
103
97
  digito_1 = if digito_1 == 9
@@ -106,7 +100,7 @@ module Brcobranca
106
100
  digito_1 + 1
107
101
  end
108
102
 
109
- digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7])
103
+ digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) { |total| (total < 11 ? total : total % 11) }
110
104
  end
111
105
 
112
106
  digito_2 = 11 - digito_2 if digito_2 != 0
@@ -0,0 +1,162 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Brcobranca
3
+ module Remessa
4
+ module Cnab400
5
+ class BancoNordeste < Brcobranca::Remessa::Cnab400::Base
6
+ # documento do cedente
7
+ attr_accessor :documento_cedente
8
+ # 1 - Emitido pelo banco
9
+ # 2 - Emitido pelo cliente
10
+ attr_accessor :emissao_boleto
11
+
12
+ validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
13
+ validates_presence_of :documento_cedente, :digito_conta, message: 'não pode estar em branco.'
14
+ validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
15
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ter 7 dígitos.'
16
+ validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
17
+ validates_length_of :carteira, maximum: 2, message: 'deve ter 2 dígitos.'
18
+ validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
19
+ validates_inclusion_of :carteira, in: %w(21 41 51), message: 'não é válida.'
20
+
21
+ # Nova instancia do Banco do Nordeste
22
+ def initialize(campos = {})
23
+ campos = {
24
+ aceite: 'N',
25
+ emissao_boleto: '2'
26
+ }.merge!(campos)
27
+
28
+ super(campos)
29
+ end
30
+
31
+ def agencia=(valor)
32
+ @agencia = valor.to_s.rjust(4, '0') if valor
33
+ end
34
+
35
+ def conta_corrente=(valor)
36
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
37
+ end
38
+
39
+ def carteira=(valor)
40
+ @carteira = valor.to_s.rjust(2, '0') if valor
41
+ end
42
+
43
+ def cod_banco
44
+ '004'
45
+ end
46
+
47
+ def nome_banco
48
+ 'B.DO NORDESTE'.ljust(15, ' ')
49
+ end
50
+
51
+ # Informacoes da conta corrente do cedente
52
+ #
53
+ # @return [String]
54
+ #
55
+ def info_conta
56
+ # CAMPO TAMANHO
57
+ # agencia 4
58
+ # zeros 2
59
+ # conta corrente 7
60
+ # digito da conta 1
61
+ # complemento 6
62
+ "#{agencia}00#{conta_corrente}#{digito_conta}#{''.rjust(6, ' ')}"
63
+ end
64
+
65
+ # Complemento do header
66
+ # (no caso do Banco do Nordeste, sao apenas espacos em branco)
67
+ #
68
+ # @return [String]
69
+ #
70
+ def complemento
71
+ ''.rjust(294, ' ')
72
+ end
73
+
74
+ # Codigo da carteira de acordo com a documentacao do Banco do Nordeste
75
+ #
76
+ # @return [String]
77
+ #
78
+ def codigo_carteira
79
+ return "I" if carteira.to_s == "51"
80
+
81
+ carteiras = {
82
+ "1" => { "21" => "1", "41" => "2" }, # 1 - Emitido pelo banco
83
+ "2" => { "21" => "4", "41" => "5" } # 2 - Emitido pelo cliente
84
+ }
85
+
86
+ carteiras[emissao_boleto.to_s][carteira.to_s]
87
+ end
88
+
89
+ # Dígito verificador do nosso número.
90
+ #
91
+ # @param nosso_numero
92
+ #
93
+ # @return [String] 1 caracteres numéricos.
94
+ def digito_nosso_numero(nosso_numero)
95
+ nosso_numero.to_s.rjust(7, '0').modulo11(
96
+ multiplicador: (2..8).to_a,
97
+ mapeamento: { 1 => 0, 10 => 0, 11 => 0 }
98
+ ) { |total| 11 - (total % 11) }
99
+ end
100
+
101
+ # Detalhe do arquivo
102
+ #
103
+ # @param pagamento [PagamentoCnab400]
104
+ # objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
105
+ # @param sequencial
106
+ # num. sequencial do registro no arquivo
107
+ #
108
+ # @return [String]
109
+ #
110
+ def monta_detalhe(pagamento, sequencial)
111
+ fail Brcobranca::RemessaInvalida.new(pagamento) if pagamento.invalid?
112
+
113
+ detalhe = '1' # identificacao transacao 9[01]
114
+ detalhe << ''.rjust(16, ' ') # filler [16]
115
+ detalhe << agencia # agencia 9[04]
116
+ detalhe << ''.rjust(2, '0') # complemento de registro (zeros) 9[02]
117
+ detalhe << conta_corrente # conta corrente 9[07]
118
+ detalhe << digito_conta # dac 9[01]
119
+ detalhe << pagamento.percentual_multa.to_s.delete('.').rjust(2, '0') # taxa - multa [02]
120
+ detalhe << ''.rjust(4, ' ') # filler [04]
121
+ detalhe << ''.rjust(25, ' ') # identificacao do tit. na empresa X[25]
122
+ detalhe << pagamento.nosso_numero.to_s.rjust(7, '0') # nosso numero 9[07]
123
+ detalhe << digito_nosso_numero(pagamento.nosso_numero).to_s # dv nosso numero 9[01]
124
+ detalhe << ''.rjust(10, '0') # numero do contrato [10]
125
+ detalhe << ''.rjust(6, '0') # data do segundo pagamento [06]
126
+ detalhe << ''.rjust(13, '0') # valor do segundo pagamento [13]
127
+ detalhe << ''.rjust(8, ' ') # filler [08]
128
+ detalhe << codigo_carteira # codigo da carteira X[01]
129
+ detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
130
+ detalhe << pagamento.numero_documento.to_s.rjust(10, '0') # numero do documento X[10]
131
+ detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
132
+ detalhe << pagamento.formata_valor # valor do documento 9[13]
133
+ detalhe << cod_banco # codigo banco 9[03]
134
+ detalhe << ''.rjust(4, '0') # agencia cobradora - deixar zero 9[05]
135
+ detalhe << ' ' # filler [01]
136
+ detalhe << '01' # especie do titulo X[02]
137
+ detalhe << aceite # aceite (A/N) X[01]
138
+ detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
139
+ detalhe << ''.rjust(4, '0') # instrucao - deixar zero [04]
140
+ detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
141
+ detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
142
+ detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
143
+ detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
144
+ detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
145
+ detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
146
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
147
+ detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
148
+ detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
149
+ detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
150
+ detalhe << pagamento.cep_sacado # cep do pagador 9[08]
151
+ detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
152
+ detalhe << pagamento.uf_sacado # uf do pagador X[02]
153
+ detalhe << pagamento.nome_avalista.format_size(40) # nome do sacador/avalista X[30]
154
+ detalhe << "99" # prazo para protesto [02]
155
+ detalhe << "0" # código da moeda X[01]
156
+ detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
157
+ detalhe
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
@@ -2,5 +2,5 @@
2
2
  #
3
3
 
4
4
  module Brcobranca
5
- VERSION = '7.2.2'
5
+ VERSION = '7.3.0'
6
6
  end
@@ -15,7 +15,8 @@ RSpec.describe Brcobranca::Boleto::Banrisul do #:nodoc:[all]
15
15
  agencia: '1102',
16
16
  conta_corrente: '1454204',
17
17
  numero_documento: '22832563',
18
- convenio: '9000150'
18
+ convenio: '9000150',
19
+ digito_convenio: '46'
19
20
  }
20
21
  end
21
22
 
@@ -125,9 +126,14 @@ RSpec.describe Brcobranca::Boleto::Banrisul do #:nodoc:[all]
125
126
  end
126
127
 
127
128
  it 'Montar agencia_conta_boleto' do
129
+ valid_attributes[:convenio] = '9000150'
128
130
  boleto_novo = described_class.new(valid_attributes)
131
+ expect(boleto_novo.agencia_conta_boleto).to eql('1102 / 900015.0.46')
129
132
 
130
- expect(boleto_novo.agencia_conta_boleto).to eql('1102 / 9000150')
133
+ valid_attributes[:convenio] = '8505610'
134
+ valid_attributes[:digito_convenio] = '99'
135
+ boleto_novo = described_class.new(valid_attributes)
136
+ expect(boleto_novo.agencia_conta_boleto).to eql('1102 / 850561.0.99')
131
137
  end
132
138
 
133
139
  describe 'Busca logotipo do banco' do
@@ -127,8 +127,20 @@ RSpec.describe Brcobranca::Boleto::Sicredi do
127
127
 
128
128
  it 'Montar nosso_numero_boleto' do
129
129
  boleto_novo = described_class.new(valid_attributes)
130
- expect(boleto_novo.nosso_numero_boleto).to eql('16/208879-3')
131
130
  expect(boleto_novo.nosso_numero_dv).to be(3)
131
+ expect(boleto_novo.nosso_numero_boleto).to eql('16/208879-3')
132
+
133
+ valid_attributes[:posto] = '02'
134
+ valid_attributes[:byte_idt] = '2'
135
+ valid_attributes[:numero_documento] = '00003'
136
+ valid_attributes[:agencia] = '0165'
137
+ valid_attributes[:convenio] = '00623'
138
+ valid_attributes[:data_vencimento] = Date.parse('2007-08-26')
139
+ valid_attributes[:data_documento] = Date.parse('2007-08-26')
140
+
141
+ boleto_novo = described_class.new(valid_attributes)
142
+ expect(boleto_novo.nosso_numero_dv).to be(1)
143
+ expect(boleto_novo.nosso_numero_boleto).to eql('07/200003-1')
132
144
  end
133
145
 
134
146
  it 'Montar agencia_conta_boleto' do
@@ -162,13 +162,13 @@ RSpec.describe Brcobranca::Calculo do
162
162
  end
163
163
 
164
164
  it 'Calcula a soma dos digitos de um número com mais de 1 algarismo' do
165
- expect(111.soma_digitos).to be(3)
165
+ expect(11.soma_digitos).to be(2)
166
166
  expect(8.soma_digitos).to be(8)
167
- expect('111'.soma_digitos).to be(3)
167
+ expect('11'.soma_digitos).to be(2)
168
168
  expect('8'.soma_digitos).to be(8)
169
169
  expect(0.soma_digitos).to be(0)
170
- expect(111.soma_digitos).to be_a_kind_of(Integer)
171
- expect('111'.soma_digitos).to be_a_kind_of(Integer)
170
+ expect(11.soma_digitos).to be_a_kind_of(Integer)
171
+ expect('11'.soma_digitos).to be_a_kind_of(Integer)
172
172
  end
173
173
 
174
174
  describe '#duplo_digito' do
@@ -180,5 +180,6 @@ RSpec.describe Brcobranca::Calculo do
180
180
  it { expect(19_669.duplo_digito).to eql('28') }
181
181
  it { expect('00000032000272012924021'.duplo_digito).to eql('79') }
182
182
  it { expect('00000033000272012924021'.duplo_digito).to eql('65') }
183
+ it { expect('9194'.duplo_digito).to eql('38') }
183
184
  end
184
185
  end
@@ -0,0 +1,185 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::BancoNordeste do
5
+ let(:pagamento) do
6
+ Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
+ data_vencimento: Date.today,
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
+ {
19
+ carteira: '21',
20
+ agencia: '1234',
21
+ conta_corrente: '1234567',
22
+ digito_conta: '1',
23
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
24
+ documento_cedente: '12345678910',
25
+ pagamentos: [pagamento]
26
+ }
27
+ end
28
+ let(:banco_nordeste) { subject.class.new(params) }
29
+
30
+ context 'validacoes dos campos' do
31
+ context '@agencia' do
32
+ it 'deve ser invalido se nao possuir uma agencia' do
33
+ object = subject.class.new(params.merge!(agencia: nil))
34
+ expect(object.invalid?).to be true
35
+ expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
36
+ end
37
+
38
+ it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
39
+ banco_nordeste.agencia = '12345'
40
+ expect(banco_nordeste.invalid?).to be true
41
+ expect(banco_nordeste.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
42
+ end
43
+ end
44
+
45
+ context '@digito_conta' do
46
+ it 'deve ser invalido se nao possuir um digito da conta corrente' do
47
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
48
+ expect(objeto.invalid?).to be true
49
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
50
+ end
51
+
52
+ it 'deve ser inválido se o dígito da conta tiver mais de 1 dígito' do
53
+ banco_nordeste.digito_conta = '12'
54
+ expect(banco_nordeste.invalid?).to be true
55
+ expect(banco_nordeste.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
56
+ end
57
+ end
58
+
59
+ context '@conta_corrente' do
60
+ it 'deve ser invalido se nao possuir uma conta corrente' do
61
+ object = subject.class.new(params.merge!(conta_corrente: nil))
62
+ expect(object.invalid?).to be true
63
+ expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
64
+ end
65
+
66
+ it 'deve ser invalido se a conta corrente tiver mais de 7 digitos' do
67
+ banco_nordeste.conta_corrente = '12345678'
68
+ expect(banco_nordeste.invalid?).to be true
69
+ expect(banco_nordeste.errors.full_messages).to include('Conta corrente deve ter 7 dígitos.')
70
+ end
71
+ end
72
+
73
+ context '@carteira' do
74
+ it 'deve ser inválido se não possuir uma carteira' do
75
+ object = subject.class.new(params.merge!(carteira: nil))
76
+ expect(object.invalid?).to be true
77
+ expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
78
+ end
79
+
80
+ it 'deve ser inválido se a carteira tiver 2 dígitos' do
81
+ banco_nordeste.carteira = '123'
82
+ expect(banco_nordeste.invalid?).to be true
83
+ expect(banco_nordeste.errors.full_messages).to include('Carteira deve ter 2 dígitos.')
84
+ end
85
+ end
86
+
87
+ context '@documento_cedente' do
88
+ it 'deve ser inválido se não possuir o documento cedente' do
89
+ object = subject.class.new(params.merge!(documento_cedente: nil))
90
+ expect(object.invalid?).to be true
91
+ expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
92
+ end
93
+
94
+ it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
95
+ banco_nordeste.documento_cedente = '123'
96
+ expect(banco_nordeste.invalid?).to be true
97
+ expect(banco_nordeste.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'formatacoes dos valores' do
103
+ it 'cod_banco deve ser 004' do
104
+ expect(banco_nordeste.cod_banco).to eq '004'
105
+ end
106
+
107
+ it 'nome_banco deve ser B.DO NORDESTE com 15 posicoes' do
108
+ nome_banco = banco_nordeste.nome_banco
109
+ expect(nome_banco.size).to eq 15
110
+ expect(nome_banco.strip).to eq 'B.DO NORDESTE'
111
+ end
112
+
113
+ it 'complemento deve retornar 294 caracteres' do
114
+ expect(banco_nordeste.complemento.size).to eq 294
115
+ end
116
+
117
+ it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
118
+ info_conta = banco_nordeste.info_conta
119
+ expect(info_conta.size).to eq 20
120
+ expect(info_conta[0..3]).to eq '1234' # num. da agencia
121
+ expect(info_conta[6..12]).to eq '1234567' # num. da conta
122
+ expect(info_conta[13]).to eq '1' # num. do digito
123
+ end
124
+
125
+ it 'deve retornar o codigo da carteira de acordo com o tipo de emissão' do
126
+ banco_nordeste.carteira = 21
127
+ banco_nordeste.emissao_boleto = 1
128
+ expect(banco_nordeste.codigo_carteira).to eq '1'
129
+
130
+ banco_nordeste.carteira = 41
131
+ banco_nordeste.emissao_boleto = 1
132
+ expect(banco_nordeste.codigo_carteira).to eq '2'
133
+
134
+ banco_nordeste.carteira = 21
135
+ banco_nordeste.emissao_boleto = 2
136
+ expect(banco_nordeste.codigo_carteira).to eq '4'
137
+
138
+ banco_nordeste.carteira = 41
139
+ banco_nordeste.emissao_boleto = 2
140
+ expect(banco_nordeste.codigo_carteira).to eq '5'
141
+
142
+ banco_nordeste.carteira = 51
143
+ expect(banco_nordeste.codigo_carteira).to eq 'I'
144
+
145
+ banco_nordeste.carteira = 99
146
+ expect(banco_nordeste.invalid?).to be true
147
+ expect(banco_nordeste.errors.full_messages).to include('Carteira não é válida.')
148
+ end
149
+ end
150
+
151
+ context 'monta remessa' do
152
+ it_behaves_like 'cnab400'
153
+
154
+ context 'header' do
155
+ it 'informacoes devem estar posicionadas corretamente no header' do
156
+ header = banco_nordeste.monta_header
157
+ expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
158
+ expect(header[2..8]).to eq 'REMESSA' # literal da operacao
159
+ expect(header[26..45]).to eq banco_nordeste.info_conta # informacoes da conta
160
+ expect(header[76..78]).to eq '004' # codigo do banco
161
+ end
162
+ end
163
+
164
+ context 'detalhe' do
165
+ it 'informacoes devem estar posicionadas corretamente no detalhe' do
166
+ detalhe = banco_nordeste.monta_detalhe pagamento, 1
167
+ expect(detalhe[62..68]).to eq '0000123' # nosso numero
168
+ expect(detalhe[69]).to eq '6' # digito verificador
169
+ expect(detalhe[120..125]).to eq Date.today.strftime('%d%m%y') # data de vencimento
170
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
171
+ expect(detalhe[142..145]).to eq '0000' # agência cobradora
172
+ expect(detalhe[156..159]).to eq '0000' # instrução
173
+ expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
174
+ expect(detalhe[234..263]).to eq 'PABLO DIEGO JOSE FRANCISCO DE ' # nome do pagador
175
+ end
176
+ end
177
+
178
+ context 'arquivo' do
179
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
180
+ after { Timecop.return }
181
+
182
+ it { expect(banco_nordeste.gera_arquivo).to eq(read_remessa('remessa-banco-nordeste-cnab400.rem', banco_nordeste.gera_arquivo)) }
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,3 @@
1
+ 01REMESSA01COBRANCA 12340012345671 SOCIEDADE BRASILEIRA DE ZOOLOG004B.DO NORDESTE 140715 000001
2
+ 1 1234001234567100 0000123600000000000000000000000000000 401000000000014071500000000199900040000 01N140715000000000000000000000000000000000000000000000000000000000000000100012345678901PABLO DIEGO JOSE FRANCISCO DE PAULA JUANRUA RIO GRANDE DO SUL SAO PAULO MINAS CASAO JOSE DOS12345678SANTA RITA DE CSP 990000002
3
+ 9 000003
@@ -62,6 +62,16 @@ shared_examples_for 'cnab400' do
62
62
  documento_cedente: '12345678910',
63
63
  sequencial_remessa: '1',
64
64
  pagamentos: [pagamento] }
65
+ elsif subject.class == Brcobranca::Remessa::Cnab400::BancoNordeste
66
+ {
67
+ carteira: '21',
68
+ agencia: '1234',
69
+ conta_corrente: '1234567',
70
+ digito_conta: '1',
71
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
72
+ documento_cedente: '12345678910',
73
+ pagamentos: [pagamento]
74
+ }
65
75
  else
66
76
  { carteira: '123',
67
77
  agencia: '4327',
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: 7.2.2
4
+ version: 7.3.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: 2017-03-06 00:00:00.000000000 Z
11
+ date: 2017-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rghost
@@ -170,6 +170,7 @@ files:
170
170
  - lib/brcobranca/remessa/cnab240/caixa.rb
171
171
  - lib/brcobranca/remessa/cnab240/sicoob.rb
172
172
  - lib/brcobranca/remessa/cnab400/banco_brasil.rb
173
+ - lib/brcobranca/remessa/cnab400/banco_nordeste.rb
173
174
  - lib/brcobranca/remessa/cnab400/base.rb
174
175
  - lib/brcobranca/remessa/cnab400/bradesco.rb
175
176
  - lib/brcobranca/remessa/cnab400/citibank.rb
@@ -223,6 +224,7 @@ files:
223
224
  - spec/brcobranca/remessa/cnab240/caixa_spec.rb
224
225
  - spec/brcobranca/remessa/cnab240/sicoob_spec.rb
225
226
  - spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb
227
+ - spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb
226
228
  - spec/brcobranca/remessa/cnab400/base_spec.rb
227
229
  - spec/brcobranca/remessa/cnab400/bradesco_spec.rb
228
230
  - spec/brcobranca/remessa/cnab400/citibank_spec.rb
@@ -244,6 +246,7 @@ files:
244
246
  - spec/brcobranca_spec.rb
245
247
  - spec/fixtures/remessa/.keep
246
248
  - spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem
249
+ - spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem
247
250
  - spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem
248
251
  - spec/fixtures/remessa/remessa-bancoob-cnab240.rem
249
252
  - spec/fixtures/remessa/remessa-bradesco-cnab400.rem
@@ -317,6 +320,7 @@ test_files:
317
320
  - spec/brcobranca/remessa/cnab240/caixa_spec.rb
318
321
  - spec/brcobranca/remessa/cnab240/sicoob_spec.rb
319
322
  - spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb
323
+ - spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb
320
324
  - spec/brcobranca/remessa/cnab400/base_spec.rb
321
325
  - spec/brcobranca/remessa/cnab400/bradesco_spec.rb
322
326
  - spec/brcobranca/remessa/cnab400/citibank_spec.rb
@@ -338,6 +342,7 @@ test_files:
338
342
  - spec/brcobranca_spec.rb
339
343
  - spec/fixtures/remessa/.keep
340
344
  - spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem
345
+ - spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem
341
346
  - spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem
342
347
  - spec/fixtures/remessa/remessa-bancoob-cnab240.rem
343
348
  - spec/fixtures/remessa/remessa-bradesco-cnab400.rem