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,307 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class BaseCorrespondente < Brcobranca::Remessa::Base
7
+ # convenio do cedente
8
+ attr_accessor :convenio
9
+ # mensagem 1
10
+ attr_accessor :mensagem_1
11
+ # mensagem 2
12
+ attr_accessor :mensagem_2
13
+ # codigo da carteira
14
+ # opcoes:
15
+ # 1 - cobranca simples
16
+ # 2 - cobranca caucionada
17
+ # 3 - cobranca descontada
18
+ # 7 – modalidade Simples quando carteira 17 (apenas Banco do Brasil)
19
+ attr_accessor :codigo_carteira
20
+ # forma de cadastramento dos titulos (campo nao tratado pelo Banco do Brasil)
21
+ # opcoes:
22
+ # 1 - com cadastramento (cobrança registrada)
23
+ # 2 - sem cadastramento (cobrança sem registro)
24
+ attr_accessor :forma_cadastramento
25
+ # identificacao da emissao do boleto (verificar opcoes nas classes referentes aos bancos)
26
+ attr_accessor :emissao_boleto
27
+ # identificacao da distribuicao do boleto (verificar opcoes nas classes referentes aos bancos)
28
+ attr_accessor :distribuicao_boleto
29
+ # especie do titulo (verificar o padrao nas classes referentes aos bancos)
30
+ attr_accessor :especie_titulo
31
+ # tipo de documento (verificar o padrao nas classes referentes aos bancos)
32
+ attr_accessor :tipo_documento
33
+
34
+ validates_presence_of :agencia, :conta_corrente, :documento_cedente, message: 'não pode estar em branco.'
35
+ validates_length_of :codigo_carteira, is: 1, message: 'deve ter 1 dígito.'
36
+ validates_length_of :forma_cadastramento, is: 1, message: 'deve ter 1 dígito.'
37
+ validates_length_of :emissao_boleto, is: 1, message: 'deve ter 1 dígito.'
38
+ validates_length_of :distribuicao_boleto, is: 1, message: 'deve ter 1 dígito.'
39
+
40
+ def initialize(campos = {})
41
+ campos = { codigo_carteira: '1',
42
+ forma_cadastramento: '1',
43
+ tipo_documento: ' ' }.merge!(campos)
44
+ super(campos)
45
+ end
46
+
47
+ # Data de geracao do arquivo
48
+ #
49
+ # @return [String]
50
+ #
51
+ def data_geracao
52
+ Date.current.strftime('%d%m%Y')
53
+ end
54
+
55
+ # Hora de geracao do arquivo
56
+ #
57
+ # @return [String]
58
+ #
59
+ def hora_geracao
60
+ (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
61
+ end
62
+
63
+ # Monta o registro header do arquivo
64
+ #
65
+ # @return [String]
66
+ #
67
+ def monta_header_arquivo
68
+ header_arquivo = '' # CAMPO TAMANHO
69
+ header_arquivo += cod_banco # codigo do banco 3
70
+ header_arquivo << '0000' # zeros 4
71
+ header_arquivo << '1' # registro header do lote 1
72
+ header_arquivo << 'R' # tipo operacao: R-remessa 1
73
+ header_arquivo << ''.rjust(7, '0') # zeros 7
74
+ header_arquivo << ''.rjust(2, ' ') # brancos 2
75
+ header_arquivo << info_conta # informacoes da conta 22
76
+ header_arquivo << ''.rjust(30, ' ') # brancos 30
77
+ header_arquivo << empresa_mae.format_size(30) # nome da empresa 30
78
+ header_arquivo << ''.rjust(80, ' ') # brancos 80
79
+ header_arquivo << sequencial_remessa.to_s.rjust(8, '0') # numero seq. arquivo 8
80
+ header_arquivo << data_geracao # data geracao 8
81
+ header_arquivo << complemento_header # complemento do arquivo 44
82
+ header_arquivo
83
+ end
84
+
85
+ # Monta o registro segmento P do arquivo
86
+ #
87
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
88
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
89
+ # @param sequencial [Integer]
90
+ # numero sequencial do registro no lote
91
+ #
92
+ # @return [String]
93
+ #
94
+ def monta_segmento_p(pagamento, sequencial)
95
+ # # DESCRICAO TAMANHO
96
+ segmento_p = ''.rjust(7, '0') # codigo banco 7
97
+ segmento_p += '3' # tipo de registro 1
98
+ segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
99
+ segmento_p << 'P' # cod. segmento 1
100
+ segmento_p << ' ' # uso exclusivo 1
101
+ segmento_p << '01' # cod. movimento remessa 2
102
+ segmento_p << ''.rjust(23, ' ') # brancos 23
103
+ segmento_p << formata_nosso_numero(pagamento.nosso_numero) # uso exclusivo 17
104
+ segmento_p << codigo_carteira # codigo da carteira 1
105
+ segmento_p << tipo_documento # tipo de documento 2
106
+ segmento_p << emissao_boleto # identificaco emissao 1
107
+ segmento_p << ' ' # branco 1
108
+ segmento_p << complemento_p(pagamento) # informacoes da conta 15
109
+ segmento_p << pagamento.data_vencimento.strftime('%d%m%Y') # data de venc. 8
110
+ segmento_p << pagamento.formata_valor(15) # valor documento 15
111
+ segmento_p << ''.rjust(6, '0') # zeros 6
112
+ segmento_p << aceite # aceite 1
113
+ segmento_p << ' ' # brancos 2
114
+ segmento_p << pagamento.data_emissao.strftime('%d%m%Y') # data de emissao titulo 8
115
+ segmento_p << '1' # tipo da mora 1
116
+ segmento_p << pagamento.formata_valor_mora(15).to_s # valor da mora 15
117
+ segmento_p << ''.rjust(9, '0') # zeros 9
118
+ segmento_p << pagamento.formata_data_desconto('%d%m%Y') # data desconto 8
119
+ segmento_p << pagamento.formata_valor_desconto(15) # valor desconto 15
120
+ segmento_p << ''.rjust(15, ' ') # filler 15
121
+ segmento_p << pagamento.formata_valor_abatimento(15) # valor abatimento 15
122
+ segmento_p << ''.rjust(25, ' ') # identificacao titulo empresa 25
123
+ segmento_p << codigo_protesto # cod. para protesto 1
124
+ segmento_p << '00' # dias para protesto 2
125
+ segmento_p << ''.rjust(4, '0') # zero 4
126
+ segmento_p << '09' # cod. da moeda 2
127
+ segmento_p << ''.rjust(10, '0') # uso exclusivo 10
128
+ segmento_p << '0' # zero 1
129
+ segmento_p
130
+ end
131
+
132
+ # Monta o registro segmento Q do arquivo
133
+ #
134
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
135
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
136
+ # @param sequencial [Integer]
137
+ # numero sequencial do registro no lote
138
+ #
139
+ # @return [String]
140
+ #
141
+ def monta_segmento_q(pagamento, sequencial)
142
+ segmento_q = '' # CAMPO TAMANHO
143
+ segmento_q += ''.rjust(7, '0') # zeros 3
144
+ segmento_q << '3' # registro detalhe 1
145
+ segmento_q << sequencial.to_s.rjust(5, '0') # lote de servico 5
146
+ segmento_q << 'Q' # cod. segmento 1
147
+ segmento_q << ' ' # brancos 1
148
+ segmento_q << '01' # cod. movimento remessa 2
149
+ segmento_q << identificacao_sacado(pagamento) # tipo insc. sacado 2
150
+ segmento_q << pagamento.documento_sacado.to_s.rjust(14, '0') # documento sacado 14
151
+ segmento_q << pagamento.nome_sacado.format_size(40) # nome cliente 40
152
+ segmento_q << pagamento.endereco_sacado.format_size(40) # endereco cliente 40
153
+ segmento_q << pagamento.bairro_sacado.format_size(15) # bairro 15
154
+ segmento_q << pagamento.cep_sacado[0..4] # cep 5
155
+ segmento_q << pagamento.cep_sacado[5..7] # sufixo cep 3
156
+ segmento_q << pagamento.cidade_sacado.format_size(15) # cidade 15
157
+ segmento_q << pagamento.uf_sacado # uf 2
158
+ segmento_q << identificacao_avalista(pagamento) # identificacao do sacador 2
159
+ segmento_q << pagamento.documento_avalista.to_s.rjust(14, '0') # documento sacador 15
160
+ segmento_q << pagamento.nome_avalista.format_size(40) # nome avalista 40
161
+ segmento_q << ''.rjust(31, ' ') # zeros 0
162
+ segmento_q
163
+ end
164
+
165
+ # Retorna o nosso numero
166
+ #
167
+ # @return [String]
168
+ #
169
+ def formata_nosso_numero(nosso_numero)
170
+ "#{convenio.to_s.rjust(10, '0')}#{nosso_numero.to_s.rjust(7, '0')}"
171
+ end
172
+
173
+ def identificacao_sacado(pagamento)
174
+ "0#{pagamento.identificacao_sacado(false)}"
175
+ end
176
+
177
+ def identificacao_avalista(pagamento)
178
+ "0#{pagamento.identificacao_avalista(false)}"
179
+ end
180
+
181
+ # Monta o registro trailer do arquivo
182
+ #
183
+ # @param nro_lotes [Integer]
184
+ # numero de lotes no arquivo
185
+ # @param sequencial [Integer]
186
+ # numero de registros(linhas) no arquivo
187
+ #
188
+ # @return [String]
189
+ #
190
+ def monta_trailer_arquivo(nro_lotes, sequencial)
191
+ # CAMPO TAMANHO
192
+ # codigo banco 3
193
+ # lote de servico 4
194
+ # tipo de registro 1
195
+ # uso FEBRABAN 9
196
+ # nro de lotes 6
197
+ # nro de registros(linhas) 6
198
+ # uso FEBRABAN 211
199
+ "#{cod_banco}99999#{''.rjust(9,
200
+ ' ')}#{nro_lotes.to_s.rjust(6,
201
+ '0')}#{sequencial.to_s.rjust(6,
202
+ '0')}#{''.rjust(211,
203
+ ' ')}"
204
+ end
205
+
206
+ # Monta um lote para o arquivo
207
+ #
208
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
209
+ # objeto contendo os detalhes do boleto (valor, )
210
+ #
211
+ # @param nro_lote [Integer]
212
+ # numero do lote no arquivo
213
+ #
214
+ # @return [Array]
215
+ #
216
+ def monta_lote(_nro_lote)
217
+ # contador dos registros do lote
218
+ contador = 1 # header
219
+
220
+ lote = []
221
+
222
+ pagamentos.each do |pagamento|
223
+ raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
224
+
225
+ lote << monta_segmento_p(pagamento, contador)
226
+ contador += 1
227
+ lote << monta_segmento_q(pagamento, contador)
228
+ contador += 1
229
+ end
230
+ contador += 1 # trailer
231
+
232
+ lote
233
+ end
234
+
235
+ # Gera o arquivo remessa
236
+ #
237
+ # @return [String]
238
+ #
239
+ def gera_arquivo
240
+ raise Brcobranca::RemessaInvalida, self if invalid?
241
+
242
+ arquivo = [monta_header_arquivo]
243
+
244
+ # contador de do lotes
245
+ contador = 1
246
+ arquivo.push monta_lote(contador)
247
+
248
+ arquivo << monta_trailer_arquivo(contador, ((pagamentos.size * 2) + (contador * 2) + 2))
249
+
250
+ arquivo.join("\r\n").remove_accents.upcase
251
+ end
252
+
253
+ # Complemento do registro
254
+ #
255
+ # Este metodo deve ser sobrescrevido na classe do banco
256
+ #
257
+ def complemento_header
258
+ raise Brcobranca::NaoImplementado,
259
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
260
+ end
261
+
262
+ # Informacoes do convenio para o lote
263
+ #
264
+ # Este metodo deve ser sobrescrevido na classe do banco
265
+ #
266
+ def convenio_lote
267
+ raise Brcobranca::NaoImplementado,
268
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
269
+ end
270
+
271
+ # Codigo do banco
272
+ #
273
+ # Este metodo deve ser sobrescrevido na classe do banco
274
+ #
275
+ def cod_banco
276
+ raise Brcobranca::NaoImplementado,
277
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
278
+ end
279
+
280
+ # Informacoes da conta do cedente
281
+ #
282
+ # Este metodo deve ser sobrescrevido na classe do banco
283
+ #
284
+ def info_conta
285
+ raise Brcobranca::NaoImplementado,
286
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
287
+ end
288
+
289
+ # Codigo do convenio
290
+ #
291
+ # Este metodo deve ser sobrescrevido na classe do banco
292
+ #
293
+ def codigo_convenio
294
+ raise Brcobranca::NaoImplementado,
295
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
296
+ end
297
+
298
+ # Codigo para protesto
299
+ #
300
+ # Sobreescreva caso necessário
301
+ def codigo_protesto
302
+ '0'
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
@@ -0,0 +1,171 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Caixa < Brcobranca::Remessa::Cnab240::Base
7
+ # digito da agencia
8
+ attr_accessor :digito_agencia
9
+ # versao do aplicativo da CAIXA
10
+ attr_accessor :versao_aplicativo
11
+ # modalidade da carteira
12
+ # opcoes:
13
+ # 11: título Registrado emissão CAIXA
14
+ # 14: título Registrado emissão Cedente
15
+ # 21: título Sem Registro emissão CAIXA
16
+ attr_accessor :modalidade_carteira
17
+
18
+ # identificacao da emissao do boleto (attr na classe base)
19
+ # opcoes:
20
+ # ‘1’ = Banco Emite
21
+ # ‘2’ = Cliente Emite ou para Bloqueto Pré-Impresso Registrado (entrega do bloqueto pelo Cedente)
22
+ # ‘4’ = Banco Reemite
23
+ # ‘5’ = Banco Não Reemite
24
+ #
25
+ # identificacao da distribuicao do boleto (attr na classe base)
26
+ # opcoes:
27
+ # ‘0’ = Postagem pelo Cedente
28
+ # ‘1’ = Sacado via Correios
29
+ # ‘2’ = Cedente via Agência CAIXA
30
+ # ‘3’ = Sacado via e-mail
31
+ # ‘4’ = Sacado via SMS
32
+
33
+ validates_presence_of :digito_agencia, :convenio, message: 'não pode estar em branco.'
34
+ validates_length_of :convenio, maximum: 6, message: 'deve ter 6 dígitos.'
35
+ validates_length_of :versao_aplicativo, maximum: 4, message: 'deve ter 4 dígitos.'
36
+ validates_length_of :digito_agencia, is: 1, message: 'deve ter 1 dígito.'
37
+ validates_length_of :modalidade_carteira, is: 2, message: 'deve ter 2 dígitos.'
38
+
39
+ def initialize(campos = {})
40
+ # Modalidade carteira: 14 (título Registrado emissão Cedente)
41
+ campos = { modalidade_carteira: '14',
42
+ emissao_boleto: '2',
43
+ codigo_baixa: '2',
44
+ dias_baixa: '000',
45
+ distribuicao_boleto: '0',
46
+ especie_titulo: '99' }.merge!(campos)
47
+ super(campos)
48
+ end
49
+
50
+ def convenio=(valor)
51
+ @convenio = valor.to_s.rjust(6, '0') if valor
52
+ end
53
+
54
+ def versao_aplicativo=(valor)
55
+ @versao_aplicativo = valor.to_s.rjust(4, '0') if valor
56
+ end
57
+
58
+ def cod_banco
59
+ '104'
60
+ end
61
+
62
+ def nome_banco
63
+ 'CAIXA ECONOMICA FEDERAL'.ljust(30, ' ')
64
+ end
65
+
66
+ def versao_layout_arquivo
67
+ '050'
68
+ end
69
+
70
+ def versao_layout_lote
71
+ '030'
72
+ end
73
+
74
+ def codigo_convenio
75
+ ''.rjust(20, '0')
76
+ end
77
+
78
+ def uso_exclusivo_banco
79
+ ''.rjust(20, ' ')
80
+ end
81
+
82
+ def uso_exclusivo_empresa
83
+ 'REMESSA-PRODUCAO'.ljust(20, ' ')
84
+ end
85
+
86
+ def convenio_lote
87
+ "#{convenio.rjust(6, '0')}#{''.rjust(14, '0')}"
88
+ end
89
+
90
+ def info_conta
91
+ # CAMPO # TAMANHO
92
+ # agencia 5
93
+ # digito agencia 1
94
+ # cod. convenio 6
95
+ # uso CAIXA 7
96
+ # uso CAIXA 1
97
+ "#{agencia.to_s.rjust(5, '0')}#{digito_agencia}#{convenio}#{''.rjust(7, '0')}0"
98
+ end
99
+
100
+ def complemento_header
101
+ versao = versao_aplicativo || ''
102
+ "#{versao.rjust(4, ' ')}#{''.rjust(25, ' ')}"
103
+ end
104
+
105
+ def exclusivo_servico
106
+ '00'
107
+ end
108
+
109
+ def complemento_trailer
110
+ "#{''.rjust(69, '0')}#{''.rjust(148, ' ')}"
111
+ end
112
+
113
+ def tipo_documento
114
+ '2'
115
+ end
116
+
117
+ def complemento_p(pagamento)
118
+ # CAMPO TAMANHO
119
+ # convenio 6
120
+ # uso CAIXA 11
121
+ # modalidade carteira 2
122
+ # ident. titulo 15
123
+ "#{convenio.rjust(6,
124
+ '0')}#{''.rjust(11,
125
+ '0')}#{modalidade_carteira}#{pagamento.nosso_numero.to_s.rjust(15, '0')}"
126
+ end
127
+
128
+ def complemento_r
129
+ segmento_r = ''
130
+ segmento_r += ''.rjust(50, ' ') # e-mail do sacado 50
131
+ segmento_r << ''.rjust(11, ' ') # exclusivo FEBRABAN 11
132
+ segmento_r
133
+ end
134
+
135
+ def numero(pagamento)
136
+ "#{pagamento.formata_documento_ou_numero(11, '0')}#{''.rjust(4, ' ')}"
137
+ end
138
+
139
+ def identificacao_titulo_empresa(pagamento)
140
+ "#{pagamento.formata_documento_ou_numero(11, '0')}#{''.rjust(14, ' ')}"
141
+ end
142
+
143
+ def data_multa(pagamento)
144
+ return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
145
+
146
+ data_multa = pagamento.data_vencimento + 1
147
+ data_multa.strftime('%d%m%Y')
148
+ end
149
+
150
+ def codigo_baixa(pagamento)
151
+ return '1' if pagamento.codigo_protesto.to_s == '3'
152
+
153
+ '2'
154
+ end
155
+
156
+ def dias_baixa(pagamento)
157
+ return '120' if pagamento.codigo_protesto.to_s == '3'
158
+
159
+ '000'
160
+ end
161
+
162
+ def data_mora(pagamento)
163
+ return ''.rjust(8, '0') unless %w[1 2].include? pagamento.tipo_mora
164
+
165
+ data_mora = pagamento.data_vencimento + 1
166
+ data_mora.strftime('%d%m%Y')
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end