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,256 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# @author Kivanio Barbosa
|
5
|
+
module Brcobranca
|
6
|
+
module Boleto
|
7
|
+
# Classe base para todas as classes de boletos
|
8
|
+
class Base
|
9
|
+
extend Template::Base
|
10
|
+
|
11
|
+
# Configura gerador de arquivo de boleto e código de barras.
|
12
|
+
define_template(Brcobranca.configuration.gerador).each do |klass|
|
13
|
+
extend klass
|
14
|
+
include klass
|
15
|
+
end
|
16
|
+
|
17
|
+
# Validações
|
18
|
+
include Brcobranca::Validations
|
19
|
+
|
20
|
+
# <b>REQUERIDO</b>: Número do convênio/contrato do cliente junto ao banco emissor
|
21
|
+
attr_accessor :convenio
|
22
|
+
# <b>REQUERIDO</b>: Tipo de moeda utilizada (Real(R$) e igual a 9)
|
23
|
+
attr_accessor :moeda
|
24
|
+
# <b>REQUERIDO</b>: Carteira utilizada
|
25
|
+
attr_accessor :carteira
|
26
|
+
# <b>OPCIONAL</b>: Variacao da carteira(opcional para a maioria dos bancos)
|
27
|
+
attr_accessor :carteira_label
|
28
|
+
# <b>OPCIONAL</b>: Rótulo da Carteira, RG ou SR, somente para impressão no boleto.
|
29
|
+
attr_accessor :variacao
|
30
|
+
# <b>OPCIONAL</b>: Data de processamento do boleto
|
31
|
+
attr_accessor :data_processamento
|
32
|
+
# <b>REQUERIDO</b>: Quantidade de boleto(padrão = 1)
|
33
|
+
attr_accessor :quantidade
|
34
|
+
# <b>REQUERIDO</b>: Valor do boleto
|
35
|
+
attr_accessor :valor
|
36
|
+
# <b>REQUERIDO</b>: Número da agencia sem <b>Digito Verificador</b>
|
37
|
+
attr_accessor :agencia
|
38
|
+
# <b>REQUERIDO</b>: Número da conta corrente sem <b>Digito Verificador</b>
|
39
|
+
attr_accessor :conta_corrente
|
40
|
+
# <b>REQUERIDO</b>: Nome do beneficiário
|
41
|
+
attr_accessor :cedente
|
42
|
+
# <b>REQUERIDO</b>: Documento do beneficiário (CPF ou CNPJ)
|
43
|
+
attr_accessor :documento_cedente
|
44
|
+
# <b>OPCIONAL</b>: Número sequencial utilizado para identificar o boleto
|
45
|
+
attr_accessor :nosso_numero
|
46
|
+
# <b>REQUERIDO</b>: Símbolo da moeda utilizada (R$ no brasil)
|
47
|
+
attr_accessor :especie
|
48
|
+
# <b>REQUERIDO</b>: Tipo do documento (Geralmente DM que quer dizer Duplicata Mercantil)
|
49
|
+
attr_accessor :especie_documento
|
50
|
+
# <b>REQUERIDO</b>: Data de pedido, Nota fiscal ou documento que originou o boleto
|
51
|
+
attr_accessor :data_documento
|
52
|
+
# <b>REQUERIDO</b>: Data de vencimento do boleto
|
53
|
+
attr_accessor :data_vencimento
|
54
|
+
# <b>OPCIONAL</b>: Número de pedido, Nota fiscal ou documento que originou o boleto
|
55
|
+
attr_accessor :documento_numero
|
56
|
+
# <b>OPCIONAL</b>: Código utilizado para identificar o tipo de serviço cobrado
|
57
|
+
attr_accessor :codigo_servico
|
58
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao sacado
|
59
|
+
attr_accessor :demonstrativo
|
60
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
61
|
+
attr_accessor :instrucoes
|
62
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
63
|
+
attr_accessor :instrucao1
|
64
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
65
|
+
attr_accessor :instrucao2
|
66
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
67
|
+
attr_accessor :instrucao3
|
68
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
69
|
+
attr_accessor :instrucao4
|
70
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
71
|
+
attr_accessor :instrucao5
|
72
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
73
|
+
attr_accessor :instrucao6
|
74
|
+
# <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
|
75
|
+
attr_accessor :instrucao7
|
76
|
+
# <b>REQUERIDO</b>: Informação sobre onde o sacado podera efetuar o pagamento
|
77
|
+
attr_accessor :local_pagamento
|
78
|
+
# <b>REQUERIDO</b>: Informa se o banco deve aceitar o boleto após o vencimento ou não( S ou N, quase sempre S)
|
79
|
+
attr_accessor :aceite
|
80
|
+
# <b>REQUERIDO</b>: Nome do pagador
|
81
|
+
attr_accessor :sacado
|
82
|
+
# <b>OPCIONAL</b>: Endereco do pagador
|
83
|
+
attr_accessor :sacado_endereco
|
84
|
+
# <b>REQUERIDO</b>: Documento do pagador
|
85
|
+
attr_accessor :sacado_documento
|
86
|
+
# <b>OPCIONAL</b>: Nome do avalista
|
87
|
+
attr_accessor :avalista
|
88
|
+
# <b>OPCIONAL</b>: Documento do avalista
|
89
|
+
attr_accessor :avalista_documento
|
90
|
+
# <b>OPCIONAL</b>: Endereço do beneficiário
|
91
|
+
attr_accessor :cedente_endereco
|
92
|
+
# <b>OPCIONAL</b>: EMV para gerar QRCode para pagamento via PIX
|
93
|
+
attr_accessor :emv
|
94
|
+
# <b>OPCIONAL</b>: Descontos e abatimentos
|
95
|
+
attr_accessor :descontos_e_abatimentos
|
96
|
+
|
97
|
+
# Validações
|
98
|
+
validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :nosso_numero,
|
99
|
+
:sacado, :sacado_documento, message: 'não pode estar em branco.'
|
100
|
+
validates_numericality_of :convenio, :agencia, :conta_corrente, :nosso_numero, message: 'não é um número.',
|
101
|
+
allow_nil: true
|
102
|
+
|
103
|
+
# Nova instancia da classe Base
|
104
|
+
# @param [Hash] campos
|
105
|
+
def initialize(campos = {})
|
106
|
+
padrao = {
|
107
|
+
moeda: '9',
|
108
|
+
data_processamento: Date.current,
|
109
|
+
data_vencimento: Date.current,
|
110
|
+
quantidade: 1,
|
111
|
+
especie_documento: 'DM',
|
112
|
+
especie: 'R$',
|
113
|
+
aceite: 'S',
|
114
|
+
valor: 0.0,
|
115
|
+
local_pagamento: 'QUALQUER BANCO ATÉ O VENCIMENTO'
|
116
|
+
}
|
117
|
+
|
118
|
+
campos = padrao.merge!(campos)
|
119
|
+
campos.each do |campo, valor|
|
120
|
+
send :"#{campo}=", valor
|
121
|
+
end
|
122
|
+
|
123
|
+
yield self if block_given?
|
124
|
+
end
|
125
|
+
|
126
|
+
# Logotipo do banco
|
127
|
+
# @return [Path] Caminho para o arquivo de logotipo do banco.
|
128
|
+
def logotipo
|
129
|
+
if Brcobranca.configuration.gerador == :rghost_carne
|
130
|
+
File.join(File.dirname(__FILE__), '..', 'arquivos', 'logos', "#{class_name}_carne.eps")
|
131
|
+
else
|
132
|
+
File.join(File.dirname(__FILE__), '..', 'arquivos', 'logos', "#{class_name}.eps")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Dígito verificador do banco
|
137
|
+
# @return [Integer] 1 caracteres numéricos.
|
138
|
+
def banco_dv
|
139
|
+
banco.modulo11
|
140
|
+
end
|
141
|
+
|
142
|
+
# Código da agencia
|
143
|
+
# @return [String] 4 caracteres numéricos.
|
144
|
+
def agencia=(valor)
|
145
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
146
|
+
end
|
147
|
+
|
148
|
+
# Dígito verificador da agência
|
149
|
+
# @return [Integer] 1 caracteres numéricos.
|
150
|
+
def agencia_dv
|
151
|
+
agencia.modulo11
|
152
|
+
end
|
153
|
+
|
154
|
+
# Dígito verificador da conta corrente
|
155
|
+
# @return [Integer] 1 caracteres numéricos.
|
156
|
+
def conta_corrente_dv
|
157
|
+
conta_corrente.modulo11
|
158
|
+
end
|
159
|
+
|
160
|
+
# Dígito verificador do nosso número
|
161
|
+
# @return [Integer] 1 caracteres numéricos.
|
162
|
+
def nosso_numero_dv
|
163
|
+
nosso_numero.modulo11(mapeamento: { 10 => 0, 11 => 0 })
|
164
|
+
end
|
165
|
+
|
166
|
+
# @abstract Deverá ser sobreescrito para cada banco.
|
167
|
+
def nosso_numero_boleto
|
168
|
+
raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
|
169
|
+
end
|
170
|
+
|
171
|
+
# @abstract Deverá ser sobreescrito para cada banco.
|
172
|
+
def agencia_conta_boleto
|
173
|
+
raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
|
174
|
+
end
|
175
|
+
|
176
|
+
# Valor total do documento: <b>quantidate * valor</b>
|
177
|
+
# @return [Float]
|
178
|
+
def valor_documento
|
179
|
+
quantidade.to_f * valor.to_f
|
180
|
+
end
|
181
|
+
|
182
|
+
# Fator de vencimento calculado com base na data de vencimento do boleto.
|
183
|
+
# @return [String] 4 caracteres numéricos.
|
184
|
+
def fator_vencimento
|
185
|
+
data_vencimento.fator_vencimento
|
186
|
+
end
|
187
|
+
|
188
|
+
# Número da conta corrente
|
189
|
+
# @return [String] 7 caracteres numéricos.
|
190
|
+
def conta_corrente=(valor)
|
191
|
+
@conta_corrente = valor.to_s.rjust(7, '0') if valor
|
192
|
+
end
|
193
|
+
|
194
|
+
# Codigo de barras do boleto
|
195
|
+
#
|
196
|
+
# O codigo de barra para cobrança contém 44 posições dispostas da seguinte forma:<br/>
|
197
|
+
# Posição |Tamanho |Conteúdo<br/>
|
198
|
+
# 01 a 03 | 3 | Identificação do Banco<br/>
|
199
|
+
# 04 a 04 | 1 | Código da Moeda (Real = 9, Outras=0)<br/>
|
200
|
+
# 05 a 05 | 1 | Dígito verificador do Código de Barras<br/>
|
201
|
+
# 06 a 09 | 4 | Fator de Vencimento (Vide Nota)<br/>
|
202
|
+
# 10 a 19 | 10 | Valor<br/>
|
203
|
+
# 20 a 44 | 25 | Campo Livre - As posições do campo livre ficam a critério de cada Banco arrecadador.<br/>
|
204
|
+
#
|
205
|
+
# @raise [Brcobranca::BoletoInvalido] Caso as informações fornecidas não sejam suficientes ou sejam inválidas.
|
206
|
+
# @return [String] código de barras formado por 44 caracteres numéricos.
|
207
|
+
def codigo_barras
|
208
|
+
raise Brcobranca::BoletoInvalido, self unless valid?
|
209
|
+
|
210
|
+
codigo = codigo_barras_primeira_parte # 18 digitos
|
211
|
+
codigo += codigo_barras_segunda_parte # 25 digitos
|
212
|
+
if codigo =~ /^(\d{4})(\d{39})$/
|
213
|
+
|
214
|
+
codigo_dv = codigo.modulo11(
|
215
|
+
multiplicador: (2..9).to_a,
|
216
|
+
mapeamento: { 0 => 1, 10 => 1, 11 => 1 }
|
217
|
+
) { |t| 11 - (t % 11) }
|
218
|
+
|
219
|
+
"#{Regexp.last_match[1]}#{codigo_dv}#{Regexp.last_match[2]}"
|
220
|
+
|
221
|
+
else
|
222
|
+
errors.add(:base, :too_long,
|
223
|
+
message: "tamanho(#{codigo.size}) prévio do código de barras(#{codigo}) inválido, deveria ser 43 dígitos")
|
224
|
+
raise Brcobranca::BoletoInvalido, self
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
# Monta a segunda parte do código de barras, que é específico para cada banco.
|
229
|
+
#
|
230
|
+
# @abstract Deverá ser sobreescrito para cada banco.
|
231
|
+
def codigo_barras_segunda_parte
|
232
|
+
raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
|
233
|
+
end
|
234
|
+
|
235
|
+
private
|
236
|
+
|
237
|
+
# Monta a primeira parte do código de barras, que é a mesma para todos bancos.
|
238
|
+
# @return [String] 18 caracteres numéricos.
|
239
|
+
def codigo_barras_primeira_parte
|
240
|
+
"#{banco}#{moeda}#{fator_vencimento}#{valor_documento_formatado}"
|
241
|
+
end
|
242
|
+
|
243
|
+
# Valor total do documento
|
244
|
+
# @return [String] 10 caracteres numéricos.
|
245
|
+
def valor_documento_formatado
|
246
|
+
valor_documento.round(2).limpa_valor_moeda.to_s.rjust(10, '0')
|
247
|
+
end
|
248
|
+
|
249
|
+
# Nome da classe do boleto
|
250
|
+
# @return [String]
|
251
|
+
def class_name
|
252
|
+
self.class.to_s.split('::').last.downcase
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Banco BRADESCO
|
6
|
+
class Bradesco < Base
|
7
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
8
|
+
validates_length_of :nosso_numero, maximum: 11, message: 'deve ser menor ou igual a 11 dígitos.'
|
9
|
+
validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
10
|
+
validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
11
|
+
|
12
|
+
# Nova instancia do Bradesco
|
13
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
14
|
+
def initialize(campos = {})
|
15
|
+
campos = { carteira: '06' }.merge!(campos)
|
16
|
+
|
17
|
+
campos[:local_pagamento] = 'Pagável preferencialmente na Rede Bradesco ou Bradesco Expresso'
|
18
|
+
|
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
|
+
'237'
|
27
|
+
end
|
28
|
+
|
29
|
+
# Carteira
|
30
|
+
#
|
31
|
+
# @return [String] 2 caracteres numéricos.
|
32
|
+
def carteira=(valor)
|
33
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
# Número seqüencial utilizado para identificar o boleto.
|
37
|
+
# @return [String] 11 caracteres numéricos.
|
38
|
+
def nosso_numero=(valor)
|
39
|
+
@nosso_numero = valor.to_s.rjust(11, '0') if valor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Nosso número para exibir no boleto.
|
43
|
+
# @return [String]
|
44
|
+
# @example
|
45
|
+
# boleto.nosso_numero_boleto #=> ""06/00000004042-8"
|
46
|
+
def nosso_numero_boleto
|
47
|
+
"#{carteira}/#{nosso_numero}-#{nosso_numero_dv}"
|
48
|
+
end
|
49
|
+
|
50
|
+
# Dígito verificador da agência
|
51
|
+
# @return [Integer] 1 caracteres numéricos.
|
52
|
+
def agencia_dv
|
53
|
+
agencia.modulo11(
|
54
|
+
multiplicador: [2, 3, 4, 5],
|
55
|
+
mapeamento: { 10 => 'P', 11 => 0 }
|
56
|
+
) { |total| 11 - (total % 11) }
|
57
|
+
end
|
58
|
+
|
59
|
+
# Dígito verificador do nosso número
|
60
|
+
# @return [Integer] 1 caracteres numéricos.
|
61
|
+
def nosso_numero_dv
|
62
|
+
"#{carteira}#{nosso_numero}".modulo11(
|
63
|
+
multiplicador: [2, 3, 4, 5, 6, 7],
|
64
|
+
mapeamento: { 10 => 'P', 11 => 0 }
|
65
|
+
) { |total| 11 - (total % 11) }
|
66
|
+
end
|
67
|
+
|
68
|
+
# Dígito verificador da conta corrente
|
69
|
+
# @return [Integer] 1 caracteres numéricos.
|
70
|
+
def conta_corrente_dv
|
71
|
+
conta_corrente.modulo11(
|
72
|
+
multiplicador: [2, 3, 4, 5, 6, 7],
|
73
|
+
mapeamento: { 10 => 'P', 11 => 0 }
|
74
|
+
) { |total| 11 - (total % 11) }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Agência + conta corrente do cliente para exibir no boleto.
|
78
|
+
# @return [String]
|
79
|
+
# @example
|
80
|
+
# boleto.agencia_conta_boleto #=> "0548-7 / 00001448-6"
|
81
|
+
def agencia_conta_boleto
|
82
|
+
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Segunda parte do código de barras.
|
86
|
+
#
|
87
|
+
# Posição | Tamanho | Conteúdo<br/>
|
88
|
+
# 20 a 23 | 4 | Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)<br/>
|
89
|
+
# 24 a 25 | 2 | Carteira<br/>
|
90
|
+
# 26 a 36 | 11 | Número do Nosso Número(Sem o digito verificador)<br/>
|
91
|
+
# 37 a 43 | 7 | Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)<br/>
|
92
|
+
# 44 a 44 | 1 | Zero<br/>
|
93
|
+
#
|
94
|
+
# @return [String] 25 caracteres numéricos.
|
95
|
+
def codigo_barras_segunda_parte
|
96
|
+
"#{agencia}#{carteira}#{nosso_numero}#{conta_corrente}0"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
#
|
5
|
+
# A Caixa tem dois padrões para a geração de boleto: SIGCB e SICOB.
|
6
|
+
# O SICOB foi substiuido pelo SIGCB que é implementado por esta classe.
|
7
|
+
# http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF
|
8
|
+
#
|
9
|
+
module Brcobranca
|
10
|
+
module Boleto
|
11
|
+
# Caixa
|
12
|
+
class Caixa < Base
|
13
|
+
# <b>REQUERIDO</b>: Emissão do boleto
|
14
|
+
attr_accessor :emissao
|
15
|
+
|
16
|
+
# Validações
|
17
|
+
# Modalidade/Carteira de Cobrança (1-Registrada | 2-Sem Registro)
|
18
|
+
validates_length_of :carteira, is: 1, message: 'deve possuir 1 dígitos.'
|
19
|
+
# Emissão do boleto (4-Beneficiário)
|
20
|
+
validates_length_of :emissao, is: 1, message: 'deve possuir 1 dígitos.'
|
21
|
+
validates_length_of :convenio, is: 6, message: 'deve possuir 6 dígitos.'
|
22
|
+
validates_length_of :nosso_numero, is: 15, message: 'deve possuir 15 dígitos.'
|
23
|
+
|
24
|
+
# Nova instância da CaixaEconomica
|
25
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
26
|
+
def initialize(campos = {})
|
27
|
+
campos = {
|
28
|
+
carteira: '1',
|
29
|
+
carteira_label: 'RG',
|
30
|
+
emissao: '4'
|
31
|
+
}.merge!(campos)
|
32
|
+
|
33
|
+
campos[:local_pagamento] = 'PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE'
|
34
|
+
|
35
|
+
super(campos)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Código do banco emissor
|
39
|
+
# @return [String]
|
40
|
+
def banco
|
41
|
+
'104'
|
42
|
+
end
|
43
|
+
|
44
|
+
# Dígito verificador do código do banco em módulo 10
|
45
|
+
# Módulo 10 de 104 é 0
|
46
|
+
# @return [String]
|
47
|
+
def banco_dv
|
48
|
+
'0'
|
49
|
+
end
|
50
|
+
|
51
|
+
# Número do convênio/contrato do cliente junto ao banco.
|
52
|
+
# @return [String] 6 caracteres numéricos.
|
53
|
+
def convenio=(valor)
|
54
|
+
@convenio = valor.to_s.rjust(6, '0') if valor
|
55
|
+
end
|
56
|
+
|
57
|
+
# Número seqüencial utilizado para identificar o boleto.
|
58
|
+
# @return [String] 15 caracteres numéricos.
|
59
|
+
def nosso_numero=(valor)
|
60
|
+
@nosso_numero = valor.to_s.rjust(15, '0') if valor
|
61
|
+
end
|
62
|
+
|
63
|
+
# Nosso número, 17 dígitos
|
64
|
+
# @return [String]
|
65
|
+
def nosso_numero_boleto
|
66
|
+
"#{carteira}#{emissao}#{nosso_numero}-#{nosso_numero_dv}"
|
67
|
+
end
|
68
|
+
|
69
|
+
# Dígito verificador do Nosso Número
|
70
|
+
# Utiliza-se o [-1..-1] para retornar o último caracter
|
71
|
+
# @return [String]
|
72
|
+
def nosso_numero_dv
|
73
|
+
"#{carteira}#{emissao}#{nosso_numero}".modulo11(
|
74
|
+
multiplicador: (2..9).to_a,
|
75
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
76
|
+
) { |total| 11 - (total % 11) }.to_s
|
77
|
+
end
|
78
|
+
|
79
|
+
# Número da agência/código cedente do cliente para exibir no boleto.
|
80
|
+
# @return [String]
|
81
|
+
# @example
|
82
|
+
# boleto.agencia_conta_boleto #=> "1565/100000-4"
|
83
|
+
def agencia_conta_boleto
|
84
|
+
"#{agencia}/#{convenio}-#{convenio_dv}"
|
85
|
+
end
|
86
|
+
|
87
|
+
# Dígito verificador do convênio ou código do cedente
|
88
|
+
# @return [String]
|
89
|
+
def convenio_dv
|
90
|
+
convenio.modulo11(
|
91
|
+
multiplicador: (2..9).to_a,
|
92
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
93
|
+
) { |total| 11 - (total % 11) }.to_s
|
94
|
+
end
|
95
|
+
|
96
|
+
# Monta a segunda parte do código de barras.
|
97
|
+
# 1 à 6: código do cedente, também conhecido como convênio
|
98
|
+
# 7: dígito verificador do código do cedente
|
99
|
+
# 8 à 10: dígito 3 à 5 do nosso número
|
100
|
+
# 11: dígito 1 do nosso número (modalidade da cobrança)
|
101
|
+
# 12 à 14: dígito 6 à 8 do nosso número
|
102
|
+
# 15: dígito 2 do nosso número (emissão do boleto)
|
103
|
+
# 16 à 24: dígito 9 à 17 do nosso número
|
104
|
+
# 25: dígito verificador do campo livre
|
105
|
+
# @return [String]
|
106
|
+
def codigo_barras_segunda_parte
|
107
|
+
campo_livre = "#{convenio}" \
|
108
|
+
"#{convenio_dv}" \
|
109
|
+
"#{nosso_numero_boleto[2..4]}" \
|
110
|
+
"#{nosso_numero_boleto[0..0]}" \
|
111
|
+
"#{nosso_numero_boleto[5..7]}" \
|
112
|
+
"#{nosso_numero_boleto[1..1]}" \
|
113
|
+
"#{nosso_numero_boleto[8..16]}"
|
114
|
+
|
115
|
+
campo_livre.to_s +
|
116
|
+
campo_livre.modulo11(
|
117
|
+
multiplicador: (2..9).to_a,
|
118
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
119
|
+
) { |total| 11 - (total % 11) }.to_s
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# Citibank
|
6
|
+
class Citibank < Base
|
7
|
+
# <b>REQUERIDO</b>: Portfolio
|
8
|
+
attr_accessor :portfolio
|
9
|
+
|
10
|
+
validates_length_of :convenio, is: 10, message: 'deve possuir 10 dígitos.' # Conta cosmos
|
11
|
+
validates_length_of :nosso_numero, is: 11, message: 'deve possuir 11 dígitos.'
|
12
|
+
validates_length_of :portfolio, is: 3, message: 'deve possuir 3 dígitos.' # Portfolio
|
13
|
+
|
14
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
15
|
+
def initialize(campos = {})
|
16
|
+
campos = {
|
17
|
+
carteira: '3',
|
18
|
+
carteira_label: '3'
|
19
|
+
}.merge!(campos)
|
20
|
+
super(campos)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Código do banco emissor
|
24
|
+
# @return [String]
|
25
|
+
def banco
|
26
|
+
'745'
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String]
|
30
|
+
def banco_dv
|
31
|
+
'5'
|
32
|
+
end
|
33
|
+
|
34
|
+
# Número do portfolio do cliente junto ao banco.
|
35
|
+
# @return [String] 3 caracteres numéricos.
|
36
|
+
def portfolio=(valor)
|
37
|
+
@portfolio = valor.to_s.rjust(3, '0') if valor
|
38
|
+
end
|
39
|
+
|
40
|
+
# Número do convênio/contrato do cliente junto ao banco.
|
41
|
+
# @return [String] 10 caracteres numéricos.
|
42
|
+
def convenio=(valor)
|
43
|
+
@convenio = valor.to_s.rjust(10, '0') if valor
|
44
|
+
end
|
45
|
+
|
46
|
+
# Número seqüencial utilizado para identificar o boleto.
|
47
|
+
# @return [String] 11 caracteres numéricos.
|
48
|
+
def nosso_numero=(valor)
|
49
|
+
@nosso_numero = valor.to_s.rjust(11, '0') if valor
|
50
|
+
end
|
51
|
+
|
52
|
+
# Nosso número, 11 dígitos
|
53
|
+
# @return [String]
|
54
|
+
def nosso_numero_boleto
|
55
|
+
"#{nosso_numero}.#{nosso_numero_dv}"
|
56
|
+
end
|
57
|
+
|
58
|
+
# Dígito verificador do Nosso Número
|
59
|
+
# Utiliza-se o [-1..-1] para retornar o último caracter
|
60
|
+
# @return [String]
|
61
|
+
def nosso_numero_dv
|
62
|
+
nosso_numero.to_s.modulo11(
|
63
|
+
multiplicador: (2..9).to_a,
|
64
|
+
mapeamento: { 10 => 0, 11 => 0 }
|
65
|
+
) { |total| 11 - (total % 11) }.to_s
|
66
|
+
end
|
67
|
+
|
68
|
+
# Número da agência/código cedente do cliente para exibir no boleto.
|
69
|
+
# @return [String]
|
70
|
+
# @example
|
71
|
+
# boleto.agencia_conta_boleto #=> "1565/100000-4"
|
72
|
+
def agencia_conta_boleto
|
73
|
+
"#{agencia} / #{convenio}"
|
74
|
+
end
|
75
|
+
|
76
|
+
# Monta a segunda parte do código de barras.
|
77
|
+
# Descrição do Campo | Posição | Tamanho | Campo | Conteúdo do Campo
|
78
|
+
# Código do Produto | 20 | 1 | 6 | 3 - Cobrança com registro / sem registro ou 4 Cobrança de seguro - sem registro
|
79
|
+
# Portfólio | 21 a 23 | 3 | 7 | 3 últimos dígitos do campo de identificação da empresa no CITIBANK (Posição 44 a 46 do arquivo retorno)
|
80
|
+
# Base | 24 a 29 | 6. | 8. |
|
81
|
+
# Sequência | 30 a 31 | 2 | 9. |
|
82
|
+
# Dígito Conta Cosmos | 32 | 1 | 10. |
|
83
|
+
# Nosso Número + DV | 33 a 44 | 12 | 11. |
|
84
|
+
# A discriminação de “Índice”, “Base”, “Seqüência” e “Dígito verificador” podem ser encontrados na Conta Cosmos do cedente da seguinte forma:
|
85
|
+
# Ex.: 0.123456.78.9 = Conta Cosmos
|
86
|
+
# 0 - Índice
|
87
|
+
# 123456 - Base (Posição 24 a 29)
|
88
|
+
# 78 - Sequência (Posição 30 a 31)
|
89
|
+
# 9 - Dígito Verificador (Posição 32
|
90
|
+
#
|
91
|
+
# @return [String]
|
92
|
+
def codigo_barras_segunda_parte
|
93
|
+
"#{carteira}#{portfolio}#{convenio[1..]}#{nosso_numero}#{nosso_numero_dv}"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
# CrediSIS
|
6
|
+
class Credisis < 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: 7, message: 'deve ser menor ou igual a 7 dígitos.'
|
9
|
+
validates_length_of :carteira, is: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
10
|
+
validates_length_of :convenio, is: 6, message: 'deve ser menor ou igual a 6 dígitos.'
|
11
|
+
validates_length_of :nosso_numero, maximum: 6, message: 'deve ser menor ou igual a 6 dígitos.'
|
12
|
+
validates_presence_of :documento_cedente, message: 'não pode estar em branco.'
|
13
|
+
validates_numericality_of :documento_cedente, message: 'não é um número.'
|
14
|
+
|
15
|
+
# Nova instancia do CrediSIS
|
16
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
17
|
+
def initialize(campos = {})
|
18
|
+
campos = { carteira: '18' }.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
|
+
'097'
|
27
|
+
end
|
28
|
+
|
29
|
+
# Carteira
|
30
|
+
# @return [String] 2 caracteres numéricos.
|
31
|
+
def carteira=(valor)
|
32
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
33
|
+
end
|
34
|
+
|
35
|
+
# Dígito verificador do banco
|
36
|
+
#
|
37
|
+
# @return [String] 1 caracteres numéricos.
|
38
|
+
def banco_dv
|
39
|
+
'3'
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retorna dígito verificador da agência
|
43
|
+
#
|
44
|
+
# @return [String] 1 caracteres numéricos.
|
45
|
+
def agencia_dv
|
46
|
+
agencia.modulo11(mapeamento: { 10 => 'X' })
|
47
|
+
end
|
48
|
+
|
49
|
+
# Conta corrente
|
50
|
+
# @return [String] 7 caracteres numéricos.
|
51
|
+
def conta_corrente=(valor)
|
52
|
+
@conta_corrente = valor.to_s.rjust(7, '0') if valor
|
53
|
+
end
|
54
|
+
|
55
|
+
# Número do convênio/contrato do cliente junto ao banco.
|
56
|
+
# @return [String] 6 caracteres numéricos.
|
57
|
+
def convenio=(valor)
|
58
|
+
@convenio = valor.to_s.rjust(6, '0') if valor
|
59
|
+
end
|
60
|
+
|
61
|
+
# Dígito verificador da conta corrente
|
62
|
+
# @return [String] 1 caracteres numéricos.
|
63
|
+
def conta_corrente_dv
|
64
|
+
conta_corrente.modulo11(mapeamento: { 10 => 'X' })
|
65
|
+
end
|
66
|
+
|
67
|
+
# Nosso número
|
68
|
+
# @return [String] 6 caracteres numéricos.
|
69
|
+
def nosso_numero=(valor)
|
70
|
+
@nosso_numero = valor.to_s.rjust(6, '0')
|
71
|
+
end
|
72
|
+
|
73
|
+
# Nosso número para exibir no boleto.
|
74
|
+
# @return [String]
|
75
|
+
# @example
|
76
|
+
# boleto.nosso_numero_boleto #=> "10000000027000095-7"
|
77
|
+
def nosso_numero_boleto
|
78
|
+
"097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
|
79
|
+
end
|
80
|
+
|
81
|
+
# Agência + conta corrente do cliente para exibir no boleto.
|
82
|
+
# @return [String]
|
83
|
+
# @example
|
84
|
+
# boleto.agencia_conta_boleto #=> "0001-9 / 0000002-7"
|
85
|
+
def agencia_conta_boleto
|
86
|
+
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
|
87
|
+
end
|
88
|
+
|
89
|
+
# X – Módulo 11 do CPF/CNPJ (incluindo dígitos verificadores) do Beneficiário emissor
|
90
|
+
# Obs.: Caso for CPF, utilizar 9 como limitador da multiplicação.
|
91
|
+
# Caso for CNPJ, utilizar 8 no limitador da multiplicação.
|
92
|
+
def documento_cedente_dv
|
93
|
+
options = { mapeamento: { 0 => 1, 10 => 1, 11 => 1 } }
|
94
|
+
options.merge(multiplicador: [8, 7, 6, 5, 4, 3, 2]) if documento_cedente.to_s.size > 11
|
95
|
+
documento_cedente.modulo11(options)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Segunda parte do código de barras.
|
99
|
+
# @return [String] 25 caracteres numéricos.
|
100
|
+
# 1. - Número do Banco: “097”
|
101
|
+
# 2. - Moeda: “9”
|
102
|
+
# 3. - DV do Código de Barras, Baseado no Módulo 11 (Vide Anexo X).
|
103
|
+
# 4. - Fator de Vencimento do Boleto (Vide Anexo VII).
|
104
|
+
# 5. - Valor do Título, expresso em Reais, com 02 casas decimais.
|
105
|
+
# 6. - Fixo Zeros: Campo com preenchimento Zerado “00000”
|
106
|
+
# 7. - Composição do Nosso Número: 097XAAAACCCCCCSSSSSS, sendo:
|
107
|
+
# Composição do Nosso Número
|
108
|
+
# 097 - Fixo
|
109
|
+
# X - Módulo 11 do CPF/CNPJ (Incluindo dígitos verificadores) do Beneficiário.
|
110
|
+
# AAAA - Código da Agência CrediSIS ao qual o Beneficiário possui Conta.
|
111
|
+
# CCCCCC - Código de Convênio do Beneficiário no Sistema CrediSIS
|
112
|
+
# SSSSSS - Sequencial Único do Boleto
|
113
|
+
def codigo_barras_segunda_parte
|
114
|
+
"00000097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|