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,529 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Base < 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
+ # codigo_baixa (verificar o padrao nas classes referentes aos bancos)
34
+ attr_accessor :codigo_baixa
35
+ # dias_baixa (verificar o padrao nas classes referentes aos bancos)
36
+ attr_accessor :dias_baixa
37
+
38
+ validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
39
+ validates_presence_of :documento_cedente, message: 'não pode estar em branco.'
40
+ validates_length_of :codigo_carteira, is: 1, message: 'deve ter 1 dígito.'
41
+ validates_length_of :forma_cadastramento, is: 1, message: 'deve ter 1 dígito.'
42
+ validates_length_of :emissao_boleto, is: 1, message: 'deve ter 1 dígito.'
43
+ validates_length_of :distribuicao_boleto, is: 1, message: 'deve ter 1 dígito.'
44
+
45
+ def initialize(campos = {})
46
+ campos = {
47
+ codigo_carteira: '1',
48
+ forma_cadastramento: '1',
49
+ tipo_documento: ' '
50
+ }.merge!(campos)
51
+ super(campos)
52
+ end
53
+
54
+ # Data de geracao do arquivo
55
+ #
56
+ # @return [String]
57
+ #
58
+ def data_geracao
59
+ Date.current.strftime('%d%m%Y')
60
+ end
61
+
62
+ # Hora de geracao do arquivo
63
+ #
64
+ # @return [String]
65
+ #
66
+ def hora_geracao
67
+ Time.current.strftime('%H%M%S')
68
+ end
69
+
70
+ # Monta o registro header do arquivo
71
+ #
72
+ # @return [String]
73
+ #
74
+ def monta_header_arquivo
75
+ header_arquivo = '' # CAMPO TAMANHO
76
+ header_arquivo += cod_banco # codigo do banco 3
77
+ header_arquivo << '0000' # lote do servico 4
78
+ header_arquivo << '0' # tipo de registro 1
79
+ header_arquivo << ''.rjust(9, ' ') # uso exclusivo FEBRABAN 9
80
+ header_arquivo << Brcobranca::Util::Empresa.new(documento_cedente, false).tipo # tipo inscricao 1
81
+ header_arquivo << documento_cedente.to_s.rjust(14, '0') # numero de inscricao 14
82
+ header_arquivo << codigo_convenio # codigo do convenio no banco 20
83
+ header_arquivo << info_conta # informacoes da conta 20
84
+ header_arquivo << empresa_mae.format_size(30) # nome da empresa 30
85
+ header_arquivo << nome_banco.format_size(30) # nome do banco 30
86
+ header_arquivo << ''.rjust(10, ' ') # uso exclusivo FEBRABAN 10
87
+ header_arquivo << '1' # codigo remessa 1
88
+ header_arquivo << data_geracao # data geracao 8
89
+ header_arquivo << hora_geracao # hora geracao 6
90
+ header_arquivo << sequencial_remessa.to_s.rjust(6, '0') # numero seq. arquivo 6
91
+ header_arquivo << versao_layout_arquivo # num. versao arquivo 3
92
+ header_arquivo << densidade_gravacao # densidade gravacao 5
93
+ header_arquivo << uso_exclusivo_banco # uso exclusivo 20
94
+ header_arquivo << uso_exclusivo_empresa # uso exclusivo 20
95
+ header_arquivo << complemento_header # complemento do arquivo 29
96
+ header_arquivo
97
+ end
98
+
99
+ # Monta o registro header do lote
100
+ #
101
+ # @param nro_lote [Integer]
102
+ # numero do lote no arquivo (iterar a cada novo lote)
103
+ #
104
+ # @return [String]
105
+ #
106
+ def monta_header_lote(nro_lote)
107
+ header_lote = '' # CAMPO TAMANHO
108
+ header_lote += cod_banco # codigo banco 3
109
+ header_lote << nro_lote.to_s.rjust(4, '0') # lote servico 4
110
+ header_lote << '1' # tipo de registro 1
111
+ header_lote << 'R' # tipo de operacao 1
112
+ header_lote << '01' # tipo de servico 2
113
+ header_lote << exclusivo_servico # uso exclusivo 2
114
+ header_lote << versao_layout_lote # num.versao layout lote 3
115
+ header_lote << ' ' # uso exclusivo 1
116
+ header_lote << Brcobranca::Util::Empresa.new(documento_cedente, false).tipo # tipo de inscricao 1
117
+ header_lote << documento_cedente.to_s.rjust(15, '0') # inscricao cedente 15
118
+ header_lote << convenio_lote # codigo do convenio 20
119
+ header_lote << info_conta # informacoes conta 20
120
+ header_lote << empresa_mae.format_size(30) # nome empresa 30
121
+ header_lote << mensagem_1.to_s.format_size(40) # 1a mensagem 40
122
+ header_lote << mensagem_2.to_s.format_size(40) # 2a mensagem 40
123
+ header_lote << sequencial_remessa.to_s.rjust(8, '0') # numero remessa 8
124
+ header_lote << data_geracao # data gravacao 8
125
+ header_lote << ''.rjust(8, '0') # data do credito 8
126
+ header_lote << ''.rjust(33, ' ') # complemento 33
127
+ header_lote
128
+ end
129
+
130
+ # Monta o registro segmento P do arquivo
131
+ #
132
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
133
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
134
+ # @param nro_lote [Integer]
135
+ # numero do lote que o segmento esta inserido
136
+ # @param sequencial [Integer]
137
+ # numero sequencial do registro no lote
138
+ #
139
+ # @return [String]
140
+ #
141
+ def monta_segmento_p(pagamento, nro_lote, sequencial)
142
+ segmento_p = ''
143
+ # # DESCRICAO TAMANHO
144
+ segmento_p += cod_banco # codigo banco 3
145
+ segmento_p << nro_lote.to_s.rjust(4, '0') # lote de servico 4
146
+ segmento_p << '3' # tipo de registro 1
147
+ segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
148
+ segmento_p << 'P' # cod. segmento 1
149
+ segmento_p << ' ' # uso exclusivo 1
150
+ segmento_p << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
151
+ segmento_p << agencia.to_s.rjust(5, '0') # agencia 5
152
+ segmento_p << digito_agencia.to_s # dv agencia 1
153
+ segmento_p << complemento_p(pagamento) # informacoes da conta 34
154
+ segmento_p << codigo_carteira # codigo da carteira 1
155
+ segmento_p << forma_cadastramento # forma de cadastro do titulo 1
156
+ segmento_p << tipo_documento # tipo de documento 1
157
+ segmento_p << emissao_boleto # identificaco emissao 1
158
+ segmento_p << distribuicao_boleto # indentificacao entrega 1
159
+ segmento_p << numero(pagamento) # uso exclusivo 4
160
+ segmento_p << pagamento.data_vencimento.strftime('%d%m%Y') # data de venc. 8
161
+ segmento_p << pagamento.formata_valor(15) # valor documento 15
162
+ segmento_p << ''.rjust(5, '0') # agencia cobradora 5
163
+ segmento_p << dv_agencia_cobradora # dv agencia cobradora 1
164
+ segmento_p << especie_titulo # especie do titulo 2
165
+ segmento_p << aceite # aceite 1
166
+ segmento_p << pagamento.data_emissao.strftime('%d%m%Y') # data de emissao titulo 8
167
+ segmento_p << pagamento.tipo_mora # cod. do mora 1
168
+ segmento_p << data_mora(pagamento) # data mora 8
169
+ segmento_p << pagamento.formata_valor_mora(15) # valor mora 15
170
+ segmento_p << codigo_desconto(pagamento) # cod. do desconto 1
171
+ segmento_p << pagamento.formata_data_desconto('%d%m%Y') # data desconto 8
172
+ segmento_p << pagamento.formata_valor_desconto(15) # valor desconto 15
173
+ segmento_p << pagamento.formata_valor_iof(15) # valor IOF 15
174
+ segmento_p << pagamento.formata_valor_abatimento(15) # valor abatimento 15
175
+ segmento_p << identificacao_titulo_empresa(pagamento) # identificacao titulo empresa 25
176
+ segmento_p << pagamento.codigo_protesto # cod. para protesto 1
177
+ segmento_p << pagamento.dias_protesto.to_s.rjust(2, '0') # dias para protesto 2
178
+ segmento_p << codigo_baixa(pagamento) # cod. para baixa 1
179
+ segmento_p << dias_baixa(pagamento) # dias para baixa 2
180
+ segmento_p << '09' # cod. da moeda 2
181
+ segmento_p << ''.rjust(10, '0') # uso exclusivo 10
182
+ segmento_p << ' ' # uso exclusivo 1
183
+ segmento_p
184
+ end
185
+
186
+ # Monta o registro segmento Q do arquivo
187
+ #
188
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
189
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
190
+ # @param nro_lote [Integer]
191
+ # numero do lote que o segmento esta inserido
192
+ # @param sequencial [Integer]
193
+ # numero sequencial do registro no lote
194
+ #
195
+ # @return [String]
196
+ #
197
+ def monta_segmento_q(pagamento, nro_lote, sequencial)
198
+ segmento_q = '' # CAMPO TAMANHO
199
+ segmento_q += cod_banco # codigo banco 3
200
+ segmento_q << nro_lote.to_s.rjust(4, '0') # lote de servico 4
201
+ segmento_q << '3' # tipo de registro 1
202
+ segmento_q << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
203
+ segmento_q << 'Q' # cod. segmento 1
204
+ segmento_q << ' ' # uso exclusivo 1
205
+ segmento_q << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
206
+ segmento_q << pagamento.identificacao_sacado(false) # tipo insc. sacado 1
207
+ segmento_q << pagamento.documento_sacado.to_s.rjust(15, '0') # documento sacado 14
208
+ segmento_q << pagamento.nome_sacado.format_size(40) # nome cliente 40
209
+ segmento_q << pagamento.endereco_sacado.format_size(40) # endereco cliente 40
210
+ segmento_q << pagamento.bairro_sacado.format_size(15) # bairro 15
211
+ segmento_q << pagamento.cep_sacado[0..4] # cep 5
212
+ segmento_q << pagamento.cep_sacado[5..7] # sufixo cep 3
213
+ segmento_q << pagamento.cidade_sacado.format_size(15) # cidade 15
214
+ segmento_q << pagamento.uf_sacado # uf 2
215
+ segmento_q << pagamento.identificacao_avalista(false) # identificacao do sacador 1
216
+ segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0') # documento sacador 15
217
+ segmento_q << pagamento.nome_avalista.format_size(40) # nome avalista 40
218
+ segmento_q << ''.rjust(3, '0') # cod. banco correspondente 3
219
+ segmento_q << ''.rjust(20, ' ') # nosso numero banco correspondente 20
220
+ segmento_q << ''.rjust(8, ' ') # uso exclusivo 8
221
+ segmento_q
222
+ end
223
+
224
+ # Monta o registro segmento R do arquivo
225
+ #
226
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
227
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
228
+ # @param nro_lote [Integer]
229
+ # numero do lote que o segmento esta inserido
230
+ # @param sequencial [Integer]
231
+ # numero sequencial do registro no lote
232
+ #
233
+ # @return [String]
234
+ #
235
+ def monta_segmento_r(pagamento, nro_lote, sequencial)
236
+ segmento_r = '' # CAMPO TAMANHO
237
+ segmento_r += cod_banco # codigo banco 3
238
+ segmento_r << nro_lote.to_s.rjust(4, '0') # lote de servico 4
239
+ segmento_r << '3' # tipo do registro 1
240
+ segmento_r << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
241
+ segmento_r << 'R' # cod. segmento 1
242
+ segmento_r << ' ' # uso exclusivo 1
243
+ segmento_r << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
244
+ segmento_r << '0' # cod. desconto 2 1
245
+ segmento_r << ''.rjust(8, '0') # data desconto 2 8
246
+ segmento_r << ''.rjust(15, '0') # valor desconto 2 15
247
+ segmento_r << '0' # cod. desconto 3 1
248
+ segmento_r << ''.rjust(8, '0') # data desconto 3 8
249
+ segmento_r << ''.rjust(15, '0') # valor desconto 3 15
250
+ segmento_r << pagamento.codigo_multa # codigo multa 1
251
+ segmento_r << data_multa(pagamento) # data multa 8
252
+ segmento_r << pagamento.formata_percentual_multa(15) # valor multa 15
253
+ segmento_r << ''.rjust(10, ' ') # info pagador 10
254
+ segmento_r << ''.rjust(40, ' ') # mensagem 3 40
255
+ segmento_r << ''.rjust(40, ' ') # mensagem 4 40
256
+ segmento_r << complemento_r # complemento de acordo com o banco 61
257
+ segmento_r
258
+ end
259
+
260
+ # Monta o registro trailer do lote
261
+ #
262
+ # @param nro_lote [Integer]
263
+ # numero do lote no arquivo (iterar a cada novo lote)
264
+ #
265
+ # @param nro_registros [Integer]
266
+ # numero de registros(linhas) no lote (contando header e trailer)
267
+ #
268
+ # @return [String]
269
+ #
270
+ def monta_trailer_lote(nro_lote, nro_registros)
271
+ trailer_lote = '' # CAMPO # TAMANHO
272
+ trailer_lote += cod_banco # codigo banco 3
273
+ trailer_lote << nro_lote.to_s.rjust(4, '0') # lote de servico 4
274
+ trailer_lote << '5' # tipo de servico 1
275
+ trailer_lote << ''.rjust(9, ' ') # uso exclusivo 9
276
+ trailer_lote << nro_registros.to_s.rjust(6, '0') # qtde de registros lote 6
277
+ trailer_lote << complemento_trailer # uso exclusivo 217
278
+ trailer_lote
279
+ end
280
+
281
+ # Monta o registro trailer do arquivo
282
+ #
283
+ # @param nro_lotes [Integer]
284
+ # numero de lotes no arquivo
285
+ # @param sequencial [Integer]
286
+ # numero de registros(linhas) no arquivo
287
+ #
288
+ # @return [String]
289
+ #
290
+ def monta_trailer_arquivo(nro_lotes, sequencial)
291
+ # CAMPO TAMANHO
292
+ # codigo banco 3
293
+ # lote de servico 4
294
+ # tipo de registro 1
295
+ # uso FEBRABAN 9
296
+ # nro de lotes 6
297
+ # nro de registros(linhas) 6
298
+ # uso FEBRABAN 211
299
+ "#{cod_banco}99999#{''.rjust(9,
300
+ ' ')}#{nro_lotes.to_s.rjust(6,
301
+ '0')}#{sequencial.to_s.rjust(6,
302
+ '0')}#{''.rjust(211,
303
+ ' ')}"
304
+ end
305
+
306
+ # Monta um lote para o arquivo
307
+ #
308
+ # @param pagamento [Brcobranca::Remessa::Pagamento]
309
+ # objeto contendo os detalhes do boleto (valor, )
310
+ #
311
+ # @param nro_lote [Integer]
312
+ # numero do lote no arquivo
313
+ #
314
+ # @return [Array]
315
+ #
316
+ def monta_lote(nro_lote)
317
+ # contador dos registros do lote
318
+ contador = 1 # header
319
+
320
+ lote = [monta_header_lote(nro_lote)]
321
+
322
+ pagamentos.each do |pagamento|
323
+ raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
324
+
325
+ lote << monta_segmento_p(pagamento, nro_lote, contador)
326
+ contador += 1
327
+ lote << monta_segmento_q(pagamento, nro_lote, contador)
328
+ contador += 1
329
+ next unless respond_to?(:monta_segmento_r)
330
+
331
+ seg_r = monta_segmento_r(pagamento, nro_lote, contador)
332
+
333
+ unless seg_r.blank?
334
+ lote << seg_r
335
+ contador += 1
336
+ end
337
+ end
338
+ contador += 1 # trailer
339
+
340
+ lote << monta_trailer_lote(nro_lote, contador)
341
+
342
+ lote
343
+ end
344
+
345
+ # Gera o arquivo remessa
346
+ #
347
+ # @return [String]
348
+ #
349
+ def gera_arquivo
350
+ raise Brcobranca::RemessaInvalida, self if invalid?
351
+
352
+ arquivo = [monta_header_arquivo]
353
+
354
+ # contador de do lotes
355
+ contador = 1
356
+ arquivo.push monta_lote(contador)
357
+
358
+ total_linhas = (total_segmentos(pagamentos) + (contador * 2) + 2)
359
+
360
+ arquivo << monta_trailer_arquivo(contador, total_linhas)
361
+
362
+ remittance = arquivo.join("\r\n").remove_accents.upcase
363
+ remittance << "\n"
364
+ remittance.encode(remittance.encoding, universal_newline: true).encode(remittance.encoding,
365
+ crlf_newline: true)
366
+ end
367
+
368
+ def total_segmentos(pagamentos)
369
+ if respond_to?(:monta_segmento_r)
370
+ pagamentos.size * 3
371
+ else
372
+ pagamentos.size * 2
373
+ end
374
+ end
375
+
376
+ # Complemento do registro
377
+ #
378
+ # Este metodo deve ser sobrescrevido na classe do banco
379
+ #
380
+ def complemento_header
381
+ raise Brcobranca::NaoImplementado,
382
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
383
+ end
384
+
385
+ # Numero da versao do layout do arquivo
386
+ #
387
+ # Este metodo deve ser sobrescrevido na classe do banco
388
+ #
389
+ def versao_layout_arquivo
390
+ raise Brcobranca::NaoImplementado,
391
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
392
+ end
393
+
394
+ # Numero da versao do layout do lote
395
+ #
396
+ # Este metodo deve ser sobrescrevido na classe do banco
397
+ #
398
+ def versao_layout_lote
399
+ raise Brcobranca::NaoImplementado,
400
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
401
+ end
402
+
403
+ # Densidade de gravacao do arquivo
404
+ def densidade_gravacao
405
+ '00000'
406
+ end
407
+
408
+ # Uso exclusivo do Banco
409
+ def uso_exclusivo_banco
410
+ ''.rjust(20, '0')
411
+ end
412
+
413
+ # Uso exclusivo da Empresa
414
+ def uso_exclusivo_empresa
415
+ ''.rjust(20, '0')
416
+ end
417
+
418
+ # Informacoes do convenio para o lote
419
+ #
420
+ # Este metodo deve ser sobrescrevido na classe do banco
421
+ #
422
+ def convenio_lote
423
+ raise Brcobranca::NaoImplementado,
424
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
425
+ end
426
+
427
+ # Nome do banco
428
+ #
429
+ # Este metodo deve ser sobrescrevido na classe do banco
430
+ #
431
+ def nome_banco
432
+ raise Brcobranca::NaoImplementado,
433
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
434
+ end
435
+
436
+ # Codigo do banco
437
+ #
438
+ # Este metodo deve ser sobrescrevido na classe do banco
439
+ #
440
+ def cod_banco
441
+ raise Brcobranca::NaoImplementado,
442
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
443
+ end
444
+
445
+ # Informacoes da conta do cedente
446
+ #
447
+ # Este metodo deve ser sobrescrevido na classe do banco
448
+ #
449
+ def info_conta
450
+ raise Brcobranca::NaoImplementado,
451
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
452
+ end
453
+
454
+ # Codigo do convenio
455
+ #
456
+ # Este metodo deve ser sobrescrevido na classe do banco
457
+ #
458
+ def codigo_convenio
459
+ raise Brcobranca::NaoImplementado,
460
+ 'Sobreescreva este método na classe referente ao banco que você esta criando'
461
+ end
462
+
463
+ # Complemento do Segmento R
464
+ #
465
+ # Sobreescreva caso necessário
466
+ def complemento_r
467
+ segmento_r = ''
468
+ segmento_r += ''.rjust(20, ' ') # Exclusivo FEBRABAN 20
469
+ segmento_r << ''.rjust(8, '0') # Cod. Ocor do Pagador 8
470
+ segmento_r << ''.rjust(3, '0') # Cod. do Banco conta débito 3
471
+ segmento_r << ''.rjust(5, '0') # Cod. da Agencia do débito 5
472
+ segmento_r << ' ' # Cod. verificador da agencia 1
473
+ segmento_r << ''.rjust(12, '0') # Conta corrente para débito 12
474
+ segmento_r << ' ' # Cod. verificador da conta 1
475
+ segmento_r << ' ' # Cod. verificador da Ag/Conta 1
476
+ segmento_r << '0' # Aviso débito automático 1
477
+ segmento_r << ''.rjust(9, ' ') # Uso FEBRABAN 9
478
+ segmento_r
479
+ end
480
+
481
+ def data_multa(pagamento)
482
+ return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
483
+
484
+ pagamento.data_vencimento.strftime('%d%m%Y')
485
+ end
486
+
487
+ def data_mora(pagamento)
488
+ return ''.rjust(8, '0') unless %w[1 2].include? pagamento.tipo_mora
489
+
490
+ pagamento.data_vencimento.strftime('%d%m%Y')
491
+ end
492
+
493
+ def codigo_desconto(pagamento)
494
+ pagamento.cod_desconto
495
+ end
496
+
497
+ def codigo_baixa(pagamento)
498
+ pagamento.codigo_baixa
499
+ end
500
+
501
+ def dias_baixa(pagamento)
502
+ pagamento.dias_baixa.to_s.rjust(3, '0')
503
+ end
504
+
505
+ # Identificacao do titulo da empresa
506
+ #
507
+ # Sobreescreva caso necessário
508
+ def numero(pagamento)
509
+ pagamento.formata_documento_ou_numero(15, '0')
510
+ end
511
+
512
+ def identificacao_titulo_empresa(pagamento)
513
+ pagamento.formata_documento_ou_numero
514
+ end
515
+
516
+ # Campo exclusivo para serviço
517
+ #
518
+ # Sobreescreva caso necessário
519
+ def exclusivo_servico
520
+ ''.rjust(2, ' ')
521
+ end
522
+
523
+ def dv_agencia_cobradora
524
+ '0'
525
+ end
526
+ end
527
+ end
528
+ end
529
+ end