Class: Brcobranca::Remessa::Cnab240::Itau

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

Constant Summary

Constants inherited from Base

Base::PAYMENT_CLASSES

Instance Attribute Summary

Attributes inherited from Base

#codigo_baixa, #codigo_carteira, #convenio, #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, #complemento_r, #data_geracao, #data_mora, #data_multa, #densidade_gravacao, #gera_arquivo, #hora_geracao, #identificacao_titulo_empresa, #monta_header_arquivo, #monta_header_lote, #monta_lote, #monta_segmento_r, #monta_trailer_arquivo, #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 = {}) ⇒ Itau

Returns a new instance of Itau.



14
15
16
17
18
19
20
21
22
23
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 14

def initialize(campos = {})
  # emissao_boleto/distribuicao_boleto/codigo_carteira/
  # forma_cadastramento nao fazem parte do layout do Segmento P do
  # Itau (ver #monta_segmento_p), mas precisam de um valor de 1
  # digito para passar nas validacoes genericas de Cnab240::Base.
  campos = { especie_titulo: "01",
             emissao_boleto: "0",
             distribuicao_boleto: "0" }.merge!(campos)
  super
end

Instance Method Details

#agencia=(valor) ⇒ Object



25
26
27
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 25

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

#agencia_conta_corrente_dvString

Digito verificador de agencia/conta corrente.

Returns:

  • (String)


60
61
62
63
64
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 60

def agencia_conta_corrente_dv
  Brcobranca::Util::Itau.agencia_conta_corrente_dv(
    agencia, conta_corrente
  ).to_s
end

#carteira=(valor) ⇒ Object



33
34
35
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 33

def carteira=(valor)
  @carteira = valor.to_s.rjust(3, "0") if valor
end

#cod_bancoObject



37
38
39
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 37

def cod_banco
  "341"
end

#codigo_convenioString

Sem uso de codigo de convenio pelo Itau neste layout (header arquivo)

Returns:

  • (String)


112
113
114
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 112

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

#complemento_headerString

Complemento do header de arquivo

Returns:

  • (String)


134
135
136
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 134

def complemento_header
  "#{''.rjust(14, ' ')}#{''.rjust(3, '0')}#{''.rjust(12, ' ')}"
end

#complemento_trailerString

Complemento do trailer de lote

Returns:

  • (String)


141
142
143
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 141

def complemento_trailer
  "".rjust(217, " ")
end

#conta_corrente=(valor) ⇒ Object



29
30
31
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 29

def conta_corrente=(valor)
  @conta_corrente = valor.to_s.rjust(5, "0") if valor
end

#convenio_loteString

Sem uso de codigo de convenio pelo Itau neste layout (header lote)

Returns:

  • (String)


119
120
121
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 119

def convenio_lote
  "".rjust(20, " ")
end

#dias_baixa(pagamento) ⇒ String

Prazo para baixa com exatamente 2 posicoes.

O valor padrao herdado de Brcobranca::Remessa::Pagamento e "000" (3 digitos, dimensionado para o layout generico de outros bancos) e nao e truncado por um rjust simples, o que descasa o segmento P do Itau (campo de 2 digitos, posicoes 225-226) em 1 byte quando o chamador nao informa esse campo explicitamente.

Returns:

  • (String)


158
159
160
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 158

def dias_baixa(pagamento)
  pagamento.dias_baixa.to_s.rjust(2, "0")[-2..-1]
end

#dv_agencia_cobradoraObject



145
146
147
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 145

def dv_agencia_cobradora
  "0"
end

#exclusivo_servicoObject



53
54
55
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 53

def exclusivo_servico
  "00"
end

#formata_nosso_numero(pagamento) ⇒ String

Nosso numero com exatamente 8 posicoes.

O nosso numero pode vir do chamador (ex.: sequencia interna do Odoo) com mais de 8 digitos; nesse caso ficam os 8 ultimos digitos (o mesmo criterio usado para interpretar o nosso numero no arquivo de retorno), em vez de simplesmente preencher com zeros a esquerda sem cortar o excedente.

Returns:

  • (String)


88
89
90
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 88

def formata_nosso_numero(pagamento)
  pagamento.nosso_numero.to_s.rjust(8, "0")[-8..-1]
end

#info_contaString

Informacoes da conta corrente do cedente no header de lote.

CAMPO TAMANHO zeros 1 agencia 4 brancos 1 zeros 7 conta corrente 5 brancos 1 DAC ag/conta 1

Returns:

  • (String)


104
105
106
107
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 104

def info_conta
  zeros = "".rjust(7, "0")
  "0#{agencia} #{zeros}#{conta_corrente} #{agencia_conta_corrente_dv}"
end

#monta_segmento_p(pagamento, nro_lote, sequencial) ⇒ String

Monta o registro segmento P do arquivo.

Layout especifico do Itau (manual "Cobranca FEBRABAN 240", item 3.1, Segmento P) - o campo "N. da carteira" (3 digitos, posicoes 038-040) nao corresponde ao hook generico codigo_carteira da classe base (1 digito), por isso o segmento e montado por inteiro.

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 015 1 cod. movimento remessa 016-017 2 zeros 018 1 agencia 019-022 4 brancos 023 1 zeros 024-030 7 conta corrente 031-035 5 brancos 036 1 DAC agencia/conta 037 1 numero da carteira 038-040 3 nosso numero 041-048 8 DAC nosso numero 049 1 brancos 050-057 8 zeros 058-062 5 numero do documento 063-072 10 brancos 073-077 5 data de vencimento 078-085 8 valor do titulo 086-100 15 agencia cobradora 101-105 5 DAC agencia cobradora 106 1 especie do titulo 107-108 2 aceite 109 1 data de emissao do titulo 110-117 8 zeros 118 1 data base juros de mora 119-126 8 valor de mora por dia de atraso 127-141 15 zeros 142 1 data limite do 1o desconto 143-150 8 valor do 1o desconto 151-165 15 valor do IOF 166-180 15 valor do abatimento 181-195 15 identificacao do titulo na empresa 196-220 25 codigo para negativacao/protesto 221 1 prazo para negativacao/protesto 222-223 2 codigo para baixa 224 1 prazo para baixa 225-226 2 zeros 227-239 13 brancos 240 1

Returns:

  • (String)


215
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
260
261
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 215

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 << "0"
  segmento_p << agencia
  segmento_p << " "
  segmento_p << "".rjust(7, "0")
  segmento_p << conta_corrente
  segmento_p << " "
  segmento_p << agencia_conta_corrente_dv
  segmento_p << carteira
  segmento_p << formata_nosso_numero(pagamento)
  segmento_p << nosso_numero_dv(pagamento)
  segmento_p << "".rjust(8, " ")
  segmento_p << "".rjust(5, "0")
  segmento_p << pagamento.formata_documento_ou_numero(10, " ")
  segmento_p << "".rjust(5, " ")
  segmento_p << pagamento.data_vencimento.strftime("%d%m%Y")
  segmento_p << pagamento.formata_valor(15)
  segmento_p << "".rjust(5, "0")
  segmento_p << dv_agencia_cobradora
  segmento_p << especie_titulo
  segmento_p << aceite
  segmento_p << pagamento.data_emissao.strftime("%d%m%Y")
  segmento_p << "0"
  segmento_p << data_mora(pagamento)
  segmento_p << pagamento.formata_valor_mora(15)
  segmento_p << "0"
  segmento_p << pagamento.formata_data_desconto("%d%m%Y")
  segmento_p << pagamento.formata_valor_desconto(15)
  segmento_p << pagamento.formata_valor_iof(15)
  segmento_p << pagamento.formata_valor_abatimento(15)
  segmento_p << pagamento.formata_documento_ou_numero(25, " ")
  segmento_p << pagamento.codigo_protesto
  segmento_p << pagamento.dias_protesto.to_s.rjust(2, "0")
  segmento_p << codigo_baixa(pagamento)
  segmento_p << dias_baixa(pagamento)
  segmento_p << "".rjust(13, "0")
  segmento_p << " "
  segmento_p
end

#monta_segmento_q(pagamento, nro_lote, sequencial) ⇒ String

Monta o registro segmento Q do arquivo.

Layout especifico do Itau - o nome do pagador ocupa 30 posicoes (com 10 posicoes em branco a seguir) e o nome do sacador/avalista ocupa 30 posicoes, diferente do padrao generico de 40 posicoes sem espacamento usado pela classe base.

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 brancos 015 1 cod. movimento remessa 016-017 2 tipo insc. pagador 018 1 documento pagador 019-033 15 nome pagador 034-063 30 brancos 064-073 10 logradouro 074-113 40 bairro 114-128 15 cep 129-133 5 sufixo cep 134-136 3 cidade 137-151 15 uf 152-153 2 tipo insc. sacador/avalista 154 1 documento sacador/avalista 155-169 15 nome sacador/avalista 170-199 30 brancos 200-209 10 zeros 210-212 3 brancos 213-240 28

Returns:

  • (String)


296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 296

def monta_segmento_q(pagamento, nro_lote, sequencial)
  segmento_q = ""
  segmento_q += cod_banco
  segmento_q << nro_lote.to_s.rjust(4, "0")
  segmento_q << "3"
  segmento_q << sequencial.to_s.rjust(5, "0")
  segmento_q << "Q"
  segmento_q << " "
  segmento_q << pagamento.identificacao_ocorrencia
  segmento_q << pagamento.identificacao_sacado(false)
  segmento_q << pagamento.documento_sacado.to_s.rjust(15, "0")
  segmento_q << pagamento.nome_sacado.format_size(30)
  segmento_q << "".rjust(10, " ")
  segmento_q << pagamento.endereco_sacado.format_size(40)
  segmento_q << pagamento.bairro_sacado.format_size(15)
  segmento_q << pagamento.cep_sacado[0..4]
  segmento_q << pagamento.cep_sacado[5..7]
  segmento_q << pagamento.cidade_sacado.format_size(15)
  segmento_q << pagamento.uf_sacado
  segmento_q << pagamento.identificacao_avalista(false)
  segmento_q << pagamento.documento_avalista.to_s.rjust(15, "0")
  segmento_q << pagamento.nome_avalista.format_size(30)
  segmento_q << "".rjust(10, " ")
  segmento_q << "".rjust(3, "0")
  segmento_q << "".rjust(28, " ")
  segmento_q
end

#nome_bancoObject



41
42
43
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 41

def nome_banco
  "BANCO ITAU SA".ljust(30, " ")
end

#nosso_numero_dv(pagamento) ⇒ String

Digito verificador do nosso numero.

Calculado sobre o nosso numero ja com 8 posicoes (mesmo valor gravado no segmento P), e nao sobre o valor "cru" informado pelo usuario - ver #monta_segmento_p e #formata_nosso_numero.

Returns:

  • (String)


73
74
75
76
77
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 73

def nosso_numero_dv(pagamento)
  Brcobranca::Util::Itau.nosso_numero_dv(
    agencia, conta_corrente, carteira, formata_nosso_numero(pagamento)
  ).to_s
end

#uso_exclusivo_bancoObject



123
124
125
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 123

def uso_exclusivo_banco
  "".rjust(20, " ")
end

#uso_exclusivo_empresaObject



127
128
129
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 127

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

#versao_layout_arquivoObject



45
46
47
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 45

def versao_layout_arquivo
  "040"
end

#versao_layout_loteObject



49
50
51
# File 'lib/brcobranca/remessa/cnab240/itau.rb', line 49

def versao_layout_lote
  "030"
end