class Nfe::Helpers::NfeKey

Attributes

cnpj[R]
code[R]
number[R]
series[R]
uf[R]

Public Class Methods

new(uf, date, cnpj, series, number, code) click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 16
def initialize(uf, date, cnpj, series, number, code)
  @uf = uf
  @date = date
  @cnpj = cnpj
  @series = series
  @number = number
  @code = code
end
parse(nfe_key) click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 25
def self.parse(nfe_key)
  uf = Helpers::UfHelper.acronym(nfe_key[0..1].to_i)
  year   = nfe_key[2..3].to_i
  month  = nfe_key[4..5].to_i
  cnpj   = nfe_key[6..19]
  series = nfe_key[22..24].to_i
  number = nfe_key[25..33].to_i
  code   = nfe_key[35..42].to_i
  date = Date.new(year, month, 1)
  new(uf, date, cnpj, series, number, code)
rescue
  raise NfeKeyError.new(nfe_key)
end

Public Instance Methods

check_digit() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 59
def check_digit
  generate_check_digit(key_without_check_digit, weights)
end
emission_kind() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 55
def emission_kind
  1
end
key() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 39
def key
  "#{key_without_check_digit}#{check_digit}"
end
model() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 51
def model
  55
end
month() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 47
def month
  @date.strftime("%m")
end
year() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 43
def year
  @date.strftime("%y")
end

Private Instance Methods

code_f() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 80
def code_f
  "%08d" % code
end
generate_check_digit(values, weights) click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 88
def generate_check_digit(values, weights)
  sum = reduce_weights(values, weights)
  mod = sum % 11
  mod < 2 ? 0 : (11 - mod)
end
key_without_check_digit() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 64
def key_without_check_digit
  "#{uf_code}#{year}#{month}#{cnpj}#{model}#{series_f}#{number_f}#{emission_kind}#{code_f}"
end
number_f() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 76
def number_f
  "%09d" % number
end
reduce_weights(values, weights) click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 94
def reduce_weights(values, weights)
  sum = 0
  weights.each_index do |i|
    sum += weights[i] * values[i].to_i
  end
  sum
end
series_f() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 72
def series_f
  "%03d" % series
end
uf_code() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 68
def uf_code
  Helpers::UfHelper.code(uf)
end
weights() click to toggle source
# File lib/nfe/helpers/nfe_key.rb, line 84
def weights
  "4329876543298765432987654329876543298765432".split("").map(&:to_i)
end