|
@@ -0,0 +1,268 @@
|
|
|
+@extends ('layouts/template')
|
|
|
+
|
|
|
+@section('content')
|
|
|
+ <div id="process-claims" class="px-3 mcp-theme-1 mt-3" v-cloak>
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-9">
|
|
|
+ <div class="font-weight-bold py-3 font-size-16 text-secondary">
|
|
|
+ <i class="fa fa-asterisk mr-2"></i>To Do
|
|
|
+ </div>
|
|
|
+ <div v-for="(claim, claimIndex) in claims" v-if="!claim.status || claim.status === 'NEW' || claim.status === 'PICKED_UP'">
|
|
|
+ <div class="border rounded mb-3 border rounded mb-3 overflow-hidden"
|
|
|
+ :class="currentClaim && currentClaim.uid === claim.uid ? 'border-info bg-white' : (claim.status === 'PICKED_UP' ? 'border-warning' : 'bg-light text-secondary')"
|
|
|
+ v-on:click.prevent="setCurrentClaim(claimIndex)">
|
|
|
+ <div class="d-flex align-items-center c-pointer">
|
|
|
+
|
|
|
+ <b class="p-2 border-right mr-2 bg-aliceblue" :class="claim.status === 'PICKED_UP' ? 'text-dark' : 'text-secondary'">@{{ claim.created }}</b>
|
|
|
+
|
|
|
+ <span class="text-secondary text-sm mr-1">Patient</span>
|
|
|
+ <span>@{{ claim.client }}</span>
|
|
|
+
|
|
|
+ <span class="mx-2 text-secondary">/</span>
|
|
|
+ <span class="text-secondary text-sm mr-1">Pro</span>
|
|
|
+ <span>@{{ claim.pro }}</span>
|
|
|
+
|
|
|
+ <span class="mx-2 text-secondary">/</span>
|
|
|
+ <span class="text-secondary text-sm mr-1">CPT</span>
|
|
|
+ <span>@{{ claim.cpts }}</span>
|
|
|
+
|
|
|
+ <span class="mx-2 text-secondary">/</span>
|
|
|
+ <span>@{{ claim.icds }} ICDs</span>
|
|
|
+
|
|
|
+ <span class="mx-2 text-secondary">/</span>
|
|
|
+ <div class="d-inline-flex align-items-center font-weight-bold text-secondary">
|
|
|
+ <span class="text-sm mr-1">$</span>
|
|
|
+ <span>@{{ claim.expected_total ? claim.expected_total : 0 }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="ml-auto px-2" v-if="currentClaim && currentClaim.uid === claim.uid">
|
|
|
+ <button v-if="claim.status !== 'PICKED_UP'"
|
|
|
+ v-on:click.prevent="updateClaimStatus(claimIndex, 'PICKED_UP')"
|
|
|
+ class="btn btn-sm btn-info py-1 text-sm font-weight-bold">Pick Up</button>
|
|
|
+ <button v-if="claim.status === 'PICKED_UP'"
|
|
|
+ v-on:click.prevent="updateClaimStatus(claimIndex, 'NEW')"
|
|
|
+ class="btn btn-sm btn-warning py-1 text-sm font-weight-bold">
|
|
|
+ <i class="fa fa-undo"></i>
|
|
|
+ Put Back
|
|
|
+ </button>
|
|
|
+ <button v-if="claim.status === 'PICKED_UP'"
|
|
|
+ v-on:click.prevent="updateClaimStatus(claimIndex, 'SUBMITTED')"
|
|
|
+ class="btn btn-sm btn-success py-1 text-sm font-weight-bold">
|
|
|
+ <i class="fa fa-arrow-right"></i>
|
|
|
+ Mark Done
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="border-top" v-if="currentClaim && currentClaim.uid === claim.uid">
|
|
|
+ <div v-if="!currentMBClaim" class="p-2 text-secondary text-sm">Please wait ...</div>
|
|
|
+ <div v-else>
|
|
|
+
|
|
|
+ <div class="p-2">
|
|
|
+
|
|
|
+ <!--payer-->
|
|
|
+ <div class="d-flex align-items-center mb-1">
|
|
|
+ <div class="text-secondary mr-3 min-width-140px">Payer</div>
|
|
|
+ <b class="text-secondary">@{{ currentMBClaim.payer_name }}</b>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <hr class="my-2">
|
|
|
+
|
|
|
+ <!--patient/subscriber-->
|
|
|
+ <div class="d-flex align-items-center mb-1">
|
|
|
+ <div class="text-secondary mr-3 min-width-140px">Subscriber</div>
|
|
|
+ <b class="text-secondary">@{{ claim.client }}</b>
|
|
|
+ <span class="mx-1 text-secondary text-sm">/</span>
|
|
|
+ <span class="">@{{ currentMBClaim.subscriber_dob }}</span>
|
|
|
+ <span class="mx-1 text-secondary text-sm">/</span>
|
|
|
+ <span class="">@{{ currentMBClaim.subscriber_gender }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="mb-2 pl-3">
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Chart #</span>
|
|
|
+ @{{ claim.client_chart_number }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">MCN</span>
|
|
|
+ @{{ currentMBClaim.subscriber_identifier }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Address</span>
|
|
|
+ @{{ currentMBClaim.subscriber_address_street_line1 }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_street_line2 }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_city }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_state }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_zip }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <hr class="my-2">
|
|
|
+
|
|
|
+ <!--billing provider-->
|
|
|
+ <div class="d-flex align-items-center mb-1">
|
|
|
+ <div class="text-secondary mr-3 min-width-140px">Billing Provider</div>
|
|
|
+ <b class="text-secondary">@{{ currentMBClaim.billing_provider_entity }}</b>
|
|
|
+ </div>
|
|
|
+ <div class="mb-2 pl-3">
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">NPI</span>
|
|
|
+ @{{ currentMBClaim.billing_provider_npi }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Tax ID / Type</span>
|
|
|
+ @{{ currentMBClaim.billing_provider_tax_id }}
|
|
|
+ /
|
|
|
+ @{{ currentMBClaim.billing_provider_tax_id_type }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Taxonomy Code</span>
|
|
|
+ @{{ currentMBClaim.billing_provider_taxonomy_code }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Address</span>
|
|
|
+ @{{ currentMBClaim.billing_provider_address_street_line1 }}
|
|
|
+ @{{ currentMBClaim.billing_provider_address_street_line2 }}
|
|
|
+ @{{ currentMBClaim.billing_provider_address_city }}
|
|
|
+ @{{ currentMBClaim.billing_provider_address_state }}
|
|
|
+ @{{ currentMBClaim.billing_provider_address_zip }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">MCN</span>
|
|
|
+ @{{ currentMBClaim.subscriber_identifier }}
|
|
|
+ </div>
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">Address</span>
|
|
|
+ @{{ currentMBClaim.subscriber_address_street_line1 }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_street_line2 }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_city }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_state }}
|
|
|
+ @{{ currentMBClaim.subscriber_address_zip }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <hr class="my-2">
|
|
|
+
|
|
|
+ <!--attending provider-->
|
|
|
+ <div class="d-flex align-items-center mb-1">
|
|
|
+ <div class="text-secondary mr-3 min-width-140px">Attending Provider</div>
|
|
|
+ <b class="text-secondary">@{{ currentMBClaim.attending_provider_first_name }} @{{ currentMBClaim.attending_provider_last_name }}</b>
|
|
|
+ </div>
|
|
|
+ <div class="mb-2 pl-3">
|
|
|
+ <div class="d-flex align-items-center">
|
|
|
+ <span class="text-secondary text-sm min-width-140px text-right pr-3">NPI</span>
|
|
|
+ @{{ currentMBClaim.attending_provider_npi }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <hr class="my-2">
|
|
|
+
|
|
|
+ <!--cpt, doc, icd-->
|
|
|
+ <div class="d-flex align-items-start mb-1">
|
|
|
+ <div class="text-secondary mr-3 min-width-140px">CPT Codes</div>
|
|
|
+ <div v-html="currentClaimLines"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-3 border-left">
|
|
|
+ <div class="font-weight-bold py-3 font-size-16 text-success">
|
|
|
+ <i class="fa fa-check mr-2"></i>Done
|
|
|
+ </div>
|
|
|
+ <div v-for="(claim, claimIndex) in claims" v-if="claim.status && claim.status !== 'NEW' && claim.status !== 'PICKED_UP'">
|
|
|
+ <div class="border rounded mb-3 border rounded mb-3 overflow-hidden text-secondary">
|
|
|
+ <div class="d-flex align-items-center c-pointer">
|
|
|
+
|
|
|
+ <span class="text-secondary text-sm pl-2 py-2 font-weight-bold">@{{ claim.created }}</span>
|
|
|
+ <span class="mx-1 text-secondary text-sm">/</span>
|
|
|
+ <span class="text-sm">@{{ claim.client }}</span>
|
|
|
+ <span class="mx-1 text-secondary text-sm">/</span>
|
|
|
+
|
|
|
+ <div class="d-inline-flex align-items-center text-sm text-secondary">
|
|
|
+ <span class="mr-1">$</span>
|
|
|
+ <span>@{{ claim.expected_total ? claim.expected_total : 0 }}</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="ml-auto px-2">
|
|
|
+ <a href="#" v-on:click.prevent="updateClaimStatus(claimIndex, 'NEW')"
|
|
|
+ class="py-1 text-sm font-weight-bold">
|
|
|
+ <i class="fa fa-undo"></i>
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <script>
|
|
|
+ (function() {
|
|
|
+ function init() {
|
|
|
+
|
|
|
+ window.processClaimsApp = new Vue({
|
|
|
+ el: '#process-claims',
|
|
|
+ delimiters: ['@{{', '}}'],
|
|
|
+ data: {
|
|
|
+ claims: {!! json_encode($claims) !!},
|
|
|
+ currentClaim: null,
|
|
|
+ currentMBClaim: null,
|
|
|
+ currentClaimLines: null,
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ hasError: function (_data) {
|
|
|
+ let msg = 'Unknown error!';
|
|
|
+ if (_data) {
|
|
|
+ if (_data.success) return false;
|
|
|
+ else if (_data.message) msg = _data.message;
|
|
|
+ }
|
|
|
+ toastr.error(msg);
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ setCurrentClaim: function(_index) {
|
|
|
+ let claim = this.claims[_index];
|
|
|
+ if(this.currentClaim && this.currentClaim.uid === claim.uid) return;
|
|
|
+ this.currentMBClaim = null;
|
|
|
+ this.currentClaimLines = null;
|
|
|
+ $.get('/claims/current-mb-claim/' + claim.uid, (_data) => {
|
|
|
+ this.currentMBClaim = _data;
|
|
|
+ this.currentClaim = this.claims[_index];
|
|
|
+ $.get('/claims/current-claim-lines/' + claim.uid, (_data) => {
|
|
|
+ this.currentClaimLines = _data;
|
|
|
+ });
|
|
|
+ console.log('ALIX', this.currentMBClaim);
|
|
|
+ }, 'json');
|
|
|
+ },
|
|
|
+ updateClaimStatus: function(_index, _status) {
|
|
|
+ let claim = this.claims[_index];
|
|
|
+ $.post('/api/claim/updateStatus', {
|
|
|
+ uid: claim.uid,
|
|
|
+ status: _status,
|
|
|
+ }, (_data) => {
|
|
|
+ if(!this.hasError(_data)) {
|
|
|
+ claim.status = _status;
|
|
|
+ this.claims.splice(_index, 1, claim);
|
|
|
+ this.resetCurrentClaim();
|
|
|
+ }
|
|
|
+ }, 'json');
|
|
|
+ },
|
|
|
+ resetCurrentClaim: function() {
|
|
|
+ if(this.claims && this.claims.length) {
|
|
|
+ for (let i = 0; i < this.claims.length; i++) {
|
|
|
+ if (!this.claims[i].status || this.claims[i].status === 'NEW' || this.claims[i].status === 'PICKED_UP') {
|
|
|
+ this.setCurrentClaim(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted: function() {
|
|
|
+ this.resetCurrentClaim();
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+ addMCInitializer('process-claims', init, '#process-claims');
|
|
|
+ }).call(window);
|
|
|
+ </script>
|
|
|
+@endsection
|