bbrcobranca 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +12 -0
  5. data/Rakefile +13 -0
  6. data/lib/bbrcobranca.rb +196 -0
  7. data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  8. data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  9. data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  10. data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  11. data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
  12. data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  13. data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
  14. data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  15. data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
  16. data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  17. data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
  18. data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  19. data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
  20. data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  21. data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
  22. data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
  23. data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
  24. data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
  25. data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
  26. data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  27. data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
  28. data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
  29. data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
  30. data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
  31. data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
  32. data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  33. data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
  34. data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  35. data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
  36. data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
  37. data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  38. data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
  39. data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
  40. data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
  41. data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
  42. data/lib/bbrcobranca/boleto/banestes.rb +85 -0
  43. data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
  44. data/lib/bbrcobranca/boleto/base.rb +256 -0
  45. data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
  46. data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
  47. data/lib/bbrcobranca/boleto/caixa.rb +121 -0
  48. data/lib/bbrcobranca/boleto/cecred.rb +86 -0
  49. data/lib/bbrcobranca/boleto/credisis.rb +116 -0
  50. data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
  51. data/lib/bbrcobranca/boleto/itau.rb +138 -0
  52. data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
  53. data/lib/bbrcobranca/boleto/santander.rb +84 -0
  54. data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
  55. data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
  56. data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
  57. data/lib/bbrcobranca/boleto/template/base.rb +25 -0
  58. data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
  59. data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
  60. data/lib/bbrcobranca/boleto/unicred.rb +141 -0
  61. data/lib/bbrcobranca/calculo.rb +115 -0
  62. data/lib/bbrcobranca/calculo_data.rb +62 -0
  63. data/lib/bbrcobranca/currency.rb +69 -0
  64. data/lib/bbrcobranca/formatacao.rb +103 -0
  65. data/lib/bbrcobranca/formatacao_string.rb +35 -0
  66. data/lib/bbrcobranca/limpeza.rb +20 -0
  67. data/lib/bbrcobranca/remessa/base.rb +76 -0
  68. data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
  69. data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
  70. data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  71. data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
  72. data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
  73. data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
  74. data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  75. data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
  76. data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
  77. data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  78. data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  79. data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
  80. data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
  81. data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
  82. data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
  83. data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
  84. data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
  85. data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
  86. data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
  87. data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
  88. data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
  89. data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
  90. data/lib/bbrcobranca/retorno/base.rb +49 -0
  91. data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
  92. data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
  93. data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
  94. data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
  95. data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
  96. data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
  97. data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  98. data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  99. data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  100. data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
  101. data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
  102. data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
  103. data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
  104. data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
  105. data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
  106. data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
  107. data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
  108. data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
  109. data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
  110. data/lib/bbrcobranca/util/date.rb +20 -0
  111. data/lib/bbrcobranca/util/empresa.rb +28 -0
  112. data/lib/bbrcobranca/util/errors.rb +76 -0
  113. data/lib/bbrcobranca/validations.rb +232 -0
  114. data/lib/bbrcobranca/version.rb +6 -0
  115. data/spec/arquivos/CBR64310.RET +28 -0
  116. data/spec/arquivos/CNAB240.RET +74 -0
  117. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  118. data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
  119. data/spec/arquivos/CNAB240SICOOB.RET +10 -0
  120. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  121. data/spec/arquivos/CNAB400.RET +54 -0
  122. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  123. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  124. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  125. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  126. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  127. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  128. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  129. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  130. data/spec/bbrcobranca_spec.rb +34 -0
  131. data/spec/brcobranca/base_spec.rb +170 -0
  132. data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
  133. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
  134. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
  135. data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
  136. data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
  137. data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
  138. data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
  139. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  140. data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
  141. data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
  142. data/spec/brcobranca/boleto/itau_spec.rb +262 -0
  143. data/spec/brcobranca/boleto/santander_spec.rb +143 -0
  144. data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
  145. data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
  146. data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
  147. data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
  148. data/spec/brcobranca/calculo_data_spec.rb +33 -0
  149. data/spec/brcobranca/calculo_spec.rb +185 -0
  150. data/spec/brcobranca/currency_spec.rb +79 -0
  151. data/spec/brcobranca/formatacao_spec.rb +46 -0
  152. data/spec/brcobranca/formatacao_string_spec.rb +24 -0
  153. data/spec/brcobranca/limpeza_spec.rb +10 -0
  154. data/spec/brcobranca/remessa/base_spec.rb +67 -0
  155. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
  156. data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
  157. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
  158. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  159. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  160. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
  161. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  162. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  163. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
  164. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  165. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
  166. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  167. data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
  168. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
  169. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
  170. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  171. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
  172. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
  173. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
  174. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  175. data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
  176. data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
  177. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  178. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
  179. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
  180. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  181. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  182. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  183. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  184. data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
  185. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
  186. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  187. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
  188. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  189. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  190. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
  191. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
  192. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
  193. data/spec/brcobranca/rghost_spec.rb +29 -0
  194. data/spec/brcobranca/util/empresa_spec.rb +36 -0
  195. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
  196. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  197. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
  198. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
  199. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
  200. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  201. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
  202. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
  203. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  204. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
  205. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  206. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
  207. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
  208. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
  209. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  210. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  211. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  212. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  213. data/spec/spec.opts +8 -0
  214. data/spec/spec_helper.rb +38 -0
  215. data/spec/support/remessa_helpers.rb +13 -0
  216. data/spec/support/shared_examples/busca_logotipo.rb +15 -0
  217. data/spec/support/shared_examples/cnab240.rb +259 -0
  218. data/spec/support/shared_examples/cnab400.rb +180 -0
  219. data/spec/support/shared_examples/formatos_validos.rb +36 -0
  220. metadata +422 -0
@@ -0,0 +1,86 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Boleto
4
+ class Cecred < Base # Cecred
5
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
6
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
7
+ validates_length_of :carteira, is: 2, message: 'deve ser menor ou igual a 2 dígitos.'
8
+ validates_length_of :convenio, is: 6, message: 'deve ser menor ou igual a 6 dígitos.'
9
+
10
+ validates_length_of :nosso_numero, maximum: 9, message: 'deve ser menor ou igual a 9 dígitos.'
11
+
12
+ # Nova instancia do Cecred
13
+ # @param (see Bbrcobranca::Boleto::Base#initialize)
14
+ def initialize(campos = {})
15
+ campos = {
16
+ carteira: '1',
17
+ local_pagamento: 'PAGÁVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED'
18
+ }.merge!(campos)
19
+ super(campos)
20
+ end
21
+
22
+ # Codigo do banco emissor (3 dígitos sempre)
23
+ #
24
+ # @return [String] 3 caracteres numéricos.
25
+ def banco
26
+ '085'
27
+ end
28
+
29
+ # Dígito verificador do banco
30
+ # @return [Integer] 1 caracteres numéricos.
31
+ def banco_dv
32
+ "1"
33
+ end
34
+
35
+ # Dígito verificador da conta corrente
36
+ # @return [Integer] 1 caracteres numéricos.
37
+ def conta_corrente_dv
38
+ conta_corrente.modulo11(mapeamento: { 10 => 0 })
39
+ end
40
+
41
+ # Convenio
42
+ # @return [String] 6 caracteres numéricos.
43
+ def convenio=(valor)
44
+ @convenio = valor.to_s.rjust(6, '0') if valor
45
+ end
46
+
47
+ # Carteira
48
+ # @return [String] 2 caracteres numéricos.
49
+ def carteira=(valor)
50
+ @carteira = valor.to_s.rjust(2, '0') if valor
51
+ end
52
+
53
+ # Número seqüencial utilizado para identificar o boleto.
54
+ # (Número de dígitos depende do tipo de convênio).
55
+ # @raise [Bbrcobranca::NaoImplementado] Caso o tipo de convênio não seja suportado pelo Bbrcobranca.
56
+ #
57
+ # @overload numero
58
+ # @return [String] 9 caracteres numéricos.
59
+ def nosso_numero=(valor)
60
+ @nosso_numero = valor.to_s.rjust(9, '0')
61
+ end
62
+
63
+ # Nosso número para exibir no boleto.
64
+ # @return [String]
65
+ # @example
66
+ # boleto.nosso_numero_boleto #=> "10000000027000095-7"
67
+ def nosso_numero_boleto
68
+ "#{conta_corrente}#{conta_corrente_dv}#{nosso_numero}"
69
+ end
70
+
71
+ # Agência + conta corrente do cliente para exibir no boleto.
72
+ # @return [String]
73
+ # @example
74
+ # boleto.agencia_conta_boleto #=> "0001-9 / 0000002-7"
75
+ def agencia_conta_boleto
76
+ "#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
77
+ end
78
+
79
+ # Segunda parte do código de barras.
80
+ # @return [String] 25 caracteres numéricos.
81
+ def codigo_barras_segunda_parte
82
+ "#{convenio}#{nosso_numero_boleto}#{carteira}"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,116 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Boleto
4
+ class Credisis < Base # CrediSIS
5
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
6
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
7
+ validates_length_of :carteira, is: 2, message: 'deve ser menor ou igual a 2 dígitos.'
8
+ validates_length_of :convenio, is: 6, message: 'deve ser menor ou igual a 6 dígitos.'
9
+ validates_length_of :nosso_numero, maximum: 6, message: 'deve ser menor ou igual a 6 dígitos.'
10
+ validates_presence_of :documento_cedente, message: 'não pode estar em branco.'
11
+ validates_numericality_of :documento_cedente, message: 'não é um número.'
12
+
13
+ # Nova instancia do CrediSIS
14
+ # @param (see Bbrcobranca::Boleto::Base#initialize)
15
+ def initialize(campos = {})
16
+ campos = { carteira: '18' }.merge!(campos)
17
+ super(campos)
18
+ end
19
+
20
+ # Codigo do banco emissor (3 dígitos sempre)
21
+ #
22
+ # @return [String] 3 caracteres numéricos.
23
+ def banco
24
+ '097'
25
+ end
26
+
27
+ # Carteira
28
+ # @return [String] 2 caracteres numéricos.
29
+ def carteira=(valor)
30
+ @carteira = valor.to_s.rjust(2, '0') if valor
31
+ end
32
+
33
+ # Dígito verificador do banco
34
+ #
35
+ # @return [String] 1 caracteres numéricos.
36
+ def banco_dv
37
+ '3'
38
+ end
39
+
40
+ # Retorna dígito verificador da agência
41
+ #
42
+ # @return [String] 1 caracteres numéricos.
43
+ def agencia_dv
44
+ agencia.modulo11(mapeamento: { 10 => 'X' })
45
+ end
46
+
47
+ # Conta corrente
48
+ # @return [String] 7 caracteres numéricos.
49
+ def conta_corrente=(valor)
50
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
51
+ end
52
+
53
+ # Número do convênio/contrato do cliente junto ao banco.
54
+ # @return [String] 6 caracteres numéricos.
55
+ def convenio=(valor)
56
+ @convenio = valor.to_s.rjust(6, '0') if valor
57
+ end
58
+
59
+ # Dígito verificador da conta corrente
60
+ # @return [String] 1 caracteres numéricos.
61
+ def conta_corrente_dv
62
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' })
63
+ end
64
+
65
+ # Nosso número
66
+ # @return [String] 6 caracteres numéricos.
67
+ def nosso_numero=(valor)
68
+ @nosso_numero = valor.to_s.rjust(6, '0')
69
+ end
70
+
71
+ # Nosso número para exibir no boleto.
72
+ # @return [String]
73
+ # @example
74
+ # boleto.nosso_numero_boleto #=> "10000000027000095-7"
75
+ def nosso_numero_boleto
76
+ "097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
77
+ end
78
+
79
+ # Agência + conta corrente do cliente para exibir no boleto.
80
+ # @return [String]
81
+ # @example
82
+ # boleto.agencia_conta_boleto #=> "0001-9 / 0000002-7"
83
+ def agencia_conta_boleto
84
+ "#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
85
+ end
86
+
87
+ #X – Módulo 11 do CPF/CNPJ (incluindo dígitos verificadores) do Beneficiário emissor
88
+ # Obs.: Caso for CPF, utilizar 9 como limitador da multiplicação.
89
+ # Caso for CNPJ, utilizar 8 no limitador da multiplicação.
90
+ def documento_cedente_dv
91
+ options = { mapeamento: { 0 => 1, 10 => 1, 11 => 1 } }
92
+ options.merge(multiplicador: [8, 7, 6, 5, 4, 3, 2]) if documento_cedente.to_s.size > 11
93
+ documento_cedente.modulo11(options)
94
+ end
95
+
96
+ # Segunda parte do código de barras.
97
+ # @return [String] 25 caracteres numéricos.
98
+ #1. - Número do Banco: “097”
99
+ # 2. - Moeda: “9”
100
+ # 3. - DV do Código de Barras, Baseado no Módulo 11 (Vide Anexo X).
101
+ # 4. - Fator de Vencimento do Boleto (Vide Anexo VII).
102
+ # 5. - Valor do Título, expresso em Reais, com 02 casas decimais.
103
+ # 6. - Fixo Zeros: Campo com preenchimento Zerado “00000”
104
+ # 7. - Composição do Nosso Número: 097XAAAACCCCCCSSSSSS, sendo:
105
+ # Composição do Nosso Número
106
+ # 097 - Fixo
107
+ # X - Módulo 11 do CPF/CNPJ (Incluindo dígitos verificadores) do Beneficiário.
108
+ # AAAA - Código da Agência CrediSIS ao qual o Beneficiário possui Conta.
109
+ # CCCCCC - Código de Convênio do Beneficiário no Sistema CrediSIS
110
+ # SSSSSS - Sequencial Único do Boleto
111
+ def codigo_barras_segunda_parte
112
+ "00000097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,94 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ module Bbrcobranca
4
+ module Boleto
5
+ class Hsbc < Base # Banco HSBC
6
+ validates_inclusion_of :carteira, in: %w(CNR CSB), message: 'não existente para este banco.'
7
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
8
+ validates_length_of :nosso_numero, maximum: 13, message: 'deve ser menor ou igual a 13 dígitos.'
9
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
10
+
11
+ # Nova instancia do Hsbc
12
+ # @param (see Bbrcobranca::Boleto::Base#initialize)
13
+ def initialize(campos = {})
14
+ campos = { carteira: 'CNR' }.merge!(campos)
15
+ super(campos)
16
+ end
17
+
18
+ # Codigo do banco emissor (3 dígitos sempre)
19
+ #
20
+ # @return [String] 3 caracteres numéricos.
21
+ def banco
22
+ '399'
23
+ end
24
+
25
+ # Número seqüencial utilizado para identificar o boleto.
26
+ # @return [String] 13 caracteres numéricos.
27
+ def nosso_numero=(valor)
28
+ @nosso_numero = valor.to_s.rjust(13, '0') if valor
29
+ end
30
+
31
+ # Nosso número para exibir no boleto.
32
+ # @return [String]
33
+ # @example
34
+ # boleto.nosso_numero_boleto #=> "0000000004042847"
35
+ def nosso_numero_boleto
36
+ case carteira
37
+ when 'CNR' then
38
+ if data_vencimento.is_a?(Date)
39
+ self.codigo_servico = '4'
40
+ dia = data_vencimento.day.to_s.rjust(2, '0')
41
+ mes = data_vencimento.month.to_s.rjust(2, '0')
42
+ ano = data_vencimento.year.to_s[2..3]
43
+ data = "#{dia}#{mes}#{ano}"
44
+
45
+ parte_1 = "#{nosso_numero}#{nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{codigo_servico}"
46
+ soma = parte_1.to_i + conta_corrente.to_i + data.to_i
47
+ "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
48
+ else
49
+ errors.add(:data_vencimento, 'não é uma data.')
50
+ raise Bbrcobranca::BoletoInvalido, self
51
+ end
52
+ when 'CSB'
53
+ @nosso_numero
54
+ else
55
+ raise Bbrcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
56
+ # TODO - Verificar outras carteiras.
57
+ # self.codigo_servico = "5"
58
+ # parte_1 = "#{self.nosso_numero}#{self.nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{self.codigo_servico}"
59
+ # soma = parte_1.to_i + self.conta_corrente.to_i
60
+ # numero = "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
61
+ # numero
62
+ end
63
+ end
64
+
65
+ # Número do convênio/contrato do cliente para exibir no boleto.
66
+ # @return [String]
67
+ # @example
68
+ # boleto.agencia_conta_boleto #=> "0061900"
69
+ def agencia_conta_boleto
70
+ conta_corrente
71
+ end
72
+
73
+ # Segunda parte do código de barras.
74
+ #
75
+ # Montagem é baseada no tipo de carteira e na presença da data de vencimento<br/>
76
+ # <b>OBS:</b> Somente as carteiras <b>CNR/CSB</b> estão implementadas.<br/>
77
+ #
78
+ # @return [String] 25 caracteres numéricos.
79
+ # @raise [Bbrcobranca::NaoImplementado] Caso a carteira informada não for CNR/CSB.
80
+ def codigo_barras_segunda_parte
81
+ case carteira
82
+ when 'CNR'
83
+ dias_julianos = data_vencimento.to_juliano
84
+ "#{conta_corrente}#{nosso_numero}#{dias_julianos}2"
85
+ when 'CSB'
86
+ raise Bbrcobranca::NaoImplementado, 'Nosso número não definido.' unless @nosso_numero
87
+ "#{nosso_numero}#{agencia}#{conta_corrente}001"
88
+ else
89
+ raise Bbrcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,138 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ module Bbrcobranca
5
+ module Boleto
6
+ class Itau < Base # Banco Itaú
7
+ # Usado somente em carteiras especiais com registro para complementar o número do cocumento
8
+ attr_reader :seu_numero
9
+
10
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
11
+ validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
12
+ validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
13
+ validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
14
+ with_options if: :usa_seu_numero? do |v|
15
+ v.validates_length_of :seu_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
16
+ end
17
+ # Nova instancia do Itau
18
+ # @param (see Bbrcobranca::Boleto::Base#initialize)
19
+ def initialize(campos = {})
20
+ campos = { carteira: '175' }.merge!(campos)
21
+ super(campos)
22
+ end
23
+
24
+ # Codigo do banco emissor (3 dígitos sempre)
25
+ #
26
+ # @return [String] 3 caracteres numéricos.
27
+ def banco
28
+ '341'
29
+ end
30
+
31
+ # Número do convênio/contrato do cliente junto ao banco.
32
+ # @return [String] 5 caracteres numéricos.
33
+ def convenio=(valor)
34
+ @convenio = valor.to_s.rjust(5, '0') if valor
35
+ end
36
+
37
+ # Conta corrente
38
+ # @return [String] 5 caracteres numéricos.
39
+ def conta_corrente=(valor)
40
+ @conta_corrente = valor.to_s.rjust(5, '0') if valor
41
+ end
42
+
43
+ # Número seqüencial utilizado para identificar o boleto.
44
+ # @return [String] 8 caracteres numéricos.
45
+ def nosso_numero=(valor)
46
+ @nosso_numero = valor.to_s.rjust(8, '0') if valor
47
+ end
48
+
49
+ # Número seqüencial utilizado para identificar o boleto.
50
+ # @return [String] 7 caracteres numéricos.
51
+ def seu_numero=(valor)
52
+ @seu_numero = valor.to_s.rjust(7, '0') if valor
53
+ end
54
+
55
+ def usa_seu_numero?
56
+ %w(198 106 107 122 142 143 195 196).include?(carteira.to_s)
57
+ end
58
+
59
+ # Dígito verificador do nosso número.
60
+ #
61
+ # Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
62
+ # "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.<br/>
63
+ # A excecao, estão as carteiras 112, 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
64
+ # dados "CARTEIRA/NOSSO NUMERO".
65
+ #
66
+ # @return [String] 1 caracteres numéricos.
67
+ def nosso_numero_dv
68
+ if %w(112 126 131 146 150 168).include?(carteira)
69
+ "#{carteira}#{nosso_numero}".modulo10
70
+ else
71
+ "#{agencia}#{conta_corrente}#{carteira}#{nosso_numero}".modulo10
72
+ end
73
+ end
74
+
75
+ # Calcula o dígito verificador para conta corrente do Itau.
76
+ # Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.
77
+ def agencia_conta_corrente_dv
78
+ "#{agencia}#{conta_corrente}".modulo10
79
+ end
80
+
81
+ # Nosso número para exibir no boleto.
82
+ # @return [String]
83
+ # @example
84
+ # boleto.nosso_numero_boleto #=> "175/12345678-4"
85
+ def nosso_numero_boleto
86
+ "#{carteira}/#{nosso_numero}-#{nosso_numero_dv}"
87
+ end
88
+
89
+ # Agência + conta corrente do cliente para exibir no boleto.
90
+ # @return [String]
91
+ # @example
92
+ # boleto.agencia_conta_boleto #=> "0811 / 53678-8"
93
+ def agencia_conta_boleto
94
+ "#{agencia} / #{conta_corrente}-#{agencia_conta_corrente_dv}"
95
+ end
96
+
97
+ # Segunda parte do código de barras.
98
+ #
99
+ # CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196<br/>
100
+ # 01 a 03 | 03 | 9(3) | Código do Banco na Câmara de Compensação = ‘341’<br/>
101
+ # 04 a 04 | 01 | 9(1) | Código da Moeda = '9'<br/>
102
+ # 05 a 05 | 01 | 9(1) | DAC do Código de Barras MOD 11-2a9<br/>
103
+ # 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
104
+ # 10 a 19 | 10 | 9(08) | V(2) Valor<br/>
105
+ # 20 a 22 | 03 | 9(3) | Carteira<br/>
106
+ # 23 a 30 | 08 | 9(8) | Nosso Número<br/>
107
+ # 31 a 37 | 07 | 9(7) | Seu Número (Número do Documento)<br/>
108
+ # 38 a 42 | 05 | 9(5) | Código do Cliente (fornecido pelo Banco)<br/>
109
+ # 43 a 43 | 01 | 9(1) | DAC dos campos acima (posições 20 a 42) MOD 10<br/>
110
+ # 44 a 44 | 01 | 9(1) | Zero<br/>
111
+ #
112
+ # DEMAIS CARTEIRAS<br/>
113
+ # 01 a 03 | 03 | 9(03) | Código do Banco na Câmara de Compensação = '341'<br/>
114
+ # 04 a 04 | 01 | 9(01) | Código da Moeda = '9'<br/>
115
+ # 05 a 05 | 01 | 9(01) | DAC código de Barras MOD 11-2a9<br/>
116
+ # 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
117
+ # 10 a 19 | 10 | 9(08)V(2) | Valor<br/>
118
+ # 20 a 22 | 03 | 9(03) | Carteira<br/>
119
+ # 23 a 30 | 08 | 9(08) | Nosso Número<br/>
120
+ # 31 a 31 | 01 | 9(01) | DAC [Agência /Conta/Carteira/Nosso Número] MOD 10<br/>
121
+ # 32 a 35 | 04 | 9(04) | N.º da Agência cedente<br/>
122
+ # 36 a 40 | 05 | 9(05) | N.º da Conta Corrente<br/>
123
+ # 41 a 41 | 01 | 9(01) | DAC [Agência/Conta Corrente] MOD 10<br/>
124
+ # 42 a 44 | 03 | 9(03) | Zeros<br/>
125
+ #
126
+ # @return [String] 25 caracteres numéricos.
127
+ def codigo_barras_segunda_parte
128
+ case carteira.to_i
129
+ when 198, 106, 107, 122, 142, 143, 195, 196
130
+ dv = "#{carteira}#{nosso_numero}#{seu_numero}#{convenio}".modulo10
131
+ "#{carteira}#{nosso_numero}#{seu_numero}#{convenio}#{dv}0"
132
+ else
133
+ "#{carteira}#{nosso_numero}#{nosso_numero_dv}#{agencia}#{conta_corrente}#{agencia_conta_corrente_dv}000"
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,159 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ module Bbrcobranca
5
+ module Boleto
6
+ class ItauAdimplere < Base # Banco Itaú
7
+ # Usado somente em carteiras especiais com registro para complementar o número do cocumento
8
+ attr_reader :seu_numero
9
+ attr_writer :codigo_barras
10
+
11
+ def codigo_barras
12
+ instance_variable_get("@codigo_barras")
13
+ end
14
+
15
+ def logotipo
16
+ if Bbrcobranca.configuration.gerador == :rghost_carne
17
+ File.join(
18
+ brcobranca_path, "lib", "bbrcobranca", "arquivos", "logos", "itau_carne.eps"
19
+ )
20
+ else
21
+ File.join(brcobranca_path, "lib", "bbrcobranca", "arquivos", "logos", "itau.eps")
22
+ end
23
+ end
24
+
25
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
26
+ validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
27
+ validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
28
+ validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
29
+ with_options if: :usa_seu_numero? do |v|
30
+ v.validates_length_of :seu_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
31
+ end
32
+ # Nova instancia do Itau
33
+ # @param (see Bbrcobranca::Boleto::Base#initialize)
34
+ def initialize(campos = {})
35
+ campos = { carteira: '175' }.merge!(campos)
36
+ super(campos)
37
+ end
38
+
39
+ # Codigo do banco emissor (3 dígitos sempre)
40
+ #
41
+ # @return [String] 3 caracteres numéricos.
42
+ def banco
43
+ '341'
44
+ end
45
+
46
+ # Número do convênio/contrato do cliente junto ao banco.
47
+ # @return [String] 5 caracteres numéricos.
48
+ def convenio=(valor)
49
+ @convenio = valor.to_s.rjust(5, '0') if valor
50
+ end
51
+
52
+ # Conta corrente
53
+ # @return [String] 5 caracteres numéricos.
54
+ def conta_corrente=(valor)
55
+ @conta_corrente = valor.to_s.rjust(5, '0') if valor
56
+ end
57
+
58
+ # Número seqüencial utilizado para identificar o boleto.
59
+ # @return [String] 8 caracteres numéricos.
60
+ def nosso_numero=(valor)
61
+ @nosso_numero = valor.to_s.rjust(8, '0') if valor
62
+ end
63
+
64
+ # Número seqüencial utilizado para identificar o boleto.
65
+ # @return [String] 7 caracteres numéricos.
66
+ def seu_numero=(valor)
67
+ @seu_numero = valor.to_s.rjust(7, '0') if valor
68
+ end
69
+
70
+ def usa_seu_numero?
71
+ %w(198 106 107 122 142 143 195 196).include?(carteira.to_s)
72
+ end
73
+
74
+ # Dígito verificador do nosso número.
75
+ #
76
+ # Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
77
+ # "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.<br/>
78
+ # A excecao, estão as carteiras 112, 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
79
+ # dados "CARTEIRA/NOSSO NUMERO".
80
+ #
81
+ # @return [String] 1 caracteres numéricos.
82
+ def nosso_numero_dv
83
+ if %w(112 126 131 146 150 168).include?(carteira)
84
+ "#{carteira}#{nosso_numero}".modulo10
85
+ else
86
+ "#{agencia}#{conta_corrente}#{carteira}#{nosso_numero}".modulo10
87
+ end
88
+ end
89
+
90
+ # Calcula o dígito verificador para conta corrente do Itau.
91
+ # Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.
92
+ def agencia_conta_corrente_dv
93
+ "#{agencia}#{conta_corrente}".modulo10
94
+ end
95
+
96
+ # Nosso número para exibir no boleto.
97
+ # @return [String]
98
+ # @example
99
+ # boleto.nosso_numero_boleto #=> "175/12345678-4"
100
+ def nosso_numero_boleto
101
+ "#{carteira}/#{nosso_numero}-#{nosso_numero_dv}"
102
+ end
103
+
104
+ # Agência + conta corrente do cliente para exibir no boleto.
105
+ # @return [String]
106
+ # @example
107
+ # boleto.agencia_conta_boleto #=> "0811 / 53678-8"
108
+ def agencia_conta_boleto
109
+ "#{agencia} / #{conta_corrente}-#{agencia_conta_corrente_dv}"
110
+ end
111
+
112
+ # Segunda parte do código de barras.
113
+ #
114
+ # CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196<br/>
115
+ # 01 a 03 | 03 | 9(3) | Código do Banco na Câmara de Compensação = ‘341’<br/>
116
+ # 04 a 04 | 01 | 9(1) | Código da Moeda = '9'<br/>
117
+ # 05 a 05 | 01 | 9(1) | DAC do Código de Barras MOD 11-2a9<br/>
118
+ # 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
119
+ # 10 a 19 | 10 | 9(08) | V(2) Valor<br/>
120
+ # 20 a 22 | 03 | 9(3) | Carteira<br/>
121
+ # 23 a 30 | 08 | 9(8) | Nosso Número<br/>
122
+ # 31 a 37 | 07 | 9(7) | Seu Número (Número do Documento)<br/>
123
+ # 38 a 42 | 05 | 9(5) | Código do Cliente (fornecido pelo Banco)<br/>
124
+ # 43 a 43 | 01 | 9(1) | DAC dos campos acima (posições 20 a 42) MOD 10<br/>
125
+ # 44 a 44 | 01 | 9(1) | Zero<br/>
126
+ #
127
+ # DEMAIS CARTEIRAS<br/>
128
+ # 01 a 03 | 03 | 9(03) | Código do Banco na Câmara de Compensação = '341'<br/>
129
+ # 04 a 04 | 01 | 9(01) | Código da Moeda = '9'<br/>
130
+ # 05 a 05 | 01 | 9(01) | DAC código de Barras MOD 11-2a9<br/>
131
+ # 06 a 09 | 04 | 9(04) | Fator de Vencimento<br/>
132
+ # 10 a 19 | 10 | 9(08)V(2) | Valor<br/>
133
+ # 20 a 22 | 03 | 9(03) | Carteira<br/>
134
+ # 23 a 30 | 08 | 9(08) | Nosso Número<br/>
135
+ # 31 a 31 | 01 | 9(01) | DAC [Agência /Conta/Carteira/Nosso Número] MOD 10<br/>
136
+ # 32 a 35 | 04 | 9(04) | N.º da Agência cedente<br/>
137
+ # 36 a 40 | 05 | 9(05) | N.º da Conta Corrente<br/>
138
+ # 41 a 41 | 01 | 9(01) | DAC [Agência/Conta Corrente] MOD 10<br/>
139
+ # 42 a 44 | 03 | 9(03) | Zeros<br/>
140
+ #
141
+ # @return [String] 25 caracteres numéricos.
142
+ def codigo_barras_segunda_parte
143
+ case carteira.to_i
144
+ when 198, 106, 107, 122, 142, 143, 195, 196
145
+ dv = "#{carteira}#{nosso_numero}#{seu_numero}#{convenio}".modulo10
146
+ "#{carteira}#{nosso_numero}#{seu_numero}#{convenio}#{dv}0"
147
+ else
148
+ "#{carteira}#{nosso_numero}#{nosso_numero_dv}#{agencia}#{conta_corrente}#{agencia_conta_corrente_dv}000"
149
+ end
150
+ end
151
+
152
+ private
153
+
154
+ def brcobranca_path
155
+ @brcobranca_path ||= Gem::Specification.find_by_name("bbrcobranca").gem_dir
156
+ end
157
+ end
158
+ end
159
+ end