Class: Provider
- Inherits:
-
Object
- Object
- Provider
- Includes:
- Personable
- Defined in:
- lib/health-data-standards/models/provider.rb
Class Method Summary collapse
- .luhn_checksum(num) ⇒ Object
-
.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.
Instance Method Summary collapse
Methods included from Personable
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 |
.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 |