Add endpoint to calculate performance
This commit is contained in:
parent
6e99bd4e51
commit
4956227c37
|
@ -29,6 +29,7 @@ use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Event;
|
use Illuminate\Support\Facades\Event;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use stdClass;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
class HealthCareSheetController extends Controller
|
class HealthCareSheetController extends Controller
|
||||||
|
@ -146,7 +147,7 @@ class HealthCareSheetController extends Controller
|
||||||
* ref="#/components/schemas/ApiResponse",
|
* ref="#/components/schemas/ApiResponse",
|
||||||
* example = {
|
* example = {
|
||||||
* "status" : 200,
|
* "status" : 200,
|
||||||
* "response" : "Médicament / Appareillage enregistré",
|
* "response" : {"network_id":250,"code":"ABD","name":"Nivaquine","type":"COMPRESSED","on_prescription":false,"updated_at":"2021-11-29T11:32:31.000000Z","created_at":"2021-11-29T11:32:31.000000Z","id":4},
|
||||||
* "error":null
|
* "error":null
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
|
@ -168,9 +169,8 @@ class HealthCareSheetController extends Controller
|
||||||
if (isset($drug)) {
|
if (isset($drug)) {
|
||||||
return $this->errorResponse(trans('errors.drug_device_already_exists'));
|
return $this->errorResponse(trans('errors.drug_device_already_exists'));
|
||||||
}
|
}
|
||||||
NhDrugsAndDevice::create($request->all());
|
$drug = NhDrugsAndDevice::create($request->all());
|
||||||
|
return $this->successResponse($drug);
|
||||||
return $this->successResponse(trans('messages.drug_device_saved'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -284,6 +284,79 @@ class HealthCareSheetController extends Controller
|
||||||
return $this->successResponse($classes);
|
return $this->successResponse($classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/health-care-sheets/performances-amount",
|
||||||
|
* summary="Calculer le montant des prestations lors d'une consulation",
|
||||||
|
* tags={"Feuilles de soins"},
|
||||||
|
* security={{"api_key":{}}},
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="Corps de la requete",
|
||||||
|
* required=true,
|
||||||
|
* @OA\MediaType(
|
||||||
|
* mediaType="application/json",
|
||||||
|
* @OA\Schema(
|
||||||
|
* @OA\Property(property="network_id",
|
||||||
|
* type="integer",
|
||||||
|
* example = 250,
|
||||||
|
* description="ID du reseau de l'assureur"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(property="care_condition",
|
||||||
|
* description = "Condition de prise en charge",
|
||||||
|
* type="string",
|
||||||
|
* enum={"CURRENT_AFFECTION","LONG_TERM_AFFECTION","EXONERATION"},
|
||||||
|
* example= "CURRENT_AFFECTION"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="performances",
|
||||||
|
* description="Listes des montants des prestations",
|
||||||
|
* example = {{"amount":20000}}
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* example = {"network_id":250,"care_condition":"CURRENT_AFFECTION","performances":{{"amount":20000}}}
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="OK",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* ref="#/components/schemas/ApiResponse",
|
||||||
|
* example = {"status":200,"response":{{"moderator_ticket":4000,"moderator_ticket_formatted":"4\u202f000 FCFA","insurance_amount":16000,
|
||||||
|
* "insurance_amount_formatted":"16\u202f000 FCFA"}},"error":null},
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function calculateConsultationPerformancesAmount(Request $request)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'network_id' => 'required|integer|exists:networks,id',
|
||||||
|
'care_condition' => 'required|in:CURRENT_AFFECTION,LONG_TERM_AFFECTION,EXONERATION',
|
||||||
|
'performances' => 'required|array',
|
||||||
|
'performances.*.amount' => 'required|numeric',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$nhConfig = NhNetworksConfig::where('network_id', $request->input('network_id'))->first();
|
||||||
|
if (!isset($nhConfig)) {
|
||||||
|
return $this->errorResponse(trans('errors.nano_health_not_activated'));
|
||||||
|
}
|
||||||
|
$currency_code = $this->getNetworkCurrency($request->input('network_id'));
|
||||||
|
$parts = $this->getConfigInsuranceParts($nhConfig, $request->input('care_condition'));
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
foreach ($request->input('performances') as $p) {
|
||||||
|
array_push($result, [
|
||||||
|
'moderator_ticket' => $parts->insured_part * $p['amount'],
|
||||||
|
'moderator_ticket_formatted' => $this->toMoneyWithCurrencyCode($parts->insured_part * $p['amount'], $currency_code),
|
||||||
|
'insurance_amount' => $parts->insurer_part * $p['amount'],
|
||||||
|
'insurance_amount_formatted' => $this->toMoneyWithCurrencyCode($parts->insurer_part * $p['amount'], $currency_code), //
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->successResponse($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Post(
|
* @OA\Post(
|
||||||
* path="/health-care-sheets/consultation",
|
* path="/health-care-sheets/consultation",
|
||||||
|
@ -513,23 +586,7 @@ class HealthCareSheetController extends Controller
|
||||||
return $this->errorResponse(trans('errors.nano_health_not_activated'));
|
return $this->errorResponse(trans('errors.nano_health_not_activated'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$insuredPart = 0;
|
$parts = $this->getConfigInsuranceParts($nhConfig, $request->input('care_condition'));
|
||||||
$insurerPart = 0;
|
|
||||||
switch ($request->input('care_condition')) {
|
|
||||||
case 'CURRENT_AFFECTION':
|
|
||||||
$insurerPart = $nhConfig->current_affection_percentage_insurer / 100;
|
|
||||||
$insuredPart = $nhConfig->current_affection_percentage_insured / 100;
|
|
||||||
break;
|
|
||||||
case 'LONG_TERM_AFFECTION':
|
|
||||||
$insurerPart = $nhConfig->long_term_affection_percentage_insurer / 100;
|
|
||||||
$insuredPart = $nhConfig->long_term_affection_percentage_insured / 100;
|
|
||||||
break;
|
|
||||||
case 'EXONERATION':
|
|
||||||
$insurerPart = $nhConfig->exoneration_percentage_insurer / 100;
|
|
||||||
$insuredPart = $nhConfig->exoneration_percentage_insured / 100;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
@ -551,8 +608,8 @@ class HealthCareSheetController extends Controller
|
||||||
'act_id' => $p['act_id'],
|
'act_id' => $p['act_id'],
|
||||||
'amount' => $p['amount'],
|
'amount' => $p['amount'],
|
||||||
'home_visit_fees' => $p['home_visit_fees'] ?? null,
|
'home_visit_fees' => $p['home_visit_fees'] ?? null,
|
||||||
'moderator_ticket' => $insuredPart * $p['amount'], // to calculate,
|
'moderator_ticket' => $parts->insured_part * $p['amount'], // to calculate,
|
||||||
'insurance_amount' => $insurerPart * $p['amount'], // to calculate, montant de l'assurance
|
'insurance_amount' => $parts->insurer_part * $p['amount'], // to calculate, montant de l'assurance
|
||||||
'created_at' => $datetime, 'updated_at' => $datetime,
|
'created_at' => $datetime, 'updated_at' => $datetime,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -775,6 +832,30 @@ class HealthCareSheetController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getConfigInsuranceParts(NhNetworksConfig $nhConfig, $care_condition): stdClass
|
||||||
|
{
|
||||||
|
$insuredPart = 0;
|
||||||
|
$insurerPart = 0;
|
||||||
|
switch ($care_condition) {
|
||||||
|
case 'CURRENT_AFFECTION':
|
||||||
|
$insurerPart = $nhConfig->current_affection_percentage_insurer / 100;
|
||||||
|
$insuredPart = $nhConfig->current_affection_percentage_insured / 100;
|
||||||
|
break;
|
||||||
|
case 'LONG_TERM_AFFECTION':
|
||||||
|
$insurerPart = $nhConfig->long_term_affection_percentage_insurer / 100;
|
||||||
|
$insuredPart = $nhConfig->long_term_affection_percentage_insured / 100;
|
||||||
|
break;
|
||||||
|
case 'EXONERATION':
|
||||||
|
$insurerPart = $nhConfig->exoneration_percentage_insurer / 100;
|
||||||
|
$insuredPart = $nhConfig->exoneration_percentage_insured / 100;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$result = new stdClass();
|
||||||
|
$result->insured_part = $insuredPart;
|
||||||
|
$result->insurer_part = $insurerPart;
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
public function generateSheetID(): string
|
public function generateSheetID(): string
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
|
|
|
@ -44,6 +44,7 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route
|
||||||
|
|
||||||
$router->get('health-care-sheets', 'HealthCareSheetController@getHealthCareSheets');
|
$router->get('health-care-sheets', 'HealthCareSheetController@getHealthCareSheets');
|
||||||
$router->put('health-care-sheets', 'HealthCareSheetController@treatHealthCareSheet');
|
$router->put('health-care-sheets', 'HealthCareSheetController@treatHealthCareSheet');
|
||||||
|
$router->post('health-care-sheets/performances-amount', 'HealthCareSheetController@calculateConsultationPerformancesAmount');
|
||||||
$router->post('health-care-sheets/consultation', 'HealthCareSheetController@storeHealthCareSheetConsultation');
|
$router->post('health-care-sheets/consultation', 'HealthCareSheetController@storeHealthCareSheetConsultation');
|
||||||
$router->post('health-care-sheets/execution', 'HealthCareSheetController@storeHealthCareSheetExecution');
|
$router->post('health-care-sheets/execution', 'HealthCareSheetController@storeHealthCareSheetExecution');
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue