add request for authorization of care endpoint

This commit is contained in:
Djery-Tom 2022-01-31 16:51:39 +01:00
parent 89f4a8946e
commit c3e69f71fc
7 changed files with 253 additions and 4 deletions

View File

@ -0,0 +1,149 @@
<?php
namespace App\Http\Controllers;
use App\Events\InsuredConsultation;
use App\HealthCareSheetType;
use App\InsuranceState;
use App\InsuranceSubscriptionState;
use App\Models\AgentPlus;
use App\Models\NhAuthorizationOfCareRequest;
use App\Models\NhAct;
use App\Models\NhDrugsAndDevice;
use App\Models\NhExam;
use App\Models\NhHealthCareSheet;
use App\Models\NhHealthCareSheetsExam;
use App\Models\NhHealthCareSheetsHistory;
use App\Models\NhHealthCareSheetsPerformance;
use App\Models\NhHealthCareSheetsPrescription;
use App\Models\NhInfosHealthCareSheets;
use App\Models\NhInsurance;
use App\Models\NhMedicalPrescription;
use App\Models\NhNetworksConfig;
use App\Models\NhPerformance;
use App\Models\NhProviderClass;
use App\Models\NhValidatingAgent;
use App\Models\User;
use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use stdClass;
use Throwable;
class AuthorizationCareRequestController extends Controller
{
/**
* @OA\Post(
* path="/authorizations-care-requests",
* summary="Demander une autorisation de soin",
* tags={"Demandes d'autorisation de soins"},
* security={{"api_key":{}}},
* @OA\RequestBody(
* description="Corps de la requete",
* required=true,
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* schema="request_for_authorizations_of_care",
* title = "Demande autorisation de soins",
* required={"health_care_sheet_id", "network_agent_id", "password", "practitioner_lastname", "practitioner_provider_class_id",
* "prescriptions" , "exams"},
* @OA\Property(
* property="act_id",
* description = "ID de l'acte",
* type="integer",
* example= 5
* ),
* @OA\Property(
* property="user_id",
* description = "ID de l'utilisateur",
* type="integer",
* example= 301
* ),
* @OA\Property(
* property="password",
* description = "Mot de passe",
* type="string",
* example= "password"
* )
* ),
* ),
* ),
* @OA\Response(
* response=200,
* description="OK",
* @OA\JsonContent(
* ref="#/components/schemas/ApiResponse",
* example = {
* "status" : 200,
* "response" : "Demande autorisation soin envoyée",
* "error":null
* }
* )
* )
* )
*/
public function store(Request $request)
{
$this->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;
}
}

View File

@ -238,7 +238,17 @@ class HealthCareSheetController extends Controller
* description="Code de l'acte", * description="Code de l'acte",
* @OA\Schema( * @OA\Schema(
* type="string", * 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", * in="query",
* required=false * required=false
@ -262,9 +272,11 @@ class HealthCareSheetController extends Controller
$this->validate($request, [ $this->validate($request, [
'network_id' => 'required|integer|exists:networks,id', 'network_id' => 'required|integer|exists:networks,id',
'code' => 'nullable|string', 'code' => 'nullable|string',
'authorization_type' => 'nullable|in:FREE,PRIOR'
]); ]);
$network_id = $request->input('network_id'); $network_id = $request->input('network_id');
$authorization_type = $request->input('authorization_type');
$query = NhAct::whereHas('network_config', function ($query) use ($network_id) { $query = NhAct::whereHas('network_config', function ($query) use ($network_id) {
return $query->where('network_id', $network_id); return $query->where('network_id', $network_id);
@ -275,6 +287,10 @@ class HealthCareSheetController extends Controller
$query = $query->where('code', 'like', '%' . $code . '%'); $query = $query->where('code', 'like', '%' . $code . '%');
} }
if (!empty($authorization_type)) {
$query = $query->where('authorization_type', $authorization_type);
}
$classes = $query->get(['id', 'code', 'name']); $classes = $query->get(['id', 'code', 'name']);
return $this->successResponse($classes); return $this->successResponse($classes);
@ -1767,7 +1783,7 @@ class HealthCareSheetController extends Controller
} }
} }
public function generateSheetID(): string private function generateSheetID(): string
{ {
do { do {
$code = generateTransactionCode(); $code = generateTransactionCode();

View File

@ -0,0 +1,40 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class AuthorizationOfCareRequest
*
* @property int $id
* @property string $request_id
* @property int $user_id
* @property int $act_id
* @property string $state
* @property Carbon $created_at
* @property Carbon $updated_at
*
* @package App\Models
*/
class NhAuthorizationOfCareRequest extends Model
{
protected $table = 'nh_authorization_of_care_requests';
protected $casts = [
'user_id' => 'int',
'act_id' => 'int'
];
protected $fillable = [
'request_id',
'user_id',
'act_id',
'state'
];
}

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateNhAuthorizationOfCareRequestsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('nh_authorization_of_care_requests', function (Blueprint $table) {
$table->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');
}
}

View File

@ -128,5 +128,8 @@ A new consultation or prescription has been made with your insurance.
'institution_name' => "Institution name", 'institution_name' => "Institution name",
'phone' => "Telephone", 'phone' => "Telephone",
'transmitter' => "Transmitter", '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"
]; ];

View File

@ -144,5 +144,8 @@ Une nouvelle execution de prescription vient d'etre effectuée sur votre assuran
'institution_name' => "Nom établissement", 'institution_name' => "Nom établissement",
'phone' => "Téléphone", 'phone' => "Téléphone",
'transmitter' => "Émetteur", '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"
]; ];

View File

@ -52,4 +52,6 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route
$router->get('invoices', 'InvoiceController@getInvoices'); $router->get('invoices', 'InvoiceController@getInvoices');
$router->get('generate-invoice', 'InvoiceController@generateInvoice'); $router->get('generate-invoice', 'InvoiceController@generateInvoice');
$router->post('authorizations-care-requests', 'AuthorizationCareRequestController@store');
}); });