Claim Management Report

This commit is contained in:
ivan-sim
2024-02-23 13:48:36 +07:00
parent 4dfbb8f867
commit bca43e3030
7 changed files with 1494 additions and 1580 deletions

View File

@@ -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 : ''
]
);