brcobranca 8.0.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-gemset +1 -1
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +5 -3
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +2 -2
  7. data/README.md +24 -12
  8. data/brcobranca.gemspec +0 -2
  9. data/lib/brcobranca.rb +43 -26
  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/cecred.eps +427 -0
  13. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +427 -0
  14. data/lib/brcobranca/arquivos/logos/credisis.eps +5402 -0
  15. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +5410 -0
  16. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  17. data/lib/brcobranca/boleto/banco_brasil.rb +21 -21
  18. data/lib/brcobranca/boleto/banco_brasilia.rb +96 -0
  19. data/lib/brcobranca/boleto/banco_nordeste.rb +4 -6
  20. data/lib/brcobranca/boleto/banestes.rb +7 -7
  21. data/lib/brcobranca/boleto/banrisul.rb +5 -5
  22. data/lib/brcobranca/boleto/base.rb +28 -22
  23. data/lib/brcobranca/boleto/bradesco.rb +6 -6
  24. data/lib/brcobranca/boleto/caixa.rb +11 -18
  25. data/lib/brcobranca/boleto/cecred.rb +86 -0
  26. data/lib/brcobranca/boleto/credisis.rb +124 -0
  27. data/lib/brcobranca/boleto/hsbc.rb +10 -27
  28. data/lib/brcobranca/boleto/itau.rb +9 -10
  29. data/lib/brcobranca/boleto/santander.rb +5 -6
  30. data/lib/brcobranca/boleto/sicoob.rb +5 -5
  31. data/lib/brcobranca/boleto/sicredi.rb +7 -7
  32. data/lib/brcobranca/boleto/template/rghost.rb +127 -80
  33. data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
  34. data/lib/brcobranca/boleto/unicred.rb +126 -4
  35. data/lib/brcobranca/calculo_data.rb +3 -0
  36. data/lib/brcobranca/formatacao_string.rb +15 -5
  37. data/lib/brcobranca/remessa/base.rb +16 -9
  38. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -13
  39. data/lib/brcobranca/remessa/cnab240/base.rb +252 -119
  40. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  41. data/lib/brcobranca/remessa/cnab240/caixa.rb +61 -7
  42. data/lib/brcobranca/remessa/cnab240/cecred.rb +151 -0
  43. data/lib/brcobranca/remessa/cnab240/sicoob.rb +109 -123
  44. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  45. data/lib/brcobranca/remessa/cnab240/sicredi.rb +177 -0
  46. data/lib/brcobranca/remessa/cnab240/unicred.rb +9 -0
  47. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +14 -0
  48. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  49. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +4 -6
  50. data/lib/brcobranca/remessa/cnab400/banrisul.rb +155 -0
  51. data/lib/brcobranca/remessa/cnab400/base.rb +4 -4
  52. data/lib/brcobranca/remessa/cnab400/bradesco.rb +7 -8
  53. data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -4
  54. data/lib/brcobranca/remessa/cnab400/credisis.rb +128 -0
  55. data/lib/brcobranca/remessa/cnab400/itau.rb +23 -6
  56. data/lib/brcobranca/remessa/cnab400/santander.rb +80 -65
  57. data/lib/brcobranca/remessa/cnab400/sicoob.rb +2 -2
  58. data/lib/brcobranca/remessa/cnab400/unicred.rb +143 -0
  59. data/lib/brcobranca/remessa/pagamento.rb +50 -14
  60. data/lib/brcobranca/retorno/base.rb +4 -4
  61. data/lib/brcobranca/retorno/cnab240/base.rb +11 -8
  62. data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -0
  63. data/lib/brcobranca/retorno/cnab240/cecred.rb +102 -0
  64. data/lib/brcobranca/retorno/cnab240/santander.rb +35 -12
  65. data/lib/brcobranca/retorno/cnab240/sicoob.rb +8 -4
  66. data/lib/brcobranca/retorno/cnab240/sicredi.rb +79 -0
  67. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  68. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  69. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  70. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  71. data/lib/brcobranca/retorno/cnab400/base.rb +18 -7
  72. data/lib/brcobranca/retorno/cnab400/bradesco.rb +9 -3
  73. data/lib/brcobranca/retorno/cnab400/credisis.rb +115 -0
  74. data/lib/brcobranca/retorno/cnab400/itau.rb +10 -4
  75. data/lib/brcobranca/retorno/cnab400/santander.rb +57 -0
  76. data/lib/brcobranca/retorno/cnab400/unicred.rb +118 -0
  77. data/lib/brcobranca/retorno/retorno_cnab240.rb +7 -3
  78. data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -77
  79. data/lib/brcobranca/util/date.rb +20 -0
  80. data/lib/brcobranca/util/errors.rb +76 -0
  81. data/lib/brcobranca/validations.rb +232 -0
  82. data/lib/brcobranca/version.rb +1 -1
  83. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  84. data/spec/arquivos/CNAB240SANTANDER.RET +8 -26
  85. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  86. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  87. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  88. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  89. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  90. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  91. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  92. data/spec/brcobranca/base_spec.rb +6 -4
  93. data/spec/brcobranca/boleto/banco_brasil_spec.rb +22 -22
  94. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +134 -0
  95. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +19 -19
  96. data/spec/brcobranca/boleto/banestes_spec.rb +19 -19
  97. data/spec/brcobranca/boleto/banrisul_spec.rb +14 -14
  98. data/spec/brcobranca/boleto/bradesco_spec.rb +13 -13
  99. data/spec/brcobranca/boleto/caixa_spec.rb +7 -7
  100. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  101. data/spec/brcobranca/boleto/credisis_spec.rb +155 -0
  102. data/spec/brcobranca/boleto/hsbc_spec.rb +17 -37
  103. data/spec/brcobranca/boleto/itau_spec.rb +16 -16
  104. data/spec/brcobranca/boleto/santander_spec.rb +11 -11
  105. data/spec/brcobranca/boleto/sicoob_spec.rb +17 -17
  106. data/spec/brcobranca/boleto/sicredi_spec.rb +13 -13
  107. data/spec/brcobranca/boleto/unicred_spec.rb +10 -10
  108. data/spec/brcobranca/boletos_em_lote_spec.rb +1 -1
  109. data/spec/brcobranca/formatacao_string_spec.rb +1 -1
  110. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +10 -18
  111. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +39 -38
  112. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  113. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  114. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +58 -39
  115. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  116. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  117. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  118. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +4 -2
  119. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  120. data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -1
  121. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +16 -11
  122. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -11
  123. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  124. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +25 -12
  125. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +35 -36
  126. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +37 -0
  127. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  128. data/spec/brcobranca/remessa/pagamento_spec.rb +45 -27
  129. data/spec/brcobranca/retorno/cnab240/base_spec.rb +7 -8
  130. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  131. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +35 -18
  132. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +20 -19
  133. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  134. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  135. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  136. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  137. data/spec/brcobranca/retorno/cnab400/base_spec.rb +34 -13
  138. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +4 -4
  139. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  140. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -4
  141. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  142. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  143. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -1
  144. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -1
  145. data/spec/brcobranca/rghost_spec.rb +1 -1
  146. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +1 -1
  147. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  148. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +1 -1
  149. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +5 -4
  150. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +5 -4
  151. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  152. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +1 -1
  153. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +6 -5
  154. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  155. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +1 -1
  156. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  157. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +3 -2
  158. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +2 -2
  159. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  160. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  161. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  162. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  163. data/spec/support/shared_examples/busca_logotipo.rb +0 -2
  164. data/spec/support/shared_examples/cnab240.rb +92 -28
  165. data/spec/support/shared_examples/cnab400.rb +60 -14
  166. data/spec/support/shared_examples/formatos_validos.rb +6 -6
  167. metadata +103 -31
@@ -5,7 +5,7 @@ module Brcobranca
5
5
  class Sicoob < Base # Sicoob (Bancoob)
6
6
  validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
7
7
  validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
8
- validates_length_of :numero_documento, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
8
+ validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
9
9
  validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
10
10
  validates_length_of :variacao, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
11
11
  validates_length_of :quantidade, maximum: 3, message: 'deve ser menor ou igual a 3 dígitos.'
@@ -46,8 +46,8 @@ module Brcobranca
46
46
  # Número documento
47
47
  #
48
48
  # @return [String] 7 caracteres numéricos.
49
- def numero_documento=(valor)
50
- @numero_documento = valor.to_s.rjust(7, '0') if valor
49
+ def nosso_numero=(valor)
50
+ @nosso_numero = valor.to_s.rjust(7, '0') if valor
51
51
  end
52
52
 
53
53
  # Quantidade
@@ -61,7 +61,7 @@ module Brcobranca
61
61
  #
62
62
  # @return [String] 8 caracteres numéricos.
63
63
  def nosso_numero_boleto
64
- "#{numero_documento}#{nosso_numero_dv}"
64
+ "#{nosso_numero}#{nosso_numero_dv}"
65
65
  end
66
66
 
67
67
  # 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.
@@ -93,7 +93,7 @@ module Brcobranca
93
93
  # Ex.: 11 – 3 = 8, então Nosso Número + DV = 21-8
94
94
  #
95
95
  def nosso_numero_dv
96
- "#{agencia}#{convenio.rjust(10, '0')}#{numero_documento}".modulo11(
96
+ "#{agencia}#{convenio.rjust(10, '0')}#{nosso_numero}".modulo11(
97
97
  reverse: false,
98
98
  multiplicador: [3, 1, 9, 7],
99
99
  mapeamento: { 10 => 0, 11 => 0 }
@@ -14,7 +14,7 @@ module Brcobranca
14
14
  attr_accessor :byte_idt
15
15
 
16
16
  validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
17
- validates_length_of :numero_documento, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
17
+ validates_length_of :nosso_numero, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
18
18
  validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
19
19
  # Carteira
20
20
  # 1 – Com Registro
@@ -81,27 +81,27 @@ module Brcobranca
81
81
  # @example
82
82
  # boleto.nosso_numero_boleto #=> "14/200022-5"
83
83
  def nosso_numero_boleto
84
- "#{numero_documento_with_byte_idt[0..1]}/#{numero_documento_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
84
+ "#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
85
85
  end
86
86
 
87
87
  def nosso_numero_codigo_barra
88
88
  nosso_numero_boleto.gsub(/\D/, '')
89
89
  end
90
90
 
91
- def numero_documento_with_byte_idt
92
- "#{data_documento.strftime('%y')}#{byte_idt}#{numero_documento}"
91
+ def nosso_numero_with_byte_idt
92
+ "#{data_processamento.strftime('%y')}#{byte_idt}#{nosso_numero}"
93
93
  end
94
94
 
95
95
  # Número seqüencial utilizado para identificar o boleto.
96
96
  # @return [String] 5 caracteres numéricos.
97
- def numero_documento=(valor)
98
- @numero_documento = valor.to_s.rjust(5, '0') if valor
97
+ def nosso_numero=(valor)
98
+ @nosso_numero = valor.to_s.rjust(5, '0') if valor
99
99
  end
100
100
 
101
101
  # Dígito verificador do nosso número
102
102
  # @return [Integer] 1 caracteres numéricos.
103
103
  def nosso_numero_dv
104
- "#{agencia_posto_conta}#{numero_documento_with_byte_idt}"
104
+ "#{agencia_posto_conta}#{nosso_numero_with_byte_idt}"
105
105
  .modulo11(mapeamento: mapeamento_para_modulo_11)
106
106
  end
107
107
 
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
- #
3
2
 
4
3
  begin
5
4
  require 'rghost'
@@ -80,7 +79,7 @@ module Brcobranca
80
79
  modelo_generico_rodape(doc, boleto)
81
80
 
82
81
  # Gerando codigo de barra com rghost_barcode
83
- doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: '0.7 cm', y: '5.8 cm') if boleto.codigo_barras
82
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm", y: "#{@y - 1.67} cm") if boleto.codigo_barras
84
83
 
85
84
  # Gerando stream
86
85
  formato = (options.delete(:formato) || Brcobranca.configuration.formato)
@@ -108,7 +107,8 @@ module Brcobranca
108
107
  modelo_generico_rodape(doc, boleto)
109
108
 
110
109
  # Gerando codigo de barra com rghost_barcode
111
- doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: '0.7 cm', y: '5.8 cm') if boleto.codigo_barras
110
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm", y: "#{@y - 1.67} cm") if boleto.codigo_barras
111
+
112
112
  # Cria nova página se não for o último boleto
113
113
  doc.next_page unless index == boletos.length - 1
114
114
  end
@@ -120,127 +120,174 @@ module Brcobranca
120
120
 
121
121
  # Define o template a ser usado no boleto
122
122
  def modelo_generico_template(doc, _boleto, template_path)
123
- doc.define_template(:template, template_path, x: '0.3 cm', y: '0 cm')
123
+ doc.define_template(:template, template_path, x: '0.5 cm', y: '2.7 cm')
124
124
  doc.use_template :template
125
125
 
126
126
  doc.define_tags do
127
127
  tag :grande, size: 13
128
+ tag :maior, size: 15
128
129
  end
129
130
  end
130
131
 
132
+ def move_more(doc, x, y)
133
+ @x += x
134
+ @y += y
135
+ doc.moveto x: "#{@x} cm", y: "#{@y} cm"
136
+ end
131
137
  # Monta o cabeçalho do layout do boleto
132
138
  def modelo_generico_cabecalho(doc, boleto)
133
139
  # INICIO Primeira parte do BOLETO
140
+ # Pontos iniciais em x e y
141
+ @x = 0.50
142
+ @y = 27.42
134
143
  # LOGOTIPO do BANCO
135
- doc.image boleto.logotipo, x: '0.36 cm', y: '23.87 cm'
144
+ doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
136
145
  # Dados
137
- doc.moveto x: '5.2 cm', y: '23.9 cm'
138
- doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
139
- doc.moveto x: '7.5 cm', y: '23.9 cm'
146
+
147
+ move_more(doc, 4.84, 0.02)
148
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
149
+ move_more(doc, 2, 0)
140
150
  doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
141
- doc.moveto x: '0.7 cm', y: '23.0 cm'
151
+ move_more(doc, -6.5, -0.83)
152
+
142
153
  doc.show boleto.cedente
143
- doc.moveto x: '11 cm', y: '23 cm'
154
+
155
+ move_more(doc, 15.8, 0)
144
156
  doc.show boleto.agencia_conta_boleto
145
- doc.moveto x: '14.2 cm', y: '23 cm'
157
+
158
+ move_more(doc, -15.8, -0.9)
159
+ doc.show boleto.cedente_endereco
160
+
161
+ move_more(doc, 15.8, 0)
162
+ doc.show boleto.nosso_numero_boleto
163
+
164
+ move_more(doc, -15.8, -0.8)
165
+ doc.show boleto.documento_numero
166
+
167
+ move_more(doc, 3.5, 0)
146
168
  doc.show boleto.especie
147
- doc.moveto x: '15.7 cm', y: '23 cm'
169
+
170
+ move_more(doc, 1.5, 0)
148
171
  doc.show boleto.quantidade
149
- doc.moveto x: '0.7 cm', y: '22.2 cm'
150
- doc.show boleto.numero_documento
151
- doc.moveto x: '7 cm', y: '22.2 cm'
152
- doc.show boleto.documento_cedente.formata_documento.to_s
153
- doc.moveto x: '12 cm', y: '22.2 cm'
172
+
173
+ move_more(doc, 2, 0)
174
+ doc.show "#{boleto.documento_cedente.formata_documento}"
175
+
176
+ move_more(doc, 3.8, 0)
154
177
  doc.show boleto.data_vencimento.to_s_br
155
- doc.moveto x: '20.3 cm', y: '23 cm'
156
- doc.show boleto.nosso_numero_boleto, align: :show_right
157
- doc.moveto x: '20.3 cm', y: '22.2 cm'
158
- doc.show boleto.valor_documento.to_currency, align: :show_right
159
- doc.moveto x: '1.5 cm', y: '20.9 cm'
178
+
179
+ move_more(doc, 5, 0)
180
+ doc.show boleto.valor_documento.to_currency
181
+
182
+ move_more(doc, -15, -1.3)
160
183
  doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
161
- doc.moveto x: '1.5 cm', y: '20.6 cm'
162
- doc.show boleto.sacado_endereco.to_s
163
- doc.moveto x: '0.7 cm', y: '19.8 cm'
164
- doc.show boleto.demonstrativo1
165
- doc.moveto x: '0.7 cm', y: '19.4 cm'
166
- doc.show boleto.demonstrativo2
167
- doc.moveto x: '0.7 cm', y: '19.0 cm'
168
- doc.show boleto.demonstrativo3
184
+
185
+ move_more(doc, 0, -0.3)
186
+ doc.show "#{boleto.sacado_endereco}"
187
+ if boleto.demonstrativo
188
+ doc.text_area boleto.demonstrativo, width: '18.5 cm', text_align: :left, x: "#{@x - 0.8} cm", y: "#{@y - 0.9} cm", row_height: '0.4 cm'
189
+ end
169
190
  # FIM Primeira parte do BOLETO
170
191
  end
171
192
 
172
193
  # Monta o corpo e rodapé do layout do boleto
173
194
  def modelo_generico_rodape(doc, boleto)
174
195
  # INICIO Segunda parte do BOLETO BB
196
+ # Pontos iniciais em x e y
197
+ @x = 0.50
198
+ @y = 12.22
175
199
  # LOGOTIPO do BANCO
176
- doc.image boleto.logotipo, x: '0.36 cm', y: '16.83 cm'
177
- doc.moveto x: '5.2 cm', y: '16.9 cm'
178
- doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
179
- doc.moveto x: '7.5 cm', y: '16.9 cm'
200
+ doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
201
+
202
+ move_more(doc, 4.84, 0.01)
203
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
204
+
205
+ move_more(doc, 2, 0)
180
206
  doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
181
- doc.moveto x: '0.7 cm', y: '16 cm'
207
+
208
+ move_more(doc, -6.5, -0.9)
182
209
  doc.show boleto.local_pagamento
183
- doc.moveto x: '20.3 cm', y: '16 cm'
184
- doc.show boleto.data_vencimento.to_s_br, align: :show_right if boleto.data_vencimento
185
- doc.moveto x: '0.7 cm', y: '15.2 cm'
210
+
211
+ move_more(doc, 15.8, 0)
212
+ doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
213
+
214
+ move_more(doc, -15.8, -0.8)
186
215
  if boleto.cedente_endereco
187
216
  doc.show boleto.cedente_endereco
188
- doc.moveto x: '1.9 cm', y: '15.5 cm'
217
+ move_more(doc, 1.2, 0.3)
189
218
  doc.show boleto.cedente
219
+ move_more(doc, -1.2, -0.3)
190
220
  else
191
221
  doc.show boleto.cedente
192
222
  end
193
- doc.moveto x: '20.3 cm', y: '15.2 cm'
194
- doc.show boleto.agencia_conta_boleto, align: :show_right
195
- doc.moveto x: '0.7 cm', y: '14.4 cm'
223
+
224
+ move_more(doc, 15.8, 0)
225
+ doc.show boleto.agencia_conta_boleto
226
+
227
+ move_more(doc, -15.8 , -0.9)
196
228
  doc.show boleto.data_documento.to_s_br if boleto.data_documento
197
- doc.moveto x: '4.2 cm', y: '14.4 cm'
198
- doc.show boleto.numero_documento
199
- doc.moveto x: '10 cm', y: '14.4 cm'
229
+
230
+ move_more(doc, 3.5, 0)
231
+ doc.show boleto.documento_numero
232
+
233
+ move_more(doc, 5.8, 0)
200
234
  doc.show boleto.especie_documento
201
- doc.moveto x: '11.7 cm', y: '14.4 cm'
235
+
236
+ move_more(doc, 1.7, 0)
202
237
  doc.show boleto.aceite
203
- doc.moveto x: '13 cm', y: '14.4 cm'
238
+
239
+ move_more(doc, 1.3, 0)
240
+
204
241
  doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
205
- doc.moveto x: '20.3 cm', y: '14.4 cm'
206
- doc.show boleto.nosso_numero_boleto, align: :show_right
207
- doc.moveto x: '4.4 cm', y: '13.5 cm'
208
- if boleto.carteira_label
209
- doc.show boleto.carteira_label
242
+
243
+ move_more(doc, 3.5, 0)
244
+ doc.show boleto.nosso_numero_boleto
245
+
246
+ move_more(doc, -12.1, -0.8)
247
+ if boleto.variacao
248
+ doc.show "#{boleto.carteira}-#{boleto.variacao}"
210
249
  else
211
- if boleto.variacao
212
- doc.show "#{boleto.carteira}-#{boleto.variacao}"
213
- else
214
- doc.show boleto.carteira
215
- end
250
+ doc.show boleto.carteira
216
251
  end
217
- doc.moveto x: '6.4 cm', y: '13.5 cm'
252
+
253
+ move_more(doc, 2, 0)
218
254
  doc.show boleto.especie
219
- # doc.moveto x: '8 cm', y: '13.5 cm'
220
- # doc.show boleto.quantidade
221
- # doc.moveto :x => '11 cm' , :y => '13.5 cm'
222
- # doc.show boleto.valor.to_currency
223
- doc.moveto x: '20.3 cm', y: '13.5 cm'
224
- doc.show boleto.valor_documento.to_currency, align: :show_right
225
- doc.moveto x: '0.7 cm', y: '12.7 cm'
226
- doc.show boleto.instrucao1
227
- doc.moveto x: '0.7 cm', y: '12.3 cm'
228
- doc.show boleto.instrucao2
229
- doc.moveto x: '0.7 cm', y: '11.9 cm'
230
- doc.show boleto.instrucao3
231
- doc.moveto x: '0.7 cm', y: '11.5 cm'
232
- doc.show boleto.instrucao4
233
- doc.moveto x: '0.7 cm', y: '11.1 cm'
234
- doc.show boleto.instrucao5
235
- doc.moveto x: '0.7 cm', y: '10.7 cm'
236
- doc.show boleto.instrucao6
237
- doc.moveto x: '1.2 cm', y: '8.8 cm'
255
+
256
+ move_more(doc, 10.1, 0)
257
+ doc.show boleto.valor_documento.to_currency
258
+
259
+ if boleto.instrucoes
260
+ doc.text_area boleto.instrucoes, width: '14 cm', text_align: :left, x: "#{@x -= 15.8} cm", y: "#{@y -= 0.9} cm", row_height: '0.4 cm'
261
+ move_more(doc, 0, -2)
262
+ else
263
+ move_more(doc, -15.8, -0.9)
264
+ doc.show boleto.instrucao1
265
+
266
+ move_more(doc, 0, -0.4)
267
+ doc.show boleto.instrucao2
268
+
269
+ move_more(doc, 0, -0.4)
270
+ doc.show boleto.instrucao3
271
+
272
+ move_more(doc, 0, -0.4)
273
+ doc.show boleto.instrucao4
274
+
275
+ move_more(doc, 0, -0.4)
276
+ doc.show boleto.instrucao5
277
+
278
+ move_more(doc, 0, -0.4)
279
+ doc.show boleto.instrucao6
280
+ end
281
+
282
+
283
+ move_more(doc, 0.5, -1.9)
238
284
  doc.show "#{boleto.sacado} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
239
- doc.moveto x: '1.2 cm', y: '8.4 cm'
240
- doc.show boleto.sacado_endereco.to_s
241
285
 
286
+ move_more(doc, 0, -0.4)
287
+ doc.show "#{boleto.sacado_endereco}"
288
+
289
+ move_more(doc, 1.2, -0.93)
242
290
  if boleto.avalista && boleto.avalista_documento
243
- doc.moveto x: '2.4 cm', y: '7.47 cm'
244
291
  doc.show "#{boleto.avalista} - #{boleto.avalista_documento}"
245
292
  end
246
293
  # FIM Segunda parte do BOLETO
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
- #
3
2
 
4
3
  begin
5
4
  require 'rghost'
@@ -117,11 +116,12 @@ module Brcobranca
117
116
  modelo_carne_build_data_left(doc, boleto, colunas, linhas)
118
117
  modelo_carne_build_data_right(doc, boleto, colunas, linhas)
119
118
 
120
- next unless curr_page_position >= max_per_page # maximo 3 boletos por pagina
121
- # Cria nova página se não for o último boleto
122
- doc.next_page unless index == boletos.length - 1
119
+ if curr_page_position >= max_per_page # maximo 3 boletos por pagina
120
+ # Cria nova página se não for o último boleto
121
+ doc.next_page unless index == boletos.length - 1
123
122
 
124
- curr_page_position = 0 # reinicia contador por página
123
+ curr_page_position = 0 # reinicia contador por página
124
+ end
125
125
  end
126
126
 
127
127
  # Gerando stream
@@ -198,11 +198,11 @@ module Brcobranca
198
198
 
199
199
  # numero documento
200
200
  doc.moveto x: colunas[0], y: linhas[11]
201
- doc.show boleto.numero_documento
201
+ doc.show boleto.documento_numero
202
202
 
203
203
  # sacado
204
204
  doc.moveto x: colunas[0], y: linhas[13]
205
- doc.show boleto.sacado.to_s
205
+ doc.show "#{boleto.sacado}"
206
206
  end
207
207
 
208
208
  # aplica dados do lado direito
@@ -240,7 +240,7 @@ module Brcobranca
240
240
 
241
241
  # numero documento
242
242
  doc.moveto x: colunas[3], y: linhas[3]
243
- doc.show boleto.numero_documento
243
+ doc.show boleto.documento_numero
244
244
 
245
245
  # especie doc.
246
246
  doc.moveto x: colunas[8], y: linhas[3]
@@ -301,7 +301,7 @@ module Brcobranca
301
301
 
302
302
  # Sacado endereço
303
303
  doc.moveto x: colunas[2], y: linhas[12]
304
- doc.show boleto.sacado_endereco.to_s
304
+ doc.show "#{boleto.sacado_endereco}"
305
305
 
306
306
  # codigo de barras
307
307
  # Gerando codigo de barra com rghost_barcode
@@ -2,18 +2,140 @@
2
2
  #
3
3
  module Brcobranca
4
4
  module Boleto
5
- class Unicred < Brcobranca::Boleto::Sicredi
5
+ class Unicred < Base # Banco Unicred
6
+ # <b>REQUERIDO</b>: Código do posto da cooperativa de crédito
7
+ attr_accessor :posto
8
+
9
+ # <b>REQUERIDO</b>: Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
10
+ attr_accessor :byte_idt
11
+
12
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
13
+ validates_length_of :nosso_numero, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
14
+ validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
15
+ # Carteira
16
+ # 1 – Com Registro
17
+ # 3 – Sem Registro
18
+ # Obs.: O Unicred não validará este campo.
19
+ validates_length_of :carteira, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
20
+ validates_length_of :posto, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
21
+ validates_length_of :byte_idt, is: 1, message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
22
+ validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
23
+
6
24
  # Nova instancia do Unicred
7
25
  # @param (see Brcobranca::Boleto::Base#initialize)
8
26
  def initialize(campos = {})
9
- campos = {
10
- carteira: '3',
27
+ campos = { carteira: '3',
11
28
  especie_documento: 'DM',
12
29
  local_pagamento: 'PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DA UNICRED'
13
30
  }.merge!(campos)
14
-
15
31
  super(campos)
16
32
  end
33
+
34
+ # Codigo do banco emissor (3 dígitos sempre)
35
+ #
36
+ # @return [String] 3 caracteres numéricos.
37
+ def banco
38
+ '748'
39
+ end
40
+
41
+ # Carteira
42
+ #
43
+ # @return [String] 2 caracteres numéricos.
44
+ def carteira=(valor)
45
+ @carteira = valor.to_s.rjust(1, '0') if valor
46
+ end
47
+
48
+ # Posto
49
+ #
50
+ # @return [String] 2 caracteres numéricos.
51
+ def posto=(valor)
52
+ @posto = valor.to_s.rjust(2, '0') if valor
53
+ end
54
+
55
+ # Número da conta corrente
56
+ # @return [String] 5 caracteres numéricos.
57
+ def conta_corrente=(valor)
58
+ @conta_corrente = valor.to_s.rjust(5, '0') if valor
59
+ end
60
+
61
+ # Código Beneficiário
62
+ # @return [String] 5 caracteres numéricos.
63
+ def convenio=(valor)
64
+ @convenio = valor.to_s.rjust(5, '0') if valor
65
+ end
66
+
67
+ # Dígito verificador do banco
68
+ # @return [String] 1 caractere.
69
+ def banco_dv
70
+ 'X'
71
+ end
72
+
73
+ # Nosso número para exibir no boleto.
74
+ # O campo Nosso Número deve ser apresentado no formato AA/BXXXXX-D, onde:
75
+ # AA = Ano atual
76
+ # B = Byte que pode ser de 2 a 9. Somente será 1 se forem boletos pré-impressos.
77
+ # XXXXX = número sequencial
78
+ # D = dígito verificador calculado
79
+ # @return [String]
80
+ # @example
81
+ # boleto.nosso_numero_boleto #=> "14/200022-5"
82
+ def nosso_numero_boleto
83
+ "#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
84
+ end
85
+
86
+ def nosso_numero_codigo_barra
87
+ nosso_numero_boleto.gsub(/\D/, '')
88
+ end
89
+
90
+ def nosso_numero_with_byte_idt
91
+ "#{data_processamento.strftime('%y')}#{byte_idt}#{nosso_numero}"
92
+ end
93
+
94
+ # Número seqüencial utilizado para identificar o boleto.
95
+ # @return [String] 5 caracteres numéricos.
96
+ def nosso_numero=(valor)
97
+ @nosso_numero = valor.to_s.rjust(5, '0') if valor
98
+ end
99
+
100
+ # Dígito verificador do nosso número
101
+ # @return [Integer] 1 caracteres numéricos.
102
+ def nosso_numero_dv
103
+ "#{agencia_posto_conta}#{nosso_numero_with_byte_idt}"
104
+ .modulo11(mapeamento: mapeamento_para_modulo_11)
105
+ end
106
+
107
+ def agencia_conta_boleto
108
+ "#{agencia}.#{posto}.#{convenio}"
109
+ end
110
+
111
+ def agencia_posto_conta
112
+ "#{agencia}#{posto}#{convenio}"
113
+ end
114
+
115
+ # Segunda parte do código de barras.
116
+ # Posição Tamanho Conteúdo
117
+ # 20 – 20 01 Código numérico correspondente ao tipo de cobrança: “1” – Com Registro “3 – Sem Registro”. Obs.: O SICREDI não validará este campo.
118
+ # 21 – 21 01 Código numérico correspondente ao tipo de carteira: “1” - carteira simples
119
+ # 22 – 30 09 Nosso número
120
+ # 31 – 34 # 04 # Cooperativa de crédito/agência beneficiária
121
+ # 35 – 36 # 02 # Posto da cooperativa de crédito/agência beneficiária
122
+ # 37 – 41 # 05 # Código do beneficiário
123
+ # 42 – 42 # 01 # Será 1 (um) quando houver valor expresso no campo “valor do documento”
124
+ # 43 – 43 # 01 # Filler – zeros “0”
125
+ # 44 – 44 # 01 # DV do campo livre calculado por módulo 11 com aproveitamento total (resto igual a 0 ou 1 DV cai para 0)
126
+ def codigo_barras_segunda_parte
127
+ campo_livre = "#{carteira}1#{nosso_numero_codigo_barra}#{agencia_posto_conta}10"
128
+ campo_livre + campo_livre.modulo11(mapeamento: mapeamento_para_modulo_11).to_s
129
+ end
130
+
131
+ private
132
+
133
+ def mapeamento_para_modulo_11
134
+ {
135
+ 10 => 0,
136
+ 11 => 0
137
+ }
138
+ end
17
139
  end
18
140
  end
19
141
  end