def _get_discharge_dates_by_provider(self, tins, npis, bene_sks): """Query the IDR to find discharge dates for the given providers and beneficiaries.""" logger.debug( 'Querying IDR for discharge dates for {} providers.'.format( len(tins))) if not tins or not npis or not bene_sks: return discharge_date_query = idr_queries.get_discharge_date_query( tins=tins, npis=npis, discharge_period=self.DISCHARGE_PERIOD, hidden_codes=self.HIDDEN_CODES) rows = execute.execute(discharge_date_query) discharge_dates_by_beneficiary = collections.defaultdict(set) if not rows: logger.debug('No discharge dates found.') for row in rows: discharge_dates_by_beneficiary[row['bene_sk']].add( row['clm_line_from_dt']) # For any beneficiaries with discharges, record their discharge dates. for bene_sk in discharge_dates_by_beneficiary: self.discharge_dates_by_beneficiary[bene_sk].update( discharge_dates_by_beneficiary[bene_sk]) # If some beneficiaries were found to have no discharges, record that fact. for bene_sk in bene_sks: if bene_sk not in self.discharge_dates_by_beneficiary: self.discharge_dates_by_beneficiary[bene_sk] = set()
def query_claims_from_teradata_batch_provider(provider_tins, provider_npis, start_date, end_date, session=None): """ Query claims table for the analyzer for a batch of providers. Args: provider_tin_list ([str]): List of tax identification numbers to query for. provider_npi_list ([str]): List of national provider identification numbers to query for. start_date (date): Start date of data to load. end_date (date): End date of data to load. session (session): Teradata session to use to access IDR. Returns: (column_names, rows) (list(str), list(tuple)): Tuple of list of headers, and list of tuples containing claim line values. """ logger.debug('Query claims from TERADATA in env - {}.'.format( config.get('environment'))) query = idr_queries.get_access_layer_batch_query(tins=provider_tins, npis=provider_npis, start_date=start_date, end_date=end_date) rows = execute.execute(query, session) if rows: columns = rows[0].columns return (columns, rows) return ([], rows)
def _get_mssa_date_ranges(self, claims): """ Get mssa_date ranges by querying the IDR. Returns a dict of {bene_sk: [date_ranges]} that will need to be merged to keep only non-overlapping intervals. """ bene_sks = {claim.bene_sk for claim in claims} start_date = config.get('calculation.start_date') end_date = config.get('calculation.end_date') mssa_query = idr_queries.get_mssa_query( bene_sks=bene_sks, encounter_codes=self.procedure_codes, start_date=start_date, end_date=end_date) rows = execute.execute(mssa_query) if not rows: logger.error('No MSSA date found despite provider ' 'having submitted quality codes for Measure 407.') return {} mssa_date_ranges = collections.defaultdict(list) for row in rows: mssa_date_ranges[row['bene_sk']].append( DateRange(row['min_date'], row['max_date'])) return mssa_date_ranges
def _drop_table_if_exists(table_name, database_name): """Drop table if it exists.""" if _if_table_exists(table_name, database_name): query = DROP_TABLE_BASE_QUERY.format( database=database_name, table=table_name ) logger.debug('Dropping table {}.'.format(table_name)) return execute.execute(query)
def _get_ct_scan_beneficiaries_and_dates(self, bene_date_set): """Query the IDR for matching CT scans for the given beneficiaries on the given dates.""" if not bene_date_set: return {} logger.debug('Query IDR for CT scan dates.') ct_scan_query = idr_queries.get_ct_scan_query( bene_date_set=bene_date_set) rows = execute.execute(ct_scan_query) return {(row['bene_sk'], row['clm_line_from_dt']) for row in rows}
def _if_table_exists(table_name, database_name): """Check if the given table exists.""" query = CHECK_IF_TABLE_EXISTS_BASE_QUERY.format(table=table_name, database=database_name) rows = execute.execute(query) return len(rows) > 0