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,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Banco HSBC
6
+ class Hsbc < Base
7
+ validates_inclusion_of :carteira, in: %w[CNR CSB], message: 'não existente para este banco.'
8
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
9
+ validates_length_of :nosso_numero, maximum: 13, message: 'deve ser menor ou igual a 13 dígitos.'
10
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
11
+
12
+ # Nova instancia do Hsbc
13
+ # @param (see Brcobranca::Boleto::Base#initialize)
14
+ def initialize(campos = {})
15
+ campos = { carteira: 'CNR' }.merge!(campos)
16
+ super(campos)
17
+ end
18
+
19
+ # Codigo do banco emissor (3 dígitos sempre)
20
+ #
21
+ # @return [String] 3 caracteres numéricos.
22
+ def banco
23
+ '399'
24
+ end
25
+
26
+ # Número seqüencial utilizado para identificar o boleto.
27
+ # @return [String] 13 caracteres numéricos.
28
+ def nosso_numero=(valor)
29
+ @nosso_numero = valor.to_s.rjust(13, '0') if valor
30
+ end
31
+
32
+ # Nosso número para exibir no boleto.
33
+ # @return [String]
34
+ # @example
35
+ # boleto.nosso_numero_boleto #=> "0000000004042847"
36
+ def nosso_numero_boleto
37
+ case carteira
38
+ when 'CNR'
39
+ if data_vencimento.is_a?(Date)
40
+ self.codigo_servico = '4'
41
+ dia = data_vencimento.day.to_s.rjust(2, '0')
42
+ mes = data_vencimento.month.to_s.rjust(2, '0')
43
+ ano = data_vencimento.year.to_s[2..3]
44
+ data = "#{dia}#{mes}#{ano}"
45
+
46
+ parte_1 = "#{nosso_numero}#{nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{codigo_servico}"
47
+ soma = parte_1.to_i + conta_corrente.to_i + data.to_i
48
+ "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
49
+ else
50
+ errors.add(:data_vencimento, 'não é uma data.')
51
+ raise Brcobranca::BoletoInvalido, self
52
+ end
53
+ when 'CSB'
54
+ @nosso_numero
55
+ else
56
+ raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
57
+ # TODO: - Verificar outras carteiras.
58
+ # self.codigo_servico = "5"
59
+ # parte_1 = "#{self.nosso_numero}#{self.nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{self.codigo_servico}"
60
+ # soma = parte_1.to_i + self.conta_corrente.to_i
61
+ # numero = "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
62
+ # numero
63
+ end
64
+ end
65
+
66
+ # Número do convênio/contrato do cliente para exibir no boleto.
67
+ # @return [String]
68
+ # @example
69
+ # boleto.agencia_conta_boleto #=> "0061900"
70
+ def agencia_conta_boleto
71
+ conta_corrente
72
+ end
73
+
74
+ # Segunda parte do código de barras.
75
+ #
76
+ # Montagem é baseada no tipo de carteira e na presença da data de vencimento<br/>
77
+ # <b>OBS:</b> Somente as carteiras <b>CNR/CSB</b> estão implementadas.<br/>
78
+ #
79
+ # @return [String] 25 caracteres numéricos.
80
+ # @raise [Brcobranca::NaoImplementado] Caso a carteira informada não for CNR/CSB.
81
+ def codigo_barras_segunda_parte
82
+ case carteira
83
+ when 'CNR'
84
+ dias_julianos = data_vencimento.to_juliano
85
+ "#{conta_corrente}#{nosso_numero}#{dias_julianos}2"
86
+ when 'CSB'
87
+ raise Brcobranca::NaoImplementado, 'Nosso número não definido.' unless @nosso_numero
88
+
89
+ "#{nosso_numero}#{agencia}#{conta_corrente}001"
90
+ else
91
+ raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Banco Itaú
6
+ class Itau < Base
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 Brcobranca::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,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Banco Safra
6
+ class Safra < Base
7
+ # <b>REQUERIDO</b>: Dígito da Agência
8
+ attr_accessor :agencia_dv
9
+ # <b>REQUERIDO</b>: Dígito da conta
10
+ attr_accessor :conta_corrente_dv
11
+
12
+ validates_presence_of :agencia_dv, :conta_corrente_dv, message: 'não pode estar em branco.'
13
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
14
+ validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
15
+ validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
16
+ validates_length_of :agencia_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
17
+ validates_length_of :conta_corrente_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
18
+
19
+ # Codigo do banco emissor (3 dígitos sempre)
20
+ #
21
+ # @return [String] 3 caracteres numéricos.
22
+ def banco
23
+ '422'
24
+ end
25
+
26
+ # Agência
27
+ #
28
+ # @return [String] 4 caracteres numéricos.
29
+ def agencia=(valor)
30
+ @agencia = valor.to_s.rjust(4, '0') if valor
31
+ end
32
+
33
+ # Conta corrente
34
+ # @return [String] 8 caracteres numéricos.
35
+ def conta_corrente=(valor)
36
+ @conta_corrente = valor.to_s.rjust(8, '0') if valor
37
+ end
38
+
39
+ # Número seqüencial utilizado para identificar o boleto.
40
+ # @return [String] 8 caracteres numéricos.
41
+ def nosso_numero=(valor)
42
+ @nosso_numero = valor.to_s.rjust(8, '0') if valor
43
+ end
44
+
45
+ # Dígito verificador do nosso número.
46
+ #
47
+ # @return [String] 1 caracteres numéricos.
48
+ def nosso_numero_dv
49
+ nosso_numero.modulo11(
50
+ reverse: false,
51
+ mapeamento: { 10 => 0, 11 => 1 }
52
+ ) { |total| 11 - (total % 11) }
53
+ end
54
+
55
+ # Nosso número para exibir no boleto.
56
+ # @return [String]
57
+ # @example
58
+ # boleto.nosso_numero_boleto #=> "175/12345678-4"
59
+ def nosso_numero_boleto
60
+ "#{nosso_numero}-#{nosso_numero_dv}"
61
+ end
62
+
63
+ # Agência + conta corrente do cliente para exibir no boleto.
64
+ # @return [String]
65
+ # @example
66
+ # boleto.agencia_conta_boleto #=> "08111 / 536788"
67
+ def agencia_conta_boleto
68
+ "#{agencia}#{agencia_dv} / #{conta_corrente}#{conta_corrente_dv}"
69
+ end
70
+
71
+ # Segunda parte do código de barras.
72
+ #
73
+ # ORMATAÇÃO DO CÓDIGO DE BARRAS - COBRANÇA REGISTRADA
74
+ # Campo
75
+ # Significado
76
+ #
77
+ # Formato
78
+ # Posições
79
+ # Conteúdo
80
+ # DE
81
+ #
82
+ # ATÉ
83
+ # Banco
84
+ # Banco Beneficiário do boleto
85
+ # 9 (03)
86
+ # 1
87
+ # 3
88
+ # 422
89
+ # Moeda
90
+ # Código da moeda
91
+ # 9 (01)
92
+ # 4
93
+ # 4
94
+ # 9 = real
95
+ # DAC
96
+ # DAC - Dígito de auto conferência
97
+ # 9 (01)
98
+ # 5
99
+ # 5
100
+ # Dígito de auto conferência
101
+ # Fator de Vencimento
102
+ # Data de vencimento do título
103
+ # 9(04)
104
+ # 6
105
+ # 9
106
+ # DV
107
+ # Valor
108
+ # Valor do boleto
109
+ # 9 (10)
110
+ # 10
111
+ # 19
112
+ # Valor do Boleto com zeros a esquerda
113
+ # Campo Livre
114
+ # Sistema
115
+ # 9 (01)
116
+ # 20
117
+ # 20
118
+ # 7 = Dígito do Bco Safra
119
+ # Campo Livre
120
+ # Agência
121
+ # 9 (05)
122
+ # 21
123
+ # 25
124
+ # (05) Agência do cliente Safra
125
+ # Campo Livre
126
+ # Cliente
127
+ # 9 (09)
128
+ # 26
129
+ # 34
130
+ # No da conta
131
+ # Campo Livre
132
+ # Nosso Número
133
+ # 9 (09)
134
+ # 35
135
+ # 43
136
+ # Nosso Número
137
+ # Campo Livre
138
+ # Tipo cobrança
139
+ # 9 (01)
140
+ #
141
+ # 44
142
+ # 44
143
+ #
144
+ # 2 = cobrança registrada
145
+ #
146
+ # @return [String] 25 caracteres numéricos.
147
+ def codigo_barras_segunda_parte
148
+ "7#{agencia}#{agencia_dv}#{conta_corrente}#{conta_corrente_dv}#{nosso_numero}#{nosso_numero_dv}2"
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # @author Kivanio Barbosa
5
+ # @author Ronaldo Araujo
6
+ module Brcobranca
7
+ module Boleto
8
+ # Banco Santander
9
+ class Santander < Base
10
+ validates_presence_of :convenio, message: 'não pode estar em branco.'
11
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
12
+ validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
13
+ validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
14
+
15
+ # Nova instancia do Santander
16
+ # @param (see Brcobranca::Boleto::Base#initialize)
17
+ def initialize(campos = {})
18
+ campos = { carteira: '102' }.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
+ '033'
27
+ end
28
+
29
+ # Número da conta corrente
30
+ # @return [String] 9 caracteres numéricos.
31
+ def conta_corrente=(valor)
32
+ @conta_corrente = valor.to_s.rjust(9, '0') if valor
33
+ end
34
+
35
+ # Número do convênio/contrato do cliente junto ao banco. No Santander, é
36
+ # chamado de Código do Cedente.
37
+ # @return [String] 7 caracteres numéricos.
38
+ def convenio=(valor)
39
+ @convenio = valor.to_s.rjust(7, '0') if valor
40
+ end
41
+
42
+ # Número sequencial utilizado para identificar o boleto.
43
+ # @return [String] 7 caracteres numéricos.
44
+ def nosso_numero=(valor)
45
+ @nosso_numero = valor.to_s.rjust(7, '0') if valor
46
+ end
47
+
48
+ # Dígito verificador do nosso número.
49
+ # @return [String] 1 caracteres numéricos.
50
+ def nosso_numero_dv
51
+ nosso_numero.modulo11(
52
+ multiplicador: (2..9).to_a,
53
+ mapeamento: { 10 => 0, 11 => 0 }
54
+ ) { |total| 11 - (total % 11) }
55
+ end
56
+
57
+ # Nosso número para exibir no boleto.
58
+ # @return [String]
59
+ # @example
60
+ # boleto.nosso_numero_boleto #=> "9000272-7"
61
+ def nosso_numero_boleto
62
+ "#{nosso_numero}-#{nosso_numero_dv}"
63
+ end
64
+
65
+ # Agência + codigo do cedente do cliente para exibir no boleto.
66
+ # @return [String]
67
+ # @example
68
+ # boleto.agencia_conta_boleto #=> "0059/1899775"
69
+ def agencia_conta_boleto
70
+ "#{agencia}/#{convenio}"
71
+ end
72
+
73
+ # Segunda parte do código de barras.
74
+ # 9(01) | Fixo 9 <br/>
75
+ # 9(07) | Convenio <br/>
76
+ # 9(13) | Nosso Numero Com DV<br/>
77
+ # 9(01) | IOF somente para seguradoras<br/> Fixo 9
78
+ # 9(03) | Carteira de cobrança<br/>
79
+ #
80
+ # @return [String] 25 caracteres numéricos.
81
+ def codigo_barras_segunda_parte
82
+ "9#{convenio}00000#{nosso_numero}#{nosso_numero_dv}0#{carteira}"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Boleto
5
+ # Sicoob (Bancoob)
6
+ class Sicoob < 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: 8, message: 'deve ser menor ou igual a 8 dígitos.'
9
+ validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
10
+ validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
11
+ validates_length_of :variacao, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
12
+ validates_length_of :quantidade, maximum: 3, message: 'deve ser menor ou igual a 3 dígitos.'
13
+
14
+ def initialize(campos = {})
15
+ campos = { carteira: '1', variacao: '01', quantidade: '001' }.merge!(campos)
16
+ super(campos)
17
+ end
18
+
19
+ # Codigo do banco emissor (3 dígitos sempre)
20
+ #
21
+ # @return [String] 3 caracteres numéricos.
22
+ def banco
23
+ '756'
24
+ end
25
+
26
+ # Dígito verificador do banco
27
+ #
28
+ # @return [String] 1 caractere.
29
+ def banco_dv
30
+ '0'
31
+ end
32
+
33
+ # Agência
34
+ #
35
+ # @return [String] 4 caracteres numéricos.
36
+ def agencia=(valor)
37
+ @agencia = valor.to_s.rjust(4, '0') if valor
38
+ end
39
+
40
+ # Convênio
41
+ #
42
+ # @return [String] 7 caracteres numéricos.
43
+ def convenio=(valor)
44
+ @convenio = valor.to_s.rjust(7, '0') if valor
45
+ end
46
+
47
+ # Número documento
48
+ #
49
+ # @return [String] 7 caracteres numéricos.
50
+ def nosso_numero=(valor)
51
+ @nosso_numero = valor.to_s.rjust(7, '0') if valor
52
+ end
53
+
54
+ # Quantidade
55
+ #
56
+ # @return [String] 3 caracteres numéricos.
57
+ def quantidade=(valor)
58
+ @quantidade = valor.to_s.rjust(3, '0') if valor
59
+ end
60
+
61
+ # Nosso número para exibição no boleto.
62
+ #
63
+ # @return [String] 8 caracteres numéricos.
64
+ def nosso_numero_boleto
65
+ "#{nosso_numero}#{nosso_numero_dv}"
66
+ end
67
+
68
+ # 3.13. Nosso número: Código de controle que permite ao Sicoob e à empresa identificar os dados da cobrança que deu origem ao boleto.
69
+ #
70
+ # Para o cálculo do dígito verificador do nosso número, deverá ser utilizada a fórmula abaixo:
71
+ # Número da Cooperativa 9(4) – vide planilha "Capa" deste arquivo
72
+ # Código do Cliente 9(10) – vide planilha "Capa" deste arquivo
73
+ # Nosso Número 9(7) – Iniciado em 1
74
+ #
75
+ # Constante para cálculo = 3197
76
+ #
77
+ # a) Concatenar na seqüência completando com zero à esquerda.
78
+ # Ex.:Número da Cooperativa = 0001
79
+ # Número do Cliente = 1-9
80
+ # Nosso Número = 21
81
+ # 000100000000190000021
82
+ #
83
+ # b) Alinhar a constante com a seqüência repetindo de traz para frente.
84
+ # Ex.: 000100000000190000021
85
+ # 319731973197319731973
86
+ #
87
+ # c) Multiplicar cada componente da seqüência com o seu correspondente da constante e somar os resultados.
88
+ # Ex.: 1*7 + 1*3 + 9*1 + 2*7 + 1*3 = 36
89
+ #
90
+ # d) Calcular o Resto através do Módulo 11.
91
+ # Ex.: 36/11 = 3, resto = 3
92
+ #
93
+ # e) O resto da divisão deverá ser subtraído de 11 achando assim o DV (Se o Resto for igual a 0 ou 1 então o DV é igual a 0).
94
+ # Ex.: 11 – 3 = 8, então Nosso Número + DV = 21-8
95
+ #
96
+ def nosso_numero_dv
97
+ "#{agencia}#{convenio.rjust(10, '0')}#{nosso_numero}".modulo11(
98
+ reverse: false,
99
+ multiplicador: [3, 1, 9, 7],
100
+ mapeamento: { 10 => 0, 11 => 0 }
101
+ ) { |t| 11 - (t % 11) }
102
+ end
103
+
104
+ def agencia_conta_boleto
105
+ "#{agencia} / #{convenio}"
106
+ end
107
+
108
+ # Posição Tamanho Conteúdo
109
+ # 20 a 20 01 Código da carteira de cobrança - vide planilha "Capa" deste arquivo
110
+ # 21 a 24 04 Código da agência/cooperativa - verificar na planilha "Capa" deste arquivo
111
+ # 25 a 26 02 Código da modalidade - verificar na planilha "Capa" deste arquivo
112
+ # 27 a 33 07 Código do cedente/cliente - verificar na planilha "Capa" deste arquivo
113
+ # 34 a 41 08 Nosso número do boleto
114
+ # 41 a 44 03 Número da parcela a que o boleto se refere - "001" se parcela única
115
+ def codigo_barras_segunda_parte
116
+ "#{carteira}#{agencia}#{variacao}#{convenio}#{nosso_numero_boleto}#{quantidade}"
117
+ end
118
+ end
119
+ end
120
+ end