src/InsuranceCompany/OZK/SOAP/Subscriber/ErrorHandlingSubscriber.php line 207

Open in your IDE?
  1. <?php
  2. namespace App\InsuranceCompany\OZK\SOAP\Subscriber;
  3. use App\InsuranceCompany\OZK\Exception\Exception;
  4. use App\InsuranceCompany\OZK\SOAP\Interfaces\ResponseInterface;
  5. use Phpro\SoapClient\Event\ResponseEvent;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use UnexpectedValueException;
  9. /**
  10.  * Class ErrorHandlingSubscriber
  11.  */
  12. class ErrorHandlingSubscriber implements EventSubscriberInterface
  13. {
  14.     const ERROR_CODES = [
  15.         'O001-001' => 'Грешка от DB',
  16.         'U001-001' => 'Грешен потребител/парола/сертификат',
  17.         'U001-002' => 'Неконфигуриран потребител',
  18.         'S001-001' => 'Няма номенклатура {0}',
  19.         'S001-002' => 'Няма заявка с ID={0} или е грешен вид или е от друг потребител',
  20.         'S001-003' => 'Оригиналната заявка е завършила с грешка',
  21.         'S001-004' => 'Невалидна стойност {0} в {1}',
  22.         'S001-005' => '{0}: Полето е задължително.',
  23.         'S001-006' => '{2}: Невалидна стойност - трябва да е между {0} и {1}.',
  24.         'S001-007' => 'WWWIns е в административен режим',
  25.         'S001-008' => 'Невалидна заявка: очаква се "{0}", получена "{1}" / "{2}" / "{3}"',
  26.         'S001-009' => '{0} или {1} - едно от полетата е задължително.',
  27.         'S001-010' => '{0}: Полето е забранено.',
  28.         'W001-001' => 'Непозволена операция',
  29.         'W001-002' => 'Невалиден xml: {0}',
  30.         'W001-003' => 'xml warnings: {0}',
  31.         'W001-004' => 'Предупреждение от DB',
  32.         'P001-001' => 'Грешка при запис на полица: {0}',
  33.         'P001-002' => 'Няма отговор от ЕИСОУКР',
  34.         'P001-003' => 'Грешка при печат на {0}: {1}',
  35.         'P001-004' => 'Датата на сключване на полицата не може да е по-голяма от Oracle_CurrDate',
  36.         'P001-005' => 'Датата Начало не трябва да е след датата на сключване + 6 месеца',
  37.         'P001-006' => 'Датата Начало не трябва да е преди датата сключване',
  38.         'P001-007' => 'Датата Край не трябва да е преди Начало',
  39.         'P001-008' => 'Невалиден час {0}',
  40.         'P001-009' => 'Часът за Край не трябва да е преди часът за Начало',
  41.         'P001-010' => 'Агенция издател/Агент не съвпадат с избраните в профила',
  42.         'P001-011' => 'Агент {0} не е намерен',
  43.         'P001-012' => 'Агент {0}({1}) е неактивен',
  44.         'P001-013' => 'Дата край - Дата начало не може да е по голямо от 366 дни',
  45.         'P001-014' => 'Не е намерена групова полица номер: {0}!',
  46.         'P001-015' => 'Клиента в груповата полица не съвпада!',
  47.         'P001-016' => 'Невалидно ЕНЧ!',
  48.         'P001-017' => 'Невалидно ЕГН!',
  49.         'P001-018' => 'Невалиден Булстат!',
  50.         'P001-019' => 'Невалиден E-mail!',
  51.         'P001-020' => 'Непозволени символи в поле {0}',
  52.         'P001-021' => 'Обичаен водач не може да е юридическо лице',
  53.         'P001-022' => 'Брой вноски не може да е по голямо от 1.',
  54.         'P001-023' => 'Дата Валиден до не може да бъде по-малка от дата Даден на',
  55.         'P001-024' => '{0}: {1} не може да е извън периода на валидност на полицата',
  56.         'P001-025' => '{0}: Валиден до не може да е извън периода на валидност на полицата',
  57.         'P001-026' => 'Не може да се регистрира стикер с номер = на номер на друг активен стикер по полицата',
  58.         'P001-027' => 'Общо цялата премия по падежи от тип Стикери не може да бъде по голяма от 20.00',
  59.         'P001-028' => 'Не е попълнен поне един активен стикер',
  60.         'P001-029' => 'Сертификат ЗК може да се въведе на застрахованите МПС-та, само ако \'Район на движение\' = ЕС',
  61.         'P001-030' => 'Не може да се регистрира сертификат с номер = на номер на друг активен сертификат  по полицата',
  62.         'P001-031' => 'Не може да има падеж с по-ранна дата от датата на сключване на полицата',
  63.         'P001-032' => 'Не може да има падеж с дата по-късна от дата край на полицата',
  64.         'P001-033' => 'Премията не може да бъде по-малка от платената премия',
  65.         'P001-034' => 'Има неравнение по плана на дължимите премии: {0}',
  66.         'P001-035' => 'Не може да се запише план с разлика по ГФ',
  67.         'P001-036' => 'Не се позволява разминаване във валутите на плана',
  68.         'P001-037' => 'Има неравнение по плана на дължим данък: {0}',
  69.         'P001-038' => 'Година на производство трябва да е периода 1900г. до текуща година',
  70.         'P001-039' => '{0} - непозволени символи',
  71.         'P001-040' => 'Места от досие на МПС трябва да бъде различно от 0 или поле По застраховани места трябва да бъде различно от 0',
  72.         'P001-041' => 'Застр.места не може да е повече от брой места записани в застрахованото МПС',
  73.         'P001-042' => 'Премия трябва да е по-голяма от 1 и по-малка от 9999999',
  74.         'P001-043' => 'Не може да се запише план с разлика по {0}',
  75.         'P001-044' => 'Дата начало е по-голяма от {0} дни след текуща дата',
  76.         'P001-045' => 'Час Начало не може да е по-малко от час на сървър +1{0}',
  77.         'P001-046' => 'МПС с буквен код на регистрационния номер "С" и "СА"”, не може да се запише в друга зона освен Зона 1',
  78.         'P001-047' => 'МПС с буквен код на регистрационния номер "А","B","РВ", не може да се запише в друга зона освен Зона 2',
  79.         'P001-048' => 'МПС с този регистрационния номер не може да се запише в друга зона освен Зона 3',
  80.         'P001-049' => '{0} не може да надвишава {1}%',
  81.         'P001-050' => 'Брой вноски не може да бъде по голямо от 4',
  82.         'P001-051' => 'Невалиден номер на анекс',
  83.         'P001-052' => 'От дата на анекс не може да е след До дата',
  84.         'P001-053' => 'От дата на анекс не може да е извън периода на валидност на полицата',
  85.         'P001-054' => 'Дата сключване на анекса не може да е преди дата сключване на полицата',
  86.         'P001-055' => 'Датата на анулиране на полицата не може да е извън периода на валидност на полицата.',
  87.         'P001-056' => 'Консумирана премия % не може да надвишава 100%',
  88.         'P001-057' => 'Други удръжки % не може да надвишава 100%',
  89.         'P001-058' => 'Консумираната премия не може да е по-голяма от сумата по план',
  90.         'P001-059' => 'Други удръжки не може да е по голяма от сумата по план',
  91.         'P001-060' => 'Консумираната премия не може да е по-голяма от платената премия',
  92.         'P001-061' => 'За възстановяване не може да е по-голяма от платената премия',
  93.         'P001-062' => 'Няма промяна по {0}',
  94.         'P001-063' => 'Броят на падежите от тип нормална дължима премия не може да е по-голям от {0}!',
  95.         'P001-064' => 'Час начало не може да бъде по-малък от {0}!',
  96.         'P001-065' => 'Липсва файлът {0}',
  97.         'P001-066' => 'Не може да бъде извършен печат!',
  98.         'P001-067' => 'Дата начало не може да бъде по-малка от {0}!',
  99.         'P001-068' => 'Полица на МПС с предназначение "{0}" се издава / редактира само в офисите на ОЗК-Застраховане АД!',
  100.         'P001-069' => 'Има разлика между Премия и Платена премия по стикер!',
  101.         'P001-070' => 'Има разлика между подадените суми и сумите по тарифа за полета: {0}!',
  102.         'P001-071' => 'Полетата {0} и {1} трябва да са със стойност 0.00!',
  103.         'P001-072' => 'Срокът на валидност на полицата не може да е по-малък от 30 дни!',
  104.         'P001-073' => 'Клиентът трябва да е чуждестранно лице!',
  105.         'P001-074' => 'Маркер "Корпоративен клиент" е достъпен само за клиент тип гражданин, възраст над {0} години или фирми!',
  106.         'P001-076' => 'За избраната стойност в поле {0} не може да въвеждате сертификат!',
  107.         'P001-077' => '{0}: Има разлика между подадените дати и датите по план!',
  108.         'P001-078' => '{0}: Има разлика между броя на подадените падежи и броя на падежите по план!',
  109.         'P001-079' => 'Има предходни падежи с неиздадени сметки за полица {0}!',
  110.         'P001-080' => 'Не може да издадете {0} за полица {1} извън установения срок от 15 дни!',
  111.         'P001-081' => 'По полицата вече има записан активен безплатен сертификат!',
  112.         'P001-082' => 'За издаване на сертификат е необходимо всички вноски по полицата да са платени!',
  113.         'P001-083' => 'Има незаписани обекти!',
  114.         'P001-084' => 'Не е записан поне един активен обект!',
  115.         'P001-085' => 'Не е избран лимит за покритие {0}!',
  116.         'P001-086' => 'Дължимата премия не може да е по-малка от 60% от застрахователна премия!',
  117.         'P001-087' => 'Kлиентът трябва да е от тип "фирма" или "гражданин"!',
  118.         'P001-088' => '{0} може да е от {1} до {2}!',
  119.         'P001-089' => 'Не може да се запише полица с повече от един активен обект, ако е маркирано поле "Мултитрип"!',
  120.         'P001-090' => 'Има промяна в тарифообразуващите полета! Моля, преизчислете обектите!',
  121.         'P001-091' => 'Има разлика между броя на въведените обекти и броя лица в група!',
  122.         'P001-092' => '{0} не може да е по-голяма от {1}!',
  123.         'P001-094' => 'Няма полица с номер {0}',
  124.         'P001-095' => 'Полицата не може да се заключи',
  125.         'P001-096' => 'Некоректни параметри',
  126.         'P001-097' => 'Некоректна сума',
  127.         'P001-098' => 'Броят на подадените стикери трябва да е 1',
  128.         'P001-099' => 'Грешка във файла {0} в клетка(и): {1}',
  129.         'P001-100' => 'Грешен тип данни!',
  130.         'P001-101' => 'По полицата е възможно да се избират само лица тип "Гражданин"!',
  131.         'P001-102' => 'Недопустим срок на валидност на полицата!',
  132.         'P001-103' => 'Броят на подадените сертификати трябва да е 1',
  133.         'P001-104' => '{0}: Невалидна дължина, максимум {1} символа!',
  134.         'P001-105' => 'Има промяна в тарифообразуващите полета! Моля, преизчислете премията!',
  135.         'P001-106' => 'Датата Начало трябва да е след дата издаване',
  136.         'P001-107' => 'От дата на анекс не може да е преди дата на подписване на анекса',
  137.         'P001-108' => 'Има промяна в тарифообразуващите полета!',
  138.         'P001-109' => 'Агенция издател/Агент не съвпадат с тези от абонаментната полица',
  139.         'P001-110' => '{0}: Невалидна дължина, различна от {1} символа!',
  140.         'P001-111' => '{0}: сумата може да се променя само в посока увеличение с максимум {1}{2}!',
  141.         'P001-112' => 'Брой вноски не може да бъде различен от {0}!',
  142.         'P001-113' => 'Сумата от всички отстъпки не може да надвишава {0}%!',
  143.         'P001-114' => '{0} не може да е различно от {1}!',
  144.         'P001-115' => '{0} не може да е по-малка от {1}!',
  145.         'P001-116' => 'Срокът на валидност на полицата трябва да съвпада със срока на валидност на временните/транзитните табели!',
  146.         'P001-117' => 'Срокът на валидност на полицата трябва да е 1 година!',
  147.         'P001-118' => 'Срокът на валидност на временните/транзитните табели e максимум {0} дни!',
  148.         'P001-119' => 'Срокът на валидност на полицата трябва да съвпада със срока на валидност на временните табели!',
  149.         'P001-120' => 'Изборът на стойност {0} в поле {1} не е позволен!',
  150.         'P001-121' => 'Няма неплатени падежи по полица номер {0}',
  151.         'P001-122' => 'Премията по падеж тип стикер може да бъде {0} или {1}!',
  152.         'P001-123' => 'Не може да има отрицателни суми!',
  153.         'P001-124' => 'Не може да се запише {0} с премия = 0.00!',
  154.         'P001-125' => 'Не са намерени данни за клиент тип "гражданин" с ЕГН {0}!',
  155.         'P001-126' => 'Дата на анулиране на полицата не може да е преди дата на подписване на анекса!',
  156.         'P001-127' => 'Валиден до не може да надвишава срока, за който е платена премията!',
  157.         'P001-128' => 'Регистрирането на стикер или сертификат е задължително!',
  158.         'P001-129' => 'По полицата е възможно да се избират само лица тип "Фирма"!',
  159.         'P001-130' => 'Секцията е задължителна за попълване!',
  160.         'P001-131' => 'Изборът на стойност {0} в поле {1} не е позволен, ако е попълнено поле {2}!',
  161.         'P001-132' => 'Дата на сключване не може да е различна от текущата дата!',
  162.         'P001-133' => 'Сумата за възстановяване не може да надвишава платената премия по полицата!',
  163.         'P001-134' => 'Генералната полица не е активна!',
  164.         'P001-135' => 'Генералната полица не е намерена!',
  165.         'P001-136' => '{0} не може да е по-голямо от {1}!',
  166.         'P001-137' => 'За МПС с рама {0} и вид регистрация {1} вече има издадена полица ГО!',
  167.         'P001-138' => 'Срокът на валидност на полицата не може да е по-голям от {0} дни!',
  168.         'P001-139' => 'Максималният срок, за който може да бъде сключена застраховката за МПС с рама {0}, е {1} дни!',
  169.         'P001-140' => 'Дата сключване на анекса не може да е преди дата на прекратяване на полицата',
  170.         'P001-141' => 'Към генерална полица {0} има издаден отчет в статус чернова!',
  171.         'P001-142' => 'Дата на анулиране на полицата не може да бъде по-малка от Дата на сключване на последния месечен отчет ({0})!',
  172.         'P001-143' => 'Началната дата и час на СЗК не може да са преди датата и часа на приложния сървър.',
  173.         'P001-144' => 'Не може да има няколко падежа от тип "{0}" за една и съща дата - {1}',
  174.         'P001-145' => 'Срокът на валидност на полицата трябва да е 30, 90, 180 дни или 1г.!',
  175.         'P001-146' => 'Без идентификатор е допустимо само за чуждестранни лица!',
  176.         'P001-147' => 'Нямате право за издаване на електронна сметка с Вид плащане "По банкова сметка".',
  177.         'P001-148' => 'По полица номер {0} не е намерен анекс прекратяване!',
  178.         'P001-149' => 'Не е намерена заявка Бонус-Малус за МПС с ДКН {0} и Номер на СРМПС {1}!',
  179.         'P001-150' => 'Периодът на валидност на полицата не отговаря на избрания срок!',
  180.         'P001-151' => 'Промяната на поле {0} не е позволена!',
  181.         'P001-152' => 'Данните в поле {0} не съвпадат с тези от заявката Бонус-Малус',
  182.     ];
  183.     /**
  184.      * Constructor
  185.      *
  186.      * @param LoggerInterface $logger
  187.      */
  188.     public function __construct(
  189.         private readonly LoggerInterface $logger,
  190.     )
  191.     {
  192.     }
  193.     /**
  194.      * @param ResponseEvent $event
  195.      * @throws Exception
  196.      */
  197.     public function onClientResponse(ResponseEvent $event)
  198.     {
  199.         $response $event->getResponse();
  200.         if (!($response instanceof ResponseInterface)) {
  201.             throw new UnexpectedValueException('Response type is not a ResponseInterface');
  202.         }
  203.         $this->logger->info('Request ID: ' $response->getReqID());
  204.         $status $response->getStatus();
  205.         $statusCode $status->getStatus();
  206.         if ($statusCode === 0) {
  207.             return;
  208.         }
  209.         throw new Exception($status->getInfo(), $statusCode);
  210.     }
  211.     /**
  212.      * {@inheritdoc}
  213.      * @noinspection PhpArrayShapeAttributeCanBeAddedInspection
  214.      */
  215.     public static function getSubscribedEvents(): array
  216.     {
  217.         return [
  218.             ResponseEvent::class => 'onClientResponse',
  219.         ];
  220.     }
  221. }