875 lines
33 KiB
PHP
875 lines
33 KiB
PHP
<?php
|
|
|
|
namespace Modules\Internal\Http\Controllers\Api;
|
|
|
|
use App\Helpers\Helper;
|
|
use App\Models\Benefit;
|
|
use App\Models\Claim;
|
|
use App\Models\Icd;
|
|
use App\Models\Member;
|
|
use App\Models\Organization;
|
|
use App\Models\ClaimHistoryCare;
|
|
use App\Models\DiagnosisSecondaryClaimHistoryCare;
|
|
use App\Services\ClaimService;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\HospitalPortal\Helpers\ApiResponse;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Modules\Internal\Transformers\ClaimShowResource;
|
|
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 Illuminate\Support\Facades\DB;
|
|
|
|
use PDF;
|
|
|
|
class ClaimController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
* @return Renderable
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$claims = Claim::with([
|
|
'member',
|
|
'member.currentCorporate',
|
|
'member.currentCorporate.currentPolicy',
|
|
'member.currentPlan',
|
|
'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 . "%");
|
|
});
|
|
});
|
|
})
|
|
->where('status', '!=', 'requested') // Penjagaan agar approve baru masuk ke claim management
|
|
->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)
|
|
{
|
|
$claim = Claim::query()
|
|
->with([
|
|
'member',
|
|
'plan',
|
|
'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(ClaimEditResource::make($claim));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
* @param Request $request
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function update(Request $request, $id)
|
|
{
|
|
$customMessages = [
|
|
'required' => 'Kolom :attribute wajib diisi.',
|
|
'numeric' => 'Kolom :attribute harus berupa angka.',
|
|
];
|
|
|
|
$data = [
|
|
'benefit_desc' => $request->benefit_desc,
|
|
'amount_incurred' => $request->amount_incurred,
|
|
'amount_approved' => $request->amount_approved,
|
|
'amount_not_approved' => $request->amount_not_approved,
|
|
'excess_paid' => $request->excess_paid,
|
|
];
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
'benefit_desc' => 'required',
|
|
'amount_incurred' => 'required|numeric',
|
|
'amount_approved' => 'required|numeric',
|
|
'amount_not_approved' => 'required|numeric',
|
|
'excess_paid' => 'required|numeric',
|
|
], $customMessages);
|
|
|
|
if ($validator->fails()) {
|
|
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
|
}
|
|
|
|
// Validasi berhasil, lanjutkan dengan pembaruan data
|
|
$claim = Claim::findOrFail($id);
|
|
$claim->fill([
|
|
'benefit_desc' => $request->benefit_desc,
|
|
'amount_incurred' => $request->amount_incurred,
|
|
'amount_approved' => $request->amount_approved,
|
|
'amount_not_approved' => $request->amount_not_approved,
|
|
'excess_paid' => $request->excess_paid,
|
|
])->save();
|
|
|
|
return $claim;
|
|
}
|
|
|
|
/**
|
|
* 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/Benefit Usage Report.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',
|
|
'encounters',
|
|
])
|
|
// ->latest()
|
|
->get()->toArray();
|
|
foreach ($claims as $index => $row){
|
|
$rowData = [
|
|
'', // Count of Usage
|
|
$row['code'], // Claim Number
|
|
$row['member']? $row['member']['payor_id'] : '-', // 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
|
|
$row['claim_request']? $row['claim_request']['submission_date'] : '-', // 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
|
|
$row['member']['current_policy']['latest_limit_journal'] ? abs($row['member']['current_policy']['latest_limit_journal']['total_credit']): '', // 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
|
|
];
|
|
// dd($rowData);
|
|
$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/Benefit Usage Report.xlsx')
|
|
]);
|
|
}
|
|
|
|
public function getDetailClaims($claim_id)
|
|
{
|
|
$customer_data = DB::table('claim_requests')
|
|
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
|
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
|
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
|
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
|
|
->where('claim_requests.id', '=', $claim_id)
|
|
->select(
|
|
'claim_requests.code',
|
|
'claim_requests.submission_date',
|
|
'claims.status',
|
|
'members.name',
|
|
'members.payor_id',
|
|
'members.member_id',
|
|
'claim_requests.payment_type',
|
|
'corporates.name AS coporate_name',
|
|
)
|
|
->first();
|
|
$results['customer_data'] = $customer_data;
|
|
|
|
$documents = DB::table('files')
|
|
->where('fileable_type', 'App\Models\ClaimRequest')
|
|
->where('fileable_id', $claim_id)
|
|
->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'type')
|
|
->orderBy('id', 'desc')
|
|
->get();
|
|
$results['documents'] = $documents;
|
|
|
|
$request_documents = DB::table('claim_request_files')
|
|
->where('claim_request_id', $claim_id)
|
|
->get();
|
|
$results['request_documents'] = $request_documents;
|
|
|
|
$claim_services = DB::table('claim_services')
|
|
->where('claim_services.claim_request_id', $claim_id)
|
|
->select(
|
|
'claim_services.id',
|
|
'claim_services.addmission_date',
|
|
'claim_services.discharge_date',
|
|
'claim_services.service_id',
|
|
DB::raw('(SELECT services.name FROM services WHERE id = claim_services.service_id LIMIT 1) AS name_services'),
|
|
'claim_services.hospital_id',
|
|
DB::raw('(SELECT corporate_hospitals.name FROM corporate_hospitals WHERE id = claim_services.hospital_id LIMIT 1) AS name_hospitals'),
|
|
)
|
|
->groupBy('claim_services.id')
|
|
->first();
|
|
$results['claim_services'] = $claim_services;
|
|
|
|
if($claim_services && $claim_services->id)
|
|
{
|
|
$claim_service_benefits = DB::table('claim_service_benefits')
|
|
->where('claim_service_id', $claim_services->id)
|
|
->select(
|
|
'claim_service_benefits.claim_service_id',
|
|
'claim_service_benefits.benefit_id',
|
|
DB::raw('(SELECT benefits.description FROM benefits WHERE id = claim_service_benefits.benefit_id LIMIT 1) AS name_benefits')
|
|
)
|
|
->get();
|
|
foreach ($claim_service_benefits as $item) {
|
|
$claimServiceId = $item->claim_service_id;
|
|
$nameBenefits = $item->name_benefits;
|
|
$benefitId = $item->benefit_id."";
|
|
if (!isset($output[$claimServiceId])) {
|
|
$output[$claimServiceId] = (object)[
|
|
"claim_service_id" => $claimServiceId,
|
|
"name_benefits" => $nameBenefits,
|
|
"benefit_id" => [$benefitId],
|
|
];
|
|
} else {
|
|
$output[$claimServiceId]->name_benefits .= ", " . $nameBenefits;
|
|
$output[$claimServiceId]->benefit_id[] = $benefitId."";
|
|
}
|
|
}
|
|
$output = array_values($output);
|
|
|
|
$results['claim_service_benefits'] = $output[0];
|
|
}
|
|
else
|
|
{
|
|
$results['claim_service_benefits'] = null;
|
|
}
|
|
|
|
|
|
return Helper::responseJson($results);
|
|
}
|
|
|
|
public function getServices($claim_id)
|
|
{
|
|
//Corporate_id
|
|
$corporate_id = DB::table('claim_requests')
|
|
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
|
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
|
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
|
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
|
|
->where('claim_requests.id', '=', $claim_id)
|
|
->select('corporates.id')
|
|
->first();
|
|
|
|
//Service Type
|
|
$service_type = DB::table('corporate_services')
|
|
->leftJoin('services','corporate_services.service_code', 'services.code')
|
|
->where('corporate_services.corporate_id', $corporate_id->id)
|
|
->select('services.name', 'services.code', 'services.id')
|
|
->get();
|
|
$results['service_type'] = $service_type;
|
|
|
|
//Benefit Name
|
|
$benefit_name = DB::table('corporate_benefits')
|
|
->leftJoin('benefits', 'corporate_benefits.benefit_id', 'benefits.id')
|
|
->where('corporate_benefits.corporate_id', $corporate_id->id)
|
|
->select('benefits.code', 'benefits.description', 'benefits.id')
|
|
->get();
|
|
$results['benefit_name'] = $benefit_name;
|
|
|
|
//Hospital
|
|
$hospital = DB::table('corporate_hospitals')
|
|
->where('corporate_hospitals.corporate_id', $corporate_id->id)
|
|
->where('corporate_hospitals.active', 1)
|
|
->select('corporate_hospitals.code', 'corporate_hospitals.name', 'corporate_hospitals.id')
|
|
->get();
|
|
$results['hospital'] = $hospital;
|
|
|
|
return Helper::responseJson($results);
|
|
}
|
|
|
|
public function saveServices(Request $request)
|
|
{
|
|
$request->validate([
|
|
'claim_request_id' => 'required',
|
|
'dateAdd' => 'required',
|
|
'dateDisc' => 'required',
|
|
'serviceType' => 'required',
|
|
'hospital' => 'required',
|
|
'benefitName' => 'required',
|
|
]);
|
|
if($request->flagAddService === 'add')
|
|
{
|
|
$data = [
|
|
'claim_request_id' => $request->claim_request_id,
|
|
'service_id' => $request->serviceType,
|
|
'hospital_id' => $request->hospital,
|
|
'addmission_date' => $request->dateAdd,
|
|
'discharge_date' => $request->dateDisc,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => null,
|
|
];
|
|
$id = DB::table('claim_services')
|
|
->insertGetId($data);
|
|
foreach ($request->benefitName as $value)
|
|
{
|
|
DB::table('claim_service_benefits')
|
|
->insert([
|
|
'claim_service_id' => $id,
|
|
'benefit_id' => $value,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
}
|
|
}
|
|
else if($request->flagAddService === 'edit')
|
|
{
|
|
$data = [
|
|
'claim_request_id' => $request->claim_request_id,
|
|
'service_id' => $request->serviceType,
|
|
'hospital_id' => $request->hospital,
|
|
'addmission_date' => $request->dateAdd,
|
|
'discharge_date' => $request->dateDisc,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => null,
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
DB::table('claim_services')
|
|
->where('claim_services.id', $request->idService)
|
|
->update($data);
|
|
|
|
DB::table('claim_service_benefits')
|
|
->where('claim_service_id', $request->idService)
|
|
->delete();
|
|
|
|
foreach ($request->benefitName as $value)
|
|
{
|
|
DB::table('claim_service_benefits')
|
|
->insert([
|
|
'claim_service_id' => $request->idService,
|
|
'benefit_id' => $value,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
}
|
|
}
|
|
|
|
return Helper::responseJson([]);
|
|
}
|
|
|
|
public function requestDocuments(Request $request)
|
|
{
|
|
$request->validate([
|
|
'claim_id' => 'required',
|
|
'note' => 'required',
|
|
]);
|
|
|
|
$condition = $request->input('condition');
|
|
$diagnosis = $request->input('diagnosis');
|
|
$result = $request->input('result');
|
|
$note = $request->input('note');
|
|
|
|
$dataToInsert = [];
|
|
if ($condition) {
|
|
$dataToInsert[] = [
|
|
'claim_request_id' => $request->claim_id,
|
|
'date' => date('Y-m-d H:i:s'),
|
|
'type' => 'claim-kondisi',
|
|
'description' => $note,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
}
|
|
if ($diagnosis) {
|
|
$dataToInsert[] = [
|
|
'claim_request_id' => $request->claim_id,
|
|
'date' => date('Y-m-d H:i:s'),
|
|
'type' => 'claim-diagnosis',
|
|
'description' => $note,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
}
|
|
if ($result) {
|
|
$dataToInsert[] = [
|
|
'claim_request_id' => $request->claim_id,
|
|
'date' => date('Y-m-d H:i:s'),
|
|
'type' => 'claim-result',
|
|
'description' => $note,
|
|
'created_by' =>auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
}
|
|
DB::table('claim_request_files')->insert($dataToInsert);
|
|
|
|
return Helper::responseJson([]);
|
|
}
|
|
|
|
//////////////////// History Care Hospital ///////////////////////////
|
|
|
|
public function storeHistoryCare(Request $request, $id){
|
|
$request->validate([
|
|
'service_code' => 'required',
|
|
'admision_date' => 'required',
|
|
'discharge_date' => 'required',
|
|
'organization_id' => 'required',
|
|
'practitioner_id' => 'required',
|
|
'medical_record_number' => 'required',
|
|
'symptoms' => 'required',
|
|
'sign' => 'required',
|
|
'main_diagnosis_id' => 'required',
|
|
]);
|
|
|
|
$data = [
|
|
'service_code' => $request->service_code,
|
|
'admision_date' => $request->admision_date,
|
|
'discharge_date' => $request->discharge_date,
|
|
'organization_id' => $request->organization_id,
|
|
'practitioner_id' => $request->practitioner_id,
|
|
'medical_record_number' => $request->medical_record_number,
|
|
'symptoms' => $request->symptoms,
|
|
'sign' => $request->sign,
|
|
'claim_id' => $id,
|
|
'main_diagnosis_id' => $request->main_diagnosis_id,
|
|
'status' => 0,
|
|
];
|
|
|
|
$claimHistoryCare = ClaimHistoryCare::create($data);
|
|
if (count($request->secondary_diagnosis_id)) {
|
|
foreach($request->secondary_diagnosis_id as $value){
|
|
$dataSecondary = [
|
|
'claim_history_care_id' => $claimHistoryCare->id,
|
|
'icd_id' => intval($value)
|
|
];
|
|
DiagnosisSecondaryClaimHistoryCare::create($dataSecondary);
|
|
}
|
|
}
|
|
|
|
return Helper::responseJson($claimHistoryCare);
|
|
}
|
|
|
|
public function updateHistoryCare(Request $request, $id){
|
|
$data = $request->validate([
|
|
'service_code' => 'required',
|
|
'admision_date' => 'required',
|
|
'discharge_date' => 'required',
|
|
'organization_id' => 'required',
|
|
'practitioner_id' => 'required',
|
|
'medical_record_number' => 'required',
|
|
'symptoms' => 'required',
|
|
'sign' => 'required',
|
|
'main_diagnosis_id' => 'required',
|
|
]);
|
|
|
|
// $data['status'] = 0;
|
|
|
|
$claimHistoryCare = ClaimHistoryCare::findOrFail($id);
|
|
$claimHistoryCare->update($data);
|
|
|
|
// Hapus diagnosis sekunder yang terkait
|
|
DiagnosisSecondaryClaimHistoryCare::where('claim_history_care_id', $id)->delete();
|
|
|
|
if (count($request->secondary_diagnosis_id)) {
|
|
foreach ($request->secondary_diagnosis_id as $value) {
|
|
$dataSecondary = [
|
|
'claim_history_care_id' => $claimHistoryCare->id,
|
|
'icd_id' => intval($value),
|
|
];
|
|
DiagnosisSecondaryClaimHistoryCare::create($dataSecondary);
|
|
}
|
|
}
|
|
|
|
return Helper::responseJson(message: 'Data Berhasil di update');
|
|
|
|
}
|
|
|
|
public function showHistoryCare($id){
|
|
$data = ClaimHistoryCare::with(['organization', 'practitioner', 'practitioner.person', 'icd'])->find($id);
|
|
|
|
return Helper::responseJson(ClaimHistoryCareResource::make($data));
|
|
}
|
|
|
|
public function approvalHistoryCare(Request $request, $id){
|
|
$claimHistoryCare = ClaimHistoryCare::findOrFail($id);
|
|
$claimHistoryCare->status = $request->status;
|
|
$claimHistoryCare->save();
|
|
|
|
return Helper::responseJson(message: 'Data Berhasil di update');
|
|
}
|
|
}
|