Class: Brcobranca::Retorno::Cnab240::Itau
- Defined in:
- lib/brcobranca/retorno/cnab240/itau.rb
Defined Under Namespace
Classes: Line
Constant Summary collapse
- REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U =
Regex para remocao de headers/trailers e registros diferentes de T ou U.
/^((?!^.{7}3.{5}[TU].*$).)*$/
Instance Attribute Summary
Attributes inherited from Base
#abatimento_nao_aproveitado, #agencia_com_dv, #agencia_recebedora_com_dv, #agencia_sem_dv, #arquivo, #banco_recebedor, #carteira, #carteira_variacao, #cedente_com_dv, #codigo_chave_dict, #codigo_ocorrencia, #codigo_registro, #comando, #convenio, #data_credito, #data_liquidacao, #data_ocorrencia, #data_vencimento, #desconto, #desconto_concedito, #documento_numero, #especie_documento, #indicador_valor, #indicativo_lancamento, #iof, #iof_desconto, #juros_desconto, #juros_mora, #motivo_ocorrencia, #natureza_recebimento, #nosso_numero, #outras_despesas, #outros_recebimento, #sequencial, #tipo_chave_dict, #tipo_cobranca, #tipo_cobranca_anterior, #txid, #valor_abatimento, #valor_ajuste, #valor_lancamento, #valor_recebido, #valor_tarifa, #valor_titulo
Class Method Summary collapse
- .generate_retorno_based_on_cnab_lines(cnab_lines) ⇒ Object
- .load_lines(file, options = {}) ⇒ Object
-
.validate_par_t_u!(cnab_lines) ⇒ Object
Garante que cada grupo de linhas T/U produzido por .load_lines esta completo e na ordem esperada antes de virar um retorno.
Methods inherited from Base
Class Method Details
.generate_retorno_based_on_cnab_lines(cnab_lines) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/brcobranca/retorno/cnab240/itau.rb', line 44 def self.generate_retorno_based_on_cnab_lines(cnab_lines) retorno = new cnab_lines.each do |line| if line.tipo_registro == "T" Line::REGISTRO_T_FIELDS.each do |attr| retorno.send(:"#{attr}=", line.send(attr)) end else Line::REGISTRO_U_FIELDS.each do |attr| retorno.send(:"#{attr}=", line.send(attr)) end end end retorno end |
.load_lines(file, options = {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/brcobranca/retorno/cnab240/itau.rb', line 12 def self.load_lines(file, = {}) = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U } = .merge() lines = Line.load_lines(file, ) lines.each_slice(2).inject([]) do |retornos, cnab_lines| validate_par_t_u!(cnab_lines) retornos << generate_retorno_based_on_cnab_lines(cnab_lines) end end |
.validate_par_t_u!(cnab_lines) ⇒ Object
Garante que cada grupo de linhas T/U produzido por .load_lines esta completo e na ordem esperada antes de virar um retorno.
Um arquivo corrompido ou truncado pode gerar um grupo com so a linha T (sem a U correspondente) ou fora de ordem; sem essa checagem, generate_retorno_based_on_cnab_lines trataria silenciosamente qualquer linha que nao seja T como se fosse U, produzindo um retorno com dados de liquidacao incorretos/parciais.
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/brcobranca/retorno/cnab240/itau.rb', line 33 def self.validate_par_t_u!(cnab_lines) return if cnab_lines.size == 2 && cnab_lines[0].tipo_registro == "T" && cnab_lines[1].tipo_registro == "U" sequencial = cnab_lines.first&.sequencial raise ArgumentError, "Par de registros T/U invalido ou incompleto no retorno " \ "do Itau (sequencial: #{sequencial.inspect})" end |