br_boleto 2.2.0 → 2.2.1
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/Gemfile.lock +1 -1
- data/README.markdown +23 -17
- data/lib/br_boleto.rb +2 -0
- data/lib/br_boleto/boleto/banco_brasil.rb +24 -15
- data/lib/br_boleto/boleto/santander.rb +8 -2
- data/lib/br_boleto/conta/banco_brasil.rb +254 -56
- data/lib/br_boleto/conta/bradesco.rb +229 -27
- data/lib/br_boleto/conta/caixa.rb +208 -4
- data/lib/br_boleto/conta/cecred.rb +29 -0
- data/lib/br_boleto/conta/itau.rb +482 -87
- data/lib/br_boleto/conta/santander.rb +224 -97
- data/lib/br_boleto/conta/sicoob.rb +39 -24
- data/lib/br_boleto/conta/sicredi.rb +169 -64
- data/lib/br_boleto/conta/unicred.rb +16 -13
- data/lib/br_boleto/helper/default_codes.rb +2123 -54
- data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +12 -6
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -1
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +1 -1
- data/lib/br_boleto/remessa/cnab240/itau.rb +20 -3
- data/lib/br_boleto/remessa/cnab240/santander.rb +25 -24
- data/lib/br_boleto/remessa/cnab400/caixa.rb +197 -0
- data/lib/br_boleto/remessa/cnab400/santander.rb +32 -27
- data/lib/br_boleto/retorno/base.rb +24 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +6 -2
- data/lib/br_boleto/retorno/cnab240/santander.rb +5 -1
- data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +3 -1
- data/lib/br_boleto/retorno/cnab400/base.rb +2 -1
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +6 -0
- data/lib/br_boleto/retorno/cnab400/caixa.rb +49 -0
- data/lib/br_boleto/retorno/cnab400/itau.rb +5 -1
- data/lib/br_boleto/retorno/cnab400/santander.rb +5 -1
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +1 -0
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +6 -0
- data/lib/br_boleto/retorno/pagamento.rb +50 -4
- data/lib/br_boleto/version.rb +1 -1
- data/test/br_boleto/boleto/santander_test.rb +1 -1
- data/test/br_boleto/boleto/sicredi_test.rb +1 -0
- data/test/br_boleto/conta/banco_brasil_test.rb +157 -0
- data/test/br_boleto/conta/base_test.rb +8 -8
- data/test/br_boleto/conta/bradesco_test.rb +165 -0
- data/test/br_boleto/conta/caixa_test.rb +159 -1
- data/test/br_boleto/conta/cecred_test.rb +22 -0
- data/test/br_boleto/conta/itau_test.rb +346 -3
- data/test/br_boleto/conta/santantader_test.rb +123 -10
- data/test/br_boleto/conta/sicoob_test.rb +8 -0
- data/test/br_boleto/conta/sicredi_test.rb +79 -0
- data/test/br_boleto/conta/unicred_test.rb +7 -7
- data/test/br_boleto/remessa/cnab240/itau_test.rb +1 -1
- data/test/br_boleto/remessa/cnab400/caixa_test.rb +184 -0
- data/test/br_boleto/remessa/cnab400/santander_test.rb +30 -17
- data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +30 -6
- data/test/br_boleto/retorno/cnab240/base_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +15 -3
- data/test/br_boleto/retorno/cnab240/itau_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/santander_test.rb +30 -6
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +25 -5
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +25 -5
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +30 -6
- data/test/br_boleto/retorno/cnab400/caixa_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/itau_test.rb +14 -4
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +25 -5
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +10 -2
- data/test/br_boleto/retorno/cnab400/unicred.rb +30 -6
- data/test/br_boleto/retorno/pagamento_test.rb +49 -1
- data/test/factories/remessa/cnab400/caixa.rb +8 -0
- data/test/fixtures/retorno/cnab240/santander.ret +1 -1
- metadata +10 -2
@@ -26,6 +26,30 @@ module BrBoleto
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
+
def conta_pagamento_class
|
30
|
+
case codigo_banco.to_i.to_s.rjust(3, '0')
|
31
|
+
when '001'
|
32
|
+
BrBoleto::Conta::BancoBrasil
|
33
|
+
when '033'
|
34
|
+
BrBoleto::Conta::Santander
|
35
|
+
when '085'
|
36
|
+
BrBoleto::Conta::Cecred
|
37
|
+
when '104'
|
38
|
+
BrBoleto::Conta::Caixa
|
39
|
+
when '237'
|
40
|
+
BrBoleto::Conta::Bradesco
|
41
|
+
when '341'
|
42
|
+
BrBoleto::Conta::Itau
|
43
|
+
when '748'
|
44
|
+
BrBoleto::Conta::Sicredi
|
45
|
+
when '756'
|
46
|
+
BrBoleto::Conta::Sicoob
|
47
|
+
else
|
48
|
+
BrBoleto::Conta::Base
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
29
53
|
def read_file!
|
30
54
|
raise NotImplementedError.new('Sobreescreva este método na classe referente ao CNAB 240 ou 400')
|
31
55
|
end
|
@@ -25,7 +25,7 @@ module BrBoleto
|
|
25
25
|
# Segmentos T e U do arquivo de retorno
|
26
26
|
#
|
27
27
|
def instnce_payment(lines) #:doc:
|
28
|
-
payment = BrBoleto::Retorno::Pagamento.new
|
28
|
+
payment = BrBoleto::Retorno::Pagamento.new(conta_class: conta_pagamento_class, cnab: 240)
|
29
29
|
lines.each do |line|
|
30
30
|
self.codigo_banco ||= line[0..2]
|
31
31
|
if line[13] == 'T'
|
@@ -72,7 +72,11 @@ module BrBoleto
|
|
72
72
|
sacado_nome: 149..188,
|
73
73
|
numero_contrato: 189..198,
|
74
74
|
valor_tarifa: 199..213,
|
75
|
-
|
75
|
+
motivo_ocorrencia_original_1: 214..215,
|
76
|
+
motivo_ocorrencia_original_2: 216..217,
|
77
|
+
motivo_ocorrencia_original_3: 218..219,
|
78
|
+
motivo_ocorrencia_original_4: 220..221,
|
79
|
+
motivo_ocorrencia_original_5: 222..223,
|
76
80
|
}
|
77
81
|
end
|
78
82
|
|
@@ -26,7 +26,11 @@ module BrBoleto
|
|
26
26
|
sacado_documento: 129..143,
|
27
27
|
sacado_nome: 144..183,
|
28
28
|
valor_tarifa: 194..208,
|
29
|
-
|
29
|
+
motivo_ocorrencia_original_1: 209..210,
|
30
|
+
motivo_ocorrencia_original_2: 211..212,
|
31
|
+
motivo_ocorrencia_original_3: 213..214,
|
32
|
+
motivo_ocorrencia_original_4: 215..216,
|
33
|
+
motivo_ocorrencia_original_5: 217..218,
|
30
34
|
|
31
35
|
# conta_cobranca: 184..193
|
32
36
|
# numero_contrato: 189..198,
|
@@ -18,6 +18,7 @@ module BrBoleto
|
|
18
18
|
tipo_cobranca: 81..81,
|
19
19
|
variacao_carteira: 92..94,
|
20
20
|
carteira: 107..108,
|
21
|
+
codigo_ocorrencia_retorno: 109..110,
|
21
22
|
data_ocorrencia: 111..116,
|
22
23
|
data_ocorrencia_sacado: 111..116,
|
23
24
|
numero_documento: 117..126,
|
@@ -37,7 +38,8 @@ module BrBoleto
|
|
37
38
|
valor_liquido: 254..266,
|
38
39
|
valor_juros_multa: 267..279,
|
39
40
|
valor_outros_creditos: 280..292,
|
40
|
-
|
41
|
+
|
42
|
+
motivo_ocorrencia_original_1: 87..88,
|
41
43
|
}
|
42
44
|
end
|
43
45
|
end
|
@@ -25,7 +25,7 @@ module BrBoleto
|
|
25
25
|
# e adiciona o mesmo no Array de pagamentos
|
26
26
|
#
|
27
27
|
def instnce_payment(detalhe) #:doc:
|
28
|
-
payment = BrBoleto::Retorno::Pagamento.new
|
28
|
+
payment = BrBoleto::Retorno::Pagamento.new(conta_class: conta_pagamento_class, cnab: 400)
|
29
29
|
detalhe_fields.each do |column, position |
|
30
30
|
payment.send("#{column}=", "_#{detalhe}"[position].try(:strip))
|
31
31
|
end
|
@@ -42,6 +42,7 @@ module BrBoleto
|
|
42
42
|
return if lines.blank?
|
43
43
|
self.codigo_banco = "_#{lines[0]}"[77..79]
|
44
44
|
end
|
45
|
+
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -15,6 +15,7 @@ module BrBoleto
|
|
15
15
|
numero_conta_dv: 36,
|
16
16
|
nosso_numero_sem_dv: 71..81,
|
17
17
|
nosso_numero_dv: 82,
|
18
|
+
codigo_ocorrencia_retorno: 109..110,
|
18
19
|
data_ocorrencia: 111..116,
|
19
20
|
data_ocorrencia_sacado: 111..116,
|
20
21
|
numero_documento: 117..126,
|
@@ -35,6 +36,11 @@ module BrBoleto
|
|
35
36
|
valor_outros_creditos: 280..292,
|
36
37
|
data_credito: 296..301,
|
37
38
|
|
39
|
+
motivo_ocorrencia_original_1: 319..320,
|
40
|
+
motivo_ocorrencia_original_2: 321..322,
|
41
|
+
motivo_ocorrencia_original_3: 323..324,
|
42
|
+
motivo_ocorrencia_original_4: 325..326,
|
43
|
+
motivo_ocorrencia_original_5: 327..328,
|
38
44
|
}
|
39
45
|
end
|
40
46
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module BrBoleto
|
3
|
+
module Retorno
|
4
|
+
module Cnab400
|
5
|
+
class Caixa < BrBoleto::Retorno::Cnab400::Base
|
6
|
+
private
|
7
|
+
def detalhe_fields #:doc:
|
8
|
+
{ # ATRIBUTO POSIÇÃO DA LINHA
|
9
|
+
|
10
|
+
sacado_documento: 4..17,
|
11
|
+
agencia_sem_dv: 18..21,
|
12
|
+
codigo_cedente: 22..27,
|
13
|
+
carteira: 57..58,
|
14
|
+
nosso_numero_sem_dv: 57..73,
|
15
|
+
cod_carteira: 107..108,
|
16
|
+
codigo_ocorrencia_retorno: 109..110,
|
17
|
+
data_ocorrencia: 111..116,
|
18
|
+
data_ocorrencia_sacado: 111..116,
|
19
|
+
numero_documento: 117..126,
|
20
|
+
data_vencimento: 147..152,
|
21
|
+
valor_titulo: 153..165,
|
22
|
+
banco_recebedor: 166..168,
|
23
|
+
agencia_recebedora_com_dv: 169..173,
|
24
|
+
especie_titulo: 174..175,
|
25
|
+
valor_tarifa: 176..188,
|
26
|
+
valor_iof: 215..227,
|
27
|
+
valor_abatimento: 228..240,
|
28
|
+
valor_desconto: 241..253,
|
29
|
+
valor_pago: 254..266,
|
30
|
+
valor_ocorrencia_sacado: 254..266,
|
31
|
+
valor_liquido: 254..266,
|
32
|
+
valor_juros_multa: 267..279,
|
33
|
+
valor_multa: 280..292,
|
34
|
+
codigo_moeda: 293..293,
|
35
|
+
data_credito: 294..299,
|
36
|
+
# valor_outras_despesas: 189..201,
|
37
|
+
# valor_outros_creditos: 280..292,
|
38
|
+
|
39
|
+
motivo_ocorrencia_original_1: 80..82,
|
40
|
+
# motivo_ocorrencia_original_2: 321..322,
|
41
|
+
# motivo_ocorrencia_original_3: 323..324,
|
42
|
+
# motivo_ocorrencia_original_4: 325..326,
|
43
|
+
# motivo_ocorrencia_original_5: 327..328,
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -16,7 +16,7 @@ module BrBoleto
|
|
16
16
|
nosso_numero_sem_dv: 86..93,
|
17
17
|
nosso_numero_dv: 94,
|
18
18
|
cod_carteira: 108,
|
19
|
-
|
19
|
+
codigo_ocorrencia_retorno: 109..110,
|
20
20
|
data_ocorrencia: 111..116,
|
21
21
|
data_ocorrencia_sacado: 111..116,
|
22
22
|
data_vencimento: 147..152,
|
@@ -35,6 +35,10 @@ module BrBoleto
|
|
35
35
|
valor_outros_creditos: 280..292,
|
36
36
|
data_credito: 296..301,
|
37
37
|
sacado_nome: 325..354,
|
38
|
+
|
39
|
+
motivo_ocorrencia_original_1: 393..394, # Meio pelo qual o título foi liquidado
|
40
|
+
motivo_ocorrencia_original_2: 302..305, # Código da instrução cancelada
|
41
|
+
motivo_ocorrencia_original_3: 378..385, # Registros rejeitados ou alegação do sacado ou registro de mensagem informativa
|
38
42
|
}
|
39
43
|
end
|
40
44
|
end
|
@@ -14,7 +14,7 @@ module BrBoleto
|
|
14
14
|
nosso_numero_sem_dv: 63..69,
|
15
15
|
nosso_numero_dv: 70,
|
16
16
|
cod_carteira: 108,
|
17
|
-
|
17
|
+
codigo_ocorrencia_retorno: 109..110,
|
18
18
|
data_ocorrencia: 111..116,
|
19
19
|
data_ocorrencia_sacado: 111..116,
|
20
20
|
numero_documento: 117..126,
|
@@ -36,6 +36,10 @@ module BrBoleto
|
|
36
36
|
valor_outros_creditos: 280..292,
|
37
37
|
data_credito: 296..301,
|
38
38
|
sacado_nome: 302..337,
|
39
|
+
|
40
|
+
motivo_ocorrencia_original_1: 137..139,
|
41
|
+
motivo_ocorrencia_original_2: 140..142,
|
42
|
+
motivo_ocorrencia_original_3: 143..145,
|
39
43
|
}
|
40
44
|
end
|
41
45
|
end
|
@@ -44,6 +44,12 @@ module BrBoleto
|
|
44
44
|
valor_juros_multa: 267..279,
|
45
45
|
valor_outros_creditos: 280..292,
|
46
46
|
|
47
|
+
motivo_ocorrencia_original_1: 319..320,
|
48
|
+
motivo_ocorrencia_original_2: 321..322,
|
49
|
+
motivo_ocorrencia_original_3: 323..324,
|
50
|
+
motivo_ocorrencia_original_4: 325..326,
|
51
|
+
motivo_ocorrencia_original_5: 327..328,
|
52
|
+
|
47
53
|
# sacado_documento: 4..17,
|
48
54
|
# agencia_sem_dv: 25..29,
|
49
55
|
# agencia_recebedora_com_dv: 169..173,
|
@@ -2,6 +2,7 @@
|
|
2
2
|
module BrBoleto
|
3
3
|
module Retorno
|
4
4
|
class Pagamento < BrBoleto::ActiveModelBase
|
5
|
+
include BrBoleto::HaveConta
|
5
6
|
|
6
7
|
#############################################################################################
|
7
8
|
############################# VALORES ENCONTRADOS NO SEGMENTO T #############################
|
@@ -18,11 +19,17 @@ module BrBoleto
|
|
18
19
|
"#{numero_conta_sem_dv}#{numero_conta_dv}" # tamanho = 13
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
+
# Codigo identificação CNAB
|
23
|
+
attr_accessor :cnab
|
24
|
+
|
22
25
|
# CÓDIGO DE MOVIMENTO RETORNO
|
23
26
|
# Tamanho Posição
|
24
27
|
# 2 16-17
|
25
28
|
attr_accessor :codigo_movimento_retorno
|
29
|
+
alias_attribute :codigo_ocorrencia_retorno, :codigo_movimento_retorno
|
30
|
+
def codigo_movimento_retorno
|
31
|
+
conta.get_codigo_movimento_retorno(@codigo_movimento_retorno, cnab)
|
32
|
+
end
|
26
33
|
|
27
34
|
# IDENTIFICAÇÃO DO TÍTULO
|
28
35
|
# Tamanho Posição
|
@@ -52,7 +59,6 @@ module BrBoleto
|
|
52
59
|
# VARIAÇÃO DA CARTEIRA
|
53
60
|
attr_accessor :variacao_carteira
|
54
61
|
|
55
|
-
|
56
62
|
# NÚMERO DO DOCUMENTO
|
57
63
|
# Tamanho Posição
|
58
64
|
# 15 59-73
|
@@ -118,10 +124,44 @@ module BrBoleto
|
|
118
124
|
# 15 199-213
|
119
125
|
attr_accessor :valor_tarifa
|
120
126
|
|
127
|
+
# VALOR DA MULTA PAGA PELO PAGADOR
|
128
|
+
# Tamanho Posição
|
129
|
+
# 13 280-92
|
130
|
+
attr_accessor :valor_multa
|
131
|
+
|
132
|
+
|
121
133
|
# IDENTIFICAÇÃO PARA REJEIÇÕES, TARIFAS, CUSTOS, LIQUIDAÇÃO E BAIXAS
|
122
134
|
# Tamanho Posição
|
123
135
|
# 10 214-223
|
124
|
-
attr_accessor :
|
136
|
+
attr_accessor :motivo_ocorrencia_original_1
|
137
|
+
def motivo_ocorrencia_1
|
138
|
+
conta.get_codigo_motivo_ocorrencia motivo_ocorrencia_original_1, codigo_movimento_retorno, cnab
|
139
|
+
end
|
140
|
+
|
141
|
+
attr_accessor :motivo_ocorrencia_original_2
|
142
|
+
def motivo_ocorrencia_2
|
143
|
+
conta.get_codigo_motivo_ocorrencia motivo_ocorrencia_original_2, codigo_movimento_retorno, cnab
|
144
|
+
end
|
145
|
+
|
146
|
+
attr_accessor :motivo_ocorrencia_original_3
|
147
|
+
def motivo_ocorrencia_3
|
148
|
+
conta.get_codigo_motivo_ocorrencia motivo_ocorrencia_original_3, codigo_movimento_retorno, cnab
|
149
|
+
end
|
150
|
+
|
151
|
+
attr_accessor :motivo_ocorrencia_original_4
|
152
|
+
def motivo_ocorrencia_4
|
153
|
+
conta.get_codigo_motivo_ocorrencia motivo_ocorrencia_original_4, codigo_movimento_retorno, cnab
|
154
|
+
end
|
155
|
+
|
156
|
+
attr_accessor :motivo_ocorrencia_original_5
|
157
|
+
def motivo_ocorrencia_5
|
158
|
+
conta.get_codigo_motivo_ocorrencia motivo_ocorrencia_original_5, codigo_movimento_retorno, cnab
|
159
|
+
end
|
160
|
+
|
161
|
+
def motivo_ocorrencia
|
162
|
+
"#{motivo_ocorrencia_1}#{motivo_ocorrencia_2}#{motivo_ocorrencia_3}#{motivo_ocorrencia_4}#{motivo_ocorrencia_5}"
|
163
|
+
end
|
164
|
+
|
125
165
|
|
126
166
|
# BANCO SICREDI (PAG. 44)
|
127
167
|
# Código do pagador na cooperativa do beneficiário
|
@@ -223,7 +263,6 @@ module BrBoleto
|
|
223
263
|
# É implementado apenas para os bancos que não conseguem seguir um padrão estabelecido
|
224
264
|
attr_accessor :modalidade
|
225
265
|
|
226
|
-
|
227
266
|
attr_accessor :parcela
|
228
267
|
|
229
268
|
# Prefixo do Título: Informa Espécie do Título
|
@@ -277,6 +316,13 @@ module BrBoleto
|
|
277
316
|
end
|
278
317
|
end
|
279
318
|
|
319
|
+
def conta_class= value
|
320
|
+
@conta_class = value
|
321
|
+
end
|
322
|
+
def conta_class
|
323
|
+
@conta_class
|
324
|
+
end
|
325
|
+
|
280
326
|
|
281
327
|
end
|
282
328
|
end
|
data/lib/br_boleto/version.rb
CHANGED
@@ -2,7 +2,7 @@ module BrBoleto
|
|
2
2
|
module Version
|
3
3
|
MAJOR = 2 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
|
4
4
|
MINOR = 2 #inclui novas funcionalidades, sem quebrar APIs existentes
|
5
|
-
PATCH =
|
5
|
+
PATCH = 1 #corrige bugs ou traz melhorias em implementações já existentes
|
6
6
|
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
7
7
|
end
|
8
8
|
end
|
@@ -82,7 +82,7 @@ describe BrBoleto::Boleto::Santander do
|
|
82
82
|
|
83
83
|
result[0].must_equal '9'
|
84
84
|
result[1..7].must_equal '0000668' # Convênio
|
85
|
-
result[8..20].must_equal '0000000036463' #
|
85
|
+
result[8..20].must_equal '0000000036463' # Nosso Número
|
86
86
|
result[21].must_equal '0' # IOF
|
87
87
|
result[22..24].must_equal '121' # Carteira
|
88
88
|
|
@@ -206,4 +206,161 @@ describe BrBoleto::Conta::BancoBrasil do
|
|
206
206
|
end
|
207
207
|
end
|
208
208
|
|
209
|
+
describe "#get_codigo_motivo_ocorrencia" do
|
210
|
+
context "CÓDIGOS motivo ocorrencia do Banco do Brasil para CNAB 240" do
|
211
|
+
it { subject.get_codigo_motivo_ocorrencia('52', '02', 240).must_equal 'A104' } # Registro Rejeitado – Título já Liquidado
|
212
|
+
end
|
213
|
+
|
214
|
+
context "CÓDIGOS motivo ocorrencia do Banco do Brasil para CNAB 400 com Código de Movimento 02" do
|
215
|
+
it { subject.get_codigo_motivo_ocorrencia('00', '02', 400).must_equal 'A207' } # Entrada Por meio magnético
|
216
|
+
it { subject.get_codigo_motivo_ocorrencia('11', '02', 400).must_equal 'A151' } # Entrada Por via convencional
|
217
|
+
it { subject.get_codigo_motivo_ocorrencia('16', '02', 400).must_equal 'A152' } # Entrada Por alteração do código do cedente
|
218
|
+
it { subject.get_codigo_motivo_ocorrencia('17', '02', 400).must_equal 'A153' } # Entrada Por alteração da variação
|
219
|
+
it { subject.get_codigo_motivo_ocorrencia('18', '02', 400).must_equal 'A154' } # Entrada Por alteração da carteira
|
220
|
+
end
|
221
|
+
|
222
|
+
context "CÓDIGOS motivo ocorrencia do Banco do Brasil para CNAB 400 com Código de Movimento 03" do
|
223
|
+
it { subject.get_codigo_motivo_ocorrencia('03', '03', 400).must_equal 'A27' } # valor dos juros por um dia inválido
|
224
|
+
it { subject.get_codigo_motivo_ocorrencia('04', '03', 400).must_equal 'A29' } # valor do desconto inválido
|
225
|
+
it { subject.get_codigo_motivo_ocorrencia('05', '03', 400).must_equal 'A22' } # espécie de título inválida para carteira/variação
|
226
|
+
it { subject.get_codigo_motivo_ocorrencia('07', '03', 400).must_equal 'A07' } # Prefixo da agência usuária inválido
|
227
|
+
it { subject.get_codigo_motivo_ocorrencia('08', '03', 400).must_equal 'A20' } # valor do título/apólice inválido
|
228
|
+
it { subject.get_codigo_motivo_ocorrencia('09', '03', 400).must_equal 'A16' } # data de vencimento inválida
|
229
|
+
it { subject.get_codigo_motivo_ocorrencia('16', '03', 400).must_equal 'A11' } # Título preenchido de forma irregular
|
230
|
+
it { subject.get_codigo_motivo_ocorrencia('19', '03', 400).must_equal 'A105' } # Código do cedente inválido
|
231
|
+
it { subject.get_codigo_motivo_ocorrencia('20', '03', 400).must_equal 'A45' } # Nome/endereço do cliente não informado (ECT)
|
232
|
+
it { subject.get_codigo_motivo_ocorrencia('21', '03', 400).must_equal 'A10' } # Carteira inválida
|
233
|
+
it { subject.get_codigo_motivo_ocorrencia('24', '03', 400).must_equal 'A33' } # Valor do abatimento inválido
|
234
|
+
it { subject.get_codigo_motivo_ocorrencia('25', '03', 400).must_equal 'A86' } # Novo número do título dado pelo cedente inválido (Seu número)
|
235
|
+
it { subject.get_codigo_motivo_ocorrencia('26', '03', 400).must_equal 'A32' } # Valor do IOF de seguro inválido
|
236
|
+
it { subject.get_codigo_motivo_ocorrencia('29', '03', 400).must_equal 'A47' } # Endereço não informado
|
237
|
+
it { subject.get_codigo_motivo_ocorrencia('30', '03', 400).must_equal 'A104' } # Registro de título já liquidado (carteira 17-tipo 4)
|
238
|
+
it { subject.get_codigo_motivo_ocorrencia('33', '03', 400).must_equal 'A09' } # Nosso número já existente
|
239
|
+
it { subject.get_codigo_motivo_ocorrencia('37', '03', 400).must_equal 'A24' } # Data de emissão do título inválida
|
240
|
+
it { subject.get_codigo_motivo_ocorrencia('38', '03', 400).must_equal 'A25' } # Data do vencimento anterior à data da emissão do título
|
241
|
+
it { subject.get_codigo_motivo_ocorrencia('39', '03', 400).must_equal 'A04' } # Comando de alteração indevido para a carteira
|
242
|
+
it { subject.get_codigo_motivo_ocorrencia('41', '03', 400).must_equal 'A36' } # Abatimento não permitido
|
243
|
+
it { subject.get_codigo_motivo_ocorrencia('42', '03', 400).must_equal 'A51' } # CEP/UF inválido/não compatíveis (ECT)
|
244
|
+
it { subject.get_codigo_motivo_ocorrencia('46', '03', 400).must_equal 'A105' } # Convenio encerrado
|
245
|
+
it { subject.get_codigo_motivo_ocorrencia('49', '03', 400).must_equal 'A107' } # Abatimento a cancelar não consta do título
|
246
|
+
it { subject.get_codigo_motivo_ocorrencia('52', '03', 400).must_equal 'A34' } # Abatimento igual ou maior que o valor do Título
|
247
|
+
it { subject.get_codigo_motivo_ocorrencia('66', '03', 400).must_equal 'A53' } # Número do documento do sacado (CNPJ/CPF) inválido
|
248
|
+
it { subject.get_codigo_motivo_ocorrencia('69', '03', 400).must_equal 'A59' } # Valor/Percentual de Juros Inválido
|
249
|
+
it { subject.get_codigo_motivo_ocorrencia('75', '03', 400).must_equal 'A97' } # Qtde. de dias do prazo limite p/ recebimento de título vencido inválido
|
250
|
+
it { subject.get_codigo_motivo_ocorrencia('80', '03', 400).must_equal 'A08' } # Nosso numero inválido
|
251
|
+
it { subject.get_codigo_motivo_ocorrencia('81', '03', 400).must_equal 'A80' } # Data para concessão do desconto inválida.
|
252
|
+
it { subject.get_codigo_motivo_ocorrencia('82', '03', 400).must_equal 'A48' } # CEP do sacado inválido
|
253
|
+
it { subject.get_codigo_motivo_ocorrencia('01', '03', 400).must_equal 'A155' } # identificação inválida
|
254
|
+
it { subject.get_codigo_motivo_ocorrencia('02', '03', 400).must_equal 'A156' } # variação da carteira inválida
|
255
|
+
it { subject.get_codigo_motivo_ocorrencia('06', '03', 400).must_equal 'A157' } # espécie de valor invariável inválido
|
256
|
+
it { subject.get_codigo_motivo_ocorrencia('10', '03', 400).must_equal 'A158' } # fora do prazo/só admissível na carteira
|
257
|
+
it { subject.get_codigo_motivo_ocorrencia('11', '03', 400).must_equal 'A159' } # inexistência de margem para desconto
|
258
|
+
it { subject.get_codigo_motivo_ocorrencia('12', '03', 400).must_equal 'A160' } # o banco não tem agência na praça do sacado
|
259
|
+
it { subject.get_codigo_motivo_ocorrencia('13', '03', 400).must_equal 'A161' } # razões cadastrais
|
260
|
+
it { subject.get_codigo_motivo_ocorrencia('14', '03', 400).must_equal 'A162' } # sacado interligado com o sacador (só admissível em cobrança simples- cart. 11 e 17)
|
261
|
+
it { subject.get_codigo_motivo_ocorrencia('15', '03', 400).must_equal 'A163' } # Título sacado contra órgão do Poder Público (só admissível na carteira 11 e sem ordem de protesto)
|
262
|
+
it { subject.get_codigo_motivo_ocorrencia('17', '03', 400).must_equal 'A164' } # Título rasurado
|
263
|
+
it { subject.get_codigo_motivo_ocorrencia('18', '03', 400).must_equal 'A165' } # Endereço do sacado não localizado ou incompleto
|
264
|
+
it { subject.get_codigo_motivo_ocorrencia('22', '03', 400).must_equal 'A166' } # Quantidade de valor variável inválida
|
265
|
+
it { subject.get_codigo_motivo_ocorrencia('23', '03', 400).must_equal 'A167' } # Faixa nosso-numero excedida
|
266
|
+
it { subject.get_codigo_motivo_ocorrencia('27', '03', 400).must_equal 'A168' } # Nome do sacado/cedente inválido
|
267
|
+
it { subject.get_codigo_motivo_ocorrencia('28', '03', 400).must_equal 'A169' } # Data do novo vencimento inválida
|
268
|
+
it { subject.get_codigo_motivo_ocorrencia('31', '03', 400).must_equal 'A170' } # Numero do borderô inválido
|
269
|
+
it { subject.get_codigo_motivo_ocorrencia('32', '03', 400).must_equal 'A171' } # Nome da pessoa autorizada inválido
|
270
|
+
it { subject.get_codigo_motivo_ocorrencia('34', '03', 400).must_equal 'A172' } # Numero da prestação do contrato inválido
|
271
|
+
it { subject.get_codigo_motivo_ocorrencia('35', '03', 400).must_equal 'A173' } # percentual de desconto inválido
|
272
|
+
it { subject.get_codigo_motivo_ocorrencia('36', '03', 400).must_equal 'A174' } # Dias para fichamento de protesto inválido
|
273
|
+
it { subject.get_codigo_motivo_ocorrencia('40', '03', 400).must_equal 'A175' } # Tipo de moeda inválido
|
274
|
+
it { subject.get_codigo_motivo_ocorrencia('43', '03', 400).must_equal 'A176' } # Código de unidade variável incompatível com a data de emissão do título
|
275
|
+
it { subject.get_codigo_motivo_ocorrencia('44', '03', 400).must_equal 'A177' } # Dados para débito ao sacado inválidos
|
276
|
+
it { subject.get_codigo_motivo_ocorrencia('45', '03', 400).must_equal 'A178' } # Carteira/variação encerrada
|
277
|
+
it { subject.get_codigo_motivo_ocorrencia('47', '03', 400).must_equal 'A179' } # Título tem valor diverso do informado
|
278
|
+
it { subject.get_codigo_motivo_ocorrencia('48', '03', 400).must_equal 'A180' } # Motivo de baixa invalido para a carteira
|
279
|
+
it { subject.get_codigo_motivo_ocorrencia('50', '03', 400).must_equal 'A181' } # Comando incompatível com a carteira
|
280
|
+
it { subject.get_codigo_motivo_ocorrencia('51', '03', 400).must_equal 'A182' } # Código do convenente invalido
|
281
|
+
it { subject.get_codigo_motivo_ocorrencia('53', '03', 400).must_equal 'A183' } # Título já se encontra na situação pretendida
|
282
|
+
it { subject.get_codigo_motivo_ocorrencia('54', '03', 400).must_equal 'A184' } # Título fora do prazo admitido para a conta 1
|
283
|
+
it { subject.get_codigo_motivo_ocorrencia('55', '03', 400).must_equal 'A185' } # Novo vencimento fora dos limites da carteira
|
284
|
+
it { subject.get_codigo_motivo_ocorrencia('56', '03', 400).must_equal 'A186' } # Título não pertence ao convenente
|
285
|
+
it { subject.get_codigo_motivo_ocorrencia('57', '03', 400).must_equal 'A187' } # Variação incompatível com a carteira
|
286
|
+
it { subject.get_codigo_motivo_ocorrencia('58', '03', 400).must_equal 'A188' } # Impossível a variação única para a carteira indicada
|
287
|
+
it { subject.get_codigo_motivo_ocorrencia('59', '03', 400).must_equal 'A189' } # Título vencido em transferência para a carteira 51
|
288
|
+
it { subject.get_codigo_motivo_ocorrencia('60', '03', 400).must_equal 'A190' } # Título com prazo superior a 179 dias em variação única para carteira 51
|
289
|
+
it { subject.get_codigo_motivo_ocorrencia('61', '03', 400).must_equal 'A191' } # Título já foi fichado para protesto
|
290
|
+
it { subject.get_codigo_motivo_ocorrencia('62', '03', 400).must_equal 'A192' } # Alteração da situação de débito inválida para o código de responsabilidade
|
291
|
+
it { subject.get_codigo_motivo_ocorrencia('63', '03', 400).must_equal 'A193' } # DV do nosso número inválido
|
292
|
+
it { subject.get_codigo_motivo_ocorrencia('64', '03', 400).must_equal 'A194' } # Título não passível de débito/baixa – situação anormal
|
293
|
+
it { subject.get_codigo_motivo_ocorrencia('65', '03', 400).must_equal 'A195' } # Título com ordem de não protestar – não pode ser encaminhado a cartório
|
294
|
+
it { subject.get_codigo_motivo_ocorrencia('67', '03', 400).must_equal 'A196' } # Título/carne rejeitado
|
295
|
+
it { subject.get_codigo_motivo_ocorrencia('70', '03', 400).must_equal 'A197' } # Título já se encontra isento de juros
|
296
|
+
it { subject.get_codigo_motivo_ocorrencia('71', '03', 400).must_equal 'A198' } # Código de Juros Inválido
|
297
|
+
it { subject.get_codigo_motivo_ocorrencia('72', '03', 400).must_equal 'A199' } # Prefixo da Ag. cobradora inválido
|
298
|
+
it { subject.get_codigo_motivo_ocorrencia('73', '03', 400).must_equal 'A200' } # Numero do controle do participante inválido
|
299
|
+
it { subject.get_codigo_motivo_ocorrencia('74', '03', 400).must_equal 'A201' } # Cliente não cadastrado no CIOPE (Desconto/Vendor)
|
300
|
+
it { subject.get_codigo_motivo_ocorrencia('76', '03', 400).must_equal 'A202' } # Título excluído automaticamente por decurso de prazo CIOPE (Desconto/Vendor)
|
301
|
+
it { subject.get_codigo_motivo_ocorrencia('77', '03', 400).must_equal 'A203' } # Título vencido transferido para a conta 1 – Carteira vinculada
|
302
|
+
it { subject.get_codigo_motivo_ocorrencia('83', '03', 400).must_equal 'A204' } # Carteira/variação não localizada no cedente
|
303
|
+
it { subject.get_codigo_motivo_ocorrencia('84', '03', 400).must_equal 'A205' } # Título não localizado na existência/Baixado por protesto
|
304
|
+
it { subject.get_codigo_motivo_ocorrencia('85', '03', 400).must_equal 'A206' } # Recusa do Comando “41” – Parâmetro de Liquidação Parcial.
|
305
|
+
it { subject.get_codigo_motivo_ocorrencia('99', '03', 400).must_equal 'A999' } # Outros motivos
|
306
|
+
end
|
307
|
+
|
308
|
+
context "CÓDIGOS motivo ocorrencia C do Banco do Brasil para CNAB 400" do
|
309
|
+
it { subject.get_codigo_motivo_ocorrencia('01', '06', 400).must_equal 'C103' } # Liquidação normal
|
310
|
+
it { subject.get_codigo_motivo_ocorrencia('02', '09', 400).must_equal 'C104' } # Liquidação parcial
|
311
|
+
it { subject.get_codigo_motivo_ocorrencia('03', '10', 400).must_equal 'C01' } # Liquidação por saldo
|
312
|
+
it { subject.get_codigo_motivo_ocorrencia('04', '17', 400).must_equal 'C105' } # Liquidação com cheque a compensar
|
313
|
+
it { subject.get_codigo_motivo_ocorrencia('05', '45', 400).must_equal 'C106' } # Liquidação de título sem registro (carteira 7 tipo 4)
|
314
|
+
it { subject.get_codigo_motivo_ocorrencia('07', '102', 400).must_equal 'C107' } # Liquidação na apresentação
|
315
|
+
it { subject.get_codigo_motivo_ocorrencia('09', '103', 400).must_equal 'C08' } # Liquidação em cartório
|
316
|
+
it { subject.get_codigo_motivo_ocorrencia('10', '101', 400).must_equal 'C110' } # Liquidação Parcial com Cheque a Compensar
|
317
|
+
it { subject.get_codigo_motivo_ocorrencia('11', '120', 400).must_equal 'C111' } # Liquidação por Saldo com Cheque a Compensar
|
318
|
+
it { subject.get_codigo_motivo_ocorrencia('00', '06', 400).must_equal 'C10' } # Solicitada pelo cliente
|
319
|
+
it { subject.get_codigo_motivo_ocorrencia('15', '09', 400).must_equal 'C14' } # Protestado
|
320
|
+
it { subject.get_codigo_motivo_ocorrencia('18', '10', 400).must_equal 'C118' } # Por alteração da carteira
|
321
|
+
it { subject.get_codigo_motivo_ocorrencia('19', '17', 400).must_equal 'C119' } # Débito automático
|
322
|
+
it { subject.get_codigo_motivo_ocorrencia('31', '101', 400).must_equal 'C131' } # Liquidado anteriormente
|
323
|
+
it { subject.get_codigo_motivo_ocorrencia('32', '102', 400).must_equal 'C132' } # Habilitado em processo
|
324
|
+
it { subject.get_codigo_motivo_ocorrencia('33', '103', 400).must_equal 'C133' } # Incobrável por nosso intermédio
|
325
|
+
it { subject.get_codigo_motivo_ocorrencia('34', '45', 400).must_equal 'C134' } # Transferido para créditos em liquidação
|
326
|
+
it { subject.get_codigo_motivo_ocorrencia('46', '17', 400).must_equal 'C46' } # Por alteração da variação
|
327
|
+
it { subject.get_codigo_motivo_ocorrencia('47', '09', 400).must_equal 'C47' } # Por alteração da variação
|
328
|
+
it { subject.get_codigo_motivo_ocorrencia('51', '06', 400).must_equal 'C51' } # Acerto
|
329
|
+
it { subject.get_codigo_motivo_ocorrencia('90', '10', 400).must_equal 'C90' } # Baixa automática
|
330
|
+
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
describe "#get_codigo_movimento_retorno" do
|
335
|
+
context "CÓDIGOS para o cnab 400 do Banco do Brasil" do
|
336
|
+
it { subject.get_codigo_movimento_retorno('05', 400).must_equal '17' } # Liquidado sem registro (carteira 17=tipo4)
|
337
|
+
it { subject.get_codigo_movimento_retorno('07', 400).must_equal '102' } # Liquidação por Conta/Parcial
|
338
|
+
it { subject.get_codigo_movimento_retorno('08', 400).must_equal '103' } # Liquidação por Saldo
|
339
|
+
it { subject.get_codigo_movimento_retorno('15', 400).must_equal '101' } # Liquidação em Cartório
|
340
|
+
it { subject.get_codigo_movimento_retorno('16', 400).must_equal '57' } # Confirmação de alteração de juros de mora
|
341
|
+
it { subject.get_codigo_movimento_retorno('20', 400).must_equal '120' } # Débito em Conta
|
342
|
+
it { subject.get_codigo_movimento_retorno('21', 400).must_equal '43' } # Alteração do Nome do Sacado
|
343
|
+
it { subject.get_codigo_movimento_retorno('22', 400).must_equal '43' } # Alteração do Endereço do Sacado
|
344
|
+
it { subject.get_codigo_movimento_retorno('24', 400).must_equal '20' } # Sustar Protesto
|
345
|
+
it { subject.get_codigo_movimento_retorno('25', 400).must_equal '60' } # Dispensar Juros de mora
|
346
|
+
it { subject.get_codigo_movimento_retorno('26', 400).must_equal '40' } # Alteração do número do título dado pelo Cedente (Seu número) – 10 e 15posições
|
347
|
+
it { subject.get_codigo_movimento_retorno('28', 400).must_equal '108' } # Manutenção de titulo vencido
|
348
|
+
it { subject.get_codigo_movimento_retorno('31', 400).must_equal '07' } # Conceder desconto
|
349
|
+
it { subject.get_codigo_movimento_retorno('32', 400).must_equal '08' } # Não conceder desconto
|
350
|
+
it { subject.get_codigo_movimento_retorno('33', 400).must_equal '58' } # Retificar desconto
|
351
|
+
it { subject.get_codigo_movimento_retorno('34', 400).must_equal '58' } # Alterar data para desconto
|
352
|
+
it { subject.get_codigo_movimento_retorno('35', 400).must_equal '56' } # Cobrar Multa
|
353
|
+
it { subject.get_codigo_movimento_retorno('36', 400).must_equal '55' } # Dispensar Multa
|
354
|
+
it { subject.get_codigo_movimento_retorno('37', 400).must_equal '121' } # Dispensar Indexador
|
355
|
+
it { subject.get_codigo_movimento_retorno('38', 400).must_equal '39' } # Dispensar prazo limite para recebimento
|
356
|
+
it { subject.get_codigo_movimento_retorno('39', 400).must_equal '38' } # Alterar prazo limite para recebimento
|
357
|
+
it { subject.get_codigo_movimento_retorno('46', 400).must_equal '45' } # Título pago com cheque, aguardando compensação
|
358
|
+
it { subject.get_codigo_movimento_retorno('73', 400).must_equal '123' } # Confirmação de Instrução de Parâmetro de Pagamento Parcial
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
context "CÓDIGOS motivo ocorrencia do Banco do Brasil para CNAB 400 com Código de Movimento 72" do
|
363
|
+
it { subject.get_codigo_motivo_ocorrencia('00', '72', 400).must_equal 'D00' } # Transferência de título de cobrança simples para descontada ou vice-versa
|
364
|
+
it { subject.get_codigo_motivo_ocorrencia('52', '72', 400).must_equal 'D52' } # Reembolso de título vendor ou descontado, quando ocorrerem reembolsos de títulos por falta de liquidação. Não há migração de carteira descontada para simples.
|
365
|
+
end
|
209
366
|
end
|