Merge remote-tracking branch 'origin/staging' into origin/production

This commit is contained in:
Server D3 Linksehat
2025-02-24 16:03:57 +07:00
37 changed files with 1299 additions and 250 deletions

View File

@@ -37,27 +37,24 @@ class MemberController extends Controller
else
{
$members = DB::table('members')
->leftJoin('member_policies', 'member_policies.member_id', '=', 'members.member_id')
->leftJoin('persons', 'persons.id', '=', 'members.person_id')
->where('members.member_id', '=', $request->no_polis)
->where('members.birth_date', '=', $request->birth_date)
->whereNull('members.deleted_at') // Mengecek apakah deleted_at adalah NULL
->select(
'members.id',
'members.name',
'members.member_id',
'member_policies.policy_id',
'persons.nik',
'members.email',
'members.birth_date',
'members.gender',
'members.marital_status',
'members.language',
'members.race',
'members.relation_with_principal'
)
->first(); // Mengambil hasil pertama
->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id')
->leftJoin('persons', 'persons.id', '=', 'members.person_id')
->where('members.member_id', '=', $request->no_polis)
->where('members.birth_date', '=', $request->birth_date)
->select(
'members.id',
'members.name',
'members.member_id',
'member_policies.policy_id',
'persons.nik',
'members.email',
'members.birth_date',
'members.gender',
'members.marital_status',
'members.language',
'members.race',
'members.relation_with_principal')
->first();
if($members)
{
$res_data['members'] = $members;
@@ -134,6 +131,17 @@ class MemberController extends Controller
$res_data['companies'] = $companies;
// specialities
$specialities = DB::table('specialities')
->select(
'specialities.id',
'specialities.name'
)
->orderBy('specialities.name','asc')
->get();
$res_data['specialities'] = $specialities;
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
}

View File

@@ -36,6 +36,8 @@ class RequestLogController extends Controller
'address_provider' => !empty($request->address_provider) ? $request->address_provider : null,
'submission_date' => $request->submission_date,
'corporate_id_partner' => !empty($request->corporate_id_partner) ? $request->corporate_id_partner : [],
'specialities_id' => $request->specialities_id,
'dppj' => $request->dppj
];
$validator = Validator::make($request->all(), [
'member_id' => 'required',
@@ -240,6 +242,8 @@ class RequestLogController extends Controller
'request_logs.submission_date',
'request_logs.approved_at')
->paginate($limit);
return response()->json(Helper::paginateResources($results));
}
@@ -338,12 +342,14 @@ class RequestLogController extends Controller
$validator = Validator::make($request->all(), [
'request_logs_id' => 'required',
'discharge_date' => 'required',
'service_code' => 'required',
'result_files.*' => 'sometimes|file|max:10000',
'diagnosa_files.*' => 'sometimes|file|max:10000',
'kondisi_files.*' => 'sometimes|file|max:10000',
], [
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID']),
'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']),
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
'result_files.*.max' => trans('Validation.max.file', ['attribute' => 'Result Files', 'max' => '10 MB' ]),
'diagnosa_files.*.max' => trans('Validation.max.file', ['attribute' => 'Diagnosis Files', 'max' => '10 MB' ]),
'kondisi_files.*.max' => trans('Validation.max.file', ['attribute' => 'Condition Files', 'max' => '10 MB' ]),
@@ -361,6 +367,7 @@ class RequestLogController extends Controller
->update([
'status_final_log' => 'requested',
'final_log' => 1,
'service_code' =>$request->service_code,
'discharge_date' => $request->discharge_date,
'created_final_by'=> auth()->user()->id,
'created_final_at'=> date('Y-m-d H:i:s'),

View File

@@ -11,6 +11,7 @@ use Modules\HospitalPortal\Http\Controllers\ApotekController;
use Modules\HospitalPortal\Http\Middleware\Authentication;
use Modules\HospitalPortal\Http\Middleware\Authorization;
use Modules\Internal\Http\Controllers\Api\NavigationController;
use Modules\Linksehat\Http\Controllers\Api\AutocompleteController;
/*
|--------------------------------------------------------------------------
@@ -34,7 +35,8 @@ Route::prefix('v1')->group(function() {
Route::post('forget-password', [AuthController::class, 'forgetPassword']);
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::post('verify-code', [AuthController::class, 'verifCode']);
Route::get('service-member/{id}', [AutocompleteController::class, 'serviceCode']);
Route::middleware('auth:sanctum')->group(function () {
@@ -92,5 +94,7 @@ Route::prefix('v1')->group(function() {
Route::get('detail-claim-requests/{id}', [ClaimRequestController::class, 'detail_claim_requests'])->name('claim-requests.detail_claim_requests');
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
});
});
});

View File

@@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File as Files;
use Modules\Internal\Transformers\DailyMonitoringResource;
use App\Models\File;
use Carbon\Carbon;
/**
@@ -38,25 +39,44 @@ class DailyMonitoringController extends Controller
public function GetMemberList(Request $request)
{
$memberList = DB::table('request_logs')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->select('members.member_id','members.name','members.members_effective_date AS startdate','members.members_expire_date AS enddate', 'request_logs.submission_date as addmision_date', 'organizations.name as provider', 'request_logs.organization_id' )
->where('request_logs.service_code', 'IP')
->where('request_logs.deleted_at', null)
->when($request->search, function ($q, $search) {
$q->where(function ($subQ) use ($search) {
$subQ->where('members.member_id', 'LIKE', "%".$search."%");
$subQ->orWhere('members.name','LIKE',"%".$search."%");
});
})
// ->where('request_logs.status_final_log', 'approved')
->groupBy('request_logs.member_id', 'request_logs.organization_id')
->orderBy('request_logs.created_at', 'desc')
// ->get()
->paginate();
$startDate = $request->start_date ? Carbon::parse($request->start_date) : Carbon::today();
$endDate = $request->end_date ? Carbon::parse($request->end_date)->addDay() : Carbon::today()->addDay();
$memberList = DB::table('request_log_daily_monitorings')
->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->select(
'members.member_id',
'members.name',
'members.birth_date',
'request_logs.type_of_member as member_type',
'members.members_effective_date AS startdate',
'members.members_expire_date AS enddate',
'request_logs.submission_date as addmision_date',
'organizations.name as provider',
'request_logs.organization_id',
'request_logs.code',
// Using a subquery to fetch medical_plan
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 1 LIMIT 1) as medical_plan'),
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 2 LIMIT 1) as non_medical_plan'),
'request_log_daily_monitorings.*'
)
->whereNull('request_logs.deleted_at') // Use whereNull() for checking NULL
->when($request->search, function ($q, $search) {
$q->where(function ($subQ) use ($search) {
$subQ->where('members.member_id', 'LIKE', "%{$search}%");
$subQ->orWhere('members.name', 'LIKE', "%{$search}%");
});
})
->when($startDate, function ($q) use ($startDate) {
$q->where('request_log_daily_monitorings.submission_date', '>=', $startDate);
})
->when($endDate, function ($q) use ($endDate) {
$q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay());
})
->orderBy('request_logs.created_at', 'desc')
->paginate();
return Helper::paginateResources(DailyMonitoringResource::collection($memberList));
}
@@ -125,29 +145,34 @@ class DailyMonitoringController extends Controller
{
$detail = RequestDailyMonitoring::where('id', $id)
->orderBy("created_at", "desc")
->first();
->orderBy("created_at", "desc")
->first();
if ($detail) {
// Ubah menjadi array agar bisa dimodifikasi
$detailArray = $detail->toArray();
// Ubah nama key dari request_log_id menjadi log_id
$detailArray['log_code'] = $detailArray['request_log_id'];
unset($detailArray['request_log_id']);
} else {
$detailArray = null;
}
return response()->json([
'error' => false,
'message' => "success",
'data' => $detail,
],200);
'data' => $detailArray,
], 200);
}
public function UpdateDetailMonitoringbyID(Request $request)
{
// validation rule
$validator = Validator::make($request->all(),[
'subject' => 'required',
'submission_date' => 'required',
'body_temperature' => 'required',
'sistole' => 'required',
'diastole' => 'required',
'respiration_rate' => 'required',
'analysis' => 'required',
'medical_plan' => 'required',
'log_code' => 'required',
'reason' => 'required',
'non_medikamentosa_plan' => 'required',
],$this->messages());
// validation error
@@ -161,6 +186,7 @@ class DailyMonitoringController extends Controller
// insert claim daily monitoring
$db_response = RequestDailyMonitoring::where('id', $request->id)
->update([
'request_log_id' => $request->log_code,
'submission_date' => $request->submission_date,
'subject' => $request->subject,
'object' => $request->objective,
@@ -172,6 +198,13 @@ class DailyMonitoringController extends Controller
'lab_date' => $request->lab_date,
'provider' => $request->provider,
'examination' => $request->examination,
'doctor_1' => $request->doctor_1,
'doctor_2' => $request->doctor_2,
'temp_diagnosis' => $request->temp_diagnosis,
'final_diagnosis' => $request->final_diagnosis,
'approval_pendamping' => $request->approval_pendamping,
'description' => $request->keterangan,
'note' => $request->catatan,
'reason' => $request->reason,
'created_by' => auth()->user()->id,
]);
@@ -620,6 +653,181 @@ class DailyMonitoringController extends Controller
}
}
public function AddListRequestLog(Request $request)
{
// validation rule
$validator = Validator::make($request->all(),[
'log_code' => 'required|exists:request_logs,id',
'subject' => 'required',
'submission_date' => 'required',
'body_temperature' => 'required',
'sistole' => 'required',
'diastole' => 'required',
'respiration_rate' => 'required',
'analysis' => 'required',
'medical_plan' => 'required',
'non_medikamentosa_plan' => 'required',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => $validator->getMessageBag()
],400);
}
// get claim request
$request_log = DB::table('request_logs')
->select('id')
->where('id', $request->log_code)
->first();
DB::beginTransaction();
try {
// insert claim daily monitoring
$db_response = RequestDailyMonitoring::create([
'request_log_id' => $request->log_code,
'submission_date' => $request->submission_date,
'doctor_1' => $request->doctor_1,
'doctor_2' => $request->doctor_2,
'temp_diagnosis' => $request->temp_diagnosis,
'final_diagnosis' => $request->final_diagnosis,
'approval_pendamping' => $request->approval_pendamping,
'description' => $request->keterangan,
'note' => $request->catatan,
'subject' => $request->subject,
'object' => $request->objective,
'sistole' => $request->sistole,
'diastole' => $request->diastole,
'body_temperature' => $request->body_temperature,
'respiration_rate' => $request->respiration_rate,
'analysis' => $request->analysis,
'lab_date' => $request->lab_date,
'provider' => $request->provider,
'examination' => $request->examination,
'created_by' => auth()->user()->id,
]);
// cek medical plan
$num_medical_plan = 0;
foreach ($request->medical_plan as $row) {
if ($row['medical_plan_str']) {
$num_medical_plan++;
}
}
if ($num_medical_plan == 0) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => [
'medical_plan' => ['medical plan harus diisi']
],
'data' => []
],400);
}
// insert medical plan
foreach ($request->medical_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['medical_plan_str'],
'type' => 1,
'created_at' => date('Y-m-d'),
]);
}
// insert non medical plan
foreach ($request->non_medikamentosa_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['non_medikamentosa_plan_str'],
'type' => 2,
'created_at' => date('Y-m-d'),
]);
}
// insert file result
if ($request->confirmation_medical_leter){
foreach ($request->confirmation_medical_leter as $file) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$fileName = $name . '.' . $extension;
$orignalName = $file->getClientOriginalName();
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'confirmation-medical-letter',
'name' => $name,
'original_name' => $orignalName,
'extension' => $extension,
'path' => $path,
]);
}
}
if ($request->medical_action_letter){
foreach ($request->medical_action_letter as $file) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$fileName = $name . '.' . $extension;
$orignalName = $file->getClientOriginalName();
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'medical-action-letter',
'name' => $name,
'original_name' => $orignalName,
'extension' => $extension,
'path' => $path,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
if ($request->result){
foreach ($request->result as $file) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$orignalName = $file->getClientOriginalName();
$fileName = $name . '.' . $extension;
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'laboratorium-result',
'name' => $name,
'original_name' => $orignalName,
'extension' => $extension,
'path' => $path,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
DB::commit();
return response()->json([
'error' => false,
'message' => "success",
'data' => []
],200);
}
catch (Exception $e) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
/**
* Delete Listing Daily Monitoring
*/

View File

@@ -165,6 +165,10 @@ class DrugController extends Controller
[
'name' => $row['name'],
'code' => $row['code'],
'id_setara' => $row['id_setara'],
'code_setara' => $row['code_setara'],
'nama_setara' => $row['nama_setara'],
'multiply_jual' => $row['multiply_jual'],
'generic_name' => $row['generic_name'],
'description' => $row['description'],
'mims_class' => $row['mims_class'],

View File

@@ -150,7 +150,9 @@ class RequestLogController extends Controller
// status: 'approved',
status: 'requested', // di nonaktifkan dulu auto approved
organization_id: $request->organization_id,
source: $request->source
source: $request->source,
specialities_id: $request->specialities_id,
dppj: $request->dppj
);
DB::commit();
@@ -172,7 +174,9 @@ class RequestLogController extends Controller
submissionDate: $request->submission_date,
status: 'requested',
organization_id: $request->organization_id,
source: $request->source
source: $request->source,
specialities_id: $request->specialities_id,
dppj: $request->dppj
);
DB::commit();
@@ -237,6 +241,31 @@ class RequestLogController extends Controller
return Helper::responseJson(data: $manipulatedIcds);
}
public function codeLog(Request $request)
{
$codeLogs = RequestLog::with(['member'])
->when($request->search, function ($q) use ($request) {
$q->where('code', 'LIKE', "%{$request->search}%")
->orWhereHas('member', function ($subQuery) use ($request) {
$subQuery->where('name', 'LIKE', "%{$request->search}%");
});
})
->whereHas('member', function ($subQuery) {
$subQuery->whereNull('deleted_at');
})
->get();
$manipulatedIcds = $codeLogs->map(function ($codeLog) {
return [
'value' => $codeLog->id,
'label' => $codeLog->code . ' - ' . ($codeLog->member->name ?? 'Unknown'),
];
});
return Helper::responseJson(data: $manipulatedIcds);
}
public function hospitals(){
$organizations = Organization::query()
->where([
@@ -490,11 +519,11 @@ class RequestLogController extends Controller
if (!empty($request->reason)) {
$requestLog->reason_final = $request->reason;
}
if (!empty($request->type_of_member)){
$requestLog->type_of_member = $request->type_of_member;
}
$requestLog->final_log = 1;
$requestLog->approved_final_log_by = auth()->user()->id;
$requestLog->approved_final_log_at = Carbon::now();

View File

@@ -82,6 +82,7 @@ Route::prefix('internal')->group(function () {
Route::get('diagnosis', [RequestLogController::class, 'diagnosis']);
Route::get('codeLog', [RequestLogController::class, 'codeLog']);
Route::get('drugs', [AutocompleteController::class, 'drugList']);
Route::get('units', [AutocompleteController::class, 'unitList']);
@@ -207,6 +208,7 @@ Route::prefix('internal')->group(function () {
Route::post('detail/update-request', [DailyMonitoringController::class, 'UpdateDetailMonitoringbyID']);
Route::post('detail/{claim_code}/add', [DailyMonitoringController::class, 'AddDetailMonitoringList']);
Route::post('detail/{claim_code}/add-request', [DailyMonitoringController::class, 'AddDetailMonitoringListRequestLog']);
Route::post('add-request', [DailyMonitoringController::class, 'AddListRequestLog']);
Route::post('detail/{claim_code}/update-status', [DailyMonitoringController::class, 'UpdateListRequestLog']);
Route::get('detail/{id}/delete', [DailyMonitoringController::class, 'deleteDetailMonitoringListRequestLog']);
Route::get('detail/{id}/delete-file', [DailyMonitoringController::class, 'deleteFileDetailMonitoringListRequestLog']);

View File

@@ -14,15 +14,29 @@ class DailyMonitoringResource extends JsonResource
*/
public function toArray($request)
{
$data = [
'code' => $this->code,
'id' => $this->id,
'member_id' => $this->member_id,
'member_type' => $this->member_type,
'birth_date' => $this->birth_date,
'name' => $this->name,
'start_date' => $this->startdate,
'end_date' => $this->enddate,
'addmision_date' => $this->addmision_date,
'submission_date' => $this->submission_date,
'provider' => $this->provider,
'organization_id' => $this->organization_id,
'doctor_1' => $this->doctor_1,
'doctor_2' => $this->doctor_2,
'temp_diagnosis' => $this->temp_diagnosis,
'final_diagnosis' => $this->final_diagnosis,
'approval_pendamping' => $this->approval_pendamping,
'status' => $this->status,
'description' => strip_tags($this->description),
'note' => strip_tags($this->note),
'medical_plan' => strip_tags($this->medical_plan),
'non_medical_plan' => strip_tags($this->non_medical_plan),
];
return $data;

View File

@@ -13,6 +13,7 @@ use App\Models\Benefit;
use App\Models\Exclusion;
use App\Models\ClaimRequest;
use App\Models\Icd;
use App\Models\Speciality;
use App\Helpers\Helper;
use App\Models\CorporatePolicy;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -117,12 +118,29 @@ class RequestLogShowResource extends JsonResource
}
$memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData);
// dd($memberLimitUsage);
if(isset($requestLog['specialities_id']))
{
$spesialis = Speciality::query()
->where('id', $requestLog['specialities_id'])
->select('name')
->first();
$name = $spesialis['name'];
} else {
$name = '-';
}
if (isset($requestLog['specialities_id'])){
$dppj = $requestLog['dppj'];
} else {
$dppj = '-';
}
$data = [
'id' => $requestLog['id'],
'code' => $requestLog['code'],
'invoice_no' => $requestLog['invoice_no'],
'billing_no' => $requestLog['billing_no'],
'specialities_id' => $name,
'dppj' => $dppj,
'code' => $requestLog['code'],
'code_claim' => $claimCode,
'member_id' => $requestLog['member']['member_id'],
@@ -161,7 +179,7 @@ class RequestLogShowResource extends JsonResource
'reason' => $requestLog['reason'],
'diagnosis' => $icd,
'is_reversal' => $isReversal, // untuk penjagaan, jika true tidak bisa di edit/hapus lagi
];

View File

@@ -6,6 +6,7 @@ use App\Models\OLDLMS\User;
use App\Models\Icd;
use App\Models\Drug;
use App\Models\Unit;
use App\Models\MemberPlan;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
@@ -180,6 +181,22 @@ class AutocompleteController extends Controller {
return Helper::responseJson(['message' => 'Signa added successfully']);
}
public function serviceCode(Request $request, $id)
{
$plans = MemberPlan::with('plan', 'plan.service')
->where('member_id', $id)
->get();
$manipulatedPlan = $plans->map(function ($plan) {
return [
'value' => optional($plan->plan)->service_code ?? '-',
'label' => optional($plan->plan->service)->name ?? 'Unknown'
];
});
return response()->json($manipulatedPlan);
}
}