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()
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)
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
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
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
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
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
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
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 == {}
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
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 == []
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
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
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))
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
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