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,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
|