boleto_bancario 0.0.1.beta → 1.0.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.markdown +58 -2
- data/README.markdown +679 -156
- data/lib/boleto_bancario/calculos/documento.rb +191 -0
- data/lib/boleto_bancario/calculos/fator_vencimento.rb +78 -31
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2.rb +65 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +5 -51
- data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
- data/lib/boleto_bancario/core/banco_brasil.rb +30 -5
- data/lib/boleto_bancario/core/banrisul.rb +182 -0
- data/lib/boleto_bancario/core/boleto.rb +97 -35
- data/lib/boleto_bancario/core/bradesco.rb +28 -16
- data/lib/boleto_bancario/core/c6_bank.rb +155 -0
- data/lib/boleto_bancario/core/caixa.rb +233 -0
- data/lib/boleto_bancario/core/inter.rb +155 -0
- data/lib/boleto_bancario/core/itau.rb +20 -10
- data/lib/boleto_bancario/core/nubank.rb +156 -0
- data/lib/boleto_bancario/core/santander.rb +19 -22
- data/lib/boleto_bancario/core/sicoob.rb +172 -0
- data/lib/boleto_bancario/core/sicredi.rb +290 -0
- data/lib/boleto_bancario/locales/pt-BR.yml +55 -0
- data/lib/boleto_bancario/renderers/base.rb +154 -0
- data/lib/boleto_bancario/renderers/html_renderer.rb +92 -0
- data/lib/boleto_bancario/renderers/pdf_renderer.rb +130 -0
- data/lib/boleto_bancario/renderers/png_renderer.rb +66 -0
- data/lib/boleto_bancario/templates/_barcode.html.erb +3 -0
- data/lib/boleto_bancario/templates/_cedente.html.erb +14 -0
- data/lib/boleto_bancario/templates/_header.html.erb +4 -0
- data/lib/boleto_bancario/templates/_instructions.html.erb +10 -0
- data/lib/boleto_bancario/templates/_payment.html.erb +36 -0
- data/lib/boleto_bancario/templates/_sacado.html.erb +10 -0
- data/lib/boleto_bancario/templates/boleto.html.erb +22 -0
- data/lib/boleto_bancario/templates/boleto_styles.css +18 -0
- data/lib/boleto_bancario/version.rb +3 -2
- data/lib/boleto_bancario.rb +48 -19
- data/lib/generators/boleto_bancario/views_generator.rb +47 -0
- metadata +140 -106
- data/.gitignore +0 -18
- data/.rspec +0 -1
- data/.rvmrc +0 -1
- data/Gemfile +0 -3
- data/Planning.markdown +0 -131
- data/Rakefile +0 -9
- data/TODO.markdown +0 -5
- data/boleto_bancario.gemspec +0 -25
- data/documentacoes_dos_boletos/Bradesco/Manual_BRADESCO.PDF +0 -0
- data/spec/boleto_bancario/calculos/digitos_spec.rb +0 -19
- data/spec/boleto_bancario/calculos/fator_vencimento_spec.rb +0 -59
- data/spec/boleto_bancario/calculos/fatores_de_multiplicacao_spec.rb +0 -69
- data/spec/boleto_bancario/calculos/linha_digitavel_spec.rb +0 -57
- data/spec/boleto_bancario/calculos/modulo10_spec.rb +0 -49
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a7_spec.rb +0 -43
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero_spec.rb +0 -39
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +0 -61
- data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x_spec.rb +0 -37
- data/spec/boleto_bancario/calculos/modulo11_spec.rb +0 -19
- data/spec/boleto_bancario/core/banco_brasil_spec.rb +0 -383
- data/spec/boleto_bancario/core/boleto_spec.rb +0 -102
- data/spec/boleto_bancario/core/bradesco_spec.rb +0 -170
- data/spec/boleto_bancario/core/itau_spec.rb +0 -336
- data/spec/boleto_bancario/core/santander_spec.rb +0 -135
- data/spec/shared_examples/boleto_bancario_shared_example.rb +0 -164
- data/spec/spec_helper.rb +0 -14
|
@@ -80,17 +80,6 @@ module BoletoBancario
|
|
|
80
80
|
12
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
# Tamanho máximo da carteira.
|
|
84
|
-
# O tamanho máximo é justamente 2 porque no código de barras só é permitido 2 posições para este campo.
|
|
85
|
-
#
|
|
86
|
-
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
87
|
-
#
|
|
88
|
-
# @return [Fixnum] 2
|
|
89
|
-
#
|
|
90
|
-
def self.tamanho_maximo_carteira
|
|
91
|
-
3
|
|
92
|
-
end
|
|
93
|
-
|
|
94
83
|
# Tamanho máximo do código do cedente emitido no Boleto.
|
|
95
84
|
# O tamanho máximo é justamente 7 porque no código de barras só é permitido 7 posições para este campo.
|
|
96
85
|
#
|
|
@@ -102,14 +91,24 @@ module BoletoBancario
|
|
|
102
91
|
7
|
|
103
92
|
end
|
|
104
93
|
|
|
105
|
-
#
|
|
94
|
+
# <b>Carteiras suportadas.</b>
|
|
95
|
+
#
|
|
96
|
+
# <b>Método criado para validar se a carteira informada é suportada.</b>
|
|
97
|
+
#
|
|
98
|
+
# @return [Array]
|
|
99
|
+
#
|
|
100
|
+
def self.carteiras_suportadas
|
|
101
|
+
%w[101 102 121]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Validações para os campos abaixo:
|
|
106
105
|
#
|
|
107
106
|
# * Número do documento
|
|
108
107
|
# * Conta Corrente
|
|
109
108
|
# * Agencia
|
|
110
109
|
# * Carteira
|
|
111
110
|
#
|
|
112
|
-
# Se você quiser sobrescrever os
|
|
111
|
+
# Se você quiser sobrescrever os metodos, <b>ficará a sua responsabilidade.</b>
|
|
113
112
|
# Basta você sobrescrever os métodos de validação:
|
|
114
113
|
#
|
|
115
114
|
# class Santander < BoletoBancario::Core::Santander
|
|
@@ -124,6 +123,10 @@ module BoletoBancario
|
|
|
124
123
|
# def self.tamanho_maximo_numero_documento
|
|
125
124
|
# 9
|
|
126
125
|
# end
|
|
126
|
+
#
|
|
127
|
+
# def self.carteiras_suportadas
|
|
128
|
+
# %w[101 102 121]
|
|
129
|
+
# end
|
|
127
130
|
# end
|
|
128
131
|
#
|
|
129
132
|
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
|
@@ -135,7 +138,8 @@ module BoletoBancario
|
|
|
135
138
|
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
|
136
139
|
validates :codigo_cedente, length: { maximum: tamanho_maximo_codigo_cedente }, if: :deve_validar_codigo_cedente?
|
|
137
140
|
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
|
138
|
-
|
|
141
|
+
|
|
142
|
+
validates :carteira, inclusion: { in: ->(object) { object.class.carteiras_suportadas } }, if: :deve_validar_carteira?
|
|
139
143
|
|
|
140
144
|
# @return [String] 4 caracteres
|
|
141
145
|
#
|
|
@@ -155,12 +159,6 @@ module BoletoBancario
|
|
|
155
159
|
@numero_documento.to_s.rjust(12, '0') if @numero_documento.present?
|
|
156
160
|
end
|
|
157
161
|
|
|
158
|
-
# @return [String] 3 caracteres
|
|
159
|
-
#
|
|
160
|
-
def carteira
|
|
161
|
-
@carteira.to_s.rjust(3, '0') if @carteira.present?
|
|
162
|
-
end
|
|
163
|
-
|
|
164
162
|
# Formata a carteira dependendo se ela é registrada ou não.
|
|
165
163
|
#
|
|
166
164
|
# Para cobrança COM registro usar: <b>COBRANCA SIMPLES ECR</b>
|
|
@@ -206,7 +204,7 @@ module BoletoBancario
|
|
|
206
204
|
# @return [String]
|
|
207
205
|
#
|
|
208
206
|
def agencia_codigo_cedente
|
|
209
|
-
"#{agencia}
|
|
207
|
+
"#{agencia} / #{codigo_cedente}"
|
|
210
208
|
end
|
|
211
209
|
|
|
212
210
|
# Mostra o campo nosso número calculando o dígito verificador do nosso número.
|
|
@@ -260,7 +258,6 @@ module BoletoBancario
|
|
|
260
258
|
#
|
|
261
259
|
# Seguradoras (Se 7% informar 7. Limitado a 9%)
|
|
262
260
|
# <b>Demais clientes usar 0 (zero)</b>
|
|
263
|
-
# O padrão é zero.
|
|
264
261
|
#
|
|
265
262
|
# @return [String]
|
|
266
263
|
#
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module BoletoBancario
|
|
3
|
+
module Core
|
|
4
|
+
# Implementação de emissão de boleto bancário pelo Banco Sicoob.
|
|
5
|
+
#
|
|
6
|
+
# === Documentação Implementada
|
|
7
|
+
#
|
|
8
|
+
# A documentação na qual essa implementação foi baseada está localizada na pasta
|
|
9
|
+
# 'documentacoes_dos_boletos/sicoob' dentro dessa biblioteca.
|
|
10
|
+
#
|
|
11
|
+
# === Código da Carteira
|
|
12
|
+
#
|
|
13
|
+
# '1' - Cobrança SEM registro
|
|
14
|
+
# '9' - Cobrança COM registro
|
|
15
|
+
#
|
|
16
|
+
class Sicoob < Boleto
|
|
17
|
+
# Tamanho máximo de uma agência no Banco Sicoob.
|
|
18
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
19
|
+
#
|
|
20
|
+
# @return [Fixnum] 4
|
|
21
|
+
#
|
|
22
|
+
def self.tamanho_maximo_agencia
|
|
23
|
+
4
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Tamanho máximo do codigo cedente no Banco Sicoob.
|
|
27
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
28
|
+
#
|
|
29
|
+
# @return [Fixnum] 7
|
|
30
|
+
#
|
|
31
|
+
def self.tamanho_maximo_codigo_cedente
|
|
32
|
+
7
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Tamanho máximo do numero do documento no Boleto.
|
|
36
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
37
|
+
#
|
|
38
|
+
# @return [Fixnum] 6
|
|
39
|
+
#
|
|
40
|
+
def self.tamanho_maximo_numero_documento
|
|
41
|
+
6
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# <b>Carteiras suportadas.</b>
|
|
45
|
+
#
|
|
46
|
+
# <b>Método criado para validar se a carteira informada é suportada.</b>
|
|
47
|
+
#
|
|
48
|
+
# @return [Array]
|
|
49
|
+
#
|
|
50
|
+
def self.carteiras_suportadas
|
|
51
|
+
%w[1 9]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Validações para os campos abaixo:
|
|
55
|
+
#
|
|
56
|
+
# * Agencia
|
|
57
|
+
# * Codigo Cedente
|
|
58
|
+
# * Número do documento
|
|
59
|
+
#
|
|
60
|
+
# Se você quiser sobrescrever os metodos, <b>ficará a sua responsabilidade.</b>
|
|
61
|
+
# Basta você sobrescrever os métodos de validação:
|
|
62
|
+
#
|
|
63
|
+
# class Sicoob < BoletoBancario::Core::Sicoob
|
|
64
|
+
# def self.tamanho_maximo_agencia
|
|
65
|
+
# 6
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
# def self.tamanho_maximo_codigo_cedente
|
|
69
|
+
# 9
|
|
70
|
+
# end
|
|
71
|
+
#
|
|
72
|
+
# def self.tamanho_maximo_numero_documento
|
|
73
|
+
# 10
|
|
74
|
+
# end
|
|
75
|
+
# end
|
|
76
|
+
#
|
|
77
|
+
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
|
78
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
|
79
|
+
# sobreescritos também).
|
|
80
|
+
#
|
|
81
|
+
validates :agencia, :codigo_cedente, presence: true
|
|
82
|
+
|
|
83
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
|
84
|
+
validates :codigo_cedente, length: { maximum: tamanho_maximo_codigo_cedente }, if: :deve_validar_codigo_cedente?
|
|
85
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
|
86
|
+
|
|
87
|
+
validates :carteira, inclusion: { in: ->(object) { object.class.carteiras_suportadas } }, if: :deve_validar_carteira?
|
|
88
|
+
|
|
89
|
+
# @return [String] 4 caracteres
|
|
90
|
+
#
|
|
91
|
+
def agencia
|
|
92
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @return [String] 7 caracteres
|
|
96
|
+
#
|
|
97
|
+
def codigo_cedente
|
|
98
|
+
@codigo_cedente.to_s.rjust(7, '0') if @codigo_cedente.present?
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# @return [String] 6 caracteres
|
|
102
|
+
#
|
|
103
|
+
def numero_documento
|
|
104
|
+
@numero_documento.to_s.rjust(6, '0') if @numero_documento.present?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# @return [String] Código do Banco descrito na documentação.
|
|
108
|
+
#
|
|
109
|
+
def codigo_banco
|
|
110
|
+
'756'
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# @return [String] Dígito do código do banco descrito na documentação.
|
|
114
|
+
#
|
|
115
|
+
def digito_codigo_banco
|
|
116
|
+
'0'
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Campo Agência / Código do Cedente
|
|
120
|
+
#
|
|
121
|
+
# @return [String]
|
|
122
|
+
#
|
|
123
|
+
def agencia_codigo_cedente
|
|
124
|
+
"#{agencia} / #{codigo_cedente}"
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# O nosso número descrino na documentação é formado pelo dois ultimos digitos do ano autal e
|
|
128
|
+
# por outros 6 digitos que o clinte usara para numerar os documentos, assim sendo composto por 8 dígitos.
|
|
129
|
+
#
|
|
130
|
+
# @return [String]
|
|
131
|
+
#
|
|
132
|
+
def nosso_numero
|
|
133
|
+
"#{ano}#{numero_documento}"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Ano atual usado para os calculos
|
|
137
|
+
#
|
|
138
|
+
# @return [String]
|
|
139
|
+
#
|
|
140
|
+
def ano
|
|
141
|
+
Date.today.strftime('%y')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# === Código de barras do banco
|
|
145
|
+
#
|
|
146
|
+
# ___________________________________________________________
|
|
147
|
+
# | Posição | Tamanho | Descrição |
|
|
148
|
+
# |---------|---------|---------------------------------------|
|
|
149
|
+
# | 20 - 20 | 01 | Código da carteira |
|
|
150
|
+
# | 21 - 24 | 04 | Código da agência |
|
|
151
|
+
# | 25 - 26 | 02 | Código da modalidade de cobrança (01) |
|
|
152
|
+
# | 27 - 33 | 07 | Código do Cedente |
|
|
153
|
+
# | 34 - 41 | 08 | Nosso Número do título |
|
|
154
|
+
# | 42 - 44 | 03 | Número da Parcela do Título (001) |
|
|
155
|
+
# |___________________________________________________________|
|
|
156
|
+
#
|
|
157
|
+
# @return [String]
|
|
158
|
+
#
|
|
159
|
+
def codigo_de_barras_do_banco
|
|
160
|
+
"#{carteira}#{agencia}#{modalidade_cobranca}#{codigo_cedente}#{nosso_numero}#{parcelas}"
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def modalidade_cobranca
|
|
164
|
+
'01'
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def parcelas
|
|
168
|
+
'001'
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module BoletoBancario
|
|
3
|
+
module Core
|
|
4
|
+
# Implementação de emissão de boleto bancário pela Cooperativa de Credito Sicredi.
|
|
5
|
+
#
|
|
6
|
+
# === Documentação Implementada
|
|
7
|
+
#
|
|
8
|
+
# A documentação na qual essa implementação foi baseada está localizada na pasta
|
|
9
|
+
# 'documentacoes_dos_boletos/sicredi' dentro dessa biblioteca.
|
|
10
|
+
# === Carteiras suportadas
|
|
11
|
+
#
|
|
12
|
+
# Segue abaixo as carteiras suportadas pelo Sicredi <b>seguindo a documentação</b>:
|
|
13
|
+
#
|
|
14
|
+
# __________________________________________
|
|
15
|
+
# | Carteira | Descrição |
|
|
16
|
+
# | 03 | Cobrança Simples sem registro |
|
|
17
|
+
# | C | Cobrança Simples sem registro |
|
|
18
|
+
# |__________________________________________|
|
|
19
|
+
#
|
|
20
|
+
class Sicredi < Boleto
|
|
21
|
+
# Código do posto da cooperativa de crédito
|
|
22
|
+
attr_accessor :posto
|
|
23
|
+
|
|
24
|
+
# Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
|
|
25
|
+
attr_accessor :byte_id
|
|
26
|
+
|
|
27
|
+
# Tamanho máximo de uma agência no Sicredi.
|
|
28
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
29
|
+
#
|
|
30
|
+
# @return [Fixnum] 4
|
|
31
|
+
#
|
|
32
|
+
def self.tamanho_maximo_agencia
|
|
33
|
+
4
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Tamanho máximo da conta corrente no Boleto.
|
|
37
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
38
|
+
#
|
|
39
|
+
# @return [Fixnum] 5
|
|
40
|
+
#
|
|
41
|
+
def self.tamanho_maximo_conta_corrente
|
|
42
|
+
5
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Tamanho máximo do posto no Boleto.
|
|
46
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
47
|
+
#
|
|
48
|
+
# @return [Fixnum] 2
|
|
49
|
+
#
|
|
50
|
+
def self.tamanho_maximo_posto
|
|
51
|
+
2
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# <b>Byte Identificadores suportados.</b>
|
|
55
|
+
# <b>Método criado para validar se o byte identificador informado é suportado.</b>
|
|
56
|
+
#
|
|
57
|
+
# @return [Array]
|
|
58
|
+
#
|
|
59
|
+
def self.byte_id_suportados
|
|
60
|
+
%w[2 3 4 5 6 7 8 9]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# <b>Carteiras suportadas.</b>
|
|
64
|
+
# <b>Método criado para validar se a carteira informada é suportada.</b>
|
|
65
|
+
#
|
|
66
|
+
# @return [Array]
|
|
67
|
+
#
|
|
68
|
+
def self.carteiras_suportadas
|
|
69
|
+
%w[03 C]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Tamanho máximo do número do documento emitido no Boleto.
|
|
73
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
|
74
|
+
#
|
|
75
|
+
# @return [Fixnum] 5
|
|
76
|
+
#
|
|
77
|
+
def self.tamanho_maximo_numero_documento
|
|
78
|
+
5
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Validações para os campos abaixo:
|
|
82
|
+
#
|
|
83
|
+
# * Agencia
|
|
84
|
+
# * Conta Corrente
|
|
85
|
+
# * Posto
|
|
86
|
+
# * Byte Identificador
|
|
87
|
+
# * Carteira
|
|
88
|
+
# * Número do documento
|
|
89
|
+
#
|
|
90
|
+
# Se você quiser sobrescrever os metodos, <b>ficará a sua responsabilidade.</b>
|
|
91
|
+
# Basta você sobrescrever os métodos de validação:
|
|
92
|
+
#
|
|
93
|
+
# class Sicredi < BoletoBancario::Core::Sicredi
|
|
94
|
+
# def self.tamanho_maximo_agencia
|
|
95
|
+
# 5
|
|
96
|
+
# end
|
|
97
|
+
#
|
|
98
|
+
# def self.tamanho_maximo_conta_corrente
|
|
99
|
+
# 7
|
|
100
|
+
# end
|
|
101
|
+
#
|
|
102
|
+
# def self.tamanho_maximo_posto
|
|
103
|
+
# 2
|
|
104
|
+
# end
|
|
105
|
+
#
|
|
106
|
+
# def self.byte_id_suportados
|
|
107
|
+
# %w[1 12 123]
|
|
108
|
+
# end
|
|
109
|
+
#
|
|
110
|
+
# def self.carteiras_suportadas
|
|
111
|
+
# %w[45 89]
|
|
112
|
+
# end
|
|
113
|
+
#
|
|
114
|
+
# def self.tamanho_maximo_numero_documento
|
|
115
|
+
# 10
|
|
116
|
+
# end
|
|
117
|
+
# end
|
|
118
|
+
#
|
|
119
|
+
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
|
120
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
|
121
|
+
# sobreescritos também).
|
|
122
|
+
#
|
|
123
|
+
validates :agencia, :conta_corrente, :posto, :byte_id, presence: true
|
|
124
|
+
|
|
125
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
|
126
|
+
validates :conta_corrente, length: { maximum: tamanho_maximo_conta_corrente }, if: :deve_validar_conta_corrente?
|
|
127
|
+
validates :posto, length: { maximum: tamanho_maximo_posto }, if: :deve_validar_posto?
|
|
128
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
|
129
|
+
|
|
130
|
+
validates :carteira, inclusion: { in: ->(object) { object.class.carteiras_suportadas } }, if: :deve_validar_carteira?
|
|
131
|
+
validates :byte_id, inclusion: { in: ->(object) { object.class.byte_id_suportados } }, if: :deve_validar_byte_id?
|
|
132
|
+
|
|
133
|
+
# @return [String] 4 caracteres
|
|
134
|
+
#
|
|
135
|
+
def agencia
|
|
136
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @return [String] 5 caracteres
|
|
140
|
+
#
|
|
141
|
+
def conta_corrente
|
|
142
|
+
@conta_corrente.to_s.rjust(5, '0') if @conta_corrente.present?
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @return [String] 2 caracteres
|
|
146
|
+
#
|
|
147
|
+
def posto
|
|
148
|
+
@posto.to_s.rjust(2, '0') if @posto.present?
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# @return [String] 1 caracteres
|
|
152
|
+
#
|
|
153
|
+
def byte_id
|
|
154
|
+
@byte_id.to_s.rjust(1, '0') if @byte_id.present?
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# @return [String] 5 caracteres
|
|
158
|
+
#
|
|
159
|
+
def numero_documento
|
|
160
|
+
@numero_documento.to_s.rjust(5, '0') if @numero_documento.present?
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# A formatação da Carteira Simples é 1
|
|
164
|
+
#
|
|
165
|
+
# @return [String]
|
|
166
|
+
#
|
|
167
|
+
def carteira_formatada
|
|
168
|
+
tipo_carteira
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @return [String] Código do Banco descrito na documentação.
|
|
172
|
+
#
|
|
173
|
+
def codigo_banco
|
|
174
|
+
'748'
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# @return [String] Dígito do código do banco descrito na documentação.
|
|
178
|
+
#
|
|
179
|
+
def digito_codigo_banco
|
|
180
|
+
'X'
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Campo Agência/Código Beneficiário (:conta_corrente) formatado
|
|
184
|
+
#
|
|
185
|
+
# @return [String] Campo descrito na documentação.
|
|
186
|
+
#
|
|
187
|
+
def agencia_codigo_cedente
|
|
188
|
+
"#{agencia}.#{posto}.#{conta_corrente}"
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# @return [String] Código referente ao tipo de cobrança
|
|
192
|
+
#
|
|
193
|
+
def tipo_cobranca
|
|
194
|
+
"3" # Somente sem registro
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# @return [String] Código referente ao tipo de carteira
|
|
198
|
+
#
|
|
199
|
+
def tipo_carteira
|
|
200
|
+
"1"
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Mostra o campo nosso número calculando o dígito verificador do nosso número. AA/BXXXXX-D onde:
|
|
204
|
+
# AA = Ano atual, apenas os dois ultimos digitos.
|
|
205
|
+
# B = Byte Identificador (2 a 9). 1 só poderá ser utilizado pela cooperativa.
|
|
206
|
+
# XXXXX – Número do Documento.
|
|
207
|
+
# D = Digito Verificador pelo módulo 11.
|
|
208
|
+
#
|
|
209
|
+
# EX: 13/200004-1
|
|
210
|
+
#
|
|
211
|
+
# @return [String]
|
|
212
|
+
#
|
|
213
|
+
def nosso_numero
|
|
214
|
+
"#{ano}/#{byte_id}#{numero_documento}-#{nosso_numero_dv}"
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Ano atual usado para os calculos
|
|
218
|
+
#
|
|
219
|
+
# @return [String]
|
|
220
|
+
#
|
|
221
|
+
def ano
|
|
222
|
+
Date.today.strftime('%y')
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Digito verificador do nosso número
|
|
226
|
+
# Calculado atravez do modulo 11 com peso de 2 a 9 da direta para a esquerda.
|
|
227
|
+
# ____________________________________________________________________________
|
|
228
|
+
# | | Agencia | Posto | Conta Corrente | Ano | Byte | Numero Documento |
|
|
229
|
+
# |---------|---------|-------|----------------|-----|------|------------------|
|
|
230
|
+
# | Tamanho | 04 | 02 | 05 | 02 | 01 | 05 |
|
|
231
|
+
# |_________|__________________________________________________________________|
|
|
232
|
+
#
|
|
233
|
+
# @return [String]
|
|
234
|
+
#
|
|
235
|
+
def nosso_numero_dv
|
|
236
|
+
Modulo11FatorDe2a9RestoZero.new("#{agencia}#{posto}#{conta_corrente}#{ano}#{byte_id}#{numero_documento}")
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# === Código de barras do banco
|
|
240
|
+
# __________________________________________________________________________
|
|
241
|
+
# | Posição | Tamanho | Descrição |
|
|
242
|
+
# |---------|---------|------------------------------------------------------|
|
|
243
|
+
# | 20 – 21 | 02 | Carteira |
|
|
244
|
+
# | 22 – 30 | 09 | Nosso número com o digito identificador |
|
|
245
|
+
# | 31 – 34 | 04 | Cooperativa de crédito/agência beneficiária |
|
|
246
|
+
# | 35 – 36 | 02 | Posto da cooperativa de crédito/agência beneficiária |
|
|
247
|
+
# | 37 – 41 | 05 | Código do beneficiário |
|
|
248
|
+
# | 42 – 42 | 01 | Será 1 quando houver o valor do documento |
|
|
249
|
+
# | 43 – 43 | 01 | Fixo 0 |
|
|
250
|
+
# | 44 – 44 | 01 | DV do campo livre |
|
|
251
|
+
# |__________________________________________________________________________|
|
|
252
|
+
#
|
|
253
|
+
# @return [String]
|
|
254
|
+
#
|
|
255
|
+
def codigo_de_barras_do_banco
|
|
256
|
+
codigo = "#{tipo_cobranca}#{tipo_carteira}#{nosso_numero_codigo_de_barras}#{agencia}#{posto}#{conta_corrente}#{valor_expresso}0"
|
|
257
|
+
|
|
258
|
+
codigo_dv = Modulo11FatorDe2a9RestoZero.new(codigo)
|
|
259
|
+
|
|
260
|
+
"#{codigo}#{codigo_dv}"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def nosso_numero_codigo_de_barras
|
|
264
|
+
"#{ano}#{byte_id}#{numero_documento}#{nosso_numero_dv}"
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def valor_expresso
|
|
268
|
+
@valor_documento.present? ? '1' : '0'
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'posto'.
|
|
272
|
+
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
|
273
|
+
#
|
|
274
|
+
# @return [True]
|
|
275
|
+
#
|
|
276
|
+
def deve_validar_posto?
|
|
277
|
+
true
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'byte_id'.
|
|
281
|
+
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
|
282
|
+
#
|
|
283
|
+
# @return [True]
|
|
284
|
+
#
|
|
285
|
+
def deve_validar_byte_id?
|
|
286
|
+
true
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
pt-BR:
|
|
2
|
+
boleto_bancario:
|
|
3
|
+
labels:
|
|
4
|
+
cedente: "Cedente"
|
|
5
|
+
sacado: "Sacado"
|
|
6
|
+
nosso_numero: "Nosso Número"
|
|
7
|
+
numero_documento: "Número do Documento"
|
|
8
|
+
data_vencimento: "Data de Vencimento"
|
|
9
|
+
valor_documento: "Valor do Documento"
|
|
10
|
+
agencia_cedente: "Agência/Código Cedente"
|
|
11
|
+
especie: "Espécie"
|
|
12
|
+
especie_documento: "Espécie Doc."
|
|
13
|
+
aceite: "Aceite"
|
|
14
|
+
data_documento: "Data do Documento"
|
|
15
|
+
carteira: "Carteira"
|
|
16
|
+
instrucoes: "Instruções"
|
|
17
|
+
local_pagamento: "Local de Pagamento"
|
|
18
|
+
linha_digitavel: "Linha Digitável"
|
|
19
|
+
codigo_banco: "Código do Banco"
|
|
20
|
+
documento_cedente: "CPF/CNPJ Cedente"
|
|
21
|
+
documento_sacado: "CPF/CNPJ Sacado"
|
|
22
|
+
endereco_cedente: "Endereço Cedente"
|
|
23
|
+
endereco_sacado: "Endereço Sacado"
|
|
24
|
+
conta_corrente: "Conta Corrente"
|
|
25
|
+
agencia: "Agência"
|
|
26
|
+
codigo_cedente: "Código do Cedente"
|
|
27
|
+
|
|
28
|
+
errors:
|
|
29
|
+
messages:
|
|
30
|
+
carteira_invalida: "carteira inválida"
|
|
31
|
+
agencia_invalida: "agência inválida"
|
|
32
|
+
conta_corrente_invalida: "conta corrente inválida"
|
|
33
|
+
valor_documento_invalido: "valor do documento inválido"
|
|
34
|
+
numero_documento_invalido: "número do documento inválido"
|
|
35
|
+
codigo_cedente_invalido: "código do cedente inválido"
|
|
36
|
+
documento_invalido: "documento inválido (CPF/CNPJ)"
|
|
37
|
+
data_vencimento_invalida: "data de vencimento inválida"
|
|
38
|
+
|
|
39
|
+
banks:
|
|
40
|
+
banco_brasil: "Banco do Brasil"
|
|
41
|
+
bradesco: "Bradesco"
|
|
42
|
+
itau: "Itaú"
|
|
43
|
+
santander: "Santander"
|
|
44
|
+
caixa: "Caixa Econômica Federal"
|
|
45
|
+
banrisul: "Banrisul"
|
|
46
|
+
sicoob: "Sicoob"
|
|
47
|
+
sicredi: "Sicredi"
|
|
48
|
+
nubank: "Nubank"
|
|
49
|
+
inter: "Banco Inter"
|
|
50
|
+
c6_bank: "C6 Bank"
|
|
51
|
+
|
|
52
|
+
defaults:
|
|
53
|
+
local_pagamento: "PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO"
|
|
54
|
+
especie_documento: "DM"
|
|
55
|
+
especie: "R$"
|