Esempio n. 1
0
 def setup(self):
     """Setup values for lines to claim tests."""
     self.split_claim_columns = row_handling.csv_to_query_output(
         SPLIT_CLAIM_CSV_PATH)[0]
     self.split_claim_rows = row_handling.csv_to_query_output(
         SPLIT_CLAIM_CSV_PATH)[1]
     self.claim_reader = claim_reader.ClaimsDataReader()
Esempio n. 2
0
def test_assert_split_claims_have_same_header_level_values():
    """The method should raise an error if two claims do not have the same header fields."""
    reader = claim_reader.ClaimsDataReader()
    sample_rows = test_helpers.fetch_sample_teradata_rows()
    with pytest.raises(AssertionError):
        reader._lines_to_claim(claim_lines=sample_rows,
                               columns=sample_rows[0].columns)
Esempio n. 3
0
    def __init__(
            self,
            start_date,
            end_date,
            measures,
            infer_performance_period):
        """
        Initialize Processor.

        :param start_date: Processing start date
        :type start_date: date
        :param end_date: Processing end date
        :type end_date: date
        :param measures: Measures to calcuate
        :type measures: list
        """
        self.start_date = start_date
        self.end_date = end_date
        self.measures = measures
        self.measure_calculators = measure_mapping.get_measure_calculators(measures)
        self.measure_definitions = [
            calculator.measure_definition for calculator in self.measure_calculators.values()
        ]
        self.infer_performance_period = infer_performance_period
        self.claim_reader = claim_reader.ClaimsDataReader()
        self.session = teradata_connector.teradata_connection()
        self.count = 0
        self.count_no_claims = 0
        self.count_errors = 0
Esempio n. 4
0
def get_single_claim_with_quality_codes():
    """Load single claim list from test_single_claim.csv."""
    reader = claim_reader.ClaimsDataReader()
    claims = reader.load_from_csv(
        csv_path='tests/assets/test_single_claim.csv',
        provider_tin='tax_num',
        provider_npi='npi_num')
    return claims
Esempio n. 5
0
def test_assert_split_claims_have_same_header_level_values_different_birth_date(
):
    """The method should NOT raise an error if two claims do not have the same birth date."""
    reader = claim_reader.ClaimsDataReader()
    columns, rows = row_handling.csv_to_query_output(SPLIT_CLAIM_CSV_PATH)
    # Change the first birth date so that the two are different.
    rows[0]['clm_ptnt_birth_dt'] = datetime.date(1000, 1, 1)
    claim = reader._lines_to_claim(claim_lines=rows, columns=columns)
    assert claim
Esempio n. 6
0
    def test_two_claim_data_reader(self):
        """Test the merging of claim lines into claims."""
        reader = claim_reader.ClaimsDataReader()
        claims = reader.load_from_csv(TWO_CLAIMS_CSV_PATH_FROM_CSV, 'tax_num',
                                      'npi_num')

        assert len(claims) == 2
        for claim in claims:
            assert len(claim.claim_lines) == 2
Esempio n. 7
0
    def test_single_claim_data_reader(self):
        """Test the parsing of a single claim into the Claim model object."""
        reader = claim_reader.ClaimsDataReader()
        claims = reader.load_from_csv(SINGLE_CLAIM_CSV_PATH, 'tax_num',
                                      'npi_num')

        assert len(claims) == 1
        claim = claims[0]
        assert len(claim.claim_lines) == 2
        assert len(claim.dx_codes) == 12
        assert len(claim.claim_lines[0].mdfr_cds) == 5
Esempio n. 8
0
    def test_query_returns_empty(self, mock_query_claims_from_teradata_batch):
        """Verify list of claims is empty if query returns no results."""
        mock_query_claims_from_teradata_batch.return_value = row_handling.csv_to_query_output(
            EMPTY_QUERY_CSV_PATH)

        reader = claim_reader.ClaimsDataReader()
        claims = reader.load_batch_from_db(provider_tin_list=['tax_num'],
                                           provider_npi_list=['npi_num'],
                                           start_date='start_date',
                                           end_date='end_date')

        assert len(claims) == 0
Esempio n. 9
0
    def test_batch_load_no_data(self, mock_config,
                                query_claims_from_teradata_batch_provider):
        """Test that when hide_sensitive_information is true, the rows are anonymized."""
        mock_config.get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': False})
        query_claims_from_teradata_batch_provider.return_value = ([], None)

        reader = claim_reader.ClaimsDataReader()
        output = reader.load_batch_from_db(['tax_num'], ['npi_num'],
                                           datetime.date.today(),
                                           datetime.date.today())

        assert output == {}
Esempio n. 10
0
    def test_batch_load(self, mock_config,
                        query_claims_from_teradata_batch_provider):
        """Test that when hide_sensitive_information is true, the rows are anonymized."""
        mock_config.get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': False})
        query_claims_from_teradata_batch_provider.return_value = row_handling.csv_to_query_output(
            TWO_CLAIMS_CSV_PATH)

        reader = claim_reader.ClaimsDataReader()
        output = reader.load_batch_from_db(['tax_num'], ['npi_num'],
                                           datetime.date.today(),
                                           datetime.date.today())

        assert len(output[('tax_num', 'npi_num')]) == 2
Esempio n. 11
0
    def test_query_hides_sensitive_information_fewer_than_fifty(
            self, mock_config, mock_query_claims_from_teradata_batch):
        """Test case when fewer than 50 claims and hide_sensitive_information is true."""
        mock_config.get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': True})
        provider_identifier = ('tax_num', 'npi_num')
        sample_columns, sample_rows = row_handling.csv_to_query_output(
            TWO_CLAIMS_CSV_PATH)
        mock_query_claims_from_teradata_batch.return_value = (sample_columns,
                                                              sample_rows)

        reader = claim_reader.ClaimsDataReader()
        output = reader.load_batch_from_db(
            ['tax_num'], ['npi_num'], datetime.date.today(),
            datetime.date.today())[provider_identifier]

        assert output == []
Esempio n. 12
0
    def test_two_claim_data_reader(self, mock_query_claims_from_teradata_batch,
                                   get):
        """Test the merging of claim lines into claims."""
        mock_query_claims_from_teradata_batch.return_value = row_handling.csv_to_query_output(
            TWO_CLAIMS_CSV_PATH)
        get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': False})
        provider_identifier = ('tax_num', 'npi_num')

        reader = claim_reader.ClaimsDataReader()
        claims = reader.load_batch_from_db(
            provider_tin_list=['tax_num'],
            provider_npi_list=['npi_num'],
            start_date='start_date',
            end_date='end_date')[provider_identifier]

        assert len(claims) == 2
        for claim in claims:
            assert len(claim.claim_lines) == 2
Esempio n. 13
0
    def test_single_claim_data_reader(self,
                                      mock_query_claims_from_teradata_batch,
                                      get):
        """Test the parsing of a single claim into the Claim model object."""
        mock_query_claims_from_teradata_batch.return_value = row_handling.csv_to_query_output(
            SINGLE_CLAIM_CSV_PATH)
        get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': False})
        provider_identifier = ('tax_num', 'npi_num')

        reader = claim_reader.ClaimsDataReader()
        claims = reader.load_batch_from_db(
            provider_tin_list=['tax_num'],
            provider_npi_list=['npi_num'],
            start_date='start_date',
            end_date='end_date')[provider_identifier]

        assert len(claims) == 1
        claim = claims[0]
        assert len(claim.claim_lines) == 2
        assert len(claim.dx_codes) == 12
        assert len(claim.claim_lines[0].mdfr_cds) == 5
Esempio n. 14
0
    def test_query_hides_sensitive_information_more_than_fifty(
            self, mock_config, mock_query_claims_from_teradata_batch):
        """Test case when more than 50 claims and hide_sensitive_information is true."""
        mock_config.get.side_effect = mocking_config.config_side_effect(
            {'hide_sensitive_information': True})
        provider_identifier = ('tax_num', 'npi_num')
        sample_columns, sample_rows = row_handling.csv_to_query_output(
            TWO_CLAIMS_CSV_PATH)
        # Need > 50 rows for them to pass through anonymization.
        sample_rows = sample_rows * 50
        mock_query_claims_from_teradata_batch.return_value = (sample_columns,
                                                              sample_rows)

        reader = claim_reader.ClaimsDataReader()
        output = reader.load_batch_from_db(
            ['tax_num'], ['npi_num'], datetime.date.today(),
            datetime.date.today())[provider_identifier]

        # The same number of claims should be returned.
        assert len(output) == 2 * 50  # Two claims in initial csv.
        # The values of the fields in the returned rows should be different.
        assert output[0]['clm_ptnt_birth_dt'] != sample_rows[0][
            'clm_ptnt_birth_dt']
def _main(**kwargs):
    """Calculate measures for a given provider's data."""
    if kwargs['measure'] in ['046', '407', '415', '416']:
        raise NotImplementedError(
            'Unable to calulate measure {} at this time. Calculation requires access to IDR.'
        )

    reader = claim_reader.ClaimsDataReader()
    claims = reader.load_from_csv(kwargs['csv_input_path'],
                                  provider_tin=kwargs['provider_tin'],
                                  provider_npi=kwargs['provider_npi'])

    measure = measure_mapping.get_measure_calculator(kwargs['measure'])

    if all(key in kwargs for key in ['start_date', 'end_date']):
        claims = claim_filtering.filter_claims_by_date(
            claims_data=claims,
            from_date=kwargs['start_date'],
            to_date=kwargs['end_date'],
        )

    results = measure.execute(claims)

    print(json.dumps(results, indent=4))
Esempio n. 16
0
 def test_filter_by_provider_tax(self):
     """Verify the claim is excluded if the provider npi does not match the one provided."""
     reader = claim_reader.ClaimsDataReader()
     claims = reader.load_from_csv(SINGLE_CLAIM_CSV_PATH,
                                   'non_matching_tax_num', 'npi_num')
     assert len(claims) == 0
Esempio n. 17
0
 def test_query_returns_empty(self):
     """Verify list of claims is empty if csv contains no results."""
     reader = claim_reader.ClaimsDataReader()
     claims = reader.load_from_csv(EMPTY_QUERY_CSV_PATH, 'tax_num',
                                   'npi_num')
     assert len(claims) == 0