conectiva-boleto_bancario 0.0.2.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Changelog.markdown +10 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/Planning.markdown +137 -0
- data/README.markdown +215 -0
- data/Rakefile +9 -0
- data/TODO.markdown +11 -0
- data/boleto_bancario.gemspec +25 -0
- data/documentacoes_dos_boletos/Bradesco/Manual_BRADESCO.PDF +0 -0
- data/lib/boleto_bancario.rb +85 -0
- data/lib/boleto_bancario/calculos/digitos.rb +35 -0
- data/lib/boleto_bancario/calculos/fator_vencimento.rb +87 -0
- data/lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb +67 -0
- data/lib/boleto_bancario/calculos/linha_digitavel.rb +158 -0
- data/lib/boleto_bancario/calculos/modulo10.rb +83 -0
- data/lib/boleto_bancario/calculos/modulo11.rb +54 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a7.rb +97 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a9.rb +83 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +101 -0
- data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
- data/lib/boleto_bancario/core/banco_brasil.rb +532 -0
- data/lib/boleto_bancario/core/banrisul.rb +182 -0
- data/lib/boleto_bancario/core/boleto.rb +559 -0
- data/lib/boleto_bancario/core/bradesco.rb +285 -0
- data/lib/boleto_bancario/core/itau.rb +455 -0
- data/lib/boleto_bancario/core/santander.rb +273 -0
- data/lib/boleto_bancario/version.rb +4 -0
- data/spec/boleto_bancario/calculos/digitos_spec.rb +19 -0
- data/spec/boleto_bancario/calculos/fator_vencimento_spec.rb +59 -0
- data/spec/boleto_bancario/calculos/fatores_de_multiplicacao_spec.rb +69 -0
- data/spec/boleto_bancario/calculos/linha_digitavel_spec.rb +57 -0
- data/spec/boleto_bancario/calculos/modulo10_spec.rb +53 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a7_spec.rb +43 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero_spec.rb +39 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +67 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x_spec.rb +37 -0
- data/spec/boleto_bancario/calculos/modulo11_spec.rb +19 -0
- data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
- data/spec/boleto_bancario/core/banco_brasil_spec.rb +383 -0
- data/spec/boleto_bancario/core/banrisul_spec.rb +130 -0
- data/spec/boleto_bancario/core/boleto_spec.rb +161 -0
- data/spec/boleto_bancario/core/bradesco_spec.rb +170 -0
- data/spec/boleto_bancario/core/itau_spec.rb +336 -0
- data/spec/boleto_bancario/core/santander_spec.rb +135 -0
- data/spec/shared_examples/boleto_bancario_shared_example.rb +157 -0
- data/spec/spec_helper.rb +14 -0
- metadata +211 -0
@@ -0,0 +1,273 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BoletoBancario
|
3
|
+
module Core
|
4
|
+
# Implementação de emissão de boleto bancário pelo Santander.
|
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/santander' dentro dessa biblioteca.
|
10
|
+
#
|
11
|
+
# === Contrato das classes de emissão de boletos
|
12
|
+
#
|
13
|
+
# Para ver o "<b>contrato</b>" da Emissão de Boletos (geração de código de barras, linha digitável, etc) veja
|
14
|
+
# a classe BoletoBancario::Core::Boleto.
|
15
|
+
#
|
16
|
+
# === Carteiras suportadas
|
17
|
+
#
|
18
|
+
# Segue abaixo as carteiras suportadas do itáu <b>seguindo a documentação</b>:
|
19
|
+
#
|
20
|
+
# _________________________________________________________________________
|
21
|
+
# | Carteira | Descrição | Testada/Homologada no banco |
|
22
|
+
# | 101 | Cobrança Simples com registro | Esperando Contribuição |
|
23
|
+
# | 102 | Cobrança Simples sem registro | Esperando Contribuição |
|
24
|
+
# | 121 | Penhor Rápida com registro | Esperando Contribuição |
|
25
|
+
# --------------------------------------------------------------------------
|
26
|
+
#
|
27
|
+
# <b>OBS.: Seja um contribuidor dessa gem. Contribua para homologar os boletos e as
|
28
|
+
# devidas carteiras junto ao banco Santander.</b>
|
29
|
+
#
|
30
|
+
# === Validações
|
31
|
+
#
|
32
|
+
# Caso você queira <b>desabilitar todas as validações</b>, existem alguns métodos que você pode sobrescrever
|
33
|
+
# na subclasse que você irá criar. No exemplo abaixo, desabilitará todas as validações:
|
34
|
+
#
|
35
|
+
# class Santander < BoletoBancario::Santander
|
36
|
+
# def deve_validar_agencia?
|
37
|
+
# false
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# def deve_validar_codigo_cedente?
|
41
|
+
# false
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# def deve_validar_numero_documento?
|
45
|
+
# false
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# def deve_validar_carteira?
|
49
|
+
# false
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# <b>OBS.:</b> Muito cuidado ao desabilitar as validações, pois poderá ocorrer problemas no código de barras e na
|
54
|
+
# linha digitável. Ambos os métodos podem ser sobrescritos se você quiser também.
|
55
|
+
#
|
56
|
+
class Santander < Boleto
|
57
|
+
# Campo IOF que será mostrado no código de barras.
|
58
|
+
# Padrão é 0 (zero), conforme a documentação do Santander.
|
59
|
+
# Para mais detalhes veja o método #iof.
|
60
|
+
#
|
61
|
+
attr_accessor :iof
|
62
|
+
|
63
|
+
# Tamanho máximo de uma agência no Banco Bradesco.
|
64
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
65
|
+
#
|
66
|
+
# @return [Fixnum] 4
|
67
|
+
#
|
68
|
+
def self.tamanho_maximo_agencia
|
69
|
+
4
|
70
|
+
end
|
71
|
+
|
72
|
+
# Tamanho máximo do número do documento emitido no Boleto.
|
73
|
+
# O tamanho máximo é justamente 8 porque no código de barras só é permitido 8 posições para este campo.
|
74
|
+
#
|
75
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
76
|
+
#
|
77
|
+
# @return [Fixnum] 11
|
78
|
+
#
|
79
|
+
def self.tamanho_maximo_numero_documento
|
80
|
+
12
|
81
|
+
end
|
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
|
+
# Tamanho máximo do código do cedente emitido no Boleto.
|
95
|
+
# O tamanho máximo é justamente 7 porque no código de barras só é permitido 7 posições para este campo.
|
96
|
+
#
|
97
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
98
|
+
#
|
99
|
+
# @return [Fixnum] 7
|
100
|
+
#
|
101
|
+
def self.tamanho_maximo_codigo_cedente
|
102
|
+
7
|
103
|
+
end
|
104
|
+
|
105
|
+
# Validações de tamanho para os campos abaixo:
|
106
|
+
#
|
107
|
+
# * Número do documento
|
108
|
+
# * Conta Corrente
|
109
|
+
# * Agencia
|
110
|
+
# * Carteira
|
111
|
+
#
|
112
|
+
# Se você quiser sobrescrever os tamanhos permitidos, <b>ficará a sua responsabilidade.</b>
|
113
|
+
# Basta você sobrescrever os métodos de validação:
|
114
|
+
#
|
115
|
+
# class Santander < BoletoBancario::Core::Santander
|
116
|
+
# def self.tamanho_maximo_agencia
|
117
|
+
# 5
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
# def self.tamanho_maximo_codigo_cedente
|
121
|
+
# 8
|
122
|
+
# end
|
123
|
+
#
|
124
|
+
# def self.tamanho_maximo_numero_documento
|
125
|
+
# 9
|
126
|
+
# end
|
127
|
+
# end
|
128
|
+
#
|
129
|
+
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
130
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
131
|
+
# sobreescritos também).
|
132
|
+
#
|
133
|
+
validates :agencia, :codigo_cedente, presence: true
|
134
|
+
|
135
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
136
|
+
validates :codigo_cedente, length: { maximum: tamanho_maximo_codigo_cedente }, if: :deve_validar_codigo_cedente?
|
137
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
138
|
+
validates :carteira, length: { maximum: tamanho_maximo_carteira }, if: :deve_validar_carteira?
|
139
|
+
|
140
|
+
# @return [String] 4 caracteres
|
141
|
+
#
|
142
|
+
def agencia
|
143
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
144
|
+
end
|
145
|
+
|
146
|
+
# @return [String] 7 caracteres
|
147
|
+
#
|
148
|
+
def codigo_cedente
|
149
|
+
@codigo_cedente.to_s.rjust(7, '0') if @codigo_cedente.present?
|
150
|
+
end
|
151
|
+
|
152
|
+
# @return [String] 12 caracteres
|
153
|
+
#
|
154
|
+
def numero_documento
|
155
|
+
@numero_documento.to_s.rjust(12, '0') if @numero_documento.present?
|
156
|
+
end
|
157
|
+
|
158
|
+
# @return [String] 3 caracteres
|
159
|
+
#
|
160
|
+
def carteira
|
161
|
+
@carteira.to_s.rjust(3, '0') if @carteira.present?
|
162
|
+
end
|
163
|
+
|
164
|
+
# Formata a carteira dependendo se ela é registrada ou não.
|
165
|
+
#
|
166
|
+
# Para cobrança COM registro usar: <b>COBRANCA SIMPLES ECR</b>
|
167
|
+
#
|
168
|
+
# Para Cobrança SEM registro usar: <b>COBRANCA SIMPLES CSR</b>
|
169
|
+
#
|
170
|
+
# @return [String]
|
171
|
+
#
|
172
|
+
def carteira_formatada
|
173
|
+
if @carteira.to_s.in?(carteiras_com_registro)
|
174
|
+
"COBRANÇA SIMPLES ECR"
|
175
|
+
else
|
176
|
+
'COBRANÇA SIMPLES CSR'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
# Retorna as carteiras com registro do banco Santander.
|
181
|
+
# <b>Você pode sobrescrever esse método na subclasse caso exista mais
|
182
|
+
# carteiras com registro no Santander.</b>
|
183
|
+
#
|
184
|
+
# @return [Array]
|
185
|
+
#
|
186
|
+
def carteiras_com_registro
|
187
|
+
%w(101 121)
|
188
|
+
end
|
189
|
+
|
190
|
+
# @return [String] Código do Banco descrito na documentação.
|
191
|
+
#
|
192
|
+
def codigo_banco
|
193
|
+
'033'
|
194
|
+
end
|
195
|
+
|
196
|
+
# Dígito do código do banco. Precisa mostrar esse dígito no boleto.
|
197
|
+
#
|
198
|
+
# @return [String] Dígito do código do banco descrito na documentação.
|
199
|
+
#
|
200
|
+
def digito_codigo_banco
|
201
|
+
'7'
|
202
|
+
end
|
203
|
+
|
204
|
+
# Campo Agência / Código do Cedente (Número fornecido pelo Banco)
|
205
|
+
#
|
206
|
+
# @return [String]
|
207
|
+
#
|
208
|
+
def agencia_codigo_cedente
|
209
|
+
"#{agencia}-#{digito_agencia} / #{codigo_cedente}"
|
210
|
+
end
|
211
|
+
|
212
|
+
# Mostra o campo nosso número calculando o dígito verificador do nosso número.
|
213
|
+
#
|
214
|
+
# @return [String]
|
215
|
+
#
|
216
|
+
def nosso_numero
|
217
|
+
"#{numero_documento}-#{digito_nosso_numero}"
|
218
|
+
end
|
219
|
+
|
220
|
+
# Calcula o dígito do nosso número pelo Módulo 11 fator de 2 a 9 verificando o resto como zero.
|
221
|
+
# Para mais detalhes veja a classe <b>BoletoBancario::Calculos::Modulo11FatorDe2a9RestoZero</b>.
|
222
|
+
#
|
223
|
+
# @return [String]
|
224
|
+
#
|
225
|
+
def digito_nosso_numero
|
226
|
+
Modulo11FatorDe2a9RestoZero.new(numero_documento)
|
227
|
+
end
|
228
|
+
|
229
|
+
# === Código de barras do banco
|
230
|
+
#
|
231
|
+
# ___________________________________________________________________________________________________
|
232
|
+
# | Posição | Tamanho | Descrição |
|
233
|
+
# |----------|---------|-----------------------------------------------------------------------------|
|
234
|
+
# | 20 | 01 | Fixo '9' |
|
235
|
+
# | 21-27 | 07 | Código do cedente padrão Santander |
|
236
|
+
# | 28-40 | 13 | Nosso Número (veja a observação abaixo) |
|
237
|
+
# | 41 | 01 | IOF (veja o método #iof) |
|
238
|
+
# | 42-44 | 03 | Carteira |
|
239
|
+
# ----------------------------------------------------------------------------------------------------
|
240
|
+
#
|
241
|
+
# <b>OBS.:</b> Caso o arquivo de registro para os títulos seja de 400 bytes (CNAB).
|
242
|
+
# Utilizar somente 08 posições do Nosso Numero (07 posições + DV), zerando os 05 primeiros dígitos.
|
243
|
+
# Utilizar somente 09 posições do Nosso Numero (08 posições + DV), zerando os 04 primeiros dígitos.
|
244
|
+
#
|
245
|
+
# Para utilizar esse número de posições no nosso número é só colocar o tamanho ideal no
|
246
|
+
# numero_documento.
|
247
|
+
# Por exemplo:
|
248
|
+
#
|
249
|
+
# Santander.new(:numero_documento => '1234567') # Irá zerar os 05 primeiros dígitos.
|
250
|
+
# Santander.new(:numero_documento => '12345678') # Irá zerar os 04 primeiros dígitos.
|
251
|
+
#
|
252
|
+
# @return [String]
|
253
|
+
#
|
254
|
+
def codigo_de_barras_do_banco
|
255
|
+
"9#{codigo_cedente}#{numero_documento}#{digito_nosso_numero}#{iof}#{carteira}"
|
256
|
+
end
|
257
|
+
|
258
|
+
# IOF é a sigla de Imposto sobre Operações de Crédito, Câmbio e Seguros,
|
259
|
+
# e é um imposto federal no Brasil.
|
260
|
+
#
|
261
|
+
# Seguradoras (Se 7% informar 7. Limitado a 9%)
|
262
|
+
# <b>Demais clientes usar 0 (zero)</b>
|
263
|
+
#
|
264
|
+
# @return [String]
|
265
|
+
#
|
266
|
+
def iof
|
267
|
+
return @iof.to_s if @iof.present?
|
268
|
+
|
269
|
+
'0'
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module BoletoBancario
|
4
|
+
module Calculos
|
5
|
+
describe Digitos do
|
6
|
+
(0..9).each do |number|
|
7
|
+
it "should return self when is #{number}" do
|
8
|
+
Digitos.new(number).sum.should eq number
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
{ 11 => 2, '18' => 9, 99 => 18, '58' => 13, 112 => 4, '235' => 10 }.each do |number, expecting|
|
13
|
+
it "should sum the sum of the digits when is '#{number}', expecting to be '#{expecting}'" do
|
14
|
+
Digitos.new(number).sum.should eq expecting
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module BoletoBancario
|
4
|
+
module Calculos
|
5
|
+
describe FatorVencimento do
|
6
|
+
describe "#base_date" do
|
7
|
+
it "should be 1997-10-07" do
|
8
|
+
FatorVencimento.new(Date.parse("2012-02-01")).base_date.should eq Date.new(1997, 10, 7)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#calculate" do
|
13
|
+
it 'should return an empty string when passing nil value' do
|
14
|
+
FatorVencimento.new(nil).should eq ''
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should return an empty string when passing empty value' do
|
18
|
+
FatorVencimento.new('').should eq ''
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should calculate the days between expiration date and base date" do
|
22
|
+
FatorVencimento.new(Date.parse("2012-12-2")).should eq "5535"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should calculate equal to itau documentation example" do
|
26
|
+
FatorVencimento.new(Date.parse("2000-07-04")).should eq "1001"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should calculate equal to itau documentation last section of the docs" do
|
30
|
+
FatorVencimento.new(Date.parse("2002-05-01")).should eq "1667"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should calculate to the maximum date equal to itau documentation example" do
|
34
|
+
FatorVencimento.new(Date.parse("2025-02-21")).should eq "9999"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should calculate the days between expiration date one year ago" do
|
38
|
+
FatorVencimento.new(Date.parse("2011-05-25")).should eq "4978"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should calculate the days between expiration date two years ago" do
|
42
|
+
FatorVencimento.new(Date.parse("2010-10-02")).should eq "4743"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should calculate the days between expiration date one year from now" do
|
46
|
+
FatorVencimento.new(Date.parse("2013-02-01")).should eq "5596"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should calculate the days between expiration date eigth years from now" do
|
50
|
+
FatorVencimento.new(Date.parse("2020-02-01")).should eq "8152"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should calculate the days between expiration date formating with 4 digits" do
|
54
|
+
FatorVencimento.new(Date.parse("1997-10-08")).should eq "0001"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module BoletoBancario
|
4
|
+
module Calculos
|
5
|
+
describe FatoresDeMultiplicacao do
|
6
|
+
context 'with factors of 2 and 1' do
|
7
|
+
let(:factors) { [2, 1] }
|
8
|
+
|
9
|
+
context 'with one digit' do
|
10
|
+
subject { FatoresDeMultiplicacao.new(1, fatores: factors) }
|
11
|
+
|
12
|
+
it { should eq [2] }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with four digits' do
|
16
|
+
subject { FatoresDeMultiplicacao.new(1234, fatores: factors) }
|
17
|
+
|
18
|
+
it { should eq [1, 4, 3, 8] }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'with five digits' do
|
22
|
+
subject { FatoresDeMultiplicacao.new(11385, fatores: factors) }
|
23
|
+
|
24
|
+
it { should eq [2, 1, 6, 8, 10] }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with ten digits' do
|
28
|
+
subject { FatoresDeMultiplicacao.new(1234567890, fatores: factors) }
|
29
|
+
|
30
|
+
it { should eq [1, 4, 3, 8, 5, 12, 7, 16, 9, 0] }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with factors of 2..9' do
|
35
|
+
let(:factors) { (2..9).to_a }
|
36
|
+
|
37
|
+
context 'with one digit' do
|
38
|
+
subject { FatoresDeMultiplicacao.new(4, fatores: factors) }
|
39
|
+
|
40
|
+
it { should eq [8] }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with four digits' do
|
44
|
+
subject { FatoresDeMultiplicacao.new(1864, fatores: factors) }
|
45
|
+
|
46
|
+
it { should eq [ 5, 32, 18, 8] }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with ten digits' do
|
50
|
+
subject { FatoresDeMultiplicacao.new(1234567890, fatores: factors) }
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'with bradesco documentation example' do
|
54
|
+
let(:bradesco_example) { '9999101200000350007772130530150081897500000' }
|
55
|
+
subject { FatoresDeMultiplicacao.new(bradesco_example, fatores: factors) }
|
56
|
+
|
57
|
+
it { should eq [36, 27, 18, 81, 8, 0, 6, 10, 0, 0, 0, 0, 0, 21, 30, 0, 0, 0, 14, 63, 56, 14, 6, 15, 0, 15, 6, 0, 8, 35, 0, 0, 32, 3, 16, 81, 56, 35, 0, 0, 0, 0, 0] }
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'with itau documentation example' do
|
61
|
+
let(:itau_example) { '3419166700000123451101234567880057123457000' }
|
62
|
+
subject { FatoresDeMultiplicacao.new(itau_example, fatores: factors) }
|
63
|
+
|
64
|
+
it { should eq [12, 12, 2, 81, 8, 42, 36, 35, 0, 0, 0, 0, 0, 7, 12, 15, 16, 15, 2, 9, 0, 7, 12, 15, 16, 15, 12, 63, 64, 56, 0, 0, 20, 21, 2, 18, 24, 28, 30, 35, 0, 0, 0] }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module BoletoBancario
|
4
|
+
module Calculos
|
5
|
+
describe LinhaDigitavel do
|
6
|
+
context "using the Itau documentation example" do
|
7
|
+
subject { LinhaDigitavel.new('34196166700000123451091234567880057123457000') }
|
8
|
+
|
9
|
+
it { should eq '34191.09123 34567.880058 71234.570001 6 16670000012345' }
|
10
|
+
end
|
11
|
+
|
12
|
+
context "using the Bradesco documentation example" do
|
13
|
+
subject { LinhaDigitavel.new('99991101200000350007772130530150081897500000') }
|
14
|
+
|
15
|
+
it { should eq '99997.77213 30530.150082 18975.000003 1 10120000035000' }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "using the HSBC documentation example" do
|
19
|
+
subject { LinhaDigitavel.new('39998100100000311551111122222500546666666001') }
|
20
|
+
|
21
|
+
it { should eq '39991.11119 22222.500542 66666.660015 8 10010000031155' }
|
22
|
+
end
|
23
|
+
|
24
|
+
context "using the Caixa documentation example" do
|
25
|
+
subject { LinhaDigitavel.new('10491107400000160000001100128701000901200200') }
|
26
|
+
|
27
|
+
it { should eq '10490.00118 00128.701000 09012.002003 1 10740000016000' }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "when 'codigo_de_barras' invalid" do
|
31
|
+
context "when is empty" do
|
32
|
+
subject { LinhaDigitavel.new('') }
|
33
|
+
|
34
|
+
it { should eq '' }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when nil" do
|
38
|
+
subject { LinhaDigitavel.new(nil) }
|
39
|
+
|
40
|
+
it { should eq '' }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when have less than 44 positions" do
|
44
|
+
subject { LinhaDigitavel.new('121212121') }
|
45
|
+
|
46
|
+
it { should eq '' }
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when have more than 44 positions" do
|
50
|
+
subject { LinhaDigitavel.new('12345678901234567890123456789012345678901234567890') }
|
51
|
+
|
52
|
+
it { should eq '' }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|