Skip to Content
ExamplesQuality Reporting

Quality Reporting Example

Scenario: Multi-state healthcare network needs to generate QRDA Category III aggregate quality reports for CMS submission. Data sources include a FHIR server for clinical data and an internal PostgreSQL database for claims and enrollment data.

The Challenge

  • FHIR Server: Contains clinical data (Patient, Encounter, Observation, Condition) but missing enrollment dates
  • Internal Database: Custom schema with member enrollment periods, risk adjustment scores, and claims data
  • QRDA3 Requirements: XML format with specific measure stratifications, risk adjustments, and performance rates
  • Must aggregate data across 47 hospitals and 200+ clinics
  • CMS validation requires exact XML schema compliance

Wave Solution

1. Data Sources Analyzed:

  • FHIR Server Profile: Wave analyzed the FHIR endpoints and identified available resources
  • Database Schema Profile: Wave reverse-engineered the PostgreSQL tables including:
    • member_enrollment (enrollment periods, plan types, risk scores)
    • claims_summary (utilization patterns, cost data)
    • quality_gaps (care gap identification, outreach history)
  • QRDA3 Template Profile: Wave parsed the CMS XML schema and HL7 CDA requirements

2. Complex Aggregation Logic:

Data SourceWave-Generated TransformationQRDA3 Output
FHIR Patient + DB enrollmentJoin on member_id, filter by reporting period<patientRole> with enrollment verification
FHIR Observation + DB claimsCorrelate lab values with claims dates<observation> with financial context
Multiple FHIR Encounters + DBAggregate by provider, adjust for risk scores<organizer> with stratified performance rates

3. Generated QRDA3 Pipeline:

def generate_cms_qrda3_report(reporting_period: str) -> str: """ Generate QRDA Category III aggregate report for CMS submission Generated by Wave from FHIR server, PostgreSQL DB, and QRDA3 specs """ # Step 1: Extract clinical data from FHIR server fhir_patients = fetch_patients_by_period(reporting_period) fhir_observations = fetch_observations_by_period(reporting_period) # Step 2: Join with internal database enrollment_data = query_enrollment_database(reporting_period) risk_scores = query_risk_adjustment_scores(reporting_period) # Step 3: Perform complex aggregations eligible_population = [] for patient in fhir_patients: # Verify enrollment eligibility enrollment = enrollment_data.get(patient['id']) if not enrollment or not is_enrolled_during_period(enrollment, reporting_period): continue # Calculate risk-adjusted measures patient_risk_score = risk_scores.get(patient['id'], 1.0) hba1c_values = get_patient_hba1c_values(patient['id'], fhir_observations) if hba1c_values: risk_adjusted_control = calculate_risk_adjusted_control( hba1c_values, patient_risk_score ) eligible_population.append({ 'patient_id': patient['id'], 'risk_score': patient_risk_score, 'performance_met': risk_adjusted_control }) # Step 4: Generate stratified performance rates stratifications = { 'age_18_44': [p for p in eligible_population if 18 <= get_age(p) < 45], 'age_45_64': [p for p in eligible_population if 45 <= get_age(p) < 65], 'age_65_plus': [p for p in eligible_population if get_age(p) >= 65] } # Step 5: Build QRDA3 XML with CMS schema compliance qrda3_xml = build_qrda3_document( reporting_period=reporting_period, eligible_population=len(eligible_population), stratifications=stratifications, performance_rates=calculate_stratified_rates(stratifications) ) # Step 6: Validate against CMS schema validate_qrda3_schema(qrda3_xml) return qrda3_xml def build_qrda3_document(reporting_period, eligible_population, stratifications, performance_rates): """Generate CMS-compliant QRDA Category III XML""" xml_template = ''' <ClinicalDocument xmlns="urn:hl7-org:v3"> <realmCode code="US"/> <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/> <templateId root="2.16.840.1.113883.10.20.27.1.2"/> <component> <structuredBody> <component> <section> <templateId root="2.16.840.1.113883.10.20.27.2.1"/> <entry> <organizer classCode="CLUSTER" moodCode="EVN"> <statusCode code="completed"/> <!-- Risk-adjusted performance rates by stratification --> {stratified_performance_xml} </organizer> </entry> </section> </component> </structuredBody> </component> </ClinicalDocument> ''' # Generate stratified performance XML sections stratified_xml = generate_stratification_xml(stratifications, performance_rates) return xml_template.format( stratified_performance_xml=stratified_xml )

Results

  • ✅ Automated QRDA3 generation from 2 disparate data sources
  • ✅ 100% CMS schema validation compliance on first submission
  • ✅ Risk-adjusted stratifications calculated automatically
  • ✅ Reduced 40-hour manual report preparation to 15 minutes

Key Takeaways

Multi-Source Data Integration

Wave seamlessly combines FHIR clinical data with internal database systems, automatically handling joins and data correlation.

Regulatory Compliance Automation

Generated XML output passes CMS validation requirements without manual schema adjustments.

Risk Adjustment Logic

Complex risk stratification calculations are generated automatically from your business rules and CMS specifications.

Performance at Scale

Handle millions of records across hundreds of facilities with optimized aggregation logic.