# frozen_string_literal: true require 'parseline' module Brcobranca module Retorno module Cnab400 # Formato de Retorno CNAB 400 class Unicred < Brcobranca::Retorno::Cnab400::Base extend ParseLine::FixedWidth def self.load_lines(file, options = {}) # por padrao ignora a primeira linha que é header default_options = { except: [1] } options = default_options.merge!(options) super(file, options) end fixed_width_layout do |parse| # Todos os campos descritos no documento em ordem # :tipo_de_registro, 0..0 # identificacao do registro transacao - Fixo 1 parse.field :codigo_registro, 0..0 # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj) # Identificacao da empresa no banco # :agencia_com_dv, 17..21 # :digito_agencia, 21..21 # :cedente_com_dv, 22..29 parse.field :agencia_sem_dv, 17..20 parse.field :cedente_com_dv, 22..30 # :codigo_beneficiario, 31..44 # :nosso_numero, 45..61 # identificacao do titulo no banco parse.field :nosso_numero, 45..61 # :FIXO, 62..72 BRANCOS* Este campo deve ser # desconsiderado. Ele esta reservado para melhorias. # :zeros, 73..73 # :FIXO, 74..74 # 1 - SIMPLES # :FIXO 75..84 BRANCOS* Este campo deve ser # desconsiderado. Ele esta reservado para melhorias. # :FIXO 85..87 # 019 # :zeros 88..105 # :FIXO 106..107 # 18 # :codigo_ocorrencia 108..109 parse.field :codigo_ocorrencia, 108..109 # :data_credito, 110..115 # data de credito desta liquidacao parse.field :data_credito, 110..115 # :FIXO 116..145 BRANCOS* Este campo deve ser # desconsiderado. Ele está reservado para melhorias. # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa) parse.field :data_vencimento, 146..151 # :valor_do_titulo, 152..164 # valor nominal do titulo # (ultimos 2 digitos, virgula decimal assumida) parse.field :valor_titulo, 152..164 # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao parse.field :banco_recebedor, 165..167 # :agencia_recebedora, 168..171 # agencia cobradora, # ag de liquidacao ou baixa # DV-PREFIXO AGENCIA RECEBEDORA, 172..172 # parse.field :agencia_recebedora_com_dv, 168..172 # :FIXO 173..174 BRANCOS* Este campo deve ser # desconsiderado. Ele esta reservado para melhorias. # DATA PROGRAMADA PARA REPASSE # :data, 175..180 # :tarifa_de_cobranca, 181..187 # valor da despesa de cobranca # (ultimos 2 digitos, virgula decimal assumida) parse.field :valor_tarifa, 181..187 # :FIXO 188..226 BRANCOS* Este campo deve ser # desconsiderado. Ele está reservado para melhorias. # :valor_abatimento, 227..239 # valor do abatimento concedido # (ultimos 2 digitos, virgula decimal assumida) parse.field :valor_abatimento, 227..239 # :descontos, 240..252 # valor do desconto concedid # o (ultimos 2 digitos, virgula decimal assumida) parse.field :desconto, 240..252 # :valor_recebido, 253..265 # valor lancado em conta corrente # (ultimos 2 digitos, virgula decimal assumida) parse.field :valor_recebido, 253..265 # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado # (ultimos 2 digitos, virgula decimal assumida) parse.field :juros_mora, 266..278 # :numero_controle_empresa, 279..304, # numero de controle da empresa # : Valor Liquido, 305..317 Diferença entre: Valor Pago e Valor da # Tarifa (Valor Pago – Valor da Tarifa) # :Complemento do Movimento 318..325 parse.field :motivo_ocorrencia, 318..325, lambda { |motivos| motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' } } # :Tipo de Instrucao de Origem 326..327 # :FIXO 328..393 BRANCOS* Este campo deve ser # desconsiderado. Ele está reservado para melhorias. # :numero_sequencial, 394..399 # numero sequencial no arquivo parse.field :sequencial, 394..399 end end end end end