@@ -294,3 +294,235 @@ RETURNS TABLE(patient_id text) AS $$
294294 AND o .effective_end <= p_mp_end
295295 AND (p_subject IS NULL OR o .patient_id = p_subject)
296296$$ LANGUAGE sql STABLE;
297+
298+ -- ============================================================
299+ -- CMS165 aggregate wrapper
300+ -- PL/pgSQL wrapper that sets enable_nestloop = off before running
301+ -- the CMS165 aggregate query. On the legacy path (JSONB views)
302+ -- the PG planner mis-estimates CTE cardinality by 15,000x and
303+ -- picks nested-loop joins that take 75 s at 100 K patients.
304+ -- SET LOCAL inside this function forces hash joins → 7 s.
305+ -- ============================================================
306+ DROP FUNCTION IF EXISTS cms165_aggregate(timestamptz , timestamptz );
307+
308+ CREATE OR REPLACE FUNCTION cms165_aggregate (
309+ p_start timestamptz ,
310+ p_end timestamptz
311+ )
312+ RETURNS TABLE (
313+ initial_population bigint ,
314+ denominator bigint ,
315+ denominator_exclusion bigint ,
316+ numerator bigint ,
317+ denominator_minus_exclusion bigint ,
318+ measure_score numeric
319+ ) AS $$
320+ BEGIN
321+ SET LOCAL enable_nestloop = off;
322+
323+ RETURN QUERY
324+ WITH mp AS (
325+ SELECT
326+ p_start AS mp_start,
327+ p_end AS mp_end,
328+ p_start + interval ' 6 months' AS mp_6mo
329+ ),
330+
331+ qualifying_encounters AS (
332+ SELECT DISTINCT e .patient_id
333+ FROM encounter_flat e
334+ JOIN concepts c ON c .system = e .type_system AND c .code = e .type_code
335+ AND c .valueset_url IN (
336+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001' ,
337+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1240' ,
338+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1025' ,
339+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1023' ,
340+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016' ,
341+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089' ,
342+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1080'
343+ )
344+ CROSS JOIN mp
345+ WHERE e .status = ' finished'
346+ AND e .period_start >= mp .mp_start AND e .period_start <= mp .mp_end
347+ ),
348+
349+ essential_hypertension AS (
350+ SELECT DISTINCT c .patient_id
351+ FROM condition_flat c
352+ JOIN concepts vs ON vs .system = c .code_system AND vs .code = c .code
353+ AND vs .valueset_url = ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.104.12.1011'
354+ CROSS JOIN mp
355+ WHERE (c .verification_status IS NULL OR c .verification_status IN (' confirmed' ,' unconfirmed' ,' provisional' ,' differential' ))
356+ AND c .onset_date < mp .mp_6mo
357+ AND (c .abatement_date IS NULL OR c .abatement_date >= mp .mp_start )
358+ ),
359+
360+ initial_pop AS (
361+ SELECT p .id AS patient_id
362+ FROM patient_flat p
363+ CROSS JOIN mp
364+ WHERE EXTRACT(YEAR FROM AGE(mp .mp_end , p .birth_date ::date )) BETWEEN 18 AND 85
365+ AND p .id IN (SELECT patient_id FROM qualifying_encounters)
366+ AND p .id IN (SELECT patient_id FROM essential_hypertension)
367+ ),
368+
369+ hospice AS (SELECT h.* FROM mp, LATERAL shared_hospice(mp .mp_start , mp .mp_end ) h),
370+
371+ pregnancy_renal AS (
372+ SELECT DISTINCT c .patient_id FROM condition_flat c
373+ JOIN concepts vs ON vs .system = c .code_system AND vs .code = c .code
374+ AND vs .valueset_url IN (
375+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.378' ,
376+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.353' ,
377+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.109.12.1029' ,
378+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1002'
379+ )
380+ CROSS JOIN mp
381+ WHERE (c .verification_status IS NULL OR c .verification_status IN (' confirmed' ,' unconfirmed' ,' provisional' ,' differential' ))
382+ AND c .onset_date <= mp .mp_end
383+ AND (c .abatement_date IS NULL OR c .abatement_date >= mp .mp_start )
384+ ),
385+
386+ esrd_procedures AS (
387+ SELECT DISTINCT pr .patient_id FROM procedure_flat pr
388+ JOIN concepts vs ON vs .system = pr .code_system AND vs .code = pr .code
389+ AND vs .valueset_url IN (
390+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.109.12.1012' ,
391+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.109.12.1013'
392+ )
393+ CROSS JOIN mp
394+ WHERE pr .status = ' completed'
395+ AND pr .performed_end <= mp .mp_end
396+ ),
397+
398+ esrd_encounter AS (
399+ SELECT DISTINCT e .patient_id FROM encounter_flat e
400+ JOIN concepts vs ON vs .system = e .type_system AND vs .code = e .type_code
401+ AND vs .valueset_url = ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.109.12.1014'
402+ CROSS JOIN mp
403+ WHERE e .status = ' finished' AND e .period_start <= mp .mp_end
404+ ),
405+
406+ palliative AS (SELECT h.* FROM mp, LATERAL shared_palliative(mp .mp_start , mp .mp_end ) h),
407+
408+ patients_66_plus AS (
409+ SELECT p .id AS patient_id, EXTRACT(YEAR FROM AGE(mp .mp_end , p .birth_date ::date )) AS age
410+ FROM patient_flat p CROSS JOIN mp
411+ WHERE EXTRACT(YEAR FROM AGE(mp .mp_end , p .birth_date ::date )) >= 66
412+ ),
413+ has_frailty AS (SELECT h.* FROM mp, LATERAL shared_has_frailty(mp .mp_start , mp .mp_end ) h),
414+ advanced_illness AS (SELECT h.* FROM mp, LATERAL shared_advanced_illness(mp .mp_start , mp .mp_end ) h),
415+ dementia_meds AS (SELECT h.* FROM mp, LATERAL shared_dementia_meds(mp .mp_start , mp .mp_end ) h),
416+ advanced_illness_frailty AS (
417+ SELECT p66 .patient_id FROM patients_66_plus p66
418+ JOIN has_frailty f ON f .patient_id = p66 .patient_id
419+ LEFT JOIN advanced_illness ai ON ai .patient_id = p66 .patient_id
420+ LEFT JOIN dementia_meds dm ON dm .patient_id = p66 .patient_id
421+ WHERE p66 .age BETWEEN 66 AND 80
422+ AND (ai .patient_id IS NOT NULL OR dm .patient_id IS NOT NULL )
423+ UNION
424+ SELECT p66 .patient_id FROM patients_66_plus p66
425+ JOIN has_frailty f ON f .patient_id = p66 .patient_id
426+ WHERE p66 .age >= 81
427+ ),
428+
429+ nursing_home AS (SELECT h.* FROM mp, LATERAL shared_nursing_home(mp .mp_start , mp .mp_end ) h),
430+
431+ den_excl AS (
432+ SELECT patient_id FROM hospice
433+ UNION SELECT patient_id FROM pregnancy_renal
434+ UNION SELECT patient_id FROM esrd_procedures
435+ UNION SELECT patient_id FROM esrd_encounter
436+ UNION SELECT patient_id FROM palliative
437+ UNION SELECT patient_id FROM advanced_illness_frailty
438+ UNION SELECT patient_id FROM nursing_home
439+ ),
440+
441+ bp_observations AS (
442+ SELECT o .patient_id , o .id AS obs_id, o .effective_date , o .encounter_id ,
443+ o .systolic , o .diastolic
444+ FROM observation_bp_flat o
445+ CROSS JOIN mp
446+ WHERE o .status IN (' final' , ' amended' , ' corrected' )
447+ AND o .effective_date >= mp .mp_start
448+ AND o .effective_date <= mp .mp_end
449+ ),
450+
451+ disqualifying_encounters AS (
452+ SELECT e .id AS encounter_id, e .patient_id , e .period_start , e .period_end
453+ FROM encounter_flat e
454+ JOIN concepts vs ON vs .system = e .type_system AND vs .code = e .type_code
455+ AND vs .valueset_url IN (
456+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307' ,
457+ ' http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1010'
458+ )
459+ WHERE e .status = ' finished'
460+ UNION
461+ SELECT e .id , e .patient_id , e .period_start , e .period_end
462+ FROM encounter_flat e
463+ WHERE e .status = ' finished'
464+ AND e .class_code IN (' EMER' , ' IMP' , ' ACUTE' , ' NONAC' , ' PRENC' , ' SS' )
465+ ),
466+
467+ qualifying_bp AS (
468+ SELECT bp.*
469+ FROM bp_observations bp
470+ WHERE NOT EXISTS (
471+ SELECT 1 FROM disqualifying_encounters de WHERE de .encounter_id = bp .encounter_id
472+ )
473+ AND NOT EXISTS (
474+ SELECT 1 FROM disqualifying_encounters de
475+ WHERE de .patient_id = bp .patient_id
476+ AND bp .effective_date ::date >= de .period_start ::date
477+ AND bp .effective_date ::date <= de .period_end ::date
478+ )
479+ ),
480+
481+ most_recent_bp_day AS (
482+ SELECT patient_id, MAX (effective_date::date ) AS bp_date
483+ FROM qualifying_bp
484+ GROUP BY patient_id
485+ ),
486+
487+ bp_on_most_recent_day AS (
488+ SELECT qbp .patient_id ,
489+ MIN (qbp .systolic ) AS lowest_systolic,
490+ MIN (qbp .diastolic ) AS lowest_diastolic
491+ FROM qualifying_bp qbp
492+ JOIN most_recent_bp_day mrd ON mrd .patient_id = qbp .patient_id
493+ AND qbp .effective_date ::date = mrd .bp_date
494+ GROUP BY qbp .patient_id
495+ ),
496+
497+ num AS (
498+ SELECT patient_id
499+ FROM bp_on_most_recent_day
500+ WHERE lowest_systolic < 140 AND lowest_diastolic < 90
501+ ),
502+
503+ measure_results AS (
504+ SELECT
505+ p .patient_id ,
506+ 1 AS in_initial_population,
507+ 1 AS in_denominator,
508+ CASE WHEN de .patient_id IS NOT NULL THEN 1 ELSE 0 END AS in_exclusion,
509+ CASE WHEN de .patient_id IS NULL AND n .patient_id IS NOT NULL THEN 1 ELSE 0 END AS in_numerator
510+ FROM initial_pop p
511+ LEFT JOIN den_excl de ON de .patient_id = p .patient_id
512+ LEFT JOIN num n ON n .patient_id = p .patient_id
513+ )
514+
515+ SELECT
516+ COUNT (* )::bigint ,
517+ COUNT (* )::bigint ,
518+ SUM (in_exclusion)::bigint ,
519+ SUM (in_numerator)::bigint ,
520+ (COUNT (* ) - SUM (in_exclusion))::bigint ,
521+ CASE
522+ WHEN COUNT (* ) - SUM (in_exclusion) > 0
523+ THEN ROUND(SUM (in_numerator)::numeric / (COUNT (* ) - SUM (in_exclusion)), 4 )
524+ ELSE 0
525+ END
526+ FROM measure_results;
527+ END;
528+ $$ LANGUAGE plpgsql;
0 commit comments