diff --git a/Modules/Internal/Http/Controllers/Api/ClaimController.php b/Modules/Internal/Http/Controllers/Api/ClaimController.php index 78c739ea..749bbc5a 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimController.php @@ -8,6 +8,8 @@ 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; @@ -16,6 +18,7 @@ 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; @@ -526,4 +529,96 @@ class ClaimController extends Controller "file_url" => url('files/Benefit Usage Report.xlsx') ]); } + + //////////////////// 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'); + } } diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index a4a57e86..1aef58cc 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -191,6 +191,12 @@ Route::prefix('internal')->group(function () { Route::post('claims/{id}/decline', [ClaimController::class, 'decline'])->name('claim.decline'); Route::post('claims/{id}/approve', [ClaimController::class, 'approve'])->name('claim.approve'); Route::post('claims/{id}/re-open', [ClaimController::class, 'reOpen'])->name('claim.re-open'); + + Route::post('claims/{id}/carehistory', [ClaimController::class, 'storeHistoryCare']); + Route::post('claims/carehistory/{id}/update', [ClaimController::class, 'updateHistoryCare']); + Route::get('claims/carehistory/{id}', [ClaimController::class, 'showHistoryCare']); + Route::post('claims/carehistory/{id}/approval', [ClaimController::class, 'approvalHistoryCare']); + Route::post('claims', [ClaimController::class, 'store']); Route::get('claims/{id}', [ClaimController::class, 'show']); Route::put('claims/{id}', [ClaimController::class, 'update']); diff --git a/Modules/Internal/Transformers/ClaimHistoryCareResource.php b/Modules/Internal/Transformers/ClaimHistoryCareResource.php new file mode 100644 index 00000000..feff9ff5 --- /dev/null +++ b/Modules/Internal/Transformers/ClaimHistoryCareResource.php @@ -0,0 +1,44 @@ +with(['icd'])->get()->toArray(); + + $data = [ + 'id' => $claim['id'], + 'service_code' => $claim['service_code'], + 'admision_date' => $claim['admision_date'], + 'discharge_date' => $claim['discharge_date'], + 'claim_id' => $claim['claim_id'], + 'organization_id' => $claim['organization_id'], + 'organization_name' => $claim['organization'] ? $claim['organization']['name'] : '-', + 'practitioner_id' => $claim['practitioner_id'], + 'practitioner_name' => $claim['practitioner'] ? $claim['practitioner']['person']['name'] : '-', + 'medical_record_number' => $claim['medical_record_number'], + 'symptoms' => $claim['symptoms'], + 'sign' => $claim['sign'], + 'main_diagnosis_id' => $claim['main_diagnosis_id'], + 'main_diagnosis_name' => $claim['icd'] ? $claim['icd']['name'] : '-', + 'status' => $claim['status'], + 'secondary_diagnosis' => $secondaryDiagnosis, + ]; + + return $data; + } +} diff --git a/app/Models/ClaimHistoryCare.php b/app/Models/ClaimHistoryCare.php new file mode 100644 index 00000000..448d2e2a --- /dev/null +++ b/app/Models/ClaimHistoryCare.php @@ -0,0 +1,47 @@ +belongsTo(Organization::class, 'organization_id'); + } + + public function practitioner() + { + return $this->belongsTo(Practitioner::class, 'practitioner_id'); + } + + public function icd() + { + return $this->belongsTo(Icd::class, 'main_diagnosis_id'); + } + + + +} diff --git a/app/Models/DiagnosisSecondaryClaimHistoryCare.php b/app/Models/DiagnosisSecondaryClaimHistoryCare.php new file mode 100644 index 00000000..113015ec --- /dev/null +++ b/app/Models/DiagnosisSecondaryClaimHistoryCare.php @@ -0,0 +1,28 @@ +belongsTo(Icd::class, 'icd_id'); + } +} diff --git a/app/Models/Icd.php b/app/Models/Icd.php index 981c5a57..b2495a6d 100644 --- a/app/Models/Icd.php +++ b/app/Models/Icd.php @@ -74,4 +74,14 @@ class Icd extends Model }); } + public function claim_history_care() + { + return $this->hasMany(CliamHistoryCare::class, 'main_diagnosis_id', 'id'); + } + + public function diagnosis_secondary_claim_history_care() + { + return $this->hasMany(DiagnosisSecondaryCliamHistoryCare::class, 'icd_id', 'id'); + } + } diff --git a/app/Models/Organization.php b/app/Models/Organization.php index 568abede..9b15406d 100644 --- a/app/Models/Organization.php +++ b/app/Models/Organization.php @@ -107,4 +107,8 @@ class Organization extends Model { return $this->hasMany(ClaimRequest::class, 'organization_id', 'id'); } + public function claim_history_care() + { + return $this->hasOne(ClaimHistoryCare::class, 'organization_id', 'id'); + } } diff --git a/app/Models/Practitioner.php b/app/Models/Practitioner.php index 43d0fac8..c602d1a3 100644 --- a/app/Models/Practitioner.php +++ b/app/Models/Practitioner.php @@ -47,4 +47,11 @@ class Practitioner extends Model { return $this->hasMany(PractitionerRole::class, 'practitioner_id'); } + + public function claim_history_care() + { + return $this->hasMany(ClaimHistoryCare::class, 'practitioner_id'); + } + + } diff --git a/database/migrations/2023_10_26_110846_create_claim_history_care_table.php b/database/migrations/2023_10_26_110846_create_claim_history_care_table.php new file mode 100644 index 00000000..93c60d3f --- /dev/null +++ b/database/migrations/2023_10_26_110846_create_claim_history_care_table.php @@ -0,0 +1,42 @@ +id(); + $table->timestamps(); + $table->string('service_code'); + $table->date('admision_date'); + $table->date('discharge_date'); + $table->integer('claim_id'); + $table->integer('organization_id'); + $table->integer('practitioner_id'); + $table->string('medical_record_number'); + $table->string('symptoms'); + $table->string('sign'); + $table->integer('main_diagnosis_id'); + $table->integer('status'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('claim_history_cares'); + } +}; diff --git a/database/migrations/2023_10_26_115410_create_diagnosis_secondary_claim_history_care_table.php b/database/migrations/2023_10_26_115410_create_diagnosis_secondary_claim_history_care_table.php new file mode 100644 index 00000000..02fa5dc2 --- /dev/null +++ b/database/migrations/2023_10_26_115410_create_diagnosis_secondary_claim_history_care_table.php @@ -0,0 +1,34 @@ +id(); + $table->timestamps(); + $table->integer('claim_history_care_id'); + $table->integer('icd_id'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('diagnosis_secondary_claim_history_care'); + } +};