示例#1
0
    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()
示例#2
0
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
示例#4
0
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)
示例#5
0
    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}
示例#6
0
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