brcobranca_sicredi_400 1.0

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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +91 -0
  5. data/Rakefile +8 -0
  6. data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
  7. data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
  8. data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  9. data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
  13. data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  14. data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
  15. data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  16. data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
  17. data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  18. data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
  19. data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  20. data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
  21. data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  22. data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
  23. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
  24. data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
  25. data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
  26. data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
  27. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
  28. data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
  29. data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  30. data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
  31. data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
  32. data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
  33. data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
  34. data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
  35. data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
  36. data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
  37. data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  38. data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
  39. data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  40. data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
  41. data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
  42. data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  43. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  44. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  45. data/lib/brcobranca/boleto/ailos.rb +89 -0
  46. data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
  47. data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
  48. data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
  49. data/lib/brcobranca/boleto/banestes.rb +86 -0
  50. data/lib/brcobranca/boleto/banrisul.rb +95 -0
  51. data/lib/brcobranca/boleto/base.rb +256 -0
  52. data/lib/brcobranca/boleto/bradesco.rb +100 -0
  53. data/lib/brcobranca/boleto/caixa.rb +123 -0
  54. data/lib/brcobranca/boleto/citibank.rb +97 -0
  55. data/lib/brcobranca/boleto/credisis.rb +118 -0
  56. data/lib/brcobranca/boleto/hsbc.rb +96 -0
  57. data/lib/brcobranca/boleto/itau.rb +138 -0
  58. data/lib/brcobranca/boleto/safra.rb +152 -0
  59. data/lib/brcobranca/boleto/santander.rb +86 -0
  60. data/lib/brcobranca/boleto/sicoob.rb +120 -0
  61. data/lib/brcobranca/boleto/sicredi.rb +145 -0
  62. data/lib/brcobranca/boleto/template/base.rb +28 -0
  63. data/lib/brcobranca/boleto/template/rghost.rb +308 -0
  64. data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
  65. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
  66. data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
  67. data/lib/brcobranca/boleto/unicred.rb +99 -0
  68. data/lib/brcobranca/calculo.rb +120 -0
  69. data/lib/brcobranca/calculo_data.rb +63 -0
  70. data/lib/brcobranca/currency.rb +69 -0
  71. data/lib/brcobranca/formatacao.rb +104 -0
  72. data/lib/brcobranca/formatacao_string.rb +37 -0
  73. data/lib/brcobranca/limpeza.rb +20 -0
  74. data/lib/brcobranca/remessa/base.rb +72 -0
  75. data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
  76. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
  77. data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
  78. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
  79. data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
  80. data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
  81. data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
  82. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
  83. data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
  84. data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
  85. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  86. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
  87. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
  88. data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
  89. data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
  90. data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
  91. data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
  92. data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
  93. data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
  94. data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
  95. data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
  96. data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
  97. data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
  98. data/lib/brcobranca/remessa/pagamento.rb +320 -0
  99. data/lib/brcobranca/retorno/base.rb +11 -0
  100. data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
  101. data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
  102. data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
  103. data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
  104. data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
  105. data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
  106. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
  107. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
  108. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
  109. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  110. data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
  111. data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
  112. data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
  113. data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
  114. data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
  115. data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
  116. data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
  117. data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
  118. data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
  119. data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
  120. data/lib/brcobranca/util/date.rb +21 -0
  121. data/lib/brcobranca/util/empresa.rb +29 -0
  122. data/lib/brcobranca/util/errors.rb +76 -0
  123. data/lib/brcobranca/validations.rb +208 -0
  124. data/lib/brcobranca/version.rb +5 -0
  125. data/lib/brcobranca.rb +200 -0
  126. metadata +225 -0
@@ -0,0 +1,256 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # @author Kivanio Barbosa
5
+ module Brcobranca
6
+ module Boleto
7
+ # Classe base para todas as classes de boletos
8
+ class Base
9
+ extend Template::Base
10
+
11
+ # Configura gerador de arquivo de boleto e código de barras.
12
+ define_template(Brcobranca.configuration.gerador).each do |klass|
13
+ extend klass
14
+ include klass
15
+ end
16
+
17
+ # Validações
18
+ include Brcobranca::Validations
19
+
20
+ # <b>REQUERIDO</b>: Número do convênio/contrato do cliente junto ao banco emissor
21
+ attr_accessor :convenio
22
+ # <b>REQUERIDO</b>: Tipo de moeda utilizada (Real(R$) e igual a 9)
23
+ attr_accessor :moeda
24
+ # <b>REQUERIDO</b>: Carteira utilizada
25
+ attr_accessor :carteira
26
+ # <b>OPCIONAL</b>: Variacao da carteira(opcional para a maioria dos bancos)
27
+ attr_accessor :carteira_label
28
+ # <b>OPCIONAL</b>: Rótulo da Carteira, RG ou SR, somente para impressão no boleto.
29
+ attr_accessor :variacao
30
+ # <b>OPCIONAL</b>: Data de processamento do boleto
31
+ attr_accessor :data_processamento
32
+ # <b>REQUERIDO</b>: Quantidade de boleto(padrão = 1)
33
+ attr_accessor :quantidade
34
+ # <b>REQUERIDO</b>: Valor do boleto
35
+ attr_accessor :valor
36
+ # <b>REQUERIDO</b>: Número da agencia sem <b>Digito Verificador</b>
37
+ attr_accessor :agencia
38
+ # <b>REQUERIDO</b>: Número da conta corrente sem <b>Digito Verificador</b>
39
+ attr_accessor :conta_corrente
40
+ # <b>REQUERIDO</b>: Nome do beneficiário
41
+ attr_accessor :cedente
42
+ # <b>REQUERIDO</b>: Documento do beneficiário (CPF ou CNPJ)
43
+ attr_accessor :documento_cedente
44
+ # <b>OPCIONAL</b>: Número sequencial utilizado para identificar o boleto
45
+ attr_accessor :nosso_numero
46
+ # <b>REQUERIDO</b>: Símbolo da moeda utilizada (R$ no brasil)
47
+ attr_accessor :especie
48
+ # <b>REQUERIDO</b>: Tipo do documento (Geralmente DM que quer dizer Duplicata Mercantil)
49
+ attr_accessor :especie_documento
50
+ # <b>REQUERIDO</b>: Data de pedido, Nota fiscal ou documento que originou o boleto
51
+ attr_accessor :data_documento
52
+ # <b>REQUERIDO</b>: Data de vencimento do boleto
53
+ attr_accessor :data_vencimento
54
+ # <b>OPCIONAL</b>: Número de pedido, Nota fiscal ou documento que originou o boleto
55
+ attr_accessor :documento_numero
56
+ # <b>OPCIONAL</b>: Código utilizado para identificar o tipo de serviço cobrado
57
+ attr_accessor :codigo_servico
58
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao sacado
59
+ attr_accessor :demonstrativo
60
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
61
+ attr_accessor :instrucoes
62
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
63
+ attr_accessor :instrucao1
64
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
65
+ attr_accessor :instrucao2
66
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
67
+ attr_accessor :instrucao3
68
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
69
+ attr_accessor :instrucao4
70
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
71
+ attr_accessor :instrucao5
72
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
73
+ attr_accessor :instrucao6
74
+ # <b>OPCIONAL</b>: Utilizado para mostrar alguma informação ao caixa
75
+ attr_accessor :instrucao7
76
+ # <b>REQUERIDO</b>: Informação sobre onde o sacado podera efetuar o pagamento
77
+ attr_accessor :local_pagamento
78
+ # <b>REQUERIDO</b>: Informa se o banco deve aceitar o boleto após o vencimento ou não( S ou N, quase sempre S)
79
+ attr_accessor :aceite
80
+ # <b>REQUERIDO</b>: Nome do pagador
81
+ attr_accessor :sacado
82
+ # <b>OPCIONAL</b>: Endereco do pagador
83
+ attr_accessor :sacado_endereco
84
+ # <b>REQUERIDO</b>: Documento do pagador
85
+ attr_accessor :sacado_documento
86
+ # <b>OPCIONAL</b>: Nome do avalista
87
+ attr_accessor :avalista
88
+ # <b>OPCIONAL</b>: Documento do avalista
89
+ attr_accessor :avalista_documento
90
+ # <b>OPCIONAL</b>: Endereço do beneficiário
91
+ attr_accessor :cedente_endereco
92
+ # <b>OPCIONAL</b>: EMV para gerar QRCode para pagamento via PIX
93
+ attr_accessor :emv
94
+ # <b>OPCIONAL</b>: Descontos e abatimentos
95
+ attr_accessor :descontos_e_abatimentos
96
+
97
+ # Validações
98
+ validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :nosso_numero,
99
+ :sacado, :sacado_documento, message: 'não pode estar em branco.'
100
+ validates_numericality_of :convenio, :agencia, :conta_corrente, :nosso_numero, message: 'não é um número.',
101
+ allow_nil: true
102
+
103
+ # Nova instancia da classe Base
104
+ # @param [Hash] campos
105
+ def initialize(campos = {})
106
+ padrao = {
107
+ moeda: '9',
108
+ data_processamento: Date.current,
109
+ data_vencimento: Date.current,
110
+ quantidade: 1,
111
+ especie_documento: 'DM',
112
+ especie: 'R$',
113
+ aceite: 'S',
114
+ valor: 0.0,
115
+ local_pagamento: 'QUALQUER BANCO ATÉ O VENCIMENTO'
116
+ }
117
+
118
+ campos = padrao.merge!(campos)
119
+ campos.each do |campo, valor|
120
+ send :"#{campo}=", valor
121
+ end
122
+
123
+ yield self if block_given?
124
+ end
125
+
126
+ # Logotipo do banco
127
+ # @return [Path] Caminho para o arquivo de logotipo do banco.
128
+ def logotipo
129
+ if Brcobranca.configuration.gerador == :rghost_carne
130
+ File.join(File.dirname(__FILE__), '..', 'arquivos', 'logos', "#{class_name}_carne.eps")
131
+ else
132
+ File.join(File.dirname(__FILE__), '..', 'arquivos', 'logos', "#{class_name}.eps")
133
+ end
134
+ end
135
+
136
+ # Dígito verificador do banco
137
+ # @return [Integer] 1 caracteres numéricos.
138
+ def banco_dv
139
+ banco.modulo11
140
+ end
141
+
142
+ # Código da agencia
143
+ # @return [String] 4 caracteres numéricos.
144
+ def agencia=(valor)
145
+ @agencia = valor.to_s.rjust(4, '0') if valor
146
+ end
147
+
148
+ # Dígito verificador da agência
149
+ # @return [Integer] 1 caracteres numéricos.
150
+ def agencia_dv
151
+ agencia.modulo11
152
+ end
153
+
154
+ # Dígito verificador da conta corrente
155
+ # @return [Integer] 1 caracteres numéricos.
156
+ def conta_corrente_dv
157
+ conta_corrente.modulo11
158
+ end
159
+
160
+ # Dígito verificador do nosso número
161
+ # @return [Integer] 1 caracteres numéricos.
162
+ def nosso_numero_dv
163
+ nosso_numero.modulo11(mapeamento: { 10 => 0, 11 => 0 })
164
+ end
165
+
166
+ # @abstract Deverá ser sobreescrito para cada banco.
167
+ def nosso_numero_boleto
168
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
169
+ end
170
+
171
+ # @abstract Deverá ser sobreescrito para cada banco.
172
+ def agencia_conta_boleto
173
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
174
+ end
175
+
176
+ # Valor total do documento: <b>quantidate * valor</b>
177
+ # @return [Float]
178
+ def valor_documento
179
+ quantidade.to_f * valor.to_f
180
+ end
181
+
182
+ # Fator de vencimento calculado com base na data de vencimento do boleto.
183
+ # @return [String] 4 caracteres numéricos.
184
+ def fator_vencimento
185
+ data_vencimento.fator_vencimento
186
+ end
187
+
188
+ # Número da conta corrente
189
+ # @return [String] 7 caracteres numéricos.
190
+ def conta_corrente=(valor)
191
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
192
+ end
193
+
194
+ # Codigo de barras do boleto
195
+ #
196
+ # O codigo de barra para cobrança contém 44 posições dispostas da seguinte forma:<br/>
197
+ # Posição |Tamanho |Conteúdo<br/>
198
+ # 01 a 03 | 3 | Identificação do Banco<br/>
199
+ # 04 a 04 | 1 | Código da Moeda (Real = 9, Outras=0)<br/>
200
+ # 05 a 05 | 1 | Dígito verificador do Código de Barras<br/>
201
+ # 06 a 09 | 4 | Fator de Vencimento (Vide Nota)<br/>
202
+ # 10 a 19 | 10 | Valor<br/>
203
+ # 20 a 44 | 25 | Campo Livre - As posições do campo livre ficam a critério de cada Banco arrecadador.<br/>
204
+ #
205
+ # @raise [Brcobranca::BoletoInvalido] Caso as informações fornecidas não sejam suficientes ou sejam inválidas.
206
+ # @return [String] código de barras formado por 44 caracteres numéricos.
207
+ def codigo_barras
208
+ raise Brcobranca::BoletoInvalido, self unless valid?
209
+
210
+ codigo = codigo_barras_primeira_parte # 18 digitos
211
+ codigo += codigo_barras_segunda_parte # 25 digitos
212
+ if codigo =~ /^(\d{4})(\d{39})$/
213
+
214
+ codigo_dv = codigo.modulo11(
215
+ multiplicador: (2..9).to_a,
216
+ mapeamento: { 0 => 1, 10 => 1, 11 => 1 }
217
+ ) { |t| 11 - (t % 11) }
218
+
219
+ "#{Regexp.last_match[1]}#{codigo_dv}#{Regexp.last_match[2]}"
220
+
221
+ else
222
+ errors.add(:base, :too_long,
223
+ message: "tamanho(#{codigo.size}) prévio do código de barras(#{codigo}) inválido, deveria ser 43 dígitos")
224
+ raise Brcobranca::BoletoInvalido, self
225
+ end
226
+ end
227
+
228
+ # Monta a segunda parte do código de barras, que é específico para cada banco.
229
+ #
230
+ # @abstract Deverá ser sobreescrito para cada banco.
231
+ def codigo_barras_segunda_parte
232
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
233
+ end
234
+
235
+ private
236
+
237
+ # Monta a primeira parte do código de barras, que é a mesma para todos bancos.
238
+ # @return [String] 18 caracteres numéricos.
239
+ def codigo_barras_primeira_parte
240
+ "#{banco}#{moeda}#{fator_vencimento}#{valor_documento_formatado}"
241
+ end
242
+
243
+ # Valor total do documento
244
+ # @return [String] 10 caracteres numéricos.
245
+ def valor_documento_formatado
246
+ valor_documento.round(2).limpa_valor_moeda.to_s.rjust(10, '0')
247
+ end
248
+
249
+ # Nome da classe do boleto
250
+ # @return [String]
251
+ def class_name
252
+ self.class.to_s.split('::').last.downcase
253
+ end
254
+ end
255
+ end
256
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Banco BRADESCO
6
+ class Bradesco < Base
7
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
8
+ validates_length_of :nosso_numero, maximum: 11, message: 'deve ser menor ou igual a 11 dígitos.'
9
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
10
+ validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
11
+
12
+ # Nova instancia do Bradesco
13
+ # @param (see Brcobranca::Boleto::Base#initialize)
14
+ def initialize(campos = {})
15
+ campos = { carteira: '06' }.merge!(campos)
16
+
17
+ campos[:local_pagamento] = 'Pagável preferencialmente na Rede Bradesco ou Bradesco Expresso'
18
+
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
+ '237'
27
+ end
28
+
29
+ # Carteira
30
+ #
31
+ # @return [String] 2 caracteres numéricos.
32
+ def carteira=(valor)
33
+ @carteira = valor.to_s.rjust(2, '0') if valor
34
+ end
35
+
36
+ # Número seqüencial utilizado para identificar o boleto.
37
+ # @return [String] 11 caracteres numéricos.
38
+ def nosso_numero=(valor)
39
+ @nosso_numero = valor.to_s.rjust(11, '0') if valor
40
+ end
41
+
42
+ # Nosso número para exibir no boleto.
43
+ # @return [String]
44
+ # @example
45
+ # boleto.nosso_numero_boleto #=> ""06/00000004042-8"
46
+ def nosso_numero_boleto
47
+ "#{carteira}/#{nosso_numero}-#{nosso_numero_dv}"
48
+ end
49
+
50
+ # Dígito verificador da agência
51
+ # @return [Integer] 1 caracteres numéricos.
52
+ def agencia_dv
53
+ agencia.modulo11(
54
+ multiplicador: [2, 3, 4, 5],
55
+ mapeamento: { 10 => 'P', 11 => 0 }
56
+ ) { |total| 11 - (total % 11) }
57
+ end
58
+
59
+ # Dígito verificador do nosso número
60
+ # @return [Integer] 1 caracteres numéricos.
61
+ def nosso_numero_dv
62
+ "#{carteira}#{nosso_numero}".modulo11(
63
+ multiplicador: [2, 3, 4, 5, 6, 7],
64
+ mapeamento: { 10 => 'P', 11 => 0 }
65
+ ) { |total| 11 - (total % 11) }
66
+ end
67
+
68
+ # Dígito verificador da conta corrente
69
+ # @return [Integer] 1 caracteres numéricos.
70
+ def conta_corrente_dv
71
+ conta_corrente.modulo11(
72
+ multiplicador: [2, 3, 4, 5, 6, 7],
73
+ mapeamento: { 10 => 'P', 11 => 0 }
74
+ ) { |total| 11 - (total % 11) }
75
+ end
76
+
77
+ # Agência + conta corrente do cliente para exibir no boleto.
78
+ # @return [String]
79
+ # @example
80
+ # boleto.agencia_conta_boleto #=> "0548-7 / 00001448-6"
81
+ def agencia_conta_boleto
82
+ "#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
83
+ end
84
+
85
+ # Segunda parte do código de barras.
86
+ #
87
+ # Posição | Tamanho | Conteúdo<br/>
88
+ # 20 a 23 | 4 | Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)<br/>
89
+ # 24 a 25 | 2 | Carteira<br/>
90
+ # 26 a 36 | 11 | Número do Nosso Número(Sem o digito verificador)<br/>
91
+ # 37 a 43 | 7 | Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)<br/>
92
+ # 44 a 44 | 1 | Zero<br/>
93
+ #
94
+ # @return [String] 25 caracteres numéricos.
95
+ def codigo_barras_segunda_parte
96
+ "#{agencia}#{carteira}#{nosso_numero}#{conta_corrente}0"
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ #
5
+ # A Caixa tem dois padrões para a geração de boleto: SIGCB e SICOB.
6
+ # O SICOB foi substiuido pelo SIGCB que é implementado por esta classe.
7
+ # http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF
8
+ #
9
+ module Brcobranca
10
+ module Boleto
11
+ # Caixa
12
+ class Caixa < Base
13
+ # <b>REQUERIDO</b>: Emissão do boleto
14
+ attr_accessor :emissao
15
+
16
+ # Validações
17
+ # Modalidade/Carteira de Cobrança (1-Registrada | 2-Sem Registro)
18
+ validates_length_of :carteira, is: 1, message: 'deve possuir 1 dígitos.'
19
+ # Emissão do boleto (4-Beneficiário)
20
+ validates_length_of :emissao, is: 1, message: 'deve possuir 1 dígitos.'
21
+ validates_length_of :convenio, is: 6, message: 'deve possuir 6 dígitos.'
22
+ validates_length_of :nosso_numero, is: 15, message: 'deve possuir 15 dígitos.'
23
+
24
+ # Nova instância da CaixaEconomica
25
+ # @param (see Brcobranca::Boleto::Base#initialize)
26
+ def initialize(campos = {})
27
+ campos = {
28
+ carteira: '1',
29
+ carteira_label: 'RG',
30
+ emissao: '4'
31
+ }.merge!(campos)
32
+
33
+ campos[:local_pagamento] = 'PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE'
34
+
35
+ super(campos)
36
+ end
37
+
38
+ # Código do banco emissor
39
+ # @return [String]
40
+ def banco
41
+ '104'
42
+ end
43
+
44
+ # Dígito verificador do código do banco em módulo 10
45
+ # Módulo 10 de 104 é 0
46
+ # @return [String]
47
+ def banco_dv
48
+ '0'
49
+ end
50
+
51
+ # Número do convênio/contrato do cliente junto ao banco.
52
+ # @return [String] 6 caracteres numéricos.
53
+ def convenio=(valor)
54
+ @convenio = valor.to_s.rjust(6, '0') if valor
55
+ end
56
+
57
+ # Número seqüencial utilizado para identificar o boleto.
58
+ # @return [String] 15 caracteres numéricos.
59
+ def nosso_numero=(valor)
60
+ @nosso_numero = valor.to_s.rjust(15, '0') if valor
61
+ end
62
+
63
+ # Nosso número, 17 dígitos
64
+ # @return [String]
65
+ def nosso_numero_boleto
66
+ "#{carteira}#{emissao}#{nosso_numero}-#{nosso_numero_dv}"
67
+ end
68
+
69
+ # Dígito verificador do Nosso Número
70
+ # Utiliza-se o [-1..-1] para retornar o último caracter
71
+ # @return [String]
72
+ def nosso_numero_dv
73
+ "#{carteira}#{emissao}#{nosso_numero}".modulo11(
74
+ multiplicador: (2..9).to_a,
75
+ mapeamento: { 10 => 0, 11 => 0 }
76
+ ) { |total| 11 - (total % 11) }.to_s
77
+ end
78
+
79
+ # Número da agência/código cedente do cliente para exibir no boleto.
80
+ # @return [String]
81
+ # @example
82
+ # boleto.agencia_conta_boleto #=> "1565/100000-4"
83
+ def agencia_conta_boleto
84
+ "#{agencia}/#{convenio}-#{convenio_dv}"
85
+ end
86
+
87
+ # Dígito verificador do convênio ou código do cedente
88
+ # @return [String]
89
+ def convenio_dv
90
+ convenio.modulo11(
91
+ multiplicador: (2..9).to_a,
92
+ mapeamento: { 10 => 0, 11 => 0 }
93
+ ) { |total| 11 - (total % 11) }.to_s
94
+ end
95
+
96
+ # Monta a segunda parte do código de barras.
97
+ # 1 à 6: código do cedente, também conhecido como convênio
98
+ # 7: dígito verificador do código do cedente
99
+ # 8 à 10: dígito 3 à 5 do nosso número
100
+ # 11: dígito 1 do nosso número (modalidade da cobrança)
101
+ # 12 à 14: dígito 6 à 8 do nosso número
102
+ # 15: dígito 2 do nosso número (emissão do boleto)
103
+ # 16 à 24: dígito 9 à 17 do nosso número
104
+ # 25: dígito verificador do campo livre
105
+ # @return [String]
106
+ def codigo_barras_segunda_parte
107
+ campo_livre = "#{convenio}" \
108
+ "#{convenio_dv}" \
109
+ "#{nosso_numero_boleto[2..4]}" \
110
+ "#{nosso_numero_boleto[0..0]}" \
111
+ "#{nosso_numero_boleto[5..7]}" \
112
+ "#{nosso_numero_boleto[1..1]}" \
113
+ "#{nosso_numero_boleto[8..16]}"
114
+
115
+ campo_livre.to_s +
116
+ campo_livre.modulo11(
117
+ multiplicador: (2..9).to_a,
118
+ mapeamento: { 10 => 0, 11 => 0 }
119
+ ) { |total| 11 - (total % 11) }.to_s
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Citibank
6
+ class Citibank < Base
7
+ # <b>REQUERIDO</b>: Portfolio
8
+ attr_accessor :portfolio
9
+
10
+ validates_length_of :convenio, is: 10, message: 'deve possuir 10 dígitos.' # Conta cosmos
11
+ validates_length_of :nosso_numero, is: 11, message: 'deve possuir 11 dígitos.'
12
+ validates_length_of :portfolio, is: 3, message: 'deve possuir 3 dígitos.' # Portfolio
13
+
14
+ # @param (see Brcobranca::Boleto::Base#initialize)
15
+ def initialize(campos = {})
16
+ campos = {
17
+ carteira: '3',
18
+ carteira_label: '3'
19
+ }.merge!(campos)
20
+ super(campos)
21
+ end
22
+
23
+ # Código do banco emissor
24
+ # @return [String]
25
+ def banco
26
+ '745'
27
+ end
28
+
29
+ # @return [String]
30
+ def banco_dv
31
+ '5'
32
+ end
33
+
34
+ # Número do portfolio do cliente junto ao banco.
35
+ # @return [String] 3 caracteres numéricos.
36
+ def portfolio=(valor)
37
+ @portfolio = valor.to_s.rjust(3, '0') if valor
38
+ end
39
+
40
+ # Número do convênio/contrato do cliente junto ao banco.
41
+ # @return [String] 10 caracteres numéricos.
42
+ def convenio=(valor)
43
+ @convenio = valor.to_s.rjust(10, '0') if valor
44
+ end
45
+
46
+ # Número seqüencial utilizado para identificar o boleto.
47
+ # @return [String] 11 caracteres numéricos.
48
+ def nosso_numero=(valor)
49
+ @nosso_numero = valor.to_s.rjust(11, '0') if valor
50
+ end
51
+
52
+ # Nosso número, 11 dígitos
53
+ # @return [String]
54
+ def nosso_numero_boleto
55
+ "#{nosso_numero}.#{nosso_numero_dv}"
56
+ end
57
+
58
+ # Dígito verificador do Nosso Número
59
+ # Utiliza-se o [-1..-1] para retornar o último caracter
60
+ # @return [String]
61
+ def nosso_numero_dv
62
+ nosso_numero.to_s.modulo11(
63
+ multiplicador: (2..9).to_a,
64
+ mapeamento: { 10 => 0, 11 => 0 }
65
+ ) { |total| 11 - (total % 11) }.to_s
66
+ end
67
+
68
+ # Número da agência/código cedente do cliente para exibir no boleto.
69
+ # @return [String]
70
+ # @example
71
+ # boleto.agencia_conta_boleto #=> "1565/100000-4"
72
+ def agencia_conta_boleto
73
+ "#{agencia} / #{convenio}"
74
+ end
75
+
76
+ # Monta a segunda parte do código de barras.
77
+ # Descrição do Campo | Posição | Tamanho | Campo | Conteúdo do Campo
78
+ # Código do Produto | 20 | 1 | 6 | 3 - Cobrança com registro / sem registro ou 4 Cobrança de seguro - sem registro
79
+ # Portfólio | 21 a 23 | 3 | 7 | 3 últimos dígitos do campo de identificação da empresa no CITIBANK (Posição 44 a 46 do arquivo retorno)
80
+ # Base | 24 a 29 | 6. | 8. |
81
+ # Sequência | 30 a 31 | 2 | 9. |
82
+ # Dígito Conta Cosmos | 32 | 1 | 10. |
83
+ # Nosso Número + DV | 33 a 44 | 12 | 11. |
84
+ # A discriminação de “Índice”, “Base”, “Seqüência” e “Dígito verificador” podem ser encontrados na Conta Cosmos do cedente da seguinte forma:
85
+ # Ex.: 0.123456.78.9 = Conta Cosmos
86
+ # 0 - Índice
87
+ # 123456 - Base (Posição 24 a 29)
88
+ # 78 - Sequência (Posição 30 a 31)
89
+ # 9 - Dígito Verificador (Posição 32
90
+ #
91
+ # @return [String]
92
+ def codigo_barras_segunda_parte
93
+ "#{carteira}#{portfolio}#{convenio[1..]}#{nosso_numero}#{nosso_numero_dv}"
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # CrediSIS
6
+ class Credisis < Base
7
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
8
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
9
+ validates_length_of :carteira, is: 2, message: 'deve ser menor ou igual a 2 dígitos.'
10
+ validates_length_of :convenio, is: 6, message: 'deve ser menor ou igual a 6 dígitos.'
11
+ validates_length_of :nosso_numero, maximum: 6, message: 'deve ser menor ou igual a 6 dígitos.'
12
+ validates_presence_of :documento_cedente, message: 'não pode estar em branco.'
13
+ validates_numericality_of :documento_cedente, message: 'não é um número.'
14
+
15
+ # Nova instancia do CrediSIS
16
+ # @param (see Brcobranca::Boleto::Base#initialize)
17
+ def initialize(campos = {})
18
+ campos = { carteira: '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
+ '097'
27
+ end
28
+
29
+ # Carteira
30
+ # @return [String] 2 caracteres numéricos.
31
+ def carteira=(valor)
32
+ @carteira = valor.to_s.rjust(2, '0') if valor
33
+ end
34
+
35
+ # Dígito verificador do banco
36
+ #
37
+ # @return [String] 1 caracteres numéricos.
38
+ def banco_dv
39
+ '3'
40
+ end
41
+
42
+ # Retorna dígito verificador da agência
43
+ #
44
+ # @return [String] 1 caracteres numéricos.
45
+ def agencia_dv
46
+ agencia.modulo11(mapeamento: { 10 => 'X' })
47
+ end
48
+
49
+ # Conta corrente
50
+ # @return [String] 7 caracteres numéricos.
51
+ def conta_corrente=(valor)
52
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
53
+ end
54
+
55
+ # Número do convênio/contrato do cliente junto ao banco.
56
+ # @return [String] 6 caracteres numéricos.
57
+ def convenio=(valor)
58
+ @convenio = valor.to_s.rjust(6, '0') if valor
59
+ end
60
+
61
+ # Dígito verificador da conta corrente
62
+ # @return [String] 1 caracteres numéricos.
63
+ def conta_corrente_dv
64
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' })
65
+ end
66
+
67
+ # Nosso número
68
+ # @return [String] 6 caracteres numéricos.
69
+ def nosso_numero=(valor)
70
+ @nosso_numero = valor.to_s.rjust(6, '0')
71
+ end
72
+
73
+ # Nosso número para exibir no boleto.
74
+ # @return [String]
75
+ # @example
76
+ # boleto.nosso_numero_boleto #=> "10000000027000095-7"
77
+ def nosso_numero_boleto
78
+ "097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
79
+ end
80
+
81
+ # Agência + conta corrente do cliente para exibir no boleto.
82
+ # @return [String]
83
+ # @example
84
+ # boleto.agencia_conta_boleto #=> "0001-9 / 0000002-7"
85
+ def agencia_conta_boleto
86
+ "#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
87
+ end
88
+
89
+ # X – Módulo 11 do CPF/CNPJ (incluindo dígitos verificadores) do Beneficiário emissor
90
+ # Obs.: Caso for CPF, utilizar 9 como limitador da multiplicação.
91
+ # Caso for CNPJ, utilizar 8 no limitador da multiplicação.
92
+ def documento_cedente_dv
93
+ options = { mapeamento: { 0 => 1, 10 => 1, 11 => 1 } }
94
+ options.merge(multiplicador: [8, 7, 6, 5, 4, 3, 2]) if documento_cedente.to_s.size > 11
95
+ documento_cedente.modulo11(options)
96
+ end
97
+
98
+ # Segunda parte do código de barras.
99
+ # @return [String] 25 caracteres numéricos.
100
+ # 1. - Número do Banco: “097”
101
+ # 2. - Moeda: “9”
102
+ # 3. - DV do Código de Barras, Baseado no Módulo 11 (Vide Anexo X).
103
+ # 4. - Fator de Vencimento do Boleto (Vide Anexo VII).
104
+ # 5. - Valor do Título, expresso em Reais, com 02 casas decimais.
105
+ # 6. - Fixo Zeros: Campo com preenchimento Zerado “00000”
106
+ # 7. - Composição do Nosso Número: 097XAAAACCCCCCSSSSSS, sendo:
107
+ # Composição do Nosso Número
108
+ # 097 - Fixo
109
+ # X - Módulo 11 do CPF/CNPJ (Incluindo dígitos verificadores) do Beneficiário.
110
+ # AAAA - Código da Agência CrediSIS ao qual o Beneficiário possui Conta.
111
+ # CCCCCC - Código de Convênio do Beneficiário no Sistema CrediSIS
112
+ # SSSSSS - Sequencial Único do Boleto
113
+ def codigo_barras_segunda_parte
114
+ "00000097#{documento_cedente_dv}#{agencia}#{convenio}#{nosso_numero}"
115
+ end
116
+ end
117
+ end
118
+ end