QA
Overview
This document describes the QA test suite for the Eli Lilly pricing DAG. The tests validate the pricing service rates table to ensure data integrity and correctness across services, providers, and payers.
Test Structure
The test suite is organized into four main modules:
- service_tests.py - Validates service-level data (episodes, SSPs, billing codes, etc.)
- provider_tests.py - Validates provider-level data and constraints
- payer_tests.py - Validates payer and network data
- interaction_tests.py - Validates relationships between services, providers, and payers
Test Data Source
All tests query the rates table defined by:
- Schema: Configured via
schemaparameter (default:tq_dev.internal_dev_csong_consumer_pricing_service) - Table:
pricing_service_rates_eli_lilly_{rates_table_version}
Service Tests
Location: dags/consumer_engineering/eli_lilly_pricing/tasks/qa/service_tests.py
test_distinct_episode_ids
Purpose: Verify there are exactly 2 distinct episode_ids
Expected: {'AZ-001', 'AZ-002'}
test_distinct_ssp_ids
Purpose: Verify there are exactly 2 distinct ssp_ids
Expected: {'RA005', 'UN000'}
test_distinct_sub_package_ids
Purpose: Verify there are exactly 2 distinct sub_package_ids
Expected: {'161RA', '355UN'}
test_distinct_sub_package_variant_ids
Purpose: Verify there are exactly 2 distinct sub_package_variant_ids
Expected: {'161RA', '355UN'}
test_distinct_billing_codes
Purpose: Verify there are exactly 3 distinct billing_codes
Expected: {'70551', 'J0175', '96365'}
test_distinct_fee_types
Purpose: Verify there are exactly 2 distinct fee_types
Expected: {'professional', 'facility'}
test_episode_ssp_relationship
Purpose: Verify episode_id to ssp_id relationships Expected:
AZ-001→{'RA005', 'UN000'}(both SSPs)AZ-002→{'UN000'}(only UN000)
test_ssp_billing_code_relationship
Purpose: Verify ssp_id to billing_code relationships Expected:
RA005→{'70551'}UN000→{'J0175', '96365'}
test_billing_units
Purpose: Verify billing_units values for each billing_code Expected:
J0175→ 35070551→ 196365→ 1
test_asp_units
Purpose: Verify asp_unit values for each billing_code Expected:
J0175→ '2mg'70551→ NULL96365→ NULL
test_is_package_base_code
Purpose: Verify is_package_base_code is always 0
Expected: All rows have is_package_base_code = 0
Provider Tests
Location: dags/consumer_engineering/eli_lilly_pricing/tasks/qa/provider_tests.py
test_distinct_provider_types
Purpose: Verify there are exactly 3 distinct provider_types
Expected: {'Imaging Center', 'Infusion Center', 'Hospital'}
test_distinct_provider_count
Purpose: Verify there are at least 300 distinct provider_ids Expected: Count ≥ 300 providers
Payer Tests
Location: dags/consumer_engineering/eli_lilly_pricing/tasks/qa/payer_tests.py
test_distinct_payer_ids
Purpose: Verify there are exactly 4 distinct payer_ids
Expected: {'0', '510', '643', '7'}
test_distinct_payer_names
Purpose: Verify there are exactly 4 distinct payer_names
Expected: {'Medicare', 'Aetna', 'Humana', 'United Healthcare'}
test_distinct_network_ids
Purpose: Verify there are exactly 4 distinct network_ids
Expected: {3396679882140345282, -6680783754063068487, -7966117643725474756, 5229724777607702119}
test_distinct_network_names
Purpose: Verify there are exactly 2 distinct network_names
Expected: {'Medicare', 'Medicare Advantage'}
test_medicare_always_in_network
Purpose: Verify payer_id '0' (Medicare) is always in_network
Expected: All Medicare rows have in_network = True
test_all_payers_have_in_network
Purpose: Verify for each payer_id, the distinct count of in_network provider_ids is > 80% of the distinct count of total provider_ids
Expected: For each of the 4 payers, the ratio of (distinct in_network providers) / (distinct total providers) must be > 80%
Interaction Tests
Location: dags/consumer_engineering/eli_lilly_pricing/tasks/qa/interaction_tests.py
test_hospital_service_relationships
Purpose: Verify Hospital provider_type has correct service combinations Expected:
- Episodes:
{'AZ-001', 'AZ-002'} - SSPs:
{'RA005', 'UN000'} - Billing Codes:
{'70551', 'J0175', '96365'}
test_imaging_center_service_relationships
Purpose: Verify Imaging Center provider_type has correct constraints Expected:
- Episodes:
{'AZ-001'}(only AZ-001) - SSPs:
{'RA005'}(only RA005) - Billing Codes:
{'70551'}(only 70551) - Fee Types:
{'professional'}(only professional)
test_infusion_center_service_relationships
Purpose: Verify Infusion Center provider_type has correct constraints Expected:
- Episodes:
{'AZ-001', 'AZ-002'} - SSPs:
{'UN000'}(only UN000) - Billing Codes:
{'J0175', '96365'} - Fee Types:
{'professional'}(only professional)
test_service_payer_interaction
Purpose: Verify each payer has all service combinations Expected: Each of the 4 payers has:
- All episode_ids:
{'AZ-001', 'AZ-002'} - All ssp_ids:
{'RA005', 'UN000'} - All billing_codes:
{'70551', 'J0175', '96365'} - All fee_types:
{'professional', 'facility'}
test_contract_methodology_by_provider_type
Purpose: Verify contract_methodology values by provider_type Expected:
- Hospital:
{'OPPS', 'MPFS'}(both methodologies) - Imaging Center:
{'MPFS'}(only MPFS) - Infusion Center:
{'MPFS'}(only MPFS)
test_hospital_fee_type_contract_methodology
Purpose: Verify Hospital fee type to contract methodology mapping Expected:
- Professional fee →
'MPFS' - Facility fee →
'OPPS'
How to Run
Running Individual Tests
Tests are implemented as Airflow tasks and can be invoked in the DAG. Each test function is decorated with @task and returns a dictionary with test status.
Test Parameters
All tests accept the following parameters via Airflow context:
schema- Database schema (default:tq_dev.internal_dev_csong_consumer_pricing_service)rates_table_version- Table version suffix (default:test)db_conn_name- Trino connection ID (default:trino_default)
Test Results
Each test returns:
{"test": "test_name", "status": "PASSED"}
On failure, tests raise an AssertionError with details about the mismatch.
Expected Values Reference
All expected values are defined in dags/consumer_engineering/eli_lilly_pricing/answers.py
Service Values
EXPECTED_EPISODE_IDS = {'AZ-001', 'AZ-002'}
EXPECTED_SSP_IDS = {'RA005', 'UN000'}
EXPECTED_SUB_PACKAGE_IDS = {'161RA', '355UN'}
EXPECTED_SUB_PACKAGE_VARIANT_IDS = {'161RA', '355UN'}
EXPECTED_BILLING_CODES = {'70551', 'J0175', '96365'}
EXPECTED_FEE_TYPES = {'professional', 'facility'}
Billing Units
EXPECTED_BILLING_UNITS = {
'J0175': 350,
'70551': 1,
'96365': 1
}
EXPECTED_ASP_UNITS = {
'J0175': '2mg',
'70551': None,
'96365': None
}
Provider Values
EXPECTED_PROVIDER_TYPES = {'Imaging Center', 'Infusion Center', 'Hospital'}
EXPECTED_PROVIDER_COUNT = 300
Payer Values
EXPECTED_PAYER_IDS = {'0', '510', '643', '7'}
EXPECTED_PAYER_NAMES = {'Medicare', 'Aetna', 'Humana', 'United Healthcare'}
EXPECTED_NETWORK_IDS = {3396679882140345282, -6680783754063068487,
-7966117643725474756, 5229724777607702119}
EXPECTED_NETWORK_NAMES = {'Medicare', 'Medicare Advantage'}
Relationship Mappings
Episode to SSP
EPISODE_SSP_IDS = {
'AZ-001': {'RA005', 'UN000'}, # Both SSPs
'AZ-002': {'UN000'} # Only UN000
}
SSP to Billing Code
SSP_BILLING_CODES = {
'RA005': {'70551'}, # Only 70551 (imaging)
'UN000': {'J0175', '96365'} # Drug + infusion
}
Provider Type Constraints
# Hospital: All services
HOSPITAL_EPISODE_IDS = {'AZ-001', 'AZ-002'}
HOSPITAL_SSP_IDS = {'RA005', 'UN000'}
HOSPITAL_BILLING_CODES = {'70551', 'J0175', '96365'}
# Imaging Center: Only radiology services
IMAGING_CENTER_EPISODE_IDS = {'AZ-001'}
IMAGING_CENTER_SSP_IDS = {'RA005'}
IMAGING_CENTER_BILLING_CODES = {'70551'}
IMAGING_CENTER_FEE_TYPES = {'professional'}
# Infusion Center: Only infusion services
INFUSION_CENTER_EPISODE_IDS = {'AZ-001', 'AZ-002'}
INFUSION_CENTER_SSP_IDS = {'UN000'}
INFUSION_CENTER_BILLING_CODES = {'J0175', '96365'}
INFUSION_CENTER_FEE_TYPES = {'professional'}
Contract Methodologies
HOSPITAL_CONTRACT_METHODOLOGIES = {'OPPS', 'MPFS'}
IMAGING_CENTER_CONTRACT_METHODOLOGIES = {'MPFS'}
INFUSION_CENTER_CONTRACT_METHODOLOGIES = {'MPFS'}
# Hospital fee type mapping
HOSPITAL_PROFESSIONAL_CONTRACT_METHODOLOGY = 'MPFS'
HOSPITAL_FACILITY_CONTRACT_METHODOLOGY = 'OPPS'
Test Coverage Summary
Data Completeness
- ✓ All expected episodes, SSPs, and billing codes are present
- ✓ All expected provider types are present
- ✓ All expected payers and networks are present
- ✓ Minimum provider count is met
Data Relationships
- ✓ Episode-to-SSP mappings are correct
- ✓ SSP-to-billing-code mappings are correct
- ✓ Provider type constraints are enforced
- ✓ Each payer has all service combinations
Data Attributes
- ✓ Billing units are correct per code
- ✓ ASP units are correct per code
- ✓ is_package_base_code is always 0
- ✓ Medicare is always in-network
- ✓ All payers have >80% of distinct providers in-network
Contract Methodologies
- ✓ Provider types have correct methodologies
- ✓ Hospital fee types map to correct methodologies
- ✓ OPPS is used for hospital facility fees
- ✓ MPFS is used for professional fees and non-hospital providers
Maintenance Notes
Updating Expected Values
When the expected data changes, update dags/consumer_engineering/eli_lilly_pricing/answers.py accordingly.
Adding New Tests
- Add test functions to the appropriate module (service_tests.py, provider_tests.py, payer_tests.py, or interaction_tests.py)
- Use the
@taskdecorator - Follow the naming convention:
test_<description> - Return
{"test": "test_name", "status": "PASSED"}on success - Raise
AssertionErrorwith descriptive message on failure - Add expected values to
answers.pyif needed - Update this documentation