diff --git a/Modules/HospitalPortal/Routes/api.php b/Modules/HospitalPortal/Routes/api.php index 55c52a5e..3ccbe08f 100755 --- a/Modules/HospitalPortal/Routes/api.php +++ b/Modules/HospitalPortal/Routes/api.php @@ -6,7 +6,6 @@ use Modules\HospitalPortal\Http\Controllers\Api\ClaimRequestController; use Modules\HospitalPortal\Http\Controllers\Api\MemberController; use Modules\HospitalPortal\Http\Controllers\ClaimController; use Modules\HospitalPortal\Http\Controllers\Api\NotificationController; -use Modules\HospitalPortal\Http\Controllers\Api\ProviderOnlineController; use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController; use Modules\Internal\Http\Controllers\Api\RequestLogController as RequestLogControllerInternal; use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController; @@ -137,14 +136,3 @@ Route::prefix('v1')->group(function() { }); }); - -Route::prefix('v1/bridging-service/ProviderOnline')->group(function () { - Route::post('HeaderKey', [ProviderOnlineController::class, 'getHeaderKey']); - Route::post('AddHeaderKey', [ProviderOnlineController::class, 'addHeaderKey']); - 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']); -}); diff --git a/Modules/ProviderIntegrations/Config/config.php b/Modules/ProviderIntegrations/Config/config.php new file mode 100644 index 00000000..235a520b --- /dev/null +++ b/Modules/ProviderIntegrations/Config/config.php @@ -0,0 +1,5 @@ + 'ProviderIntegrations', +]; diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ProviderOnlineController.php b/Modules/ProviderIntegrations/Http/Controllers/Api/ProviderOnlineController.php similarity index 65% rename from Modules/HospitalPortal/Http/Controllers/Api/ProviderOnlineController.php rename to Modules/ProviderIntegrations/Http/Controllers/Api/ProviderOnlineController.php index 192e4804..3c0ff801 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ProviderOnlineController.php +++ b/Modules/ProviderIntegrations/Http/Controllers/Api/ProviderOnlineController.php @@ -1,13 +1,14 @@ validate([ - 'kodeprovider' => 'required|string', - 'username' => 'required|string', - 'password' => 'required|string', - 'status' => 'required|string', - 'header_token' => 'required|string', - 'namaprovider' => 'required|string', - ]); - - $organization = Organization::query()->firstOrCreate( - ['code' => $request->kodeprovider], - [ - 'name' => $request->namaprovider, - 'status' => 'active', - ] - ); - - if ((string) $organization->name !== (string) $request->namaprovider) { - $organization->name = $request->namaprovider; - $organization->save(); - } - - $provider = Provider::query()->firstOrNew([ - 'organization_id' => $organization->id, - 'username' => $request->username, - ]); - - $provider->password = Hash::make($request->password); - $provider->code = $request->kodeprovider; - $provider->status = $request->status; - $provider->header_token = $request->header_token; - $provider->token = $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 getHeaderKey(Request $request) { $request->validate([ @@ -122,7 +77,7 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); if ($authError) { return $authError; } @@ -136,31 +91,22 @@ class ProviderOnlineController extends Controller return $this->statusError('Peserta tidak ditemukan'); } - $planIds = $member->memberPlans - ->pluck('plan_id') - ->filter() - ->unique() - ->values(); + $benefits = $member->memberPlans + ->map(function (MemberPlan $memberPlan) { + $plan = $memberPlan->plan; + if (!$plan || empty($plan->code)) { + return null; + } - $benefits = collect(); - if ($planIds->isNotEmpty()) { - $benefits = CorporateBenefit::query() - ->with(['benefit', 'plan']) - ->whereIn('plan_id', $planIds) - ->get() - ->map(function (CorporateBenefit $corporateBenefit) { - return [ - // Keep response keys unchanged, but fill with sub-benefit data - 'kodebenefit' => optional($corporateBenefit->benefit)->code, - 'namabenefit' => optional($corporateBenefit->benefit)->description, - 'planid' => optional($corporateBenefit->plan)->code, - ]; - }) - ->filter(function (array $item) { - return !empty($item['kodebenefit']); - }) - ->values(); - } + return [ + 'kodebenefit' => $plan->code, + 'namabenefit' => $plan->corporate_plan_id, + 'planid' => $plan->code, + ]; + }) + ->filter() + ->unique('kodebenefit') + ->values(); return response()->json([ 'Status' => $this->okStatus(), @@ -204,7 +150,7 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); if ($authError) { return $authError; } @@ -213,6 +159,7 @@ class ProviderOnlineController extends Controller ->with(['person', 'currentCorporate', 'currentPolicy']) ->where('member_id', $request->nokartu) ->first(); + if (!$member) { return $this->statusError('Peserta tidak ditemukan'); } @@ -263,49 +210,17 @@ class ProviderOnlineController extends Controller 'namasubbenefit' => optional($corporateBenefit->benefit)->description, 'batasan' => (string) ($corporateBenefit->limit_amount ?? 0), ]; + }) + ->filter(function (array $item) { + return !empty($item['kodesubbenefit']); }); } + $this->sendProviderOnlineEmail('pendaftaran baru', $requestLog, $organization); + 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), - ]], + 'Data' => [$this->buildClaimHeader($requestLog, $organization)], 'LimitSubBenefit' => $limitSubBenefit->values(), ]); } @@ -326,7 +241,7 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); if ($authError) { return $authError; } @@ -336,12 +251,18 @@ class ProviderOnlineController extends Controller ->where('code', $request->noklaim) ->where('organization_id', $organization->id) ->first(); + if (!$requestLog) { return $this->statusError('Nomor klaim tidak ditemukan'); } + $benefitsByCode = $this->resolveBenefitCodes($request->daftarbiaya ?? []); + if (isset($benefitsByCode['error'])) { + return $this->statusError($benefitsByCode['error']); + } + $requestLog->update([ - 'status_final_log' => 'approved', + 'status_final_log' => 'approve', 'final_log' => true, 'discharge_date' => $request->tanggalkeluar, 'diagnosis' => $request->kodediagnosa, @@ -350,10 +271,7 @@ class ProviderOnlineController extends Controller ]); foreach (($request->daftarbiaya ?? []) as $biaya) { - $benefit = Benefit::query()->where('code', $biaya['kodesubbenefit'])->first(); - if (!$benefit) { - continue; - } + $benefit = $benefitsByCode[$biaya['kodesubbenefit']]; RequestLogBenefit::query()->updateOrCreate( [ @@ -386,50 +304,78 @@ class ProviderOnlineController extends Controller ]; })->values(); + $this->sendProviderOnlineEmail('pengesahan', $requestLog, $organization); + 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), - ]], + 'Data' => [$this->buildClaimHeader($requestLog, $organization)], 'Biaya' => $biayaResponse, ]); } + public function upsertBillingSementara(Request $request) + { + $request->validate([ + 'noklaim' => 'required|string', + 'kodeprovider' => 'required|string', + 'tanggalkeluar' => 'nullable|date', + 'kodediagnosa' => 'nullable|string', + 'daftarbiaya' => 'nullable|array', + 'daftarbiaya.*.kodesubbenefit' => 'required_with:daftarbiaya|string', + 'daftarbiaya.*.biayaaju' => 'required_with:daftarbiaya|numeric', + 'p_user_no' => 'required', + 'p_token' => 'required|string', + ]); + + [, $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'); + } + + $benefitsByCode = $this->resolveBenefitCodes($request->daftarbiaya ?? []); + if (isset($benefitsByCode['error'])) { + return $this->statusError($benefitsByCode['error']); + } + + $requestLog->update([ + 'discharge_date' => $request->tanggalkeluar, + 'diagnosis' => $request->kodediagnosa, + ]); + + foreach (($request->daftarbiaya ?? []) as $biaya) { + $benefit = $benefitsByCode[$biaya['kodesubbenefit']]; + + 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, + ] + ); + } + + $this->sendProviderOnlineEmail('upsert billing sementara', $requestLog, $organization); + + return response()->json([ + 'Status' => $this->okStatus(), + ]); + } + public function getRincianBiayaKlaim(Request $request) { $request->validate([ @@ -439,16 +385,17 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); if ($authError) { return $authError; } $requestLog = RequestLog::query() - ->with(['plan', 'requestLogBenefits.benefit']) + ->with(['member.person', 'member.currentCorporate', 'member.currentPolicy', 'plan', 'requestLogBenefits.benefit']) ->where('code', $request->noklaim) ->where('organization_id', $organization->id) ->first(); + if (!$requestLog) { return $this->statusError('Nomor klaim tidak ditemukan'); } @@ -469,13 +416,7 @@ class ProviderOnlineController extends Controller return response()->json([ 'Status' => $this->okStatus(), - 'Data' => [ - 'noklaim' => $requestLog->code, - 'kodeprovider' => $organization->code, - 'nosep' => $requestLog->nomor_sep, - 'keterangan' => $requestLog->keterangan, - 'statusklaim' => $requestLog->status, - ], + 'Data' => [$this->buildClaimHeader($requestLog, $organization)], 'Biaya' => $biaya, ]); } @@ -489,21 +430,25 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $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(); + $requestLog = RequestLog::query() + ->where('code', $request->noklaim) + ->where('organization_id', $organization->id) + ->first(); + if (!$requestLog) { return $this->statusError('Nomor klaim tidak ditemukan'); } try { - $requestLogController = new RequestLogController(); - return $requestLogController->downlodLog($requestLog->id); + return (new RequestLogController())->downlodLog($requestLog->id); } catch (Throwable $e) { $fallbackUrl = url('api/v1/hospitalportal/download-log/' . $requestLog->id); + return $this->statusError( 'Gagal generate PDF struk pendaftaran: ' . $e->getMessage() . '. request_log_id=' . $requestLog->id . ', fallback_url=' . $fallbackUrl, 500 @@ -520,21 +465,25 @@ class ProviderOnlineController extends Controller 'p_token' => 'required|string', ]); - [$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token); + [, $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(); + $requestLog = RequestLog::query() + ->where('code', $request->noklaim) + ->where('organization_id', $organization->id) + ->first(); + if (!$requestLog) { return $this->statusError('Nomor klaim tidak ditemukan'); } try { - $requestLogController = new RequestLogController(); - return $requestLogController->downlodFinalLog($requestLog->id); + return (new RequestLogController())->downlodFinalLog($requestLog->id); } catch (Throwable $e) { $fallbackUrl = url('api/v1/hospitalportal/download-final-log/' . $requestLog->id); + return $this->statusError( 'Gagal generate PDF struk pengesahan: ' . $e->getMessage() . '. request_log_id=' . $requestLog->id . ', fallback_url=' . $fallbackUrl, 500 @@ -555,6 +504,7 @@ class ProviderOnlineController extends Controller ->where('code', $kodeProvider) ->where('status', 'active') ->first(); + if (!$provider) { return [null, null, $this->statusError('User provider tidak ditemukan')]; } @@ -566,9 +516,10 @@ class ProviderOnlineController extends Controller return [$provider, $organization, null]; } - private function resolvePlan(Member $member, string $serviceCode) + private function resolvePlan(Member $member, string $serviceCode): ?Plan { - $memberPlan = $member->memberPlans()->with('plan') + $memberPlan = $member->memberPlans() + ->with('plan') ->where('status', 'active') ->orderByDesc('id') ->get() @@ -583,6 +534,117 @@ class ProviderOnlineController extends Controller return optional($member->memberPlans()->with('plan')->orderByDesc('id')->first())->plan; } + private function resolveBenefitCodes(array $daftarBiaya): array + { + $codes = collect($daftarBiaya) + ->pluck('kodesubbenefit') + ->filter() + ->unique() + ->values(); + + if ($codes->isEmpty()) { + return []; + } + + $benefits = Benefit::query() + ->whereIn('code', $codes) + ->get() + ->keyBy('code'); + + $missing = $codes->filter(function (string $code) use ($benefits) { + return !$benefits->has($code); + }); + + if ($missing->isNotEmpty()) { + return [ + 'error' => 'Kode sub benefit tidak valid: ' . $missing->implode(', '), + ]; + } + + return $benefits->all(); + } + + private function buildClaimHeader(RequestLog $requestLog, Organization $organization): array + { + $requestLog->loadMissing(['member.currentCorporate', 'member.currentPolicy', 'plan']); + + return [ + '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), + ]; + } + + private function sendProviderOnlineEmail(string $eventName, RequestLog $requestLog, Organization $organization): void + { + $email = trim((string) ($organization->email ?? env('PROVIDER_ONLINE_NOTIFICATION_EMAIL', 'alarm.center@linksehat.com'))); + if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) { + return; + } + + $name = $organization->name ?: 'Provider'; + $subject = sprintf('[ProviderOnline] %s - %s', ucfirst($eventName), $requestLog->code); + $body = sprintf( + '

Halo %s,

Event %s berhasil diproses untuk nomor klaim %s.

Waktu: %s

', + e($name), + e($eventName), + e($requestLog->code), + now()->format('Y-m-d H:i:s') + ); + + try { + Helper::sendEmail([ + 'email' => $email, + 'name' => $name, + 'subject' => $subject, + 'body' => $body, + ]); + } catch (Throwable $throwable) { + Log::warning('ProviderOnline notification email failed', [ + 'event' => $eventName, + 'request_log_id' => $requestLog->id, + 'request_log_code' => $requestLog->code, + 'organization_id' => $organization->id, + 'error' => $throwable->getMessage(), + ]); + } + } + private function okStatus(): array { return [ diff --git a/Modules/ProviderIntegrations/Providers/ProviderIntegrationsServiceProvider.php b/Modules/ProviderIntegrations/Providers/ProviderIntegrationsServiceProvider.php new file mode 100644 index 00000000..e5c10f0a --- /dev/null +++ b/Modules/ProviderIntegrations/Providers/ProviderIntegrationsServiceProvider.php @@ -0,0 +1,82 @@ +registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations')); + } + + public function register() + { + $this->app->register(RouteServiceProvider::class); + } + + protected function registerConfig() + { + $this->publishes([ + module_path($this->moduleName, 'Config/config.php') => config_path($this->moduleNameLower . '.php'), + ], 'config'); + + $this->mergeConfigFrom( + module_path($this->moduleName, 'Config/config.php'), + $this->moduleNameLower + ); + } + + public function registerViews() + { + $viewPath = resource_path('views/modules/' . $this->moduleNameLower); + $sourcePath = module_path($this->moduleName, 'Resources/views'); + + $this->publishes([ + $sourcePath => $viewPath, + ], ['views', $this->moduleNameLower . '-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + } + + public function registerTranslations() + { + $langPath = resource_path('lang/modules/' . $this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath, $this->moduleNameLower); + + return; + } + + $this->loadTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower); + } + + public function provides() + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + + foreach (config('view.paths') as $path) { + if (is_dir($path . '/modules/' . $this->moduleNameLower)) { + $paths[] = $path . '/modules/' . $this->moduleNameLower; + } + } + + return $paths; + } +} diff --git a/Modules/ProviderIntegrations/Providers/RouteServiceProvider.php b/Modules/ProviderIntegrations/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..cf39318c --- /dev/null +++ b/Modules/ProviderIntegrations/Providers/RouteServiceProvider.php @@ -0,0 +1,37 @@ +mapApiRoutes(); + $this->mapWebRoutes(); + } + + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->moduleNamespace) + ->group(module_path('ProviderIntegrations', '/Routes/web.php')); + } + + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->moduleNamespace) + ->group(module_path('ProviderIntegrations', '/Routes/api.php')); + } +} diff --git a/Modules/ProviderIntegrations/Routes/api.php b/Modules/ProviderIntegrations/Routes/api.php new file mode 100644 index 00000000..6749e6f7 --- /dev/null +++ b/Modules/ProviderIntegrations/Routes/api.php @@ -0,0 +1,14 @@ +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('BillingSementara', [ProviderOnlineController::class, 'upsertBillingSementara']); + Route::post('RincianBiayaKlaim', [ProviderOnlineController::class, 'getRincianBiayaKlaim']); + Route::post('StrukPendaftaran', [ProviderOnlineController::class, 'downloadStrukPendaftaran']); + Route::post('StrukPengesahan', [ProviderOnlineController::class, 'downloadStrukPengesahan']); +}); diff --git a/Modules/ProviderIntegrations/Routes/web.php b/Modules/ProviderIntegrations/Routes/web.php new file mode 100644 index 00000000..760ec8c3 --- /dev/null +++ b/Modules/ProviderIntegrations/Routes/web.php @@ -0,0 +1,7 @@ +group(function () { + Route::get('/', function () { + return response()->json(['module' => 'ProviderIntegrations']); + }); +}); diff --git a/Modules/ProviderIntegrations/composer.json b/Modules/ProviderIntegrations/composer.json new file mode 100644 index 00000000..a7120408 --- /dev/null +++ b/Modules/ProviderIntegrations/composer.json @@ -0,0 +1,21 @@ +{ + "name": "nwidart/providerintegrations", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": {} + } + }, + "autoload": { + "psr-4": { + "Modules\\ProviderIntegrations\\": "" + } + } +} diff --git a/Modules/ProviderIntegrations/module.json b/Modules/ProviderIntegrations/module.json new file mode 100644 index 00000000..9c8b0520 --- /dev/null +++ b/Modules/ProviderIntegrations/module.json @@ -0,0 +1,11 @@ +{ + "name": "ProviderIntegrations", + "alias": "providerintegrations", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\ProviderIntegrations\\Providers\\ProviderIntegrationsServiceProvider" + ], + "files": [] +} diff --git a/modules_statuses.json b/modules_statuses.json index 1ddeefbe..3afe33b5 100644 --- a/modules_statuses.json +++ b/modules_statuses.json @@ -3,5 +3,6 @@ "Client": true, "Linksehat": true, "HospitalPortal": true, - "Primaya": true -} \ No newline at end of file + "Primaya": true, + "ProviderIntegrations": true +}