src/Controller/CoverageController.php line 805
<?phpnamespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\Request;use Doctrine\ORM\EntityManagerInterface;use Psr\Log\LoggerInterface;use App\Entity\Event;use App\Entity\ProfileMenu;use App\Entity\Product;use App\Entity\Portfolio;use App\Entity\ProviderDatabaseConfiguration;use App\Entity\Observation;use App\Entity\EventDomain;use App\Entity\EventLevel;use App\Entity\EventType;use App\Entity\Coverage;use App\Entity\Units;use App\Entity\Insured;class CoverageController extends AbstractController{#[Route('/api/coverage/cat/getpremium', name: 'CatPremium', methods: ['POST'])]public function getCatPremium(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/cat/getpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$totalIndex = array();$product = $entityManager->getRepository(Product::class)->findOneById($formData["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;if(!isset($formData["geteventnames"])){$formData["geteventnames"] = "PAYOUT";}if(!isset($formData["dointerpol"])){$formData["dointerpol"] = "YES";}foreach ($formData["structures"] as $key=>$value){$strucCount = $strucCount +1;$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}if(!isset($value["units"])){$value["units"] = "CAT";$formData["structures"][$key]["units"] = "CAT";}if(!isset($value["replica_period"])){$value["replica_period"] = 30;$formData["structures"][$key]["replica_period"] = 30;}if(!isset($value["history_length"])){if(is_null($product->getHistoryLength())){$value["history_length"] = 50;$formData["structures"][$key]["history_length"] = 50;}else{$value["history_length"] = $product->getHistoryLength();$formData["structures"][$key]["history_length"] = $product->getHistoryLength();}}$value["period"]=$formData["period"];$formData["structures"][$key]["period"]=$formData["period"];$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<3){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)!=0){foreach ($indexTemp as $indexValues){if(str_contains($indexValues["historic_payout_org"],':')){$filteredZone[$value["reference"]][] = $indexValues;}else{$totalIndex[] = $indexValues;}}}else{$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}}$originalPayout=array();foreach ($totalIndex as $value){$originalPayout[] = array("date_year" => $value["date_year"],"historic_payout_org" => $value["historic_payout_org"]);}$Years = array_column($totalIndex,'date_year');$totalPayout = array();for($i=min($Years);$i<=max($Years);$i++){$yearIndex = array_keys($Years,$i);$total = array_fill(0, 11, 0);foreach ($yearIndex as $value2){$total[0] = $total[0] + $totalIndex[$value2]["historic_payout_org"];$total[1] = $total[1] + $totalIndex[$value2]["historic_payout_varcat_minus"];$total[2] = $total[2] + $totalIndex[$value2]["historic_payout_varcat_plus"];$total[3] = $total[3] + $totalIndex[$value2]["historic_payout_varpoint1"];$total[4] = $total[4] + $totalIndex[$value2]["historic_payout_varpoint2"];$total[5] = $total[5] + $totalIndex[$value2]["historic_payout_varpoint3"];$total[6] = $total[6] + $totalIndex[$value2]["historic_payout_varpoint4"];$total[7] = $total[7] + $totalIndex[$value2]["historic_payout_varpoint5"];$total[8] = $total[8] + $totalIndex[$value2]["historic_payout_varpoint6"];$total[9] = $total[9] + $totalIndex[$value2]["historic_payout_varpoint7"];$total[10] = $total[10] + $totalIndex[$value2]["historic_payout_varpoint8"];}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}for($j=0;$j<11;$j++){if($total[$j] < $formData["general_deductible"]){$total[$j] = 0;}else{$total[$j] = $total[$j] - $formData["general_deductible"];}if($total[$j]>$formData["general_limit"]) $total[$j] = $formData["general_limit"];}$total_mean = array_sum($total)/count($total);if($total_mean>$formData["general_limit"]){$total_mean = $formData["general_limit"];}$totalPayout[]=array("date_year" => $i,"total_mean" => $total_mean,"historic_payout_org" => $total[0],"historic_payout_varcat_minus" => $total[1],"historic_payout_varcat_plus" => $total[2],"historic_payout_varpoint1" => $total[3],"historic_payout_varpoint2" => $total[4],"historic_payout_varpoint3" => $total[5],"historic_payout_varpoint4" => $total[6],"historic_payout_varpoint5" => $total[7],"historic_payout_varpoint6" => $total[8],"historic_payout_varpoint7" => $total[9],"historic_payout_varpoint8" => $total[10]);}$payoutMean = array_fill(0, 12, 0);$payoutMean[0] = array_sum(array_column($totalPayout,'total_mean'))/(count(array_column($totalPayout,'total_mean')));$payoutMean[1] = array_sum(array_column($totalPayout,'historic_payout_org'))/(count(array_column($totalPayout,'historic_payout_org')));$payoutMean[2] = array_sum(array_column($totalPayout,'historic_payout_varcat_minus'))/(count(array_column($totalPayout,'historic_payout_varcat_minus')));$payoutMean[3] = array_sum(array_column($totalPayout,'historic_payout_varcat_plus'))/(count(array_column($totalPayout,'historic_payout_varcat_plus')));for($j=4;$j<12;$j++){$payoutMean[$j] = array_sum(array_column($totalPayout,'historic_payout_varpoint'.($j-3)))/(count(array_column($totalPayout,'historic_payout_varpoint'.($j-3))));}if(!isset($formData["load_tail"])){$formData["load_tail"]=0.01;}if(!isset($formData["load_fronting"])){$formData["load_fronting"]=0;}if(!isset($formData["load_brokerage"])){$formData["load_brokerage"]=0.325;}if(!isset($formData["load_el"])){$formData["load_el"]=1;}if(!isset($formData["load_std"])){$formData["load_std"]=0.2;}if(!isset($formData["load_min"])){$formData["load_min"]=0.02538462;}if(!isset($formData["load_deduction_cg"])){$formData["load_deduction_cg"]=0.125;}if(!isset($formData["load_factor_uw"])){$formData["load_factor_uw"]=0.15;}$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[1];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "STRICT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'total_mean')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[0];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "AVERAGE";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varcat_minus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[2];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_MINUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varcat_plus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[3];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_PLUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint1')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[4];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint2')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[5];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint3')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[6];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_EAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint4')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[7];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_WEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint5')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[8];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint6')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[9];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHEAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint7')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[10];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint8')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[11];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHEAST";$primes=array();foreach ($Premiums as $key => $value2){$primes["Analysis"][] = array("Iteration" => $Iteration[$key],"ExpectedLoss"=> $ExpectedLoss[$key],"Premiums" => $Premiums[$key]);}$totalyears=max($Years)-min($Years)+1;for($i=min($Years);$i<=max($Years);$i++){$yearIndex = array_keys($Years,$i);$strucCount = 0;foreach ($yearIndex as $key=>$value2){$primes["Payouts"][$formData["structures"][$strucCount]["reference"]][] = array(//$primes["Payouts"][$formData["structures"][intval($value2/$totalyears)]["reference"]][] = array("Year" => $totalIndex[$value2]["date_year"],"Payout" => $totalIndex[$value2]["historic_payout_org"]);$strucCount = $strucCount + 1;}}if (isset($filteredZone)) {foreach ($filteredZone as $key=>$value){if($formData["geteventnames"]=="ALL"){foreach ($value as $key2=>$value2){$primes["Events"][$key][]=array("ID"=>$value2["date_year"],"Name"=>$value2["historic_payout_varpoint1"],"TIME"=>$value2["historic_payout_org"],"LAT"=>floatval($value2["historic_payout_varcat_minus"]),"LON"=>floatval($value2["historic_payout_varcat_plus"]),"Mg"=>floatval($value2["historic_payout_varpoint2"]),"MgSec"=>floatval($value2["historic_payout_varpoint3"]));}}else{foreach ($value as $key2=>$value2){$primes["Events"][$key][]=array("ID"=>$value2["date_year"],"Name"=>$value2["historic_payout_varpoint1"],"TIME"=>$value2["historic_payout_org"],"LAT"=>floatval($value2["historic_payout_varcat_minus"]),"LON"=>floatval($value2["historic_payout_varcat_plus"]),"Mg"=>floatval($value2["historic_payout_varpoint2"]),"MgSec"=>floatval($value2["historic_payout_varpoint3"]),"Circle"=>floatval($value2["historic_payout_varpoint7"]),"PayOut"=>floatval($value2["historic_payout_varpoint8"]));}}}}$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage/cat/getpremiumstruc', name: 'CatPremiumStruc', methods: ['POST'])]public function getCatPremiumStruc(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/getcatpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$outStruct["general_limit"]= "general_limit_value";$outStruct["product_id"]="product_id_value";$outStruct["period"]=array("start_date"=>"start_date_value","end_date"=>"end_date_value");for($x=0;$x<$formData["structures"];$x++){$structuresTemp = array();$structuresTemp["reference"]="reference_value_".$x;$structuresTemp["limit"]="limit_value_".$x;if($formData["form_type"][$x]=="rings"){$structuresTemp["latitude"]="latitude_value_".$x;$structuresTemp["longitude"]="longitude_value_".$x;$rings=array();unset($ringsTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$ringsTemp["radius"]="radius_value_".$x."_".$y;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$ringsTemp["strikes"]=$strike;$rings[]=$ringsTemp;}$structuresTemp["rings"]=$rings;}else{$polygon=array();unset($polygonTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$lat=array();$lon=array();for($z=0;$z<$formData["form_type_coord"][$x];$z++){$lat[]="latitude_value_".$x."_".$y."_".$z;$lon[]="longitude_value_".$x."_".$y."_".$z;}$polygonTemp["latitude"]=$lat;$polygonTemp["longitude"]=$lon;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$polygonTemp["strikes"]=$strike;$polygon[]=$polygonTemp;}$structuresTemp["polygons"]=$polygon;}$structures[]=$structuresTemp;}$outStruct["structures"]=$structures;return $this->json($outStruct);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage/cat/getmultipremium', name: 'CatMultiPremium', methods: ['POST'])]public function getCatMultiPremium(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/cat/getmultipremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;if(!isset($formData["dointerpol"])){$formData["dointerpol"] = "YES";}foreach ($formData["structures"] as $key=>$value){$totalIndex = array();$filteredZone = array();$strucCount=$strucCount+1;$product = $entityManager->getRepository(Product::class)->findOneById($value["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){if(!isset($formData["geteventnames"])){$value["geteventnames"] = "PAYOUT";$formData["structures"][$key]["geteventnames"] = "PAYOUT";}else{$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}}if(!isset($value["replica_period"])){$value["replica_period"] = 30;$formData["structures"][$key]["replica_period"] = 30;}if(!isset($value["history_length"])){if(is_null($product->getHistoryLength())){$formData["structures"][$key]["history_length"] = 50;}else{$formData["structures"][$key]["history_length"] = $product->getHistoryLength();}}if(!isset($value["period"])){$value["period"]=$formData["period"];$formData["structures"][$key]["period"]=$formData["period"];}$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<6){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)==0){$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}else{foreach ($indexTemp as $indexValues){if(str_contains($indexValues["historic_payout_org"],':')){$filteredZone[] = $indexValues;}else{$totalIndex[] = $indexValues;}}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}if(!isset($value["limit"])){$limit = $formData["general_limit"];}else{$limit = $value["limit"];}$counterLoop=0;foreach ($totalIndex as $indexkey=>$indexvalue){foreach ($indexvalue as $indexkey2=>$indexvalue2){if($indexkey2!="date_year"){if($indexvalue2 < $formData["general_deductible"]){$indexvalue2 = 0;}else{$indexvalue2 = $indexvalue2 - $formData["general_deductible"];}if($indexvalue2>$limit) $indexvalue2 = $limit;$totalIndex[$indexkey][$indexkey2]=$indexvalue2;$payoutMean[$counterLoop]["historic_payout"]=$payoutMean[$counterLoop]["historic_payout"]+$indexvalue2;}else{$payoutMean[$counterLoop]=array("date_year"=>$totalIndex[$indexkey]["date_year"],"historic_payout"=>0);}}$payoutMean[$counterLoop]["historic_payout"]=$payoutMean[$counterLoop]["historic_payout"]/(count($indexvalue)-1);$counterLoop=$counterLoop+1;}if(!isset($formData["load_tail"])){$formData["load_tail"]=0.01;}if(!isset($formData["load_fronting"])){$formData["load_fronting"]=0;}if(!isset($formData["load_brokerage"])){$formData["load_brokerage"]=0.325;}if(!isset($formData["load_el"])){$formData["load_el"]=1;}if(!isset($formData["load_std"])){$formData["load_std"]=0.2;}if(!isset($formData["load_min"])){$formData["load_min"]=0.02538462;}if(!isset($formData["load_deduction_cg"])){$formData["load_deduction_cg"]=0.125;}if(!isset($formData["load_factor_uw"])){$formData["load_factor_uw"]=0.15;}if(isset($ExpectedLoss)){unset($ExpectedLoss);unset($Premiums);unset($Iteration);}$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_org'))/count(array_column($totalIndex,'historic_payout_org'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "STRICT";$jsonPremium=array("payout"=>array("date_year"=>array_column($payoutMean,'date_year'),"historic_payout"=>array_column($payoutMean,'historic_payout')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($payoutMean,'historic_payout'))/count(array_column($payoutMean,'historic_payout'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "AVERAGE";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varcat_minus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varcat_minus'))/count(array_column($totalIndex,'historic_payout_varcat_minus'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_MINUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varcat_plus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varcat_plus'))/count(array_column($totalIndex,'historic_payout_varcat_plus'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_PLUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint1')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint1'))/count(array_column($totalIndex,'historic_payout_varpoint1'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint2')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint2'))/count(array_column($totalIndex,'historic_payout_varpoint2'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint3')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint3'))/count(array_column($totalIndex,'historic_payout_varpoint3'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_EAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint4')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint4'))/count(array_column($totalIndex,'historic_payout_varpoint4'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_WEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint5')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint5'))/count(array_column($totalIndex,'historic_payout_varpoint5'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint6')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint6'))/count(array_column($totalIndex,'historic_payout_varpoint6'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHEAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint7')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint7'))/count(array_column($totalIndex,'historic_payout_varpoint7'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_varpoint8')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = array_sum(array_column($totalIndex,'historic_payout_varpoint8'))/count(array_column($totalIndex,'historic_payout_varpoint8'));$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHEAST";foreach ($Premiums as $key2 => $value2){$primes[$value["reference"]]["Analysis"][] = array("Iteration" => $Iteration[$key2],"ExpectedLoss"=> $ExpectedLoss[$key2],"Premiums" => $Premiums[$key2]);}foreach ($totalIndex as $key2 => $value2){$primes[$value["reference"]]["Payouts"][] = array("Year" => $value2["date_year"],"Payout" => $value2["historic_payout_org"]);}if (isset($filteredZone)) {foreach ($filteredZone as $key3=>$value3){if($value["geteventnames"]=="ALL"){$primes[$value["reference"]]["Events"][]=array("ID"=>$value3["date_year"],"Name"=>$value3["historic_payout_varpoint1"],"TIME"=>$value3["historic_payout_org"],"LAT"=>floatval($value3["historic_payout_varcat_minus"]),"LON"=>floatval($value3["historic_payout_varcat_plus"]),"Mg"=>floatval($value3["historic_payout_varpoint2"]),"MgSec"=>floatval($value3["historic_payout_varpoint3"]));}else{$primes[$value["reference"]]["Events"][]=array("ID"=>$value3["date_year"],"Name"=>$value3["historic_payout_varpoint1"],"TIME"=>$value3["historic_payout_org"],"LAT"=>floatval($value3["historic_payout_varcat_minus"]),"LON"=>floatval($value3["historic_payout_varcat_plus"]),"Mg"=>floatval($value3["historic_payout_varpoint2"]),"MgSec"=>floatval($value3["historic_payout_varpoint3"]),"Circle"=>floatval($value2["historic_payout_varpoint7"]),"PayOut"=>floatval($value2["historic_payout_varpoint8"]));}}}}}$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage/cat/getmultipremiumstruc', name: 'CaMultitPremiumStruc', methods: ['POST'])]public function getCatMultiPremiumStruc(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/getcatpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$outStruct["general_limit"]= "general_limit_value";for($x=0;$x<$formData["structures"];$x++){$structuresTemp = array();$structuresTemp["reference"]="reference_value_".$x;$structuresTemp["limit"]="limit_value_".$x;$structuresTemp["product_id"]="product_id_value_".$x;if($formData["form_type"][$x]=="rings"){$structuresTemp["latitude"]="latitude_value_".$x;$structuresTemp["longitude"]="longitude_value_".$x;$rings=array();unset($ringsTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$ringsTemp["radius"]="radius_value_".$x."_".$y;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$ringsTemp["strikes"]=$strike;$rings[]=$ringsTemp;}$structuresTemp["rings"]=$rings;}else{$polygon=array();unset($polygonTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$lat=array();$lon=array();for($z=0;$z<$formData["form_type_coord"][$x];$z++){$lat[]="latitude_value_".$x."_".$y."_".$z;$lon[]="longitude_value_".$x."_".$y."_".$z;}$polygonTemp["latitude"]=$lat;$polygonTemp["longitude"]=$lon;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$polygonTemp["strikes"]=$strike;$polygon[]=$polygonTemp;}$structuresTemp["polygons"]=$polygon;}$structuresTemp["period"]=array("start_date"=>"start_date_value_".$x,"end_date"=>"end_date_value_".$x);$structures[]=$structuresTemp;}$outStruct["structures"]=$structures;return $this->json($outStruct);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage/cat/getaggregatedpremium', name: 'CatAggregatedPremium', methods: ['POST'])]public function getCatAggregatedPremium(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/cat/getpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$totalIndex = array();$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;if(!isset($formData["geteventnames"])){$formData["geteventnames"] = "PAYOUT";}if(!isset($formData["dointerpol"])){$formData["dointerpol"] = "YES";}foreach ($formData["structures"] as $key=>$value){$product = $entityManager->getRepository(Product::class)->findOneById($value["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());$strucCount = $strucCount +1;$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}if(!isset($value["units"])){$value["units"] = "CAT";}if(!isset($value["replica_period"])){$value["replica_period"] = 30;}if(!isset($value["history_length"])){if(is_null($product->getHistoryLength())){$formData["structures"][$key]["history_length"] = 50;}else{$formData["structures"][$key]["history_length"] = $product->getHistoryLength();}}$value["period"]=$formData["period"];$formData["structures"][$key]["period"]=$formData["period"];$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<3){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)!=0){foreach ($indexTemp as $indexValues){if(str_contains($indexValues["historic_payout_org"],':')){$filteredZone[$value["reference"]][] = $indexValues;}else{$totalIndex[] = $indexValues;}}}else{$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}}$originalPayout=array();foreach ($totalIndex as $value){$originalPayout[] = array("date_year" => $value["date_year"],"historic_payout_org" => $value["historic_payout_org"]);}$Years = array_column($totalIndex,'date_year');$totalPayout = array();for($i=min($Years);$i<=max($Years);$i++){$yearIndex = array_keys($Years,$i);$total = array_fill(0, 11, 0);foreach ($yearIndex as $value2){$total[0] = $total[0] + $totalIndex[$value2]["historic_payout_org"];$total[1] = $total[1] + $totalIndex[$value2]["historic_payout_varcat_minus"];$total[2] = $total[2] + $totalIndex[$value2]["historic_payout_varcat_plus"];$total[3] = $total[3] + $totalIndex[$value2]["historic_payout_varpoint1"];$total[4] = $total[4] + $totalIndex[$value2]["historic_payout_varpoint2"];$total[5] = $total[5] + $totalIndex[$value2]["historic_payout_varpoint3"];$total[6] = $total[6] + $totalIndex[$value2]["historic_payout_varpoint4"];$total[7] = $total[7] + $totalIndex[$value2]["historic_payout_varpoint5"];$total[8] = $total[8] + $totalIndex[$value2]["historic_payout_varpoint6"];$total[9] = $total[9] + $totalIndex[$value2]["historic_payout_varpoint7"];$total[10] = $total[10] + $totalIndex[$value2]["historic_payout_varpoint8"];}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}for($j=0;$j<11;$j++){if($total[$j] < $formData["general_deductible"]){$total[$j] = 0;}else{$total[$j] = $total[$j] - $formData["general_deductible"];}if($total[$j]>$formData["general_limit"]) $total[$j] = $formData["general_limit"];}$total_mean = array_sum($total)/count($total);if($total_mean>$formData["general_limit"]){$total_mean = $formData["general_limit"];}$totalPayout[]=array("date_year" => $i,"total_mean" => $total_mean,"historic_payout_org" => $total[0],"historic_payout_varcat_minus" => $total[1],"historic_payout_varcat_plus" => $total[2],"historic_payout_varpoint1" => $total[3],"historic_payout_varpoint2" => $total[4],"historic_payout_varpoint3" => $total[5],"historic_payout_varpoint4" => $total[6],"historic_payout_varpoint5" => $total[7],"historic_payout_varpoint6" => $total[8],"historic_payout_varpoint7" => $total[9],"historic_payout_varpoint8" => $total[10]);}$payoutMean = array_fill(0, 12, 0);$payoutMean[0] = array_sum(array_column($totalPayout,'total_mean'))/(count(array_column($totalPayout,'total_mean')));$payoutMean[1] = array_sum(array_column($totalPayout,'historic_payout_org'))/(count(array_column($totalPayout,'historic_payout_org')));$payoutMean[2] = array_sum(array_column($totalPayout,'historic_payout_varcat_minus'))/(count(array_column($totalPayout,'historic_payout_varcat_minus')));$payoutMean[3] = array_sum(array_column($totalPayout,'historic_payout_varcat_plus'))/(count(array_column($totalPayout,'historic_payout_varcat_plus')));for($j=4;$j<12;$j++){$payoutMean[$j] = array_sum(array_column($totalPayout,'historic_payout_varpoint'.($j-3)))/(count(array_column($totalPayout,'historic_payout_varpoint'.($j-3))));}if(!isset($formData["load_tail"])){$formData["load_tail"]=0.01;}if(!isset($formData["load_fronting"])){$formData["load_fronting"]=0;}if(!isset($formData["load_brokerage"])){$formData["load_brokerage"]=0.325;}if(!isset($formData["load_el"])){$formData["load_el"]=1;}if(!isset($formData["load_std"])){$formData["load_std"]=0.2;}if(!isset($formData["load_min"])){$formData["load_min"]=0.02538462;}if(!isset($formData["load_deduction_cg"])){$formData["load_deduction_cg"]=0.125;}if(!isset($formData["load_factor_uw"])){$formData["load_factor_uw"]=0.15;}$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[1];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "STRICT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'total_mean')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[0];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "AVERAGE";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varcat_minus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[2];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_MINUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varcat_plus')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[3];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "SPEED_PLUS10PCT";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint1')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[4];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint2')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[5];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTH";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint3')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[6];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_EAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint4')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[7];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_WEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint5')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[8];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint6')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[9];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_NORTHEAST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint7')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[10];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHWEST";$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_varpoint8')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$ExpectedLoss[] = $payoutMean[11];$Premiums[] = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$Iteration[] = "VAR_SOUTHEAST";$primes=array();foreach ($Premiums as $key => $value2){$primes["Analysis"][] = array("Iteration" => $Iteration[$key],"ExpectedLoss"=> $ExpectedLoss[$key],"Premiums" => $Premiums[$key]);}$totalyears=max($Years)-min($Years)+1;for($i=min($Years);$i<=max($Years);$i++){$yearIndex = array_keys($Years,$i);$strucCount = 0;foreach ($yearIndex as $key=>$value2){$primes["Payouts"][$formData["structures"][$strucCount]["reference"]][] = array(//$primes["Payouts"][$formData["structures"][intval($value2/$totalyears)]["reference"]][] = array("Year" => $totalIndex[$value2]["date_year"],"Payout" => $totalIndex[$value2]["historic_payout_org"]);$strucCount = $strucCount + 1;}}if (isset($filteredZone)) {foreach ($filteredZone as $key=>$value){foreach ($value as $key2=>$value2){if($formData["geteventnames"]=="ALL"){$primes["Events"][$key][]=array("ID"=>$value2["date_year"],"Name"=>$value2["historic_payout_varpoint1"],"TIME"=>$value2["historic_payout_org"],"LAT"=>floatval($value2["historic_payout_varcat_minus"]),"LON"=>floatval($value2["historic_payout_varcat_plus"]),"Mg"=>floatval($value2["historic_payout_varpoint2"]),"MgSec"=>floatval($value2["historic_payout_varpoint3"]));}else{$primes["Events"][$key][]=array("ID"=>$value2["date_year"],"Name"=>$value2["historic_payout_varpoint1"],"TIME"=>$value2["historic_payout_org"],"LAT"=>floatval($value2["historic_payout_varcat_minus"]),"LON"=>floatval($value2["historic_payout_varcat_plus"]),"Mg"=>floatval($value2["historic_payout_varpoint2"]),"MgSec"=>floatval($value2["historic_payout_varpoint3"]),"Circle"=>floatval($value2["historic_payout_varpoint7"]),"PayOut"=>floatval($value2["historic_payout_varpoint8"]));}}}}$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage/cat/getaggregatedpremiumstruc', name: 'CatAggregatedPremiumStruc', methods: ['POST'])]public function getCatAggregatedPremiumStruc(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/getcatpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$outStruct["general_limit"]= "general_limit_value";$outStruct["period"]=array("start_date"=>"start_date_value","end_date"=>"end_date_value");for($x=0;$x<$formData["structures"];$x++){$structuresTemp = array();$structuresTemp["reference"]="reference_value_".$x;$structuresTemp["limit"]="limit_value_".$x;$structuresTemp["product_id"]="product_id_value_".$x;if($formData["form_type"][$x]=="rings"){$structuresTemp["latitude"]="latitude_value_".$x;$structuresTemp["longitude"]="longitude_value_".$x;$rings=array();unset($ringsTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$ringsTemp["radius"]="radius_value_".$x."_".$y;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$ringsTemp["strikes"]=$strike;$rings[]=$ringsTemp;}$structuresTemp["rings"]=$rings;}else{$polygon=array();unset($polygonTemp);for($y=0;$y<$formData["form_type_number"][$x];$y++){$lat=array();$lon=array();for($z=0;$z<$formData["form_type_coord"][$x];$z++){$lat[]="latitude_value_".$x."_".$y."_".$z;$lon[]="longitude_value_".$x."_".$y."_".$z;}$polygonTemp["latitude"]=$lat;$polygonTemp["longitude"]=$lon;$strike=array();unset($strikeTemp);for($z=0;$z<$formData["strikes_number"][$x];$z++){$strikeTemp["strike"]="strike_value_".$x."_".$y."_".$z;$strikeTemp["payout"]="payout_value_".$x."_".$y."_".$z;$strike[]=$strikeTemp;}$polygonTemp["strikes"]=$strike;$polygon[]=$polygonTemp;}$structuresTemp["polygons"]=$polygon;}$structures[]=$structuresTemp;}$outStruct["structures"]=$structures;return $this->json($outStruct);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/external/cat/getpremium', name: 'ExtCatPremium', methods: ['POST'])]public function getExtCatPremium(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/cat/getpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$totalIndex = array();$product = $entityManager->getRepository(Product::class)->findOneById($formData["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;if(!isset($formData["geteventnames"])){$formData["geteventnames"] = "PAYOUT";}if(!isset($formData["dointerpol"])){$formData["dointerpol"] = "YES";}$formData["structures"][1]=$formData["structures"][0];$formData["structures"][0]["period"]["start_date"]="1945-01-01";$formData["structures"][0]["period"]["end_date"]=(date("Y")-1)."-12-31";$formData["structures"][1]["period"]["start_date"]="1970-01-01";$formData["structures"][1]["period"]["end_date"]=(date("Y")-1)."-12-31";$key=0;$value=$formData["structures"][$key];$strucCount = $strucCount +1;$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}if(!isset($value["units"])){$value["units"] = "CAT";}if(!isset($value["replica_period"])){$value["replica_period"] = 30;}$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<3){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)!=0){foreach ($indexTemp as $indexValues){if(!str_contains($indexValues["historic_payout_org"],':')){$totalIndex[$key][] = $indexValues;}}}else{$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}$key=$key+1;$value=$formData["structures"][$key];$strucCount = $strucCount +1;$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}if(!isset($value["units"])){$value["units"] = "CAT";}if(!isset($value["replica_period"])){$value["replica_period"] = 30;}$value["dointerpol"]=$formData["dointerpol"];if(count($indexTemp)!=0){foreach ($indexTemp as $indexValues){if(!str_contains($indexValues["historic_payout_org"],':')){if(intval($indexValues["date_year"])>=1970){$totalIndex[$key][] = $indexValues;}}}}else{$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}for ($i = 0; $i <= 1; $i++) {foreach ($totalIndex[$i] as $key=>$value){if($totalIndex[$i][$key]["historic_payout_org"] < $formData["general_deductible"]){$totalIndex[$i][$key]["historic_payout_org"] = 0;}else{$totalIndex[$i][$key]["historic_payout_org"] = $totalIndex[$i][$key]["historic_payout_org"] - $formData["general_deductible"];}if($totalIndex[$i][$key]["historic_payout_org"]>$formData["general_limit"]) $totalIndex[$i][$key]["historic_payout_org"] = $formData["general_limit"];}}if(!isset($formData["load_tail"])){$formData["load_tail"]=0.01;}if(!isset($formData["load_fronting"])){$formData["load_fronting"]=0;}if(!isset($formData["load_brokerage"])){$formData["load_brokerage"]=0.325;}if(!isset($formData["load_el"])){$formData["load_el"]=1;}if(!isset($formData["load_std"])){$formData["load_std"]=0.2;}if(!isset($formData["load_min"])){$formData["load_min"]=0.02538462;}if(!isset($formData["load_deduction_cg"])){$formData["load_deduction_cg"]=0.125;}if(!isset($formData["load_factor_uw"])){$formData["load_factor_uw"]=0.15;}$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex[0],'date_year'),"historic_payout"=>array_column($totalIndex[0],'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$Premium = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex[1],'date_year'),"historic_payout"=>array_column($totalIndex[1],'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$Premium = ($Premium + $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium)))/2;$primes["Analysis"][] = array("Premiums" => $Premium);foreach ($totalIndex[1] as $value){$primes["Payouts"][] = array("Year" => $value["date_year"],"Payout" => $value["historic_payout_org"]);}$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/partners/getmultipremium', name: 'PartnerMultiPremium', methods: ['POST'])]public function getPartnerMultiPremium(Request $request,EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('partners/getmultipremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;$formData["dointerpol"] = "YES";foreach ($formData["structures"] as $key=>$value){$totalIndex = array();$filteredZone = array();$strucCount=$strucCount+1;$product = $entityManager->getRepository(Product::class)->findOneById($value["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}if(!isset($value["geteventnames"])){if(!isset($formData["geteventnames"])){$value["geteventnames"] = "PAYOUT";$formData["structures"][$key]["geteventnames"] = "PAYOUT";}else{$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];}}$value["replica_period"] = 30;$formData["structures"][$key]["replica_period"] = 30;if(is_null($product->getHistoryLength())){$formData["structures"][$key]["history_length"] = 50;}else{$formData["structures"][$key]["history_length"] = $product->getHistoryLength();}if($value["product_id"]==2 || $value["product_id"]==3){$value["period"]=array("start_date" => "1970-01-01","end_date" => (intval(date("Y"))-1)."-12-31");$formData["structures"][$key]["period"]=$value["period"];}elseif ($value["product_id"]==8){$value["period"]=array("start_date" => "1925-01-01","end_date" => (intval(date("Y"))-1)."-12-31");$formData["structures"][$key]["period"]=$value["period"];}else{$response = new JsonResponse("Missing Product", 400);$response->headers->set('Content-Type', 'application/json');return $response;}$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<6){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)==0){$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}else{foreach ($indexTemp as $indexValues){if(str_contains($indexValues["historic_payout_org"],':')){$filteredZone[] = $indexValues;}else{$totalIndex[] = $indexValues;}}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}if(!isset($value["limit"])){$limit = $formData["general_limit"];}else{$limit = $value["limit"];}$counterLoop=0;foreach ($totalIndex as $indexkey=>$indexvalue){foreach ($indexvalue as $indexkey2=>$indexvalue2){if($indexkey2!="date_year"){if($indexvalue2 < $formData["general_deductible"]){$indexvalue2 = 0;}else{$indexvalue2 = $indexvalue2 - $formData["general_deductible"];}if($indexvalue2>$limit) $indexvalue2 = $limit;$totalIndex[$indexkey][$indexkey2]=$indexvalue2;$payoutMean[$counterLoop]["historic_payout"]=$payoutMean[$counterLoop]["historic_payout"]+$indexvalue2;}else{$payoutMean[$counterLoop]=array("date_year"=>$totalIndex[$indexkey]["date_year"],"historic_payout"=>0);}}$payoutMean[$counterLoop]["historic_payout"]=$payoutMean[$counterLoop]["historic_payout"]/(count($indexvalue)-1);$counterLoop=$counterLoop+1;}$formData["load_tail"]=(1 + (sqrt(intval(date("j")))/20))/100;$formData["load_fronting"]=0;$formData["load_brokerage"]=0.325;$formData["load_el"]=1;$formData["load_std"]=0.2;$formData["load_min"]=0.02538462;$formData["load_deduction_cg"]=0.125;$formData["load_factor_uw"]=0.15;$jsonPremium=array("payout"=>array("date_year"=>array_column($totalIndex,'date_year'),"historic_payout"=>array_column($totalIndex,'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$PremiumsStrict = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$jsonPremium=array("payout"=>array("date_year"=>array_column($payoutMean,'date_year'),"historic_payout"=>array_column($payoutMean,'historic_payout')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$PremiumAVG = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$primes[$value["reference"]]["Analysis"][] = array("Premium" => max($PremiumAVG,$PremiumsStrict));}}$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/partners/getaggregatedpremium', name: 'PartnerAggregatedPremium', methods: ['POST'])]public function getPartnerAggregatedPremium(Request $request, EntityManagerInterface $entityManager, LoggerInterface $logger): JsonResponse{$user = $this->getUSer();if ($user){$EventCoumter = $entityManager->getRepository(Event::class)->counterTodayByUsers($user);$Menulist = $entityManager->getRepository(ProfileMenu::class)->findByProfile($user->getProfile()->getId());$control = FALSE;foreach ($Menulist as $value){if(strpos($value->getMenu()->getMenuLink(), $request->getPathInfo()) !== false){$control = TRUE;}}if($control && $EventCoumter<$user->getMaxRequest()){$logger->alert('coverage/cat/getpremium as '.$user->getUsername().' alowed');$formData=json_decode($request->getContent(),true);$totalIndex = array();$min_start_date = 10000;$max_end_date = 0;$strucCount = 0;$formData["geteventnames"] = "PAYOUT";$formData["dointerpol"] = "YES";foreach ($formData["structures"] as $key=>$value){$product = $entityManager->getRepository(Product::class)->findOneById($value["product_id"]);$portfolio = $entityManager->getRepository(Portfolio::class)->findOneById($product->getPortfolio());if($value["product_id"]==2 || $value["product_id"]==3){$value["period"]=array("start_date" => "1970-01-01","end_date" => (intval(date("Y"))-1)."-12-31");$formData["structures"][$key]["period"]=$value["period"];}elseif ($value["product_id"]==8){$value["period"]=array("start_date" => "1925-01-01","end_date" => (intval(date("Y"))-1)."-12-31");$formData["structures"][$key]["period"]=$value["period"];}else{$response = new JsonResponse("Missing Product", 400);$response->headers->set('Content-Type', 'application/json');return $response;}$strucCount = $strucCount +1;$databaseConf = $entityManager->getRepository(ProviderDatabaseConfiguration::class)->createQueryBuilder('o')->where('o.providerDatabase = :databaseId')->andWhere('o.configuration = :config')->setParameter('databaseId', $product->getProductDatabase()->getId())->setParameter('config', 'GetCatIndex')->getQuery()->getResult();if(!isset($value["reference"])){$value["reference"] = "Struc".$strucCount;$formData["structures"][$key]["reference"] = "Struc".$strucCount;}$value["geteventnames"] = $formData["geteventnames"];$formData["structures"][$key]["geteventnames"] = $formData["geteventnames"];if(!isset($value["units"])){$value["units"] = "CAT";}$value["replica_period"] = 30;$formData["structures"][$key]["replica_period"] = 30;if(is_null($product->getHistoryLength())){$formData["structures"][$key]["history_length"] = 50;$value["history_length"] = 50;}else{$formData["structures"][$key]["history_length"] = $product->getHistoryLength();$value["history_length"] = $product->getHistoryLength();}$value["dointerpol"]=$formData["dointerpol"];$indexTemp = array();$counterLoop=0;while(count($indexTemp)==0 && $counterLoop<3){$counterLoop=$counterLoop+1;$indexTemp = $entityManager->getRepository(Observation::class)->getDataLakeCatPayOut($product,$databaseConf[0]->getConfigurationValue(),json_encode($value));}if(count($indexTemp)!=0){foreach ($indexTemp as $indexValues){if(str_contains($indexValues["historic_payout_org"],':')){$filteredZone[$value["reference"]][] = $indexValues;}else{$totalIndex[] = $indexValues;}}}else{$response = new JsonResponse($value["reference"]." Pricing error", 422);$response->headers->set('Content-Type', 'application/json');return $response;}}$originalPayout=array();foreach ($totalIndex as $value){$originalPayout[] = array("date_year" => $value["date_year"],"historic_payout_org" => $value["historic_payout_org"]);}$Years = array_column($totalIndex,'date_year');$totalPayout = array();for($i=min($Years);$i<=max($Years);$i++){$yearIndex = array_keys($Years,$i);$total = array_fill(0, 11, 0);foreach ($yearIndex as $value2){$total[0] = $total[0] + $totalIndex[$value2]["historic_payout_org"];$total[1] = $total[1] + $totalIndex[$value2]["historic_payout_varcat_minus"];$total[2] = $total[2] + $totalIndex[$value2]["historic_payout_varcat_plus"];$total[3] = $total[3] + $totalIndex[$value2]["historic_payout_varpoint1"];$total[4] = $total[4] + $totalIndex[$value2]["historic_payout_varpoint2"];$total[5] = $total[5] + $totalIndex[$value2]["historic_payout_varpoint3"];$total[6] = $total[6] + $totalIndex[$value2]["historic_payout_varpoint4"];$total[7] = $total[7] + $totalIndex[$value2]["historic_payout_varpoint5"];$total[8] = $total[8] + $totalIndex[$value2]["historic_payout_varpoint6"];$total[9] = $total[9] + $totalIndex[$value2]["historic_payout_varpoint7"];$total[10] = $total[10] + $totalIndex[$value2]["historic_payout_varpoint8"];}if(!isset($formData["general_deductible"])){$formData["general_deductible"]=0;}for($j=0;$j<11;$j++){if($total[$j] < $formData["general_deductible"]){$total[$j] = 0;}else{$total[$j] = $total[$j] - $formData["general_deductible"];}if($total[$j]>$formData["general_limit"]) $total[$j] = $formData["general_limit"];}$total_mean = array_sum($total)/count($total);if($total_mean>$formData["general_limit"]){$total_mean = $formData["general_limit"];}$totalPayout[]=array("date_year" => $i,"total_mean" => $total_mean,"historic_payout_org" => $total[0],"historic_payout_varcat_minus" => $total[1],"historic_payout_varcat_plus" => $total[2],"historic_payout_varpoint1" => $total[3],"historic_payout_varpoint2" => $total[4],"historic_payout_varpoint3" => $total[5],"historic_payout_varpoint4" => $total[6],"historic_payout_varpoint5" => $total[7],"historic_payout_varpoint6" => $total[8],"historic_payout_varpoint7" => $total[9],"historic_payout_varpoint8" => $total[10]);}$payoutMean = array_fill(0, 12, 0);$payoutMean[0] = array_sum(array_column($totalPayout,'total_mean'))/(count(array_column($totalPayout,'total_mean')));$payoutMean[1] = array_sum(array_column($totalPayout,'historic_payout_org'))/(count(array_column($totalPayout,'historic_payout_org')));$payoutMean[2] = array_sum(array_column($totalPayout,'historic_payout_varcat_minus'))/(count(array_column($totalPayout,'historic_payout_varcat_minus')));$payoutMean[3] = array_sum(array_column($totalPayout,'historic_payout_varcat_plus'))/(count(array_column($totalPayout,'historic_payout_varcat_plus')));for($j=4;$j<12;$j++){$payoutMean[$j] = array_sum(array_column($totalPayout,'historic_payout_varpoint'.($j-3)))/(count(array_column($totalPayout,'historic_payout_varpoint'.($j-3))));}$formData["load_tail"]=(1 + (sqrt(intval(date("j")))/20))/100;$formData["load_fronting"]=0;$formData["load_brokerage"]=0.325;$formData["load_el"]=1;$formData["load_std"]=0.2;$formData["load_min"]=0.02538462;$formData["load_deduction_cg"]=0.125;$formData["load_factor_uw"]=0.15;$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'historic_payout_org')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$PremiumStrict = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$jsonPremium=array("payout"=>array("date_year"=>array_column($totalPayout,'date_year'),"historic_payout"=>array_column($totalPayout,'total_mean')),"risk_taker"=>$portfolio->getThirdParty()->getAlgorithm(),"inputjson"=>$formData);$PremiumAVG = $entityManager->getRepository(Coverage::class)->getPremium(json_encode($jsonPremium));$primes=array();$primes["Analysis"][] = array("Premium" => max($PremiumAVG,$PremiumStrict));$EventDomain = $entityManager->getRepository(EventDomain::class)->findOneById(1);$EventLevel = $entityManager->getRepository(EventLevel::class)->findOneById(1);$EventType = $entityManager->getRepository(EventType::class)->findOneById(1);$Event = new Event();$Event->setDateEvent(new \DateTime('now'));$Event->setDescription('{"entry_point":"'.$request->getPathInfo().'","vivaldi_version":"'.$_ENV["VIVALDI_VERSION"].'","input_json":'.json_encode($formData).',"output_json":'.json_encode($primes).'}');$Event->setUsers($user);$Event->setEventType($EventType);$Event->setEventDomain($EventDomain);$Event->setEventLevel($EventLevel);$entityManager->persist($Event);$entityManager->flush();$primes["Reference"] = $Event->getId();$primes["VivaldiVersion"] = $_ENV["VIVALDI_VERSION"];$primes["Time"] = $Event->getDateEvent();return $this->json($primes);}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}else{$response = new JsonResponse(null, 401);$response->headers->set('Content-Type', 'application/json');return $response;}}#[Route('/api/coverage', name: 'app_coverage')]public function index(): JsonResponse{return $this->json(['message' => 'Welcome to your new controller!','path' => 'src/Controller/CoverageController.php',]);}}