Claim Management Report
This commit is contained in:
@@ -21,9 +21,16 @@ use Modules\Internal\Transformers\ClaimEditResource;
|
||||
use Modules\Internal\Transformers\ClaimHistoryCareResource;
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\View;
|
||||
|
||||
use Modules\Internal\Transformers\RequestLogResource;
|
||||
|
||||
use App\Models\RequestLog;
|
||||
|
||||
use PDF;
|
||||
|
||||
class ClaimController extends Controller
|
||||
@@ -34,41 +41,257 @@ class ClaimController extends Controller
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
// $serviceCode = 'IP';
|
||||
$claims = Claim::with([
|
||||
'member',
|
||||
'member.currentCorporate',
|
||||
'member.currentCorporate.currentPolicy',
|
||||
// 'member.currentPlan' => function($memberPlan) use ($serviceCode) {
|
||||
// $memberPlan->where('plans.service_code', $serviceCode);
|
||||
// },
|
||||
'member.currentPlan' => function($memberPlan) {
|
||||
$memberPlan->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code');
|
||||
},
|
||||
'diagnoses' => function ($diagnosis) {
|
||||
$diagnosis->where('type', 'primary');
|
||||
},
|
||||
'diagnoses.icd',
|
||||
'benefit',
|
||||
'claimRequest',
|
||||
'claimRequest.service',
|
||||
])
|
||||
->when($request->search, function ($q, $search) {
|
||||
$q->where(function ($subQuery) use ($search) {
|
||||
$subQuery->whereHas('claimRequest', function ($claimRequest) use ($search) {
|
||||
$claimRequest->where('code', 'LIKE', "%" . $search . "%");
|
||||
})
|
||||
->orWhereHas('member', function ($member) use ($search) {
|
||||
$member->where('name', 'LIKE', "%" . $search . "%");
|
||||
});
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
$results = DB::table('claims')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id','=', 'claim_requests.id')
|
||||
->leftJoin('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('members.name', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->where('status', '!=', 'requested') // Penjagaan agar approve baru masuk ke claim management
|
||||
->latest()
|
||||
->paginate(10);
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') , function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('claims.created_at', '>=', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('end_date') , function ($query, $end_date) {
|
||||
$query->where(function ($query) use ($end_date) {
|
||||
$query->where('claims.created_at', '<=', $end_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('provider') , function ($query, $provider) {
|
||||
$query->where(function ($query) use ($provider) {
|
||||
$query->where('request_logs.organization_id', '=', $provider);
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'claims.id',
|
||||
'request_logs.id AS id_log',
|
||||
'claims.code',
|
||||
'members.name',
|
||||
DB::raw('
|
||||
(SELECT members.member_id FROM members WHERE members.id = claims.member_id LIMIT 1) AS member_id
|
||||
'),
|
||||
'claims.created_at',
|
||||
DB::raw('
|
||||
(SELECT plans.code FROM plans WHERE plans.id = claims.plan_id LIMIT 1) AS plan_code
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT services.description FROM services WHERE services.code = claim_requests.service_code LIMIT 1) AS service_code
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT corporate_policies.code FROM corporate_policies WHERE corporate_policies.id = claim_requests.policy_id LIMIT 1) AS corporate_policies
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
|
||||
'),
|
||||
DB::raw('
|
||||
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
|
||||
WHERE request_log_benefits.request_log_id = request_logs.id LIMIT 1) AS tot_bill
|
||||
'),
|
||||
'claims.status',
|
||||
)
|
||||
->paginate($limit);
|
||||
|
||||
|
||||
|
||||
return response()->json($claims);
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function exportClaimManagement(Request $request)
|
||||
{
|
||||
$start_date = $request->input('start_date') ? $request->input('start_date') : 'all';
|
||||
$end_date = $request->input('end_date') ? $request->input('end_date') : 'all';
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
$writer->openToFile(public_path('files/Report-Data-Claim-Management-'.$start_date.'-'.$end_date.'.xlsx'));
|
||||
$header = [
|
||||
'No',
|
||||
'Code',
|
||||
'Name',
|
||||
'Member ID',
|
||||
'Date Submission',
|
||||
'Plan ID',
|
||||
'Service',
|
||||
'Policy Number',
|
||||
'Provider',
|
||||
'Total Billing',
|
||||
];
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
|
||||
$writer->addRow($headerRow);
|
||||
// ============================
|
||||
$results = DB::table('claims')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id','=', 'claim_requests.id')
|
||||
->leftJoin('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('members.name', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') , function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('claims.created_at', '>=', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('end_date') , function ($query, $end_date) {
|
||||
$query->where(function ($query) use ($end_date) {
|
||||
$query->where('claims.created_at', '<=', $end_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('provider') , function ($query, $provider) {
|
||||
$query->where(function ($query) use ($provider) {
|
||||
$query->where('request_logs.organization_id', '=', $provider);
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'claims.id',
|
||||
'request_logs.id AS id_log',
|
||||
'claims.code',
|
||||
'members.name',
|
||||
DB::raw('
|
||||
(SELECT members.member_id FROM members WHERE members.id = claims.member_id LIMIT 1) AS member_id
|
||||
'),
|
||||
'claims.created_at',
|
||||
DB::raw('
|
||||
(SELECT plans.code FROM plans WHERE plans.id = claims.plan_id LIMIT 1) AS plan_code
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT services.description FROM services WHERE services.code = claim_requests.service_code LIMIT 1) AS service_code
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT corporate_policies.code FROM corporate_policies WHERE corporate_policies.id = claim_requests.policy_id LIMIT 1) AS corporate_policies
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
|
||||
'),
|
||||
DB::raw('
|
||||
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
|
||||
WHERE request_log_benefits.request_log_id = request_logs.id LIMIT 1) AS tot_bill
|
||||
'),
|
||||
'claims.status',
|
||||
)
|
||||
->get();
|
||||
$no=0;
|
||||
$gr_total = 0;
|
||||
foreach($results as $item)
|
||||
{
|
||||
$gr_total += $item->tot_bill;
|
||||
$no++;
|
||||
$rowData = [
|
||||
$no,
|
||||
$item->code,
|
||||
$item->name,
|
||||
$item->member_id,
|
||||
$item->created_at,
|
||||
$item->plan_code,
|
||||
$item->service_code,
|
||||
$item->corporate_policies,
|
||||
$item->provider,
|
||||
$item->tot_bill ? $item->tot_bill : 0
|
||||
];
|
||||
$style = (new StyleBuilder())
|
||||
//->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
$footer = [
|
||||
'Grand Total',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
$gr_total,
|
||||
];
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
|
||||
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
|
||||
$writer->addRow($footerRow);
|
||||
|
||||
$writer->close();
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => 'Report-Data-Claim-Management-'. $start_date.'-'.$end_date,
|
||||
"file_url" => url('files/Report-Data-Claim-Management-'. $start_date.'-'.$end_date.'.xlsx')
|
||||
]);
|
||||
}
|
||||
public function getProvider(Request $request)
|
||||
{
|
||||
$providers = DB::table('organizations')
|
||||
->where('organizations.type', '=', 'hospital')
|
||||
->where('organizations.status', '=', 'active')
|
||||
->select(
|
||||
'organizations.id',
|
||||
'organizations.name'
|
||||
)
|
||||
->orderBy('name', 'asc')
|
||||
->get();
|
||||
|
||||
return response()->json($providers);
|
||||
}
|
||||
|
||||
public function cekStatus($id)
|
||||
{
|
||||
$cek = DB::table('claims')
|
||||
->where('claims.id', '=', $id)
|
||||
->select('claims.status')
|
||||
->first();
|
||||
|
||||
$data['cek'] = $cek;
|
||||
|
||||
$member = DB::table('claims')
|
||||
->join('claim_requests', 'claims.claim_request_id','=', 'claim_requests.id')
|
||||
->join('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
|
||||
->join('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->where('claims.id', '=', $id)
|
||||
->select('claims.code','members.name','claims.created_at', DB::raw('
|
||||
(SELECT services.name FROM services WHERE services.code = request_logs.service_code LIMIT 1) AS service_type
|
||||
'),)
|
||||
->first();
|
||||
|
||||
$data['member'] = $member;
|
||||
|
||||
return response()->json($data);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -334,7 +557,7 @@ class ClaimController extends Controller
|
||||
return Helper::responseJson([], message: "Diagnosis berhasil di update");
|
||||
}
|
||||
|
||||
public function decline($id)
|
||||
public function decline(Request $request, $id)
|
||||
{
|
||||
//Get claim request id
|
||||
$data_claim_requests = DB::table('claim_requests')
|
||||
@@ -348,7 +571,8 @@ class ClaimController extends Controller
|
||||
->where('claim_request_id', $id)
|
||||
->update(
|
||||
[
|
||||
'status' => 'declined'
|
||||
'status' => 'declined',
|
||||
'reason_decline' => $request->reasonDecline ? $request->reasonDecline : ''
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user