brcobranca 7.2.2 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|