feat(provider-integrations): move ProviderOnline endpoints to new module

This commit is contained in:
2026-05-15 11:41:35 +07:00
parent 8cd1385a21
commit 2aca3693f3
10 changed files with 419 additions and 191 deletions

View File

@@ -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']);
});

View File

@@ -0,0 +1,5 @@
<?php
return [
'name' => 'ProviderIntegrations',
];

View File

@@ -1,13 +1,14 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
namespace Modules\ProviderIntegrations\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Benefit;
use App\Models\Claim;
use App\Models\CorporateBenefit;
use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Organization;
use App\Models\Plan;
use App\Models\Provider;
use App\Models\RequestLog;
use App\Models\RequestLogBenefit;
@@ -16,59 +17,13 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use PDF;
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
use Throwable;
class ProviderOnlineController extends Controller
{
public function addHeaderKey(Request $request)
{
$request->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(
'<p>Halo %s,</p><p>Event <strong>%s</strong> berhasil diproses untuk nomor klaim <strong>%s</strong>.</p><p>Waktu: %s</p>',
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 [

View File

@@ -0,0 +1,82 @@
<?php
namespace Modules\ProviderIntegrations\Providers;
use Illuminate\Support\ServiceProvider;
class ProviderIntegrationsServiceProvider extends ServiceProvider
{
protected $moduleName = 'ProviderIntegrations';
protected $moduleNameLower = 'providerintegrations';
public function boot()
{
$this->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;
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace Modules\ProviderIntegrations\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
protected $moduleNamespace = 'Modules\\ProviderIntegrations\\Http\\Controllers';
public function boot()
{
parent::boot();
}
public function map()
{
$this->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'));
}
}

View File

@@ -0,0 +1,14 @@
<?php
use Modules\ProviderIntegrations\Http\Controllers\Api\ProviderOnlineController;
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('BillingSementara', [ProviderOnlineController::class, 'upsertBillingSementara']);
Route::post('RincianBiayaKlaim', [ProviderOnlineController::class, 'getRincianBiayaKlaim']);
Route::post('StrukPendaftaran', [ProviderOnlineController::class, 'downloadStrukPendaftaran']);
Route::post('StrukPengesahan', [ProviderOnlineController::class, 'downloadStrukPengesahan']);
});

View File

@@ -0,0 +1,7 @@
<?php
Route::prefix('providerintegrations')->group(function () {
Route::get('/', function () {
return response()->json(['module' => 'ProviderIntegrations']);
});
});

View File

@@ -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\\": ""
}
}
}

View File

@@ -0,0 +1,11 @@
{
"name": "ProviderIntegrations",
"alias": "providerintegrations",
"description": "",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\ProviderIntegrations\\Providers\\ProviderIntegrationsServiceProvider"
],
"files": []
}

View File

@@ -3,5 +3,6 @@
"Client": true,
"Linksehat": true,
"HospitalPortal": true,
"Primaya": true
}
"Primaya": true,
"ProviderIntegrations": true
}