conectiva-boleto_bancario 0.0.2.beta
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/.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
|