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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- 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
|