brcobranca 9.2.4 → 10.1.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 +86 -26
- data/HISTORY.md +71 -0
- data/README.md +52 -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/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/{cecred.rb → ailos.rb} +7 -5
- data/lib/brcobranca/boleto/banco_brasil.rb +14 -6
- 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 +14 -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 +6 -3
- data/lib/brcobranca/boleto/template/rghost.rb +18 -13
- data/lib/brcobranca/boleto/template/rghost2.rb +255 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +279 -0
- 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 +54 -20
- 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 +6 -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 +7 -5
- metadata +40 -248
- 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/brcobranca/base_spec.rb +0 -170
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +0 -334
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +0 -152
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +0 -161
- data/spec/brcobranca/boleto/banestes_spec.rb +0 -194
- data/spec/brcobranca/boleto/banrisul_spec.rb +0 -182
- data/spec/brcobranca/boleto/bradesco_spec.rb +0 -211
- data/spec/brcobranca/boleto/caixa_spec.rb +0 -161
- data/spec/brcobranca/boleto/cecred_spec.rb +0 -147
- data/spec/brcobranca/boleto/citibank_spec.rb +0 -196
- data/spec/brcobranca/boleto/credisis_spec.rb +0 -159
- data/spec/brcobranca/boleto/hsbc_spec.rb +0 -172
- data/spec/brcobranca/boleto/itau_spec.rb +0 -262
- data/spec/brcobranca/boleto/safra_spec.rb +0 -172
- data/spec/brcobranca/boleto/santander_spec.rb +0 -143
- data/spec/brcobranca/boleto/sicoob_spec.rb +0 -193
- data/spec/brcobranca/boleto/sicredi_spec.rb +0 -190
- data/spec/brcobranca/boleto/unicred_spec.rb +0 -149
- data/spec/brcobranca/boletos_em_lote_spec.rb +0 -38
- data/spec/brcobranca/calculo_data_spec.rb +0 -33
- data/spec/brcobranca/calculo_spec.rb +0 -185
- data/spec/brcobranca/currency_spec.rb +0 -79
- data/spec/brcobranca/formatacao_spec.rb +0 -46
- data/spec/brcobranca/formatacao_string_spec.rb +0 -25
- data/spec/brcobranca/limpeza_spec.rb +0 -10
- data/spec/brcobranca/remessa/base_spec.rb +0 -67
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +0 -217
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +0 -91
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +0 -163
- data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +0 -164
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +0 -268
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +0 -198
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +0 -201
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +0 -193
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +0 -187
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +0 -183
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +0 -187
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +0 -190
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +0 -53
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +0 -201
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +0 -126
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +0 -188
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +0 -190
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +0 -152
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +0 -217
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +0 -185
- data/spec/brcobranca/remessa/pagamento_spec.rb +0 -227
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +0 -23
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +0 -50
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +0 -50
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +0 -50
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +0 -31
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +0 -36
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +0 -39
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +0 -41
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +0 -57
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +0 -58
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +0 -25
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +0 -58
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +0 -39
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +0 -42
- data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +0 -69
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +0 -57
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +0 -52
- data/spec/brcobranca/rghost_spec.rb +0 -29
- data/spec/brcobranca/util/empresa_spec.rb +0 -36
- data/spec/brcobranca_spec.rb +0 -34
- 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,140 +1,98 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
module Brcobranca
|
4
4
|
module Boleto
|
5
|
-
|
6
|
-
|
7
|
-
attr_accessor :
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
validates_length_of :
|
14
|
-
|
15
|
-
# Carteira
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
validates_length_of :posto, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
21
|
-
validates_length_of :byte_idt, is: 1, message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
|
22
|
-
validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
5
|
+
# Banco Unicred
|
6
|
+
class Unicred < Base
|
7
|
+
attr_accessor :conta_corrente_dv
|
8
|
+
|
9
|
+
validates_length_of :agencia, maximum: 4, message:
|
10
|
+
'deve ser menor ou igual a 4 dígitos.'
|
11
|
+
validates_length_of :nosso_numero, maximum: 10, message:
|
12
|
+
'deve ser menor ou igual a 10 dígitos.'
|
13
|
+
validates_length_of :conta_corrente, maximum: 9, message:
|
14
|
+
'deve ser menor ou igual a 9 dígitos.'
|
15
|
+
# Carteira com 2(dois) caracteres ( SEMPRE 21 )
|
16
|
+
validates_length_of :carteira, maximum: 2, message:
|
17
|
+
'deve ser menor ou igual a 2 dígitos.'
|
18
|
+
validates_length_of :conta_corrente_dv, maximum: 1, message:
|
19
|
+
'deve ser menor ou igual a 1 dígitos.'
|
23
20
|
|
24
21
|
# Nova instancia do Unicred
|
25
22
|
# @param (see Brcobranca::Boleto::Base#initialize)
|
26
23
|
def initialize(campos = {})
|
27
|
-
campos = {
|
28
|
-
|
29
|
-
local_pagamento: 'PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DA UNICRED'
|
24
|
+
campos = {
|
25
|
+
carteira: '21',
|
26
|
+
local_pagamento: 'PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DA UNICRED',
|
27
|
+
aceite: 'N'
|
30
28
|
}.merge!(campos)
|
31
29
|
super(campos)
|
32
30
|
end
|
33
31
|
|
34
|
-
# Codigo do banco emissor
|
32
|
+
# Codigo do banco emissor 3 digitos sempre
|
35
33
|
#
|
36
|
-
# @return [String] 3 caracteres
|
34
|
+
# @return [String] 3 caracteres numericos.
|
37
35
|
def banco
|
38
|
-
'
|
39
|
-
end
|
40
|
-
|
41
|
-
# Carteira
|
42
|
-
#
|
43
|
-
# @return [String] 2 caracteres numéricos.
|
44
|
-
def carteira=(valor)
|
45
|
-
@carteira = valor.to_s.rjust(1, '0') if valor
|
36
|
+
'136'
|
46
37
|
end
|
47
38
|
|
48
|
-
#
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
@posto = valor.to_s.rjust(2, '0') if valor
|
39
|
+
# Agência do cliente junto ao banco.
|
40
|
+
# @return [String] 4 caracteres numéricos.
|
41
|
+
def agencia=(valor)
|
42
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
53
43
|
end
|
54
44
|
|
55
|
-
#
|
56
|
-
# @return [String]
|
45
|
+
# Conta corrente
|
46
|
+
# @return [String] 9 caracteres numéricos.
|
57
47
|
def conta_corrente=(valor)
|
58
|
-
@conta_corrente = valor.to_s.rjust(
|
48
|
+
@conta_corrente = valor.to_s.rjust(9, '0') if valor
|
59
49
|
end
|
60
50
|
|
61
|
-
#
|
62
|
-
# @return [String]
|
63
|
-
def
|
64
|
-
@
|
51
|
+
# Número seqüencial utilizado para identificar o boleto.
|
52
|
+
# @return [String] 10 caracteres numéricos.
|
53
|
+
def nosso_numero=(valor)
|
54
|
+
@nosso_numero = valor.to_s.rjust(10, '0') if valor
|
65
55
|
end
|
66
56
|
|
67
|
-
# Dígito verificador do
|
68
|
-
#
|
69
|
-
|
70
|
-
|
57
|
+
# Dígito verificador do nosso número.
|
58
|
+
#
|
59
|
+
# @return [String] 1 caracteres numéricos.
|
60
|
+
def nosso_numero_dv
|
61
|
+
nosso_numero.to_s.modulo11(mapeamento: {
|
62
|
+
10 => 0,
|
63
|
+
11 => 0
|
64
|
+
})
|
71
65
|
end
|
72
66
|
|
73
67
|
# Nosso número para exibir no boleto.
|
74
|
-
# O campo Nosso Número deve ser apresentado no formato AA/BXXXXX-D, onde:
|
75
|
-
# AA = Ano atual
|
76
|
-
# B = Byte que pode ser de 2 a 9. Somente será 1 se forem boletos pré-impressos.
|
77
|
-
# XXXXX = número sequencial
|
78
|
-
# D = dígito verificador calculado
|
79
68
|
# @return [String]
|
80
69
|
# @example
|
81
|
-
# boleto.nosso_numero_boleto #=> "
|
70
|
+
# boleto.nosso_numero_boleto #=> "12345678-4"
|
82
71
|
def nosso_numero_boleto
|
83
|
-
"#{
|
84
|
-
end
|
85
|
-
|
86
|
-
def nosso_numero_codigo_barra
|
87
|
-
nosso_numero_boleto.gsub(/\D/, '')
|
88
|
-
end
|
89
|
-
|
90
|
-
def nosso_numero_with_byte_idt
|
91
|
-
"#{data_processamento.strftime('%y')}#{byte_idt}#{nosso_numero}"
|
92
|
-
end
|
93
|
-
|
94
|
-
# Número seqüencial utilizado para identificar o boleto.
|
95
|
-
# @return [String] 5 caracteres numéricos.
|
96
|
-
def nosso_numero=(valor)
|
97
|
-
@nosso_numero = valor.to_s.rjust(5, '0') if valor
|
98
|
-
end
|
99
|
-
|
100
|
-
# Dígito verificador do nosso número
|
101
|
-
# @return [Integer] 1 caracteres numéricos.
|
102
|
-
def nosso_numero_dv
|
103
|
-
"#{agencia_posto_conta}#{nosso_numero_with_byte_idt}"
|
104
|
-
.modulo11(mapeamento: mapeamento_para_modulo_11)
|
72
|
+
"#{nosso_numero}-#{nosso_numero_dv}"
|
105
73
|
end
|
106
74
|
|
75
|
+
# Agência + conta corrente do cliente para exibir no boleto.
|
76
|
+
# @return [String]
|
77
|
+
# @example
|
78
|
+
# boleto.agencia_conta_boleto #=> "08111 / 536788-8"
|
107
79
|
def agencia_conta_boleto
|
108
|
-
"#{agencia}
|
109
|
-
end
|
110
|
-
|
111
|
-
def agencia_posto_conta
|
112
|
-
"#{agencia}#{posto}#{convenio}"
|
80
|
+
"#{agencia} / #{conta_corrente}-#{conta_corrente_dv}"
|
113
81
|
end
|
114
82
|
|
115
83
|
# Segunda parte do código de barras.
|
116
|
-
# Posição
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
124
|
-
#
|
125
|
-
#
|
84
|
+
# Posição | Tamanho | Picture | Conteúdo
|
85
|
+
# 01-03 | 3 | 9(3) | Identificação da instituição financeira - 136
|
86
|
+
# 04-04 | 1 | 9 | Código moeda (9 – Real)
|
87
|
+
# 05-05 | 1 | 9 | Dígito verificador do código de barras (DV)
|
88
|
+
# 06-19 | 14 | 9(4) | Posições 06 a 09 – fator de vencimento
|
89
|
+
# | | 9(8)v99 | Posições 10 a 19 – valor nominal do título
|
90
|
+
# 20-23 | 4 | 4 | Agência BENEFICIÁRIO (Sem o dígito verificador)
|
91
|
+
# 24-33 | 10 | 10 | Conta do BENEFICIÁRIO (Com o dígito verificador)
|
92
|
+
# 34–44 | 11 | 11 | Nosso Número (Com o dígito verificador)
|
93
|
+
# @return [String] 25 caracteres numéricos.
|
126
94
|
def codigo_barras_segunda_parte
|
127
|
-
|
128
|
-
campo_livre + campo_livre.modulo11(mapeamento: mapeamento_para_modulo_11).to_s
|
129
|
-
end
|
130
|
-
|
131
|
-
private
|
132
|
-
|
133
|
-
def mapeamento_para_modulo_11
|
134
|
-
{
|
135
|
-
10 => 0,
|
136
|
-
11 => 0
|
137
|
-
}
|
95
|
+
"#{agencia}#{conta_corrente}#{conta_corrente_dv}#{nosso_numero}#{nosso_numero_dv}"
|
138
96
|
end
|
139
97
|
end
|
140
98
|
end
|
data/lib/brcobranca/calculo.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# @author Kivanio Barbosa
|
4
5
|
module Brcobranca
|
@@ -14,7 +15,7 @@ module Brcobranca
|
|
14
15
|
total = 0
|
15
16
|
multiplicador = 2
|
16
17
|
|
17
|
-
to_s.
|
18
|
+
to_s.chars.reverse!.each do |caracter|
|
18
19
|
total += (caracter.to_i * multiplicador).soma_digitos
|
19
20
|
multiplicador = multiplicador == 2 ? 1 : 2
|
20
21
|
end
|
@@ -35,7 +36,7 @@ module Brcobranca
|
|
35
36
|
options[:multiplicador] ||= [9, 8, 7, 6, 5, 4, 3, 2]
|
36
37
|
|
37
38
|
total = multiplicador(fatores: options[:multiplicador], reverse: options[:reverse])
|
38
|
-
valor =
|
39
|
+
valor = _block ? yield(total) : (total % 11)
|
39
40
|
|
40
41
|
options[:mapeamento][valor] || valor
|
41
42
|
end
|
@@ -56,8 +57,8 @@ module Brcobranca
|
|
56
57
|
# 13 (-9 ) #=> 4
|
57
58
|
# 18 (-9 ) #=> 9
|
58
59
|
def soma_digitos
|
59
|
-
total =
|
60
|
-
total
|
60
|
+
total = to_i
|
61
|
+
total -= 9 if total > 9
|
61
62
|
total
|
62
63
|
end
|
63
64
|
|
@@ -73,11 +74,11 @@ module Brcobranca
|
|
73
74
|
total = 0
|
74
75
|
multiplicador_posicao = 0
|
75
76
|
fatores = options[:fatores]
|
76
|
-
numeros = options[:reverse].nil? ? to_s.
|
77
|
+
numeros = options[:reverse].nil? ? to_s.chars.reverse! : to_s.chars
|
77
78
|
|
78
79
|
numeros.each do |caracter|
|
79
80
|
fator = fatores[multiplicador_posicao]
|
80
|
-
total +=
|
81
|
+
total += _block ? yield(caracter, fator) : (caracter.to_i * fator)
|
81
82
|
multiplicador_posicao = multiplicador_posicao < (fatores.size - 1) ? (multiplicador_posicao + 1) : 0
|
82
83
|
end
|
83
84
|
total
|
@@ -91,7 +92,9 @@ module Brcobranca
|
|
91
92
|
raise ArgumentError, 'Número inválido' unless is_number?
|
92
93
|
|
93
94
|
digito_1 = modulo10
|
94
|
-
digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7])
|
95
|
+
digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) do |total|
|
96
|
+
(total < 11 ? total : total % 11)
|
97
|
+
end
|
95
98
|
|
96
99
|
while digito_2 == 1
|
97
100
|
digito_1 = if digito_1 == 9
|
@@ -100,7 +103,9 @@ module Brcobranca
|
|
100
103
|
digito_1 + 1
|
101
104
|
end
|
102
105
|
|
103
|
-
digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7])
|
106
|
+
digito_2 = "#{self}#{digito_1}".modulo11(multiplicador: [2, 3, 4, 5, 6, 7]) do |total|
|
107
|
+
(total < 11 ? total : total % 11)
|
108
|
+
end
|
104
109
|
end
|
105
110
|
|
106
111
|
digito_2 = 11 - digito_2 if digito_2 != 0
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# @author Kivanio Barbosa
|
4
5
|
|
@@ -8,11 +9,11 @@ module Brcobranca
|
|
8
9
|
# Métodos auxiliares de cálculos envolvendo Datas.
|
9
10
|
module CalculoData
|
10
11
|
# Calcula o número de dias corridos entre a <b>data base ("Fixada" em 07.10.1997)</b> e a <b>data de vencimento</b> desejada.
|
11
|
-
# A partir de 22.02.2025, o fator retorna para '1000' adicionando- se '1' a cada dia subsequente a este fator
|
12
|
+
# A partir de 22.02.2025, o fator retorna para '1000' adicionando- se '1' a cada dia subsequente a este fator
|
12
13
|
# até que chegue a 9999 novamente onde deve ser usada nova data base começando de 1000.
|
13
14
|
#
|
14
|
-
# Somente serão considerados válidos para pagamento os boletos com 3.000 fatores de vencimento anteriores
|
15
|
-
# e 5.500 fatores futuros, ambos em relação a data atual.
|
15
|
+
# Somente serão considerados válidos para pagamento os boletos com 3.000 fatores de vencimento anteriores
|
16
|
+
# e 5.500 fatores futuros, ambos em relação a data atual.
|
16
17
|
# Boletos fora deste controle não serão considerados validos para pagamento na rede bancária.
|
17
18
|
# Ex. Hoje é 13/03/2014 (fator 6.001)
|
18
19
|
# Limite para emissão ou pagamento de boletos vencido: 24/12/2005 (fator 3.000)
|
@@ -25,7 +26,7 @@ module Brcobranca
|
|
25
26
|
data_base = Date.parse '1997-10-07'
|
26
27
|
fator_vencimento = Integer(self - data_base)
|
27
28
|
while fator_vencimento > 9999
|
28
|
-
data_base
|
29
|
+
data_base += 10_000
|
29
30
|
fator_vencimento = Integer(self - data_base) + 1000
|
30
31
|
end
|
31
32
|
fator_vencimento.to_s
|
data/lib/brcobranca/currency.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
#
|
2
|
-
#
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
3
|
# @author Fernando Vieira do http://simplesideias.com.br
|
5
|
-
module Brcobranca
|
6
|
-
module Currency
|
4
|
+
module Brcobranca # :nodoc:[all]
|
5
|
+
module Currency # :nodoc:[all]
|
7
6
|
# Implementação feita por Fernando Vieira do http://simplesideias.com.br
|
8
7
|
# post http://simplesideias.com.br/usando-number_to_currency-em-modelos-no-rails
|
9
8
|
BRL = { delimiter: '.', separator: ',', unit: 'R$', precision: 2, position: 'before' }.freeze
|
10
9
|
USD = { delimiter: ',', separator: '.', unit: 'US$', precision: 2, position: 'before' }.freeze
|
11
10
|
DEFAULT = BRL.merge(unit: '')
|
12
11
|
|
13
|
-
module String
|
12
|
+
module String # :nodoc:[all]
|
14
13
|
def to_number(_options = {})
|
15
14
|
return tr(',', '.').to_f if numeric?
|
15
|
+
|
16
16
|
nil
|
17
17
|
end
|
18
18
|
|
19
19
|
def numeric?
|
20
|
-
|
20
|
+
/^(\+|-)?[0-9]+((\.|,)[0-9]+)?$/.match?(self)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
module Number
|
24
|
+
module Number # :nodoc:[all]
|
25
25
|
def to_currency(options = {})
|
26
26
|
number = self
|
27
27
|
default = Brcobranca::Currency::DEFAULT
|
@@ -29,14 +29,14 @@ module Brcobranca #:nodoc:[all]
|
|
29
29
|
precision = options[:precision] || default[:precision]
|
30
30
|
unit = options[:unit] || default[:unit]
|
31
31
|
position = options[:position] || default[:position]
|
32
|
-
separator = precision
|
32
|
+
separator = precision.positive? ? options[:separator] || default[:separator] : ''
|
33
33
|
delimiter = options[:delimiter] || default[:delimiter]
|
34
34
|
|
35
35
|
begin
|
36
36
|
parts = number.with_precision(precision).split('.')
|
37
37
|
number = parts[0].to_i.with_delimiter(delimiter) + separator + parts[1].to_s
|
38
38
|
position == 'before' ? unit + number : number + unit
|
39
|
-
rescue
|
39
|
+
rescue StandardError
|
40
40
|
number
|
41
41
|
end
|
42
42
|
end
|
@@ -47,7 +47,7 @@ module Brcobranca #:nodoc:[all]
|
|
47
47
|
parts = number.to_s.split(separator)
|
48
48
|
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
|
49
49
|
parts.join separator
|
50
|
-
rescue
|
50
|
+
rescue StandardError
|
51
51
|
self
|
52
52
|
end
|
53
53
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
# Métodos auxiliares de formatação de strings
|
4
5
|
module FormatacaoString
|
@@ -18,16 +19,16 @@ module Brcobranca
|
|
18
19
|
|
19
20
|
def truncate(truncate_at)
|
20
21
|
return dup unless length > truncate_at
|
21
|
-
|
22
|
+
|
23
|
+
(self[0, truncate_at]).to_s
|
22
24
|
end
|
23
25
|
|
24
26
|
def remove_accents
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
tr(
|
28
|
+
'ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž',
|
29
|
+
'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz'
|
28
30
|
)
|
29
31
|
end
|
30
|
-
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
data/lib/brcobranca/limpeza.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
module Brcobranca
|
4
4
|
module Limpeza
|
5
5
|
# Transforma Float em String preservando o zero a direita.
|
@@ -9,7 +9,7 @@ module Brcobranca
|
|
9
9
|
# 1.9 #=> 190
|
10
10
|
# 1.93 #=> 193
|
11
11
|
def limpa_valor_moeda
|
12
|
-
inicio, fim = to_s.split(
|
12
|
+
inicio, fim = to_s.split('.')
|
13
13
|
(inicio + fim.ljust(2, '0'))
|
14
14
|
end
|
15
15
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
2
|
-
require 'unidecoder'
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
3
|
+
require 'active_support/core_ext/object/blank'
|
4
4
|
module Brcobranca
|
5
5
|
module Remessa
|
6
6
|
class Base
|
@@ -33,9 +33,7 @@ module Brcobranca
|
|
33
33
|
record.errors.add(attr, 'não pode estar vazio.') if value.empty?
|
34
34
|
value.each do |pagamento|
|
35
35
|
if pagamento.is_a? Brcobranca::Remessa::Pagamento
|
36
|
-
if pagamento.invalid?
|
37
|
-
pagamento.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
38
|
-
end
|
36
|
+
pagamento.errors.full_messages.each { |msg| record.errors.add(attr, msg) } if pagamento.invalid?
|
39
37
|
else
|
40
38
|
record.errors.add(attr, 'cada item deve ser um objeto Pagamento.')
|
41
39
|
end
|
@@ -59,18 +57,17 @@ module Brcobranca
|
|
59
57
|
end
|
60
58
|
|
61
59
|
def quantidade_titulos_cobranca
|
62
|
-
pagamentos.length.to_s.rjust(6,
|
60
|
+
pagamentos.length.to_s.rjust(6, '0')
|
63
61
|
end
|
64
62
|
|
65
63
|
def totaliza_valor_titulos
|
66
|
-
pagamentos.inject(0.0) { |sum, pagamento| sum
|
64
|
+
pagamentos.inject(0.0) { |sum, pagamento| sum + pagamento.valor.to_f }
|
67
65
|
end
|
68
66
|
|
69
67
|
def valor_titulos_carteira(tamanho = 17)
|
70
|
-
total =
|
71
|
-
total.somente_numeros.rjust(tamanho,
|
68
|
+
total = format '%.2f', totaliza_valor_titulos
|
69
|
+
total.somente_numeros.rjust(tamanho, '0')
|
72
70
|
end
|
73
|
-
|
74
71
|
end
|
75
72
|
end
|
76
73
|
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
5
|
-
class
|
6
|
+
class Ailos < Brcobranca::Remessa::Cnab240::Base
|
6
7
|
# digito da agencia
|
7
8
|
attr_accessor :digito_agencia
|
8
9
|
|
@@ -32,7 +33,7 @@ module Brcobranca
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def nome_banco
|
35
|
-
'
|
36
|
+
'AILOS'.ljust(30, ' ')
|
36
37
|
end
|
37
38
|
|
38
39
|
def versao_layout_arquivo
|
@@ -78,11 +79,11 @@ module Brcobranca
|
|
78
79
|
end
|
79
80
|
|
80
81
|
def agencia_conta_corrente_dv
|
81
|
-
|
82
|
+
' '
|
82
83
|
end
|
83
84
|
|
84
85
|
def complemento_header
|
85
|
-
|
86
|
+
''.rjust(29, ' ').to_s
|
86
87
|
end
|
87
88
|
|
88
89
|
def complemento_trailer
|
@@ -90,7 +91,7 @@ module Brcobranca
|
|
90
91
|
end
|
91
92
|
|
92
93
|
def tipo_documento
|
93
|
-
|
94
|
+
'1'
|
94
95
|
end
|
95
96
|
|
96
97
|
def complemento_p(pagamento)
|
@@ -99,7 +100,8 @@ module Brcobranca
|
|
99
100
|
# dv conta corrente 1
|
100
101
|
# dv agencia/conta 1
|
101
102
|
# ident. titulo 20
|
102
|
-
"#{conta_corrente.rjust(12,
|
103
|
+
"#{conta_corrente.rjust(12,
|
104
|
+
'0')}#{conta_corrente_dv}#{agencia_conta_corrente_dv}#{ajusta_nosso_numero(pagamento)}"
|
103
105
|
end
|
104
106
|
|
105
107
|
def ajusta_nosso_numero(pagamento)
|
@@ -107,7 +109,7 @@ module Brcobranca
|
|
107
109
|
end
|
108
110
|
|
109
111
|
def identificacao_titulo_empresa(pagamento)
|
110
|
-
pagamento.documento_ou_numero.to_s.ljust(25,
|
112
|
+
pagamento.documento_ou_numero.to_s.ljust(25, ' ')
|
111
113
|
end
|
112
114
|
|
113
115
|
def complemento_trailer
|
@@ -121,28 +123,29 @@ module Brcobranca
|
|
121
123
|
# Qt. Títulos em Cobrança Descontada 6
|
122
124
|
# Vl. Títulos em Carteira Descontada 15 + 2 decimais
|
123
125
|
total_cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira}"
|
124
|
-
total_cobranca_vinculada =
|
125
|
-
total_cobranca_caucionada =
|
126
|
-
total_cobranca_descontada =
|
126
|
+
total_cobranca_vinculada = ''.rjust(23, '0')
|
127
|
+
total_cobranca_caucionada = ''.rjust(23, '0')
|
128
|
+
total_cobranca_descontada = ''.rjust(23, '0')
|
127
129
|
|
128
130
|
"#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}"\
|
129
|
-
|
131
|
+
"#{total_cobranca_descontada}".ljust(217, ' ')
|
130
132
|
end
|
131
133
|
|
132
134
|
def total_segmentos(pagamentos)
|
133
|
-
pagamentos.inject(0) { |total, pagamento| total += pagamento.codigo_multa
|
135
|
+
pagamentos.inject(0) { |total, pagamento| total += pagamento.codigo_multa == '0' ? 2 : 3 }
|
134
136
|
end
|
135
137
|
|
136
138
|
def monta_segmento_r(pagamento, nro_lote, contador)
|
137
139
|
return nil if pagamento.codigo_multa == '0'
|
140
|
+
|
138
141
|
super(pagamento, nro_lote, contador)
|
139
142
|
end
|
140
143
|
|
141
|
-
def codigo_baixa(
|
144
|
+
def codigo_baixa(_pagamento)
|
142
145
|
'2'
|
143
146
|
end
|
144
147
|
|
145
|
-
def dias_baixa(
|
148
|
+
def dias_baixa(_pagamento)
|
146
149
|
''.rjust(3, ' ')
|
147
150
|
end
|
148
151
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
5
6
|
class BancoBrasil < Brcobranca::Remessa::Cnab240::Base
|
6
7
|
# variacao da carteira
|
7
8
|
attr_accessor :variacao
|
9
|
+
|
8
10
|
# identificacao da emissao do boleto (attr na classe base)
|
9
11
|
# campo nao tratado pelo sistema do Banco do Brasil
|
10
12
|
# identificacao da distribuicao do boleto (attr na classe base)
|
@@ -20,10 +22,10 @@ module Brcobranca
|
|
20
22
|
|
21
23
|
def initialize(campos = {})
|
22
24
|
campos = { emissao_boleto: '0',
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
distribuicao_boleto: '0',
|
26
|
+
especie_titulo: '02',
|
27
|
+
codigo_baixa: '00',
|
28
|
+
codigo_carteira: '7' }.merge!(campos)
|
27
29
|
super(campos)
|
28
30
|
end
|
29
31
|
|
@@ -65,7 +67,7 @@ module Brcobranca
|
|
65
67
|
"#{convenio.rjust(9, '0')}0014#{carteira}#{variacao} "
|
66
68
|
end
|
67
69
|
|
68
|
-
|
70
|
+
alias convenio_lote codigo_convenio
|
69
71
|
|
70
72
|
def info_conta
|
71
73
|
# CAMPO TAMANHO
|
@@ -101,13 +103,13 @@ module Brcobranca
|
|
101
103
|
def formata_nosso_numero(nosso_numero)
|
102
104
|
quantidade = case convenio.to_s.size
|
103
105
|
# convenio de 4 posicoes com nosso numero de 7
|
104
|
-
when 4
|
106
|
+
when 4
|
105
107
|
7
|
106
108
|
# convenio de 6 posicoes com nosso numero de 5
|
107
|
-
when 6
|
109
|
+
when 6
|
108
110
|
5
|
109
111
|
# convenio de 7 posicoes com nosso numero de 10
|
110
|
-
when 7
|
112
|
+
when 7
|
111
113
|
10
|
112
114
|
else
|
113
115
|
raise Brcobranca::NaoImplementado, 'Tipo de convênio não implementado.'
|
@@ -136,8 +138,9 @@ module Brcobranca
|
|
136
138
|
#
|
137
139
|
def monta_segmento_p(pagamento, nro_lote, sequencial)
|
138
140
|
# campos com * na frente nao foram implementados
|
141
|
+
segmento_p = ''
|
139
142
|
# # DESCRICAO TAMANHO
|
140
|
-
segmento_p
|
143
|
+
segmento_p += cod_banco # codigo banco 3
|
141
144
|
segmento_p << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
142
145
|
segmento_p << '3' # tipo de registro 1
|
143
146
|
segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
@@ -227,7 +230,7 @@ module Brcobranca
|
|
227
230
|
# No caso de carteira 31 ou carteira 11/17 modalidade Vinculada,
|
228
231
|
# se não informado nenhum código,
|
229
232
|
# o sistema assume automaticamente Protesto em 3 dias úteis.
|
230
|
-
segmento_p << pagamento.codigo_protesto
|
233
|
+
segmento_p << pagamento.codigo_protesto # cod. para protesto 1
|
231
234
|
# Preencher de acordo com o código informado na posição 221.
|
232
235
|
# Para código '1' – é possível, de 6 a 29 dias, 35o, 40o, dia corrido.
|
233
236
|
# Para código '2' – é possível, 3o, 4o ou 5o dia útil.
|