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.
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.