Преглед на файлове

RPM admin query optimization

Vijayakrishnan Krishnan преди 2 седмици
родител
ревизия
88aada3cf9
променени са 1 файла, в които са добавени 27 реда и са изтрити 12 реда
  1. 27 12
      app/Http/Controllers/PracticeManagementController.php

+ 27 - 12
app/Http/Controllers/PracticeManagementController.php

@@ -1892,6 +1892,8 @@ WHERE
 
     public function rpmMatrixForAdmin(Request $request) {
 
+        if($request->get('ql')) DB::enableQueryLog();
+
         $performer = $this->performer();
 
         // abort_if($performer->pro->pro_type !== 'ADMIN' && !$performer->pro->can_view_rm_matrix, 403);
@@ -2268,6 +2270,17 @@ WHERE
         $total = $countResult[0]->count;
 
         $query = "
+WITH claim_counts AS (
+  SELECT
+    c.care_month_id,
+    COUNT(*) FILTER (WHERE cl.cpt = '99454') AS claim_454,
+    COUNT(*) FILTER (WHERE cl.cpt = '99457') AS claim_457,
+    COUNT(*) FILTER (WHERE cl.cpt = '99458') AS claim_458
+  FROM claim_line cl
+  JOIN claim c ON cl.claim_id = c.id
+  WHERE c.status <> 'CANCELLED'
+  GROUP BY c.care_month_id
+)
 SELECT client.name_first, client.name_last,
        (client.name_first || ' ' || client.name_last) as client_name,
        client.uid as client_uid,
@@ -2276,7 +2289,6 @@ SELECT client.name_first, client.name_last,
        care_month.is_client_enrolled_in_rm,
        client.most_recent_completed_mcp_note_date,
        client.most_recent_completed_mcp_note_id,
-       client.cell_number,
        client.is_assigned_cellular_bp_device,
        client.is_assigned_cellular_weight_scale_device,
        nv.raw_date as next_visit_date,
@@ -2338,11 +2350,12 @@ SELECT client.name_first, client.name_last,
            WHEN cpc.plan_type LIKE 'COMMERCIAL' THEN payer.name
            ELSE cpc.plan_type
        END) as payer_name,
-       (SELECT COUNT(*) FROM claim_line where claim_line.cpt = '99454' AND claim_line.claim_id IN (SELECT claim.id FROM claim WHERE claim.care_month_id = care_month.id AND claim.status != 'CANCELLED')) as claim_454,
-       (SELECT COUNT(*) FROM claim_line where claim_line.cpt = '99457' AND claim_line.claim_id IN (SELECT claim.id FROM claim WHERE claim.care_month_id = care_month.id AND claim.status != 'CANCELLED')) as claim_457,
-       (SELECT COUNT(*) FROM claim_line where claim_line.cpt = '99458' AND claim_line.claim_id IN (SELECT claim.id FROM claim WHERE claim.care_month_id = care_month.id AND claim.status != 'CANCELLED')) as claim_458,
+       cc.claim_454,
+       cc.claim_457,
+       cc.claim_458,
        {$genericBillIdColumns}
 FROM care_month join client on care_month.client_id = client.id
+    LEFT JOIN claim_counts cc ON cc.care_month_id = care_month.id
     left join note mrnote on client.most_recent_completed_mcp_note_id = mrnote.id
     left join pro mcpPro on care_month.mcp_pro_id = mcpPro.id
     left join pro rmmPro on care_month.rmm_pro_id = rmmPro.id
@@ -2373,19 +2386,16 @@ WHERE
         $commonStatSQL = "
 SELECT COUNT(*)
 FROM care_month join client on care_month.client_id = client.id
-    left join note mrnote on client.most_recent_completed_mcp_note_id = mrnote.id
-    left join pro mcpPro on care_month.mcp_pro_id = mcpPro.id
-    left join pro rmmPro on care_month.rmm_pro_id = rmmPro.id
-    left join client_primary_coverage cpc on client.effective_client_primary_coverage_id = cpc.id
-    left join payer on cpc.commercial_payer_id = payer.id
-    {$genericBillJoinClause}
 WHERE
         ";
 
         $stats['withMeasOn'] = 'N/A';
         $v = $request->input('wmo') ?: date('Y-m-d');
         $statQuery = "$commonStatSQL
-(SELECT COUNT(mstat.id) FROM measurement mstat WHERE mstat.care_month_id = care_month.id AND mstat.ts_date_time::date = '$v' AND mstat.is_cellular_zero IS FALSE) > 0 AND
+EXISTS (SELECT 1 FROM measurement mstat WHERE mstat.care_month_id = care_month.id 
+    AND mstat.ts_date_time >= '$v 00:00:00' 
+    AND mstat.ts_date_time <= '$v 23:59:59'
+    AND mstat.is_cellular_zero IS FALSE) AND
   " . (count($conditions) > 0 ? implode(" AND ", $conditions) : '1') . "
 ";
         $statResult = DB::select($statQuery);
@@ -2394,7 +2404,10 @@ WHERE
         $stats['noMeasOn'] = 'N/A';
         $v = $request->input('nmo') ?: date('Y-m-d');
         $statQuery = "$commonStatSQL
-(SELECT COUNT(mstat.id) FROM measurement mstat WHERE mstat.care_month_id = care_month.id AND mstat.ts_date_time::date = '$v' AND mstat.is_cellular_zero IS FALSE) = 0 AND
+EXISTS (SELECT 1 FROM measurement mstat WHERE mstat.care_month_id = care_month.id 
+    AND mstat.ts_date_time >= '$v 00:00:00' 
+    AND mstat.ts_date_time <= '$v 23:59:59'
+    AND mstat.is_cellular_zero IS FALSE) AND
   " . (count($conditions) > 0 ? implode(" AND ", $conditions) : '1') . "
 ";
         $statResult = DB::select($statQuery);
@@ -2421,6 +2434,8 @@ WHERE
         $statResult = DB::select($statQuery);
         $stats['gt40M'] = $statResult[0]->count;
 
+        if($request->get('ql')) dd(DB::getQueryLog());
+
         return view('app.practice-management.rpm-matrix-for-admin', compact('patients', 'daysRemaining', 'careMonthStart', 'paginator', 'perPage', 'stats'));
     }