<?php
namespace App\InsuranceCompany\OZK\SOAP\Subscriber;
use App\InsuranceCompany\OZK\Exception\Exception;
use App\InsuranceCompany\OZK\SOAP\Interfaces\ResponseInterface;
use Phpro\SoapClient\Event\ResponseEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use UnexpectedValueException;
/**
* Class ErrorHandlingSubscriber
*/
class ErrorHandlingSubscriber implements EventSubscriberInterface
{
const ERROR_CODES = [
'O001-001' => 'Грешка от DB',
'U001-001' => 'Грешен потребител/парола/сертификат',
'U001-002' => 'Неконфигуриран потребител',
'S001-001' => 'Няма номенклатура {0}',
'S001-002' => 'Няма заявка с ID={0} или е грешен вид или е от друг потребител',
'S001-003' => 'Оригиналната заявка е завършила с грешка',
'S001-004' => 'Невалидна стойност {0} в {1}',
'S001-005' => '{0}: Полето е задължително.',
'S001-006' => '{2}: Невалидна стойност - трябва да е между {0} и {1}.',
'S001-007' => 'WWWIns е в административен режим',
'S001-008' => 'Невалидна заявка: очаква се "{0}", получена "{1}" / "{2}" / "{3}"',
'S001-009' => '{0} или {1} - едно от полетата е задължително.',
'S001-010' => '{0}: Полето е забранено.',
'W001-001' => 'Непозволена операция',
'W001-002' => 'Невалиден xml: {0}',
'W001-003' => 'xml warnings: {0}',
'W001-004' => 'Предупреждение от DB',
'P001-001' => 'Грешка при запис на полица: {0}',
'P001-002' => 'Няма отговор от ЕИСОУКР',
'P001-003' => 'Грешка при печат на {0}: {1}',
'P001-004' => 'Датата на сключване на полицата не може да е по-голяма от Oracle_CurrDate',
'P001-005' => 'Датата Начало не трябва да е след датата на сключване + 6 месеца',
'P001-006' => 'Датата Начало не трябва да е преди датата сключване',
'P001-007' => 'Датата Край не трябва да е преди Начало',
'P001-008' => 'Невалиден час {0}',
'P001-009' => 'Часът за Край не трябва да е преди часът за Начало',
'P001-010' => 'Агенция издател/Агент не съвпадат с избраните в профила',
'P001-011' => 'Агент {0} не е намерен',
'P001-012' => 'Агент {0}({1}) е неактивен',
'P001-013' => 'Дата край - Дата начало не може да е по голямо от 366 дни',
'P001-014' => 'Не е намерена групова полица номер: {0}!',
'P001-015' => 'Клиента в груповата полица не съвпада!',
'P001-016' => 'Невалидно ЕНЧ!',
'P001-017' => 'Невалидно ЕГН!',
'P001-018' => 'Невалиден Булстат!',
'P001-019' => 'Невалиден E-mail!',
'P001-020' => 'Непозволени символи в поле {0}',
'P001-021' => 'Обичаен водач не може да е юридическо лице',
'P001-022' => 'Брой вноски не може да е по голямо от 1.',
'P001-023' => 'Дата Валиден до не може да бъде по-малка от дата Даден на',
'P001-024' => '{0}: {1} не може да е извън периода на валидност на полицата',
'P001-025' => '{0}: Валиден до не може да е извън периода на валидност на полицата',
'P001-026' => 'Не може да се регистрира стикер с номер = на номер на друг активен стикер по полицата',
'P001-027' => 'Общо цялата премия по падежи от тип Стикери не може да бъде по голяма от 20.00',
'P001-028' => 'Не е попълнен поне един активен стикер',
'P001-029' => 'Сертификат ЗК може да се въведе на застрахованите МПС-та, само ако \'Район на движение\' = ЕС',
'P001-030' => 'Не може да се регистрира сертификат с номер = на номер на друг активен сертификат по полицата',
'P001-031' => 'Не може да има падеж с по-ранна дата от датата на сключване на полицата',
'P001-032' => 'Не може да има падеж с дата по-късна от дата край на полицата',
'P001-033' => 'Премията не може да бъде по-малка от платената премия',
'P001-034' => 'Има неравнение по плана на дължимите премии: {0}',
'P001-035' => 'Не може да се запише план с разлика по ГФ',
'P001-036' => 'Не се позволява разминаване във валутите на плана',
'P001-037' => 'Има неравнение по плана на дължим данък: {0}',
'P001-038' => 'Година на производство трябва да е периода 1900г. до текуща година',
'P001-039' => '{0} - непозволени символи',
'P001-040' => 'Места от досие на МПС трябва да бъде различно от 0 или поле По застраховани места трябва да бъде различно от 0',
'P001-041' => 'Застр.места не може да е повече от брой места записани в застрахованото МПС',
'P001-042' => 'Премия трябва да е по-голяма от 1 и по-малка от 9999999',
'P001-043' => 'Не може да се запише план с разлика по {0}',
'P001-044' => 'Дата начало е по-голяма от {0} дни след текуща дата',
'P001-045' => 'Час Начало не може да е по-малко от час на сървър +1{0}',
'P001-046' => 'МПС с буквен код на регистрационния номер "С" и "СА"”, не може да се запише в друга зона освен Зона 1',
'P001-047' => 'МПС с буквен код на регистрационния номер "А","B","РВ", не може да се запише в друга зона освен Зона 2',
'P001-048' => 'МПС с този регистрационния номер не може да се запише в друга зона освен Зона 3',
'P001-049' => '{0} не може да надвишава {1}%',
'P001-050' => 'Брой вноски не може да бъде по голямо от 4',
'P001-051' => 'Невалиден номер на анекс',
'P001-052' => 'От дата на анекс не може да е след До дата',
'P001-053' => 'От дата на анекс не може да е извън периода на валидност на полицата',
'P001-054' => 'Дата сключване на анекса не може да е преди дата сключване на полицата',
'P001-055' => 'Датата на анулиране на полицата не може да е извън периода на валидност на полицата.',
'P001-056' => 'Консумирана премия % не може да надвишава 100%',
'P001-057' => 'Други удръжки % не може да надвишава 100%',
'P001-058' => 'Консумираната премия не може да е по-голяма от сумата по план',
'P001-059' => 'Други удръжки не може да е по голяма от сумата по план',
'P001-060' => 'Консумираната премия не може да е по-голяма от платената премия',
'P001-061' => 'За възстановяване не може да е по-голяма от платената премия',
'P001-062' => 'Няма промяна по {0}',
'P001-063' => 'Броят на падежите от тип нормална дължима премия не може да е по-голям от {0}!',
'P001-064' => 'Час начало не може да бъде по-малък от {0}!',
'P001-065' => 'Липсва файлът {0}',
'P001-066' => 'Не може да бъде извършен печат!',
'P001-067' => 'Дата начало не може да бъде по-малка от {0}!',
'P001-068' => 'Полица на МПС с предназначение "{0}" се издава / редактира само в офисите на ОЗК-Застраховане АД!',
'P001-069' => 'Има разлика между Премия и Платена премия по стикер!',
'P001-070' => 'Има разлика между подадените суми и сумите по тарифа за полета: {0}!',
'P001-071' => 'Полетата {0} и {1} трябва да са със стойност 0.00!',
'P001-072' => 'Срокът на валидност на полицата не може да е по-малък от 30 дни!',
'P001-073' => 'Клиентът трябва да е чуждестранно лице!',
'P001-074' => 'Маркер "Корпоративен клиент" е достъпен само за клиент тип гражданин, възраст над {0} години или фирми!',
'P001-076' => 'За избраната стойност в поле {0} не може да въвеждате сертификат!',
'P001-077' => '{0}: Има разлика между подадените дати и датите по план!',
'P001-078' => '{0}: Има разлика между броя на подадените падежи и броя на падежите по план!',
'P001-079' => 'Има предходни падежи с неиздадени сметки за полица {0}!',
'P001-080' => 'Не може да издадете {0} за полица {1} извън установения срок от 15 дни!',
'P001-081' => 'По полицата вече има записан активен безплатен сертификат!',
'P001-082' => 'За издаване на сертификат е необходимо всички вноски по полицата да са платени!',
'P001-083' => 'Има незаписани обекти!',
'P001-084' => 'Не е записан поне един активен обект!',
'P001-085' => 'Не е избран лимит за покритие {0}!',
'P001-086' => 'Дължимата премия не може да е по-малка от 60% от застрахователна премия!',
'P001-087' => 'Kлиентът трябва да е от тип "фирма" или "гражданин"!',
'P001-088' => '{0} може да е от {1} до {2}!',
'P001-089' => 'Не може да се запише полица с повече от един активен обект, ако е маркирано поле "Мултитрип"!',
'P001-090' => 'Има промяна в тарифообразуващите полета! Моля, преизчислете обектите!',
'P001-091' => 'Има разлика между броя на въведените обекти и броя лица в група!',
'P001-092' => '{0} не може да е по-голяма от {1}!',
'P001-094' => 'Няма полица с номер {0}',
'P001-095' => 'Полицата не може да се заключи',
'P001-096' => 'Некоректни параметри',
'P001-097' => 'Некоректна сума',
'P001-098' => 'Броят на подадените стикери трябва да е 1',
'P001-099' => 'Грешка във файла {0} в клетка(и): {1}',
'P001-100' => 'Грешен тип данни!',
'P001-101' => 'По полицата е възможно да се избират само лица тип "Гражданин"!',
'P001-102' => 'Недопустим срок на валидност на полицата!',
'P001-103' => 'Броят на подадените сертификати трябва да е 1',
'P001-104' => '{0}: Невалидна дължина, максимум {1} символа!',
'P001-105' => 'Има промяна в тарифообразуващите полета! Моля, преизчислете премията!',
'P001-106' => 'Датата Начало трябва да е след дата издаване',
'P001-107' => 'От дата на анекс не може да е преди дата на подписване на анекса',
'P001-108' => 'Има промяна в тарифообразуващите полета!',
'P001-109' => 'Агенция издател/Агент не съвпадат с тези от абонаментната полица',
'P001-110' => '{0}: Невалидна дължина, различна от {1} символа!',
'P001-111' => '{0}: сумата може да се променя само в посока увеличение с максимум {1}{2}!',
'P001-112' => 'Брой вноски не може да бъде различен от {0}!',
'P001-113' => 'Сумата от всички отстъпки не може да надвишава {0}%!',
'P001-114' => '{0} не може да е различно от {1}!',
'P001-115' => '{0} не може да е по-малка от {1}!',
'P001-116' => 'Срокът на валидност на полицата трябва да съвпада със срока на валидност на временните/транзитните табели!',
'P001-117' => 'Срокът на валидност на полицата трябва да е 1 година!',
'P001-118' => 'Срокът на валидност на временните/транзитните табели e максимум {0} дни!',
'P001-119' => 'Срокът на валидност на полицата трябва да съвпада със срока на валидност на временните табели!',
'P001-120' => 'Изборът на стойност {0} в поле {1} не е позволен!',
'P001-121' => 'Няма неплатени падежи по полица номер {0}',
'P001-122' => 'Премията по падеж тип стикер може да бъде {0} или {1}!',
'P001-123' => 'Не може да има отрицателни суми!',
'P001-124' => 'Не може да се запише {0} с премия = 0.00!',
'P001-125' => 'Не са намерени данни за клиент тип "гражданин" с ЕГН {0}!',
'P001-126' => 'Дата на анулиране на полицата не може да е преди дата на подписване на анекса!',
'P001-127' => 'Валиден до не може да надвишава срока, за който е платена премията!',
'P001-128' => 'Регистрирането на стикер или сертификат е задължително!',
'P001-129' => 'По полицата е възможно да се избират само лица тип "Фирма"!',
'P001-130' => 'Секцията е задължителна за попълване!',
'P001-131' => 'Изборът на стойност {0} в поле {1} не е позволен, ако е попълнено поле {2}!',
'P001-132' => 'Дата на сключване не може да е различна от текущата дата!',
'P001-133' => 'Сумата за възстановяване не може да надвишава платената премия по полицата!',
'P001-134' => 'Генералната полица не е активна!',
'P001-135' => 'Генералната полица не е намерена!',
'P001-136' => '{0} не може да е по-голямо от {1}!',
'P001-137' => 'За МПС с рама {0} и вид регистрация {1} вече има издадена полица ГО!',
'P001-138' => 'Срокът на валидност на полицата не може да е по-голям от {0} дни!',
'P001-139' => 'Максималният срок, за който може да бъде сключена застраховката за МПС с рама {0}, е {1} дни!',
'P001-140' => 'Дата сключване на анекса не може да е преди дата на прекратяване на полицата',
'P001-141' => 'Към генерална полица {0} има издаден отчет в статус чернова!',
'P001-142' => 'Дата на анулиране на полицата не може да бъде по-малка от Дата на сключване на последния месечен отчет ({0})!',
'P001-143' => 'Началната дата и час на СЗК не може да са преди датата и часа на приложния сървър.',
'P001-144' => 'Не може да има няколко падежа от тип "{0}" за една и съща дата - {1}',
'P001-145' => 'Срокът на валидност на полицата трябва да е 30, 90, 180 дни или 1г.!',
'P001-146' => 'Без идентификатор е допустимо само за чуждестранни лица!',
'P001-147' => 'Нямате право за издаване на електронна сметка с Вид плащане "По банкова сметка".',
'P001-148' => 'По полица номер {0} не е намерен анекс прекратяване!',
'P001-149' => 'Не е намерена заявка Бонус-Малус за МПС с ДКН {0} и Номер на СРМПС {1}!',
'P001-150' => 'Периодът на валидност на полицата не отговаря на избрания срок!',
'P001-151' => 'Промяната на поле {0} не е позволена!',
'P001-152' => 'Данните в поле {0} не съвпадат с тези от заявката Бонус-Малус',
];
/**
* Constructor
*
* @param LoggerInterface $logger
*/
public function __construct(
private readonly LoggerInterface $logger,
)
{
}
/**
* @param ResponseEvent $event
* @throws Exception
*/
public function onClientResponse(ResponseEvent $event)
{
$response = $event->getResponse();
if (!($response instanceof ResponseInterface)) {
throw new UnexpectedValueException('Response type is not a ResponseInterface');
}
$this->logger->info('Request ID: ' . $response->getReqID());
$status = $response->getStatus();
$statusCode = $status->getStatus();
if ($statusCode === 0) {
return;
}
throw new Exception($status->getInfo(), $statusCode);
}
/**
* {@inheritdoc}
* @noinspection PhpArrayShapeAttributeCanBeAddedInspection
*/
public static function getSubscribedEvents(): array
{
return [
ResponseEvent::class => 'onClientResponse',
];
}
}