[WIP] Claim Encounters
This commit is contained in:
@@ -77,7 +77,7 @@ class ClaimController extends Controller
|
||||
'claimRequest',
|
||||
'claimRequest.files',
|
||||
'items',
|
||||
'items.claim_itemable'
|
||||
'items.claim_itemable',
|
||||
])
|
||||
->findOrFail($id);
|
||||
|
||||
|
||||
@@ -107,7 +107,12 @@ class ClaimController extends Controller
|
||||
'claimRequest',
|
||||
'claimRequest.files',
|
||||
'items',
|
||||
'items.claim_itemable'
|
||||
'items.claim_itemable',
|
||||
'encounters',
|
||||
'encounters.doctors',
|
||||
'encounters.primaryDiagnoses',
|
||||
'encounters.primaryDiagnoses.diagnosis',
|
||||
'encounters.healthcare'
|
||||
])
|
||||
->findOrFail($id);
|
||||
|
||||
@@ -150,6 +155,19 @@ class ClaimController extends Controller
|
||||
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)
|
||||
{
|
||||
@@ -242,8 +260,7 @@ class ClaimController extends Controller
|
||||
{
|
||||
$claim = Claim::findOrFail($id);
|
||||
|
||||
// TODO Fix this tipu tipu
|
||||
$hospital = Organization::where('code', 'ORG000D')->first();
|
||||
$hospital = $claim->finalEncounter->healthcare ?? null;
|
||||
|
||||
// TODO Fix this tipu tipu
|
||||
$inpationBenefit = $claim->member->currentPlan->benefits()->first();
|
||||
@@ -251,17 +268,17 @@ class ClaimController extends Controller
|
||||
$pdf = PDF::loadView('pdf.final_log', [
|
||||
'claim' => $claim,
|
||||
'member' => $claim->member,
|
||||
'dateOfAdmission' => now(),
|
||||
'dateOfAdmission' => $claim->start,
|
||||
'hospital' => $hospital,
|
||||
'inpationBenefit' => $inpationBenefit
|
||||
]);
|
||||
|
||||
return $pdf->download('invoice.pdf');
|
||||
return $pdf->download('Final LOG '.$claim->code.'.pdf');
|
||||
|
||||
$view = view('pdf.final_log', [
|
||||
'claim' => $claim,
|
||||
'member' => $claim->member,
|
||||
'dateOfAdmission' => now(),
|
||||
'dateOfAdmission' => $claim->start,
|
||||
'hospital' => $hospital,
|
||||
'inpationBenefit' => $inpationBenefit
|
||||
]);
|
||||
|
||||
281
Modules/Internal/Http/Controllers/ClaimEncounterController.php
Normal file
281
Modules/Internal/Http/Controllers/ClaimEncounterController.php
Normal file
@@ -0,0 +1,281 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Claim;
|
||||
use App\Models\Encounter;
|
||||
use App\Models\Practitioner;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Internal\Transformers\EncounterResource;
|
||||
|
||||
class ClaimEncounterController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('internal::index');
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, $claim_id)
|
||||
{
|
||||
$request->validate([
|
||||
'service_code' => 'required',
|
||||
'tanggal_masuk' => 'required',
|
||||
'tanggal_keluar' => 'required'
|
||||
]);
|
||||
$claim = Claim::findOrFail($claim_id);
|
||||
|
||||
// return ($request->primary_diagnosis['id']);
|
||||
// die;
|
||||
// return $request->toArray();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$newEncounterData = [
|
||||
'status' => 'completed',
|
||||
'class' => $request->service_code,
|
||||
'type' => 'Consultation',
|
||||
'patient_id' => $claim->member->person_id,
|
||||
'start' => $request->tanggal_masuk,
|
||||
'end' => $request->tanggal_keluar,
|
||||
'number_of_bed' => $request->number_of_bed,
|
||||
'duration_day' => $request->duration_day
|
||||
];
|
||||
|
||||
if ($request->has('healthcare')) {
|
||||
$newEncounterData['healthcare_id'] = $request->healthcare['id'];
|
||||
}
|
||||
|
||||
// Create New Encounter
|
||||
$newEncounter = $claim->encounters()->create($newEncounterData);
|
||||
|
||||
|
||||
// --------------------------------------------
|
||||
// Meta
|
||||
// TODO Handle if healthcare not primaya
|
||||
$newEncounter->metas()->updateOrCreate([
|
||||
'type' => 'MEDRECID',
|
||||
'system' => 'primaya-his'
|
||||
], [
|
||||
'type' => 'MEDRECID',
|
||||
'system' => 'primaya-his',
|
||||
'value' => $request->medical_record_number
|
||||
]);
|
||||
|
||||
// ---------------------------------------------
|
||||
// Handle Diagnosis
|
||||
if ($request->has('primary_diagnosis') && $request->primary_diagnosis) {
|
||||
$newEncounter->diagnoses()->create([
|
||||
'diagnosis_id' => $request->primary_diagnosis['id'],
|
||||
'type' => 'primary',
|
||||
'use' => 'discharge',
|
||||
'source' => 'primecenter',
|
||||
'description' => 'Batching',
|
||||
]);
|
||||
}
|
||||
|
||||
if ($request->has('secondary_diagnoses')) {
|
||||
foreach ($request->secondary_diagnoses as $diagnosis) {
|
||||
if (!isset($diagnosis['id'])) { // Handle Null Values
|
||||
continue;
|
||||
}
|
||||
$newEncounter->diagnoses()->create([
|
||||
'diagnosis_id' => $diagnosis['id'],
|
||||
'type' => 'secondary',
|
||||
'use' => 'discharge',
|
||||
'source' => 'primecenter',
|
||||
'description' => 'Batching',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
// Handle Doctors as primary Doctor
|
||||
if ($request->has('doctor')) {
|
||||
$newEncounter->participants()->create([
|
||||
'type' => 'Doctor',
|
||||
'participantable_type' => Practitioner::class,
|
||||
'participantable_id' => $request->doctor['id'],
|
||||
]);
|
||||
}
|
||||
DB::commit();
|
||||
|
||||
$newEncounter->load(['diagnoses', 'doctors', 'healthcare']);
|
||||
|
||||
return Helper::responseJson(data: EncounterResource::make($newEncounter), message: 'Encounter berhasil ditambahkan');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('internal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, $claim_id, $encounter_id)
|
||||
{
|
||||
$request->validate([
|
||||
'service_code' => 'required',
|
||||
'tanggal_masuk' => 'required',
|
||||
'tanggal_keluar' => 'required'
|
||||
]);
|
||||
// $claim = Claim::findOrFail($claim_id);
|
||||
|
||||
// return ($request->primary_diagnosis['id']);
|
||||
// die;
|
||||
// return $request->toArray();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$encounter = Encounter::findOrFail($encounter_id);
|
||||
|
||||
$encounterData = [
|
||||
'status' => 'completed',
|
||||
'class' => $request->service_code,
|
||||
'type' => 'Consultation',
|
||||
'start' => $request->tanggal_masuk,
|
||||
'end' => $request->tanggal_keluar,
|
||||
'number_of_bed' => $request->number_of_bed,
|
||||
'duration_day' => $request->duration_day
|
||||
];
|
||||
|
||||
if ($request->has('healthcare')) {
|
||||
$encounterData['healthcare_id'] = $request->healthcare['id'];
|
||||
}
|
||||
|
||||
// Update The Encounter
|
||||
$encounter->fill($encounterData);
|
||||
$encounter->save();
|
||||
|
||||
|
||||
// --------------------------------------------
|
||||
// Meta
|
||||
// TODO Handle if healthcare not primaya
|
||||
$encounter->metas()->updateOrCreate([
|
||||
'type' => 'MEDRECID',
|
||||
'system' => 'primaya-his'
|
||||
], [
|
||||
'type' => 'MEDRECID',
|
||||
'system' => 'primaya-his',
|
||||
'value' => $request->medical_record_number
|
||||
]);
|
||||
|
||||
// ---------------------------------------------
|
||||
// Handle Diagnosis
|
||||
if ($request->has('primary_diagnosis')) {
|
||||
$encounter->diagnoses()->where('type', 'primary')->delete();
|
||||
$encounter->diagnoses()->create([
|
||||
'diagnosis_id' => $request->primary_diagnosis['id'],
|
||||
'type' => 'primary',
|
||||
'use' => 'discharge',
|
||||
'source' => 'primecenter',
|
||||
'description' => 'Batching',
|
||||
]);
|
||||
}
|
||||
|
||||
if ($request->has('secondary_diagnoses')) {
|
||||
$encounter->diagnoses()->where('type', 'secondary')->delete();
|
||||
foreach ($request->secondary_diagnoses as $diagnosis) {
|
||||
if (!isset($diagnosis['id'])) { // Handle Null Values
|
||||
continue;
|
||||
}
|
||||
$encounter->diagnoses()->create([
|
||||
'diagnosis_id' => $diagnosis['id'],
|
||||
'type' => 'secondary',
|
||||
'use' => 'discharge',
|
||||
'source' => 'primecenter',
|
||||
'description' => 'Batching',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
// Handle Doctors as primary Doctor
|
||||
// if ($request->has('doctor')) {
|
||||
// $encounter->participants()->create([
|
||||
// 'type' => 'Doctor',
|
||||
// 'participantable_type' => Practitioner::class,
|
||||
// 'participantable_id' => $request->doctor['id'],
|
||||
// ]);
|
||||
// }
|
||||
DB::commit();
|
||||
|
||||
$encounter->load(['diagnoses', 'doctors', 'healthcare']);
|
||||
|
||||
return Helper::responseJson(data: EncounterResource::make($encounter), message: 'Encounter berhasil ditambahkan');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function setFinalEncounter(Request $request, $claim_id)
|
||||
{
|
||||
$request->validate([
|
||||
'encounter_id' => 'required'
|
||||
]);
|
||||
|
||||
$claim = Claim::findOrFail($claim_id);
|
||||
|
||||
$claim->final_encounter_id = $request->encounter_id;
|
||||
$claim->save();
|
||||
|
||||
return Helper::responseJson(data: $claim, message: "Success Update Final Encounter");
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ use Modules\Internal\Http\Controllers\Api\PlanController;
|
||||
use Modules\Internal\Http\Controllers\Api\ProvinceController;
|
||||
use Modules\Internal\Http\Controllers\Api\SpecialityController;
|
||||
use Modules\Internal\Http\Controllers\Api\VillageController;
|
||||
use Modules\Internal\Http\Controllers\ClaimEncounterController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -119,6 +120,10 @@ Route::prefix('internal')->group(function () {
|
||||
Route::get('members', [MemberController::class, 'index']);
|
||||
Route::get('members/{member_id}/benefits', [MemberController::class, 'benefits']);
|
||||
|
||||
Route::post('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'store']);
|
||||
Route::post('claims/{claim_id}/encounters/{encounter_id}/update', [ClaimEncounterController::class, 'update']);
|
||||
Route::post('claims/{claim_id}/set-final-encounter', [ClaimEncounterController::class, 'setFinalEncounter']);
|
||||
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
Route::post('claims/{id}/update-items', [ClaimController::class, 'updateItems'])->name('claim.update-items');
|
||||
Route::post('claims/{id}/update-diagnosis', [ClaimController::class, 'updateDiagnosis'])->name('claim.update-diagnosis');
|
||||
|
||||
@@ -37,6 +37,10 @@ class ClaimShowResource extends JsonResource
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'primary';})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'secondary';})->values();
|
||||
|
||||
$data['encounters'] = $this->encounters->map(function($encounter) {
|
||||
$encounterData = EncounterResource::make($encounter);
|
||||
return $encounterData;
|
||||
});
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
31
Modules/Internal/Transformers/EncounterResource.php
Normal file
31
Modules/Internal/Transformers/EncounterResource.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class EncounterResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$encounter = parent::toArray($request);
|
||||
|
||||
$encounter['class_name'] = $this->service->name;
|
||||
$encounter['primary_diagnosis'] = $this->primaryDiagnoses->first();
|
||||
$encounter['primary_doctor'] = $this->doctors->first()
|
||||
? array_merge(
|
||||
$this->doctors->first()->person->toArray(),
|
||||
$this->doctors->first()->toArray()
|
||||
)
|
||||
: null;
|
||||
$encounter['medical_record_number'] = @$this->meta->MEDRECID ?? null;
|
||||
|
||||
return $encounter;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user