Browse Source

Visit UI - meds on intake - rx suggest impl

Vijayakrishnan 3 years ago
parent
commit
49869f42d5

+ 15 - 0
app/Http/Controllers/FDBPGController.php

@@ -25,6 +25,21 @@ class FDBPGController extends Controller
         return view('app.fdb-pg.fdb-med-suggest', compact('matches'));
     }
 
+    // 1.1 medication suggest (json response)
+    public function medSuggestJSON(Request $request)
+    {
+        $term = $request->input('term') ? trim($request->input('term')) : '';
+        if (empty($term)) return '';
+        $matches = DB::connection('pgsql_fdb')->select(
+            "SELECT med_name_id, med_name as text FROM rminmid1_med_name WHERE med_status_cd = '0' AND med_name ILIKE :term ORDER BY med_name",
+            ['term' => '%' . $term . '%']
+        );
+        return json_encode([
+            "success" => true,
+            "data" => $matches
+        ]);
+    }
+
     // 2. routed meds from men name
     public function routedMeds(Request $request)
     {

+ 2 - 0
resources/views/app/patient/note/segment_script.blade.php

@@ -17,6 +17,7 @@
                 initRTEs(segment);
                 initSegmentMoes(segment);
                 initMoes();
+                initStagSuggest();
                 if(window.segmentInitializers) {
                     let internalName = segment.attr('data-segment-template-name');
                     if(window.segmentInitializers.hasOwnProperty(internalName) &&
@@ -169,6 +170,7 @@
             let parent = $('.segments-list');
             initRTEs(parent);
             initSegmentMoes(parent);
+            initStagSuggest();
 
             // check and run all segment initializers
             if(window.segmentInitializers) {

+ 123 - 10
resources/views/app/patient/segment-templates/intake_medications/edit.blade.php

@@ -29,9 +29,9 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
                         <div class="d-flex align-items-baseline">
                             <div class="<?= $medication->is_removed ? 'strike-through' : '' ?>">
                                 <b><?= !!@($medication->data->name) ? @($medication->data->name) : '-' ?></b>
-                                <?= !!@($medication->data->dose) ? '/&nbsp;' . @($medication->data->dose) : '' ?>
                                 <?= !!@($medication->data->route) ? '/&nbsp;' . @($medication->data->route) : '' ?>
-                                <?= !!@($medication->data->frequency) ? '/&nbsp;' . @($medication->data->frequency) : '' ?>
+                                <?= !!@($medication->data->dose) ? '/&nbsp;' . @($medication->data->dose) : '' ?>
+                                <?= !!@($medication->data->strength) ? '/&nbsp;' . @($medication->data->strength) : '' ?>
                             </div>
 
                             <!-- common actions -->
@@ -61,30 +61,49 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
         </table>
     </div>
 
-    <div visit-moe class="mt-1">
+    <div visit-moe large class="mt-1">
         <a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add medication patient is ALREADY taking, prior to this visit</a>
         <form url="/api/visitPoint/addTopLevelOnIntake" class="mcp-theme-1">
             <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="medNameId">
+            <input type="hidden" data-name="route">
+            <input type="hidden" data-name="dose">
+            <input type="hidden" data-name="strength">
+            <input type="hidden" data-name="medId">
+
             <p class="mb-2"><b>Add Medication (on intake)</b></p>
 
             <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">
+                <input type="text"
+                       data-name="name"
+                       class="form-control form-control-sm"
+                       stag-suggest
+                       stag-suggest-ep="/fdb-med-suggest/json">
             </div>
             <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Dose</label>
-                <input type="text" data-name="dose" class="form-control form-control-sm">
+                <label class="text-sm text-secondary mb-1">Route</label>
+                <select data-name="routedMedId"
+                        class="form-control form-control-sm"
+                        disabled>
+                </select>
             </div>
             <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Route</label>
-                <input type="text" data-name="route" class="form-control form-control-sm">
+                <label class="text-sm text-secondary mb-1">Dosage</label>
+                <select data-name="routedDosageFormMedId"
+                        class="form-control form-control-sm"
+                        disabled>
+                </select>
             </div>
             <div class="mb-2">
-                <label class="text-sm text-secondary mb-1">Frequency</label>
-                <input type="text" data-name="frequency" class="form-control form-control-sm">
+                <label class="text-sm text-secondary mb-1">Strength</label>
+                <select data-name="gcnSeqno"
+                        class="form-control form-control-sm"
+                        disabled>
+                </select>
             </div>
             <div class="mb-2">
                 <label class="text-sm text-secondary mb-1">Description</label>
@@ -99,3 +118,97 @@ $medications = Point::getIntakePointsOfCategory($patient, 'MEDICATION', $note);
     </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
+
+        $('input[stag-suggest][data-name="name"]')
+            .off('stag-suggest-selected')
+            .on('stag-suggest-selected', (_e, _input, _data) => {
+
+                // _input is the textbox
+                // _data is {med_name_id: "50567", text: "Children's Tylenol"}
+
+                let medNameID = _data.med_name_id;
+                $('input[data-name="medNameId"]').val(medNameID);
+
+                let routeSelect = $('[data-name="routedMedId"]').empty().prop('disabled', true);
+                let dosageSelect = $('[data-name="routedDosageFormMedId"]').empty().prop('disabled', true);
+                let strengthSelect = $('[data-name="gcnSeqno"]').empty().prop('disabled', true);
+
+                $.get('/fdb-routed-meds?med-name-id=' + medNameID, _data => {
+                    routeSelect
+                        .empty()
+                        .append('<option value="">-- select --</option>');
+                    for (let i = 0; i < _data.length; i++) {
+                        routeSelect.append('<option value="' + _data[i].routed_med_id + '">' + _data[i].med_routed_med_id_desc + '</option>')
+                    }
+                    routeSelect.prop('disabled', false);
+                    if(_data.length === 1) {
+                        routeSelect.val(_data[0].routed_med_id).trigger('change');
+                    }
+                }, 'json');
+            });
+
+        // on route selection
+        $(document).off('change', '[data-name="routedMedId"]');
+        $(document).on('change', '[data-name="routedMedId"]', function () {
+
+            // clear
+            let dosageSelect = $('[data-name="routedDosageFormMedId"]').empty().prop('disabled', true);
+            let strengthSelect = $('[data-name="gcnSeqno"]').empty().prop('disabled', true);
+            let routedMedID = $(this).val();
+            $('input[data-name="route"]').val($(this).find('option:selected').text());
+
+            $.get('/fdb-routed-dosages?routed-med-id=' + routedMedID, _data => {
+                dosageSelect
+                    .empty()
+                    .append('<option value="">-- select --</option>');
+                for (let i = 0; i < _data.length; i++) {
+                    dosageSelect.append('<option value="' + _data[i].routed_dosage_form_med_id + '">' + _data[i].med_routed_df_med_id_desc + '</option>')
+                }
+                dosageSelect.prop('disabled', false);
+                if(_data.length === 1) {
+                    dosageSelect.val(_data[0].routed_dosage_form_med_id).trigger('change');
+                }
+            }, 'json');
+        });
+
+        // on dosage selection
+        $(document).off('change', '[data-name="routedDosageFormMedId"]');
+        $(document).on('change', '[data-name="routedDosageFormMedId"]', function () {
+
+            // clear
+            let strengthSelect = $('[data-name="gcnSeqno"]').empty().prop('disabled', true);
+            let dosageFormMedID = $(this).val();
+            $('input[data-name="dose"]').val($(this).find('option:selected').text());
+
+            $.get('/fdb-meds?dosage-form-med-id=' + dosageFormMedID, _data => {
+                strengthSelect
+                    .empty()
+                    .append('<option value="">-- select --</option>');
+                for (let i = 0; i < _data.length; i++) {
+                    strengthSelect.append('<option data-medid="' + _data[i].medid + '" value="' + _data[i].gcn_seqno + '">' + _data[i].med_medid_desc + '</option>')
+                }
+                strengthSelect.prop('disabled', false);
+                if(_data.length === 1) {
+                    strengthSelect.val(_data[0].gcn_seqno).trigger('change');
+                    $('input[data-name="description"]').focus();
+                }
+            }, 'json');
+        });
+
+        // on strength (medid) selection
+        $(document).off('change', '[data-name="gcnSeqno"]');
+        $(document).on('change', '[data-name="gcnSeqno"]', function () {
+
+            $('input[data-name="medId"]').val($(this).find('option:selected').attr('data-medid'));
+            $('input[data-name="strength"]').val($(this).find('option:selected').text());
+
+        });
+
+    };
+</script>
+

+ 1 - 0
resources/views/layouts/template.blade.php

@@ -332,6 +332,7 @@
     </script>
     <script src="/js/click-to-copy.js?v={{config('app.asset_version')}}"></script>
     <script src="/js/stag-popup.js?v={{config('app.asset_version')}}"></script>
+    <script src="/js/stag-suggest.js?v={{config('app.asset_version')}}"></script>
     <script src="/js/option-list.js?v={{config('app.asset_version')}}"></script>
     <script src="/js/show-on-click.js?v={{config('app.asset_version')}}"></script>
     @include('app/pdf/viewer')

+ 1 - 0
routes/web.php

@@ -384,6 +384,7 @@ Route::middleware('pro.auth')->group(function () {
     // fdb playground
     Route::get('/fdb-pg-rx', 'FDBPGController@rx')->name('fdb-pg-rx');
     Route::get('/fdb-med-suggest', 'FDBPGController@medSuggest');
+    Route::get('/fdb-med-suggest/json', 'FDBPGController@medSuggestJSON');
     Route::get('/fdb-routed-meds', 'FDBPGController@routedMeds');
     Route::get('/fdb-routed-dosages', 'FDBPGController@routedDosages');
     Route::get('/fdb-meds', 'FDBPGController@meds');