diff --git a/app/Http/Controllers/AuthorizationCareRequestController.php b/app/Http/Controllers/AuthorizationCareRequestController.php new file mode 100755 index 0000000..ee8c001 --- /dev/null +++ b/app/Http/Controllers/AuthorizationCareRequestController.php @@ -0,0 +1,149 @@ +validate($request, [ + 'act_id' => 'required|integer|exists:nh_acts,id', + 'user_id' => 'required|integer|exists:users,id', + 'password' => 'required|string' + ]); + + $user = User::find($request->input('user_id')); + $act_id = $request->input('act_id'); + $password = $request->input('password'); + if (!checkPassword($password, $user->encrypted_password, $user->salt)) + return $this->errorResponse(trans('messages.incorrect_user_password')); + + $act = NhAct::find($act_id); + try { + + DB::beginTransaction(); + NhAuthorizationOfCareRequest::create([ + 'request_id' => $this->generateRequestID(), + 'user_id' => $user->id, + 'act_id' => $act_id, + 'state' => InsuranceSubscriptionState::UNDER_VALIDATION + ]); + DB::commit(); + + $recipients = array_map(function ($email) { + return preg_replace("/\s+/", "", $email); + }, NhValidatingAgent::where('role', 'DOCTOR')->whereNotNull('password')->pluck('email')->toArray()); + + + $title = __('messages.new_care_authorisation'); + $message = __('messages.new_care_authorisation_email', ['insured' => $user->lastname . ' ' . $user->firstname, 'act' => $act->name]); + + Mail::mailer('smtp')->raw($message, function ($message) use ($recipients, $title) { + $message->subject($title) + ->to($recipients); + }); + + } catch (Throwable $t) { + DB::rollBack(); + Log::error('-------- Authorization of care error -----------'); + Log::error($t->getMessage() . " :\n" . $t->getTraceAsString()); + } + + return $this->successResponse(__('messages.new_care_authorisation_sent')); + } + + private function generateRequestID(): string + { + do { + $code = generateTransactionCode(); + $codeCorrect = NhAuthorizationOfCareRequest::where('request_id', $code)->count() < 0; + } while ($codeCorrect); + return $code; + } + + +} diff --git a/app/Http/Controllers/HealthCareSheetController.php b/app/Http/Controllers/HealthCareSheetController.php index 24bdbc5..416b5d6 100755 --- a/app/Http/Controllers/HealthCareSheetController.php +++ b/app/Http/Controllers/HealthCareSheetController.php @@ -238,7 +238,17 @@ class HealthCareSheetController extends Controller * description="Code de l'acte", * @OA\Schema( * type="string", - * default = "CODE1" + * ), + * in="query", + * required=false + * ), + * @OA\Parameter( + * parameter="authorization_type", + * name="authorization_type", + * description="Type d'autorisation", + * @OA\Schema( + * type="string", + * enum = {"FREE","PRIOR"}, * ), * in="query", * required=false @@ -262,9 +272,11 @@ class HealthCareSheetController extends Controller $this->validate($request, [ 'network_id' => 'required|integer|exists:networks,id', 'code' => 'nullable|string', + 'authorization_type' => 'nullable|in:FREE,PRIOR' ]); $network_id = $request->input('network_id'); + $authorization_type = $request->input('authorization_type'); $query = NhAct::whereHas('network_config', function ($query) use ($network_id) { return $query->where('network_id', $network_id); @@ -275,6 +287,10 @@ class HealthCareSheetController extends Controller $query = $query->where('code', 'like', '%' . $code . '%'); } + if (!empty($authorization_type)) { + $query = $query->where('authorization_type', $authorization_type); + } + $classes = $query->get(['id', 'code', 'name']); return $this->successResponse($classes); @@ -1767,7 +1783,7 @@ class HealthCareSheetController extends Controller } } - public function generateSheetID(): string + private function generateSheetID(): string { do { $code = generateTransactionCode(); diff --git a/app/Models/NhAuthorizationOfCareRequest.php b/app/Models/NhAuthorizationOfCareRequest.php new file mode 100644 index 0000000..8e17e92 --- /dev/null +++ b/app/Models/NhAuthorizationOfCareRequest.php @@ -0,0 +1,40 @@ + 'int', + 'act_id' => 'int' + ]; + + protected $fillable = [ + 'request_id', + 'user_id', + 'act_id', + 'state' + ]; +} diff --git a/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php b/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php new file mode 100644 index 0000000..91a4dd5 --- /dev/null +++ b/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('request_id')->unique(); + $table->integer('user_id'); + $table->integer('act_id'); + $table->enum('state', ['UNDER_VALIDATION', 'ACCEPTED', 'REJECTED'])->default('UNDER_VALIDATION'); + $table->timestamp('created_at')->useCurrent(); + $table->timestamp('updated_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('nh_authorization_of_care_requests'); + } +} diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 22acdd1..30d45e5 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -128,5 +128,8 @@ A new consultation or prescription has been made with your insurance. 'institution_name' => "Institution name", 'phone' => "Telephone", 'transmitter' => "Transmitter", - 'recipient' => "Recipient" + 'recipient' => "Recipient", + 'new_care_authorisation' => "New care authorisation", + 'new_care_authorisation_email' => "Insured :insured requests new care authorisation for procedure :act", + 'new_care_authorisation_sent' => "New care authorisation request sent" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index c5d05db..c5a22d7 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -144,5 +144,8 @@ Une nouvelle execution de prescription vient d'etre effectuée sur votre assuran 'institution_name' => "Nom établissement", 'phone' => "Téléphone", 'transmitter' => "Émetteur", - 'recipient' => "Destinataire" + 'recipient' => "Destinataire", + 'new_care_authorisation' => "Nouvelle autorisation de soin", + 'new_care_authorisation_email' => "L'assuré :insured demande une nouvelle autorisation de soin pour l'acte :act", + 'new_care_authorisation_sent' => "Nouvelle demande autorisation soin envoyée" ]; diff --git a/routes/web.php b/routes/web.php index d45b7ed..3060301 100644 --- a/routes/web.php +++ b/routes/web.php @@ -52,4 +52,6 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route $router->get('invoices', 'InvoiceController@getInvoices'); $router->get('generate-invoice', 'InvoiceController@generateInvoice'); + + $router->post('authorizations-care-requests', 'AuthorizationCareRequestController@store'); });