brcobranca 8.0.0 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/.travis.yml +5 -3
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -2
- data/README.md +24 -12
- data/brcobranca.gemspec +0 -2
- data/lib/brcobranca.rb +43 -26
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +427 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +427 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +21 -21
- data/lib/brcobranca/boleto/banco_brasilia.rb +96 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +4 -6
- data/lib/brcobranca/boleto/banestes.rb +7 -7
- data/lib/brcobranca/boleto/banrisul.rb +5 -5
- data/lib/brcobranca/boleto/base.rb +28 -22
- data/lib/brcobranca/boleto/bradesco.rb +6 -6
- data/lib/brcobranca/boleto/caixa.rb +11 -18
- data/lib/brcobranca/boleto/cecred.rb +86 -0
- data/lib/brcobranca/boleto/credisis.rb +124 -0
- data/lib/brcobranca/boleto/hsbc.rb +10 -27
- data/lib/brcobranca/boleto/itau.rb +9 -10
- data/lib/brcobranca/boleto/santander.rb +5 -6
- data/lib/brcobranca/boleto/sicoob.rb +5 -5
- data/lib/brcobranca/boleto/sicredi.rb +7 -7
- data/lib/brcobranca/boleto/template/rghost.rb +127 -80
- data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
- data/lib/brcobranca/boleto/unicred.rb +126 -4
- data/lib/brcobranca/calculo_data.rb +3 -0
- data/lib/brcobranca/formatacao_string.rb +15 -5
- data/lib/brcobranca/remessa/base.rb +16 -9
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -13
- data/lib/brcobranca/remessa/cnab240/base.rb +252 -119
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +299 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +61 -7
- data/lib/brcobranca/remessa/cnab240/cecred.rb +151 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +109 -123
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +177 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +9 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +14 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +4 -6
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +4 -4
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +7 -8
- data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -4
- data/lib/brcobranca/remessa/cnab400/credisis.rb +128 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +23 -6
- data/lib/brcobranca/remessa/cnab400/santander.rb +80 -65
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +2 -2
- data/lib/brcobranca/remessa/cnab400/unicred.rb +143 -0
- data/lib/brcobranca/remessa/pagamento.rb +50 -14
- data/lib/brcobranca/retorno/base.rb +4 -4
- data/lib/brcobranca/retorno/cnab240/base.rb +11 -8
- data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -0
- data/lib/brcobranca/retorno/cnab240/cecred.rb +102 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +35 -12
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +8 -4
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +79 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +127 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +18 -7
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +9 -3
- data/lib/brcobranca/retorno/cnab400/credisis.rb +115 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +10 -4
- data/lib/brcobranca/retorno/cnab400/santander.rb +57 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +118 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +7 -3
- data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -77
- data/lib/brcobranca/util/date.rb +20 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +232 -0
- data/lib/brcobranca/version.rb +1 -1
- data/spec/arquivos/CNAB240CECRED.RET +10 -0
- data/spec/arquivos/CNAB240SANTANDER.RET +8 -26
- data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
- data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
- data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
- data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
- data/spec/arquivos/CNAB400UNICRED.RET +3 -0
- data/spec/brcobranca/base_spec.rb +6 -4
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +22 -22
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +134 -0
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +19 -19
- data/spec/brcobranca/boleto/banestes_spec.rb +19 -19
- data/spec/brcobranca/boleto/banrisul_spec.rb +14 -14
- data/spec/brcobranca/boleto/bradesco_spec.rb +13 -13
- data/spec/brcobranca/boleto/caixa_spec.rb +7 -7
- data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
- data/spec/brcobranca/boleto/credisis_spec.rb +155 -0
- data/spec/brcobranca/boleto/hsbc_spec.rb +17 -37
- data/spec/brcobranca/boleto/itau_spec.rb +16 -16
- data/spec/brcobranca/boleto/santander_spec.rb +11 -11
- data/spec/brcobranca/boleto/sicoob_spec.rb +17 -17
- data/spec/brcobranca/boleto/sicredi_spec.rb +13 -13
- data/spec/brcobranca/boleto/unicred_spec.rb +10 -10
- data/spec/brcobranca/boletos_em_lote_spec.rb +1 -1
- data/spec/brcobranca/formatacao_string_spec.rb +1 -1
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +10 -18
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +39 -38
- data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +58 -39
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +4 -2
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -1
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +16 -11
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -11
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +25 -12
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +35 -36
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +37 -0
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +45 -27
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +7 -8
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +35 -18
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +20 -19
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +34 -13
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +4 -4
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -4
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -1
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -1
- data/spec/brcobranca/rghost_spec.rb +1 -1
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +5 -4
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +5 -4
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +6 -5
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +3 -2
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +2 -2
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
- data/spec/support/shared_examples/busca_logotipo.rb +0 -2
- data/spec/support/shared_examples/cnab240.rb +92 -28
- data/spec/support/shared_examples/cnab400.rb +60 -14
- data/spec/support/shared_examples/formatos_validos.rb +6 -6
- metadata +103 -31
@@ -80,7 +80,7 @@ module Brcobranca
|
|
80
80
|
def digito_agencia
|
81
81
|
# utilizando a agencia com 4 digitos
|
82
82
|
# para calcular o digito
|
83
|
-
agencia.modulo11(mapeamento: { 10 => '
|
83
|
+
agencia.modulo11(mapeamento: { 10 => '0' }).to_s
|
84
84
|
end
|
85
85
|
|
86
86
|
# Complemento do header
|
@@ -186,7 +186,7 @@ module Brcobranca
|
|
186
186
|
# 34 = Baixa - Pagamento Direto ao Beneficiário
|
187
187
|
|
188
188
|
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
189
|
-
detalhe << pagamento.
|
189
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
190
190
|
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
191
191
|
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
192
192
|
detalhe << cod_banco # codigo banco 9[03]
|
@@ -0,0 +1,143 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Brcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Unicred < Brcobranca::Remessa::Cnab400::Base
|
6
|
+
attr_accessor :posto, :byte_idt
|
7
|
+
|
8
|
+
# Codigo de transmissao fornecido pelo banco
|
9
|
+
attr_accessor :codigo_transmissao
|
10
|
+
|
11
|
+
validates_presence_of :agencia, :conta_corrente, :documento_cedente,
|
12
|
+
:digito_conta, :codigo_transmissao, message: 'não pode estar em branco.'
|
13
|
+
|
14
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
|
15
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 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_length_of :codigo_transmissao, maximum: 20, message: 'deve ter 20 dígitos.'
|
20
|
+
|
21
|
+
validates_inclusion_of :carteira, in: %w(01 03 04 05 06 07), message: 'não existente para este banco.'
|
22
|
+
|
23
|
+
# Nova instancia do Unicred
|
24
|
+
def initialize(campos = {})
|
25
|
+
campos = {
|
26
|
+
aceite: 'N'
|
27
|
+
}.merge!(campos)
|
28
|
+
|
29
|
+
super(campos)
|
30
|
+
end
|
31
|
+
|
32
|
+
def agencia=(valor)
|
33
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
def conta_corrente=(valor)
|
37
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
38
|
+
end
|
39
|
+
|
40
|
+
def carteira=(valor)
|
41
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
42
|
+
end
|
43
|
+
|
44
|
+
def cod_banco
|
45
|
+
'748'
|
46
|
+
end
|
47
|
+
|
48
|
+
def nome_banco
|
49
|
+
'UNICRED'.ljust(15, ' ')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Informacoes da conta corrente do cedente
|
53
|
+
#
|
54
|
+
# @return [String]
|
55
|
+
#
|
56
|
+
def info_conta
|
57
|
+
# CAMPO TAMANHO
|
58
|
+
# codigo da transmissao 20
|
59
|
+
"#{codigo_transmissao}"
|
60
|
+
end
|
61
|
+
|
62
|
+
# Complemento do header
|
63
|
+
# (no caso do Unicred, sao apenas espacos em branco)
|
64
|
+
#
|
65
|
+
# @return [String]
|
66
|
+
#
|
67
|
+
def complemento
|
68
|
+
''.rjust(294, ' ')
|
69
|
+
end
|
70
|
+
|
71
|
+
# Codigo da carteira de acordo com a documentacao do Unicred
|
72
|
+
#
|
73
|
+
# @return [String]
|
74
|
+
#
|
75
|
+
def codigo_carteira
|
76
|
+
codigo_carteira = carteira[1]
|
77
|
+
end
|
78
|
+
|
79
|
+
def identificador_complemento
|
80
|
+
" "
|
81
|
+
end
|
82
|
+
|
83
|
+
# Retorna o nosso numero
|
84
|
+
#
|
85
|
+
# @return [String]
|
86
|
+
def formata_nosso_numero(nosso_numero)
|
87
|
+
nosso_numero.somente_numeros.rjust(20, ' ')
|
88
|
+
end
|
89
|
+
|
90
|
+
# Detalhe do arquivo
|
91
|
+
#
|
92
|
+
# @param pagamento [PagamentoCnab400]
|
93
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
94
|
+
# @param sequencial
|
95
|
+
# num. sequencial do registro no arquivo
|
96
|
+
#
|
97
|
+
# @return [String]
|
98
|
+
#
|
99
|
+
def monta_detalhe(pagamento, sequencial)
|
100
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
101
|
+
|
102
|
+
detalhe = '1' # identificacao transacao 9[01]
|
103
|
+
detalhe << Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
104
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
105
|
+
detalhe << codigo_transmissao # código da transmissao 9[20]
|
106
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # numero de controle do participante X[25]
|
107
|
+
detalhe << formata_nosso_numero(pagamento.nosso_numero) # nosso numero X[20]
|
108
|
+
detalhe << ''.rjust(25, ' ') # brancos X[25]
|
109
|
+
detalhe << codigo_carteira # codigo da carteira X[01]
|
110
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
111
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
112
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
113
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
114
|
+
detalhe << cod_banco # codigo banco 9[03]
|
115
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
116
|
+
detalhe << '01' # especie do titulo X[02]
|
117
|
+
detalhe << aceite # aceite (A/N) X[01]
|
118
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
119
|
+
detalhe << "".rjust(4, "0") # instrucao 9[04]
|
120
|
+
detalhe << "0" # zero 9[01]
|
121
|
+
detalhe << pagamento.formata_valor_mora(12) # valor mora ao dia 9[12]
|
122
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
123
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
124
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
125
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
126
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
127
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
128
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
|
129
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
130
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
131
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
132
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
133
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
134
|
+
detalhe << pagamento.nome_avalista.format_size(40) # nome do sacador/avalista X[40]
|
135
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0') # numero de dias para proteste 9[02]
|
136
|
+
detalhe << "9" # moeda 9[01]
|
137
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
138
|
+
detalhe
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
2
|
module Brcobranca
|
4
3
|
module Remessa
|
5
4
|
class Pagamento
|
6
|
-
|
7
|
-
include
|
5
|
+
|
6
|
+
include Brcobranca::Validations
|
8
7
|
|
9
8
|
# <b>REQUERIDO</b>: nosso numero
|
10
9
|
attr_accessor :nosso_numero
|
@@ -55,7 +54,9 @@ module Brcobranca
|
|
55
54
|
# Informação utilizada para referenciar a identificação do documento objeto de cobrança.
|
56
55
|
# Poderá conter número de duplicata, no caso de cobrança de duplicatas; número da apólice,
|
57
56
|
# no caso de cobrança de seguros, etc
|
58
|
-
attr_accessor :
|
57
|
+
attr_accessor :numero
|
58
|
+
# <b>OPCIONAL</b>: Número utilizado para controle do beneficiário/cedente
|
59
|
+
attr_accessor :documento
|
59
60
|
# <b>OPCIONAL</b>: data limite para o desconto
|
60
61
|
attr_accessor :data_segundo_desconto
|
61
62
|
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
@@ -68,24 +69,31 @@ module Brcobranca
|
|
68
69
|
attr_accessor :percentual_multa
|
69
70
|
# <b>OPCIONAL</b>: Data para cobrança de multa
|
70
71
|
attr_accessor :data_multa
|
72
|
+
# <b>OPCIONAL</b>: tipo de mora (diário, mensal)
|
73
|
+
attr_accessor :tipo_mora
|
74
|
+
# <b>OPCIONAL</b>: Data para cobrança de mora
|
75
|
+
attr_accessor :data_mora
|
76
|
+
# <b>OPCIONAL</b>: codigo dos juros
|
77
|
+
attr_accessor :codigo_juros
|
78
|
+
# <b>OPCIONAL</b>: codigo do protesto
|
79
|
+
attr_accessor :codigo_protesto
|
80
|
+
# <b>OPCIONAL</b>: dias para protesto
|
81
|
+
attr_accessor :dias_protesto
|
82
|
+
# <b>OPCIONAL</b>: codigo baixa
|
83
|
+
attr_accessor :codigo_baixa
|
84
|
+
# <b>OPCIONAL</b>: dias para baixa
|
85
|
+
attr_accessor :dias_baixa
|
71
86
|
# <b>OPCIONAL</b>: Número da Parcela
|
72
87
|
attr_accessor :parcela
|
73
|
-
# <b>OPCIONAL</b>: Dias para o protesto
|
74
|
-
attr_accessor :dias_protesto
|
75
|
-
# <b>OPCIONAL</b>: de livre utilização pela empresa, cuja informação não é consistida pelo Itaú, e não
|
76
|
-
# sai no aviso de cobrança, retornando ao beneficiário no arquivo retorno em qualquer movimento do título
|
77
|
-
# (baixa, liquidação, confirmação de protesto, etc.) com o mesmo conteúdo da entrada.
|
78
|
-
attr_accessor :uso_da_empresa
|
79
88
|
|
80
89
|
validates_presence_of :nosso_numero, :data_vencimento, :valor,
|
81
|
-
|
82
|
-
|
90
|
+
:documento_sacado, :nome_sacado, :endereco_sacado,
|
91
|
+
:cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
|
83
92
|
validates_length_of :uf_sacado, is: 2, message: 'deve ter 2 dígitos.'
|
84
93
|
validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.'
|
85
94
|
validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.'
|
86
95
|
validates_length_of :especie_titulo, is: 2, message: 'deve ter 2 dígitos.', allow_blank: true
|
87
96
|
validates_length_of :identificacao_ocorrencia, is: 2, message: 'deve ter 2 dígitos.'
|
88
|
-
validates_length_of :uso_da_empresa, maximum: 25, message: 'deve ter no máximo 25 dígitos.', allow_blank: true, default: ''
|
89
97
|
|
90
98
|
# Nova instancia da classe Pagamento
|
91
99
|
#
|
@@ -94,6 +102,8 @@ module Brcobranca
|
|
94
102
|
def initialize(campos = {})
|
95
103
|
padrao = {
|
96
104
|
data_emissao: Date.current,
|
105
|
+
data_segundo_desconto:'00-00-00',
|
106
|
+
tipo_mora: "3",
|
97
107
|
valor_mora: 0.0,
|
98
108
|
valor_desconto: 0.0,
|
99
109
|
valor_segundo_desconto: 0.0,
|
@@ -105,7 +115,13 @@ module Brcobranca
|
|
105
115
|
identificacao_ocorrencia: '01',
|
106
116
|
codigo_multa: '0',
|
107
117
|
percentual_multa: 0.0,
|
108
|
-
parcela: '01'
|
118
|
+
parcela: '01',
|
119
|
+
codigo_protesto: '3',
|
120
|
+
dias_protesto: '00',
|
121
|
+
codigo_baixa: '0',
|
122
|
+
dias_baixa: '000',
|
123
|
+
cod_primeira_instrucao: '00',
|
124
|
+
cod_segunda_instrucao: '00'
|
109
125
|
}
|
110
126
|
|
111
127
|
campos = padrao.merge!(campos)
|
@@ -144,6 +160,17 @@ module Brcobranca
|
|
144
160
|
end
|
145
161
|
end
|
146
162
|
|
163
|
+
# Formata a valor do percentual da multa
|
164
|
+
#
|
165
|
+
# @param tamanho [Integer]
|
166
|
+
# quantidade de caracteres a ser retornado
|
167
|
+
#
|
168
|
+
# @return [String]
|
169
|
+
#
|
170
|
+
def formata_percentual_multa(tamanho = 4)
|
171
|
+
format_value(percentual_multa, tamanho)
|
172
|
+
end
|
173
|
+
|
147
174
|
# Formata a data de cobrança da multa
|
148
175
|
#
|
149
176
|
# @return [String]
|
@@ -169,6 +196,15 @@ module Brcobranca
|
|
169
196
|
format_value(valor, tamanho)
|
170
197
|
end
|
171
198
|
|
199
|
+
def documento_ou_numero
|
200
|
+
documento.present? ? documento : numero
|
201
|
+
end
|
202
|
+
|
203
|
+
def formata_documento_ou_numero(tamanho = 25, caracter = ' ')
|
204
|
+
doc = documento_ou_numero.to_s.gsub(/[^0-9A-Za-z ]/, '')
|
205
|
+
doc.rjust(tamanho, caracter)[0...tamanho]
|
206
|
+
end
|
207
|
+
|
172
208
|
# Formata o campo valor da mora
|
173
209
|
#
|
174
210
|
# @param tamanho [Integer]
|
@@ -1,17 +1,15 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
#
|
3
2
|
|
4
3
|
module Brcobranca
|
5
4
|
module Retorno
|
6
5
|
class Base # Classe base para retornos bancários
|
6
|
+
attr_accessor :codigo_registro
|
7
7
|
attr_accessor :agencia_com_dv
|
8
8
|
attr_accessor :agencia_sem_dv
|
9
9
|
attr_accessor :cedente_com_dv
|
10
10
|
attr_accessor :convenio
|
11
11
|
attr_accessor :nosso_numero
|
12
|
-
attr_accessor :
|
13
|
-
attr_accessor :cod_de_ocorrencia
|
14
|
-
attr_accessor :data_de_ocorrencia
|
12
|
+
attr_accessor :documento_numero
|
15
13
|
attr_accessor :tipo_cobranca
|
16
14
|
attr_accessor :tipo_cobranca_anterior
|
17
15
|
attr_accessor :natureza_recebimento
|
@@ -26,6 +24,8 @@ module Brcobranca
|
|
26
24
|
attr_accessor :banco_recebedor
|
27
25
|
attr_accessor :agencia_recebedora_com_dv
|
28
26
|
attr_accessor :especie_documento
|
27
|
+
attr_accessor :codigo_ocorrencia
|
28
|
+
attr_accessor :motivo_ocorrencia
|
29
29
|
attr_accessor :data_ocorrencia
|
30
30
|
attr_accessor :data_credito
|
31
31
|
attr_accessor :valor_tarifa
|
@@ -1,24 +1,26 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
2
|
require 'parseline'
|
4
3
|
|
5
4
|
module Brcobranca
|
6
5
|
module Retorno
|
7
6
|
module Cnab240
|
8
7
|
class Base < Brcobranca::Retorno::Base
|
8
|
+
|
9
9
|
# Load lines
|
10
|
-
def self.load_lines(file, options
|
10
|
+
def self.load_lines(file, options={})
|
11
11
|
return nil if file.blank?
|
12
12
|
|
13
13
|
codigo_banco = codigo_banco_do_arquivo(file)
|
14
14
|
|
15
15
|
case codigo_banco
|
16
|
-
when
|
17
|
-
Brcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
|
18
|
-
when '104'
|
19
|
-
Brcobranca::Retorno::Cnab240::Caixa.load_lines(file, options)
|
20
|
-
when '033'
|
16
|
+
when "033"
|
21
17
|
Brcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
|
18
|
+
when "085"
|
19
|
+
Brcobranca::Retorno::Cnab240::Cecred.load_lines(file, options)
|
20
|
+
when "748"
|
21
|
+
Brcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
|
22
|
+
when "756"
|
23
|
+
Brcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
|
22
24
|
else
|
23
25
|
Brcobranca::Retorno::RetornoCnab240.load_lines(file, options)
|
24
26
|
end
|
@@ -27,12 +29,13 @@ module Brcobranca
|
|
27
29
|
# Codigo do banco lido do arquivo.
|
28
30
|
# Registro Header [0..2]
|
29
31
|
def self.codigo_banco_do_arquivo(file)
|
30
|
-
arquivo = File.open(file
|
32
|
+
arquivo = File.open(file)
|
31
33
|
header = arquivo.gets
|
32
34
|
codigo_banco = header.blank? ? nil : header[0..2]
|
33
35
|
arquivo.close
|
34
36
|
codigo_banco
|
35
37
|
end
|
38
|
+
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
@@ -22,8 +22,12 @@ module Brcobranca
|
|
22
22
|
# parse.field :valor_tarifa, 198..212
|
23
23
|
# parse.field :agencia_com_dv, 17..22
|
24
24
|
|
25
|
+
parse.field :codigo_ocorrencia, 15..16
|
25
26
|
parse.field :nosso_numero, 39..55
|
26
27
|
parse.field :agencia_recebedora_com_dv, 99..103
|
28
|
+
parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
|
29
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
30
|
+
end
|
27
31
|
|
28
32
|
# REGISTRO_U_FIELDS
|
29
33
|
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab240
|
8
|
+
class Cecred < Brcobranca::Retorno::Cnab240::Base
|
9
|
+
# Regex para remoção de headers e trailers além de registros diferentes de T ou U
|
10
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
|
11
|
+
|
12
|
+
def self.load_lines(file, options = {})
|
13
|
+
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
14
|
+
options = default_options.merge!(options)
|
15
|
+
|
16
|
+
Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
|
17
|
+
retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.generate_retorno_based_on_cnab_lines(cnab_lines)
|
22
|
+
retorno = new
|
23
|
+
cnab_lines.each do |line|
|
24
|
+
if line.tipo_registro == 'T'
|
25
|
+
Line::REGISTRO_T_FIELDS.each do |attr|
|
26
|
+
retorno.send(attr + '=', line.send(attr))
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Line::REGISTRO_U_FIELDS.each do |attr|
|
30
|
+
retorno.send(attr + '=', line.send(attr))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
retorno
|
35
|
+
end
|
36
|
+
|
37
|
+
# Linha de mapeamento do retorno do arquivo CNAB 240
|
38
|
+
# O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
|
39
|
+
# O primeiro é do tipo T que retorna dados gerais sobre a transação
|
40
|
+
# O segundo é do tipo U que retorna os valores da transação
|
41
|
+
class Line < Base
|
42
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
43
|
+
|
44
|
+
REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
|
45
|
+
REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito data_ocorrencia)
|
46
|
+
|
47
|
+
attr_accessor :tipo_registro
|
48
|
+
|
49
|
+
fixed_width_layout do |parse|
|
50
|
+
# Segmento T
|
51
|
+
parse.field :codigo_registro, 7..7
|
52
|
+
parse.field :sequencial, 8..12
|
53
|
+
parse.field :tipo_registro, 13..13
|
54
|
+
parse.field :codigo_ocorrencia, 15..16
|
55
|
+
parse.field :agencia_com_dv, 17..22
|
56
|
+
parse.field :cedente_com_dv, 23..35
|
57
|
+
parse.field :nosso_numero, 37..56
|
58
|
+
parse.field :carteira, 57..57
|
59
|
+
parse.field :data_vencimento, 73..80
|
60
|
+
parse.field :valor_titulo, 81..95
|
61
|
+
parse.field :banco_recebedor, 96..98
|
62
|
+
parse.field :agencia_recebedora_com_dv, 99..104
|
63
|
+
parse.field :valor_tarifa, 198..212
|
64
|
+
parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
|
65
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
66
|
+
end
|
67
|
+
|
68
|
+
# Segmento U
|
69
|
+
parse.field :data_ocorrencia, 137..144
|
70
|
+
parse.field :data_credito, 145..152
|
71
|
+
parse.field :outras_despesas, 107..121
|
72
|
+
parse.field :iof_desconto, 62..76
|
73
|
+
parse.field :valor_abatimento, 47..61
|
74
|
+
parse.field :desconto_concedito, 32..46
|
75
|
+
parse.field :valor_recebido, 77..91
|
76
|
+
parse.field :juros_mora, 17..31
|
77
|
+
parse.field :outros_recebimento, 122..136
|
78
|
+
|
79
|
+
# Dados que não consegui extrair dos registros T e U
|
80
|
+
# parse.field :convenio,31..37
|
81
|
+
# parse.field :tipo_cobranca,80..80
|
82
|
+
# parse.field :tipo_cobranca_anterior,81..81
|
83
|
+
# parse.field :natureza_recebimento,86..87
|
84
|
+
# parse.field :carteira_variacao,91..93
|
85
|
+
# parse.field :desconto,95..99
|
86
|
+
# parse.field :iof,100..104
|
87
|
+
# parse.field :comando,108..109
|
88
|
+
# parse.field :data_liquidacao,110..115
|
89
|
+
# parse.field :especie_documento,173..174
|
90
|
+
# parse.field :valor_tarifa,181..187
|
91
|
+
# parse.field :juros_desconto,201..213
|
92
|
+
# parse.field :abatimento_nao_aproveitado,292..304
|
93
|
+
# parse.field :valor_lancamento,305..317
|
94
|
+
# parse.field :indicativo_lancamento,318..318
|
95
|
+
# parse.field :indicador_valor,319..319
|
96
|
+
# parse.field :valor_ajuste,320..331
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|