Class: Provider

Inherits:
Object
  • Object
show all
Includes:
Personable
Defined in:
lib/health-data-standards/models/provider.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Personable

included

Class Method Details

.luhn_checksum(num) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/health-data-standards/models/provider.rb', line 35

def self.luhn_checksum(num)
  double = {'0' => 0, '1' => 2, '2' => 4, '3' => 6, '4' => 8, '5' => 1, '6' => 3, '7' => 5, '8' => 7, '9' => 9}
  sum = 0
  num.reverse!
  num.split("").each_with_index do |char, i|
    if (i%2)==0
      sum+=double[char]
    else
      sum+=char.to_i
    end
  end
  sum = (9*sum)%10

  return sum.to_s
end

.resolve_provider(provider_hash) ⇒ Object

this is intentially left blank. When using the ProviderImporter class this method will be called if a parsed provider can not be found in the database if the parsed provider does not have an npi number associated with it. This allows applications to handle this how they see fit by redefining this method. If this method call return nil an attempt will be made to discover the Provider by name matching and if that fails a Provider will be created in the db based on the information in the parsed

hase


57
58
59
# File 'lib/health-data-standards/models/provider.rb', line 57

def self.resolve_provider(provider_hash)

end

.valid_npi?(npi) ⇒ Boolean

validate the NPI, should be 10 or 15 digits total with the final digit being a checksum using the Luhn algorithm with additional special handling as described in www.cms.gov/NationalProvIdentStand/Downloads/NPIcheckdigit.pdf



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/health-data-standards/models/provider.rb', line 21

def self.valid_npi?(npi)
  return false unless npi
  return false if npi.length != 10 and npi.length != 15
  return false if npi.gsub(/\d/, '').length > 0 # npi must be all digits
  return false if npi.length == 15 and (npi =~ /^80840/)==nil # 15 digit npi must start with 80840

  # checksum is always calculated as if 80840 prefix is present
  if npi.length==10
    npi = '80840'+npi
  end

  return luhn_checksum(npi[0,14])==npi[14]
end

Instance Method Details

#records(effective_date = nil) ⇒ Object



14
15
16
# File 'lib/health-data-standards/models/provider.rb', line 14

def records(effective_date=nil)
  Record.by_provider(self, effective_date)
end