Class: Brcobranca::Remessa::Cnab240::Unicred

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

Overview

Banco Unicred (136)

Layout proprio do Unicred, baseado no manual "COBRANCA UNICRED - TROCA ELETRONICA CEDENTE CNAB 240 E 400" (item 6), disponivel em docs/unicred. Difere do padrao generico FEBRABAN principalmente no segmento P (posicao do nosso numero, carteira com 2 posicoes e diversos campos tratados como filler) e no segmento R, onde ficam as mensagens do titulo.

Constant Summary

Constants inherited from Base

Base::PAYMENT_CLASSES

Instance Attribute Summary collapse

Attributes inherited from Base

#codigo_baixa, #codigo_carteira, #convenio, #dias_baixa, #distribuicao_boleto, #emissao_boleto, #especie_titulo, #forma_cadastramento, #mensagem_1, #mensagem_2, #tipo_documento

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

#codigo_desconto, #data_geracao, #data_mora, #data_multa, #dv_agencia_cobradora, #exclusivo_servico, #gera_arquivo, #hora_geracao, #identificacao_titulo_empresa, #monta_header_arquivo, #monta_lote, #monta_segmento_q, #monta_trailer_lote, #numero, #total_segmentos

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 = {}) ⇒ Unicred

Nova instancia do Unicred



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 29

def initialize(campos = {})
  campos = {
    carteira: '21',
    parametro_movimento: '000',
    emissao_boleto: '2',
    distribuicao_boleto: '2',
    especie_titulo: '02',
    forma_cadastramento: '1',
    tipo_documento: '1'
  }.merge!(campos)
  super(campos)
end

Instance Attribute Details

#parametro_movimentoObject

Parametro de movimento vinculado ao cedente no momento do cadastramento (campo 22 do header de arquivo - UN001).



17
18
19
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 17

def parametro_movimento
  @parametro_movimento
end

Instance Method Details

#agencia=(valor) ⇒ Object



42
43
44
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 42

def agencia=(valor)
  @agencia = valor.to_s.rjust(4, '0') if valor
end

#carteira=(valor) ⇒ Object



46
47
48
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 46

def carteira=(valor)
  @carteira = valor.to_s.rjust(2, '0') if valor
end

#cod_bancoString

Codigo do banco na camara de compensacao

Returns:

  • (String)

    3 caracteres numericos.



52
53
54
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 52

def cod_banco
  '136'
end

#codigo_convenioObject Also known as: convenio_lote

O Unicred nao utiliza o codigo do convenio: campo 7 do header de arquivo e campo 11 do header de lote sao filler.



93
94
95
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 93

def codigo_convenio
  ''.rjust(20, ' ')
end

#complemento_headerObject

Campo 25 do header de arquivo (posicoes 212 a 240)



125
126
127
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 125

def complemento_header
  ''.rjust(29, ' ')
end

#complemento_rString

Complemento do segmento R (posicoes 180 a 240)

Returns:

  • (String)

    61 caracteres.



148
149
150
151
152
153
154
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 148

def complemento_r
  # CAMPO                    TAMANHO
  # uso exclusivo FEBRABAN   20
  # filler                   32
  # uso exclusivo FEBRABAN   9
  "#{''.rjust(20, ' ')}#{''.rjust(32, '0')}#{''.rjust(9, ' ')}"
end

#complemento_trailerString

Complemento do trailer de lote (posicoes 24 a 240)

Returns:

  • (String)

    217 caracteres.



132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 132

def complemento_trailer
  # CAMPO                                             TAMANHO
  # qtde de titulos em cobranca simples               6
  # valor total dos titulos em cobranca simples       17
  # qtde/valor dos titulos em cobranca vinculada      23
  # qtde/valor dos titulos em cobranca caucionada     23
  # qtde/valor dos titulos em cobranca descontada     23
  # numero do aviso de lancamento                     8
  # uso exclusivo FEBRABAN                            117
  cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira(17)}"
  "#{cobranca_simples}#{''.rjust(69, '0')}#{''.rjust(125, ' ')}"
end

#densidade_gravacaoObject

Densidade de gravacao do arquivo: 1600 BPI



73
74
75
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 73

def densidade_gravacao
  '01600'
end

#digito_agenciaString

Digito verificador da agencia, calculado pelo modulo 11 com o mesmo criterio usado na remessa CNAB 400 do Unicred.

Returns:

  • (String)

    1 caractere.



80
81
82
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 80

def digito_agencia
  agencia.modulo11(mapeamento: { 10 => 'X' }).to_s
end

#formata_nosso_numero(nosso_numero) ⇒ String

Nosso numero com o digito verificador (campo 13 do segmento P).

Returns:

  • (String)

    11 caracteres numericos.



86
87
88
89
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 86

def formata_nosso_numero(nosso_numero)
  numero = nosso_numero.to_s.somente_numeros.rjust(10, '0')
  "#{numero}#{numero.modulo11(mapeamento: { 10 => 0, 11 => 0 })}"
end

#info_contaString

Informacoes da conta do cedente (header de arquivo 053-072 / header de lote 054-073)

Returns:

  • (String)

    20 caracteres.



103
104
105
106
107
108
109
110
111
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 103

def info_conta
  # CAMPO           TAMANHO
  # agencia         5
  # dv agencia      1
  # conta corrente  12
  # dv conta        1
  # filler          1
  "#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.to_s.rjust(12, '0')}#{digito_conta}0"
end

#monta_header_lote(nro_lote) ⇒ String

Monta o registro header do lote

No layout do Unicred as duas mensagens do header de lote (posicoes 104 a 183) e a data do credito (posicoes 200 a 207) sao filler - as mensagens do titulo trafegam no segmento R.

Returns:

  • (String)


164
165
166
167
168
169
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 164

def monta_header_lote(nro_lote)
  header_lote = super
  header_lote[103, 80] = ''.rjust(80, ' ')
  header_lote[199, 8] = ''.rjust(8, ' ')
  header_lote
end

#monta_segmento_p(pagamento, nro_lote, sequencial) ⇒ String

Monta o registro segmento P do arquivo

CAMPO POSICAO TAMANHO codigo banco 001-003 3 lote de servico 004-007 4 tipo de registro 008 1 num. sequencial do registro no lote 009-013 5 cod. segmento 014 1 uso exclusivo FEBRABAN 015 1 cod. movimento remessa 016-017 2 agencia 018-022 5 dv agencia 023 1 conta corrente 024-035 12 dv conta 036 1 filler 037 1 nosso numero (com dv) 038-048 11 filler 049-056 8 carteira 057-058 2 filler 059-062 4 numero do documento (seu numero) 063-077 15 data de vencimento 078-085 8 valor nominal do titulo 086-100 15 agencia cobradora 101-105 5 dv agencia cobradora 106 1 filler 107-108 2 aceite 109 1 data de emissao do titulo 110-117 8 codigo do juros de mora 118 1 filler 119-126 8 juros de mora por dia/taxa 127-141 15 codigo do desconto 1 142 1 data do desconto 1 143-150 8 valor/percentual do desconto 1 151-165 15 filler 166-180 15 valor do abatimento 181-195 15 identificacao do titulo na empresa 196-220 25 codigo para protesto 221 1 prazo para protesto 222-223 2 filler 224-227 4 codigo da moeda 228-229 2 numero do contrato 230-239 10 uso exclusivo FEBRABAN 240 1

Returns:

  • (String)


216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 216

def monta_segmento_p(pagamento, nro_lote, sequencial)
  segmento_p = ''
  segmento_p += cod_banco
  segmento_p << nro_lote.to_s.rjust(4, '0')
  segmento_p << '3'
  segmento_p << sequencial.to_s.rjust(5, '0')
  segmento_p << 'P'
  segmento_p << ' '
  segmento_p << pagamento.identificacao_ocorrencia
  segmento_p << agencia.rjust(5, '0')
  segmento_p << digito_agencia
  segmento_p << conta_corrente.to_s.rjust(12, '0')
  segmento_p << digito_conta.to_s
  segmento_p << '0'
  segmento_p << formata_nosso_numero(pagamento.nosso_numero)
  segmento_p << ''.rjust(8, ' ')
  segmento_p << carteira
  segmento_p << '0 0 '
  segmento_p << numero(pagamento)
  segmento_p << pagamento.data_vencimento.strftime('%d%m%Y')
  segmento_p << pagamento.formata_valor(15)
  segmento_p << ''.rjust(5, ' ')
  segmento_p << ' '
  segmento_p << ''.rjust(2, '0')
  segmento_p << aceite
  segmento_p << pagamento.data_emissao.strftime('%d%m%Y')
  segmento_p << pagamento.tipo_mora
  segmento_p << ''.rjust(8, '0')
  segmento_p << pagamento.formata_valor_mora(15)
  segmento_p << codigo_desconto(pagamento)
  segmento_p << pagamento.formata_data_desconto('%d%m%Y')
  segmento_p << pagamento.formata_valor_desconto(15)
  segmento_p << ''.rjust(15, '0')
  segmento_p << pagamento.formata_valor_abatimento(15)
  segmento_p << identificacao_titulo_empresa(pagamento)
  segmento_p << pagamento.codigo_protesto
  segmento_p << pagamento.dias_protesto.to_s.rjust(2, '0')
  segmento_p << '0'
  segmento_p << ''.rjust(3, ' ')
  segmento_p << '09'
  segmento_p << ''.rjust(10, '0')
  segmento_p << ' '
  segmento_p
end

#monta_segmento_r(pagamento, nro_lote, sequencial) ⇒ String

Monta o registro segmento R do arquivo

No layout do Unicred os campos de desconto 2/3 e de multa sao filler; o segmento carrega a informacao ao sacado e as duas mensagens.

CAMPO POSICAO TAMANHO codigo banco 001-003 3 lote de servico 004-007 4 tipo de registro 008 1 num. sequencial do registro no lote 009-013 5 cod. segmento 014 1 uso exclusivo FEBRABAN 015 1 cod. movimento remessa 016-017 2 filler (desconto 2 e desconto 3) 018-065 48 filler 066 1 filler (multa) 067-089 23 informacao ao sacado 090-099 10 mensagem 1 100-139 40 mensagem 2 140-179 40 complemento 180-240 61

Returns:

  • (String)


284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 284

def monta_segmento_r(pagamento, nro_lote, sequencial)
  segmento_r = ''
  segmento_r += cod_banco
  segmento_r << nro_lote.to_s.rjust(4, '0')
  segmento_r << '3'
  segmento_r << sequencial.to_s.rjust(5, '0')
  segmento_r << 'R'
  segmento_r << ' '
  segmento_r << pagamento.identificacao_ocorrencia
  segmento_r << ''.rjust(48, '0')
  segmento_r << ' '
  segmento_r << ''.rjust(23, '0')
  segmento_r << ''.rjust(10, ' ')
  segmento_r << mensagem_1.to_s.format_size(40)
  segmento_r << mensagem_2.to_s.format_size(40)
  segmento_r << complemento_r
  segmento_r
end

#monta_trailer_arquivo(nro_lotes, sequencial) ⇒ String

Monta o registro trailer do arquivo

CAMPO POSICAO TAMANHO codigo banco 001-003 3 lote de servico 004-007 4 tipo de registro 008 1 uso exclusivo FEBRABAN 009-017 9 qtde de lotes do arquivo 018-023 6 qtde de registros do arquivo 024-029 6 qtde de contas para conciliacao 030-035 6 uso exclusivo FEBRABAN 036-240 205

Returns:

  • (String)


317
318
319
320
321
322
323
324
325
326
327
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 317

def monta_trailer_arquivo(nro_lotes, sequencial)
  trailer_arquivo = ''
  trailer_arquivo += cod_banco
  trailer_arquivo << '99999'
  trailer_arquivo << ''.rjust(9, ' ')
  trailer_arquivo << nro_lotes.to_s.rjust(6, '0')
  trailer_arquivo << sequencial.to_s.rjust(6, '0')
  trailer_arquivo << ''.rjust(6, '0')
  trailer_arquivo << ''.rjust(205, ' ')
  trailer_arquivo
end

#nome_bancoString

Nome do banco

Returns:

  • (String)

    30 caracteres.



58
59
60
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 58

def nome_banco
  'UNICRED'.ljust(30, ' ')
end

#uso_exclusivo_bancoObject

Campos 22 e 23 do header de arquivo (posicoes 172 a 191): parametro de movimento seguido do campo reservado ao banco.



115
116
117
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 115

def uso_exclusivo_banco
  "#{parametro_movimento}#{''.rjust(17, ' ')}"
end

#uso_exclusivo_empresaObject

Campo 24 do header de arquivo (posicoes 192 a 211)



120
121
122
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 120

def uso_exclusivo_empresa
  ''.rjust(20, ' ')
end

#versao_layout_arquivoObject

Versao do layout do arquivo (campo 20 do header de arquivo)



63
64
65
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 63

def versao_layout_arquivo
  '085'
end

#versao_layout_loteObject

Versao do layout do lote (campo 7 do header de lote)



68
69
70
# File 'lib/brcobranca/remessa/cnab240/unicred.rb', line 68

def versao_layout_lote
  '044'
end