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 +4 -4
- data/.travis.yml +1 -0
- data/lib/brcobranca.rb +3 -2
- data/lib/brcobranca/boleto/banrisul.rb +12 -2
- data/lib/brcobranca/calculo.rb +8 -14
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +162 -0
- data/lib/brcobranca/version.rb +1 -1
- data/spec/brcobranca/boleto/banrisul_spec.rb +8 -2
- data/spec/brcobranca/boleto/sicredi_spec.rb +13 -1
- data/spec/brcobranca/calculo_spec.rb +5 -4
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +185 -0
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
- data/spec/support/shared_examples/cnab400.rb +10 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e60af310245b6b49e8a67c848f646fb639365ac7
|
4
|
+
data.tar.gz: d9d725c1e54701ff10aeb9488ffc18e3e1f80fed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c51a8c61fc8044564172b0592e788c90710d8477009f91f0169013c139fb511be621b252c9684da814234d83e12c0ea76cb91ae3430b3c56c09fb2e4f0db8dcc
|
7
|
+
data.tar.gz: ce9984679c2a1647ca76aca89fc3a3ad817e30d1b504a1eaa16d48fafcec90199c060112d37f992f298e66b98f4cb55cffaf2f2aee21a2b4c6796ac251999916
|
data/.travis.yml
CHANGED
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,
|
150
|
-
autoload :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
|
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:
|
data/lib/brcobranca/calculo.rb
CHANGED
@@ -52,19 +52,13 @@ module Brcobranca
|
|
52
52
|
# @return [Integer]
|
53
53
|
# @example
|
54
54
|
# 1 #=> 1
|
55
|
-
# 11 (
|
56
|
-
# 13 (
|
55
|
+
# 11 (-9 ) #=> 2
|
56
|
+
# 13 (-9 ) #=> 4
|
57
|
+
# 18 (-9 ) #=> 9
|
57
58
|
def soma_digitos
|
58
|
-
total =
|
59
|
-
|
60
|
-
|
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
|
data/lib/brcobranca/version.rb
CHANGED
@@ -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
|
-
|
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(
|
165
|
+
expect(11.soma_digitos).to be(2)
|
166
166
|
expect(8.soma_digitos).to be(8)
|
167
|
-
expect('
|
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(
|
171
|
-
expect('
|
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.
|
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-
|
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
|