brcobranca 9.2.4 → 10.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -9
- data/HISTORY.md +71 -0
- data/README.md +47 -54
- data/Rakefile +4 -4
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/boleto/{cecred.rb → ailos.rb} +7 -5
- data/lib/brcobranca/boleto/banco_brasil.rb +9 -5
- data/lib/brcobranca/boleto/banco_brasilia.rb +5 -5
- data/lib/brcobranca/boleto/banco_nordeste.rb +4 -3
- data/lib/brcobranca/boleto/banestes.rb +4 -3
- data/lib/brcobranca/boleto/banrisul.rb +4 -3
- data/lib/brcobranca/boleto/base.rb +12 -7
- data/lib/brcobranca/boleto/bradesco.rb +4 -3
- data/lib/brcobranca/boleto/caixa.rb +10 -8
- data/lib/brcobranca/boleto/citibank.rb +9 -8
- data/lib/brcobranca/boleto/credisis.rb +6 -4
- data/lib/brcobranca/boleto/hsbc.rb +8 -6
- data/lib/brcobranca/boleto/itau.rb +5 -5
- data/lib/brcobranca/boleto/safra.rb +4 -4
- data/lib/brcobranca/boleto/santander.rb +4 -2
- data/lib/brcobranca/boleto/sicoob.rb +4 -3
- data/lib/brcobranca/boleto/sicredi.rb +6 -3
- data/lib/brcobranca/boleto/template/base.rb +2 -3
- data/lib/brcobranca/boleto/template/rghost.rb +18 -13
- data/lib/brcobranca/boleto/template/rghost_carne.rb +18 -12
- data/lib/brcobranca/boleto/unicred.rb +61 -103
- data/lib/brcobranca/calculo.rb +14 -9
- data/lib/brcobranca/calculo_data.rb +6 -5
- data/lib/brcobranca/currency.rb +10 -10
- data/lib/brcobranca/formatacao.rb +2 -1
- data/lib/brcobranca/formatacao_string.rb +7 -6
- data/lib/brcobranca/limpeza.rb +3 -3
- data/lib/brcobranca/remessa/base.rb +7 -10
- data/lib/brcobranca/remessa/cnab240/{cecred.rb → ailos.rb} +18 -15
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -11
- data/lib/brcobranca/remessa/cnab240/base.rb +56 -39
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +25 -17
- data/lib/brcobranca/remessa/cnab240/caixa.rb +21 -13
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +33 -30
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +14 -7
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +28 -22
- data/lib/brcobranca/remessa/cnab240/unicred.rb +2 -1
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +9 -9
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +29 -28
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +11 -10
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +13 -10
- data/lib/brcobranca/remessa/cnab400/base.rb +22 -9
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +30 -5
- data/lib/brcobranca/remessa/cnab400/citibank.rb +6 -5
- data/lib/brcobranca/remessa/cnab400/credisis.rb +7 -5
- data/lib/brcobranca/remessa/cnab400/itau.rb +9 -6
- data/lib/brcobranca/remessa/cnab400/santander.rb +17 -15
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +8 -11
- data/lib/brcobranca/remessa/cnab400/unicred.rb +185 -69
- data/lib/brcobranca/remessa/pagamento.rb +43 -11
- data/lib/brcobranca/retorno/base.rb +5 -43
- data/lib/brcobranca/retorno/cnab240/{cecred.rb → ailos.rb} +12 -10
- data/lib/brcobranca/retorno/cnab240/base.rb +8 -9
- data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -5
- data/lib/brcobranca/retorno/cnab240/santander.rb +12 -8
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +11 -9
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +12 -9
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +3 -3
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +1 -1
- data/lib/brcobranca/retorno/cnab400/base.rb +13 -12
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +4 -4
- data/lib/brcobranca/retorno/cnab400/credisis.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/itau.rb +6 -5
- data/lib/brcobranca/retorno/cnab400/santander.rb +8 -7
- data/lib/brcobranca/retorno/cnab400/unicred.rb +63 -58
- data/lib/brcobranca/retorno/retorno_cbr643.rb +1 -2
- data/lib/brcobranca/retorno/retorno_cnab240.rb +11 -9
- data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -5
- data/lib/brcobranca/util/date.rb +2 -1
- data/lib/brcobranca/util/empresa.rb +2 -1
- data/lib/brcobranca/util/errors.rb +31 -31
- data/lib/brcobranca/validations.rb +127 -151
- data/lib/brcobranca/version.rb +2 -3
- data/lib/brcobranca.rb +5 -5
- data/spec/brcobranca/base_spec.rb +20 -11
- data/spec/brcobranca/boleto/{cecred_spec.rb → ailos_spec.rb} +13 -12
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +14 -12
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +11 -10
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +2 -3
- data/spec/brcobranca/boleto/banestes_spec.rb +10 -11
- data/spec/brcobranca/boleto/banrisul_spec.rb +10 -12
- data/spec/brcobranca/boleto/bradesco_spec.rb +36 -33
- data/spec/brcobranca/boleto/caixa_spec.rb +11 -12
- data/spec/brcobranca/boleto/citibank_spec.rb +10 -11
- data/spec/brcobranca/boleto/credisis_spec.rb +18 -17
- data/spec/brcobranca/boleto/hsbc_spec.rb +9 -10
- data/spec/brcobranca/boleto/itau_spec.rb +11 -12
- data/spec/brcobranca/boleto/safra_spec.rb +10 -11
- data/spec/brcobranca/boleto/santander_spec.rb +9 -10
- data/spec/brcobranca/boleto/sicoob_spec.rb +10 -11
- data/spec/brcobranca/boleto/sicredi_spec.rb +14 -10
- data/spec/brcobranca/boleto/unicred_spec.rb +28 -38
- data/spec/brcobranca/boletos_em_lote_spec.rb +7 -7
- data/spec/brcobranca/calculo_data_spec.rb +2 -2
- data/spec/brcobranca/calculo_spec.rb +13 -11
- data/spec/brcobranca/currency_spec.rb +26 -26
- data/spec/brcobranca/formatacao_spec.rb +2 -2
- data/spec/brcobranca/formatacao_string_spec.rb +10 -4
- data/spec/brcobranca/limpeza_spec.rb +2 -2
- data/spec/brcobranca/remessa/base_spec.rb +1 -2
- data/spec/brcobranca/remessa/cnab240/{cecred_spec.rb → ailos_spec.rb} +48 -47
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +18 -13
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +33 -10
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +19 -17
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +12 -8
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +28 -26
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +12 -10
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +11 -9
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +6 -3
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +24 -19
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +19 -14
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +17 -15
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +23 -8
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +19 -17
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +14 -12
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +21 -19
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +18 -16
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +24 -22
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +20 -20
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +167 -166
- data/spec/brcobranca/remessa/pagamento_spec.rb +16 -15
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +10 -9
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +4 -2
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +25 -25
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +5 -4
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -2
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +28 -32
- data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +2 -2
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +2 -1
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +2 -1
- data/spec/brcobranca/rghost_spec.rb +4 -4
- data/spec/brcobranca/util/empresa_spec.rb +1 -2
- data/spec/brcobranca_spec.rb +1 -2
- metadata +85 -162
- data/spec/arquivos/CBR64310.RET +0 -28
- data/spec/arquivos/CNAB240.RET +0 -74
- data/spec/arquivos/CNAB240CECRED.RET +0 -10
- data/spec/arquivos/CNAB240SANTANDER.RET +0 -8
- data/spec/arquivos/CNAB240SICOOB.RET +0 -10
- data/spec/arquivos/CNAB240SICREDI.CRT +0 -8
- data/spec/arquivos/CNAB400.RET +0 -54
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +0 -3
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +0 -3
- data/spec/arquivos/CNAB400BANRISUL.RET +0 -3
- data/spec/arquivos/CNAB400BRADESCO.RET +0 -8
- data/spec/arquivos/CNAB400CREDISIS.RET +0 -3
- data/spec/arquivos/CNAB400ITAU.RET +0 -54
- data/spec/arquivos/CNAB400SANTANDER.RET +0 -54
- data/spec/arquivos/CNAB400UNICRED.RET +0 -3
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +0 -4
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +0 -4
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +0 -3
- data/spec/spec.opts +0 -8
- data/spec/spec_helper.rb +0 -38
- data/spec/support/remessa_helpers.rb +0 -13
- data/spec/support/shared_examples/busca_logotipo.rb +0 -15
- data/spec/support/shared_examples/cnab240.rb +0 -259
- data/spec/support/shared_examples/cnab400.rb +0 -180
- data/spec/support/shared_examples/formatos_validos.rb +0 -36
@@ -1,24 +1,29 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab400
|
5
6
|
class Unicred < Brcobranca::Remessa::Cnab400::Base
|
6
|
-
|
7
|
-
|
8
|
-
# Codigo de transmissao fornecido pelo banco
|
9
|
-
attr_accessor :codigo_transmissao
|
7
|
+
# codigo da beneficiario (informado pelo Unicred no cadastramento)
|
8
|
+
attr_accessor :codigo_beneficiario
|
10
9
|
|
11
10
|
validates_presence_of :agencia, :conta_corrente, :documento_cedente,
|
12
|
-
:digito_conta, :
|
11
|
+
:digito_conta, :codigo_beneficiario,
|
12
|
+
message: 'não pode estar em branco.'
|
13
13
|
|
14
|
-
validates_length_of :agencia, maximum: 4,
|
15
|
-
|
16
|
-
validates_length_of :
|
17
|
-
|
18
|
-
validates_length_of :
|
19
|
-
|
14
|
+
validates_length_of :agencia, maximum: 4,
|
15
|
+
message: 'deve ter 4 dígitos.'
|
16
|
+
validates_length_of :conta_corrente, maximum: 5,
|
17
|
+
message: 'deve ter 5 dígitos.'
|
18
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14,
|
19
|
+
message: 'deve ter entre 11 e 14 dígitos.'
|
20
|
+
validates_length_of :carteira, maximum: 2,
|
21
|
+
message: 'deve ter 2 dígitos.'
|
22
|
+
validates_length_of :digito_conta, maximum: 1,
|
23
|
+
message: 'deve ter 1 dígito.'
|
20
24
|
|
21
|
-
validates_inclusion_of :carteira, in: %w
|
25
|
+
validates_inclusion_of :carteira, in: %w[21],
|
26
|
+
message: 'não existente para este banco.'
|
22
27
|
|
23
28
|
# Nova instancia do Unicred
|
24
29
|
def initialize(campos = {})
|
@@ -42,55 +47,113 @@ module Brcobranca
|
|
42
47
|
end
|
43
48
|
|
44
49
|
def cod_banco
|
45
|
-
'
|
50
|
+
'136'
|
46
51
|
end
|
47
52
|
|
48
53
|
def nome_banco
|
49
54
|
'UNICRED'.ljust(15, ' ')
|
50
55
|
end
|
51
56
|
|
52
|
-
|
57
|
+
def identificador_complemento
|
58
|
+
' '
|
59
|
+
end
|
60
|
+
|
61
|
+
# Numero sequencial utilizado para identificar o boleto.
|
62
|
+
# @return [String] 10 caracteres numericos.
|
63
|
+
def nosso_numero(nosso_numero)
|
64
|
+
nosso_numero.to_s.rjust(10, '0')
|
65
|
+
end
|
66
|
+
|
67
|
+
# Digito verificador do nosso numero
|
68
|
+
# @return [Integer] 1 caracteres numericos.
|
69
|
+
def nosso_numero_dv(nosso_numero)
|
70
|
+
nosso_numero.to_s.modulo11(mapeamento: mapeamento_para_modulo_11)
|
71
|
+
end
|
72
|
+
|
73
|
+
def nosso_numero_boleto(nosso_numero)
|
74
|
+
"#{nosso_numero(nosso_numero)}#{nosso_numero_dv(nosso_numero)}"
|
75
|
+
end
|
76
|
+
|
77
|
+
# Retorna o nosso numero
|
53
78
|
#
|
54
79
|
# @return [String]
|
55
|
-
|
80
|
+
def formata_nosso_numero(nosso_numero)
|
81
|
+
nosso_numero_boleto(nosso_numero).to_s
|
82
|
+
end
|
83
|
+
|
84
|
+
def codigo_beneficiario=(valor)
|
85
|
+
@codigo_beneficiario = valor.to_s.rjust(20, '0') if valor
|
86
|
+
end
|
87
|
+
|
56
88
|
def info_conta
|
57
|
-
|
58
|
-
# codigo da transmissao 20
|
59
|
-
"#{codigo_transmissao}"
|
89
|
+
codigo_beneficiario
|
60
90
|
end
|
61
91
|
|
62
92
|
# Complemento do header
|
63
|
-
# (no caso do Unicred, sao apenas espacos em branco)
|
64
93
|
#
|
65
94
|
# @return [String]
|
66
95
|
#
|
67
96
|
def complemento
|
68
|
-
''.rjust(
|
97
|
+
'codigo_beneficiario'.rjust(277, ' ')
|
69
98
|
end
|
70
99
|
|
71
|
-
|
72
|
-
|
73
|
-
# @return [String]
|
74
|
-
#
|
75
|
-
def codigo_carteira
|
76
|
-
codigo_carteira = carteira[1]
|
100
|
+
def sequencial_remessa=(valor)
|
101
|
+
@sequencial_remessa = valor.to_s.rjust(7, '0') if valor
|
77
102
|
end
|
78
103
|
|
79
|
-
def
|
80
|
-
|
104
|
+
def digito_agencia
|
105
|
+
# utilizando a agencia com 4 digitos
|
106
|
+
# para calcular o digito
|
107
|
+
agencia.modulo11(mapeamento: { 10 => 'X' }).to_s
|
81
108
|
end
|
82
109
|
|
83
|
-
|
110
|
+
def digito_conta
|
111
|
+
# utilizando a conta corrente com 5 digitos
|
112
|
+
# para calcular o digito
|
113
|
+
conta_corrente.modulo11(mapeamento: { 10 => '0' }).to_s
|
114
|
+
end
|
115
|
+
|
116
|
+
def mapeamento_para_modulo_11
|
117
|
+
{
|
118
|
+
10 => 0,
|
119
|
+
11 => 0
|
120
|
+
}
|
121
|
+
end
|
122
|
+
|
123
|
+
# Header do arquivo remessa
|
84
124
|
#
|
85
125
|
# @return [String]
|
86
|
-
|
87
|
-
|
126
|
+
#
|
127
|
+
def monta_header
|
128
|
+
# CAMPO TAMANHO VALOR
|
129
|
+
# tipo do registro [1] 0
|
130
|
+
# operacao [1] 1
|
131
|
+
# literal remessa [7] REMESSA
|
132
|
+
# Codigo do serviço [2] 01
|
133
|
+
# cod. servico [15] COBRANCA
|
134
|
+
# info. conta [20]
|
135
|
+
# empresa mae [30]
|
136
|
+
# cod. banco [3]
|
137
|
+
# nome banco [15]
|
138
|
+
# data geracao [6] formato DDMMAA
|
139
|
+
# branco [7]
|
140
|
+
# Codigo da Variacaoo carteira da UNICRED 003
|
141
|
+
# Preencher com 000. [3] 000
|
142
|
+
# Numero Sequencial do arquivo [7]
|
143
|
+
# complemento registro [277]
|
144
|
+
# num. sequencial [6] 000001
|
145
|
+
header = "01REMESSA01COBRANCA #{info_conta}"
|
146
|
+
header += "#{empresa_mae.format_size(30)}#{cod_banco}"
|
147
|
+
header << "#{nome_banco}#{data_geracao} 000"
|
148
|
+
header << "#{sequencial_remessa}#{complemento}000001"
|
149
|
+
header
|
88
150
|
end
|
89
151
|
|
90
152
|
# Detalhe do arquivo
|
91
153
|
#
|
92
154
|
# @param pagamento [PagamentoCnab400]
|
93
|
-
# objeto contendo as informacoes referentes ao
|
155
|
+
# objeto contendo as informacoes referentes ao
|
156
|
+
# boleto (valor, vencimento, cliente)
|
94
157
|
# @param sequencial
|
95
158
|
# num. sequencial do registro no arquivo
|
96
159
|
#
|
@@ -99,42 +162,95 @@ module Brcobranca
|
|
99
162
|
def monta_detalhe(pagamento, sequencial)
|
100
163
|
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
101
164
|
|
102
|
-
|
103
|
-
detalhe
|
104
|
-
|
105
|
-
detalhe
|
106
|
-
|
107
|
-
detalhe <<
|
108
|
-
|
109
|
-
detalhe <<
|
110
|
-
|
111
|
-
detalhe <<
|
112
|
-
|
113
|
-
detalhe <<
|
114
|
-
|
115
|
-
detalhe <<
|
116
|
-
|
117
|
-
detalhe <<
|
118
|
-
|
119
|
-
|
120
|
-
detalhe <<
|
121
|
-
|
122
|
-
detalhe <<
|
123
|
-
|
124
|
-
detalhe <<
|
125
|
-
|
126
|
-
detalhe <<
|
127
|
-
|
128
|
-
detalhe <<
|
129
|
-
|
130
|
-
detalhe << pagamento.
|
131
|
-
|
132
|
-
detalhe << pagamento.
|
133
|
-
|
134
|
-
detalhe << pagamento.
|
135
|
-
|
136
|
-
detalhe <<
|
137
|
-
|
165
|
+
# identificacao transacao 9[01]
|
166
|
+
detalhe = '1'
|
167
|
+
# Agencia do BENEFICIARIO na UNICRED 9[05] 002 a 006
|
168
|
+
detalhe += agencia.rjust(5, '0')
|
169
|
+
# Digito da Agencia 9[01] 007 a 007
|
170
|
+
detalhe << digito_agencia
|
171
|
+
# Conta Corrente 9[12] 008 a 019
|
172
|
+
detalhe << conta_corrente.rjust(12, '0')
|
173
|
+
# Digito da Conta 9[1] 020 a 020
|
174
|
+
detalhe << digito_conta
|
175
|
+
# Zero 9[1] 021 a 021
|
176
|
+
detalhe << '0'
|
177
|
+
# Codigo da Carteira 9[3] 022 a 024
|
178
|
+
detalhe << carteira.rjust(3, '0')
|
179
|
+
# Zeros 9[13] 025 a 037
|
180
|
+
detalhe << ''.rjust(13, '0')
|
181
|
+
# No Controle do Participante Uso
|
182
|
+
# da empresa 9[25] 038 a 062
|
183
|
+
detalhe << ''.rjust(25, ' ')
|
184
|
+
# Codigo do Banco na Camara de Compensacao 9[3] 063 a 065
|
185
|
+
detalhe << cod_banco
|
186
|
+
# Zeros 9[2] 066 a 067
|
187
|
+
detalhe << '00'
|
188
|
+
# Branco 9[25] 068 a 092
|
189
|
+
detalhe << ''.rjust(25, ' ')
|
190
|
+
# Filler 9[01] 093 a 093
|
191
|
+
detalhe << '0'
|
192
|
+
# Codigo da multa 9[1] 094 a 094
|
193
|
+
detalhe << pagamento.codigo_multa
|
194
|
+
# Valor/Percentual da Multa 9[1] 095 a 104
|
195
|
+
detalhe << pagamento.formata_percentual_multa(10)
|
196
|
+
# Tipo de Valor Mora 9[1] 105 a 105
|
197
|
+
detalhe << pagamento.tipo_mora
|
198
|
+
# Identificacao de Titulo Descontavel 9[1] 106 a 106
|
199
|
+
detalhe << 'N'
|
200
|
+
# Branco 9[1] 107 a 108
|
201
|
+
detalhe << ' '
|
202
|
+
# Identificacao da Ocorrencia 9[2] 109 a 110
|
203
|
+
detalhe << pagamento.identificacao_ocorrencia
|
204
|
+
# numero do documento X[10] 111 a 120
|
205
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0')
|
206
|
+
# data do vencimento 9[06] 121 a 126
|
207
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y')
|
208
|
+
# valor do documento 9[13] 127 a 139
|
209
|
+
detalhe << pagamento.formata_valor
|
210
|
+
# Filler 9[10] 140 a 149
|
211
|
+
detalhe << ''.rjust(10, '0')
|
212
|
+
# Codigo do Desconto 9[1] 150 a 150
|
213
|
+
detalhe << pagamento.cod_desconto
|
214
|
+
# data de emissao 9[06] 151 a 156
|
215
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y')
|
216
|
+
# Filler 9[01] 157 a 157
|
217
|
+
detalhe << '0'
|
218
|
+
# Codigo para Protesto 9[1] 158 a 158
|
219
|
+
detalhe << pagamento.codigo_protesto
|
220
|
+
# numero de dias para protesto 9[02] 159 a 160
|
221
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0')
|
222
|
+
# valor mora ao dia 9[13] 161 a 173
|
223
|
+
detalhe << pagamento.formata_valor_mora(13)
|
224
|
+
# data limite para desconto 9[06] 174 a 179
|
225
|
+
detalhe << pagamento.formata_data_desconto
|
226
|
+
# valor do desconto 9[13] 180 a 192
|
227
|
+
detalhe << pagamento.formata_valor_desconto
|
228
|
+
# nosso numero X[11] 193 a 203
|
229
|
+
detalhe << formata_nosso_numero(pagamento.nosso_numero)
|
230
|
+
# Zeros 9[2] 204 a 205
|
231
|
+
detalhe << '00'
|
232
|
+
# valor do abatimento 9[13] 206 a 218
|
233
|
+
detalhe << pagamento.formata_valor_abatimento(13)
|
234
|
+
# Identificacao do Tipo de Inscricao do Pagador 9[2] 219 a 220
|
235
|
+
detalhe << pagamento.identificacao_sacado
|
236
|
+
# documento do pagador 9[14] 221 a 234
|
237
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0')
|
238
|
+
# nome do pagador X[40] 235 a 274
|
239
|
+
detalhe << pagamento.nome_sacado.format_size(40)
|
240
|
+
# endereco do pagador X[40] 275 a 314
|
241
|
+
detalhe << pagamento.endereco_sacado.format_size(40)
|
242
|
+
# bairro do pagador X[12] 315 a 326
|
243
|
+
detalhe << pagamento.bairro_sacado.format_size(12)
|
244
|
+
# cep do pagador 9[08] 327 a 334
|
245
|
+
detalhe << pagamento.cep_sacado
|
246
|
+
# cidade do pagador X[15] 335 a 354
|
247
|
+
detalhe << pagamento.cidade_sacado.format_size(20)
|
248
|
+
# uf do pagador X[02] 355 a 356
|
249
|
+
detalhe << pagamento.uf_sacado
|
250
|
+
# nome do sacador/avalista X[38] 357 a 394
|
251
|
+
detalhe << pagamento.nome_avalista.format_size(38)
|
252
|
+
# numero do registro no arquivo 9[06] 395 a 400
|
253
|
+
detalhe << sequencial.to_s.rjust(6, '0')
|
138
254
|
detalhe
|
139
255
|
end
|
140
256
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/object/blank'
|
4
|
+
|
2
5
|
module Brcobranca
|
3
6
|
module Remessa
|
4
7
|
class Pagamento
|
5
|
-
|
6
8
|
include Brcobranca::Validations
|
7
9
|
|
8
10
|
# <b>REQUERIDO</b>: nosso numero
|
@@ -61,6 +63,10 @@ module Brcobranca
|
|
61
63
|
attr_accessor :data_segundo_desconto
|
62
64
|
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
63
65
|
attr_accessor :valor_segundo_desconto
|
66
|
+
# <b>OPCIONAL</b>: data limite para o terceiro desconto
|
67
|
+
attr_accessor :data_terceiro_desconto
|
68
|
+
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
69
|
+
attr_accessor :valor_terceiro_desconto
|
64
70
|
# <b>OPCIONAL</b>: espécie do título
|
65
71
|
attr_accessor :especie_titulo
|
66
72
|
# <b>OPCIONAL</b>: código da multa
|
@@ -87,8 +93,8 @@ module Brcobranca
|
|
87
93
|
attr_accessor :parcela
|
88
94
|
|
89
95
|
validates_presence_of :nosso_numero, :data_vencimento, :valor,
|
90
|
-
|
91
|
-
|
96
|
+
:documento_sacado, :nome_sacado, :endereco_sacado,
|
97
|
+
:cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
|
92
98
|
validates_length_of :uf_sacado, is: 2, message: 'deve ter 2 dígitos.'
|
93
99
|
validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.'
|
94
100
|
validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.'
|
@@ -102,11 +108,13 @@ module Brcobranca
|
|
102
108
|
def initialize(campos = {})
|
103
109
|
padrao = {
|
104
110
|
data_emissao: Date.current,
|
105
|
-
data_segundo_desconto:'00-00-00',
|
106
|
-
|
111
|
+
data_segundo_desconto: '00-00-00',
|
112
|
+
data_terceiro_desconto: '00-00-00',
|
113
|
+
tipo_mora: '3',
|
107
114
|
valor_mora: 0.0,
|
108
115
|
valor_desconto: 0.0,
|
109
116
|
valor_segundo_desconto: 0.0,
|
117
|
+
valor_terceiro_desconto: 0.0,
|
110
118
|
valor_iof: 0.0,
|
111
119
|
valor_abatimento: 0.0,
|
112
120
|
nome_avalista: '',
|
@@ -138,7 +146,7 @@ module Brcobranca
|
|
138
146
|
#
|
139
147
|
def formata_data_desconto(formato = '%d%m%y')
|
140
148
|
data_desconto.strftime(formato)
|
141
|
-
rescue
|
149
|
+
rescue StandardError
|
142
150
|
if formato == '%d%m%y'
|
143
151
|
'000000'
|
144
152
|
else
|
@@ -152,7 +160,21 @@ module Brcobranca
|
|
152
160
|
#
|
153
161
|
def formata_data_segundo_desconto(formato = '%d%m%y')
|
154
162
|
data_segundo_desconto.strftime(formato)
|
155
|
-
rescue
|
163
|
+
rescue StandardError
|
164
|
+
if formato == '%d%m%y'
|
165
|
+
'000000'
|
166
|
+
else
|
167
|
+
'00000000'
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# Formata a data de terceiro desconto de acordo com o formato passado
|
172
|
+
#
|
173
|
+
# @return [String]
|
174
|
+
#
|
175
|
+
def formata_data_terceiro_desconto(formato = '%d%m%y')
|
176
|
+
data_terceiro_desconto.strftime(formato)
|
177
|
+
rescue StandardError
|
156
178
|
if formato == '%d%m%y'
|
157
179
|
'000000'
|
158
180
|
else
|
@@ -177,7 +199,7 @@ module Brcobranca
|
|
177
199
|
#
|
178
200
|
def formata_data_multa(formato = '%d%m%y')
|
179
201
|
data_multa.strftime(formato)
|
180
|
-
rescue
|
202
|
+
rescue StandardError
|
181
203
|
if formato == '%d%m%y'
|
182
204
|
'000000'
|
183
205
|
else
|
@@ -241,6 +263,15 @@ module Brcobranca
|
|
241
263
|
format_value(valor_segundo_desconto, tamanho)
|
242
264
|
end
|
243
265
|
|
266
|
+
# Formata o campo valor do terceiro desconto
|
267
|
+
#
|
268
|
+
# @param tamanho [Integer]
|
269
|
+
# quantidade de caracteres a ser retornado
|
270
|
+
#
|
271
|
+
def formata_valor_terceiro_desconto(tamanho = 13)
|
272
|
+
format_value(valor_terceiro_desconto, tamanho)
|
273
|
+
end
|
274
|
+
|
244
275
|
# Formata o campo valor do IOF
|
245
276
|
#
|
246
277
|
# @param tamanho [Integer]
|
@@ -273,15 +304,16 @@ module Brcobranca
|
|
273
304
|
#
|
274
305
|
def identificacao_avalista(zero = true)
|
275
306
|
return '0' if documento_avalista.nil?
|
307
|
+
|
276
308
|
Brcobranca::Util::Empresa.new(documento_avalista, zero).tipo
|
277
309
|
end
|
278
310
|
|
279
311
|
private
|
280
312
|
|
281
313
|
def format_value(value, tamanho)
|
282
|
-
raise ValorInvalido, 'Deve ser um Float' unless value.to_s
|
314
|
+
raise ValorInvalido, 'Deve ser um Float' unless /\./.match?(value.to_s)
|
283
315
|
|
284
|
-
|
316
|
+
format('%.2f', value).delete('.').rjust(tamanho, '0')
|
285
317
|
end
|
286
318
|
end
|
287
319
|
end
|
@@ -1,49 +1,11 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Brcobranca
|
4
4
|
module Retorno
|
5
|
-
|
6
|
-
|
7
|
-
attr_accessor :agencia_com_dv
|
8
|
-
|
9
|
-
attr_accessor :cedente_com_dv
|
10
|
-
attr_accessor :convenio
|
11
|
-
attr_accessor :nosso_numero
|
12
|
-
attr_accessor :documento_numero
|
13
|
-
attr_accessor :tipo_cobranca
|
14
|
-
attr_accessor :tipo_cobranca_anterior
|
15
|
-
attr_accessor :natureza_recebimento
|
16
|
-
attr_accessor :carteira_variacao
|
17
|
-
attr_accessor :desconto
|
18
|
-
attr_accessor :iof
|
19
|
-
attr_accessor :carteira
|
20
|
-
attr_accessor :comando
|
21
|
-
attr_accessor :data_liquidacao
|
22
|
-
attr_accessor :data_vencimento
|
23
|
-
attr_accessor :valor_titulo
|
24
|
-
attr_accessor :banco_recebedor
|
25
|
-
attr_accessor :agencia_recebedora_com_dv
|
26
|
-
attr_accessor :especie_documento
|
27
|
-
attr_accessor :codigo_ocorrencia
|
28
|
-
attr_accessor :motivo_ocorrencia
|
29
|
-
attr_accessor :data_ocorrencia
|
30
|
-
attr_accessor :data_credito
|
31
|
-
attr_accessor :valor_tarifa
|
32
|
-
attr_accessor :outras_despesas
|
33
|
-
attr_accessor :juros_desconto
|
34
|
-
attr_accessor :iof_desconto
|
35
|
-
attr_accessor :valor_abatimento
|
36
|
-
attr_accessor :desconto_concedito
|
37
|
-
attr_accessor :valor_recebido
|
38
|
-
attr_accessor :juros_mora
|
39
|
-
attr_accessor :outros_recebimento
|
40
|
-
attr_accessor :abatimento_nao_aproveitado
|
41
|
-
attr_accessor :valor_lancamento
|
42
|
-
attr_accessor :indicativo_lancamento
|
43
|
-
attr_accessor :indicador_valor
|
44
|
-
attr_accessor :valor_ajuste
|
45
|
-
attr_accessor :sequencial
|
46
|
-
attr_accessor :arquivo
|
5
|
+
# Classe base para retornos bancários
|
6
|
+
class Base
|
7
|
+
attr_accessor :codigo_registro, :agencia_com_dv, :agencia_sem_dv, :cedente_com_dv, :convenio, :nosso_numero,
|
8
|
+
:documento_numero, :tipo_cobranca, :tipo_cobranca_anterior, :natureza_recebimento, :carteira_variacao, :desconto, :iof, :carteira, :comando, :data_liquidacao, :data_vencimento, :valor_titulo, :banco_recebedor, :agencia_recebedora_com_dv, :especie_documento, :codigo_ocorrencia, :motivo_ocorrencia, :data_ocorrencia, :data_credito, :valor_tarifa, :outras_despesas, :juros_desconto, :iof_desconto, :valor_abatimento, :desconto_concedito, :valor_recebido, :juros_mora, :outros_recebimento, :abatimento_nao_aproveitado, :valor_lancamento, :indicativo_lancamento, :indicador_valor, :valor_ajuste, :sequencial, :arquivo
|
47
9
|
end
|
48
10
|
end
|
49
11
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'parseline'
|
4
4
|
|
5
5
|
module Brcobranca
|
6
6
|
module Retorno
|
7
7
|
module Cnab240
|
8
|
-
class
|
8
|
+
class Ailos < Brcobranca::Retorno::Cnab240::Base
|
9
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].*$).)
|
10
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/.freeze
|
11
11
|
|
12
12
|
def self.load_lines(file, options = {})
|
13
13
|
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
@@ -23,11 +23,11 @@ module Brcobranca
|
|
23
23
|
cnab_lines.each do |line|
|
24
24
|
if line.tipo_registro == 'T'
|
25
25
|
Line::REGISTRO_T_FIELDS.each do |attr|
|
26
|
-
retorno.send(attr
|
26
|
+
retorno.send("#{attr}=", line.send(attr))
|
27
27
|
end
|
28
28
|
else
|
29
29
|
Line::REGISTRO_U_FIELDS.each do |attr|
|
30
|
-
retorno.send(attr
|
30
|
+
retorno.send("#{attr}=", line.send(attr))
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -41,8 +41,10 @@ module Brcobranca
|
|
41
41
|
class Line < Base
|
42
42
|
extend ParseLine::FixedWidth # Extendendo parseline
|
43
43
|
|
44
|
-
REGISTRO_T_FIELDS = %w
|
45
|
-
|
44
|
+
REGISTRO_T_FIELDS = %w[codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira
|
45
|
+
data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia].freeze
|
46
|
+
REGISTRO_U_FIELDS = %w[desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido
|
47
|
+
outras_despesas outros_recebimento data_credito data_ocorrencia].freeze
|
46
48
|
|
47
49
|
attr_accessor :tipo_registro
|
48
50
|
|
@@ -61,9 +63,9 @@ module Brcobranca
|
|
61
63
|
parse.field :banco_recebedor, 96..98
|
62
64
|
parse.field :agencia_recebedora_com_dv, 99..104
|
63
65
|
parse.field :valor_tarifa, 198..212
|
64
|
-
parse.field :motivo_ocorrencia, 213..222,
|
65
|
-
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
66
|
-
|
66
|
+
parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
|
67
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
68
|
+
}
|
67
69
|
|
68
70
|
# Segmento U
|
69
71
|
parse.field :data_ocorrencia, 137..144
|
@@ -1,25 +1,25 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'parseline'
|
3
4
|
|
4
5
|
module Brcobranca
|
5
6
|
module Retorno
|
6
7
|
module Cnab240
|
7
8
|
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
|
16
|
+
when '033'
|
17
17
|
Brcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
|
18
|
-
when
|
19
|
-
Brcobranca::Retorno::Cnab240::
|
20
|
-
when
|
18
|
+
when '085'
|
19
|
+
Brcobranca::Retorno::Cnab240::Ailos.load_lines(file, options)
|
20
|
+
when '748'
|
21
21
|
Brcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
|
22
|
-
when
|
22
|
+
when '756'
|
23
23
|
Brcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
|
24
24
|
else
|
25
25
|
Brcobranca::Retorno::RetornoCnab240.load_lines(file, options)
|
@@ -35,7 +35,6 @@ module Brcobranca
|
|
35
35
|
arquivo.close
|
36
36
|
codigo_banco
|
37
37
|
end
|
38
|
-
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
#
|
2
|
-
#
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module Brcobranca
|
5
4
|
module Retorno
|
@@ -25,9 +24,9 @@ module Brcobranca
|
|
25
24
|
parse.field :codigo_ocorrencia, 15..16
|
26
25
|
parse.field :nosso_numero, 39..55
|
27
26
|
parse.field :agencia_recebedora_com_dv, 99..103
|
28
|
-
parse.field :motivo_ocorrencia, 213..222,
|
29
|
-
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
30
|
-
|
27
|
+
parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
|
28
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
29
|
+
}
|
31
30
|
|
32
31
|
# REGISTRO_U_FIELDS
|
33
32
|
|