lib/health-data-standards/models/provider.rb in health-data-standards-3.4.4 vs lib/health-data-standards/models/provider.rb in health-data-standards-3.4.5
- old
+ new
@@ -5,13 +5,13 @@
NPI_OID = '2.16.840.1.113883.4.6'
TAX_ID_OID = '2.16.840.1.113883.4.2'
field :specialty , type: String
field :phone , type: String
-
+
validates_uniqueness_of :npi, allow_blank: true
-
+
embeds_one :organization
embeds_many :cda_identifiers, class_name: "CDAIdentifier", as: :cda_identifiable
scope :by_npi, ->(an_npi){ where("cda_identifiers.root" => NPI_OID, "cda_identifiers.extension" => an_npi)}
@@ -40,25 +40,25 @@
end
def records(effective_date=nil)
Record.by_provider(self, effective_date)
end
-
+
# 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
- # https://www.cms.gov/NationalProvIdentStand/Downloads/NPIcheckdigit.pdf
+ # https://www.cms.gov/NationalProvIdentStand/Downloads/NPIcheckdigit.pdf
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
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}
@@ -70,19 +70,21 @@
else
sum+=char.to_i
end
end
sum = (9*sum)%10
-
+
return sum.to_s
end
- #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
+ # 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.
def self.resolve_provider(provider_hash)
-
+ Provider.where(:npi => nil).first
end
-end
\ No newline at end of file
+end