|
@@ -806,13 +806,13 @@ class PracticeManagementController extends Controller
|
|
|
$filters = $request->all();
|
|
|
|
|
|
$from_date = $request->get('from_date');
|
|
|
- if(!$from_date) {
|
|
|
- $from_date = '2010-01-01';
|
|
|
- }
|
|
|
+// if(!$from_date) {
|
|
|
+// $from_date = '2010-01-01';
|
|
|
+// }
|
|
|
$to_date = $request->get('to_date');
|
|
|
- if(!$to_date){
|
|
|
- $to_date = '2900-12-31';
|
|
|
- }
|
|
|
+// if(!$to_date){
|
|
|
+// $to_date = '2900-12-31';
|
|
|
+// }
|
|
|
|
|
|
|
|
|
//TODO sanitize inputs
|
|
@@ -830,7 +830,9 @@ class PracticeManagementController extends Controller
|
|
|
(SELECT id FROM note WHERE note.hcp_pro_id = pro.id AND is_cancelled = false ORDER BY created_at DESC LIMIT 1) as last_note_id,
|
|
|
(SELECT note.created_at FROM note WHERE note.hcp_pro_id = pro.id AND note.is_cancelled = false ORDER BY note.created_at DESC LIMIT 1) as last_note_created_at,
|
|
|
(SELECT COUNT(*) FROM note WHERE note.hcp_pro_id = pro.id AND note.is_cancelled = false AND created_at::DATE >= '${startOfCurrentMonth}'::DATE AND created_at::DATE <= '${endOfCurrentMonth}'::DATE ) AS notes_this_month,
|
|
|
- (SELECT COUNT(*) FROM note WHERE note.hcp_pro_id = pro.id AND note.is_cancelled = false AND created_at >= '${from_date}'::DATE AND created_at <= '${to_date}'::DATE ) AS notes_this_period");
|
|
|
+ (SELECT COUNT(*) FROM client WHERE client.mcp_pro_id = pro.id AND client.client_engagement_status_category <> 'DUMMY' AND client.client_engagement_status_category <> 'DUPLICATE') as total_client_count,
|
|
|
+ (SELECT COUNT(*) FROM client WHERE client.mcp_pro_id = pro.id AND client.client_engagement_status_category <> 'DUMMY' AND client.client_engagement_status_category <> 'DUPLICATE' AND client.most_recent_completed_mcp_note_date >= (NOW() - interval '60 days')::DATE) as active_client_count
|
|
|
+ " . (!!$from_date && !!$to_date ? ",(SELECT COUNT(*) FROM note WHERE note.hcp_pro_id = pro.id AND note.is_cancelled = false AND created_at::DATE >= '${from_date}'::DATE AND created_at::DATE <= '${to_date}'::DATE ) AS notes_this_period" : ""));
|
|
|
|
|
|
$prosIDs = $request->get('pros_ids');
|
|
|
if($prosIDs){
|
|
@@ -838,7 +840,11 @@ class PracticeManagementController extends Controller
|
|
|
$rows = $rows->whereIn('pro.id', $prosIDs);
|
|
|
}
|
|
|
|
|
|
- $rows = $rows->orderBy('name_first');
|
|
|
+ $sortBy = $request->input('sort_by') ?: 'name_first';
|
|
|
+ $sortDir = $request->input('sort_dir') ?: 'ASC';
|
|
|
+
|
|
|
+ $rows = $rows->orderByRaw("$sortBy $sortDir NULLS LAST");
|
|
|
+
|
|
|
$rows = $rows->paginate(50);
|
|
|
|
|
|
|
|
@@ -977,45 +983,29 @@ class PracticeManagementController extends Controller
|
|
|
|
|
|
$performer = $this->performer();
|
|
|
|
|
|
+ abort_if($performer->pro->pro_type !== 'ADMIN' && !$performer->pro->can_view_rm_matrix, 403);
|
|
|
+
|
|
|
$ym = ($request->input('y') ?: 'Y') . '-' . ($request->input('m') ?: 'm');
|
|
|
$careMonthStart = date($ym . '-01');
|
|
|
|
|
|
- // filters
|
|
|
- $filters = '';
|
|
|
- $fmd = $request->input('fmd');
|
|
|
- if($fmd && $fmd !== 'all') {
|
|
|
- switch($fmd) {
|
|
|
- case 'lt16':
|
|
|
- $filters .= ' AND (care_month.number_of_days_with_remote_measurements < 16 OR care_month.number_of_days_with_remote_measurements IS NULL) ';
|
|
|
- break;
|
|
|
- case 'gte16':
|
|
|
- $filters .= ' AND (care_month.number_of_days_with_remote_measurements >= 16 AND care_month.number_of_days_with_remote_measurements IS NOT NULL) ';
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- $fcomm = $request->input('fcomm');
|
|
|
- if($fcomm && $fcomm !== 'all') {
|
|
|
- switch($fcomm) {
|
|
|
- case 'not-done':
|
|
|
- $filters .= ' AND (care_month.has_anyone_interacted_with_client_about_rm_outside_note = FALSE OR care_month.has_anyone_interacted_with_client_about_rm_outside_note IS NULL) ';
|
|
|
- break;
|
|
|
- case 'done':
|
|
|
- $filters .= ' AND (care_month.has_anyone_interacted_with_client_about_rm_outside_note = TRUE AND care_month.has_anyone_interacted_with_client_about_rm_outside_note IS NOT NULL) ';
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- $c = $request->input('c');
|
|
|
- if($c) {
|
|
|
- $filters .= ' AND client.uid = \'' . $request->input('c') . '\' ';
|
|
|
- }
|
|
|
+ $rc = $request->input('rc') ?: 1;
|
|
|
+ $rc2 = $request->input('rc2') ?: 2;
|
|
|
+
|
|
|
+ $conditions = $this->rpmConditions($performer, $rc, $rc2);
|
|
|
|
|
|
$patients = DB::select(
|
|
|
DB::raw(
|
|
|
"
|
|
|
-SELECT client.name_first, client.name_last, client.uid as client_uid,
|
|
|
+SELECT client.name_first,
|
|
|
+ client.name_last,
|
|
|
+ client.uid as client_uid,
|
|
|
+ client.dob,
|
|
|
+ client.is_enrolled_in_rm,
|
|
|
+ client.most_recent_completed_mcp_note_date,
|
|
|
care_month.uid as care_month_uid,
|
|
|
care_month.id as care_month_id,
|
|
|
care_month.start_date,
|
|
|
+ care_month.rm_total_time_in_seconds_by_mcp,
|
|
|
care_month.number_of_days_with_remote_measurements,
|
|
|
care_month.has_anyone_interacted_with_client_about_rm_outside_note,
|
|
|
care_month.rm_num_measurements_not_stamped_by_mcp,
|
|
@@ -1026,13 +1016,19 @@ SELECT client.name_first, client.name_last, client.uid as client_uid,
|
|
|
client.default_na_pro_id,
|
|
|
client.rmm_pro_id,
|
|
|
client.rme_pro_id,
|
|
|
- client.cell_number
|
|
|
+ client.cell_number,
|
|
|
+ client.most_recent_cellular_bp_dbp_mm_hg,
|
|
|
+ client.most_recent_cellular_bp_sbp_mm_hg,
|
|
|
+ client.most_recent_cellular_bp_measurement_at,
|
|
|
+ client.most_recent_cellular_weight_value,
|
|
|
+ client.most_recent_cellular_weight_measurement_at
|
|
|
FROM care_month join client on care_month.client_id = client.id
|
|
|
WHERE
|
|
|
- EXTRACT(MONTH from care_month.start_date) = " . ($request->input('m') ?: 'EXTRACT(MONTH from now())') . "
|
|
|
- AND EXTRACT(YEAR from care_month.start_date) = " . ($request->input('y') ?: 'EXTRACT(YEAR from now())') . "
|
|
|
- {$filters}
|
|
|
-ORDER BY care_month.number_of_days_with_remote_measurements DESC NULLS LAST, client.name_first ASC, client.name_last ASC
|
|
|
+ client.mcp_pro_id = {$performer->pro->id}
|
|
|
+ AND EXTRACT(MONTH from care_month.start_date) = " . ($request->input('m') ?: 'EXTRACT(MONTH from now())') . "
|
|
|
+ AND EXTRACT(YEAR from care_month.start_date) = " . ($request->input('y') ?: 'EXTRACT(YEAR from now())') . "
|
|
|
+ " . (count($conditions) > 0 ? 'AND ' . implode(" AND ", $conditions) : '') . "
|
|
|
+ORDER BY care_month.number_of_days_with_remote_measurements DESC NULLS LAST, client.name_first, client.name_last
|
|
|
"
|
|
|
)
|
|
|
);
|
|
@@ -1043,6 +1039,222 @@ ORDER BY care_month.number_of_days_with_remote_measurements DESC NULLS LAST, cli
|
|
|
return view('app.practice-management.remote-monitoring', compact('patients', 'daysRemaining', 'careMonthStart'));
|
|
|
}
|
|
|
|
|
|
+ public function remoteMonitoringCount(Request $request) {
|
|
|
+
|
|
|
+ $performer = $this->performer();
|
|
|
+
|
|
|
+ $ym = ($request->input('y') ?: 'Y') . '-' . ($request->input('m') ?: 'm');
|
|
|
+ $careMonthStart = date($ym . '-01');
|
|
|
+
|
|
|
+ $rc = $request->input('rc') ?: 1;
|
|
|
+ $rc2 = $request->input('rc2') ?: 2;
|
|
|
+
|
|
|
+ $conditions = $this->rpmConditions($performer, $rc, $rc2);
|
|
|
+
|
|
|
+ $count = DB::select(
|
|
|
+ DB::raw(
|
|
|
+ "
|
|
|
+SELECT count(*)
|
|
|
+FROM care_month join client on care_month.client_id = client.id
|
|
|
+WHERE
|
|
|
+ client.mcp_pro_id = {$performer->pro->id}
|
|
|
+ AND EXTRACT(MONTH from care_month.start_date) = " . ($request->input('m') ?: 'EXTRACT(MONTH from now())') . "
|
|
|
+ AND EXTRACT(YEAR from care_month.start_date) = " . ($request->input('y') ?: 'EXTRACT(YEAR from now())') . "
|
|
|
+ " . (count($conditions) > 0 ? 'AND ' . implode(" AND ", $conditions) : '')
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ return $count[0]->count;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function remoteMonitoringAdmin(Request $request) {
|
|
|
+
|
|
|
+ $ym = ($request->input('y') ?: 'Y') . '-' . ($request->input('m') ?: 'm');
|
|
|
+ $careMonthStart = date($ym . '-01');
|
|
|
+
|
|
|
+ $rc = $request->input('rc') ?: 1;
|
|
|
+ $rc2 = $request->input('rc2') ?: 2;
|
|
|
+
|
|
|
+ $conditions = $this->rpmConditionsAdmin($this->performer(), $rc, $rc2);
|
|
|
+
|
|
|
+ $patients = DB::select(
|
|
|
+ DB::raw(
|
|
|
+ "
|
|
|
+SELECT client.name_first,
|
|
|
+ client.name_last,
|
|
|
+ client.uid as client_uid,
|
|
|
+ client.dob,
|
|
|
+ client.is_enrolled_in_rm,
|
|
|
+ client.most_recent_completed_mcp_note_date,
|
|
|
+ care_month.uid as care_month_uid,
|
|
|
+ care_month.id as care_month_id,
|
|
|
+ care_month.start_date,
|
|
|
+ care_month.rm_total_time_in_seconds_by_mcp,
|
|
|
+ care_month.number_of_days_with_remote_measurements,
|
|
|
+ care_month.has_anyone_interacted_with_client_about_rm_outside_note,
|
|
|
+ care_month.rm_num_measurements_not_stamped_by_mcp,
|
|
|
+ care_month.rm_num_measurements_not_stamped_by_non_hcp,
|
|
|
+ care_month.rm_num_measurements_not_stamped_by_rmm,
|
|
|
+ care_month.rm_num_measurements_not_stamped_by_rme,
|
|
|
+ client.mcp_pro_id,
|
|
|
+ client.default_na_pro_id,
|
|
|
+ client.rmm_pro_id,
|
|
|
+ client.rme_pro_id,
|
|
|
+ client.cell_number,
|
|
|
+ client.most_recent_cellular_bp_dbp_mm_hg,
|
|
|
+ client.most_recent_cellular_bp_sbp_mm_hg,
|
|
|
+ client.most_recent_cellular_bp_measurement_at,
|
|
|
+ client.most_recent_cellular_weight_value,
|
|
|
+ client.most_recent_cellular_weight_measurement_at
|
|
|
+FROM care_month join client on care_month.client_id = client.id
|
|
|
+WHERE
|
|
|
+ client.shadow_pro_id is null AND client.is_enrolled_in_rm = 'YES'
|
|
|
+ AND EXTRACT(MONTH from care_month.start_date) = " . ($request->input('m') ?: 'EXTRACT(MONTH from now())') . "
|
|
|
+ AND EXTRACT(YEAR from care_month.start_date) = " . ($request->input('y') ?: 'EXTRACT(YEAR from now())') . "
|
|
|
+ " . (count($conditions) > 0 ? 'AND ' . implode(" AND ", $conditions) : '') . "
|
|
|
+ORDER BY care_month.number_of_days_with_remote_measurements DESC NULLS LAST, client.name_first, client.name_last
|
|
|
+"
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ $timestamp = strtotime(date('Y-m-d'));
|
|
|
+ $daysRemaining = (int)date('t', $timestamp) - (int)date('j', $timestamp);
|
|
|
+
|
|
|
+ return view('app.practice-management.remote-monitoring-admin', compact('patients', 'daysRemaining', 'careMonthStart'));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function remoteMonitoringAdminCount(Request $request) {
|
|
|
+
|
|
|
+ $ym = ($request->input('y') ?: 'Y') . '-' . ($request->input('m') ?: 'm');
|
|
|
+ $careMonthStart = date($ym . '-01');
|
|
|
+
|
|
|
+ $rc = $request->input('rc') ?: 1;
|
|
|
+ $rc2 = $request->input('rc2') ?: 2;
|
|
|
+
|
|
|
+ $conditions = $this->rpmConditionsAdmin($this->performer(), $rc, $rc2);
|
|
|
+
|
|
|
+ $count = DB::select(
|
|
|
+ DB::raw(
|
|
|
+ "
|
|
|
+SELECT count(*)
|
|
|
+FROM care_month join client on care_month.client_id = client.id
|
|
|
+WHERE
|
|
|
+ client.shadow_pro_id is null AND client.is_enrolled_in_rm = 'YES'
|
|
|
+ AND EXTRACT(MONTH from care_month.start_date) = " . ($request->input('m') ?: 'EXTRACT(MONTH from now())') . "
|
|
|
+ AND EXTRACT(YEAR from care_month.start_date) = " . ($request->input('y') ?: 'EXTRACT(YEAR from now())') . "
|
|
|
+ " . (count($conditions) > 0 ? 'AND ' . implode(" AND ", $conditions) : '')
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ return $count[0]->count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function rpmConditions($performer, $rc, $rc2) {
|
|
|
+ $conditions = [];
|
|
|
+
|
|
|
+ $c_isMCP = "client.mcp_pro_id = {$performer->pro->id}";
|
|
|
+ $c_enrolledInRPM = "client.is_enrolled_in_rm = 'YES'";
|
|
|
+ $c_hasDevice = "(SELECT COUNT(client_bdt_device.id) FROM client_bdt_device JOIN bdt_device bd on client_bdt_device.device_id = bd.id WHERE client_bdt_device.client_id = client.id) > 0";
|
|
|
+ $c_lastVisitBefore90Days = "DATE_PART('day', care_month.start_date::timestamp - client.most_recent_completed_mcp_note_date::timestamp) > 90";
|
|
|
+ $c_lastVisitWithin90Days = "DATE_PART('day', care_month.start_date::timestamp - client.most_recent_completed_mcp_note_date::timestamp) <= 90";
|
|
|
+ $c_notSpokenToThisMonth = "(care_month.has_anyone_interacted_with_client_about_rm_outside_note IS NULL OR care_month.has_anyone_interacted_with_client_about_rm_outside_note = FALSE)";
|
|
|
+ $c_spokenToThisMonth = "care_month.has_anyone_interacted_with_client_about_rm_outside_note = TRUE";
|
|
|
+ $c_hasUnstamped = "care_month.rm_num_measurements_not_stamped_by_mcp > 0";
|
|
|
+ $c_hasNoUnstamped = "care_month.rm_num_measurements_not_stamped_by_mcp = 0";
|
|
|
+ $c_lt16MeasurementDays = "care_month.number_of_days_with_remote_measurements < 16";
|
|
|
+ $c_gte16MeasurementDays = "care_month.number_of_days_with_remote_measurements >= 16";
|
|
|
+ $c_subscribedToSMS = "client.send_sms_on_bdt_measurement = TRUE";
|
|
|
+ $c_deviceUsed = "(client.most_recent_cellular_bp_measurement_at IS NOT NULL OR most_recent_cellular_weight_measurement_at IS NOT NULL)";
|
|
|
+ $c_lt20BillingMinutes = "care_month.rm_total_time_in_seconds_by_mcp < 1200";
|
|
|
+ $c_gte20BillingMinutes = "care_month.rm_total_time_in_seconds_by_mcp >= 1200";
|
|
|
+
|
|
|
+ switch ($rc) {
|
|
|
+ case 1:
|
|
|
+ $conditions = [$c_isMCP];
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM];
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice];
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice, ($rc2 == 1 ? $c_lastVisitBefore90Days : $c_lastVisitWithin90Days)];
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, ($rc2 == 1 ? $c_notSpokenToThisMonth : $c_spokenToThisMonth)];
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, ($rc2 == 1 ? $c_hasUnstamped : $c_hasNoUnstamped)];
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, ($rc2 == 1 ? $c_lt16MeasurementDays : $c_gte16MeasurementDays)];
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, $c_gte16MeasurementDays, ($rc2 == 1 ? $c_lt20BillingMinutes : $c_gte20BillingMinutes)];
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_subscribedToSMS];
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ $conditions = [$c_isMCP, $c_enrolledInRPM, $c_deviceUsed];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $conditions;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function rpmConditionsAdmin($performer, $rc, $rc2) {
|
|
|
+ $conditions = [];
|
|
|
+
|
|
|
+ $c_enrolledInRPM = "client.is_enrolled_in_rm = 'YES'";
|
|
|
+ $c_hasDevice = "(SELECT COUNT(client_bdt_device.id) FROM client_bdt_device JOIN bdt_device bd on client_bdt_device.device_id = bd.id WHERE client_bdt_device.client_id = client.id) > 0";
|
|
|
+ $c_lastVisitBefore90Days = "DATE_PART('day', care_month.start_date::timestamp - client.most_recent_completed_mcp_note_date::timestamp) > 90";
|
|
|
+ $c_lastVisitWithin90Days = "DATE_PART('day', care_month.start_date::timestamp - client.most_recent_completed_mcp_note_date::timestamp) <= 90";
|
|
|
+ $c_notSpokenToThisMonth = "(care_month.has_anyone_interacted_with_client_about_rm_outside_note IS NULL OR care_month.has_anyone_interacted_with_client_about_rm_outside_note = FALSE)";
|
|
|
+ $c_spokenToThisMonth = "care_month.has_anyone_interacted_with_client_about_rm_outside_note = TRUE";
|
|
|
+ $c_hasUnstamped = "care_month.rm_num_measurements_not_stamped_by_mcp > 0";
|
|
|
+ $c_hasNoUnstamped = "care_month.rm_num_measurements_not_stamped_by_mcp = 0";
|
|
|
+ $c_lt16MeasurementDays = "care_month.number_of_days_with_remote_measurements < 16";
|
|
|
+ $c_gte16MeasurementDays = "care_month.number_of_days_with_remote_measurements >= 16";
|
|
|
+ $c_subscribedToSMS = "client.send_sms_on_bdt_measurement = TRUE";
|
|
|
+ $c_deviceUsed = "(client.most_recent_cellular_bp_measurement_at IS NOT NULL OR most_recent_cellular_weight_measurement_at IS NOT NULL)";
|
|
|
+ $c_lt20BillingMinutes = "care_month.rm_total_time_in_seconds_by_mcp < 1200";
|
|
|
+ $c_gte20BillingMinutes = "care_month.rm_total_time_in_seconds_by_mcp >= 1200";
|
|
|
+
|
|
|
+ switch ($rc) {
|
|
|
+ case 2:
|
|
|
+ $conditions = [$c_enrolledInRPM];
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice];
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice, ($rc2 == 1 ? $c_lastVisitBefore90Days : $c_lastVisitWithin90Days)];
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, ($rc2 == 1 ? $c_notSpokenToThisMonth : $c_spokenToThisMonth)];
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, ($rc2 == 1 ? $c_hasUnstamped : $c_hasNoUnstamped)];
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, ($rc2 == 1 ? $c_lt16MeasurementDays : $c_gte16MeasurementDays)];
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_hasDevice, $c_lastVisitWithin90Days, $c_spokenToThisMonth, $c_gte16MeasurementDays, ($rc2 == 1 ? $c_lt20BillingMinutes : $c_gte20BillingMinutes)];
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_subscribedToSMS];
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ $conditions = [$c_enrolledInRPM, $c_deviceUsed];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $conditions;
|
|
|
+ }
|
|
|
+
|
|
|
public function remoteMonitoringMeasurements(Request $request, CareMonth $careMonth) {
|
|
|
|
|
|
$performer = $this->performer();
|