conectiva-boleto_bancario 0.0.2.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +1 -0
  4. data/.rvmrc +1 -0
  5. data/Changelog.markdown +10 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +22 -0
  8. data/Planning.markdown +137 -0
  9. data/README.markdown +215 -0
  10. data/Rakefile +9 -0
  11. data/TODO.markdown +11 -0
  12. data/boleto_bancario.gemspec +25 -0
  13. data/documentacoes_dos_boletos/Bradesco/Manual_BRADESCO.PDF +0 -0
  14. data/lib/boleto_bancario.rb +85 -0
  15. data/lib/boleto_bancario/calculos/digitos.rb +35 -0
  16. data/lib/boleto_bancario/calculos/fator_vencimento.rb +87 -0
  17. data/lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb +67 -0
  18. data/lib/boleto_bancario/calculos/linha_digitavel.rb +158 -0
  19. data/lib/boleto_bancario/calculos/modulo10.rb +83 -0
  20. data/lib/boleto_bancario/calculos/modulo11.rb +54 -0
  21. data/lib/boleto_bancario/calculos/modulo11_fator_de2a7.rb +97 -0
  22. data/lib/boleto_bancario/calculos/modulo11_fator_de2a9.rb +83 -0
  23. data/lib/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
  24. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +101 -0
  25. data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
  26. data/lib/boleto_bancario/core/banco_brasil.rb +532 -0
  27. data/lib/boleto_bancario/core/banrisul.rb +182 -0
  28. data/lib/boleto_bancario/core/boleto.rb +559 -0
  29. data/lib/boleto_bancario/core/bradesco.rb +285 -0
  30. data/lib/boleto_bancario/core/itau.rb +455 -0
  31. data/lib/boleto_bancario/core/santander.rb +273 -0
  32. data/lib/boleto_bancario/version.rb +4 -0
  33. data/spec/boleto_bancario/calculos/digitos_spec.rb +19 -0
  34. data/spec/boleto_bancario/calculos/fator_vencimento_spec.rb +59 -0
  35. data/spec/boleto_bancario/calculos/fatores_de_multiplicacao_spec.rb +69 -0
  36. data/spec/boleto_bancario/calculos/linha_digitavel_spec.rb +57 -0
  37. data/spec/boleto_bancario/calculos/modulo10_spec.rb +53 -0
  38. data/spec/boleto_bancario/calculos/modulo11_fator_de2a7_spec.rb +43 -0
  39. data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero_spec.rb +39 -0
  40. data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +67 -0
  41. data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x_spec.rb +37 -0
  42. data/spec/boleto_bancario/calculos/modulo11_spec.rb +19 -0
  43. data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
  44. data/spec/boleto_bancario/core/banco_brasil_spec.rb +383 -0
  45. data/spec/boleto_bancario/core/banrisul_spec.rb +130 -0
  46. data/spec/boleto_bancario/core/boleto_spec.rb +161 -0
  47. data/spec/boleto_bancario/core/bradesco_spec.rb +170 -0
  48. data/spec/boleto_bancario/core/itau_spec.rb +336 -0
  49. data/spec/boleto_bancario/core/santander_spec.rb +135 -0
  50. data/spec/shared_examples/boleto_bancario_shared_example.rb +157 -0
  51. data/spec/spec_helper.rb +14 -0
  52. metadata +211 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 298fc3490e425163cd1e07ec2048f99588e45ab0
4
+ data.tar.gz: d1b03969c89da2e59f1add6971f1a60e2da32fad
5
+ SHA512:
6
+ metadata.gz: e0ad2738b0e28ababe687be5ef35630ce0c57ff0bd625003512e04310a189a78a65cd49f6b65029296d1498eae410e899734ac1232427b1855da3eaac8cbd0cc
7
+ data.tar.gz: 24d3efc46215911a1db98e56b003de385905dc4a43c6980c6753daf0d797b4d069382cfa5084344d8726cd68d08495c75914ba3be932ab5164b35abc950c8988
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color -f d
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@boleto_bancario --create
@@ -0,0 +1,10 @@
1
+ # development
2
+
3
+ * Implementado Banrisul.
4
+
5
+ # 0.0.1.beta
6
+
7
+ * Implementado Banco do Brasil.
8
+ * Implementado Santander.
9
+ * Implementado Bradesco.
10
+ * Implementado Itaú.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Tomas D'Stefano http://successoft.com
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,137 @@
1
+ # BoletoBancario
2
+
3
+ Emissão de Boletos Bancários em Ruby. Simples, fácil e principalmente, flexível.
4
+
5
+ ## Alternativas
6
+
7
+ Essa biblioteca é baseada em outras **ótimas** bibliotecas (**Recomendo analisar muito bem cada solução e usar a que resolver o seu problema!**):
8
+
9
+ * Stella Caelum [http://stella.caelum.com.br/](http://stella.caelum.com.br/)
10
+ * Novo Gateway de Pagamentos da Locaweb [http://www.locaweb.com.br/produtos/gateway-pagamento.html](http://www.locaweb.com.br/produtos/gateway-pagamento.html)
11
+ * Brcobranca [https://github.com/kivanio/brcobranca](https://github.com/kivanio/brcobranca)
12
+ * Boleto Php [http://boletophp.com.br/](http://boletophp.com.br/)
13
+ * Gem de Boleto Bancário (essa gem) [https://github.com/tomas-stefano/boleto_bancario](https://github.com/tomas-stefano/boleto_bancario)
14
+
15
+ ## Instalação
16
+
17
+ gem install boleto_bancario
18
+
19
+ ## Bancos Suportados
20
+
21
+ * TODO: Precisa escrever essa parte
22
+
23
+ ## Usage
24
+
25
+ Você pode usar as próprias classes da gem, porém, **recomendo criar uma subclasse** para os bancos que você gostaria de desenvolver.
26
+
27
+ Exemplo:
28
+
29
+ ```ruby
30
+ class Itau < BoletoBancario::Itau
31
+ end
32
+
33
+ class Santander < BoletoBancario::Santander
34
+ end
35
+
36
+ class Bradesco < BoletoBancario::Bradesco
37
+ end
38
+
39
+ class BancoBrasil < BoletoBancario::BancoBrasil
40
+ end
41
+ ```
42
+
43
+ ## Attributos
44
+
45
+ * TODO: Precisa escrever essa parte
46
+
47
+ ## Internacionalização (i18n)
48
+
49
+ * TODO: Precisa escrever essa parte
50
+
51
+ ## Validações
52
+
53
+ * TODO: Precisa escrever essa parte
54
+
55
+ ## Código do Banco
56
+
57
+ * TODO: Precisa escrever essa parte
58
+
59
+ ## Agência / Código do Cedente
60
+
61
+ * TODO: Precisa escrever essa parte
62
+
63
+ ## Nosso Número
64
+
65
+ * TODO: Precisa escrever essa parte
66
+
67
+ ## Código de Barras
68
+
69
+ * TODO: Precisa escrever essa parte
70
+
71
+ ## Linha digitável
72
+
73
+ * TODO: Precisa escrever essa parte
74
+
75
+ ## Documentação
76
+
77
+ * TODO: Precisa escrever essa parte
78
+
79
+ ## Formatos
80
+
81
+ * TODO: Essa parte ainda pode mudar até a versão 0.0.1.
82
+
83
+ Colocar na classe:
84
+
85
+ ```ruby
86
+ class BoletoItau < BoletoBancario::Itau
87
+ respond_to :html, :pdf, :png
88
+ end
89
+ ```
90
+
91
+ Para renderizar o html:
92
+
93
+ ```ruby
94
+ itau = BoletoItau.new
95
+
96
+ itau.respond_with # Irá chamar o método render da instância do objeto passado no método format.
97
+
98
+ itau.respond_with(:pdf)
99
+ ```
100
+
101
+ ### Criando um novo Formato
102
+
103
+ Em relação a parte de formatos a gem de boleto bancário é extremamente flexível.
104
+
105
+ Basta criar um objeto que responda ao método **render**:
106
+
107
+ ```ruby
108
+ module BoletoBancario
109
+ module Formato
110
+ class Html < Boleto
111
+ def render(*args)
112
+ end
113
+ end
114
+ end
115
+ end
116
+ ```
117
+
118
+ ```ruby
119
+ module BoletoBancario
120
+ module Formato
121
+ class Pdf < Boleto
122
+ def render(*args)
123
+ end
124
+ end
125
+ end
126
+ end
127
+ ```
128
+
129
+ ## Contribuições
130
+
131
+ Seja um contribuidor. Você pode contribuir de N formas. Seguem elas:
132
+
133
+ * Homologando boletos junto ao banco.
134
+ * Fornecendo documentações mais atualizadas dos Bancos.
135
+ * Escrevendo novos formatos (PDF, PNG), e me avisando para divulgar no Readme.
136
+ * Refatorando código!!
137
+ * Fornecendo Feedback construtivo! (Sempre bem vindo!)
@@ -0,0 +1,215 @@
1
+ # BoletoBancario
2
+
3
+ Emissão de Boletos Bancários em Ruby.
4
+
5
+ Foi colocado um esforço enorme para tornar a gem **simples e principalmente, flexível**.
6
+
7
+ ## Versão Beta
8
+
9
+ Essa gem ainda está em versão beta. Algumas coisas podem mudar até que a versão oficial seja lançada.
10
+
11
+ ## Alternativas
12
+
13
+ Essa biblioteca é baseada em outras **ótimas** bibliotecas.
14
+ **Recomendo analisar muito bem cada solução**:
15
+
16
+ * Stella Caelum [http://stella.caelum.com.br/](http://stella.caelum.com.br/)
17
+ * Novo Gateway de Pagamentos da Locaweb [http://www.locaweb.com.br/produtos/gateway-pagamento.html](http://www.locaweb.com.br/produtos/gateway-pagamento.html)
18
+ * Brcobranca [https://github.com/kivanio/brcobranca](https://github.com/kivanio/brcobranca)
19
+ * Boleto Php [http://boletophp.com.br/](http://boletophp.com.br/)
20
+ * Gem de Boleto Bancário (essa gem) [https://github.com/tomas-stefano/boleto_bancario](https://github.com/tomas-stefano/boleto_bancario)
21
+
22
+ ## Instalação
23
+
24
+ gem install boleto_bancario
25
+
26
+ ## Documentação
27
+
28
+ Seguimos todas as documentações descritas abaixo:
29
+
30
+ * [Bradesco](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/bradesco)
31
+ * [Banco do Brasil](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/banco_brasil)
32
+ * [Itaú](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/itau)
33
+ * [Santander](https://github.com/tomas-stefano/boleto_bancario/tree/master/documentacoes_dos_boletos/santander)
34
+
35
+ Se você tiver uma documentação do boleto, **mais atualizada**, gostaria de pedir que você me enviasse. :)
36
+
37
+ ## Bancos Suportados
38
+
39
+ Para todos os bancos e carteiras implementadas, **seguimos as documentações** que estão dentro do repositório:
40
+
41
+ <table>
42
+ <tr>
43
+ <th>Nome do Banco</th>
44
+ <th>Carteiras Suportadas</th>
45
+ <th>Testada/Homologada no banco</th>
46
+ </tr>
47
+ <tr>
48
+ <td>Banco do Brasil</td>
49
+ <td>
50
+ 12 com código do cedente de 6 dígitos,
51
+ 16 e 18 com código do cedente de 4 dígitos,
52
+ 16 e 18 com código do cedente e nosso número de 17 dígitos,
53
+ 16 e 18 com código do cedente de 6 dígitos,
54
+ 16, 17 e 18 código do cedente de 7 e 8 dígitos.
55
+ </td>
56
+ <td>Esperando Contribuição</td>
57
+ </tr>
58
+ <tr>
59
+ <td>Itaú</td>
60
+ <td>107, 109, 122, 142, 143, 126, 174, 175, 196, 198, 131, 146, 150, 168.</td>
61
+ <td>Esperando Contribuição</td>
62
+ </tr>
63
+ <tr>
64
+ <td>Bradesco</td>
65
+ <td>03, 06, 09, 19, 21, 22.</td>
66
+ <td>Esperando Contribuição</td>
67
+ </tr>
68
+ <tr>
69
+ <td>Santander</td>
70
+ <td>101, 102, 121.</td>
71
+ <td>Esperando Contribuição</td>
72
+ </tr>
73
+ </table>
74
+
75
+ **OBS.: Caso a homologação seja aceita junto ao banco, contribua e mude a seção acima. Caso recuse alguma carteira acima, por favor me avise, para tirar dessa lista.**
76
+
77
+ ## Homologação no Banco
78
+
79
+ Uma ótima forma de contribuir para a gem, é validar junto ao banco os boletos implementados acima.
80
+
81
+ ## Usage
82
+
83
+ Você pode usar as próprias classes da gem, porém, **recomendo criar uma subclasse** para os bancos que você gostaria de desenvolver.
84
+
85
+ ### Exemplo
86
+
87
+ ```ruby
88
+ class BoletoItau < BoletoBancario::Itau
89
+ end
90
+
91
+ class BoletoSantander < BoletoBancario::Santander
92
+ end
93
+
94
+ class BoletoBradesco < BoletoBancario::Bradesco
95
+ end
96
+
97
+ class BoletoBancoBrasil < BoletoBancario::BancoBrasil
98
+ end
99
+ ```
100
+
101
+ Segue os attributos dos boletos:
102
+
103
+ * Agência
104
+ * Dígito da agência
105
+ * Conta Corrente
106
+ * Dígito da Conta Corrente
107
+ * Carteira
108
+ * Cedente
109
+ * Código do Cedente
110
+ * Documento do Cedente
111
+ * Endereço do Cedente
112
+ * Sacado
113
+ * Documento do Sacado
114
+ * Código da Moeda
115
+ * Data do documento
116
+ * Data do vencimento
117
+ * Número do documento
118
+ * Valor do documento (valor do boleto)
119
+ * Espécie
120
+ * Espécie do documento
121
+
122
+ ### Criando os boletos / Validações
123
+
124
+ Agora você pode emitir um boleto, **usando a classe criada no exemplo acima**:
125
+
126
+ BoletoItau.new(conta_corrente: '89755', agencia: '0097', :carteira => '195')
127
+
128
+ Você pode usar blocos se quiser:
129
+
130
+ BoletoItau.new do |boleto|
131
+ boleto_itau.conta_corrente = '89755'
132
+ boleto_itau.digito_conta_corrente = '1'
133
+ boleto_itau.agencia = '0097'
134
+ boleto_itau.carteira = '198'
135
+ boleto_itau.cedente = 'Razao Social da Empresa'
136
+ boleto_itau.codigo_cedente = '90901'
137
+ boleto_itau.endereco_cedente = 'Rua nome da rua, 9999'
138
+ boleto_itau.numero_documento = '12345678'
139
+ boleto_itau.sacado = 'Nome do Sacado'
140
+ boleto_itau.documento_sacado = '35433793990'
141
+ boleto_itau.data_vencimento = Date.tomorrow
142
+ boleto_itau.valor_documento = 31678.99
143
+ boleto_itau.seu_numero = 1234
144
+ end
145
+
146
+ **Cada banco possui suas próprias validações de campo e de tamanho**.
147
+ Primeiramente, **antes de renderizar qualquer boleto você precisar verificar se esse o boleto é válido**.
148
+
149
+ if boleto_itau.valid?
150
+ # Renderiza o boleto itau
151
+ else
152
+ # Trata os erros
153
+ end
154
+
155
+ ### Campos do Boleto
156
+
157
+ Segue abaixo os métodos para serem chamados, no momento de renderizar os boletos. Os campos são de mesmo nome:
158
+
159
+ boleto_itau.codigo_banco_formatado # Retorna o código do banco, junto com seu dígito
160
+
161
+ boleto_itau.codigo_de_barras
162
+
163
+ boleto_itau.linha_digitavel
164
+
165
+ boleto_itau.nosso_numero
166
+
167
+ boleto_itau.agencia_codigo_cedente
168
+
169
+ boleto_itau.carteira_formatada # Formata a carteira, para mostrar no boleto.
170
+
171
+ boleto_itau.numero_documento
172
+
173
+ boleto_itau.valor_documento
174
+
175
+ boleto_itau.especie
176
+
177
+ boleto_itau.especie_documento
178
+
179
+ ## Sobrescrevendo comportamentos
180
+
181
+ Você pode sobrescrever os comportamentos na subclasse.
182
+
183
+ Por exemplo, imagine que você quer sobrescrever a forma como é tratada a segunda parte do código de barras.
184
+ **Seguindo a interface da classe BoletoBancario::Boleto** fica bem simples:
185
+
186
+ class BoletoItau < BoletoBancario::Itau
187
+ def codigo_de_barras_do_banco
188
+ # Sua implementação ...
189
+ end
190
+ end
191
+
192
+ ## Formatos (HTML, PDF e PNG)
193
+
194
+ **Objetivos para as próximas versões: criar os formatos dos boletos de:**
195
+
196
+ * HTML
197
+ * PDF
198
+ * PNG
199
+
200
+ ## O que a gem não faz
201
+
202
+ A gem não trata os arquivos de remessa e os arquivos de retorno do banco.
203
+
204
+ Na minha opinião não deveria ser responsabilidade dessa gem.
205
+ Essa gem **apenas emite o boleto**, com todas as informações necessárias do boleto.
206
+
207
+ ## Contribuições
208
+
209
+ Seja um contribuidor. Você pode contribuir de N formas. Seguem elas:
210
+
211
+ * Homologando boletos junto ao banco.
212
+ * Fornecendo documentações mais atualizadas dos Bancos.
213
+ * Escrevendo novos formatos (PDF, PNG), e me avisando para divulgar no Readme.
214
+ * Refatorando código!!
215
+ * Fornecendo Feedback construtivo! (Sempre bem vindo!)
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ require 'bundler/gem_tasks'
3
+ require 'yard'
4
+
5
+ desc 'Generate documentation'
6
+ YARD::Rake::YardocTask.new do |t|
7
+ t.files = ['lib/**/*.rb', '-', 'LICENSE']
8
+ t.options = ['--main', 'README.markdown', '--no-private', '--title', "Boleto Bancário #{BoletoBancario::VERSION}"]
9
+ end
@@ -0,0 +1,11 @@
1
+ * Logo.
2
+ * Formatacao documento (CPF/CNPJ).
3
+ * Aceite.
4
+ * Instruções.
5
+ * Colocar exemplos melhores na documentação de cada banco.
6
+ * Nos exemplos de cada banco colocar os métodos que são chamados pelo objeto.
7
+ * Verificar as validações e suas mensagens de erro.
8
+ * Código de barras como imagem (usar a gem Barby).
9
+ * Internacionalização / Locales.
10
+ * Verificar a questão dos formatos (html, pdf, png).
11
+ * Criar páginas explicando cada banco.