Class: Brcobranca::Remessa::Cnab240::BaseCorrespondente

Inherits:
Base
  • Object
show all
Defined in:
lib/brcobranca/remessa/cnab240/base_correspondente.rb

Direct Known Subclasses

SicoobBancoBrasil

Instance Attribute Summary collapse

Attributes inherited from Base

#aceite, #agencia, #carteira, #conta_corrente, #digito_conta, #documento_cedente, #empresa_mae, #pagamentos, #sequencial_remessa

Instance Method Summary collapse

Methods inherited from Base

#quantidade_titulos_cobranca, #totaliza_valor_titulos, #valor_titulos_carteira

Methods included from Validations

#errors, included, #invalid?, #valid?

Constructor Details

#initialize(campos = {}) ⇒ BaseCorrespondente

Returns a new instance of BaseCorrespondente.



40
41
42
43
44
45
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 40

def initialize(campos = {})
  campos = { codigo_carteira: '1',
             forma_cadastramento: '1',
             tipo_documento: ' ' }.merge!(campos)
  super(campos)
end

Instance Attribute Details

#codigo_carteiraObject

codigo da carteira

opcoes:
  1 - cobranca simples
  2 - cobranca caucionada
  3 - cobranca descontada
  7 – modalidade Simples quando carteira 17 (apenas Banco do Brasil)


19
20
21
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 19

def codigo_carteira
  @codigo_carteira
end

#convenioObject

convenio do cedente



8
9
10
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 8

def convenio
  @convenio
end

#distribuicao_boletoObject

identificacao da distribuicao do boleto (verificar opcoes nas classes referentes aos bancos)



28
29
30
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 28

def distribuicao_boleto
  @distribuicao_boleto
end

#emissao_boletoObject

identificacao da emissao do boleto (verificar opcoes nas classes referentes aos bancos)



26
27
28
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 26

def emissao_boleto
  @emissao_boleto
end

#especie_tituloObject

especie do titulo (verificar o padrao nas classes referentes aos bancos)



30
31
32
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 30

def especie_titulo
  @especie_titulo
end

#forma_cadastramentoObject

forma de cadastramento dos titulos (campo nao tratado pelo Banco do Brasil)

opcoes:
  1 - com cadastramento (cobrança registrada)
  2 - sem cadastramento (cobrança sem registro)


24
25
26
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 24

def forma_cadastramento
  @forma_cadastramento
end

#mensagem_1Object

mensagem 1



10
11
12
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 10

def mensagem_1
  @mensagem_1
end

#mensagem_2Object

mensagem 2



12
13
14
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 12

def mensagem_2
  @mensagem_2
end

#tipo_documentoObject

tipo de documento (verificar o padrao nas classes referentes aos bancos)



32
33
34
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 32

def tipo_documento
  @tipo_documento
end

Instance Method Details

#cod_bancoObject

Codigo do banco

Este metodo deve ser sobrescrevido na classe do banco



275
276
277
278
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 275

def cod_banco
  raise Brcobranca::NaoImplementado,
        'Sobreescreva este método na classe referente ao banco que você esta criando'
end

#codigo_convenioObject

Codigo do convenio

Este metodo deve ser sobrescrevido na classe do banco



293
294
295
296
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 293

def codigo_convenio
  raise Brcobranca::NaoImplementado,
        'Sobreescreva este método na classe referente ao banco que você esta criando'
end

#codigo_protestoObject

Codigo para protesto

Sobreescreva caso necessário



301
302
303
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 301

def codigo_protesto
  '0'
end

#complemento_headerObject

Complemento do registro

Este metodo deve ser sobrescrevido na classe do banco



257
258
259
260
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 257

def complemento_header
  raise Brcobranca::NaoImplementado,
        'Sobreescreva este método na classe referente ao banco que você esta criando'
end

#convenio_loteObject

Informacoes do convenio para o lote

Este metodo deve ser sobrescrevido na classe do banco



266
267
268
269
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 266

def convenio_lote
  raise Brcobranca::NaoImplementado,
        'Sobreescreva este método na classe referente ao banco que você esta criando'
end

#data_geracaoString

Data de geracao do arquivo

Returns:

  • (String)


51
52
53
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 51

def data_geracao
  Date.current.strftime('%d%m%Y')
end

#formata_nosso_numero(nosso_numero) ⇒ String

Retorna o nosso numero

Returns:

  • (String)


169
170
171
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 169

def formata_nosso_numero(nosso_numero)
  "#{convenio.to_s.rjust(10, '0')}#{nosso_numero.to_s.rjust(7, '0')}"
end

#gera_arquivoString

Gera o arquivo remessa

Returns:

  • (String)

Raises:



239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 239

def gera_arquivo
  raise Brcobranca::RemessaInvalida, self if invalid?

  arquivo = [monta_header_arquivo]

  # contador de do lotes
  contador = 1
  arquivo.push monta_lote(contador)

  arquivo << monta_trailer_arquivo(contador, ((pagamentos.size * 2) + (contador * 2) + 2))

  arquivo.join("\r\n").remove_accents.upcase
end

#hora_geracaoString

Hora de geracao do arquivo

Returns:

  • (String)


59
60
61
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 59

def hora_geracao
  (Time.respond_to?(:current) ? Time.current : Time.now).strftime('%H%M%S')
end

#identificacao_avalista(pagamento) ⇒ Object



177
178
179
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 177

def identificacao_avalista(pagamento)
  "0#{pagamento.identificacao_avalista(false)}"
end

#identificacao_sacado(pagamento) ⇒ Object



173
174
175
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 173

def identificacao_sacado(pagamento)
  "0#{pagamento.identificacao_sacado(false)}"
end

#info_contaObject

Informacoes da conta do cedente

Este metodo deve ser sobrescrevido na classe do banco



284
285
286
287
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 284

def info_conta
  raise Brcobranca::NaoImplementado,
        'Sobreescreva este método na classe referente ao banco que você esta criando'
end

#monta_header_arquivoString

Monta o registro header do arquivo

Returns:

  • (String)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 67

def monta_header_arquivo
  header_arquivo = ''                                   # CAMPO                         TAMANHO
  header_arquivo += cod_banco                           # codigo do banco               3
  header_arquivo << '0000'                              # zeros                         4
  header_arquivo << '1'                                 # registro header do lote       1
  header_arquivo << 'R'                                 # tipo operacao: R-remessa      1
  header_arquivo << ''.rjust(7, '0')                    # zeros                         7
  header_arquivo << ''.rjust(2, ' ')                    # brancos                       2
  header_arquivo << info_conta                          # informacoes da conta          22
  header_arquivo << ''.rjust(30, ' ')                   # brancos                       30
  header_arquivo << empresa_mae.format_size(30)         # nome da empresa               30
  header_arquivo << ''.rjust(80, ' ')                   # brancos                       80
  header_arquivo << sequencial_remessa.to_s.rjust(8, '0') # numero seq. arquivo         8
  header_arquivo << data_geracao                        # data geracao                  8
  header_arquivo << complemento_header                  # complemento do arquivo        44
  header_arquivo
end

#monta_lote(_nro_lote) ⇒ Array

Monta um lote para o arquivo

numero do lote no arquivo

Parameters:

Returns:

  • (Array)


216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 216

def monta_lote(_nro_lote)
  # contador dos registros do lote
  contador = 1 # header

  lote = []

  pagamentos.each do |pagamento|
    raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?

    lote << monta_segmento_p(pagamento, contador)
    contador += 1
    lote << monta_segmento_q(pagamento, contador)
    contador += 1
  end
  contador += 1 # trailer

  lote
end

#monta_segmento_p(pagamento, sequencial) ⇒ String

Monta o registro segmento P do arquivo

Parameters:

  • pagamento (Brcobranca::Remessa::Pagamento)

    objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)

  • sequencial (Integer)

    numero sequencial do registro no lote

Returns:

  • (String)


94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 94

def monta_segmento_p(pagamento, sequencial)
  #                                                             # DESCRICAO                             TAMANHO
  segmento_p = ''.rjust(7, '0')                                 # codigo banco                          7
  segmento_p += '3'                                             # tipo de registro                      1
  segmento_p << sequencial.to_s.rjust(5, '0')                   # num. sequencial do registro no lote   5
  segmento_p << 'P'                                             # cod. segmento                         1
  segmento_p << ' '                                             # uso exclusivo                         1
  segmento_p << '01'                                            # cod. movimento remessa                2
  segmento_p << ''.rjust(23, ' ')                               # brancos                               23
  segmento_p << formata_nosso_numero(pagamento.nosso_numero)    # uso exclusivo                         17
  segmento_p << codigo_carteira                                 # codigo da carteira                    1
  segmento_p << tipo_documento                                  # tipo de documento                     2
  segmento_p << emissao_boleto                                  # identificaco emissao                  1
  segmento_p << ' '                                             # branco                                1
  segmento_p << complemento_p(pagamento)                        # informacoes da conta                  15
  segmento_p << pagamento.data_vencimento.strftime('%d%m%Y')    # data de venc.                         8
  segmento_p << pagamento.formata_valor(15)                     # valor documento                       15
  segmento_p << ''.rjust(6, '0')                                # zeros                                 6
  segmento_p << aceite                                          # aceite                                1
  segmento_p << '  '                                            # brancos                               2
  segmento_p << pagamento.data_emissao.strftime('%d%m%Y')       # data de emissao titulo                8
  segmento_p << '1'                                             # tipo da mora                          1
  segmento_p << pagamento.formata_valor_mora(15).to_s           # valor da mora                         15
  segmento_p << ''.rjust(9, '0')                                # zeros                                 9
  segmento_p << pagamento.formata_data_desconto('%d%m%Y')       # data desconto                         8
  segmento_p << pagamento.formata_valor_desconto(15)            # valor desconto                        15
  segmento_p << ''.rjust(15, ' ')                               # filler                                15
  segmento_p << pagamento.formata_valor_abatimento(15)          # valor abatimento                      15
  segmento_p << ''.rjust(25, ' ')                               # identificacao titulo empresa          25
  segmento_p << codigo_protesto                                 # cod. para protesto                    1
  segmento_p << '00'                                            # dias para protesto                    2
  segmento_p << ''.rjust(4, '0')                                # zero                                  4
  segmento_p << '09'                                            # cod. da moeda                         2
  segmento_p << ''.rjust(10, '0')                               # uso exclusivo                         10
  segmento_p << '0'                                             # zero                                  1
  segmento_p
end

#monta_segmento_q(pagamento, sequencial) ⇒ String

Monta o registro segmento Q do arquivo

Parameters:

  • pagamento (Brcobranca::Remessa::Pagamento)

    objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)

  • sequencial (Integer)

    numero sequencial do registro no lote

Returns:

  • (String)


141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 141

def monta_segmento_q(pagamento, sequencial)
  segmento_q = ''                                               # CAMPO                         TAMANHO
  segmento_q += ''.rjust(7, '0')                                # zeros                         3
  segmento_q << '3'                                             # registro detalhe              1
  segmento_q << sequencial.to_s.rjust(5, '0')                   # lote de servico               5
  segmento_q << 'Q'                                             # cod. segmento                 1
  segmento_q << ' '                                             # brancos                       1
  segmento_q << '01'                                            # cod. movimento remessa        2
  segmento_q << identificacao_sacado(pagamento)                 # tipo insc. sacado             2
  segmento_q << pagamento.documento_sacado.to_s.rjust(14, '0')  # documento sacado              14
  segmento_q << pagamento.nome_sacado.format_size(40)           # nome cliente                  40
  segmento_q << pagamento.endereco_sacado.format_size(40)       # endereco cliente              40
  segmento_q << pagamento.bairro_sacado.format_size(15)         # bairro                        15
  segmento_q << pagamento.cep_sacado[0..4]                      # cep                           5
  segmento_q << pagamento.cep_sacado[5..7]                      # sufixo cep                    3
  segmento_q << pagamento.cidade_sacado.format_size(15)         # cidade                        15
  segmento_q << pagamento.uf_sacado                             # uf                            2
  segmento_q << identificacao_avalista(pagamento)               # identificacao do sacador      2
  segmento_q << pagamento.documento_avalista.to_s.rjust(14, '0') # documento sacador            15
  segmento_q << pagamento.nome_avalista.format_size(40)         # nome avalista                 40
  segmento_q << ''.rjust(31, ' ')                               # zeros                         0
  segmento_q
end

#monta_trailer_arquivo(nro_lotes, sequencial) ⇒ String

Monta o registro trailer do arquivo

Parameters:

  • nro_lotes (Integer)

    numero de lotes no arquivo

  • sequencial (Integer)

    numero de registros(linhas) no arquivo

Returns:

  • (String)


190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/brcobranca/remessa/cnab240/base_correspondente.rb', line 190

def monta_trailer_arquivo(nro_lotes, sequencial)
  # CAMPO                     TAMANHO
  # codigo banco              3
  # lote de servico           4
  # tipo de registro          1
  # uso FEBRABAN              9
  # nro de lotes              6
  # nro de registros(linhas)  6
  # uso FEBRABAN              211
  "#{cod_banco}99999#{''.rjust(9,
                               ' ')}#{nro_lotes.to_s.rjust(6,
                                                           '0')}#{sequencial.to_s.rjust(6,
                                                                                        '0')}#{''.rjust(211,
                                                                                                        ' ')}"
end