瀏覽代碼

Notes resolution center

Vijayakrishnan 3 年之前
父節點
當前提交
c4f2920be2

+ 4 - 0
app/Http/Controllers/NoteController.php

@@ -118,6 +118,10 @@ class NoteController extends Controller
         return view("app.patient.note.print", compact('patient', 'note'));
     }
 
+    public function resolve(Request $request, Client $patient, Note $note) {
+        return view("app.patient.note.resolve", compact('patient', 'note'));
+    }
+
     public function getHtmlForSegment($segmentUid, $sessionKey){
 
         $summaryHtml = '';

+ 47 - 0
app/Http/Controllers/PracticeManagementController.php

@@ -38,6 +38,7 @@ use App\Models\ClientMeasurementDaysPerMonth;
 use App\Models\ClientBDTDevice;
 use App\Models\ClientMemo;
 use Carbon\Carbon;
+use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use PDF;
@@ -3284,5 +3285,51 @@ ORDER BY c.name_last, c.name_first
 
     }
 
+    public function notesResolutionCenter(Request $request) {
+
+        $columns = "(c.name_first || ' ' || c.name_last) as client_name,
+            c.chart_number,
+            c.uid as client_uid,
+            n.effective_dateest,
+            n.uid,
+            n.detail_json
+            ";
+        $from = "FROM note AS n
+            JOIN pro AS hcp ON n.hcp_pro_id = hcp.id
+            JOIN client AS c ON n.client_id = c.id
+            ";
+        $where = "WHERE
+            n.is_signed_by_hcp IS TRUE AND
+            n.is_claim_closed IS NOT TRUE AND
+            n.is_cancelled IS NOT TRUE AND 
+            n.created_at::DATE >= '2022-01-01'::DATE AND
+            c.client_engagement_status_category <> 'DUMMY' AND
+            c.name_first NOT ILIKE '%test%' AND 
+            c.name_last NOT ILIKE '%test%' AND
+            n.id IN (SELECT note_id FROM bill WHERE code ILIKE '%treatment%' AND bill.is_cancelled IS NOT TRUE AND note_id IS NOT NULL) AND
+            n.id NOT IN (SELECT note_id FROM claim WHERE note_id IS NOT NULL) AND
+            c.is_part_b_primary = 'YES' AND
+            c.latest_eligible_refresh_at::DATE >= '2022-01-01' AND
+            c.mpb_remaining = 0
+            ";
+        $orderBy = "ORDER BY c.chart_number ASC, n.effective_dateest ASC";
+
+        $countQuery = "SELECT count(*) {$from} {$where}";
+        $countResult = DB::select($countQuery);
+        $total = $countResult[0]->count;
+
+        $page = $request->input('page') ?: 1;
+        $perPage = $request->input('per_page') ?: 20;
+        $offset = ($page - 1) * $perPage;
+
+        $dataQuery = "SELECT {$columns} {$from} {$where} {$orderBy} OFFSET {$offset} LIMIT {$perPage}";
+        $rows = DB::select($dataQuery);
+
+        $paginator = new LengthAwarePaginator($rows, $total, $request->input('per_page') ?: 20, $request->input('page') ?: 1);
+        $paginator->setPath(route('practice-management.notes-resolution-center'));
+
+        return view('app.practice-management.notes-resolution-center', compact('rows', 'paginator'));
+    }
+
    
 }

+ 150 - 0
resources/views/app/patient/note/resolve.blade.php

@@ -0,0 +1,150 @@
+<?php
+/** @var App\Models\Note $note */
+/** @var App\Models\Pro $pro */
+/** @var App\Models\Section $section */
+/** @var $allSections */
+?>
+@extends ('layouts.print')
+
+@section('content')
+
+    @php
+        $parsedDetailJson = new stdClass();
+        if($note->detail_json) {
+            try {
+                $parsedDetailJson = json_decode($note->detail_json);
+            }
+            catch (Exception $e) {}
+        }
+    @endphp
+
+    <div class="popup-content-container">
+
+        <div class="d-flex align-items-center mb-2 mx-3">
+
+            @if(@$parsedDetailJson->farah_decision)
+                <span class="mr-2">Farah:</span>
+                <span class="mr-3">
+                    @if(@$parsedDetailJson->farah_decision == 'green')
+                        <span class="text-success font-weight-bold"><i class="fa fa-check"></i> Yes</span>
+                    @elseif(@$parsedDetailJson->farah_decision == 'red')
+                        <span class="text-warning-dark font-weight-bold"><i class="fa fa-exclamation-triangle"></i> No</span>
+                    @else
+                        -
+                    @endif
+                </span>
+            @endif
+
+            @if(@$parsedDetailJson->shawn_decision)
+                <span class="mr-2">Shawn:</span>
+                <span class="mr-3">
+                    @if(@$parsedDetailJson->shawn_decision == 'green')
+                        <span class="text-success font-weight-bold"><i class="fa fa-check"></i> Green</span>
+                    @elseif(@$parsedDetailJson->shawn_decision == 'red')
+                        <span class="text-danger font-weight-bold"><i class="fa fa-exclamation-triangle"></i> Rejected</span>
+                    @else
+                        -
+                    @endif
+                </span>
+            @endif
+
+            @if(@$parsedDetailJson->kyle_billed)
+                <span class="mr-2">Kyle:</span>
+                <span class="mr-3">
+                    @if(@$parsedDetailJson->kyle_billed == 'yes')
+                        <span class="text-success font-weight-bold"><i class="fa fa-check"></i> Billed</span>
+                    @else
+                        -
+                    @endif
+                </span>
+            @endif
+
+            @if(@$parsedDetailJson->kyle_billed !== 'yes')
+                <span class="mr-2">Mark as:</span>
+                <div moe>
+                    <form url="/api/note/upsertDetailJsonKeyVal" show>
+                        <input type="hidden" name="uid" value="{{$note->uid}}">
+                        <input type="hidden" name="key" value="farah_decision">
+                        <input type="hidden" name="val" value="green">
+                        <button submit class="mr-2 btn btn-sm font-weight-bold btn-success">Farah Green</button>
+                    </form>
+                </div>
+                <div moe>
+                    <form url="/api/note/upsertDetailJsonKeyVal" show>
+                        <input type="hidden" name="uid" value="{{$note->uid}}">
+                        <input type="hidden" name="key" value="farah_decision">
+                        <input type="hidden" name="val" value="red">
+                        <button submit class="mr-2 btn btn-sm font-weight-bold btn-warning">Shawn Review</button>
+                    </form>
+                </div>
+                @if(@$parsedDetailJson->farah_decision)
+                @if(@$parsedDetailJson->farah_decision === 'red')
+                    <div moe>
+                        <form url="/api/note/upsertDetailJsonKeyVal" show>
+                            <input type="hidden" name="uid" value="{{$note->uid}}">
+                            <input type="hidden" name="key" value="shawn_decision">
+                            <input type="hidden" name="val" value="green">
+                            <button submit class="mr-2 btn btn-sm font-weight-bold btn-success">Shawn Green</button>
+                        </form>
+                    </div>
+                    <div moe>
+                        <form url="/api/note/upsertDetailJsonKeyVal" show>
+                            <input type="hidden" name="uid" value="{{$note->uid}}">
+                            <input type="hidden" name="key" value="shawn_decision">
+                            <input type="hidden" name="val" value="red">
+                            <button submit class="mr-2 btn btn-sm font-weight-bold btn-danger">Shawn Reject</button>
+                        </form>
+                    </div>
+                @endif
+                @if(@$parsedDetailJson->farah_decision == 'green' || @$parsedDetailJson->shawn_decision == 'green')
+                    <div moe>
+                        <form url="/api/note/upsertDetailJsonKeyVal" show>
+                            <input type="hidden" name="uid" value="{{$note->uid}}">
+                            <input type="hidden" name="key" value="kyle_billed">
+                            <input type="hidden" name="val" value="yes">
+                            <button submit class="mr-2 btn btn-sm font-weight-bold btn-primary">Kyle Billed</button>
+                        </form>
+                    </div>
+                @endif
+            @endif
+            @endif
+        </div>
+
+        <div class="mx-3 border pb-3 mb-3 overflow-auto" style="max-height: calc(100vh - 220px);">
+            <div id="note-single-header" class="pb-3 d-flex align-items-start note_template_{{$note->visitTemplate ? $note->visitTemplate->internal_name : ''}}">
+
+                <div class="p-2">
+                    <div class="mb-2 d-flex align-items-baseline">
+                        <div class="mr-2 font-weight-bold text-secondary">Name:</div>
+                        <div>{{$patient->displayName()}}</div>
+                    </div>
+                    <div class="mb-2 d-flex align-items-baseline">
+                        <div class="mr-2 font-weight-bold text-secondary">DOB:</div>
+                        <div>{{$patient->dob}}</div>
+                    </div>
+                    <div class="mb-2 d-flex align-items-baseline">
+                        <div class="mr-2 font-weight-bold text-secondary">Visit Date:</div>
+                        <div>{{friendly_date($note->effective_dateest)}}</div>
+                    </div>
+                    <div class="mb-2 d-flex align-items-baseline">
+                        <div class="mr-2 font-weight-bold text-secondary">Signed By:</div>
+                        <div class="mr-2">{{$note->hcpPro->displayName()}}</div>
+                        <div class="mr-2">on</div>
+                        <div class="mr-2">{{$note->signed_by_hcp_at}}</div>
+                    </div>
+                </div>
+
+            </div>
+
+            <div class="card mb-0 {{ $note->is_cancelled ? 'cancelled-item' : '' }} border-0 rounded-0">
+
+                <div class="card-body p-0">
+                    <div class="note_template_{{$note->visitTemplate ? $note->visitTemplate->internal_name : ''}}">
+                        @include('app.patient.note.note-segment-list-print')
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection

+ 78 - 0
resources/views/app/practice-management/notes-resolution-center.blade.php

@@ -0,0 +1,78 @@
+@extends ('layouts/template')
+
+@section('content')
+
+    <div id="notes-resolution-center" class="p-3 mcp-theme-1">
+
+        <div class="d-flex align-items-baseline">
+            <h6 class="font-size-16 font-weight-bold text-secondary mb-3">Notes Resolution Center</h6>
+        </div>
+
+        <table class="table table-sm table-bordered table-striped">
+            <thead>
+            <tr>
+                <th class="border-bottom-0 text-nowrap text-right pr-2">Visit #</th>
+                <th class="border-bottom-0 text-nowrap">Name</th>
+                <th class="border-bottom-0 text-nowrap">Chart #</th>
+                <th class="border-bottom-0 text-nowrap">Date</th>
+                <th class="border-bottom-0 text-nowrap">Note Link</th>
+                <th class="border-bottom-0 text-nowrap">Farah Green?</th>
+                <th class="border-bottom-0 text-nowrap">Shawn Review?</th>
+                <th class="border-bottom-0 text-nowrap">Shawn Green?</th>
+                <th class="border-bottom-0 text-nowrap">Shawn Reject?</th>
+                <th class="border-bottom-0 text-nowrap">Kyle Billed?</th>
+                <th class="border-bottom-0 w-50"></th>
+            </tr>
+            </thead>
+            <tbody>
+            @php
+                $prevChartNumber = '';
+                $visitCount = 0;
+            @endphp
+            @foreach($rows as $row)
+                @php
+                    if($prevChartNumber !== $row->chart_number) {
+                        $visitCount = 1;
+                    }
+                    else {
+                        $visitCount++;
+                    }
+                    $parsedDetailJson = new stdClass();
+                    if($row->detail_json) {
+                        try {
+                            $parsedDetailJson = json_decode($row->detail_json);
+                        }
+                        catch (Exception $e) {}
+                    }
+                    $prevChartNumber = $row->chart_number;
+                @endphp
+                <tr>
+                    <td class="text-nowrap text-right pr-2">{{$visitCount}}</td>
+                    <td class="text-nowrap">{{$row->client_name}}</td>
+                    <td class="text-nowrap">{{$row->chart_number}}</td>
+                    <td class="text-nowrap">{{friendly_date($row->effective_dateest)}}</td>
+                    <td class="text-nowrap">
+                        <a open-in-stag-popup update-parent title="Note: {{$row->client_name}}  -  {{friendly_date($row->effective_dateest)}}" href="/resolve-note/{{$row->client_uid}}/{{$row->uid}}">View</a>
+                        <a class="ml-2" href="/patients/view/{{$row->client_uid}}/notes/view/{{$row->uid}}"><i class="fa fa-external-link"></i></a>
+                    </td>
+                    <td class="font-weight-bold text-success">{!! @$parsedDetailJson->farah_decision && @$parsedDetailJson->farah_decision === 'green' ? '<i class="fa fa-check"></i> Yes' : '' !!}</td>
+                    <td class="font-weight-bold text-warning-dark">{!! @$parsedDetailJson->farah_decision && @$parsedDetailJson->farah_decision === 'red' ? '<i class="fa fa-exclamation-triangle"></i> Yes' : '' !!}</td>
+                    <td class="font-weight-bold text-success">{!! @$parsedDetailJson->shawn_decision && @$parsedDetailJson->shawn_decision === 'green' ? '<i class="fa fa-check"></i> Yes' : '' !!}</td>
+                    <td class="font-weight-bold text-danger">{!! @$parsedDetailJson->shawn_decision && @$parsedDetailJson->shawn_decision === 'red' ? '<i class="fa fa-times"></i> Rejected' : '' !!}</td>
+                    <td class="font-weight-bold text-success">{!! @$parsedDetailJson->kyle_billed && @$parsedDetailJson->kyle_billed === 'yes' ? '<i class="fa fa-check"></i> Yes' : '' !!}</td>
+                    <td></td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+
+        <div class="d-flex align-items-baseline">
+            {!! $paginator->withQueryString()->links() !!}
+            <div class="mb-3">
+                <div class="ml-4 mb-3">Showing <b>{{$paginator->firstItem()}}</b> to <b>{{$paginator->lastItem()}}</b> (page {{$paginator->currentPage()}}) of <b>{{$paginator->total()}}</b> notes</div>
+            </div>
+        </div>
+
+    </div>
+
+@endsection

+ 4 - 0
routes/web.php

@@ -233,6 +233,9 @@ Route::middleware('pro.auth')->group(function () {
         // rpm work matrix - latest patient with unstamped measurements
         Route::get('rpm-work-matrix', 'PracticeManagementController@rpm_work_matrix')->name('rpm_work_matrix');
 
+        // notes resolution
+        Route::get('notes-resolution-center', 'PracticeManagementController@notesResolutionCenter')->name('notes-resolution-center');
+
         Route::get('rates/{selectedProUid?}', 'PracticeManagementController@rates')->name('rates');
         Route::get('dashboard', 'PracticeManagementController@dashboard')->name('dashboard');
         Route::get('previous-bills', 'PracticeManagementController@previousBills')->name('previousBills');
@@ -713,6 +716,7 @@ Route::middleware('pro.auth')->group(function () {
     Route::get('/search-facility/json', 'HomeController@facilitySuggestJSON')->name('facilitySuggestJSON');
 
     Route::get('print-note/{patient}/{note}', 'NoteController@print')->name('print-note');
+    Route::get('resolve-note/{patient}/{note}', 'NoteController@resolve')->name('resolve-note');
 
 });