Explorar el Código

Add "relevance" feature on intake segments

Vijayakrishnan hace 3 años
padre
commit
307145f5f3

+ 97 - 40
resources/views/app/patient/segment-templates/intake_allergies/edit.blade.php

@@ -11,13 +11,23 @@ use \App\Models\Segment;
 
 $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'ALLERGIES_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
 ?>
 <div>
 
-    <div class="d-flex mb-2">
-        <table class="table table-sm table-bordered table-striped mb-0 bg-white">
+    <table class="table table-sm table-bordered table-striped mb-0 bg-white mb-2">
             <thead>
             <tr class="">
+                <th class="border-bottom-0 width-100px text-info">Relevant to<br>this visit</th>
                 <th class="border-bottom-0">Allergy</th>
                 <th class="border-bottom-0">Most Recent Review</th>
                 <th class="border-bottom-0">Most Recent Plan</th>
@@ -25,7 +35,15 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
             </tr>
             </thead>
             <?php foreach($allergies as $allergy): ?>
+                <?php $point = $allergy; ?>
                 <tr>
+                    <td class="p-0">
+                        <label class="d-flex align-items-center px-2 py-1 m-0 c-pointer">
+                            <input type="checkbox" class="m-0 chk-relevance"
+                                   data-uid="{{$allergy->uid}}" {{in_array($allergy->uid, $relevance) ? 'checked' : ''}}>
+                            <span>&nbsp;</span>
+                        </label>
+                    </td>
                     <td>
                         <div class="d-flex align-items-baseline">
                             <div class="<?= $allergy->is_removed ? 'strike-through' : '' ?>">
@@ -36,7 +54,6 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
                             <!-- common actions -->
                             <div class="ml-auto d-inline-flex align-items-baseline pr-2">
                                 <?php
-                                $point = $allergy;
                                 $label = 'Allergy';
                                 include resource_path('views/app/patient/segment-templates/_common_actions/remove-undo.php');
                                 ?>
@@ -79,7 +96,6 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
                         <div class="d-flex align-items-start">
                             <div class="flex-grow-1">
                                 <?php
-                                $point = $allergy;
                                 include resource_path('views/app/patient/segment-templates/_child_review/last-review.php');
                                 ?>
                             </div>
@@ -97,7 +113,6 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
                         <div class="d-flex align-items-start">
                             <div class="flex-grow-1">
                                 <?php
-                                $point = $allergy;
                                 include resource_path('views/app/patient/segment-templates/_child_plan/last-plan.php');
                                 ?>
                             </div>
@@ -113,47 +128,55 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
                     </td>
                     <td>
                         <?php
-                        $point = $allergy;
                         include resource_path('views/app/patient/segment-templates/_child_review/edit-review.php');
                         ?>
                     </td>
                 </tr>
             <?php endforeach; ?>
         </table>
-    </div>
 
-    <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
-        <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add allergy patient ALREADY is diagnosed with, prior to this visit</a>-->
-        <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
-            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
-            <input type="hidden" name="category" value="ALLERGY">
-            <input type="hidden" name="data">
-
-            <p class="mb-2"><b>Add Allergy (on intake)</b></p>
-
-            <input type="hidden" data-name="damConceptId">
-            <input type="hidden" data-name="damConceptIdType">
-
-            <div class="d-flex align-items-start">
-
-            <div class="mb-2 w-25">
-                <label class="text-sm text-secondary mb-1">Name</label>
-                <input type="text" data-name="name" class="form-control form-control-sm"
-                       stag-suggest
-                       stag-suggest-ep="/fdb-allergy-suggest/json">
-            </div>
-            <div class="mb-2 ml-2 flex-grow-1">
-                <label class="text-sm text-secondary mb-1">Description</label>
-                <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
-            </div>
-
-            </div>
-
-            <div>
-                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
-                <button cancel class="btn btn-sm btn-default border">Cancel</button>
-            </div>
-        </form>
+    <div class="d-flex align-items-center">
+        <div visit-moe>
+            <form start show url="/api/visitPoint/upsertNoteSingleton" class="d-none" id="<?= $segment->uid ?>-relevance-form">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="ALLERGIES_RELEVANT_TO_NOTE_ON_INTAKE">
+                <input type="hidden" name="data">
+                <button submit class="btn btn-sm btn-info font-weight-bold">Save Relevance</button>
+            </form>
+        </div>
+        <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
+            <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add allergy patient ALREADY is diagnosed with, prior to this visit</a>-->
+            <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="ALLERGY">
+                <input type="hidden" name="data">
+
+                <p class="mb-2"><b>Add Allergy (on intake)</b></p>
+
+                <input type="hidden" data-name="damConceptId">
+                <input type="hidden" data-name="damConceptIdType">
+
+                <div class="d-flex align-items-start">
+
+                <div class="mb-2 w-25">
+                    <label class="text-sm text-secondary mb-1">Name</label>
+                    <input type="text" data-name="name" class="form-control form-control-sm"
+                           stag-suggest
+                           stag-suggest-ep="/fdb-allergy-suggest/json">
+                </div>
+                <div class="mb-2 ml-2 flex-grow-1">
+                    <label class="text-sm text-secondary mb-1">Description</label>
+                    <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
+                </div>
+
+                </div>
+
+                <div>
+                    <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                </div>
+            </form>
+        </div>
     </div>
 </div>
 
@@ -170,5 +193,39 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
                 _input.closest('form').find('input[data-name="damConceptIdType"]').val(_data.dam_concept_id_typ);
             });
 
+        // relevance
+        $(document).off('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance');
+        $(document).on('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance', function () {
+            let uids = $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val();
+            if(!!uids) {
+                uids = JSON.parse(uids);
+            }
+            else {
+                uids = [];
+            }
+            let uid = $(this).attr('data-uid'), found = uids.indexOf(uid) > -1;
+            if(this.checked === found) {
+                return false;
+            }
+            if(this.checked) {
+                uids.push(uid);
+            }
+            else {
+                uids = uids.filter(_x => _x !== uid);
+            }
+            $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
+            // auto save
+            $('#<?= $segment->uid ?>-relevance-form [submit]').trigger('click');
+
+            return false;
+        });
+
+        // pre-fill relevance data
+        let uids = [];
+        $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance:checked').each(function() {
+            uids.push($(this).attr('data-uid'));
+        });
+        $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
     };
-</script>
+</script>

+ 24 - 0
resources/views/app/patient/segment-templates/intake_allergies/summary.blade.php

@@ -6,6 +6,18 @@ use App\Models\Point;
 
 $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'ALLERGIES_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')
+    ->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
+$numRelevant = 0;
 ?>
 
 <?php if (!count($allergies)): ?>
@@ -14,6 +26,12 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
     <?php foreach ($allergies as $allergy): ?>
         <div class="mb-2">
             <div class="d-flex align-items-baseline">
+                @if(in_array($allergy->uid, $relevance))
+                    <span class="text-info mr-1">
+                        <i class="fa fa-star"></i>
+                    </span>
+                    <?php $numRelevant++; ?>
+                @endif
                 <div class="<?= $allergy->is_removed ? 'strike-through' : '' ?>">
                     <b><?= !!@($allergy->data->name) ? @($allergy->data->name) : '-' ?></b>
                     <?= !!@($allergy->data->description) ? '/&nbsp;' . @($allergy->data->description) : '' ?>
@@ -37,5 +55,11 @@ $allergies = Point::getIntakePointsOfCategory($patient, 'ALLERGY', $note);
             <?php endif; ?>
         </div>
     <?php endforeach; ?>
+    @if($numRelevant)
+        <div class="d-flex align-items-baseline text-info mr-1 mt-3">
+            <span class="text-sm mr-1"><i class="fa fa-star text-sm"></i></span>
+            <span class="text-sm">Allergies relevant to this note</span>
+        </div>
+    @endif
 <?php endif; ?>
 

+ 116 - 47
resources/views/app/patient/segment-templates/intake_care_team/edit.blade.php

@@ -11,6 +11,16 @@ use \App\Models\Segment;
 
 $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'CARE_TEAM_MEMBERS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
 ?>
 <div>
 
@@ -18,6 +28,7 @@ $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER'
         <table class="table table-sm table-bordered table-striped mb-0 bg-white">
             <thead>
             <tr class="">
+                <th class="border-bottom-0 width-100px text-info">Relevant to<br>this visit</th>
                 <th class="border-bottom-0">Care Team Member</th>
                 <th class="border-bottom-0">Most Recent Review</th>
                 <th class="border-bottom-0">Most Recent Plan</th>
@@ -26,6 +37,13 @@ $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER'
             </thead>
             <?php foreach($careTeamMembers as $careTeamMember): ?>
                 <tr>
+                    <td class="p-0">
+                        <label class="d-flex align-items-center px-2 py-1 m-0 c-pointer">
+                            <input type="checkbox" class="m-0 chk-relevance"
+                                   data-uid="{{$careTeamMember->uid}}" {{in_array($careTeamMember->uid, $relevance) ? 'checked' : ''}}>
+                            <span>&nbsp;</span>
+                        </label>
+                    </td>
                     <td>
                         <div class="d-flex align-items-baseline">
                             <div class="<?= $careTeamMember->is_removed ? 'strike-through' : '' ?>">
@@ -143,53 +161,104 @@ $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER'
         </table>
     </div>
 
-    <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
-        <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add care team member patient is ALREADY having, prior to this visit</a>-->
-        <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
-            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
-            <input type="hidden" name="category" value="CARE_TEAM_MEMBER">
-            <input type="hidden" name="data">
-
-            <p class="mb-2"><b>Add Care Team Member (on intake)</b></p>
-
-            <div class="d-flex align-items-start">
-
-            <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Name</label>
-                <input type="text" data-name="name" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1">Specialty</label>
-                <input type="text" data-name="specialty" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1">Organization</label>
-                <input type="text" data-name="organization" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1">Phone</label>
-                <input type="text" data-name="phone" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1">Fax</label>
-                <input type="text" data-name="fax" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1">Date</label>
-                <input type="date" data-name="date" class="form-control form-control-sm">
-            </div>
-            <div class="mb-2 ml-2 flex-grow-1">
-                <label class="text-sm text-secondary mb-1">Memo</label>
-                <textarea rows="1" data-name="memo" class="form-control form-control-sm"></textarea>
-            </div>
-
-            </div>
-
-            <div>
-                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
-                <button cancel class="btn btn-sm btn-default border">Cancel</button>
-            </div>
-        </form>
+    <div class="d-flex align-items-center">
+        <div visit-moe>
+            <form start show url="/api/visitPoint/upsertNoteSingleton" class="d-none" id="<?= $segment->uid ?>-relevance-form">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="CARE_TEAM_MEMBERS_RELEVANT_TO_NOTE_ON_INTAKE">
+                <input type="hidden" name="data">
+                <button submit class="btn btn-sm btn-info font-weight-bold">Save Relevance</button>
+            </form>
+        </div>
+        <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
+            <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add care team member patient is ALREADY having, prior to this visit</a>-->
+            <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="CARE_TEAM_MEMBER">
+                <input type="hidden" name="data">
+
+                <p class="mb-2"><b>Add Care Team Member (on intake)</b></p>
+
+                <div class="d-flex align-items-start">
+
+                <div class="mb-2">
+                    <label class="text-sm text-secondary mb-1">Name</label>
+                    <input type="text" data-name="name" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1">Specialty</label>
+                    <input type="text" data-name="specialty" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1">Organization</label>
+                    <input type="text" data-name="organization" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1">Phone</label>
+                    <input type="text" data-name="phone" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1">Fax</label>
+                    <input type="text" data-name="fax" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1">Date</label>
+                    <input type="date" data-name="date" class="form-control form-control-sm">
+                </div>
+                <div class="mb-2 ml-2 flex-grow-1">
+                    <label class="text-sm text-secondary mb-1">Memo</label>
+                    <textarea rows="1" data-name="memo" class="form-control form-control-sm"></textarea>
+                </div>
+
+                </div>
+
+                <div>
+                    <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                </div>
+            </form>
+        </div>
     </div>
 </div>
 
+<script>
+    window.segmentInitializers.<?= $segment->segmentTemplate->internal_name ?> = function() {
+        // any JS can come here
+        // will be run on page-load as well as whenever this segment is refreshed
+
+        // relevance
+        $(document).off('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance');
+        $(document).on('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance', function () {
+            let uids = $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val();
+            if(!!uids) {
+                uids = JSON.parse(uids);
+            }
+            else {
+                uids = [];
+            }
+            let uid = $(this).attr('data-uid'), found = uids.indexOf(uid) > -1;
+            if(this.checked === found) {
+                return false;
+            }
+            if(this.checked) {
+                uids.push(uid);
+            }
+            else {
+                uids = uids.filter(_x => _x !== uid);
+            }
+            $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
+            // auto save
+            $('#<?= $segment->uid ?>-relevance-form [submit]').trigger('click');
+
+            return false;
+        });
+
+        // pre-fill relevance data
+        let uids = [];
+        $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance:checked').each(function() {
+            uids.push($(this).attr('data-uid'));
+        });
+        $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+    };
+</script>

+ 25 - 0
resources/views/app/patient/segment-templates/intake_care_team/summary.blade.php

@@ -6,6 +6,19 @@ use App\Models\Point;
 
 $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'CARE_TEAM_MEMBERS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')
+    ->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
+$numRelevant = 0;
+
 ?>
 
 <?php if (!count($careTeamMembers)): ?>
@@ -14,6 +27,12 @@ $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER'
     <?php foreach($careTeamMembers as $careTeamMember): ?>
         <div class="mb-2">
             <div class="d-flex align-items-baseline">
+                @if(in_array($careTeamMember->uid, $relevance))
+                    <span class="text-info mr-1">
+                        <i class="fa fa-star"></i>
+                    </span>
+                    <?php $numRelevant++; ?>
+                @endif
                 <div class="<?= $careTeamMember->is_removed ? 'strike-through' : '' ?>">
                     <b><?= !!@($careTeamMember->data->name) ? @($careTeamMember->data->name) : '-' ?></b>
                     <?= !!@($careTeamMember->data->spacialty) ? '/&nbsp;' . @($careTeamMember->data->spacialty) . '<br>' : '' ?>
@@ -41,4 +60,10 @@ $careTeamMembers = Point::getIntakePointsOfCategory($patient, 'CARE_TEAM_MEMBER'
             <?php endif; ?>
         </div>
     <?php endforeach; ?>
+    @if($numRelevant)
+        <div class="d-flex align-items-baseline text-info mr-1 mt-3">
+            <span class="text-sm mr-1"><i class="fa fa-star text-sm"></i></span>
+            <span class="text-sm">Care team members relevant to this note</span>
+        </div>
+    @endif
 <?php endif; ?>

+ 155 - 93
resources/views/app/patient/segment-templates/intake_goals/edit.blade.php

@@ -11,6 +11,16 @@ use \App\Models\Segment;
 
 $goals = Point::getIntakePointsOfCategory($patient, 'GOAL', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'GOALS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
 ?>
 <div>
 
@@ -18,6 +28,7 @@ $goals = Point::getIntakePointsOfCategory($patient, 'GOAL', $note);
         <table class="table table-sm table-bordered table-striped mb-0 bg-white">
             <thead>
             <tr class="">
+                <th class="border-bottom-0 width-100px text-info">Relevant to<br>this visit</th>
                 <th class="border-bottom-0">Category</th>
                 <th class="border-bottom-0">Goal</th>
                 <th class="border-bottom-0">Most Recent Review</th>
@@ -30,6 +41,13 @@ $goals = Point::getIntakePointsOfCategory($patient, 'GOAL', $note);
                 <?php if(@($goal->data->category)): ?>
                 <?php $point = $goal; ?>
                 <tr>
+                    <td class="p-0">
+                        <label class="d-flex align-items-center px-2 py-1 m-0 c-pointer">
+                            <input type="checkbox" class="m-0 chk-relevance"
+                                   data-uid="{{$goal->uid}}" {{in_array($goal->uid, $relevance) ? 'checked' : ''}}>
+                            <span>&nbsp;</span>
+                        </label>
+                    </td>
                     <td>
                         <?php if($previousCategory === $goal->data->category): ?>
                             <span class="text-secondary"><?= $goal->data->category ?></span>
@@ -196,99 +214,109 @@ $goals = Point::getIntakePointsOfCategory($patient, 'GOAL', $note);
         </table>
     </div>
 
-    <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
-        <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add goal patient is ALREADY having, prior to this visit</a>-->
-        <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
-            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
-            <input type="hidden" name="category" value="GOAL">
-            <input type="hidden" name="data">
-
-            <p class="mb-2"><b>Add Goal (on intake)</b></p>
-
-            <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Category</label>
-                <select type="text" data-name="category" class="form-control form-control-sm">
-                    <option value="">-- select --</option>
-                    <option value="NUTRITION">NUTRITION</option>
-                    <option value="ACTIVITY">ACTIVITY</option>
-                    <option value="SLEEP">SLEEP</option>
-                    <option value="SOCIAL CONNECTION">SOCIAL CONNECTION</option>
-                    <option value="STRESS REDUCTION">STRESS REDUCTION</option>
-                    <option value="RISKY SUBSTANCE AVOIDANCE">RISKY SUBSTANCE AVOIDANCE</option>
-                    <option value="OTHER">OTHER</option>
-                </select>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="NUTRITION">
-                <div class="mb-1">Specific - What specific food would you like to add/change?</div>
-                <div class="mb-1">Measurable - How much or how many will you add or change?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you do? (improvement over perfection)</div>
-                <div class="mb-2">Time-Connected - How often or for how long will you make this change?</div>
-                <div class="font-italic"><b>Example:</b> "I will add 1 cup of berries to breakfast and a small apple or orange as an afternoon snack at least five days this week."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="ACTIVITY">
-                <div class="mb-1">Specific - What specific activity would you like to add/change?</div>
-                <div class="mb-1">Measurable - How much activity, how many sessions?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you actually do? (know your limits, start small, build)</div>
-                <div class="mb-2">Time-Connected - How frequent or how long will you do the activity?</div>
-                <div class="font-italic"><b>Example:</b> "I will walk with a friend or family member for at least 20 minutes after dinner, every weekday for the next two months."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="SLEEP">
-                <div class="mb-1">Specific - What are you going to do to improve your sleep quality/quantity?</div>
-                <div class="mb-1">Measurable - How much time, how many sessions?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
-                <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
-                <div class="font-italic"><b>Example:</b> "I will begin a new bedtime routine of shutting off the television and instead, read a book for at least 30 minutes before bed, four nights this week."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="SOCIAL CONNECTION">
-                <div class="mb-1">Specific - What are you going to do to improve feelings of connectedness?</div>
-                <div class="mb-1">Measurable - How much time, how many sessions?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
-                <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
-                <div class="font-italic"><b>Example:</b> "I will increase my feeling of social connectedness by joining a group fitness class that meets for an hour, three nights of the week."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="STRESS REDUCTION">
-                <div class="mb-1">Specific - What are you going to do to manage your stress?</div>
-                <div class="mb-1">Measurable - How much time, how many sessions?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
-                <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
-                <div class="font-italic"><b>Example:</b> "I will write about what I am thankful for at least 10 minutes three times per week."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="RISKY SUBSTANCE AVOIDANCE">
-                <div class="mb-1">Specific - What are you going to do to decrease your substance use?</div>
-                <div class="mb-1">Measurable - How much will you reduce it by?</div>
-                <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
-                <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
-                <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
-                <div class="font-italic"><b>Example:</b> "I will swap my morning cigarette with chewing gum at least 5 days this week for the next four weeks. I will ask my partner to help keep me on track and use the free texting service for more support."</div>
-            </div>
-
-            <div class="bg-light border mb-2 p-2 help-text d-none" data-category="OTHER">
-                <div class="">Ensure that the goal is Specific, Measurable, Attainable, Realistic and Time-Connected.</div>
-            </div>
-
-            <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Goal</label>
-                <div note-rte
-                     class="form-group mb-2 border-left border-right rte-holder"
-                     data-field-name="goal"></div>
-            </div>
-
-            <div>
-                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
-                <button cancel class="btn btn-sm btn-default border">Cancel</button>
-            </div>
-        </form>
+    <div class="d-flex align-items-center">
+        <div visit-moe>
+            <form start show url="/api/visitPoint/upsertNoteSingleton" class="d-none" id="<?= $segment->uid ?>-relevance-form">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="GOALS_RELEVANT_TO_NOTE_ON_INTAKE">
+                <input type="hidden" name="data">
+                <button submit class="btn btn-sm btn-info font-weight-bold">Save Relevance</button>
+            </form>
+        </div>
+        <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
+            <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add goal patient is ALREADY having, prior to this visit</a>-->
+            <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="GOAL">
+                <input type="hidden" name="data">
+
+                <p class="mb-2"><b>Add Goal (on intake)</b></p>
+
+                <div class="mb-2">
+                    <label class="text-sm text-secondary mb-1">Category</label>
+                    <select type="text" data-name="category" class="form-control form-control-sm">
+                        <option value="">-- select --</option>
+                        <option value="NUTRITION">NUTRITION</option>
+                        <option value="ACTIVITY">ACTIVITY</option>
+                        <option value="SLEEP">SLEEP</option>
+                        <option value="SOCIAL CONNECTION">SOCIAL CONNECTION</option>
+                        <option value="STRESS REDUCTION">STRESS REDUCTION</option>
+                        <option value="RISKY SUBSTANCE AVOIDANCE">RISKY SUBSTANCE AVOIDANCE</option>
+                        <option value="OTHER">OTHER</option>
+                    </select>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="NUTRITION">
+                    <div class="mb-1">Specific - What specific food would you like to add/change?</div>
+                    <div class="mb-1">Measurable - How much or how many will you add or change?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you do? (improvement over perfection)</div>
+                    <div class="mb-2">Time-Connected - How often or for how long will you make this change?</div>
+                    <div class="font-italic"><b>Example:</b> "I will add 1 cup of berries to breakfast and a small apple or orange as an afternoon snack at least five days this week."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="ACTIVITY">
+                    <div class="mb-1">Specific - What specific activity would you like to add/change?</div>
+                    <div class="mb-1">Measurable - How much activity, how many sessions?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you actually do? (know your limits, start small, build)</div>
+                    <div class="mb-2">Time-Connected - How frequent or how long will you do the activity?</div>
+                    <div class="font-italic"><b>Example:</b> "I will walk with a friend or family member for at least 20 minutes after dinner, every weekday for the next two months."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="SLEEP">
+                    <div class="mb-1">Specific - What are you going to do to improve your sleep quality/quantity?</div>
+                    <div class="mb-1">Measurable - How much time, how many sessions?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
+                    <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
+                    <div class="font-italic"><b>Example:</b> "I will begin a new bedtime routine of shutting off the television and instead, read a book for at least 30 minutes before bed, four nights this week."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="SOCIAL CONNECTION">
+                    <div class="mb-1">Specific - What are you going to do to improve feelings of connectedness?</div>
+                    <div class="mb-1">Measurable - How much time, how many sessions?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
+                    <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
+                    <div class="font-italic"><b>Example:</b> "I will increase my feeling of social connectedness by joining a group fitness class that meets for an hour, three nights of the week."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="STRESS REDUCTION">
+                    <div class="mb-1">Specific - What are you going to do to manage your stress?</div>
+                    <div class="mb-1">Measurable - How much time, how many sessions?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
+                    <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
+                    <div class="font-italic"><b>Example:</b> "I will write about what I am thankful for at least 10 minutes three times per week."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="RISKY SUBSTANCE AVOIDANCE">
+                    <div class="mb-1">Specific - What are you going to do to decrease your substance use?</div>
+                    <div class="mb-1">Measurable - How much will you reduce it by?</div>
+                    <div class="mb-1">Attainable - Do you have what it takes to follow through?</div>
+                    <div class="mb-1">Realistic - What can you actually do? (improvement over perfection)</div>
+                    <div class="mb-2">Time-Connected - How frequent? How long will you commit?</div>
+                    <div class="font-italic"><b>Example:</b> "I will swap my morning cigarette with chewing gum at least 5 days this week for the next four weeks. I will ask my partner to help keep me on track and use the free texting service for more support."</div>
+                </div>
+
+                <div class="bg-light border mb-2 p-2 help-text d-none" data-category="OTHER">
+                    <div class="">Ensure that the goal is Specific, Measurable, Attainable, Realistic and Time-Connected.</div>
+                </div>
+
+                <div class="mb-2">
+                    <label class="text-sm text-secondary mb-1">Goal</label>
+                    <div note-rte
+                         class="form-group mb-2 border-left border-right rte-holder"
+                         data-field-name="goal"></div>
+                </div>
+
+                <div>
+                    <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                </div>
+            </form>
+        </div>
     </div>
 </div>
 
@@ -305,5 +333,39 @@ $goals = Point::getIntakePointsOfCategory($patient, 'GOAL', $note);
                 $(this).closest('form').find('.help-text[data-category="' + this.value + '"]').removeClass('d-none');
             });
 
+        // relevance
+        $(document).off('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance');
+        $(document).on('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance', function () {
+            let uids = $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val();
+            if(!!uids) {
+                uids = JSON.parse(uids);
+            }
+            else {
+                uids = [];
+            }
+            let uid = $(this).attr('data-uid'), found = uids.indexOf(uid) > -1;
+            if(this.checked === found) {
+                return false;
+            }
+            if(this.checked) {
+                uids.push(uid);
+            }
+            else {
+                uids = uids.filter(_x => _x !== uid);
+            }
+            $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
+            // auto save
+            $('#<?= $segment->uid ?>-relevance-form [submit]').trigger('click');
+
+            return false;
+        });
+
+        // pre-fill relevance data
+        let uids = [];
+        $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance:checked').each(function() {
+            uids.push($(this).attr('data-uid'));
+        });
+        $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
     };
 </script>

+ 26 - 0
resources/views/app/patient/segment-templates/intake_goals/summary.blade.php

@@ -14,6 +14,20 @@ foreach($goals as $goal) {
     }
     $grouped[$goal->data->category][] = $goal;
 }
+
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'GOALS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')
+    ->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
+$numRelevant = 0;
+
 ?>
 
 <?php if (!count($grouped)): ?>
@@ -24,6 +38,12 @@ foreach($goals as $goal) {
         <?php foreach($group as $goal): ?>
             <div class="pl-2 mb-2">
                 <div class="d-flex align-items-baseline">
+                    @if(in_array($goal->uid, $relevance))
+                        <span class="text-info mr-1">
+                            <i class="fa fa-star"></i>
+                        </span>
+                        <?php $numRelevant++; ?>
+                    @endif
                     <div class="<?= $goal->is_removed ? 'strike-through' : '' ?>">
                         <?= !!@($goal->data->goal) ? @($goal->data->goal) : '' ?>
                     </div>
@@ -47,4 +67,10 @@ foreach($goals as $goal) {
             </div>
         <?php endforeach; ?>
     <?php endforeach; ?>
+    @if($numRelevant)
+        <div class="d-flex align-items-baseline text-info mr-1 mt-3">
+            <span class="text-sm mr-1"><i class="fa fa-star text-sm"></i></span>
+            <span class="text-sm">Goals relevant to this note</span>
+        </div>
+    @endif
 <?php endif; ?>

+ 114 - 51
resources/views/app/patient/segment-templates/intake_medications/edit.blade.php

@@ -11,6 +11,16 @@ use App\Models\Segment;
 
 $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'MEDICATIONS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
 ?>
 <div>
 
@@ -18,6 +28,7 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
         <table class="table table-sm table-bordered table-striped mb-0 bg-white">
             <thead>
             <tr class="">
+                <th class="border-bottom-0 width-100px text-info">Relevant to<br>this visit</th>
                 <th class="border-bottom-0">Medication</th>
                 <th class="border-bottom-0">Most Recent Review</th>
                 <th class="border-bottom-0">Most Recent Plan</th>
@@ -26,6 +37,13 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
             </thead>
             <?php foreach($medications as $medication): ?>
                 <tr>
+                    <td class="p-0">
+                        <label class="d-flex align-items-center px-2 py-1 m-0 c-pointer">
+                            <input type="checkbox" class="m-0 chk-relevance"
+                                   data-uid="{{$medication->uid}}" {{in_array($medication->uid, $relevance) ? 'checked' : ''}}>
+                            <span>&nbsp;</span>
+                        </label>
+                    </td>
                     <td>
                         <div class="d-flex align-items-baseline">
                             <div class="<?= $medication->is_removed ? 'strike-through' : '' ?>">
@@ -158,58 +176,68 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
         </table>
     </div>
 
-    <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
-        <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add medication patient is ALREADY taking, prior to this visit</a>-->
-        <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
-            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
-            <input type="hidden" name="category" value="MEDICATION">
-            <input type="hidden" name="data">
-
-            <input type="hidden" data-name="medId">
-            <input type="hidden" data-name="routedMedId">
-            <input type="hidden" data-name="routedDosageFormMedId">
-            <input type="hidden" data-name="gcnSeqno">
-
-            <p class="mb-2"><b>Add Medication (on intake)</b></p>
-
-            <div class="d-flex align-items-start">
-
-            <div class="mb-2 w-25">
-                <label class="text-sm text-secondary mb-1 text-nowrap">Medication</label>
-                <input type="text"
-                       data-name="name"
-                       class="form-control form-control-sm"
-                       stag-suggest
-                       stag-suggest-ep="/fdb-med-suggest-v2/json">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1 text-nowrap">Frequency</label>
-                <input type="text" class="form-control form-control-sm" data-name="frequency"
-                       data-option-list="frequency-options" autocomplete="off">
-                <div id="frequency-options" class="data-option-list">
-                    <div>Once a day</div>
-                    <div>Twice a day</div>
+    <div class="d-flex align-items-center">
+        <div visit-moe>
+            <form start show url="/api/visitPoint/upsertNoteSingleton" class="d-none" id="<?= $segment->uid ?>-relevance-form">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="MEDICATIONS_RELEVANT_TO_NOTE_ON_INTAKE">
+                <input type="hidden" name="data">
+                <button submit class="btn btn-sm btn-info font-weight-bold">Save Relevance</button>
+            </form>
+        </div>
+        <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
+            <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add medication patient is ALREADY taking, prior to this visit</a>-->
+            <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="MEDICATION">
+                <input type="hidden" name="data">
+
+                <input type="hidden" data-name="medId">
+                <input type="hidden" data-name="routedMedId">
+                <input type="hidden" data-name="routedDosageFormMedId">
+                <input type="hidden" data-name="gcnSeqno">
+
+                <p class="mb-2"><b>Add Medication (on intake)</b></p>
+
+                <div class="d-flex align-items-start">
+
+                <div class="mb-2 w-25">
+                    <label class="text-sm text-secondary mb-1 text-nowrap">Medication</label>
+                    <input type="text"
+                           data-name="name"
+                           class="form-control form-control-sm"
+                           stag-suggest
+                           stag-suggest-ep="/fdb-med-suggest-v2/json">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1 text-nowrap">Frequency</label>
+                    <input type="text" class="form-control form-control-sm" data-name="frequency"
+                           data-option-list="frequency-options" autocomplete="off">
+                    <div id="frequency-options" class="data-option-list">
+                        <div>Once a day</div>
+                        <div>Twice a day</div>
+                    </div>
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1 text-nowrap">Start Date</label>
+                    <input type="date" class="form-control form-control-sm" data-name="start_date">
+                </div>
+                <div class="mb-2 ml-2">
+                    <label class="text-sm text-secondary mb-1 text-nowrap">Prescribed By</label>
+                    <input type="text" class="form-control form-control-sm" data-name="prescriber">
+                </div>
+                <div class="mb-2 ml-2 flex-grow-1">
+                    <label class="text-sm text-secondary mb-1 text-nowrap">Description</label>
+                    <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
+                </div>
+                </div>
+
+                <div class="d-flex align-items-start">
+                    <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
                 </div>
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1 text-nowrap">Start Date</label>
-                <input type="date" class="form-control form-control-sm" data-name="start_date">
-            </div>
-            <div class="mb-2 ml-2">
-                <label class="text-sm text-secondary mb-1 text-nowrap">Prescribed By</label>
-                <input type="text" class="form-control form-control-sm" data-name="prescriber">
-            </div>
-            <div class="mb-2 ml-2 flex-grow-1">
-                <label class="text-sm text-secondary mb-1 text-nowrap">Description</label>
-                <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
-            </div>
-            </div>
-
-            <div class="d-flex align-items-start">
-                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
-                <button cancel class="btn btn-sm btn-default border">Cancel</button>
-            </div>
-        </form>
+            </form>
+        </div>
     </div>
 </div>
 
@@ -241,6 +269,41 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
                 return false;
             });
 
+        // relevance
+        $(document).off('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance');
+        $(document).on('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance', function () {
+            let uids = $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val();
+            if(!!uids) {
+                uids = JSON.parse(uids);
+            }
+            else {
+                uids = [];
+            }
+            let uid = $(this).attr('data-uid'), found = uids.indexOf(uid) > -1;
+            if(this.checked === found) {
+                return false;
+            }
+            if(this.checked) {
+                uids.push(uid);
+            }
+            else {
+                uids = uids.filter(_x => _x !== uid);
+            }
+            $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
+            // auto save
+            $('#<?= $segment->uid ?>-relevance-form [submit]').trigger('click');
+
+            return false;
+        });
+
+        // pre-fill relevance data
+        let uids = [];
+        $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance:checked').each(function() {
+            uids.push($(this).attr('data-uid'));
+        });
+        $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
     };
 </script>
 

+ 25 - 0
resources/views/app/patient/segment-templates/intake_medications/summary.blade.php

@@ -6,6 +6,19 @@ use App\Models\Point;
 
 $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'MEDICATIONS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')
+    ->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
+$numRelevant = 0;
+
 ?>
 
 <?php if (!count($medications)): ?>
@@ -14,6 +27,12 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
     <?php foreach ($medications as $medication): ?>
         <div class="mb-2">
             <div class="d-flex align-items-baseline">
+                @if(in_array($medication->uid, $relevance))
+                    <span class="text-info mr-1">
+                        <i class="fa fa-star"></i>
+                    </span>
+                    <?php $numRelevant++; ?>
+                @endif
                 <div class="<?= $medication->is_removed ? 'strike-through' : '' ?>">
                     <b><?= !!@($medication->data->name) ? @($medication->data->name) : '-' ?></b>
                     <?= !!@($medication->data->frequency) ? '/&nbsp;' . @($medication->data->frequency) : '' ?>
@@ -38,5 +57,11 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
             <?php endif; ?>
         </div>
     <?php endforeach; ?>
+    @if($numRelevant)
+        <div class="d-flex align-items-baseline text-info mr-1 mt-3">
+            <span class="text-sm mr-1"><i class="fa fa-star text-sm"></i></span>
+            <span class="text-sm">Medications to this note</span>
+        </div>
+    @endif
 <?php endif; ?>
 

+ 105 - 42
resources/views/app/patient/segment-templates/intake_problems/edit.blade.php

@@ -11,6 +11,16 @@ use \App\Models\Segment;
 
 $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'PROBLEMS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+
 ?>
 <div>
 
@@ -18,6 +28,7 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
         <table class="table table-sm table-bordered table-striped mb-0 bg-white">
             <thead>
             <tr class="">
+                <th class="border-bottom-0 width-100px text-info">Relevant to<br>this visit</th>
                 <th class="border-bottom-0">Problem</th>
                 <th class="border-bottom-0">Most Recent Review</th>
                 <th class="border-bottom-0">Most Recent Plan</th>
@@ -26,6 +37,13 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
             </thead>
             <?php foreach($problems as $problem): ?>
             <tr>
+                <td class="p-0">
+                    <label class="d-flex align-items-center px-2 py-1 m-0 c-pointer">
+                        <input type="checkbox" class="m-0 chk-relevance"
+                               data-uid="{{$problem->uid}}" {{in_array($problem->uid, $relevance) ? 'checked' : ''}}>
+                        <span>&nbsp;</span>
+                    </label>
+                </td>
                 <td>
                     <div class="d-flex align-items-baseline">
                         <div class="<?= $problem->is_removed ? 'strike-through' : '' ?>">
@@ -132,48 +150,58 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
         </table>
     </div>
 
-    <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
-        <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add Problem patient is ALREADY having, prior
-            to this visit</a>-->
-        <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
-            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
-            <input type="hidden" name="category" value="PROBLEM">
-            <input type="hidden" name="data">
-
-            <input type="hidden" data-name="dxid">
-            <input type="hidden" data-name="icd-type">
-
-            <p class="mb-2"><b>Add Problem (on intake)</b></p>
-
-            <div class="d-flex align-items-start">
-
-            <div class="mb-2 w-25">
-                <label class="text-sm text-secondary mb-1">Name</label>
-                <input type="text" data-name="name" class="form-control form-control-sm"
-                       stag-suggest
-                       stag-suggest-ep="/fdb-dx-suggest/json">
-            </div>
-
-            <div class="mb-2 w-25 ml-2">
-                <label class="text-sm text-secondary mb-1">ICD</label>
-                <select data-name="icd"
-                        class="form-control form-control-sm"
-                        disabled>
-                </select>
-            </div>
-
-            <div class="mb-2 ml-2 flex-grow-1">
-                <label class="text-sm text-secondary mb-1">Description</label>
-                <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
-            </div>
-
-            </div>
-
-            <div>
-                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
-                <button cancel class="btn btn-sm btn-default border">Cancel</button>
-            </div>
-        </form>
+    <div class="d-flex align-items-center">
+        <div visit-moe>
+            <form start show url="/api/visitPoint/upsertNoteSingleton" class="d-none" id="<?= $segment->uid ?>-relevance-form">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="PROBLEMS_RELEVANT_TO_NOTE_ON_INTAKE">
+                <input type="hidden" name="data">
+                <button submit class="btn btn-sm btn-info font-weight-bold">Save Relevance</button>
+            </form>
+        </div>
+        <div visit-moe large class="mt-1 w-100 border p-2 bg-white rounded">
+            <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add Problem patient is ALREADY having, prior
+                to this visit</a>-->
+            <form show url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1 w-100">
+                <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+                <input type="hidden" name="category" value="PROBLEM">
+                <input type="hidden" name="data">
+
+                <input type="hidden" data-name="dxid">
+                <input type="hidden" data-name="icd-type">
+
+                <p class="mb-2"><b>Add Problem (on intake)</b></p>
+
+                <div class="d-flex align-items-start">
+
+                <div class="mb-2 w-25">
+                    <label class="text-sm text-secondary mb-1">Name</label>
+                    <input type="text" data-name="name" class="form-control form-control-sm"
+                           stag-suggest
+                           stag-suggest-ep="/fdb-dx-suggest/json">
+                </div>
+
+                <div class="mb-2 w-25 ml-2">
+                    <label class="text-sm text-secondary mb-1">ICD</label>
+                    <select data-name="icd"
+                            class="form-control form-control-sm"
+                            disabled>
+                    </select>
+                </div>
+
+                <div class="mb-2 ml-2 flex-grow-1">
+                    <label class="text-sm text-secondary mb-1">Description</label>
+                    <textarea rows="1" data-name="description" class="form-control form-control-sm"></textarea>
+                </div>
+
+                </div>
+
+                <div>
+                    <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                </div>
+            </form>
+        </div>
     </div>
 </div>
 
@@ -214,5 +242,40 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
             $(this).closest('form').find('input[data-name="icd-type"]').val($(this).find('option:selected').attr('data-icd-type'));
         });
 
+        // relevance
+        $(document).off('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance');
+        $(document).on('change', '[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance', function () {
+            let uids = $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val();
+            if(!!uids) {
+                uids = JSON.parse(uids);
+            }
+            else {
+                uids = [];
+            }
+            let uid = $(this).attr('data-uid'), found = uids.indexOf(uid) > -1;
+            if(this.checked === found) {
+                return false;
+            }
+            if(this.checked) {
+                uids.push(uid);
+            }
+            else {
+                uids = uids.filter(_x => _x !== uid);
+            }
+            $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
+            // auto save
+            $('#<?= $segment->uid ?>-relevance-form [submit]').trigger('click');
+
+            return false;
+        });
+
+        // pre-fill relevance data
+        let uids = [];
+        $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] .chk-relevance:checked').each(function() {
+            uids.push($(this).attr('data-uid'));
+        });
+        $('#<?= $segment->uid ?>-relevance-form').find('[name="data"]').val(JSON.stringify(uids));
+
     };
 </script>

+ 23 - 0
resources/views/app/patient/segment-templates/intake_problems/summary.blade.php

@@ -6,6 +6,17 @@ use App\Models\Point;
 
 $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
 
+$relevance = Point::where('added_in_segment_id', $segment->id)
+    ->where('category', 'PROBLEMS_RELEVANT_TO_NOTE_ON_INTAKE')
+    ->orderBy('id', 'DESC')
+    ->first();
+if (!!@$relevance->data) {
+    $relevance = json_decode($relevance->data, true);
+}
+else {
+    $relevance = [];
+}
+$numRelevant = 0;
 ?>
 
 <?php if (!count($problems)): ?>
@@ -14,6 +25,12 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
     <?php foreach ($problems as $problem): ?>
         <div class="mb-2">
             <div class="d-flex align-items-baseline">
+                @if(in_array($problem->uid, $relevance))
+                    <span class="text-info mr-1">
+                        <i class="fa fa-star"></i>
+                    </span>
+                    <?php $numRelevant++; ?>
+                @endif
                 <div class="<?= $problem->is_removed ? 'strike-through' : '' ?>">
                     <b><?= !!@($problem->data->name) ? @($problem->data->name) : '-' ?></b>
                     <?= !!@($problem->data->icd) ? '/&nbsp;' . @($problem->data->icd) : '' ?>
@@ -41,5 +58,11 @@ $problems = Point::getIntakePointsOfCategory($patient, 'PROBLEM', $note);
             <?php endif; ?>
         </div>
     <?php endforeach; ?>
+    @if($numRelevant)
+        <div class="d-flex align-items-baseline text-info mr-1 mt-3">
+            <span class="text-sm mr-1"><i class="fa fa-star text-sm"></i></span>
+            <span class="text-sm">Problems relevant to this note</span>
+        </div>
+    @endif
 <?php endif; ?>