brcobranca_sicredi_400 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- metadata +225 -0
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Banco HSBC
|
6
|
+
class Hsbc < Base
|
7
|
+
validates_inclusion_of :carteira, in: %w[CNR CSB], message: 'não existente para este banco.'
|
8
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
9
|
+
validates_length_of :nosso_numero, maximum: 13, message: 'deve ser menor ou igual a 13 dígitos.'
|
10
|
+
validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
11
|
+
|
12
|
+
# Nova instancia do Hsbc
|
13
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
14
|
+
def initialize(campos = {})
|
15
|
+
campos = { carteira: 'CNR' }.merge!(campos)
|
16
|
+
super(campos)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
20
|
+
#
|
21
|
+
# @return [String] 3 caracteres numéricos.
|
22
|
+
def banco
|
23
|
+
'399'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Número seqüencial utilizado para identificar o boleto.
|
27
|
+
# @return [String] 13 caracteres numéricos.
|
28
|
+
def nosso_numero=(valor)
|
29
|
+
@nosso_numero = valor.to_s.rjust(13, '0') if valor
|
30
|
+
end
|
31
|
+
|
32
|
+
# Nosso número para exibir no boleto.
|
33
|
+
# @return [String]
|
34
|
+
# @example
|
35
|
+
# boleto.nosso_numero_boleto #=> "0000000004042847"
|
36
|
+
def nosso_numero_boleto
|
37
|
+
case carteira
|
38
|
+
when 'CNR'
|
39
|
+
if data_vencimento.is_a?(Date)
|
40
|
+
self.codigo_servico = '4'
|
41
|
+
dia = data_vencimento.day.to_s.rjust(2, '0')
|
42
|
+
mes = data_vencimento.month.to_s.rjust(2, '0')
|
43
|
+
ano = data_vencimento.year.to_s[2..3]
|
44
|
+
data = "#{dia}#{mes}#{ano}"
|
45
|
+
|
46
|
+
parte_1 = "#{nosso_numero}#{nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{codigo_servico}"
|
47
|
+
soma = parte_1.to_i + conta_corrente.to_i + data.to_i
|
48
|
+
"#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
|
49
|
+
else
|
50
|
+
errors.add(:data_vencimento, 'não é uma data.')
|
51
|
+
raise Brcobranca::BoletoInvalido, self
|
52
|
+
end
|
53
|
+
when 'CSB'
|
54
|
+
@nosso_numero
|
55
|
+
else
|
56
|
+
raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
|
57
|
+
# TODO: - Verificar outras carteiras.
|
58
|
+
# self.codigo_servico = "5"
|
59
|
+
# parte_1 = "#{self.nosso_numero}#{self.nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{self.codigo_servico}"
|
60
|
+
# soma = parte_1.to_i + self.conta_corrente.to_i
|
61
|
+
# numero = "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
|
62
|
+
# numero
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Número do convênio/contrato do cliente para exibir no boleto.
|
67
|
+
# @return [String]
|
68
|
+
# @example
|
69
|
+
# boleto.agencia_conta_boleto #=> "0061900"
|
70
|
+
def agencia_conta_boleto
|
71
|
+
conta_corrente
|
72
|
+
end
|
73
|
+
|
74
|
+
# Segunda parte do código de barras.
|
75
|
+
#
|
76
|
+
# Montagem é baseada no tipo de carteira e na presença da data de vencimento<br/>
|
77
|
+
# <b>OBS:</b> Somente as carteiras <b>CNR/CSB</b> estão implementadas.<br/>
|
78
|
+
#
|
79
|
+
# @return [String] 25 caracteres numéricos.
|
80
|
+
# @raise [Brcobranca::NaoImplementado] Caso a carteira informada não for CNR/CSB.
|
81
|
+
def codigo_barras_segunda_parte
|
82
|
+
case carteira
|
83
|
+
when 'CNR'
|
84
|
+
dias_julianos = data_vencimento.to_juliano
|
85
|
+
"#{conta_corrente}#{nosso_numero}#{dias_julianos}2"
|
86
|
+
when 'CSB'
|
87
|
+
raise Brcobranca::NaoImplementado, 'Nosso número não definido.' unless @nosso_numero
|
88
|
+
|
89
|
+
"#{nosso_numero}#{agencia}#{conta_corrente}001"
|
90
|
+
else
|
91
|
+
raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Banco Itaú
|
6
|
+
class Itau < Base
|
7
|
+
# Usado somente em carteiras especiais com registro para complementar o número do cocumento
|
8
|
+
attr_reader :seu_numero
|
9
|
+
|
10
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
11
|
+
validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
12
|
+
validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
13
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
14
|
+
with_options if: :usa_seu_numero? do |v|
|
15
|
+
v.validates_length_of :seu_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
16
|
+
end
|
17
|
+
# Nova instancia do Itau
|
18
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
19
|
+
def initialize(campos = {})
|
20
|
+
campos = { carteira: '175' }.merge!(campos)
|
21
|
+
super(campos)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
25
|
+
#
|
26
|
+
# @return [String] 3 caracteres numéricos.
|
27
|
+
def banco
|
28
|
+
'341'
|
29
|
+
end
|
30
|
+
|
31
|
+
# Número do convênio/contrato do cliente junto ao banco.
|
32
|
+
# @return [String] 5 caracteres numéricos.
|
33
|
+
def convenio=(valor)
|
34
|
+
@convenio = valor.to_s.rjust(5, '0') if valor
|
35
|
+
end
|
36
|
+
|
37
|
+
# Conta corrente
|
38
|
+
# @return [String] 5 caracteres numéricos.
|
39
|
+
def conta_corrente=(valor)
|
40
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
41
|
+
end
|
42
|
+
|
43
|
+
# Número seqüencial utilizado para identificar o boleto.
|
44
|
+
# @return [String] 8 caracteres numéricos.
|
45
|
+
def nosso_numero=(valor)
|
46
|
+
@nosso_numero = valor.to_s.rjust(8, '0') if valor
|
47
|
+
end
|
48
|
+
|
49
|
+
# Número seqüencial utilizado para identificar o boleto.
|
50
|
+
# @return [String] 7 caracteres numéricos.
|
51
|
+
def seu_numero=(valor)
|
52
|
+
@seu_numero = valor.to_s.rjust(7, '0') if valor
|
53
|
+
end
|
54
|
+
|
55
|
+
def usa_seu_numero?
|
56
|
+
%w[198 106 107 122 142 143 195 196].include?(carteira.to_s)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Dígito verificador do nosso número.
|
60
|
+
#
|
61
|
+
# Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
|
62
|
+
# "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.<br/>
|
63
|
+
# A excecao, estão as carteiras 112, 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
|
64
|
+
# dados "CARTEIRA/NOSSO NUMERO".
|
65
|
+
#
|
66
|
+
# @return [String] 1 caracteres numéricos.
|
67
|
+
def nosso_numero_dv
|
68
|
+
if %w[112 126 131 146 150 168].include?(carteira)
|
69
|
+
"#{carteira}#{nosso_numero}".modulo10
|
70
|
+
else
|
71
|
+
"#{agencia}#{conta_corrente}#{carteira}#{nosso_numero}".modulo10
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Calcula o dígito verificador para conta corrente do Itau.
|
76
|
+
# Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.
|
77
|
+
def agencia_conta_corrente_dv
|
78
|
+
"#{agencia}#{conta_corrente}".modulo10
|
79
|
+
end
|
80
|
+
|
81
|
+
# Nosso número para exibir no boleto.
|
82
|
+
# @return [String]
|
83
|
+
# @example
|
84
|
+
# boleto.nosso_numero_boleto #=> "175/12345678-4"
|
85
|
+
def nosso_numero_boleto
|
86
|
+
"#{carteira}/#{nosso_numero}-#{nosso_numero_dv}"
|
87
|
+
end
|
88
|
+
|
89
|
+
# Agência + conta corrente do cliente para exibir no boleto.
|
90
|
+
# @return [String]
|
91
|
+
# @example
|
92
|
+
# boleto.agencia_conta_boleto #=> "0811 / 53678-8"
|
93
|
+
def agencia_conta_boleto
|
94
|
+
"#{agencia} / #{conta_corrente}-#{agencia_conta_corrente_dv}"
|
95
|
+
end
|
96
|
+
|
97
|
+
# Segunda parte do código de barras.
|
98
|
+
#
|
99
|
+
# CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196<br/>
|
100
|
+
# 01 a 03 | 03 | 9(3) | Código do Banco na Câmara de Compensação = ‘341’<br/>
|
101
|
+
# 04 a 04 | 01 | 9(1) | Código da Moeda = '9'<br/>
|
102
|
+
# 05 a 05 | 01 | 9(1) | DAC do Código de Barras MOD 11-2a9<br/>
|
103
|
+
# 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
|
104
|
+
# 10 a 19 | 10 | 9(08) | V(2) Valor<br/>
|
105
|
+
# 20 a 22 | 03 | 9(3) | Carteira<br/>
|
106
|
+
# 23 a 30 | 08 | 9(8) | Nosso Número<br/>
|
107
|
+
# 31 a 37 | 07 | 9(7) | Seu Número (Número do Documento)<br/>
|
108
|
+
# 38 a 42 | 05 | 9(5) | Código do Cliente (fornecido pelo Banco)<br/>
|
109
|
+
# 43 a 43 | 01 | 9(1) | DAC dos campos acima (posições 20 a 42) MOD 10<br/>
|
110
|
+
# 44 a 44 | 01 | 9(1) | Zero<br/>
|
111
|
+
#
|
112
|
+
# DEMAIS CARTEIRAS<br/>
|
113
|
+
# 01 a 03 | 03 | 9(03) | Código do Banco na Câmara de Compensação = '341'<br/>
|
114
|
+
# 04 a 04 | 01 | 9(01) | Código da Moeda = '9'<br/>
|
115
|
+
# 05 a 05 | 01 | 9(01) | DAC código de Barras MOD 11-2a9<br/>
|
116
|
+
# 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
|
117
|
+
# 10 a 19 | 10 | 9(08)V(2) | Valor<br/>
|
118
|
+
# 20 a 22 | 03 | 9(03) | Carteira<br/>
|
119
|
+
# 23 a 30 | 08 | 9(08) | Nosso Número<br/>
|
120
|
+
# 31 a 31 | 01 | 9(01) | DAC [Agência /Conta/Carteira/Nosso Número] MOD 10<br/>
|
121
|
+
# 32 a 35 | 04 | 9(04) | N.º da Agência cedente<br/>
|
122
|
+
# 36 a 40 | 05 | 9(05) | N.º da Conta Corrente<br/>
|
123
|
+
# 41 a 41 | 01 | 9(01) | DAC [Agência/Conta Corrente] MOD 10<br/>
|
124
|
+
# 42 a 44 | 03 | 9(03) | Zeros<br/>
|
125
|
+
#
|
126
|
+
# @return [String] 25 caracteres numéricos.
|
127
|
+
def codigo_barras_segunda_parte
|
128
|
+
case carteira.to_i
|
129
|
+
when 198, 106, 107, 122, 142, 143, 195, 196
|
130
|
+
dv = "#{carteira}#{nosso_numero}#{seu_numero}#{convenio}".modulo10
|
131
|
+
"#{carteira}#{nosso_numero}#{seu_numero}#{convenio}#{dv}0"
|
132
|
+
else
|
133
|
+
"#{carteira}#{nosso_numero}#{nosso_numero_dv}#{agencia}#{conta_corrente}#{agencia_conta_corrente_dv}000"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Banco Safra
|
6
|
+
class Safra < Base
|
7
|
+
# <b>REQUERIDO</b>: Dígito da Agência
|
8
|
+
attr_accessor :agencia_dv
|
9
|
+
# <b>REQUERIDO</b>: Dígito da conta
|
10
|
+
attr_accessor :conta_corrente_dv
|
11
|
+
|
12
|
+
validates_presence_of :agencia_dv, :conta_corrente_dv, message: 'não pode estar em branco.'
|
13
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
14
|
+
validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
15
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
16
|
+
validates_length_of :agencia_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
|
17
|
+
validates_length_of :conta_corrente_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
|
18
|
+
|
19
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
20
|
+
#
|
21
|
+
# @return [String] 3 caracteres numéricos.
|
22
|
+
def banco
|
23
|
+
'422'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Agência
|
27
|
+
#
|
28
|
+
# @return [String] 4 caracteres numéricos.
|
29
|
+
def agencia=(valor)
|
30
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
31
|
+
end
|
32
|
+
|
33
|
+
# Conta corrente
|
34
|
+
# @return [String] 8 caracteres numéricos.
|
35
|
+
def conta_corrente=(valor)
|
36
|
+
@conta_corrente = valor.to_s.rjust(8, '0') if valor
|
37
|
+
end
|
38
|
+
|
39
|
+
# Número seqüencial utilizado para identificar o boleto.
|
40
|
+
# @return [String] 8 caracteres numéricos.
|
41
|
+
def nosso_numero=(valor)
|
42
|
+
@nosso_numero = valor.to_s.rjust(8, '0') if valor
|
43
|
+
end
|
44
|
+
|
45
|
+
# Dígito verificador do nosso número.
|
46
|
+
#
|
47
|
+
# @return [String] 1 caracteres numéricos.
|
48
|
+
def nosso_numero_dv
|
49
|
+
nosso_numero.modulo11(
|
50
|
+
reverse: false,
|
51
|
+
mapeamento: { 10 => 0, 11 => 1 }
|
52
|
+
) { |total| 11 - (total % 11) }
|
53
|
+
end
|
54
|
+
|
55
|
+
# Nosso número para exibir no boleto.
|
56
|
+
# @return [String]
|
57
|
+
# @example
|
58
|
+
# boleto.nosso_numero_boleto #=> "175/12345678-4"
|
59
|
+
def nosso_numero_boleto
|
60
|
+
"#{nosso_numero}-#{nosso_numero_dv}"
|
61
|
+
end
|
62
|
+
|
63
|
+
# Agência + conta corrente do cliente para exibir no boleto.
|
64
|
+
# @return [String]
|
65
|
+
# @example
|
66
|
+
# boleto.agencia_conta_boleto #=> "08111 / 536788"
|
67
|
+
def agencia_conta_boleto
|
68
|
+
"#{agencia}#{agencia_dv} / #{conta_corrente}#{conta_corrente_dv}"
|
69
|
+
end
|
70
|
+
|
71
|
+
# Segunda parte do código de barras.
|
72
|
+
#
|
73
|
+
# ORMATAÇÃO DO CÓDIGO DE BARRAS - COBRANÇA REGISTRADA
|
74
|
+
# Campo
|
75
|
+
# Significado
|
76
|
+
#
|
77
|
+
# Formato
|
78
|
+
# Posições
|
79
|
+
# Conteúdo
|
80
|
+
# DE
|
81
|
+
#
|
82
|
+
# ATÉ
|
83
|
+
# Banco
|
84
|
+
# Banco Beneficiário do boleto
|
85
|
+
# 9 (03)
|
86
|
+
# 1
|
87
|
+
# 3
|
88
|
+
# 422
|
89
|
+
# Moeda
|
90
|
+
# Código da moeda
|
91
|
+
# 9 (01)
|
92
|
+
# 4
|
93
|
+
# 4
|
94
|
+
# 9 = real
|
95
|
+
# DAC
|
96
|
+
# DAC - Dígito de auto conferência
|
97
|
+
# 9 (01)
|
98
|
+
# 5
|
99
|
+
# 5
|
100
|
+
# Dígito de auto conferência
|
101
|
+
# Fator de Vencimento
|
102
|
+
# Data de vencimento do título
|
103
|
+
# 9(04)
|
104
|
+
# 6
|
105
|
+
# 9
|
106
|
+
# DV
|
107
|
+
# Valor
|
108
|
+
# Valor do boleto
|
109
|
+
# 9 (10)
|
110
|
+
# 10
|
111
|
+
# 19
|
112
|
+
# Valor do Boleto com zeros a esquerda
|
113
|
+
# Campo Livre
|
114
|
+
# Sistema
|
115
|
+
# 9 (01)
|
116
|
+
# 20
|
117
|
+
# 20
|
118
|
+
# 7 = Dígito do Bco Safra
|
119
|
+
# Campo Livre
|
120
|
+
# Agência
|
121
|
+
# 9 (05)
|
122
|
+
# 21
|
123
|
+
# 25
|
124
|
+
# (05) Agência do cliente Safra
|
125
|
+
# Campo Livre
|
126
|
+
# Cliente
|
127
|
+
# 9 (09)
|
128
|
+
# 26
|
129
|
+
# 34
|
130
|
+
# No da conta
|
131
|
+
# Campo Livre
|
132
|
+
# Nosso Número
|
133
|
+
# 9 (09)
|
134
|
+
# 35
|
135
|
+
# 43
|
136
|
+
# Nosso Número
|
137
|
+
# Campo Livre
|
138
|
+
# Tipo cobrança
|
139
|
+
# 9 (01)
|
140
|
+
#
|
141
|
+
# 44
|
142
|
+
# 44
|
143
|
+
#
|
144
|
+
# 2 = cobrança registrada
|
145
|
+
#
|
146
|
+
# @return [String] 25 caracteres numéricos.
|
147
|
+
def codigo_barras_segunda_parte
|
148
|
+
"7#{agencia}#{agencia_dv}#{conta_corrente}#{conta_corrente_dv}#{nosso_numero}#{nosso_numero_dv}2"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# @author Kivanio Barbosa
|
5
|
+
# @author Ronaldo Araujo
|
6
|
+
module Brcobranca
|
7
|
+
module Boleto
|
8
|
+
# Banco Santander
|
9
|
+
class Santander < Base
|
10
|
+
validates_presence_of :convenio, message: 'não pode estar em branco.'
|
11
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
12
|
+
validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
13
|
+
validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
14
|
+
|
15
|
+
# Nova instancia do Santander
|
16
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
17
|
+
def initialize(campos = {})
|
18
|
+
campos = { carteira: '102' }.merge!(campos)
|
19
|
+
super(campos)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
23
|
+
#
|
24
|
+
# @return [String] 3 caracteres numéricos.
|
25
|
+
def banco
|
26
|
+
'033'
|
27
|
+
end
|
28
|
+
|
29
|
+
# Número da conta corrente
|
30
|
+
# @return [String] 9 caracteres numéricos.
|
31
|
+
def conta_corrente=(valor)
|
32
|
+
@conta_corrente = valor.to_s.rjust(9, '0') if valor
|
33
|
+
end
|
34
|
+
|
35
|
+
# Número do convênio/contrato do cliente junto ao banco. No Santander, é
|
36
|
+
# chamado de Código do Cedente.
|
37
|
+
# @return [String] 7 caracteres numéricos.
|
38
|
+
def convenio=(valor)
|
39
|
+
@convenio = valor.to_s.rjust(7, '0') if valor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Número sequencial utilizado para identificar o boleto.
|
43
|
+
# @return [String] 7 caracteres numéricos.
|
44
|
+
def nosso_numero=(valor)
|
45
|
+
@nosso_numero = valor.to_s.rjust(7, '0') if valor
|
46
|
+
end
|
47
|
+
|
48
|
+
# Dígito verificador do nosso número.
|
49
|
+
# @return [String] 1 caracteres numéricos.
|
50
|
+
def nosso_numero_dv
|
51
|
+
nosso_numero.modulo11(
|
52
|
+
multiplicador: (2..9).to_a,
|
53
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
54
|
+
) { |total| 11 - (total % 11) }
|
55
|
+
end
|
56
|
+
|
57
|
+
# Nosso número para exibir no boleto.
|
58
|
+
# @return [String]
|
59
|
+
# @example
|
60
|
+
# boleto.nosso_numero_boleto #=> "9000272-7"
|
61
|
+
def nosso_numero_boleto
|
62
|
+
"#{nosso_numero}-#{nosso_numero_dv}"
|
63
|
+
end
|
64
|
+
|
65
|
+
# Agência + codigo do cedente do cliente para exibir no boleto.
|
66
|
+
# @return [String]
|
67
|
+
# @example
|
68
|
+
# boleto.agencia_conta_boleto #=> "0059/1899775"
|
69
|
+
def agencia_conta_boleto
|
70
|
+
"#{agencia}/#{convenio}"
|
71
|
+
end
|
72
|
+
|
73
|
+
# Segunda parte do código de barras.
|
74
|
+
# 9(01) | Fixo 9 <br/>
|
75
|
+
# 9(07) | Convenio <br/>
|
76
|
+
# 9(13) | Nosso Numero Com DV<br/>
|
77
|
+
# 9(01) | IOF somente para seguradoras<br/> Fixo 9
|
78
|
+
# 9(03) | Carteira de cobrança<br/>
|
79
|
+
#
|
80
|
+
# @return [String] 25 caracteres numéricos.
|
81
|
+
def codigo_barras_segunda_parte
|
82
|
+
"9#{convenio}00000#{nosso_numero}#{nosso_numero_dv}0#{carteira}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Sicoob (Bancoob)
|
6
|
+
class Sicoob < Base
|
7
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
8
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
9
|
+
validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
10
|
+
validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
11
|
+
validates_length_of :variacao, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
12
|
+
validates_length_of :quantidade, maximum: 3, message: 'deve ser menor ou igual a 3 dígitos.'
|
13
|
+
|
14
|
+
def initialize(campos = {})
|
15
|
+
campos = { carteira: '1', variacao: '01', quantidade: '001' }.merge!(campos)
|
16
|
+
super(campos)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
20
|
+
#
|
21
|
+
# @return [String] 3 caracteres numéricos.
|
22
|
+
def banco
|
23
|
+
'756'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Dígito verificador do banco
|
27
|
+
#
|
28
|
+
# @return [String] 1 caractere.
|
29
|
+
def banco_dv
|
30
|
+
'0'
|
31
|
+
end
|
32
|
+
|
33
|
+
# Agência
|
34
|
+
#
|
35
|
+
# @return [String] 4 caracteres numéricos.
|
36
|
+
def agencia=(valor)
|
37
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
38
|
+
end
|
39
|
+
|
40
|
+
# Convênio
|
41
|
+
#
|
42
|
+
# @return [String] 7 caracteres numéricos.
|
43
|
+
def convenio=(valor)
|
44
|
+
@convenio = valor.to_s.rjust(7, '0') if valor
|
45
|
+
end
|
46
|
+
|
47
|
+
# Número documento
|
48
|
+
#
|
49
|
+
# @return [String] 7 caracteres numéricos.
|
50
|
+
def nosso_numero=(valor)
|
51
|
+
@nosso_numero = valor.to_s.rjust(7, '0') if valor
|
52
|
+
end
|
53
|
+
|
54
|
+
# Quantidade
|
55
|
+
#
|
56
|
+
# @return [String] 3 caracteres numéricos.
|
57
|
+
def quantidade=(valor)
|
58
|
+
@quantidade = valor.to_s.rjust(3, '0') if valor
|
59
|
+
end
|
60
|
+
|
61
|
+
# Nosso número para exibição no boleto.
|
62
|
+
#
|
63
|
+
# @return [String] 8 caracteres numéricos.
|
64
|
+
def nosso_numero_boleto
|
65
|
+
"#{nosso_numero}#{nosso_numero_dv}"
|
66
|
+
end
|
67
|
+
|
68
|
+
# 3.13. Nosso número: Código de controle que permite ao Sicoob e à empresa identificar os dados da cobrança que deu origem ao boleto.
|
69
|
+
#
|
70
|
+
# Para o cálculo do dígito verificador do nosso número, deverá ser utilizada a fórmula abaixo:
|
71
|
+
# Número da Cooperativa 9(4) – vide planilha "Capa" deste arquivo
|
72
|
+
# Código do Cliente 9(10) – vide planilha "Capa" deste arquivo
|
73
|
+
# Nosso Número 9(7) – Iniciado em 1
|
74
|
+
#
|
75
|
+
# Constante para cálculo = 3197
|
76
|
+
#
|
77
|
+
# a) Concatenar na seqüência completando com zero à esquerda.
|
78
|
+
# Ex.:Número da Cooperativa = 0001
|
79
|
+
# Número do Cliente = 1-9
|
80
|
+
# Nosso Número = 21
|
81
|
+
# 000100000000190000021
|
82
|
+
#
|
83
|
+
# b) Alinhar a constante com a seqüência repetindo de traz para frente.
|
84
|
+
# Ex.: 000100000000190000021
|
85
|
+
# 319731973197319731973
|
86
|
+
#
|
87
|
+
# c) Multiplicar cada componente da seqüência com o seu correspondente da constante e somar os resultados.
|
88
|
+
# Ex.: 1*7 + 1*3 + 9*1 + 2*7 + 1*3 = 36
|
89
|
+
#
|
90
|
+
# d) Calcular o Resto através do Módulo 11.
|
91
|
+
# Ex.: 36/11 = 3, resto = 3
|
92
|
+
#
|
93
|
+
# e) O resto da divisão deverá ser subtraído de 11 achando assim o DV (Se o Resto for igual a 0 ou 1 então o DV é igual a 0).
|
94
|
+
# Ex.: 11 – 3 = 8, então Nosso Número + DV = 21-8
|
95
|
+
#
|
96
|
+
def nosso_numero_dv
|
97
|
+
"#{agencia}#{convenio.rjust(10, '0')}#{nosso_numero}".modulo11(
|
98
|
+
reverse: false,
|
99
|
+
multiplicador: [3, 1, 9, 7],
|
100
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
101
|
+
) { |t| 11 - (t % 11) }
|
102
|
+
end
|
103
|
+
|
104
|
+
def agencia_conta_boleto
|
105
|
+
"#{agencia} / #{convenio}"
|
106
|
+
end
|
107
|
+
|
108
|
+
# Posição Tamanho Conteúdo
|
109
|
+
# 20 a 20 01 Código da carteira de cobrança - vide planilha "Capa" deste arquivo
|
110
|
+
# 21 a 24 04 Código da agência/cooperativa - verificar na planilha "Capa" deste arquivo
|
111
|
+
# 25 a 26 02 Código da modalidade - verificar na planilha "Capa" deste arquivo
|
112
|
+
# 27 a 33 07 Código do cedente/cliente - verificar na planilha "Capa" deste arquivo
|
113
|
+
# 34 a 41 08 Nosso número do boleto
|
114
|
+
# 41 a 44 03 Número da parcela a que o boleto se refere - "001" se parcela única
|
115
|
+
def codigo_barras_segunda_parte
|
116
|
+
"#{carteira}#{agencia}#{variacao}#{convenio}#{nosso_numero_boleto}#{quantidade}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|