1 Commits

Author SHA1 Message Date
R
5ee9293daf [Hotfix] Create Claim
(cherry picked from commit d0ee09a6e4)
2023-03-01 14:26:13 +07:00
1683 changed files with 6514 additions and 14793 deletions

0
.editorconfig Normal file → Executable file
View File

0
.env.example Normal file → Executable file
View File

0
.gitattributes vendored Normal file → Executable file
View File

0
.gitignore vendored Normal file → Executable file
View File

0
.styleci.yml Normal file → Executable file
View File

0
Modules/Client/Config/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Config/config.php Normal file → Executable file
View File

0
Modules/Client/Console/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Database/Migrations/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Database/Seeders/.gitkeep Normal file → Executable file
View File

View File

0
Modules/Client/Database/factories/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Entities/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Http/Controllers/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Http/Controllers/Api/AuthController.php Normal file → Executable file
View File

View File

@@ -1,136 +0,0 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Claim;
use App\Services\ClaimService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Client\Transformers\ClaimShowResource;
class ClaimController extends Controller
{
public function __construct(public ClaimService $claimService)
{
}
public function status($corporate_id)
{
$claims = $this->claimService->getCountClaimRequestPerStatus($corporate_id);
dd($claims);
return Helper::responseJson([
'count_requested' => 0,
'count_approval' => 0,
'count_disbrushment' => 0,
'count_rejected' => 0,
]);
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
{
$claims = Claim::query()
->when($request->search ?? null, function ($query, $search) {
$query->where('code', 'LIKE', '%' . $search . '%');
})
->with([
'member',
'diagnoses' => function ($diagnosis) {
return $diagnosis->where('type', 'primary');
},
'diagnoses.icd',
'plan',
'benefit',
'claimRequest',
'claimRequest.service'
])
->paginate(10);
return Helper::responseJson($claims);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* 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',
'benefit',
'files',
'claimRequest',
'claimRequest.files',
'items',
'items.claim_itemable',
])
->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('client::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)
{
//
}
}

View File

View File

View File

@@ -3,39 +3,110 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Services\CorporateMemberService;
use App\Models\Member;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
use Modules\Client\Transformers\MemberResources;
class CorporateMemberController extends Controller
{
public function __construct(public CorporateMemberService $corporateMemberService)
{
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
{
switch ($request->input('type')) {
case 'claim-report':
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
case 'claim-submit':
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
case 'alarm-center':
$members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request);
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
default:
$members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request);
return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members)));
$limit = $request->has('per_page') ? $request->per_page : 10;
$members = Member::query()
->whereHas('employeds', function ($corporateEmployee) use ($corporate_id) {
$corporateEmployee->where('corporate_id', $corporate_id);
})->when($request->input('search'), function ($query, $search) {
$query->where('member_id', 'like', "%" . $search . "%")
->orWhere('name', 'like', "%" . $search . "%");
});
if ($request->input('claimMember') === 'false') {
$members = $members->when($request->input('division'), function ($division, $division_id) {
$division->whereHas('division', function ($corporateEmployee) use ($division_id) {
$corporateEmployee->where('division_id', $division_id);
});
})->when($request->has('orderBy'), function ($query) use ($request) {
$query->orderBy($request->orderBy, $request->order);
});
}
// else {
// $members = $members->get();
// return response()->json(MemberResources::collection($members));
// }
$members->with('currentPlan');
$members->withSum('claims', 'total_claim');
$members = $members->paginate($limit);
// return $members;
return response()->json(Helper::paginateResources(MemberResources::collection($members)));
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('client::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('client::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)
{
//
}
}

View File

@@ -2,12 +2,11 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Modules\Client\Transformers\Dashboard\LimitResources;
use Modules\Client\Transformers\DashboardResources;
class CorporatePolicyController extends Controller
{
@@ -15,15 +14,25 @@ class CorporatePolicyController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
public function index($corporate_id)
public function index(Request $request, $corporate_id)
{
$currentCorporate = Auth::user()->managedCorporates()
$user = Auth::user();
$currentCorporate = $user->managedCorporates()
->with(['currentPolicy', 'employees'])
->find($corporate_id);
$data = LimitResources::make($currentCorporate);
$data = DashboardResources::make($currentCorporate);
return Helper::responseJson($data);
return response()->json($data);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
}
/**

View File

@@ -1,71 +0,0 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Modules\Client\Transformers\Dashboard\TopUpLimitResources;
class TopUpController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index($corporate_id)
{
$data = Auth::user()
->managedCorporates()
->with(['currentPolicy', 'employees'])
->withCount(['employees', 'claims' => function ($query) {
$query->where('claims.status', 'paid');
}])
->find($corporate_id);
return Helper::responseJson(TopUpLimitResources::make($data));
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('client::show');
}
/**
* 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)
{
//
}
}

0
Modules/Client/Http/Controllers/Api/UserController.php Normal file → Executable file
View File

0
Modules/Client/Http/Controllers/ClientController.php Normal file → Executable file
View File

0
Modules/Client/Http/Middleware/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Http/Requests/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Providers/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Providers/ClientServiceProvider.php Normal file → Executable file
View File

0
Modules/Client/Providers/RouteServiceProvider.php Normal file → Executable file
View File

0
Modules/Client/Resources/assets/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/assets/js/app.js Normal file → Executable file
View File

0
Modules/Client/Resources/assets/sass/app.scss Normal file → Executable file
View File

0
Modules/Client/Resources/lang/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/views/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/views/index.blade.php Normal file → Executable file
View File

View File

0
Modules/Client/Routes/.gitkeep Normal file → Executable file
View File

9
Modules/Client/Routes/api.php Normal file → Executable file
View File

@@ -6,8 +6,6 @@ use Modules\Client\Http\Controllers\Api\CorporateManageController;
use Modules\Client\Http\Controllers\Api\CorporateMemberController;
use Modules\Client\Http\Controllers\Api\CorporatePolicyController;
use Modules\Client\Http\Controllers\Api\UserController;
use Modules\Client\Http\Controllers\Api\ClaimController;
use Modules\Client\Http\Controllers\Api\TopUpController;
/*
|--------------------------------------------------------------------------
@@ -36,13 +34,6 @@ Route::prefix('client')->group(function () {
Route::get('policy', [CorporatePolicyController::class, 'index']);
Route::get('division', [CorporateDivisionController::class, 'index']);
Route::get('members', [CorporateMemberController::class, 'index']);
Route::get('claims/status', [ClaimController::class, 'status']);
Route::get('claims', [ClaimController::class, 'index']);
Route::get('topup', [TopUpController::class, 'index']);
Route::post('topup', [TopUpController::class, 'store']);
});
Route::get('claims/{id}', [ClaimController::class, 'show']);
});
});

0
Modules/Client/Routes/web.php Normal file → Executable file
View File

0
Modules/Client/Tests/Feature/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Tests/Unit/.gitkeep Normal file → Executable file
View File

View File

@@ -1,26 +0,0 @@
<?php
namespace Modules\Client\Transformers\ClaimReport;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'division' => $this->division_name ?? '',
'submission_date' => '',
'status' => $this->active,
];
}
}

View File

@@ -1,41 +0,0 @@
c<?php
namespace Modules\Client\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ClaimShowResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
// $data['']
$data['benefit_items'] = $this->items
->filter(function ($item) {
return $item->claim_itemable_type == Benefit::class;
})
->map(function ($item) {
$itemData = $item->claim_itemable->toArray();
$itemData['nominal_dicover'] = $item['nominal_dicover'] ?? 0;
$itemData['nominal_ditagihkan'] = $item['nominal_ditagihkan'] ?? 0;
$itemData['nominal_total'] = $item['nominal_total'] ?? 0;
// For React Frotnend
$itemData['biaya_diajukan'] = $itemData['nominal_ditagihkan'];
$itemData['biaya_disetujui'] = $itemData['nominal_dicover'];
return $itemData;
});
$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();
return $data;
}
}

View File

@@ -1,26 +0,0 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberAlarmCenterResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'service' => $this->service_code,
'start_date' => $this->start_date,
'end_date' => $this->end_date,
'status' => $this->active,
];
}
}

View File

@@ -1,33 +0,0 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
class TopUpLimitResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$myLimitBalance = (int)$this->currentPolicy->limit_balance;
$myLimitTotal = (int)$this->currentPolicy->total_premi;
return [
'companyName' => $this->name,
'policyNumber' => $this->currentPolicy->code,
'totalMembers' => $this->employees_count,
'totalCases' => $this->claims_count,
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
],
'maxTopUp' => ($myLimitTotal - $myLimitBalance)
];
}
}

View File

@@ -1,10 +1,11 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
namespace Modules\Client\Transformers;
use App\Helpers\Helper;
use Illuminate\Http\Resources\Json\JsonResource;
class LimitResources extends JsonResource
class DashboardResources extends JsonResource
{
/**
* Transform the resource into an array.
@@ -21,15 +22,17 @@ class LimitResources extends JsonResource
$lockPercentage = (int)$this->currentPolicy->minimal_stop_service_percentage;
return [
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
'policy' => [
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? (($myLimitBalance / $myLimitTotal) * 100) : 0,
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
];
}
}

View File

@@ -1,6 +1,6 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
namespace Modules\Client\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -18,13 +18,15 @@ class MemberResources extends JsonResource
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'division' => $this->division_name ?? '',
$this->mergeWhen($request->input('claimMember') === 'false', [
'division' => $this->division->name ?? '',
'status' => $this->active
]),
'limit' => [
'current' => $this->claims_sum_total_claim ?? 0,
'current' => $this->claims_sum_total_claim,
'total' => $this->currentPlan->limit_rules ?? 0,
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0
],
'status' => $this->active,
];
}
}

0
Modules/Client/composer.json Normal file → Executable file
View File

0
Modules/Client/module.json Normal file → Executable file
View File

0
Modules/Client/package.json Normal file → Executable file
View File

0
Modules/Client/webpack.mix.js Normal file → Executable file
View File

View File

View File

@@ -62,11 +62,10 @@ class ClaimRequestController extends Controller
{
$request->validate([
'member_id' => 'required',
'service_code' => 'required|in:OP,IP'
]);
$member = Member::find($request->member_id);
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member, paymentType: 'reimbursement', serviceCode: $request->service_code);
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member);
ClaimRequested::dispatch($newClaimRequest);

View File

@@ -1,565 +0,0 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Models\Benefit;
use App\Models\CorporateBenefit;
use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Organization;
use App\Models\Provider;
use App\Models\RequestLog;
use App\Models\RequestLogBenefit;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use PDF;
use Throwable;
class ProviderOnlineController extends Controller
{
public function getHeaderKey(Request $request)
{
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
'kodeprovider' => 'required|string',
]);
$organization = Organization::query()->where('code', $request->kodeprovider)->first();
if (!$organization) {
return $this->headerError('Kode provider tidak ditemukan');
}
$provider = Provider::query()->firstOrNew([
'organization_id' => $organization->id,
'username' => $request->username,
]);
if ($provider->exists) {
$isPasswordValid = Hash::check($request->password, $provider->password) || $provider->password === $request->password;
if (!$isPasswordValid) {
return $this->headerError('Username atau password tidak valid');
}
} else {
$provider->password = Hash::make($request->password);
}
$provider->code = $request->kodeprovider;
$provider->status = 'active';
$provider->header_token = Str::random(64);
$provider->token = Str::random(64);
$provider->save();
return response()->json([
'header-token' => $provider->header_token,
'userid' => $provider->id,
'usertoken' => $provider->token,
'kodeprovider' => $organization->code,
'namaprovider' => $organization->name,
'errornumber' => 0,
'messagestring' => 'Success',
]);
}
public function checkEligibilitasPeserta(Request $request)
{
$request->validate([
'nokartu' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$member = Member::query()
->with(['person', 'currentCorporate', 'currentPolicy', 'memberPlans.plan'])
->where('member_id', $request->nokartu)
->first();
if (!$member) {
return $this->statusError('Peserta tidak ditemukan');
}
$benefits = $member->memberPlans
->map(function (MemberPlan $memberPlan) {
$plan = $memberPlan->plan;
if (!$plan) {
return null;
}
return [
'kodebenefit' => $plan->code,
'namabenefit' => $plan->corporate_plan_id,
'planid' => $plan->code,
];
})
->filter()
->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [
'nokartu' => $member->member_id,
'memberid' => (string) $member->id,
'namapeserta' => $member->full_name,
'nomorbpjs' => $member->bpjs_id,
'jeniskelamin' => $member->gender_code,
'tanggallahir' => $this->isoDate($member->birth_date),
'hubungankeluarga' => $member->relation_with_principal,
'namaperusahaan' => optional($member->currentCorporate)->name,
'pesertavip' => 'N',
'namapenjamin' => optional($organization)->name,
'nomorpolis' => optional($member->currentPolicy)->code,
'tglmulaipolis' => $this->isoDate(optional($member->currentPolicy)->start),
'tglberakhirpolis' => $this->isoDate(optional($member->currentPolicy)->end),
'phone' => optional($member->person)->phone,
'email' => $member->email,
],
'Benefit' => $benefits,
]);
}
public function createPendaftaran(Request $request)
{
$request->validate([
'kodeprovider' => 'required|string',
'kodebenefit' => 'required|string',
'statusrujukan' => 'nullable|string',
'nomorrujukan' => 'nullable|string',
'keterangan' => 'nullable|string',
'nomorsep' => 'nullable|string',
'nokartu' => 'required|string',
'kelaskamar' => 'nullable|string',
'cobbpjs' => 'nullable|numeric',
'notransaksiprovider' => 'nullable|string',
'inacbgscode' => 'nullable|string',
'inacbgsamount' => 'nullable|numeric',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$member = Member::query()
->with(['person', 'currentCorporate', 'currentPolicy'])
->where('member_id', $request->nokartu)
->first();
if (!$member) {
return $this->statusError('Peserta tidak ditemukan');
}
$plan = $this->resolvePlan($member, $request->kodebenefit);
$requestLog = RequestLog::query()->create([
'organization_id' => $organization->id,
'member_id' => $member->id,
'plan_id' => optional($plan)->id,
'policy_id' => optional($member->currentPolicy)->id ?? 0,
'payment_type' => 'cashless',
'service_code' => $request->kodebenefit,
'type_of_member' => 'member',
'status' => 'approved',
'source' => 'api',
'keterangan' => $request->keterangan,
'hak_kamar_pasien' => $request->kelaskamar ?? '',
'penempatan_kamar' => $request->kelaskamar,
'total_cob' => $request->cobbpjs,
'nominal' => 0,
'import_system' => 0,
'nomor_sep' => $request->nomorsep,
'inacbgs_code' => $request->inacbgscode,
'inacbgs_amount' => $request->inacbgsamount,
'no_transaksi_provider' => $request->notransaksiprovider,
'diagnosis' => '',
'reason' => '',
'reason_final' => '',
'catatan' => '',
'nomor_rujukan' => $request->nomorrujukan,
'status_rujukan' => $request->statusrujukan,
'submission_date' => now(),
'admission_date' => now(),
]);
$limitSubBenefit = collect();
if ($plan) {
$limitSubBenefit = CorporateBenefit::query()
->with('benefit')
->where('plan_id', $plan->id)
->get()
->map(function (CorporateBenefit $corporateBenefit) {
return [
'kodesubbenefit' => optional($corporateBenefit->benefit)->code,
'namasubbenefit' => optional($corporateBenefit->benefit)->description,
'batasan' => (string) ($corporateBenefit->limit_amount ?? 0),
];
});
}
return response()->json([
'Status' => $this->okStatus(),
'Data' => [[
'noklaim' => $requestLog->code,
'namapeserta' => $member->full_name,
'tanggallahir' => $this->isoDate($member->birth_date),
'nokartu' => $member->member_id,
'nopolis' => optional($member->currentPolicy)->code,
'nobpjs' => $member->bpjs_id,
'nosep' => $requestLog->nomor_sep,
'nomorrujukan' => $requestLog->nomor_rujukan,
'planid' => optional($plan)->code,
'masapolis' => optional($member->currentPolicy)->end ? Carbon::parse($member->currentPolicy->end)->format('d/m/Y') : null,
'namaperusahaan' => optional($member->currentCorporate)->name,
'namapenjamin' => $organization->name,
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
'hakkamar' => $requestLog->penempatan_kamar,
'hakicu' => null,
'nosuratjaminan' => $requestLog->code,
'namapegawai' => null,
'namabenefit' => optional($plan)->corporate_plan_id,
'kodediagnosa' => $requestLog->diagnosis,
'keterangan' => $requestLog->keterangan,
'catatanTC1' => null,
'catatanTC2' => null,
'catatanTC3' => null,
'catatanTC4' => null,
'catatanTC5' => null,
'catatanTC6' => null,
'catatanTC7' => null,
'catatanTC8' => null,
'catatanTC9' => null,
'catatanTC10' => null,
'statusrujukan' => $requestLog->status_rujukan,
'statusklaim' => 0,
'notransaksiprovider' => $requestLog->no_transaksi_provider,
'inacbgscode' => $requestLog->inacbgs_code,
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
]],
'LimitSubBenefit' => $limitSubBenefit->values(),
]);
}
public function createPengesahan(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'tanggalkeluar' => 'nullable|date',
'kodediagnosa' => 'nullable|string',
'inacbgscode' => 'nullable|string',
'inacbgsamount' => 'nullable|numeric',
'daftarbiaya' => 'nullable|array',
'daftarbiaya.*.kodesubbenefit' => 'required_with:daftarbiaya|string',
'daftarbiaya.*.biayaaju' => 'required_with:daftarbiaya|numeric',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()
->with(['member.person', 'member.currentCorporate', 'member.currentPolicy', 'plan'])
->where('code', $request->noklaim)
->where('organization_id', $organization->id)
->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$requestLog->update([
'status_final_log' => 'approve',
'final_log' => true,
'discharge_date' => $request->tanggalkeluar,
'diagnosis' => $request->kodediagnosa,
'inacbgs_code' => $request->inacbgscode ?? $requestLog->inacbgs_code,
'inacbgs_amount' => $request->inacbgsamount ?? $requestLog->inacbgs_amount,
]);
foreach (($request->daftarbiaya ?? []) as $biaya) {
$benefit = Benefit::query()->where('code', $biaya['kodesubbenefit'])->first();
if (!$benefit) {
continue;
}
RequestLogBenefit::query()->updateOrCreate(
[
'request_log_id' => $requestLog->id,
'benefit_id' => $benefit->id,
],
[
'amount_incurred' => $biaya['biayaaju'],
'amount_approved' => 0,
'amount_not_approved' => 0,
'excess_paid' => 0,
'keterangan' => null,
]
);
}
$requestLog->load(['requestLogBenefits.benefit']);
$biayaResponse = $requestLog->requestLogBenefits->map(function (RequestLogBenefit $requestLogBenefit) use ($requestLog) {
return [
'noklaim' => $requestLog->code,
'kodesubbenefit' => optional($requestLogBenefit->benefit)->code,
'namasubbenefit' => optional($requestLogBenefit->benefit)->description,
'kodebenefit' => optional($requestLog->plan)->code,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'biayaaju' => (float) ($requestLogBenefit->amount_incurred ?? 0),
'jaminanasuransi' => (float) ($requestLogBenefit->amount_approved ?? 0),
'jaminanpeserta' => (float) ($requestLogBenefit->excess_paid ?? 0),
'keterangan' => $requestLogBenefit->keterangan,
];
})->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [[
'noklaim' => $requestLog->code,
'namapeserta' => optional($requestLog->member)->full_name,
'tanggallahir' => $this->isoDate(optional($requestLog->member)->birth_date),
'nokartu' => optional($requestLog->member)->member_id,
'nopolis' => optional(optional($requestLog->member)->currentPolicy)->code,
'nobpjs' => optional($requestLog->member)->bpjs_id,
'nosep' => $requestLog->nomor_sep,
'nomorrujukan' => $requestLog->nomor_rujukan,
'planid' => optional($requestLog->plan)->code,
'masapolis' => optional(optional($requestLog->member)->currentPolicy)->end ? Carbon::parse($requestLog->member->currentPolicy->end)->format('d/m/Y') : null,
'namaperusahaan' => optional(optional($requestLog->member)->currentCorporate)->name,
'namapenjamin' => $organization->name,
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
'hakkamar' => $requestLog->penempatan_kamar,
'hakicu' => null,
'nosuratjaminan' => $requestLog->code,
'namapegawai' => null,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'kodediagnosa' => $requestLog->diagnosis,
'keterangan' => $requestLog->keterangan,
'catatanTC1' => null,
'catatanTC2' => null,
'catatanTC3' => null,
'catatanTC4' => null,
'catatanTC5' => null,
'catatanTC6' => null,
'catatanTC7' => null,
'catatanTC8' => null,
'catatanTC9' => null,
'catatanTC10' => null,
'statusrujukan' => $requestLog->status_rujukan,
'statusklaim' => 0,
'notransaksiprovider' => $requestLog->no_transaksi_provider,
'inacbgscode' => $requestLog->inacbgs_code,
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
]],
'Biaya' => $biayaResponse,
]);
}
public function getRincianBiayaKlaim(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()
->with(['plan', 'requestLogBenefits.benefit'])
->where('code', $request->noklaim)
->where('organization_id', $organization->id)
->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$biaya = $requestLog->requestLogBenefits->map(function (RequestLogBenefit $requestLogBenefit) use ($requestLog) {
return [
'noklaim' => $requestLog->code,
'kodesubbenefit' => optional($requestLogBenefit->benefit)->code,
'namasubbenefit' => optional($requestLogBenefit->benefit)->description,
'kodebenefit' => optional($requestLog->plan)->code,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'biayaaju' => (float) ($requestLogBenefit->amount_incurred ?? 0),
'jaminanasuransi' => (float) ($requestLogBenefit->amount_approved ?? 0),
'jaminanpeserta' => (float) ($requestLogBenefit->excess_paid ?? 0),
'keterangan' => $requestLogBenefit->keterangan,
];
})->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [
'noklaim' => $requestLog->code,
'kodeprovider' => $organization->code,
'nosep' => $requestLog->nomor_sep,
'keterangan' => $requestLog->keterangan,
'statusklaim' => $requestLog->status,
],
'Biaya' => $biaya,
]);
}
public function downloadStrukPendaftaran(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$member = Member::findOrFail($requestLog->member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
$dateOfAdmission = $requestLog->admission_date ? Carbon::parse($requestLog->admission_date) : now();
try {
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
return $pdf->download('Struk-Pendaftaran-' . $requestLog->code . '.pdf');
} catch (Throwable $e) {
return $this->statusError('Gagal generate PDF struk pendaftaran: ' . $e->getMessage(), 500);
}
}
public function downloadStrukPengesahan(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$member = Member::findOrFail($requestLog->member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
$dateOfAdmission = $requestLog->discharge_date ? Carbon::parse($requestLog->discharge_date) : now();
try {
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
return $pdf->download('Struk-Pengesahan-' . $requestLog->code . '.pdf');
} catch (Throwable $e) {
return $this->statusError('Gagal generate PDF struk pengesahan: ' . $e->getMessage(), 500);
}
}
private function resolveProvider(string $kodeProvider, $userId, string $token): array
{
$organization = Organization::query()->where('code', $kodeProvider)->first();
if (!$organization) {
return [null, null, $this->statusError('Kode provider tidak ditemukan')];
}
$provider = Provider::query()
->where('id', $userId)
->where('organization_id', $organization->id)
->where('code', $kodeProvider)
->where('status', 'active')
->first();
if (!$provider) {
return [null, null, $this->statusError('User provider tidak ditemukan')];
}
if ((string) $provider->token !== (string) $token) {
return [null, null, $this->statusError('Token tidak valid')];
}
return [$provider, $organization, null];
}
private function resolvePlan(Member $member, string $serviceCode)
{
$memberPlan = $member->memberPlans()->with('plan')
->where('status', 'active')
->orderByDesc('id')
->get()
->first(function (MemberPlan $item) use ($serviceCode) {
return optional($item->plan)->service_code === $serviceCode;
});
if ($memberPlan && $memberPlan->plan) {
return $memberPlan->plan;
}
return optional($member->memberPlans()->with('plan')->orderByDesc('id')->first())->plan;
}
private function okStatus(): array
{
return [
'errornumber' => 0,
'messagestring' => 'Success',
];
}
private function statusError(string $message, int $statusCode = 400)
{
return response()->json([
'Status' => [
'errornumber' => 1,
'messagestring' => $message,
],
'Data' => null,
], $statusCode);
}
private function headerError(string $message, int $statusCode = 400)
{
return response()->json([
'header-token' => null,
'userid' => 0,
'usertoken' => null,
'kodeprovider' => null,
'namaprovider' => null,
'errornumber' => 1,
'messagestring' => $message,
], $statusCode);
}
private function isoDate($date): ?string
{
if (empty($date)) {
return null;
}
return Carbon::parse($date)->toISOString();
}
}

View File

@@ -4,7 +4,6 @@ use Illuminate\Http\Request;
use Modules\HospitalPortal\Http\Controllers\Api\AuthController;
use Modules\HospitalPortal\Http\Controllers\Api\ClaimRequestController;
use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
use Modules\HospitalPortal\Http\Controllers\Api\ProviderOnlineController;
use Modules\HospitalPortal\Http\Controllers\ClaimController;
/*
@@ -43,13 +42,3 @@ Route::prefix('hospitalportal')->group(function () {
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
});
});
Route::prefix('v1/bridging-service/ProviderOnline')->group(function () {
Route::post('HeaderKey', [ProviderOnlineController::class, 'getHeaderKey']);
Route::post('EligibilitasPeserta', [ProviderOnlineController::class, 'checkEligibilitasPeserta']);
Route::post('Pendaftaran', [ProviderOnlineController::class, 'createPendaftaran']);
Route::post('Pengesahan', [ProviderOnlineController::class, 'createPengesahan']);
Route::post('RincianBiayaKlaim', [ProviderOnlineController::class, 'getRincianBiayaKlaim']);
Route::post('StrukPendaftaran', [ProviderOnlineController::class, 'downloadStrukPendaftaran']);
Route::post('StrukPengesahan', [ProviderOnlineController::class, 'downloadStrukPengesahan']);
});

0
Modules/Internal/Config/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Config/config.php Normal file → Executable file
View File

0
Modules/Internal/Console/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Database/Migrations/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Database/Seeders/.gitkeep Normal file → Executable file
View File

View File

0
Modules/Internal/Database/factories/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Entities/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Http/Controllers/.gitkeep Normal file → Executable file
View File

View File

View File

View File

@@ -2,18 +2,14 @@
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\Services\ClaimService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\ClaimShowResource;
use PDF;
class ClaimController extends Controller
{
@@ -25,14 +21,9 @@ class ClaimController extends Controller
{
$claims = Claim::with([
'member',
'diagnoses' => function ($diagnosis) {
return $diagnosis->where('type', 'primary');
},
'diagnoses.icd',
'diagnosis',
'plan',
'benefit',
'claimRequest',
'claimRequest.service'
'benefit'
])
->latest()
->paginate(10);
@@ -96,27 +87,13 @@ class ClaimController extends Controller
->with([
'member',
'member.currentPlan',
'member.currentPlan.benefits',
'member.currentCorporate',
'member.currentPolicy',
// 'diagnosis',
'diagnoses',
'diagnoses.icd',
'diagnosis',
'benefit',
'files',
'claimRequest',
'claimRequest.files',
'items',
'items.claim_itemable',
'encounters',
'encounters.doctors',
'encounters.primaryDiagnoses',
'encounters.primaryDiagnoses.diagnosis',
'encounters.healthcare'
'files'
])
->findOrFail($id);
return Helper::responseJson(ClaimShowResource::make($claim));
return response()->json($claim);
}
/**
@@ -154,135 +131,4 @@ 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)
{
$request->validate([]);
$claim = Claim::findOrFail($id);
$order = 1;
$data = [];
$claim->items()->forceDelete();
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,
]);
}
$order++;
}
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;
}
}

View File

@@ -4,10 +4,12 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\ClaimRequest;
use App\Services\ClaimService;
use App\Models\Member;
use Exception;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Knp\Snappy\Pdf;
use Modules\Internal\Transformers\ClaimRequestResource;
use Modules\Internal\Transformers\ClaimRequestShowResource;
@@ -34,7 +36,7 @@ class ClaimRequestController extends Controller
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member', 'files', 'service'])
->with(['member', 'files'])
->paginate();
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
@@ -113,31 +115,19 @@ class ClaimRequestController extends Controller
$claimRequest = ClaimRequest::findOrFail($id);
$member = $claimRequest->member;
try {
// Create New Claim
$newClaim = ClaimService::storeClaim(member: $member, status: 'received', claimRequest: $claimRequest);
// Update Claim Request Status & Link with Claim
$claimRequest->status = 'approved';
$claimRequest->claim_id = $newClaim->id;
$claimRequest->save();
// Store Generated Documents LOG
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
$claimRequest->generatedDocuments()->create([
'type' => 'guarantee_letter',
'title' => 'Guarantee Letter for '. $member->full_name,
'document_type' => 'type',
'html_content' => $logContent,
'system_origin' => 'primecenter'
]);
} catch (\Exception $e) {
}
$claimRequest->status = 'approved';
$claimRequest->save();
// Store Generated Documents
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
$claimRequest->generatedDocuments()->create([
'type' => 'guarantee_letter',
'title' => 'Guarantee Letter for '. $member->full_name,
'document_type' => 'type',
'html_content' => $logContent,
'system_origin' => 'primecenter'
]);
return $claimRequest;
}
}

View File

View File

@@ -77,7 +77,6 @@ class CorporateController extends Controller
*/
public function store(Request $request)
{
$request->validate([
'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
'name' => 'required',
@@ -91,6 +90,7 @@ class CorporateController extends Controller
'policy_stop_service_percentage' => 'required_with:policy_code',
'policy_stop_service_net' => 'required_with:policy_code',
]);
try {
DB::beginTransaction();
$corporate_data = $request->all();
@@ -98,6 +98,7 @@ class CorporateController extends Controller
$newCorporate = Corporate::create($request->all());
if ($request->has('policy_code') && !empty($request->policy_code)) {
// dd($request->policy_code, 'fuck you');
$newCorporate->policies()->create([
'code' => $request->policy_code ?? NULL,
'total_premi' => $request->policy_total_premi ?? NULL,
@@ -396,6 +397,7 @@ class CorporateController extends Controller
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
// dd($request->toArray());
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name);
$corporate = Corporate::with(['plans'])->findOrFail($corporate_id);
@@ -519,5 +521,4 @@ class CorporateController extends Controller
break;
}
}
}

View File

@@ -155,7 +155,7 @@ class CorporateMemberController extends Controller
$result_headers = $this->memberEnrollmentService->result_doc_headers;
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRow($result_headers));
$writer->addRow($singleRow);
$imported_member_data = 0;
$failed_member_data = [];
foreach ($reader->getSheetIterator() as $sheet) {
@@ -181,7 +181,7 @@ class CorporateMemberController extends Controller
}
try {
// dd($new_member_data);
$rowResponse = $this->memberEnrollmentService->handleImportRow($corporate, $new_member_data);
// Write Success Result to File

View File

View File

View File

View File

View File

@@ -91,8 +91,7 @@ class DivisionController extends Controller
$request->validate([
'code' => [
'required',
// Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
Rule::unique('corporate_divisions')->where('corporate_id', $corporate_id)
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
],
'name' => 'required'
]);

View File

View File

View File

@@ -1,136 +0,0 @@
<?php
namespace Modules\Internal\Http\Controllers\Api\Linksehat;
use App\Helpers\Helper;
use App\Models\OLDLMS\Appointment;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\LinksehatPaymentResource;
class PaymentController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
// return $request->toArray();
$appointments = Appointment::query()
->where('sPaymentStatus', 'settlement')
->with(['healthCare', 'healthCare.commission', 'detail', 'user', 'doctor', 'doctor.user']);
if ($request->has('search')) {
$appointments->where(function ($query) use ($request) {
$query->where('nID', $request->search)
->orWhere('sBookingCode', $request->search)
->orWhereHas('detail', function (Builder $detail) use ($request) {
$detail->where('sPaymentDetails', 'LIKE', '%' . $request->search . "%");
});
});
}
if (($request->has('appointment_start') || $request->has('appointment_end'))
&& !empty($request->appointment_start)
&& !empty($request->appointment_end)
) {
// $appointments = $appointments->whereHas('detail', function (Builder $detail) use ($request) {
// // Appointment Start
// // if ($request->has('appointment_start')) {
// $detail->where('dTanggalAppointment', '>=', $request->appointment_start);
// // } else {
// // $detail->where('dTanggalAppointment', '>', now()->format('Y-m-d'));
// // }
// // if ($request->has('appointment_end')) {
// $detail->where('dTanggalAppointment', '<=', $request->appointment_end);
// // } else {
// // $detail->where('dTanggalAppointment', '<', now()->addDay(1)->format('Y-m-d'));
// // }
// });
$appointments = $appointments->where(function($q) use ($request) {
$q->where('dAgreeOn', '>=', $request->appointment_start)
->where('dAgreeOn', '<=', $request->appointment_end);
});
}
if ($request->has('payment_status') && $request->payment_status != 'semua') {
$appointments->where('sPaymentStatus', $request->payment_status);
}
if ($request->has('healthcare_id') && !empty($request->healthcare_id)) {
$appointments->where('nIDHealthCare', $request->healthcare_id);
}
$appointments = $appointments->orderBy('dUpdateOn', 'DESC')
->paginate();
return Helper::responseJson(Helper::paginateResources(LinksehatPaymentResource::collection($appointments)));
}
/**
* 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)
{
//
}
/**
* 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, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -1,141 +0,0 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\Icd;
use App\Models\OLDLMS\Healthcare;
use App\Models\Organization;
use App\Models\Practitioner;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class OptionController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$request->validate([
'type' => 'required',
'search' => 'required'
]);
switch ($request->type) {
case 'diagnosis':
$icds = Icd::query()
->where('code', 'LIKE', '%'.$request->search.'%')
->orWhere('name', 'LIKE', '%'.$request->search.'%')
->limit('10')
->get();
return $icds;
break;
case 'doctors':
$doctors = Practitioner::query()
->whereHas('person', function ($person) use ($request) {
$person->where('name', 'LIKE', '%'.$request->search.'%');
})
->limit('10')
->get();
$doctors = $doctors->map(function($doctor) {
$doctorDetail = $doctor->person->toArray();
unset($doctorDetail['id']);
return array_merge([
'id' => $doctor->id,
'code' => $doctor->code
], $doctorDetail);
});
return $doctors;
break;
case 'healthcares':
$healthcares = Organization::query()
->hospital()
->where('name', 'LIKE', '%'.$request->search.'%')
->limit('10')
->get();
return $healthcares;
break;
case 'linksehat-healthcares':
$healthcares = Healthcare::query()
->where('sHealthCare', 'LIKE', '%'.$request->search.'%')
->limit('10')
->get();
return $healthcares;
break;
default:
# code...
break;
}
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)
{
//
}
/**
* 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, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

View File

@@ -1,281 +0,0 @@
<?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");
}
}

View File

0
Modules/Internal/Http/Middleware/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Http/Requests/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Providers/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Providers/InternalServiceProvider.php Normal file → Executable file
View File

0
Modules/Internal/Providers/RouteServiceProvider.php Normal file → Executable file
View File

0
Modules/Internal/Resources/assets/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Resources/assets/js/app.js Normal file → Executable file
View File

0
Modules/Internal/Resources/assets/sass/app.scss Normal file → Executable file
View File

0
Modules/Internal/Resources/lang/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Resources/views/.gitkeep Normal file → Executable file
View File

0
Modules/Internal/Resources/views/index.blade.php Normal file → Executable file
View File

View File

0
Modules/Internal/Routes/.gitkeep Normal file → Executable file
View File

17
Modules/Internal/Routes/api.php Normal file → Executable file
View File

@@ -21,16 +21,13 @@ use Modules\Internal\Http\Controllers\Api\DivisionController;
use Modules\Internal\Http\Controllers\Api\DoctorController;
use Modules\Internal\Http\Controllers\Api\DrugController;
use Modules\Internal\Http\Controllers\Api\FormulariumController;
use Modules\Internal\Http\Controllers\Api\Linksehat\PaymentController;
use Modules\Internal\Http\Controllers\Api\LivechatController;
use Modules\Internal\Http\Controllers\Api\MemberController;
use Modules\Internal\Http\Controllers\Api\OptionController;
use Modules\Internal\Http\Controllers\Api\OrganizationController;
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;
/*
|--------------------------------------------------------------------------
@@ -50,8 +47,6 @@ Route::prefix('internal')->group(function () {
Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::get('linksehat/payments', [PaymentController::class, 'index']);
Route::middleware('auth:sanctum')->group(function () {
@@ -123,16 +118,7 @@ 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');
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', [ClaimController::class, 'store']);
Route::get('claims/{id}', [ClaimController::class, 'show']);
Route::post('check-limit', [ClaimController::class, 'checkLimit']);
@@ -156,7 +142,4 @@ Route::prefix('internal')->group(function () {
Route::get('city', [CityController::class, 'index']);
Route::get('district', [DistrictController::class, 'index']);
Route::get('village', [VillageController::class, 'index']);
Route::get('options', [OptionController::class, 'index']);
Route::get('final-log/{id}', [ClaimController::class, 'downloadFinalLog'])->name('claim.download-final-log');
});

0
Modules/Internal/Routes/web.php Normal file → Executable file
View File

View File

@@ -0,0 +1,11 @@
<?php
namespace Modules\Internal\Services;
use App\Models\Claim;
use Illuminate\Support\Facades\DB;
class ClaimService
{
}

8
Modules/Internal/Services/CorporateService.php Normal file → Executable file
View File

@@ -39,10 +39,11 @@ class CorporateService
try {
$plan_data = $row;
$plan_data["corporate_id"] = $corporate->id;
$this->validatePlanRow($plan_data);
$plan = $corporate->plans()->updateOrCreate([
'corporate_plan_id' => $plan_data['corporate_plan_id'],
// 'active' => 0,
'service_code' => $plan_data['service_code'],
], $plan_data);
return $plan;
@@ -101,8 +102,7 @@ class CorporateService
], [
'code' => $benefit_data['code'],
'service_code' => $plan->service_code,
'active' => 1,
'description' => $benefit_data['description'],
'active' => true
]);
$corporateBenefit = $corporate->corporateBenefits()->updateOrCreate([

Some files were not shown because too many files have changed in this diff Show More