Class: Provider
- Inherits:
-
Object
- Object
- Provider
- Includes:
- Mongoid::Attributes::Dynamic, Mongoid::Tree, Personable
- Defined in:
- lib/health-data-standards/models/provider.rb
Constant Summary collapse
- NPI_OID =
'2.16.840.1.113883.4.6'
- TAX_ID_OID =
'2.16.840.1.113883.4.2'
Class Method Summary collapse
- .luhn_checksum(num) ⇒ Object
-
.resolve_provider(provider_hash, patient = nil) ⇒ Object
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.
-
.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
- #npi ⇒ Object
- #npi=(an_npi) ⇒ Object
- #records(effective_date = nil) ⇒ Object
- #tin ⇒ Object
- #tin=(a_tin) ⇒ Object
Methods included from Personable
Class Method Details
.luhn_checksum(num) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/health-data-standards/models/provider.rb', line 64 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, patient = nil) ⇒ Object
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. The default implementation is to return an orphan parent (the singular provider without an NPI) if one exists. 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 hash.
88 89 90 |
# File 'lib/health-data-standards/models/provider.rb', line 88 def self.resolve_provider(provider_hash, patient=nil) Provider.where(:npi => nil).first 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
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/health-data-standards/models/provider.rb', line 50 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
#npi ⇒ Object
29 30 31 32 |
# File 'lib/health-data-standards/models/provider.rb', line 29 def npi cda_id_npi = self.cda_identifiers.where(root: NPI_OID).first cda_id_npi ? cda_id_npi.extension : nil end |
#npi=(an_npi) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/health-data-standards/models/provider.rb', line 19 def npi=(an_npi) cda_id_npi = self.cda_identifiers.where(root: NPI_OID).first if cda_id_npi cda_id_npi.extension = an_npi cda_id_npi.save! else self.cda_identifiers << CDAIdentifier.new(root: NPI_OID, extension: an_npi) end end |
#records(effective_date = nil) ⇒ Object
43 44 45 |
# File 'lib/health-data-standards/models/provider.rb', line 43 def records(effective_date=nil) Record.by_provider(self, effective_date) end |
#tin ⇒ Object
38 39 40 41 |
# File 'lib/health-data-standards/models/provider.rb', line 38 def tin cda_id_tin = self.cda_identifiers.where(root: TAX_ID_OID).first cda_id_tin ? cda_id_tin.extension : nil end |
#tin=(a_tin) ⇒ Object
34 35 36 |
# File 'lib/health-data-standards/models/provider.rb', line 34 def tin=(a_tin) self.cda_identifiers << CDAIdentifier.new(root: TAX_ID_OID, extension: a_tin) end |