function ($diagnosis) { return $diagnosis->where('type', 'primary'); }, 'diagnoses.icd', 'plan', 'benefit', 'claimRequest', 'claimRequest.service' ]) ->latest() ->paginate(10); return response()->json($claims); } /** * Show the form for creating a new resource. * @return Renderable */ public function create() { return view('internal::create'); } /** * Store a newly created resource in storage. * @param Request $request * @return Renderable */ public function store(Request $request) { $request->validate([ 'diagnosis_id' => 'required', 'member_id' => 'required', 'total_claim' => 'required', 'benefit_id' => 'required' ]); // return response()->json($request->toArray()); $member = Member::find($request->member_id); $benefit = Benefit::find($request->benefit_id); $diagnosis = Icd::find($request->diagnosis_id); // Check Eligibility $validation = ClaimService::checkMemberEligibility($member, $benefit, $diagnosis, $request->total_claim); // Store Claim if ($validation['isEligible']) { $claim = ClaimService::storeClaim($member, $diagnosis, $request->total_claim, $benefit, 'requested'); } else { return response()->json([ 'data' => $validation, 'message' => $validation['errors'][0]['message'] ], 403); } return response()->json($claim); } /** * Show the specified resource. * @param int $id * @return Renderable */ public function show($id) { $claim = Claim::query() ->with([ 'member', 'member.currentPlan', 'member.currentPlan.benefits', 'member.currentCorporate', 'member.currentPolicy', // 'diagnosis', 'diagnoses', 'diagnoses.icd', 'benefit', 'files', 'claimRequest', 'claimRequest.files', 'items', 'items.claim_itemable', 'encounters', 'encounters.doctors', 'encounters.primaryDiagnoses', 'encounters.primaryDiagnoses.diagnosis', 'encounters.healthcare' ]) ->findOrFail($id); return Helper::responseJson(ClaimShowResource::make($claim)); } /** * Show the form for editing the specified resource. * @param int $id * @return Renderable */ public function edit($id) { return view('internal::edit'); } /** * Update the specified resource in storage. * @param Request $request * @param int $id * @return Renderable */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * @param int $id * @return Renderable */ public function destroy($id) { // } public function checkLimit(Request $request) { return true; } public function updateDetails(Request $request, $id) { $request->validate([ 'healthcare_id' => 'required', 'doctor_id' => 'required', 'start' => 'required', 'end' => 'required' ]); $claim = Claim::findOrFail($id); return $claim; } public function updateItems(Request $request, $id) { $request->validate([]); $claim = Claim::findOrFail($id); $order = 1; $data = []; $claim->items()->forceDelete(); $totalClaim = 0; foreach ($request->benefit_items as $benefitItem) { $benefit = Benefit::find($benefitItem['id']); if ($benefit) { $benefit->claimItem()->create([ 'claim_id' => $claim->id, 'order' => $order, 'name' => $benefit->code, 'currency' => 'IDR', 'nominal_ditagihkan' => $benefitItem['biaya_diajukan'] ?? 0, 'nominal_dicover' => $benefitItem['biaya_disetujui'] ?? 0, 'nominal_total' => $benefitItem['biaya_disetujui'] ?? 0, ]); $totalClaim += $benefitItem['biaya_disetujui']; } $order++; } // Update total $claim->total_claim = $totalClaim; $claim->save(); return Helper::responseJson([], message: "Item Claim berhasil di update"); } public function updateDiagnosis(Request $request, $id) { $request->validate([]); $claim = Claim::findOrFail($id); $claim->diagnoses()->forceDelete(); if ($request->primary) { foreach ($request->primary as $diagnosisId) { $claim->diagnoses()->create([ 'claim_id' => $claim->id, 'type' => 'primary', 'diagnosis_id' => $diagnosisId, 'note' => '', 'description' => '', ]); } } if ($request->secondary) { foreach ($request->secondary as $diagnosisId) { $claim->diagnoses()->create([ 'claim_id' => $claim->id, 'type' => 'secondary', 'diagnosis_id' => $diagnosisId, 'note' => '', 'description' => '', ]); } } return Helper::responseJson([], message: "Diagnosis berhasil di update"); } public function decline($id) { $claim = Claim::findOrFail($id); $claim->status = 'declined'; $claim->save(); return Helper::responseJson($claim, message: "Claim berhasil di decline"); } public function approve($id) { $claim = Claim::findOrFail($id); $claim->status = 'approved'; $claim->save(); return Helper::responseJson($claim, message: "Claim berhasil di approve"); } public function reOpen($id) { $claim = Claim::findOrFail($id); $claim->status = 'received'; $claim->save(); return Helper::responseJson($claim, message: "Claim berhasil di approve"); } public function downloadFinalLog($id) { $claim = Claim::findOrFail($id); $hospital = $claim->finalEncounter->healthcare ?? null; // TODO Fix this tipu tipu $inpationBenefit = $claim->member->currentPlan->benefits()->first(); $pdf = PDF::loadView('pdf.final_log', [ 'claim' => $claim, 'member' => $claim->member, 'dateOfAdmission' => $claim->start, 'hospital' => $hospital, 'inpationBenefit' => $inpationBenefit ]); return $pdf->download('Final LOG '.$claim->code.'.pdf'); $view = view('pdf.final_log', [ 'claim' => $claim, 'member' => $claim->member, 'dateOfAdmission' => $claim->start, 'hospital' => $hospital, 'inpationBenefit' => $inpationBenefit ]); return $view; } public function dataClaimReport(Request $request){ $file_name = 'Data Claim Report'; // Membuat penulis entitas Spout $writer = WriterEntityFactory::createXLSXWriter(); // Membuka penulis untuk menulis ke file $writer->openToFile(public_path('files/CorporatePlan&BenefitImportData.xlsx')); // Sheet 1 $writer->getCurrentSheet()->setName('Worksheet'); $headers_map_to_table_fields = Claim::$listing_doc_headers; $headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields); $writer->addRow($headerRow); $claims = Claim::with([ 'member', 'member.currentPolicy', 'member.currentPlan', 'member.currentCorporate', 'diagnoses' => function ($diagnosis) { return $diagnosis->where('type', 'primary'); }, 'diagnoses.icd', 'plan', 'benefit', 'claimRequest', 'claimRequest.service' ]) // ->latest() ->get()->toArray(); foreach ($claims as $index => $row){ $rowData = [ '', // Count of Usage $row['code'], // Claim Number '', // Insurar Code $row['member']['current_policy']? $row['member']['current_policy']['code'] : '', // Policy no $row['member']['current_corporate']? $row['member']['current_corporate']['name'] : '', // Corporate Name $row['member']['current_plan']? $row['member']['current_plan']['code'] : '', // Plan Code $row['member']['name'], // Member Name $row['member']['record_type'], // Member Status $row['member']['birth_date'], // Date of brith $row['member']['member_id'], // Member Number $row['member']['current_corporate']? $row['member']['current_corporate']['code'] : '', // Institution Code '', // Invoice Line Number $row['status'], // Claim Status '', // Admission Date '', // Discharge Date '', // Date Of Service '', // Place Of Service '', // Los '', // Provider code '', // Treating Doctor Code '', // Treating Doctor Name '', // Doctor Title $row['diagnoses']?$row['diagnoses'][0]['icd']['name']: '-', // Diagnosis $row['plan']?$row['plan']['service_code']: '', // Service Code $row['plan']?$row['plan']['type'] : '', // ServiceType $row['claim_request'] ? $row['claim_request']['service']['description'] : '', // ServiceDescription '', // UnitPrice '', // Quantity '', // Tarif '', // Claimable amount '', // Paid by customer '', // HD Disc '', // Doctor Notes '', // ConsultationID Date '', // Pharmacy Code '', // Pharmacy Name '', // Pharmacy Permit Number '', // Pharmacy Address '', // Pharmacy Phone number '', // Delivery Address '', // Claimable Status $row['claim_request'] ? $row['claim_request']['service']['description'] : '', // ServiceDescription, // Benefit Code ]; $row = WriterEntityFactory::createRowFromArray($rowData); $writer->addRow($row); } // $dataClaim = Claim::query // $dataPlans = Claim::query() // ->filter($request->all()) // ->where('corporate_id', $corporate_id) // // ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) { // // $corporatePlan->where('corporate_id', $corporate_id); // // }) // // ->with('corporatePlan') // ->orderBy('corporate_plan_id', 'asc') // ->get()->toArray(); // foreach ($dataPlans as $index => $row){ // $rowData = [ // $row['service_code'], // Service // $row['corporate_plan_id'], // Plan // $row['code'], // Customer plans // $row['type'], // Plan Type // $row['start'], // Start Date of Plan // $row['end'], // End Date of Plan // $row['require_referral'], // Referral // $row['referral_source'], // Referral Source // $row['referral_duration'], // Referral Duration // $row['family_plan'], // Family Plan // $row['family_plan_share_rules'], // Family Sharing Overflow // $row['limit_rules'], // Plan Limit // $row['layer'], // Layer ID // $row['layer_conditions'], // Layer Condition // $row['budget_type'], // Budget Type // $row['budget_code'], // Budget Code // $row['budget_conditions'], // Budget Condition // $row['surgery_limit'], // Surgery // $row['non_surgery_limit'], // Non Surgery // $row['max_claim_limit'], // Max/Claim // $row['max_claim_count'], // Max Count of Claim // $row['area_limit'], // Area // $row['limit_shared_plans'], // Shared Plan // $row['limit_shared_plan_type'], // Shared Plan Type // $row['cashless_percentage'], // Cashless(%) // $row['reimbursement_percentage'], // Reimbursement(%) // $row['digital_percentage'], // Digital(%) // $row['co_share_m_percentage'], // CoShareM(%) // $row['co_share_s_percentage'], // CoShareS(%) // $row['co_share_c_percentage'], // CoShareC(%) // $row['cashless_deductible'], // Cashless Deductible // $row['cashless_deductible'], // Reimbursement Deductible // $row['digital_deductible'], // Digital Deductible // $row['co_share_m_deductible'], // DeductibleM // $row['co_share_s_deductible'], // DeductibleS // $row['co_share_c_deductible'], // DeductibleC // $row['co_share_deductible_condition'], // Co-share & Deductible Condition // $row['msc'], // MSC // $row['genders'], // Gender // $row['min_age'], // Min Age // $row['max_age'], // Max Age // $row['rule_of_excess'], // Rule of Excess // $row['max_excess_covered'], // Max Excess Covered // $row['prorate_type'], // Prorate Type // $row['prorate_lookup'], // Prorate Lookup // $row['currency'], // Currency // $row['max_surgery_reinstatement_days'], // Reinstatement days for Surgery NonSurgery // $row['max_surgery_periode_days'], // Max Periode of Surgery Non Surgery // ]; // $row = WriterEntityFactory::createRowFromArray($rowData); // $writer->addRow($row); // } $writer->close(); return Helper::responseJson([ 'file_name' => "Data Claim Report " . date('Y-m-d h:i:s'), "file_url" => url('files/CorporatePlan&BenefitImportData.xlsx') ]); } }